<?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>230256</bug_id>
          
          <creation_ts>2021-09-14 05:36:27 -0700</creation_ts>
          <short_desc>[GTK][a11y] Add initial implementation of accessible interface when building with ATSPI</short_desc>
          <delta_ts>2021-10-01 03:03:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>230255</dependson>
          <blocked>230253</blocked>
    
    <blocked>230259</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1793260</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-09-14 05:36:27 -0700</bug_when>
    <thetext>Basic implementation of accessible interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798850</commentid>
    <comment_count>1</comment_count>
      <attachid>439730</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-09-30 06:20:53 -0700</bug_when>
    <thetext>Created attachment 439730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1798868</commentid>
    <comment_count>2</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2021-09-30 07:55:59 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; Created attachment 439730 [details]
&gt; Patch

The core changes look good. I leave the ATSPI changes to you :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799002</commentid>
    <comment_count>3</comment_count>
      <attachid>439730</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-09-30 13:10:23 -0700</bug_when>
    <thetext>Comment on attachment 439730
Patch

I have one suggestion below. Nice that this adds many tests, good work
with that!

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

&gt; Source/WebCore/accessibility/atspi/AccessibilityAtspi.cpp:175
&gt; +static const RoleNameEntry roleNames[] = {

Given that AccessibilityRole is an enum, it seems quite wasteful to do
a linear lookup every time that the mapping has to be done. Ideally we
would use the AccsessibilityRole::Foo values as indexes into an array,
which would be trivial in but this is one of the things where C++ gets
in the way

The next best thing we can do without relying on ugly casts and that
the compiler supports C99 designated initializers while parsing C++
is using WTF::SortedArrayMap, which does binary search over the keys:

   struct RoleNameEntry {
       const char *name;
       const char *localizedName;
   };

   static constexpr std::pair&lt;AccessibilityRole, RoleNameEntry&gt; roleNamesList[] = {
       { AccessibilityRole::Unknown, { &quot;unknown&quot;, N_(&quot;unknown&quot;) } },
       // ... more entries ...
   };

Then for looking up items:

   const char* AccessibilityAtspi::localizedRoleName(AccessibilityRole role) {
       static constexpr SortedArrayMap roleNames { roleNamesList };
       if (auto entry = roleNames.tryGet(role))
           return entry-&gt;localizedName;
       return _(&quot;unknown&quot;);
   }

This at least will be O(log n) instead of O(n) for each lookup.

(Or, if we really would need the speed, using macros to generate a big switch
statement—JSC has some of that :])</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799204</commentid>
    <comment_count>4</comment_count>
      <attachid>439831</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-01 01:40:30 -0700</bug_when>
    <thetext>Created attachment 439831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799217</commentid>
    <comment_count>5</comment_count>
      <attachid>439831</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-10-01 02:53:48 -0700</bug_when>
    <thetext>Comment on attachment 439831
Patch

Thanks for updating the patch, Carlos :)

The style checker definitely seems like a false positive,
so I think we are good in that regard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799220</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-10-01 03:03:35 -0700</bug_when>
    <thetext>Committed r283361 (242370@main): &lt;https://commits.webkit.org/242370@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439730</attachid>
            <date>2021-09-30 06:20:53 -0700</date>
            <delta_ts>2021-10-01 01:40:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-accessible.diff</filename>
            <type>text/plain</type>
            <size>130625</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMDI2ZjgyZDgxMzUuLjMxMGU1ZTQ1MTExOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDg1IEBACisyMDIxLTA5LTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiBhY2Nlc3NpYmxlIGludGVyZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUg
Y29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpyb2xlUGxhdGZvcm1TdHJp
bmcgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0
c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBsYXRmb3JtSGFuZGxlRm9j
dXNlZFVJRWxlbWVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
ZGV0YWNoV3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0
c3BpOjpyZWdpc3RlclJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3Bp
Ojp1bnJlZ2lzdGVyUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnJlZ2lzdGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
dW5yZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6Omxv
Y2FsaXplZFJvbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
ZW5zdXJlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjphZGRB
Y2Nlc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6cmVtb3Zl
QWNjZXNzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5OjpjcmVhdGVQbGF0
Zm9ybVJvbGVNYXApOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eUF0c3BpLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGlFbnVtcy5oOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OmludGVyZmFjZXNGb3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjYWNoZURlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVsZW1lbnREZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6YXRzcGlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnNldFJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpyb290IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnBhcmVudFJlZmVyZW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkQ291
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpj
aGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6Y2hpbGRyZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjppbmRleEluUGFyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6aW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om5hbWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkZXNjcmlwdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbmNsdWRlT3JpZW50YXRpb25TdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRyaWJ1dGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRB
dHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6cmVsYXRpb25NYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpidWlsZFJlbGF0aW9uU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZhY2VzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VyaWFsaXplIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBZGRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkUmVtb3Zl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb2xl
TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmxvY2FsaXplZFJvbGVOYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09i
amVjdCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlSb290QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNw
aTo6dW5yZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9v
dEF0c3BpOjpjaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9v
dEF0c3BpOjpzZXJpYWxpemUgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL2F0c3BpL0FYSXNvbGF0ZWRPYmplY3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWElzb2xhdGVkT2JqZWN0OjphdHRhY2hQbGF0Zm9ybVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKToKKwogMjAyMS0w
OS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4IGFmdGVyIHIyODMzMDQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKaW5kZXggNjY2YTM1YjUzYTRiLi40ZDQzOWQ0ODU3YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCkBAIC01NSw2ICs1NSw3IEBAIGVuZGlmICgpCiAKIGxpc3QoQVBQRU5EIFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eUF0c3BpLmgKKyAgICBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlBdHNwaUVudW1zLmgKICAgICBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaS5oCiAgICAgYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRl
eCA0MzlmNmI0ZTc5YmQuLmY2YTNmNjIzMGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKLSNpZiAhUExB
VEZPUk0oQ09DT0EpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEFUU1BJKQogICAgIHZv
aWQgZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5
cGUpOwogI2VuZGlmCiBwcml2YXRlOgpAQCAtNTg0LDcgKzU4NCw3IEBAIGlubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OmRlZmVyUmVjb21wdXRlSXNJZ25vcmVkKEVsZW1lbnQqKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dENoYW5nZWRJZk5lZWRlZChOb2RlKikgeyB9
CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2Vk
SWZOZWVkZWQoRWxlbWVudCYpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGVmZXJU
ZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCYsIGNvbnN0IFN0cmluZyYpIHsgfQotI2lmICFQTEFURk9STShDT0NPQSkKKyNp
ZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoQVRTUEkpCiBpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjpkZXRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCosIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50
VHlwZSkgeyB9CiAjZW5kaWYKIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZvY3VzTW9kYWxO
b2RlVGltZXJGaXJlZCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAyNzBiYmQ5ZDhjYTguLjUz
MDI1M2RmYmM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTIyMjIsNyArMjIyMiw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3QKICAg
ICBpZiAoaXNQcm9ncmVzc0luZGljYXRvcigpIHx8IGlzU2xpZGVyKCkgfHwgaXNTY3JvbGxiYXIo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBVU0UoQVRLKQorI2lmIFVTRShBVEspIHx8
IFVTRShBVFNQSSkKICAgICAvLyBJbiBBVEssIGlucHV0IHR5cGVzIHdoaWNoIHN1cHBvcnQgYXJp
YS1yZWFkb25seSBhcmUgdHJlYXRlZCBhcyBoYXZpbmcgYQogICAgIC8vIHNldHRhYmxlIHZhbHVl
IGlmIHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIHdpZGdldCdzIHZhbHVlIG9yIGl0cyBzdGF0ZS4K
ICAgICBpZiAoc3VwcG9ydHNSZWFkT25seSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMGYwMTZjNDUzMjY1Li41
MDY5NGE5OGQzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjI3Miw4ICsyMjcyLDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAogI2lmICFQTEFURk9STShNQUMp
CiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6cm9sZVBsYXRmb3JtU3RyaW5nKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IGluIG90aGVyIHBsYXRmb3Jtcy4KLSAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJvbGVUb1BsYXRmb3JtU3Ry
aW5nKHJvbGVWYWx1ZSgpKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJvbGVQ
bGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKQEAgLTM2NDksNyArMzY0OCw3IEBAIFN0cmluZyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpvdXRlckhUTUwoKSBjb25zdAogCiBuYW1lc3BhY2UgQWNjZXNz
aWJpbGl0eSB7CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShNQUMpICYmICFV
U0UoQVRTUEkpCiAvLyBGSVhNRTogaW1wbGVtZW50IGluIG90aGVyIHBsYXRmb3Jtcy4KIFBsYXRm
b3JtUm9sZU1hcCBjcmVhdGVQbGF0Zm9ybVJvbGVNYXAoKSB7IHJldHVybiBQbGF0Zm9ybVJvbGVN
YXAoKTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAKaW5kZXggNmJlNGMzOTlmOGRlLi40YTQ3
NmQ3ODI3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QVhPYmplY3RDYWNoZUF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAKQEAgLTI0LDE2ICsyNCwyOCBAQAogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBheE9iamVjdCwgQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlKQotewotfQotCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBheE9iamVjdCkKIHsKKyAgICBhdXRv
IHdyYXBwZXIgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNyZWF0ZShheE9iamVjdCk7Cisg
ICAgYXhPYmplY3QtPnNldFdyYXBwZXIod3JhcHBlci5wdHIoKSk7CisKKyAgICBhdXRvKiBheFBh
cmVudCA9IGF4T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBpZiAoIWF4UGFy
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBheFBhcmVudFdyYXBwZXIgPSBheFBh
cmVudC0+d3JhcHBlcigpOworICAgIGlmICghYXhQYXJlbnRXcmFwcGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICB3cmFwcGVyLT5zZXRQYXJlbnQoYXhQYXJlbnRXcmFwcGVyKTsKIH0KIAogdm9p
ZCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybVBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCkKQEAg
LTU2LDYgKzY4LDEyMSBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OnVzZWRPbkFYVGhyZWFkKCkKIAog
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0
KiBjb3JlT2JqZWN0LCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiB7CisgICAgUkVMRUFT
RV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0
LT53cmFwcGVyKCk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBz
d2l0Y2ggKG5vdGlmaWNhdGlvbikgeworICAgIGNhc2UgQVhDaGVja2VkU3RhdGVDaGFuZ2VkOgor
ICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCBjb3JlT2JqZWN0
LT5pc1N3aXRjaCgpKQorICAgICAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJjaGVja2Vk
IiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFY
U2VsZWN0ZWRTdGF0ZUNoYW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgic2Vs
ZWN0ZWQiLCBjb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQ6CisgICAgY2FzZSBBWE1lbnVMaXN0VmFsdWVD
aGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVmFsdWVDaGFuZ2VkOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQ6CisgICAgICAgIHdyYXBw
ZXItPnN0YXRlQ2hhbmdlZCgiaW52YWxpZC1lbnRyeSIsIGNvcmVPYmplY3QtPmludmFsaWRTdGF0
dXMoKSAhPSAiZmFsc2UiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEVsZW1lbnRCdXN5
Q2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJidXN5IiwgY29yZU9iamVj
dC0+aXNCdXN5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYQ3VycmVudFN0YXRlQ2hh
bmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFJvd0V4cGFuZGVkOgorICAgICAgICB3
cmFwcGVyLT5zdGF0ZUNoYW5nZWQoImV4cGFuZGVkIiwgdHJ1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhSb3dDb2xsYXBzZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgi
ZXhwYW5kZWQiLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhFeHBhbmRlZENo
YW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZXhwYW5kZWQiLCBjb3JlT2Jq
ZWN0LT5pc0V4cGFuZGVkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRGlzYWJsZWRT
dGF0ZUNoYW5nZWQ6IHsKKyAgICAgICAgYm9vbCBlbmFibGVkU3RhdGUgPSBjb3JlT2JqZWN0LT5p
c0VuYWJsZWQoKTsKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJlbmFibGVkIiwgZW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJzZW5zaXRpdmUiLCBl
bmFibGVkU3RhdGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBWFByZXNzZWRT
dGF0ZUNoYW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgicHJlc3NlZCIsIGNv
cmVPYmplY3QtPmlzUHJlc3NlZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFJlYWRP
bmx5U3RhdHVzQ2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJyZWFkLW9u
bHkiLCBjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBWFJlcXVpcmVkU3RhdHVzQ2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3Rh
dGVDaGFuZ2VkKCJyZXF1aXJlZCIsIGNvcmVPYmplY3QtPmlzUmVxdWlyZWQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZDoKKyAgICAgICAgaWYg
KGF1dG8qIGRlc2NlbmRhbnQgPSBjb3JlT2JqZWN0LT5hY3RpdmVEZXNjZW5kYW50KCkpCisgICAg
ICAgICAgICBwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKG51bGxwdHIsIGRl
c2NlbmRhbnQtPm5vZGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhBcmlhQXR0cmli
dXRlQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEFyaWFSb2xlQ2hhbmdlZDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBWENoaWxkcmVuQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYRnJhbWVMb2FkQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhJZEF0
dHJpYnV0ZUNoYW5nZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhJbWFnZU92ZXJsYXlD
aGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYTGFuZ3VhZ2VDaGFuZ2VkOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFYTGF5b3V0Q29tcGxldGU6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhMb2FkQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhOZXdE
b2N1bWVudExvYWRDb21wbGV0ZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFBhZ2VTY3Jv
bGxlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFNlbGVjdGVkVGV4dENoYW5nZWQ6Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhTY3JvbGxlZFRvQW5jaG9yOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFYTGl2ZVJlZ2lvbkNyZWF0ZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQVhMaXZlUmVnaW9uQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE1lbnVM
aXN0SXRlbVNlbGVjdGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYTWVudUNsb3NlZDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE1lbnVPcGVuZWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhSb3dDb3VudENoYW5nZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhQ
cmVzc0RpZFN1Y2NlZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhQcmVzc0RpZEZhaWw6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhTb3J0RGlyZWN0aW9uQ2hhbmdlZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRDaGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYRHJhZ2dpbmdTdGFydGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dp
bmdFbmRlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWERyYWdnaW5nRW50ZXJlZERyb3Ba
b25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dpbmdEcm9wcGVkOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZv
cm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRleHRDaGFuZ2Ug
dGV4dENoYW5nZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpCkBAIC02OCw2
ICsxOTUsMTQgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudFBsYXRmb3Jt
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG8KIAogdm9pZCBBWE9iamVjdENhY2hl
OjpwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKE5vZGUqIG9sZEZvY3VzZWRO
b2RlLCBOb2RlKiBuZXdGb2N1c2VkTm9kZSkKIHsKKyAgICBpZiAoYXV0byogYXhPYmplY3QgPSBn
ZXQob2xkRm9jdXNlZE5vZGUpKSB7CisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gYXhPYmpl
Y3QtPndyYXBwZXIoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZm9jdXNl
ZCIsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUo
bmV3Rm9jdXNlZE5vZGUpKSB7CisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gYXhPYmplY3Qt
PndyYXBwZXIoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZm9jdXNlZCIs
IHRydWUpOworICAgIH0KIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVTY3JvbGxlZFRv
QW5jaG9yKGNvbnN0IE5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCmluZGV4IGNhZmM4MWI1ZTFhNC4u
ZTg3ODUwYzIxY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCkBAIC02NSw2ICs2NSw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eUF0c3BpOjpyZWdpc3RlclJvb3QoQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSYg
cm9vdE9iamVjdCwgVmVjdG9yCiAgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHJvb3RPYmpl
Y3QgPSBSZWYgeyByb290T2JqZWN0IH0sIGludGVyZmFjZXMgPSBXVEZNb3ZlKGludGVyZmFjZXMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICBTdHJpbmcgcmVmZXJlbmNlOwogICAgICAgICBpZiAobV9jb25uZWN0aW9u
KSB7CisgICAgICAgICAgICBlbnN1cmVDYWNoZSgpOwogICAgICAgICAgICAgU3RyaW5nIHBhdGgg
PSBtYWtlU3RyaW5nKCIvb3JnL2ExMXkvd2Via2l0L2FjY2Vzc2libGUvIiwgY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpLnJlcGxhY2UoJy0nLCAnXycpKTsKICAgICAgICAgICAgIFZlY3Rvcjx1
bnNpZ25lZCwgMj4gcmVnaXN0ZXJlZE9iamVjdHM7CiAgICAgICAgICAgICByZWdpc3RlcmVkT2Jq
ZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGludGVyZmFjZXMuc2l6ZSgpKTsKQEAgLTgyLDYg
KzgzLDMyNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6cmVnaXN0ZXJSb290KEFjY2Vzc2li
aWxpdHlSb290QXRzcGkmIHJvb3RPYmplY3QsIFZlY3RvcgogICAgIH0pOwogfQogCit2b2lkIEFj
Y2Vzc2liaWxpdHlBdHNwaTo6dW5yZWdpc3RlclJvb3QoQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSYg
cm9vdE9iamVjdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
bV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHJvb3RPYmplY3QgPSBSZWYgeyByb290T2JqZWN0IH1d
IHsKKyAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBu
dWxscHRyLCByb290T2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3Bp
LkV2ZW50Lk9iamVjdCIsICJTdGF0ZUNoYW5nZWQiLAorICAgICAgICAgICAgZ192YXJpYW50X25l
dygiKHNpaXZhe3N2fSkiLCAiZGVmdW5jdCIsIFRSVUUsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5n
KCIwIiksIG51bGxwdHIpLCBudWxscHRyKTsKKworICAgICAgICBhdXRvIHJlZ2lzdGVyZWRPYmpl
Y3RzID0gbV9yb290T2JqZWN0cy50YWtlKHJvb3RPYmplY3QucHRyKCkpOworICAgICAgICBnX2Ri
dXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsICIv
b3JnL2ExMXkvYXRzcGkvY2FjaGUiLCAib3JnLmExMXkuYXRzcGkuQ2FjaGUiLCAiUmVtb3ZlQWNj
ZXNzaWJsZSIsCisgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoKHNvKSkiLCB1bmlxdWVOYW1l
KCksIHJvb3RPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpKSwgbnVsbHB0cik7CisgICAgICAg
IGZvciAoYXV0byBpZCA6IHJlZ2lzdGVyZWRPYmplY3RzKQorICAgICAgICAgICAgZ19kYnVzX2Nv
bm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdldCgpLCBpZCk7CisgICAg
fSk7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJlZ2lzdGVyT2JqZWN0KEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3QsIFZlY3RvcjxzdGQ6OnBhaXI8R0RCdXNJ
bnRlcmZhY2VJbmZvKiwgR0RCdXNJbnRlcmZhY2VWVGFibGUqPj4mJiBpbnRlcmZhY2VzKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2Nvbm5lY3Rp
b24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBlbnN1cmVDYWNoZSgpOworICAgIFN0cmlu
ZyBwYXRoID0gbWFrZVN0cmluZygiL29yZy9hMTF5L2F0c3BpL2FjY2Vzc2libGUvIiwgY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpLnJlcGxhY2UoJy0nLCAnXycpKTsKKyAgICBWZWN0b3I8dW5z
aWduZWQsIDIwPiByZWdpc3RlcmVkT2JqZWN0czsKKyAgICByZWdpc3RlcmVkT2JqZWN0cy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGludGVyZmFjZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGludGVyZmFjZSA6IGludGVyZmFjZXMpIHsKKyAgICAgICAgYXV0byBpZCA9IGdfZGJ1c19j
b25uZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2Nvbm5lY3Rpb24uZ2V0KCksIHBhdGgudXRmOCgp
LmRhdGEoKSwgaW50ZXJmYWNlLmZpcnN0LCBpbnRlcmZhY2Uuc2Vjb25kLCAmYXRzcGlPYmplY3Qs
IG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZWdpc3RlcmVkT2JqZWN0cy51bmNoZWNrZWRB
cHBlbmQoaWQpOworICAgIH0KKyAgICBtX2F0c3BpT2JqZWN0cy5hZGQoJmF0c3BpT2JqZWN0LCBX
VEZNb3ZlKHJlZ2lzdGVyZWRPYmplY3RzKSk7CisKKyAgICBhZGRBY2Nlc3NpYmxlKGF0c3BpT2Jq
ZWN0LCBwYXRoKTsKKworICAgIHJldHVybiBwYXRoOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlB
dHNwaTo6dW5yZWdpc3Rlck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2Jq
ZWN0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX3F1ZXVl
LT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYgeyBhdHNwaU9iamVjdCB9XSB7Cisg
ICAgICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0
ciwgYXRzcGlPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZl
bnQuT2JqZWN0IiwgIlN0YXRlQ2hhbmdlZCIsCisgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIo
c2lpdmF7c3Z9KSIsICJkZWZ1bmN0IiwgVFJVRSwgMCwgZ192YXJpYW50X25ld19zdHJpbmcoIjAi
KSwgbnVsbHB0ciksIG51bGxwdHIpOworCisgICAgICAgIHJlbW92ZUFjY2Vzc2libGUoYXRzcGlP
YmplY3QpOworCisgICAgICAgIGF1dG8gcmVnaXN0ZXJlZE9iamVjdHMgPSBtX2F0c3BpT2JqZWN0
cy50YWtlKGF0c3BpT2JqZWN0LnB0cigpKTsKKyAgICAgICAgZm9yIChhdXRvIGlkIDogcmVnaXN0
ZXJlZE9iamVjdHMpCisgICAgICAgICAgICBnX2RidXNfY29ubmVjdGlvbl91bnJlZ2lzdGVyX29i
amVjdChtX2Nvbm5lY3Rpb24uZ2V0KCksIGlkKTsKKyAgICB9KTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5QXRzcGk6OmNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0
c3BpT2JqZWN0LCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNoaWxkLCBDaGlsZHJlbkNoYW5n
ZWQgY2hhbmdlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBt
X3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYgeyBhdHNwaU9iamVjdCB9
LCBjaGlsZCA9IFJlZiB7IGNoaWxkIH0sIGNoYW5nZV0geworICAgICAgICBpZiAoIW1fY29ubmVj
dGlvbikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjaGlsZC0+c2V0Um9vdChhdHNw
aU9iamVjdC0+cm9vdCgpKTsKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwo
bV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+cGF0aCgpLnV0ZjgoKS5k
YXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiQ2hpbGRyZW5DaGFuZ2VkIiwK
KyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2KHNvKSkiLCBjaGFuZ2UgPT0gQ2hpbGRy
ZW5DaGFuZ2VkOjpBZGRlZCA/ICJhZGQiIDogInJlbW92ZSIsIGNoaWxkLT5pbmRleEluUGFyZW50
Rm9yQ2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSksCisgICAgICAgICAgICAwLCBnX3ZhcmlhbnRfbmV3
KCIoc28pIiwgdW5pcXVlTmFtZSgpLCBjaGlsZC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpLCB1bmlx
dWVOYW1lKCksIGF0c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSksIG51bGxwdHIpOwor
ICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6c3RhdGVDaGFuZ2VkKEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wg
dmFsdWUpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fcXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIG5h
bWUgPSBDU3RyaW5nKG5hbWUpLCB2YWx1ZV0geworICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3Np
Z25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LT5wYXRoKCkudXRm
OCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9iamVjdCIsICJTdGF0ZUNoYW5nZWQi
LAorICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCBuYW1lLmRhdGEoKSwg
dmFsdWUsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5nKCIwIiksIG51bGxwdHIpLCBudWxscHRyKTsK
KyAgICB9KTsKK30KKworc3RydWN0IFJvbGVOYW1lRW50cnkgeworICAgIEFjY2Vzc2liaWxpdHlS
b2xlIHJvbGU7CisgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICBjb25zdCBjaGFyKiBsb2NhbGl6
ZWROYW1lOworfTsKKworc3RhdGljIGNvbnN0IFJvbGVOYW1lRW50cnkgcm9sZU5hbWVzW10gPSB7
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93biwgInVua25vd24iLCBOXygidW5rbm93
biIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uLCAicHVzaCBidXR0b24iLCBO
XygicHVzaCBidXR0b24iKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlJhZGlvQnV0dG9u
LCAicmFkaW8gYnV0dG9uIiwgTl8oInJhZGlvIGJ1dHRvbiIpIH0sCisgICAgeyBBY2Nlc3NpYmls
aXR5Um9sZTo6Q2hlY2tCb3gsICJjaGVjayBib3giLCBOXygiY2hlY2sgYm94IikgfSwKKyAgICB7
IEFjY2Vzc2liaWxpdHlSb2xlOjpTbGlkZXIsICJzbGlkZXIiLCBOXygic2xpZGVyIikgfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJHcm91cCwgInBhZ2UgdGFiIGxpc3QiLCBOXygicGFn
ZSB0YWIgbGlzdCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkLCAiZW50
cnkiLCBOXygiZW50cnkiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlN0YXRpY1RleHQs
ICJ0ZXh0IiwgTl8oInRleHQiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVh
LCAiZW50cnkiLCBOXygiZW50cnkiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNjcm9s
bEFyZWEsICJzY3JvbGwgcGFuZSIsIE5fKCJzY3JvbGwgcGFuZSIpIH0sCisgICAgeyBBY2Nlc3Np
YmlsaXR5Um9sZTo6UG9wVXBCdXR0b24sICJjb21ibyBib3giLCBOXygiY29tYm8gYm94IikgfSwK
KyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51QnV0dG9uLCAibWVudSBpdGVtIiwgTl8oIm1l
bnUgaXRlbSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFibGUsICJ0YWJsZSIsIE5f
KCJ0YWJsZSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb24sICJhcHBs
aWNhdGlvbiIsIE5fKCJhcHBsaWNhdGlvbiIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
R3JvdXAsICJwYW5lbCIsIE5fKCJwYW5lbCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
VGV4dEdyb3VwLCAic2VjdGlvbiIsIE5fKCJzZWN0aW9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxp
dHlSb2xlOjpSYWRpb0dyb3VwLCAicGFuZWwiLCBOXygicGFuZWwiKSB9LAorICAgIHsgQWNjZXNz
aWJpbGl0eVJvbGU6Okxpc3QsICJsaXN0IiwgTl8oImxpc3QiKSB9LAorICAgIHsgQWNjZXNzaWJp
bGl0eVJvbGU6OkRpcmVjdG9yeSwgImRpcmVjdG9yeSBwYW5lIiwgTl8oImRpcmVjdG9yeSBwYW5l
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTY3JvbGxCYXIsICJzY3JvbGwgYmFyIiwg
Tl8oInNjcm9sbCBiYXIiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlLCAiaW1h
Z2UiLCBOXygiaW1hZ2UiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVCYXIsICJt
ZW51IGJhciIsIE5fKCJtZW51IGJhciIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVu
dSwgIm1lbnUiLCBOXygibWVudSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUl0
ZW0sICJtZW51IGl0ZW0iLCBOXygibWVudSBpdGVtIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlS
b2xlOjpNZW51SXRlbUNoZWNrYm94LCAiY2hlY2sgbWVudSBpdGVtIiwgTl8oImNoZWNrIG1lbnUg
aXRlbSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUl0ZW1SYWRpbywgInJhZGlv
IG1lbnUgaXRlbSIsIE5fKCJyYWRpbyBtZW51IGl0ZW0iKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6OlJvdywgInRhYmxlIHJvdyIsIE5fKCJ0YWJsZSByb3ciKSB9LAorICAgIHsgQWNjZXNz
aWJpbGl0eVJvbGU6OlRvb2xiYXIsICJ0b29sIGJhciIsIE5fKCJ0b29sIGJhciIpIH0sCisgICAg
eyBBY2Nlc3NpYmlsaXR5Um9sZTo6QnVzeUluZGljYXRvciwgInByb2dyZXNzIGJhciIsIE5fKCJw
cm9ncmVzcyBiYXIiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNh
dG9yLCAicHJvZ3Jlc3MgYmFyIiwgTl8oInByb2dyZXNzIGJhciIpIH0sCisgICAgeyBBY2Nlc3Np
YmlsaXR5Um9sZTo6TWV0ZXIsICJsZXZlbCBiYXIiLCBOXygibGV2ZWwgYmFyIikgfSwKKyAgICB7
IEFjY2Vzc2liaWxpdHlSb2xlOjpXaW5kb3csICJ3aW5kb3ciLCBOXygid2luZG93IikgfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpPdXRsaW5lLCAidHJlZSIsIE5fKCJ0cmVlIikgfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpDb21ib0JveCwgImNvbWJvIGJveCIsIE5fKCJjb21ibyBi
b3giKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0R3JvdXAsICJzcGxpdCBwYW5l
IiwgTl8oInNwbGl0IHBhbmUiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0dGVy
LCAic2VwYXJhdG9yIiwgTl8oInNlcGFyYXRvciIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9s
ZTo6Q29sb3JXZWxsLCAicHVzaCBidXR0b24iLCBOXygicHVzaCBidXR0b24iKSB9LAorICAgIHsg
QWNjZXNzaWJpbGl0eVJvbGU6OkxpbmssICJsaW5rIiwgTl8oImxpbmsiKSB9LAorICAgIHsgQWNj
ZXNzaWJpbGl0eVJvbGU6OkdyaWQsICJ0YWJsZSIsIE5fKCJ0YWJsZSIpIH0sCisgICAgeyBBY2Nl
c3NpYmlsaXR5Um9sZTo6VHJlZUdyaWQsICJ0cmVlIHRhYmxlIiwgTl8oInRyZWUgdGFibGUiKSB9
LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OldlYkNvcmVMaW5rLCAibGluayIsIE5fKCJsaW5r
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpJbWFnZU1hcExpbmssICJsaW5rIiwgTl8o
ImxpbmsiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlTWFwLCAiaW1hZ2UgbWFw
IiwgTl8oImltYWdlIG1hcCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdE1hcmtl
ciwgInRleHQiLCBOXygidGV4dCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJl
YSwgImRvY3VtZW50IHdlYiIsIE5fKCJkb2N1bWVudCB3ZWIiKSB9LAorICAgIHsgQWNjZXNzaWJp
bGl0eVJvbGU6OkhlYWRpbmcsICJoZWFkaW5nIiwgTl8oImhlYWRpbmciKSB9LAorICAgIHsgQWNj
ZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3gsICJoZWFkaW5nIiwgTl8oImxpc3QgYm94IikgfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94T3B0aW9uLCAibGlzdCBpdGVtIiwgTl8oImxp
c3QgaXRlbSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbCwgInRhYmxlIGNlbGwi
LCBOXygidGFibGUgY2VsbCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JpZENlbGws
ICJ0YWJsZSBjZWxsIiwgTl8oInRhYmxlIGNlbGwiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJv
bGU6OkNvbHVtbkhlYWRlciwgImNvbHVtbiBoZWFkZXIiLCBOXygiY29sdW1uIGhlYWRlciIpIH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Um93SGVhZGVyLCAicm93IGhlYWRlciIsIE5fKCJy
b3cgaGVhZGVyIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpEZWZpbml0aW9uLCAiZGVm
aW5pdGlvbiIsIE5fKCJkZWZpbml0aW9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpE
ZXNjcmlwdGlvbkxpc3REZXRhaWwsICJkZXNjcmlwdGlvbiB2YWx1ZSIsIE5fKCJkZXNjcmlwdGlv
biB2YWx1ZSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0VGVy
bSwgImRlc2NyaXB0aW9uIHRlcm0iLCBOXygiZGVzY3JpcHRpb24gdGVybSIpIH0sCisgICAgeyBB
Y2Nlc3NpYmlsaXR5Um9sZTo6VGVybSwgImRlc2NyaXB0aW9uIHRlcm0iLCBOXygiZGVzY3JpcHRp
b24gdGVybSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0LCAi
ZGVzY3JpcHRpb24gbGlzdCIsIE5fKCJkZXNjcmlwdGlvbiBsaXN0IikgfSwKKyAgICB7IEFjY2Vz
c2liaWxpdHlSb2xlOjpMYW5kbWFya0Jhbm5lciwgImxhbmRtYXJrIiwgTl8oImxhbmRtYXJrIikg
fSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya0NvbXBsZW1lbnRhcnksICJsYW5k
bWFyayIsIE5fKCJsYW5kbWFyayIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1h
cmtEb2NSZWdpb24sICJsYW5kbWFyayIsIE5fKCJsYW5kbWFyayIpIH0sCisgICAgeyBBY2Nlc3Np
YmlsaXR5Um9sZTo6TGFuZG1hcmtDb250ZW50SW5mbywgImxhbmRtYXJrIiwgTl8oImxhbmRtYXJr
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya01haW4sICJsYW5kbWFyayIs
IE5fKCJsYW5kbWFyayIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtOYXZp
Z2F0aW9uLCAibGFuZG1hcmsiLCBOXygibGFuZG1hcmsiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6OkxhbmRtYXJrUmVnaW9uLCAibGFuZG1hcmsiLCBOXygibGFuZG1hcmsiKSB9LAorICAg
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrU2VhcmNoLCAibGFuZG1hcmsiLCBOXygibGFu
ZG1hcmsiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uQWxlcnQsICJu
b3RpZmljYXRpb24iLCBOXygibm90aWZpY2F0aW9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlS
b2xlOjpBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nLCAiYWxlcnQiLCBOXygiYWxlcnQiKSB9LAorICAg
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uRGlhbG9nLCAiZGlhbG9nIiwgTl8oImRp
YWxvZyIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25Hcm91cCwgImdy
b3VwaW5nIiwgTl8oImdyb3VwaW5nIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBs
aWNhdGlvblRleHRHcm91cCwgInNlY3Rpb24iLCBOXygic2VjdGlvbiIpIH0sCisgICAgeyBBY2Nl
c3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25Mb2csICJsb2ciLCBOXygibG9nIikgfSwKKyAgICB7
IEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbk1hcnF1ZWUsICJtYXJxdWVlIiwgTl8oIm1h
cnF1ZWUiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uU3RhdHVzLCAi
c3RhdHVzYmFyIiwgTl8oInN0YXR1c2JhciIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
QXBwbGljYXRpb25UaW1lciwgInRpbWVyIiwgTl8oInRpbWVyIikgfSwKKyAgICB7IEFjY2Vzc2li
aWxpdHlSb2xlOjpEb2N1bWVudCwgImRvY3VtZW50IGZyYW1lIiwgTl8oImRvY3VtZW50IGZyYW1l
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudEFydGljbGUsICJhcnRpY2xl
IiwgTl8oImFydGljbGUiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkRvY3VtZW50TWF0
aCwgIm1hdGgiLCBOXygibWF0aCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1l
bnROb3RlLCAiY29tbWVudCIsIE5fKCJjb21tZW50IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlS
b2xlOjpVc2VySW50ZXJmYWNlVG9vbHRpcCwgInRvb2wgdGlwIiwgTl8oInRvb2wgdGlwIikgfSwK
KyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpUYWIsICJwYWdlIHRhYiIsIE5fKCJwYWdlIHRhYiIp
IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiTGlzdCwgInBhZ2UgdGFiIGxpc3QiLCBO
XygicGFnZSB0YWIgbGlzdCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiUGFuZWws
ICJzY3JvbGwgcGFuZSIsIE5fKCJzY3JvbGwgcGFuZSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5
Um9sZTo6VHJlZSwgInRyZWUiLCBOXygidHJlZSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9s
ZTo6VHJlZUl0ZW0sICJ0cmVlIGl0ZW0iLCBOXygidHJlZSBpdGVtIikgfSwKKyAgICB7IEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0SXRlbSwgImxpc3QgaXRlbSIsIE5fKCJsaXN0IGl0ZW0iKSB9LAor
ICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlBhcmFncmFwaCwgInBhcmFncmFwaCIsIE5fKCJwYXJh
Z3JhcGgiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkxhYmVsLCAibGFiZWwiLCBOXygi
bGFiZWwiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkRpdiwgInNlY3Rpb24iLCBOXygi
c2VjdGlvbiIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Rm9ybSwgImZvcm0iLCBOXygi
Zm9ybSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6U3BpbkJ1dHRvbiwgInNwaW4gYnV0
dG9uIiwgTl8oInNwaW4gYnV0dG9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpGb290
ZXIsICJmb290ZXIiLCBOXygiZm9vdGVyIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpU
b2dnbGVCdXR0b24sICJ0b2dnbGUgYnV0dG9uIiwgTl8oInRvZ2dsZSBidXR0b24iKSB9LAorICAg
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OkNhbnZhcywgImNhbnZhcyIsIE5fKCJjYW52YXMiKSB9LAor
ICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1Jvb3QsICJwYW5lbCIsIE5fKCJwYW5lbCIpIH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGVnZW5kLCAibGFiZWwiLCBOXygibGFiZWwiKSB9
LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhFbGVtZW50LCAibWF0aCIsIE5fKCJtYXRo
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpBdWRpbywgImF1ZGlvIiwgTl8oImF1ZGlv
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpWaWRlbywgInZpZGVvIiwgTl8oInZpZGVv
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpIb3Jpem9udGFsUnVsZSwgInNlcGFyYXRv
ciIsIE5fKCJzZXBhcmF0b3IiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkJsb2NrcXVv
dGUsICJibG9jayBxdW90ZSIsIE5fKCJibG9jayBxdW90ZSIpIH0sCisgICAgeyBBY2Nlc3NpYmls
aXR5Um9sZTo6U3dpdGNoLCAidG9nZ2xlIGJ1dHRvbiIsIE5fKCJ0b2dnbGUgYnV0dG9uIikgfSwK
KyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTZWFyY2hGaWVsZCwgImVudHJ5IiwgTl8oImVudHJ5
IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpQcmUsICJzZWN0aW9uIiwgTl8oInNlY3Rp
b24iKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1RleHRQYXRoLCAidGV4dCIsIE5f
KCJ0ZXh0IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUZXh0LCAic2VjdGlvbiIs
IE5fKCJzZWN0aW9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUU3BhbiwgInRl
eHQiLCBOXygidGV4dCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6SW5saW5lLCAidGV4
dCIsIE5fKCJ0ZXh0IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpNYXJrLCAibWFyIiwg
Tl8oIm1hcmsiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlRpbWUsICJ0ZXh0IiwgTl8o
InRleHQiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkZlZWQsICJwYW5lbCIsIE5fKCJw
YW5lbCIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RmlndXJlLCAicGFuZWwiLCBOXygi
cGFuZWwiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3Rub3RlLCAiZm9vdG5vdGUi
LCBOXygiZm9vdG5vdGUiKSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkdyYXBoaWNzRG9j
dW1lbnQsICJkb2N1bWVudCBmcmFtZSIsIE5fKCJkb2N1bWVudCBmcmFtZSIpIH0sCisgICAgeyBB
Y2Nlc3NpYmlsaXR5Um9sZTo6R3JhcGhpY3NPYmplY3QsICJwYW5lbCIsIE5fKCJwYW5lbCIpIH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JhcGhpY3NTeW1ib2wsICJpbWFnZSIsIE5fKCJp
bWFnZSIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2FwdGlvbiwgImNhcHRpb24iLCBO
XygiY2FwdGlvbiIpIH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVsZXRpb24sICJjb250
ZW50IGRlbGV0aW9uIiwgTl8oImNvbnRlbnQgZGVsZXRpb24iKSB9LAorICAgIHsgQWNjZXNzaWJp
bGl0eVJvbGU6Okluc2VydGlvbiwgImNvbnRlbnQgaW5zZXJ0aW9uIiwgTl8oImNvbnRlbnQgaW5z
ZXJ0aW9uIikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTdWJzY3JpcHQsICJzdWJzY3Jp
cHQiLCBOXygic3Vic2NyaXB0IikgfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTdXBlcnNj
cmlwdCwgInN1cGVyc2NyaXB0IiwgTl8oInN1cGVyc2NyaXB0IikgfQorfTsKKworY29uc3QgY2hh
ciogQWNjZXNzaWJpbGl0eUF0c3BpOjpsb2NhbGl6ZWRSb2xlTmFtZShBY2Nlc3NpYmlsaXR5Um9s
ZSByb2xlKQoreworICAgIGZvciAoY29uc3QgYXV0byYgcm9sZU5hbWUgOiByb2xlTmFtZXMpIHsK
KyAgICAgICAgaWYgKHJvbGVOYW1lLnJvbGUgPT0gcm9sZSkKKyAgICAgICAgICAgIHJldHVybiBy
b2xlTmFtZS5sb2NhbGl6ZWROYW1lOworICAgIH0KKworICAgIHJldHVybiBfKCJ1bmtub3duIik7
Cit9CisKKyNkZWZpbmUgSVRFTV9TSUdOQVRVUkUgIihzbykoc28pKHNvKWlpYXNzdXNhdSIKKyNk
ZWZpbmUgR0VUX0lURU1TX1NJR05BVFVSRSAiYSgiIElURU1fU0lHTkFUVVJFICIpIgorCitHREJ1
c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNfY2FjaGVGdW5jdGlvbnMgPSB7
CisgICAgLy8gbWV0aG9kX2NhbGwKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hh
ciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwg
R1ZhcmlhbnQqLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRJdGVtcyIpKSB7CisgICAgICAgICAg
ICBhdXRvJiBhdHNwaSA9ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5QXRzcGkqPih1c2VyRGF0
YSk7CisgICAgICAgICAgICBHVmFyaWFudEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlM
REVSX0lOSVQoR19WQVJJQU5UX1RZUEUoIigiIEdFVF9JVEVNU19TSUdOQVRVUkUgIikiKSk7Cisg
ICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9vcGVuKCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQ
RShHRVRfSVRFTVNfU0lHTkFUVVJFKSk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8qIHJv
b3RPYmplY3QgOiBhdHNwaS5tX3Jvb3RPYmplY3RzLmtleXMoKSkgeworICAgICAgICAgICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX29wZW4oJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCIoIiBJVEVN
X1NJR05BVFVSRSAiKSIpKTsKKyAgICAgICAgICAgICAgICByb290T2JqZWN0LT5zZXJpYWxpemUo
JmJ1aWxkZXIpOworICAgICAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWls
ZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxsIHVw
ZGF0ZUJhY2tpbmdTdG9yZSgpIG9uIGV2ZXJ5IG9iamVjdCBiZWZvcmUgY2FsbGluZyBzZXJpYWxp
emUoKQorICAgICAgICAgICAgLy8gYW5kIHVwZGF0aW5nIHRoZSBiYWNraW5nIHN0b3JlIGNhbiBk
ZXRhY2ggdGhlIG9iamVjdCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNhY2hlLgorICAgICAgICAg
ICAgYXV0byBwYXRocyA9IGNvcHlUb1ZlY3RvcihhdHNwaS5tX2NhY2hlLmtleXMoKSk7CisgICAg
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICAgICAgICAg
IGF1dG8gd3JhcHBlciA9IGF0c3BpLm1fY2FjaGUuZ2V0KHBhdGgpOworICAgICAgICAgICAgICAg
IHdyYXBwZXItPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICAgICAgICAgIGlmICghYXRz
cGkubV9jYWNoZS5jb250YWlucyhwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEUoIigiIElURU1fU0lHTkFUVVJFICIpIikpOworICAgICAgICAgICAgICAgIHdyYXBw
ZXItPnNlcmlhbGl6ZSgmYnVpbGRlcik7CisgICAgICAgICAgICAgICAgZ192YXJpYW50X2J1aWxk
ZXJfY2xvc2UoJmJ1aWxkZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ192YXJpYW50
X2J1aWxkZXJfY2xvc2UoJmJ1aWxkZXIpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1
aWxkZXIpKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgLy8gZ2V0X3Byb3BlcnR5CisgICAgW10o
R0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFy
KiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyKSAt
PiBHVmFyaWFudCogeworICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9OT1RfU1VQUE9SVEVELCAiVW5rbm93biBwcm9wZXJ0eSAnJXMnIiwgcHJvcGVydHlO
YW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfSwKKyAgICAvLyBzZXRfcHJvcGVy
dHksCisgICAgbnVsbHB0ciwKKyAgICAvLyBwYWRkaW5nCisgICAgbnVsbHB0cgorfTsKKwordm9p
ZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmVuc3VyZUNhY2hlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NhY2hlSUQgfHwgIW1fY29ubmVjdGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jYWNoZUlEID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVn
aXN0ZXJfb2JqZWN0KG1fY29ubmVjdGlvbi5nZXQoKSwgIi9vcmcvYTExeS9hdHNwaS9jYWNoZSIs
IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF9jYWNoZV9pbnRlcmZhY2Up
LCAmc19jYWNoZUZ1bmN0aW9ucywgdGhpcywgbnVsbHB0ciwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eUF0c3BpOjphZGRBY2Nlc3NpYmxlKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSYgYXRzcGlPYmplY3QsIGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fY2FjaGUuYWRkKHBhdGgsICZhdHNwaU9iamVj
dCk7CisgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gQWRkQWNjZXNzaWJsZSBuZWVkcyB0byBiZSBlbWl0dGVkIGFmdGVyIENoaWxkcmVuQ2hh
bmdlZC4KKyAgICBSdW5Mb29wOjpjdXJyZW50KCkuZGlzcGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0
ID0gUmVmIHsgYXRzcGlPYmplY3QgfSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCldIHsKKyAg
ICAgICAgYXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICBpZiAoIW1f
Y2FjaGUuY29udGFpbnMocGF0aCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1Zh
cmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9U
WVBFKCIoIiBJVEVNX1NJR05BVFVSRSAiKSIpKTsKKyAgICAgICAgYXRzcGlPYmplY3QtPnNlcmlh
bGl6ZSgmYnVpbGRlcik7CisgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1f
Y29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgIi9vcmcvYTExeS9hdHNwaS9jYWNoZSIsICJvcmcu
YTExeS5hdHNwaS5DYWNoZSIsICJBZGRBY2Nlc3NpYmxlIiwKKyAgICAgICAgICAgIGdfdmFyaWFu
dF9uZXcoIihAKCIgSVRFTV9TSUdOQVRVUkUgIikpIiwgZ192YXJpYW50X2J1aWxkZXJfZW5kKCZi
dWlsZGVyKSksIG51bGxwdHIpOworICAgIH0pOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlBdHNw
aTo6cmVtb3ZlQWNjZXNzaWJsZShBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgY29uc3QgYXV0
byYgcGF0aCA9IGF0c3BpT2JqZWN0LnBhdGgoKTsKKyAgICBtX2NhY2hlLnJlbW92ZShwYXRoKTsK
KyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51
bGxwdHIsICIvb3JnL2ExMXkvYXRzcGkvY2FjaGUiLCAib3JnLmExMXkuYXRzcGkuQ2FjaGUiLCAi
UmVtb3ZlQWNjZXNzaWJsZSIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIigoc28pKSIsIHVuaXF1
ZU5hbWUoKSwgcGF0aC51dGY4KCkuZGF0YSgpKSwgbnVsbHB0cik7Cit9CisKK25hbWVzcGFjZSBB
Y2Nlc3NpYmlsaXR5IHsKKworUGxhdGZvcm1Sb2xlTWFwIGNyZWF0ZVBsYXRmb3JtUm9sZU1hcCgp
Cit7CisgICAgUGxhdGZvcm1Sb2xlTWFwIHJvbGVNYXA7CisgICAgZm9yIChjb25zdCBhdXRvJiBy
b2xlTmFtZSA6IHJvbGVOYW1lcykKKyAgICAgICAgcm9sZU1hcC5hZGQoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHJvbGVOYW1lLnJvbGUpLCBTdHJpbmc6OmZyb21VVEY4KHJvbGVOYW1lLm5hbWUpKTsK
KyAgICByZXR1cm4gcm9sZU1hcDsKK30KKworfSAvLyBuYW1lc3BhY2UgQWNjZXNzaWJpbGl0eQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElU
WSkgJiYgVVNFKEFUU1BJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmgKaW5kZXggMWYwOGVmY2VhNWE5Li5jZTM3Zjkz
ZTM4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNj
ZXNzaWJpbGl0eUF0c3BpLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNw
aS9BY2Nlc3NpYmlsaXR5QXRzcGkuaApAQCAtMzAsMTAgKzMwLDEyIEBACiB0eXBlZGVmIHN0cnVj
dCBfR0RCdXNDb25uZWN0aW9uIEdEQnVzQ29ubmVjdGlvbjsKIHR5cGVkZWYgc3RydWN0IF9HREJ1
c0ludGVyZmFjZUluZm8gR0RCdXNJbnRlcmZhY2VJbmZvOwogdHlwZWRlZiBzdHJ1Y3QgX0dEQnVz
SW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNlVlRhYmxlOwordHlwZWRlZiBzdHJ1Y3QgX0dW
YXJpYW50IEdWYXJpYW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOworZW51bSBjbGFz
cyBBY2Nlc3NpYmlsaXR5Um9sZTsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eUF0c3BpIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ1LDExICs0NywzMCBAQCBwdWJsaWM6CiAgICAg
R1ZhcmlhbnQqIG51bGxSZWZlcmVuY2UoKSBjb25zdDsKIAogICAgIHZvaWQgcmVnaXN0ZXJSb290
KEFjY2Vzc2liaWxpdHlSb290QXRzcGkmLCBWZWN0b3I8c3RkOjpwYWlyPEdEQnVzSW50ZXJmYWNl
SW5mbyosIEdEQnVzSW50ZXJmYWNlVlRhYmxlKj4+JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYpOworICAgIHZvaWQgdW5yZWdpc3RlclJvb3QoQWNjZXNzaWJpbGl0
eVJvb3RBdHNwaSYpOworICAgIFN0cmluZyByZWdpc3Rlck9iamVjdChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkmLCBWZWN0b3I8c3RkOjpwYWlyPEdEQnVzSW50ZXJmYWNlSW5mbyosIEdEQnVzSW50
ZXJmYWNlVlRhYmxlKj4+JiYpOworICAgIHZvaWQgdW5yZWdpc3Rlck9iamVjdChBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmKTsKKworICAgIGVudW0gY2xhc3MgQ2hpbGRyZW5DaGFuZ2VkIHsgQWRk
ZWQsIFJlbW92ZWQgfTsKKyAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkmLCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmLCBDaGlsZHJlbkNoYW5nZWQpOwor
CisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiwgY29uc3Qg
Y2hhciosIGJvb2wpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGxvY2FsaXplZFJvbGVOYW1l
KEFjY2Vzc2liaWxpdHlSb2xlKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGVuc3VyZUNhY2hlKCk7
CisgICAgdm9pZCBhZGRBY2Nlc3NpYmxlKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlQWNjZXNzaWJsZShBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkmKTsKKworICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX2NhY2hlRnVuY3Rp
b25zOworCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBHUmVmUHRyPEdEQnVzQ29u
bmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIEhhc2hNYXA8QWNjZXNzaWJpbGl0eVJvb3RBdHNw
aSosIFZlY3Rvcjx1bnNpZ25lZCwgMj4+IG1fcm9vdE9iamVjdHM7CisgICAgSGFzaE1hcDxBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGkqLCBWZWN0b3I8dW5zaWduZWQsIDIwPj4gbV9hdHNwaU9iamVj
dHM7CisgICAgdW5zaWduZWQgbV9jYWNoZUlEIHsgMCB9OworICAgIEhhc2hNYXA8U3RyaW5nLCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBtX2NhY2hlOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uZWE3NjI3YjllZTUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCkBAIC0w
LDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBBdHNwaSB7CisKK2VudW0gUm9sZSB7CisgICAgSW52
YWxpZFJvbGUsCisgICAgQWNjZWxlcmF0b3JMYWJlbCwKKyAgICBBbGVydCwKKyAgICBBbmltYXRp
b24sCisgICAgQXJyb3csCisgICAgQ2FsZW5kYXIsCisgICAgQ2FudmFzLAorICAgIENoZWNrQm94
LAorICAgIENoZWNrTWVudUl0ZW0sCisgICAgQ29sb3JDaG9vc2VyLAorICAgIENvbHVtbkhlYWRl
ciwKKyAgICBDb21ib0JveCwKKyAgICBEYXRlRWRpdG9yLAorICAgIERlc2t0b3BJY29uLAorICAg
IERlc2t0b3BGcmFtZSwKKyAgICBEaWFsLAorICAgIERpYWxvZywKKyAgICBEaXJlY3RvcnlQYW5l
LAorICAgIERyYXdpbmdBcmVhLAorICAgIEZpbGVDaG9vc2VyLAorICAgIEZpbGxlciwKKyAgICBG
b2N1c1RyYXZlcnNhYmxlLAorICAgIEZvbnRDaG9vc2VyLAorICAgIEZyYW1lLAorICAgIEdsYXNz
UGFuZSwKKyAgICBIdG1sQ29udGFpbmVyLAorICAgIEljb24sCisgICAgSW1hZ2UsCisgICAgSW50
ZXJuYWxGcmFtZSwKKyAgICBMYWJlbCwKKyAgICBMYXllcmVkUGFuZSwKKyAgICBMaXN0LAorICAg
IExpc3RJdGVtLAorICAgIE1lbnUsCisgICAgTWVudUJhciwKKyAgICBNZW51SXRlbSwKKyAgICBP
cHRpb25QYW5lLAorICAgIFBhZ2VUYWIsCisgICAgUGFnZVRhYkxpc3QsCisgICAgUGFuZWwsCisg
ICAgUGFzc3dvcmRUZXh0LAorICAgIFBvcHVwTWVudSwKKyAgICBQcm9ncmVzc0JhciwKKyAgICBQ
dXNoQnV0dG9uLAorICAgIFJhZGlvQnV0dG9uLAorICAgIFJhZGlvTWVudUl0ZW0sCisgICAgUm9v
dFBhbmUsCisgICAgUm93SGVhZGVyLAorICAgIFNjcm9sbEJhciwKKyAgICBTY3JvbGxQYW5lLAor
ICAgIFNlcGFyYXRvciwKKyAgICBTbGlkZXIsCisgICAgU3BpbkJ1dHRvbiwKKyAgICBTcGxpdFBh
bmUsCisgICAgU3RhdHVzQmFyLAorICAgIFRhYmxlLAorICAgIFRhYmxlQ2VsbCwKKyAgICBUYWJs
ZUNvbHVtbkhlYWRlciwKKyAgICBUYWJsZVJvd0hlYWRlciwKKyAgICBUZWFyb2ZmTWVudUl0ZW0s
CisgICAgVGVybWluYWwsCisgICAgVGV4dCwKKyAgICBUb2dnbGVCdXR0b24sCisgICAgVG9vbEJh
ciwKKyAgICBUb29sVGlwLAorICAgIFRyZWUsCisgICAgVHJlZVRhYmxlLAorICAgIFVua25vd24s
CisgICAgVmlld3BvcnQsCisgICAgV2luZG93LAorICAgIEV4dGVuZGVkLAorICAgIEhlYWRlciwK
KyAgICBGb290ZXIsCisgICAgUGFyYWdyYXBoLAorICAgIFJ1bGVyLAorICAgIEFwcGxpY2F0aW9u
LAorICAgIEF1dG9jb21wbGV0ZSwKKyAgICBFZGl0YmFyLAorICAgIEVtYmVkZGVkLAorICAgIEVu
dHJ5LAorICAgIENoYXJ0LAorICAgIENhcHRpb24sCisgICAgRG9jdW1lbnRGcmFtZSwKKyAgICBI
ZWFkaW5nLAorICAgIFBhZ2UsCisgICAgU2VjdGlvbiwKKyAgICBSZWR1bmRhbnRPYmplY3QsCisg
ICAgRm9ybSwKKyAgICBMaW5rLAorICAgIElucHV0TWV0aG9kV2luZG93LAorICAgIFRhYmxlUm93
LAorICAgIFRyZWVJdGVtLAorICAgIERvY3VtZW50U3ByZWFkc2hlZXQsCisgICAgRG9jdW1lbnRQ
cmVzZW50YXRpb24sCisgICAgRG9jdW1lbnRUZXh0LAorICAgIERvY3VtZW50V2ViLAorICAgIERv
Y3VtZW50RW1haWwsCisgICAgQ29tbWVudCwKKyAgICBMaXN0Qm94LAorICAgIEdyb3VwaW5nLAor
ICAgIEltYWdlTWFwLAorICAgIE5vdGlmaWNhdGlvbiwKKyAgICBJbmZvQmFyLAorICAgIExldmVs
QmFyLAorICAgIFRpdGxlQmFyLAorICAgIEJsb2NrUXVvdGUsCisgICAgQXVkaW8sCisgICAgVmlk
ZW8sCisgICAgRGVmaW5pdGlvbiwKKyAgICBBcnRpY2xlLAorICAgIExhbmRtYXJrLAorICAgIExv
ZywKKyAgICBNYXJxdWVlLAorICAgIE1hdGgsCisgICAgUmF0aW5nLAorICAgIFRpbWVyLAorICAg
IFN0YXRpYywKKyAgICBNYXRoRnJhY3Rpb24sCisgICAgTWF0aFJvb3QsCisgICAgU3Vic2NyaXB0
LAorICAgIFN1cGVyc2NyaXB0LAorICAgIERlc2NyaXB0aW9uTGlzdCwKKyAgICBEZXNjcmlwdGlv
blRlcm0sCisgICAgRGVzY3JpcHRpb25WYWx1ZSwKKyAgICBGb290bm90ZSwKKyAgICBDb250ZW50
RGVsZXRpb24sCisgICAgQ29udGVudEluc2VydGlvbiwKKyAgICBNYXJrLAorICAgIFN1Z2dlc3Rp
b24sCisgICAgTGFzdERlZmluZWRSb2xlLAorfTsKKworZW51bSBTdGF0ZSB7CisgICAgSW52YWxp
ZFN0YXRlLAorICAgIEFjdGl2ZSwKKyAgICBBcm1lZCwKKyAgICBCdXN5LAorICAgIENoZWNrZWQs
CisgICAgQ29sbGFwc2VkLAorICAgIERlZnVuY3QsCisgICAgRWRpdGFibGUsCisgICAgRW5hYmxl
ZCwKKyAgICBFeHBhbmRhYmxlLAorICAgIEV4cGFuZGVkLAorICAgIEZvY3VzYWJsZSwKKyAgICBG
b2N1c2VkLAorICAgIEhhc1Rvb2x0aXAsCisgICAgSG9yaXpvbnRhbCwKKyAgICBJY29uaWZpZWQs
CisgICAgTW9kYWwsCisgICAgTXVsdGlMaW5lLAorICAgIE11bHRpc2VsZWN0YWJsZSwKKyAgICBP
cGFxdWUsCisgICAgUHJlc3NlZCwKKyAgICBSZXNpemFibGUsCisgICAgU2VsZWN0YWJsZSwKKyAg
ICBTZWxlY3RlZCwKKyAgICBTZW5zaXRpdmUsCisgICAgU2hvd2luZywKKyAgICBTaW5nbGVMaW5l
LAorICAgIFN0YWxlLAorICAgIFRyYW5zaWVudCwKKyAgICBWZXJ0aWNhbCwKKyAgICBWaXNpYmxl
LAorICAgIE1hbmFnZXNEZXNjZW5kYW50cywKKyAgICBJbmRldGVybWluYXRlLAorICAgIFJlcXVp
cmVkLAorICAgIFRydW5jYXRlZCwKKyAgICBBbmltYXRlZCwKKyAgICBJbnZhbGlkRW50cnksCisg
ICAgU3VwcG9ydHNBdXRvY29tcGxldGlvbiwKKyAgICBTZWxlY3RhYmxlVGV4dCwKKyAgICBJc0Rl
ZmF1bHQsCisgICAgVmlzaXRlZCwKKyAgICBDaGVja2FibGUsCisgICAgSGFzUG9wdXAsCisgICAg
UmVhZE9ubHksCisgICAgTGFzdERlZmluZWRTdGF0ZSwKK307CisKK2VudW0gUmVsYXRpb24gewor
ICAgIE51bGwsCisgICAgTGFiZWxGb3IsCisgICAgTGFiZWxsZWRCeSwKKyAgICBDb250cm9sbGVy
Rm9yLAorICAgIENvbnRyb2xsZWRCeSwKKyAgICBNZW1iZXJPZiwKKyAgICBUb29sdGlwRm9yLAor
ICAgIE5vZGVDaGlsZE9mLAorICAgIE5vZGVQYXJlbnRPZiwKKyAgICBFeHRlbmRlZFJlbGF0aW9u
LAorICAgIEZsb3dzVG8sCisgICAgRmxvd3NGcm9tLAorICAgIFN1YndpbmRvd09mLAorICAgIEVt
YmVkcywKKyAgICBFbWJlZGRlZEJ5LAorICAgIFBvdXBGb3IsCisgICAgUGFyZW50V2luZG93T2Ys
CisgICAgRGVzY3JpcHRpb25Gb3IsCisgICAgRGVzY3JpYmVkQnksCisgICAgRGV0YWlscywKKyAg
ICBEZXRhaWxzRm9yLAorICAgIEVycm9yTWVzc2FnZSwKKyAgICBFcnJvckZvciwKKyAgICBMYXN0
RGVmaW5lZFJlbGF0aW9uLAorfTsKKworfSAvLyBuYW1lc3BhY2UgQXRzcGkKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRT
UEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggZDU4YjhiMDY2NTU2Li42OTgx
NzQxNzQ0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAgLTIxLDcgKzIxLDE1
IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgiCiAKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNw
aUVudW1zLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlSb290QXRzcGkuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVuZGVyQW5jZXN0b3JJdGVyYXRvci5oIgorI2luY2x1
ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMzAsMTIgKzM4LDExMTYgQEAgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaT4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjcmVhdGUoQVhDb3JlT2JqZWN0KiBjb3IK
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkoY29yZU9i
amVjdCkpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaShBWENvcmVPYmplY3QqKQorT3B0aW9uU2V0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6SW50ZXJmYWNlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmludGVyZmFjZXNGb3JPYmpl
Y3QoQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQogeworICAgIE9wdGlvblNldDxJbnRlcmZhY2U+
IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNjZXNzaWJsZSB9OworCisgICAgcmV0dXJuIGlu
dGVyZmFjZXM7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpKEFYQ29yZU9iamVjdCogY29yZU9iamVjdCkKKyAgICA6IG1fY29yZU9iamVjdChj
b3JlT2JqZWN0KQorICAgICwgbV9pbnRlcmZhY2VzKGludGVyZmFjZXNGb3JPYmplY3QoKm1fY29y
ZU9iamVjdCkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXR0YWNoKEFYQ29yZU9iamVjdCogYXhPYmpl
Y3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXM8QVhJc29sYXRlZE9iamVjdD4oKmF4T2JqZWN0
KSk7CisgICAgbV9heE9iamVjdCA9IGF4T2JqZWN0OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6ZGV0YWNoKCkKK3sKKyAgICBtX2F4T2JqZWN0ID0gbnVsbHB0cjsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNhY2hlRGVzdHJveWVkKCkKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9jb3JlT2JqZWN0ID0gbnVsbHB0
cjsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcm9vdCgpLT5hdHNwaSgpLnVucmVnaXN0ZXJPYmplY3QoKnRoaXMpOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZWxlbWVudERlc3Ryb3llZCgpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fY29yZU9iamVjdCA9IG51bGxwdHI7Cisg
ICAgaWYgKCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3BhcmVudCAmJiAqbV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LnZhbHVlKCktPmNoaWxk
UmVtb3ZlZCgqdGhpcyk7CisKKyAgICByb290KCktPmF0c3BpKCkudW5yZWdpc3Rlck9iamVjdCgq
dGhpcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBhdHNwaVJvbGUoQWNjZXNzaWJpbGl0eVJvbGUg
cm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpBbm5vdGF0aW9uOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uQWxl
cnQ6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Tm90aWZpY2F0aW9uOworICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uQWxlcnREaWFsb2c6CisgICAgICAgIHJldHVy
biBBdHNwaTo6Um9sZTo6QWxlcnQ7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGlj
YXRpb25EaWFsb2c6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6RGlhbG9nOworICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uU3RhdHVzOgorICAgICAgICByZXR1cm4g
QXRzcGk6OlJvbGU6OlN0YXR1c0JhcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtu
b3duOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlVua25vd247CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6QXVkaW86CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QXVkaW87
CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW86CisgICAgICAgIHJldHVybiBBdHNw
aTo6Um9sZTo6VmlkZW87CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uOgorICAg
ICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlB1c2hCdXR0b247CisgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6U3dpdGNoOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRvZ2dsZUJ1dHRv
bjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUb2dnbGVCdXR0b247CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6UmFkaW9CdXR0b246CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6UmFkaW9CdXR0b247CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2hlY2tCb3g6Cisg
ICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q2hlY2tCb3g7CisgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6U2xpZGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlNsaWRlcjsKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJHcm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpUYWJMaXN0OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlBhZ2VUYWJMaXN0
OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZDoKKyAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpUZXh0QXJlYToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTZWFy
Y2hGaWVsZDoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpFbnRyeTsKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OlN0YXRpYzsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpPdXRsaW5lOgorICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OlRyZWU6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6VHJl
ZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVlSXRlbToKKyAgICAgICAgcmV0dXJu
IEF0c3BpOjpSb2xlOjpUcmVlSXRlbTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51
QmFyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1lbnVCYXI7CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6TWVudUxpc3RQb3B1cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpNZW51OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1lbnU7CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6TWVudUxpc3RPcHRpb246CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TWVudUl0ZW06CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUJ1dHRvbjoKKyAg
ICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpNZW51SXRlbTsKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpNZW51SXRlbUNoZWNrYm94OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkNo
ZWNrTWVudUl0ZW07CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUl0ZW1SYWRpbzoK
KyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpSYWRpb01lbnVJdGVtOworICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OkNvbHVtbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpVbmtu
b3duOyAvLyBUaGVyZSdzIG5vIFRhYmxlQ29sdW1uIGluIGF0c3BpLgorICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OlJvdzoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUYWJsZVJvdzsK
KyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUb29sYmFyOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OlRvb2xCYXI7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWV0ZXI6Cisg
ICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6TGV2ZWxCYXI7CisgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6QnVzeUluZGljYXRvcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9n
cmVzc0luZGljYXRvcjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQcm9ncmVzc0JhcjsK
KyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpXaW5kb3c6CisgICAgICAgIHJldHVybiBBdHNw
aTo6Um9sZTo6V2luZG93OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9u
OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNvbWJvQm94OgorICAgICAgICByZXR1cm4g
QXRzcGk6OlJvbGU6OkNvbWJvQm94OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0
R3JvdXA6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6U3BsaXRQYW5lOworICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0dGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OlNlcGFyYXRvcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDb2xvcldlbGw6CisgICAg
ICAgIHJldHVybiBBdHNwaTo6Um9sZTo6UHVzaEJ1dHRvbjsKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpMaXN0OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Okxpc3Q7CisgICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2Nyb2xsQmFyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJv
bGU6OlNjcm9sbEJhcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTY3JvbGxBcmVhOgor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRhYlBhbmVsOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OlNjcm9sbFBhbmU7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JpZDoK
KyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJsZToKKyAgICAgICAgcmV0dXJuIEF0c3Bp
OjpSb2xlOjpUYWJsZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVlR3JpZDoKKyAg
ICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUcmVlVGFibGU7CisgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6QXBwbGljYXRpb246CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QXBwbGlj
YXRpb247CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25Hcm91cDoKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGZWVkOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OkZpZ3VyZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcmFwaGljc09iamVjdDoK
KyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpSYWRpb0dyb3VwOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1Jvb3Q6
CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6UGFuZWw7CisgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6Um93SGVhZGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlJvd0hlYWRl
cjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDb2x1bW5IZWFkZXI6CisgICAgICAgIHJl
dHVybiBBdHNwaTo6Um9sZTo6Q29sdW1uSGVhZGVyOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OkNhcHRpb246CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q2FwdGlvbjsKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkdyaWRDZWxsOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlRhYmxlQ2VsbDsKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5rOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OldlYkNvcmVMaW5rOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlTWFwTGluazoK
KyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpMaW5rOworICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVJvbGU6OkltYWdlTWFwOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkltYWdlTWFwOwor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkdyYXBoaWNzU3ltYm9sOgorICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OkltYWdlOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkltYWdl
OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RNYXJrZXI6CisgICAgICAgIHJldHVy
biBBdHNwaTo6Um9sZTo6VGV4dDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVu
dEFydGljbGU6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QXJ0aWNsZTsKKyAgICBjYXNl
IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpHcmFwaGljc0RvY3VtZW50OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkRvY3VtZW50
RnJhbWU7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnROb3RlOgorICAgICAg
ICByZXR1cm4gQXRzcGk6OlJvbGU6OkNvbW1lbnQ7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6SGVhZGluZzoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpIZWFkaW5nOworICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3g6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6TGlzdEJveDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0SXRlbToKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94T3B0aW9uOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6Okxpc3RJdGVtOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlBhcmFncmFw
aDoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQYXJhZ3JhcGg7CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6TGFiZWw6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGVnZW5k
OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkxhYmVsOworICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkJsb2NrcXVvdGU6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QmxvY2tR
dW90ZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGb290bm90ZToKKyAgICAgICAgcmV0
dXJuIEF0c3BpOjpSb2xlOjpGb290bm90ZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpB
cHBsaWNhdGlvblRleHRHcm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEaXY6Cisg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJlOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OlNWR1RleHQ6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEdyb3VwOgorICAg
ICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlNlY3Rpb247CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6Rm9vdGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkZvb3RlcjsKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGb3JtOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OkZvcm07CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2FudmFzOgorICAgICAgICByZXR1
cm4gQXRzcGk6OlJvbGU6OkNhbnZhczsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpIb3Jp
em9udGFsUnVsZToKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpTZXBhcmF0b3I7CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3BpbkJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIEF0c3Bp
OjpSb2xlOjpTcGluQnV0dG9uOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRhYjoKKyAg
ICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQYWdlVGFiOworICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVJvbGU6OlVzZXJJbnRlcmZhY2VUb29sdGlwOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OlRvb2xUaXA7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJlYToKKyAgICAgICAg
cmV0dXJuIEF0c3BpOjpSb2xlOjpEb2N1bWVudFdlYjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpXZWJBcHBsaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpFbWJlZGRl
ZDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbkxvZzoKKyAgICAgICAg
cmV0dXJuIEF0c3BpOjpSb2xlOjpMb2c7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBw
bGljYXRpb25NYXJxdWVlOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1hcnF1ZWU7Cisg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25UaW1lcjoKKyAgICAgICAgcmV0
dXJuIEF0c3BpOjpSb2xlOjpUaW1lcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEZWZp
bml0aW9uOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkRlZmluaXRpb247CisgICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnRNYXRoOgorICAgICAgICByZXR1cm4gQXRzcGk6
OlJvbGU6Ok1hdGg7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWF0aEVsZW1lbnQ6Cisg
ICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6TWF0aEZyYWN0aW9uOworICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OkxhbmRtYXJrQmFubmVyOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkxhbmRtYXJrQ29tcGxlbWVudGFyeToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5k
bWFya0NvbnRlbnRJbmZvOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrRG9j
UmVnaW9uOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrTWFpbjoKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb246CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtSZWdpb246CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TGFuZG1hcmtTZWFyY2g6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6TGFuZG1hcms7
CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0OgorICAgICAgICBy
ZXR1cm4gQXRzcGk6OlJvbGU6OkRlc2NyaXB0aW9uTGlzdDsKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpUZXJtOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRlc2NyaXB0aW9uTGlz
dFRlcm06CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6RGVzY3JpcHRpb25UZXJtOworICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRlc2NyaXB0aW9uTGlzdERldGFpbDoKKyAgICAgICAg
cmV0dXJuIEF0c3BpOjpSb2xlOjpEZXNjcmlwdGlvblZhbHVlOworICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkRlbGV0aW9uOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkNvbnRlbnRE
ZWxldGlvbjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpJbnNlcnRpb246CisgICAgICAg
IHJldHVybiBBdHNwaTo6Um9sZTo6Q29udGVudEluc2VydGlvbjsKKyAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpTdWJzY3JpcHQ6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6U3Vic2Ny
aXB0OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN1cGVyc2NyaXB0OgorICAgICAgICBy
ZXR1cm4gQXRzcGk6OlJvbGU6OlN1cGVyc2NyaXB0OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OklubGluZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUZXh0UGF0aDoKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUU3BhbjoKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpUaW1lOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlN0YXRpYzsKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEaXJlY3Rvcnk6CisgICAgICAgIHJldHVybiBBdHNwaTo6
Um9sZTo6RGlyZWN0b3J5UGFuZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNYXJrOgor
ICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1hcms7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6QnJvd3NlcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEZXRhaWxzOgorICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRpc2Nsb3N1cmVUcmlhbmdsZToKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpEcmF3ZXI6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RWRp
dGFibGVUZXh0OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okdyb3dBcmVhOgorICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OkhlbHBUYWc6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6SWdub3JlZDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpJbmNyZW1lbnRvcjoKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNYXR0ZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpQcmVzZW50YXRpb25hbDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSb3dHcm91
cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSdWJ5QmFzZToKKyAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpSdWJ5QmxvY2s6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UnVi
eUlubGluZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSdWJ5UnVuOgorICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OlJ1YnlUZXh0OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OlJ1bGVyOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlJ1bGVyTWFya2VyOgorICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNoZWV0OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OlNsaWRlclRodW1iOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNwaW5CdXR0b25QYXJ0
OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN1bW1hcnk6CisgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6U3lzdGVtV2lkZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJs
ZUhlYWRlckNvbnRhaW5lcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpWYWx1ZUluZGlj
YXRvcjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpVbmtub3duOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0dEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0geworICAg
IC8vIG1ldGhvZF9jYWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBj
b25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJp
YW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2lu
dGVyIHVzZXJEYXRhKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CisgICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAi
R2V0Um9sZSIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92
YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBhdHNwaU9iamVjdC0+cm9sZSgp
KSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFJvbGVOYW1l
IikpCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIGF0c3BpT2JqZWN0LT5yb2xlTmFtZSgpLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAi
R2V0TG9jYWxpemVkUm9sZU5hbWUiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2Nh
dGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHMpIiwgYXRzcGlP
YmplY3QtPmxvY2FsaXplZFJvbGVOYW1lKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiR2V0U3RhdGUiKSkgeworICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVy
IGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCIoYXUpIikp
OworCisgICAgICAgICAgICBhdXRvIHN0YXRlcyA9IGF0c3BpT2JqZWN0LT5zdGF0ZSgpOworICAg
ICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRlciwgR19WQVJJQU5UX1RZUEUo
ImF1IikpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAidSIs
IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0ZXMgJiAweGZmZmZmZmZmKSk7CisgICAgICAgICAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ1Iiwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHN0YXRlcyA+PiAzMikpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfY2xvc2Uo
JmJ1aWxkZXIpOworCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJu
X3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOworICAg
ICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEF0dHJpYnV0ZXMiKSkg
eworICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERF
Ul9JTklUKEdfVkFSSUFOVF9UWVBFKCIoYXtzc30pIikpOworCisgICAgICAgICAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9vcGVuKCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXtzc30iKSk7CisgICAg
ICAgICAgICBhdHNwaU9iamVjdC0+YnVpbGRBdHRyaWJ1dGVzKCZidWlsZGVyKTsKKyAgICAgICAg
ICAgIGdfdmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKKworICAgICAgICAgICAgZ19k
YnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRf
YnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1l
dGhvZE5hbWUsICJHZXRBcHBsaWNhdGlvbiIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9p
bnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoQChzbykp
IiwgYXRzcGlPYmplY3QtPnJvb3QoKS0+YXBwbGljYXRpb25SZWZlcmVuY2UoKSkpOworICAgICAg
ICBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRDaGlsZEF0SW5kZXgiKSkgewor
ICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICAgICAgZ192YXJpYW50X2dldChwYXJhbWV0
ZXJzLCAiKGkpIiwgJmluZGV4KTsKKyAgICAgICAgICAgIGF1dG8qIHdyYXBwZXIgPSBpbmRleCA+
PSAwID8gYXRzcGlPYmplY3QtPmNoaWxkQXQoaW5kZXgpIDogbnVsbHB0cjsKKyAgICAgICAgICAg
IGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJp
YW50X25ldygiKEAoc28pKSIsIHdyYXBwZXIgPyB3cmFwcGVyLT5yZWZlcmVuY2UoKSA6IGF0c3Bp
T2JqZWN0LT5yb290KCktPmF0c3BpKCkubnVsbFJlZmVyZW5jZSgpKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hpbGRyZW4iKSkgeworICAgICAgICAg
ICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFS
SUFOVF9UWVBFKCJhKHNvKSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgd3JhcHBl
ciA6IGF0c3BpT2JqZWN0LT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIGdfdmFyaWFudF9i
dWlsZGVyX2FkZCgmYnVpbGRlciwgIkAoc28pIiwgd3JhcHBlci0+cmVmZXJlbmNlKCkpOworICAg
ICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9u
LCBnX3ZhcmlhbnRfbmV3KCIoYShzbykpIiwgJmJ1aWxkZXIpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRJbmRleEluUGFyZW50IikpIHsKKyAgICAgICAg
ICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192
YXJpYW50X25ldygiKGkpIiwgYXRzcGlPYmplY3QtPmluZGV4SW5QYXJlbnQoKSkpOworICAgICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFJlbGF0aW9uU2V0IikpIHsK
KyAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5UX0JVSUxERVJf
SU5JVChHX1ZBUklBTlRfVFlQRSgiYSh1YShzbykpIikpOworICAgICAgICAgICAgYXRzcGlPYmpl
Y3QtPmJ1aWxkUmVsYXRpb25TZXQoJmJ1aWxkZXIpOworICAgICAgICAgICAgZ19kYnVzX21ldGhv
ZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYSh1
YShzbykpKSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiR2V0SW50ZXJmYWNlcyIpKSB7CisgICAgICAgICAgICBHVmFyaWFudEJ1aWxkZXIg
YnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImFzIikpOwor
ICAgICAgICAgICAgYXRzcGlPYmplY3QtPmJ1aWxkSW50ZXJmYWNlcygmYnVpbGRlcik7CisgICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9uZXcoIihhcykiLCAmYnVpbGRlcikpOworICAgICAgICB9CisgICAgfSwKKyAg
ICAvLyBnZXRfcHJvcGVydHkKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhcios
IGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lLCBH
RXJyb3IqKiBlcnJvciwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdWYXJpYW50KiB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGF1dG8gYXRzcGlPYmpl
Y3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRh
dGEpIH07CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
ICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJOYW1lIikpCisgICAgICAgICAgICBy
ZXR1cm4gZ192YXJpYW50X25ld19zdHJpbmcoYXRzcGlPYmplY3QtPm5hbWUoKS5kYXRhKCkpOwor
ICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJEZXNjcmlwdGlvbiIpKQorICAg
ICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfc3RyaW5nKGF0c3BpT2JqZWN0LT5kZXNjcmlw
dGlvbigpLmRhdGEoKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIkxv
Y2FsZSIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfc3RyaW5nKHNldGxvY2Fs
ZShMQ19NRVNTQUdFUywgbnVsbHB0cikpOworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0
eU5hbWUsICJBY2Nlc3NpYmxlSWQiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3
X3N0cmluZyhhdHNwaU9iamVjdC0+bV9heE9iamVjdCA/IFN0cmluZzo6bnVtYmVyKGF0c3BpT2Jq
ZWN0LT5tX2F4T2JqZWN0LT5vYmplY3RJRCgpKS51dGY4KCkuZGF0YSgpIDogIiIpOworICAgICAg
ICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJQYXJlbnQiKSkKKyAgICAgICAgICAgIHJl
dHVybiBhdHNwaU9iamVjdC0+cGFyZW50UmVmZXJlbmNlKCk7CisgICAgICAgIGlmICghZ19zdHJj
bXAwKHByb3BlcnR5TmFtZSwgIkNoaWxkQ291bnQiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3Zh
cmlhbnRfbmV3X2ludDMyKGF0c3BpT2JqZWN0LT5jaGlsZENvdW50KCkpOworCisgICAgICAgIGdf
c2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsICJV
bmtub3duIHByb3BlcnR5ICclcyciLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9LAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRyLAorICAgIC8v
IHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCitjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6cGF0aCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAobV9wYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIGF1dG8qIGF0c3BpUm9vdCA9
IHJvb3QoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRzcGlSb290KTsKKyAgICAgICAgbV9p
c1JlZ2lzdGVyZWQuc3RvcmUodHJ1ZSk7CisKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHREJ1
c0ludGVyZmFjZUluZm8qLCBHREJ1c0ludGVyZmFjZVZUYWJsZSo+PiBpbnRlcmZhY2VzOworICAg
ICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6QWNjZXNzaWJsZSkpCisg
ICAgICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJ
bmZvKj4oJndlYmtpdF9hY2Nlc3NpYmxlX2ludGVyZmFjZSksICZzX2FjY2Vzc2libGVGdW5jdGlv
bnMgfSk7CisgICAgICAgIG1fcGF0aCA9IGF0c3BpUm9vdC0+YXRzcGkoKS5yZWdpc3Rlck9iamVj
dCgqdGhpcywgV1RGTW92ZShpbnRlcmZhY2VzKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fcGF0
aDsKK30KKworR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVmZXJlbmNlKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBnX3Zh
cmlhbnRfbmV3KCIoc28pIiwgcm9vdCgpLT5hdHNwaSgpLnVuaXF1ZU5hbWUoKSwgcGF0aCgpLnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0Um9v
dChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKiByb290KQoreworICAgIExvY2tlciBsb2NrZXIgeyBt
X3Jvb3RMb2NrIH07CisgICAgbV9yb290ID0gcm9vdDsKK30KKworQWNjZXNzaWJpbGl0eVJvb3RB
dHNwaSogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb290KCkgY29uc3QKK3sKKyAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9yb290TG9jayB9OworICAgIHJldHVybiBtX3Jvb3Q7Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXRQYXJlbnQoc3RkOjpvcHRpb25hbDxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqPiBhdHNwaVBhcmVudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fcGFyZW50ID09IGF0c3BpUGFyZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3BhcmVudCA9IGF0c3BpUGFyZW50OworICAgIGlmIChtX3BhcmVu
dCAmJiAqbV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LnZhbHVlKCktPmNoaWxkQWRkZWQoKnRo
aXMpOworfQorCitzdGQ6Om9wdGlvbmFsPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+IEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6cGFyZW50KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8qIGF4UGFyZW50ID0gbV9heE9iamVjdC0+cGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgaWYgKCFheFBhcmVudCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoYXV0byogYXRzcGlQYXJlbnQgPSBheFBhcmVudC0+d3JhcHBlcigp
KQorICAgICAgICByZXR1cm4gYXRzcGlQYXJlbnQ7CisKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworfQorCitHVmFyaWFudCogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpwYXJlbnRSZWZlcmVu
Y2UoKSBjb25zdAoreworICAgIGF1dG8gcGFyZW50QXRzcGkgPSBwYXJlbnQoKTsKKyAgICBpZiAo
IXBhcmVudEF0c3BpKQorICAgICAgICByZXR1cm4gcm9vdCgpLT5hdHNwaSgpLm51bGxSZWZlcmVu
Y2UoKTsKKworICAgIGlmICghcGFyZW50QXRzcGkudmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIHJv
b3QoKS0+cmVmZXJlbmNlKCk7CisKKyAgICByZXR1cm4gcGFyZW50QXRzcGkudmFsdWUoKS0+cmVm
ZXJlbmNlKCk7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRD
b3VudCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fYXhP
YmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkq
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9heE9i
amVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJl
biA9IG1fYXhPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgaWYgKGluZGV4ID49IGNoaWxkcmVuLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiB3cmFwcGVyID0gY2hp
bGRyZW5baW5kZXhdLT53cmFwcGVyKCk7CisgICAgd3JhcHBlci0+c2V0Um9vdChyb290KCkpOwor
ICAgIHJldHVybiB3cmFwcGVyOworfQorCitWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRyZW4oKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX2F4
T2JqZWN0LT5jaGlsZHJlbigpOworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpPj4gd3JhcHBlcnM7CisgICAgd3JhcHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
aGlsZHJlbi5zaXplKCkpOworICAgIGF1dG8qIHJvb3QgPSB0aGlzLT5yb290KCk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChhdXRvKiB3cmFw
cGVyID0gY2hpbGQtPndyYXBwZXIoKSkgeworICAgICAgICAgICAgd3JhcHBlci0+c2V0Um9vdChy
b290KTsKKyAgICAgICAgICAgIHdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZCh3cmFwcGVyKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcnM7Cit9CisKK2ludCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmluZGV4SW5QYXJlbnQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KSB7CisgICAgICAgIG1f
aW5kZXhJblBhcmVudCA9IC0xOworICAgICAgICByZXR1cm4gbV9pbmRleEluUGFyZW50OworICAg
IH0KKworICAgIG1fYXhPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAgYXV0byog
YXhQYXJlbnQgPSBtX2F4T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBpZiAo
IWF4UGFyZW50KSB7CisgICAgICAgIG1faW5kZXhJblBhcmVudCA9IDA7CisgICAgICAgIHJldHVy
biBtX2luZGV4SW5QYXJlbnQ7CisgICAgfQorCisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBh
eFBhcmVudC0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yIChj
b25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChjaGlsZC5nZXQoKSA9
PSBtX2F4T2JqZWN0KSB7CisgICAgICAgICAgICBtX2luZGV4SW5QYXJlbnQgPSBpbmRleDsKKyAg
ICAgICAgICAgIHJldHVybiBtX2luZGV4SW5QYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgaW5k
ZXgrKzsKKyAgICB9CisKKyAgICBtX2luZGV4SW5QYXJlbnQgPSAtMTsKKyAgICByZXR1cm4gbV9p
bmRleEluUGFyZW50OworfQorCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjppbmRleElu
UGFyZW50Rm9yQ2hpbGRyZW5DaGFuZ2VkKEFjY2Vzc2liaWxpdHlBdHNwaTo6Q2hpbGRyZW5DaGFu
Z2VkIGNoYW5nZSkKK3sKKyAgICBpZiAoY2hhbmdlID09IEFjY2Vzc2liaWxpdHlBdHNwaTo6Q2hp
bGRyZW5DaGFuZ2VkOjpSZW1vdmVkKQorICAgICAgICByZXR1cm4gbV9pbmRleEluUGFyZW50Owor
CisgICAgdXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIGluZGV4SW5QYXJlbnQoKTsK
K30KKworQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om5hbWUoKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0
KQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRl
eHRPcmRlcjsKKyAgICBtX2F4T2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIpOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0IDogdGV4dE9yZGVyKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNoZWNrIGlzIGhlcmUgYmVjYXVzZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
dGl0bGVFbGVtZW50VGV4dCgpCisgICAgICAgIC8vIGFwcGVuZHMgYW4gZW1wdHkgU3RyaW5nIGZv
ciB0aGUgTGFiZWxCeUVsZW1lbnRUZXh0IHNvdXJjZSB3aGVuIHRoZXJlIGlzIGEKKyAgICAgICAg
Ly8gdGl0bGVVSUVsZW1lbnQoKS4gUmVtb3ZpbmcgdGhpcyBjaGVjayBtYWtlcyBzb21lIGZpZWxk
c2V0cyBsb3NlIHRoZWlyIG5hbWUuCisgICAgICAgIGlmICh0ZXh0LnRleHQuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2ViQ29yZSBBY2Nlc3NpYmlsaXR5
IHNob3VsZCBwcm92aWRlIHVzIHdpdGggdGhlIHRleHQgYWx0ZXJuYXRpdmUgY29tcHV0YXRpb24K
KyAgICAgICAgLy8gaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhhdCBzcGVjLiBTbyB0YWtlIHRo
ZSBmaXJzdCB0aGluZyB0aGF0IG91ciBwbGF0Zm9ybQorICAgICAgICAvLyBkb2VzIG5vdCBleHBv
c2UgdmlhIHRoZSBBdGtPYmplY3QgZGVzY3JpcHRpb24uCisgICAgICAgIGlmICh0ZXh0LnRleHRT
b3VyY2UgIT0gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkhlbHAgJiYgdGV4dC50ZXh0U291cmNl
ICE9IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpTdW1tYXJ5KQorICAgICAgICAgICAgcmV0dXJu
IHRleHQudGV4dC51dGY4KCk7CisgICAgfQorCisgICAgcmV0dXJuICIiOworfQorCitDU3RyaW5n
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+IHRleHRPcmRl
cjsKKyAgICBtX2F4T2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIpOworCisgICAg
Ym9vbCBuYW1lVGV4dEF2YWlsYWJsZSA9IGZhbHNlOworICAgIGZvciAoY29uc3QgYXV0byYgdGV4
dCA6IHRleHRPcmRlcikgeworICAgICAgICAvLyBXZWJDb3JlIEFjY2Vzc2liaWxpdHkgc2hvdWxk
IHByb3ZpZGUgdXMgd2l0aCB0aGUgdGV4dCBhbHRlcm5hdGl2ZSBjb21wdXRhdGlvbgorICAgICAg
ICAvLyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGF0IHNwZWMuIFNvIHRha2UgdGhlIGZpcnN0
IHRoaW5nIHRoYXQgb3VyIHBsYXRmb3JtCisgICAgICAgIC8vIGRvZXMgbm90IGV4cG9zZSB2aWEg
dGhlIEF0a09iamVjdCBuYW1lLgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFjY2Vz
c2liaWxpdHlUZXh0U291cmNlOjpIZWxwIHx8IHRleHQudGV4dFNvdXJjZSA9PSBBY2Nlc3NpYmls
aXR5VGV4dFNvdXJjZTo6U3VtbWFyeSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0LnRleHQudXRm
OCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG90aGVyIHRleHQgYWx0ZXJuYXRpdmUs
IHRoZSB0aXRsZSB0YWcgY29udGVudHMgd2lsbCBoYXZlIGJlZW4KKyAgICAgICAgLy8gdXNlZCBm
b3IgdGhlIEF0a09iamVjdCBuYW1lLiBXZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSBpdCBoZXJl
LgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFjY2Vzc2liaWxpdHlUZXh0U291cmNl
OjpUaXRsZVRhZyAmJiBuYW1lVGV4dEF2YWlsYWJsZSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
LnRleHQudXRmOCgpOworCisgICAgICAgIG5hbWVUZXh0QXZhaWxhYmxlID0gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEluY2x1ZGVPcmllbnRh
dGlvblN0YXRlKGNvbnN0IEFYQ29yZU9iamVjdCYgY29yZU9iamVjdCkKK3sKKyAgICByZXR1cm4g
Y29yZU9iamVjdC5pc0NvbWJvQm94KCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5pc1JhZGlvR3Jv
dXAoKQorICAgICAgICB8fCBjb3JlT2JqZWN0LmlzVHJlZUdyaWQoKQorICAgICAgICB8fCBjb3Jl
T2JqZWN0LmlzU2Nyb2xsYmFyKCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5pc0xpc3RCb3goKQor
ICAgICAgICB8fCBjb3JlT2JqZWN0LmlzTWVudSgpCisgICAgICAgIHx8IGNvcmVPYmplY3QuaXNU
cmVlKCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5pc01lbnVCYXIoKQorICAgICAgICB8fCBjb3Jl
T2JqZWN0LmlzU3BsaXR0ZXIoKQorICAgICAgICB8fCBjb3JlT2JqZWN0LmlzVGFiTGlzdCgpCisg
ICAgICAgIHx8IGNvcmVPYmplY3QuaXNUb29sYmFyKCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5p
c1NsaWRlcigpOworfQorCit1aW50NjRfdCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21N
YWluVGhyZWFkPHVpbnQ2NF90PihbdGhpc10oKSAtPiB1aW50NjRfdCB7CisgICAgICAgIHVpbnQ2
NF90IHN0YXRlcyA9IDA7CisKKyAgICAgICAgYXV0byBhZGRTdGF0ZSA9IFsmXShBdHNwaTo6U3Rh
dGUgYXRzcGlTdGF0ZSkgeworICAgICAgICAgICAgc3RhdGVzIHw9IChHX0dVSU5UNjRfQ09OU1RB
TlQoMSkgPDwgYXRzcGlTdGF0ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1fY29yZU9i
amVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpIHsKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3Bp
OjpTdGF0ZTo6RGVmdW5jdCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGVzOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNFbmFibGVkKCkpIHsKKyAgICAgICAgICAg
IGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6RW5hYmxlZCk7CisgICAgICAgICAgICBhZGRTdGF0ZShB
dHNwaTo6U3RhdGU6OlNlbnNpdGl2ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0LT5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRl
OjpWaXNpYmxlKTsKKyAgICAgICAgICAgIGlmICghbV9jb3JlT2JqZWN0LT5pc09mZlNjcmVlbigp
KQorICAgICAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2hvd2luZyk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgp
KQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpGb2N1c2FibGUpOworCisgICAg
ICAgIGlmIChtX2NvcmVPYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICAgICAgYWRkU3RhdGUo
QXRzcGk6OlN0YXRlOjpGb2N1c2VkKTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5T
ZXRWYWx1ZUF0dHJpYnV0ZSgpKSB7CisgICAgICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5zdXBw
b3J0c0NoZWNrZWQoKSkKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkNo
ZWNrYWJsZSk7CisKKyAgICAgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzVGV4dENvbnRyb2wo
KSB8fCBtX2NvcmVPYmplY3QtPmlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSkKKyAgICAgICAgICAg
ICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkVkaXRhYmxlKTsKKyAgICAgICAgfSBlbHNlIGlm
IChtX2NvcmVPYmplY3QtPnN1cHBvcnRzUmVhZE9ubHkoKSkKKyAgICAgICAgICAgIGFkZFN0YXRl
KEF0c3BpOjpTdGF0ZTo6UmVhZE9ubHkpOworCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlz
Q2hlY2tlZCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpDaGVja2VkKTsK
KworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1ByZXNzZWQoKSkKKyAgICAgICAgICAgIGFk
ZFN0YXRlKEF0c3BpOjpTdGF0ZTo6UHJlc3NlZCk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVj
dC0+aXNSZXF1aXJlZCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpSZXF1
aXJlZCk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlRleHRBcmVhIHx8IG1fY29yZU9iamVjdC0+YXJpYUlzTXVsdGlsaW5lKCkp
CisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6Ok11bHRpTGluZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6
OlRleHRGaWVsZCB8fCBtX2NvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpTZWFyY2hGaWVsZCkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2lu
Z2xlTGluZSk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQor
ICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpTZWxlY3RhYmxlVGV4dCk7CisKKyAg
ICAgICAgaWYgKG1fY29yZU9iamVjdC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSkKKyAgICAg
ICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2VsZWN0YWJsZSk7CisKKyAgICAgICAgaWYg
KG1fY29yZU9iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSkKKyAgICAgICAgICAgIGFkZFN0YXRl
KEF0c3BpOjpTdGF0ZTo6TXVsdGlzZWxlY3RhYmxlKTsKKworICAgICAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5pc1NlbGVjdGVkKCkpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlNl
bGVjdGVkKTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5TZXRFeHBhbmRlZEF0dHJp
YnV0ZSgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpFeHBhbmRhYmxlKTsK
KworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc0V4cGFuZGVkKCkpCisgICAgICAgICAgICBh
ZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkV4cGFuZGVkKTsKKworICAgICAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5oYXNQb3B1cCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpIYXNQ
b3B1cCk7CisKKyAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVPcmllbnRhdGlvblN0YXRlKCptX2Nv
cmVPYmplY3QpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+b3JpZW50YXRp
b24oKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhvcml6
b250YWw6CisgICAgICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpIb3Jpem9udGFs
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0
eU9yaWVudGF0aW9uOjpWZXJ0aWNhbDoKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6
U3RhdGU6OlZlcnRpY2FsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpVbmRlZmluZWQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0
ZTo6SW5kZXRlcm1pbmF0ZSk7CisgICAgICAgIGVsc2UgaWYgKChtX2NvcmVPYmplY3QtPmlzQ2hl
Y2tib3hPclJhZGlvKCkgfHwgbV9jb3JlT2JqZWN0LT5pc01lbnVJdGVtKCkgfHwgbV9jb3JlT2Jq
ZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSAmJiBtX2NvcmVPYmplY3QtPmNoZWNrYm94T3JSYWRpb1Zh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpNaXhlZCkKKyAgICAgICAgICAgIGFk
ZFN0YXRlKEF0c3BpOjpTdGF0ZTo6SW5kZXRlcm1pbmF0ZSk7CisKKyAgICAgICAgaWYgKG1fY29y
ZU9iamVjdC0+aXNNb2RhbE5vZGUoKSkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0
ZTo6TW9kYWwpOworCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzQnVzeSgpKQorICAgICAg
ICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpCdXN5KTsKKworICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0LT5pbnZhbGlkU3RhdHVzKCkgIT0gImZhbHNlIikKKyAgICAgICAgICAgIGFkZFN0YXRl
KEF0c3BpOjpTdGF0ZTo6SW52YWxpZEVudHJ5KTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0
LT5zdXBwb3J0c0F1dG9Db21wbGV0ZSgpICYmIG1fY29yZU9iamVjdC0+YXV0b0NvbXBsZXRlVmFs
dWUoKSAhPSAibm9uZSIpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlN1cHBv
cnRzQXV0b2NvbXBsZXRpb24pOworCisgICAgICAgIHJldHVybiBzdGF0ZXM7CisgICAgfSk7Cit9
CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmlkKCkgY29uc3QKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29yZU9iamVjdCkKKyAg
ICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgIGlmICghbV9j
b3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGF1dG8qIGVsZW1lbnQg
PSBtX2NvcmVPYmplY3QtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQtPmdldElk
QXR0cmlidXRlKCkuc3RyaW5nKCk7CisKKyAgICByZXR1cm4geyB9OworfQorCitIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmF0dHJpYnV0ZXMoKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBtYXA7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIG1hcC5hZGQoInRvb2xr
aXQiLCAiV2ViS2l0R1RLIik7CisjZWxpZiBQTEFURk9STShXUEUpCisgICAgbWFwLmFkZCgidG9v
bGtpdCIsICJXUEVXZWJLaXQiKTsKKyNlbmRpZgorICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAg
ICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBpZiAoIW1fY29y
ZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1hcDsKKworICAgIFN0cmluZyB0YWdOYW1lID0gbV9j
b3JlT2JqZWN0LT50YWdOYW1lKCk7CisgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgbWFwLmFkZCgidGFnIiwgdGFnTmFtZSk7CisKKyAgICBpZiAoYXV0byogZWxlbWVudCA9IG1f
Y29yZU9iamVjdC0+ZWxlbWVudCgpKSB7CisgICAgICAgIFN0cmluZyBpZCA9IGVsZW1lbnQtPmdl
dElkQXR0cmlidXRlKCkuc3RyaW5nKCk7CisgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbWFwLmFkZCgiaWQiLCBpZCk7CisgICAgfQorCisgICAgaW50IGxldmVsID0gbV9j
b3JlT2JqZWN0LT5pc0hlYWRpbmcoKSA/IG1fY29yZU9iamVjdC0+aGVhZGluZ0xldmVsKCkgOiBt
X2NvcmVPYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7CisgICAgaWYgKGxldmVsKQorICAgICAg
ICBtYXAuYWRkKCJsZXZlbCIsIFN0cmluZzo6bnVtYmVyKGxldmVsKSk7CisKKyAgICBpbnQgcm93
Q291bnQgPSBtX2NvcmVPYmplY3QtPmF4Um93Q291bnQoKTsKKyAgICBpZiAocm93Q291bnQpCisg
ICAgICAgIG1hcC5hZGQoInJvd2NvdW50IiwgU3RyaW5nOjpudW1iZXIocm93Q291bnQpKTsKKwor
ICAgIGludCBjb2x1bW5Db3VudCA9IG1fY29yZU9iamVjdC0+YXhDb2x1bW5Db3VudCgpOworICAg
IGlmIChjb2x1bW5Db3VudCkKKyAgICAgICAgbWFwLmFkZCgiY29sY291bnQiLCBTdHJpbmc6Om51
bWJlcihjb2x1bW5Db3VudCkpOworCisgICAgaW50IHJvd0luZGV4ID0gbV9jb3JlT2JqZWN0LT5h
eFJvd0luZGV4KCk7CisgICAgaWYgKHJvd0luZGV4ICE9IC0xKQorICAgICAgICBtYXAuYWRkKCJy
b3dpbmRleCIsIFN0cmluZzo6bnVtYmVyKHJvd0luZGV4KSk7CisKKyAgICBpbnQgY29sdW1uSW5k
ZXggPSBtX2NvcmVPYmplY3QtPmF4Q29sdW1uSW5kZXgoKTsKKyAgICBpZiAoY29sdW1uSW5kZXgg
IT0gLTEpCisgICAgICAgIG1hcC5hZGQoImNvbGluZGV4IiwgU3RyaW5nOjpudW1iZXIoY29sdW1u
SW5kZXgpKTsKKworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPihtX2NvcmVPYmpl
Y3QpKSB7CisgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsPigqbV9jb3JlT2JqZWN0KTsKKyAgICAgICAgaW50IHJvd1NwYW4gPSBjZWxsLmF4Um93U3Bh
bigpOworICAgICAgICBpZiAocm93U3BhbiAhPSAtMSkKKyAgICAgICAgICAgIG1hcC5hZGQoInJv
d3NwYW4iLCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKSk7CisKKyAgICAgICAgaW50IGNvbHVtblNw
YW4gPSBjZWxsLmF4Q29sdW1uU3BhbigpOworICAgICAgICBpZiAoY29sdW1uU3BhbiAhPSAtMSkK
KyAgICAgICAgICAgIG1hcC5hZGQoImNvbHNwYW4iLCBTdHJpbmc6Om51bWJlcihjb2x1bW5TcGFu
KSk7CisgICAgfQorCisgICAgU3RyaW5nIHBsYWNlaG9sZGVyID0gbV9jb3JlT2JqZWN0LT5wbGFj
ZWhvbGRlclZhbHVlKCk7CisgICAgaWYgKCFwbGFjZWhvbGRlci5pc0VtcHR5KCkpCisgICAgICAg
IG1hcC5hZGQoInBsYWNlaG9sZGVyLXRleHQiLCBwbGFjZWhvbGRlcik7CisKKyAgICBpZiAobV9j
b3JlT2JqZWN0LT5zdXBwb3J0c0F1dG9Db21wbGV0ZSgpKQorICAgICAgICBtYXAuYWRkKCJhdXRv
Y29tcGxldGUiLCBtX2NvcmVPYmplY3QtPmF1dG9Db21wbGV0ZVZhbHVlKCkpOworCisgICAgaWYg
KG1fY29yZU9iamVjdC0+c3VwcG9ydHNIYXNQb3B1cCgpKQorICAgICAgICBtYXAuYWRkKCJoYXNw
b3B1cCIsIG1fY29yZU9iamVjdC0+cG9wdXBWYWx1ZSgpKTsKKworICAgIGlmIChtX2NvcmVPYmpl
Y3QtPnN1cHBvcnRzQ3VycmVudCgpKQorICAgICAgICBtYXAuYWRkKCJjdXJyZW50IiwgbV9jb3Jl
T2JqZWN0LT5jdXJyZW50VmFsdWUoKSk7CisKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5zdXBwb3J0
c1Bvc0luU2V0KCkpCisgICAgICAgIG1hcC5hZGQoInBvc2luc2V0IiwgU3RyaW5nOjpudW1iZXIo
bV9jb3JlT2JqZWN0LT5wb3NJblNldCgpKSk7CisKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5zdXBw
b3J0c1NldFNpemUoKSkKKyAgICAgICAgbWFwLmFkZCgic2V0c2l6ZSIsIFN0cmluZzo6bnVtYmVy
KG1fY29yZU9iamVjdC0+c2V0U2l6ZSgpKSk7CisKKyAgICAvLyBUaGUgQ29yZSBBQU0gc3RhdGVz
IHRoYXQgYW4gZXhwbGljaXRseS1zZXQgdmFsdWUgc2hvdWxkIGJlIGV4cG9zZWQsIGluY2x1ZGlu
ZyAibm9uZSIuCisgICAgaWYgKHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3QqPihtX2Nv
cmVPYmplY3QpLT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjphcmlhX3NvcnRBdHRyKSkgeworICAg
ICAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+c29ydERpcmVjdGlvbigpKSB7CisgICAgICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkludmFsaWQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNjZW5kaW5nOgor
ICAgICAgICAgICAgbWFwLmFkZCgic29ydCIsICJhc2NlbmRpbmciKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpEZXNjZW5kaW5n
OgorICAgICAgICAgICAgbWFwLmFkZCgic29ydCIsICJkZXNjZW5kaW5nIik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6T3RoZXI6
CisgICAgICAgICAgICBtYXAuYWRkKCJzb3J0IiwgIm90aGVyIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6Tm9uZToKKyAgICAg
ICAgICAgIG1hcC5hZGQoInNvcnQiLCAibm9uZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgaXNSZWFkT25seSA9IG1fY29yZU9iamVjdC0+cmVh
ZE9ubHlWYWx1ZSgpOworICAgIGlmICghaXNSZWFkT25seS5pc0VtcHR5KCkpCisgICAgICAgIG1h
cC5hZGQoInJlYWRvbmx5IiwgaXNSZWFkT25seSk7CisKKyAgICBTdHJpbmcgdmFsdWVEZXNjcmlw
dGlvbiA9IG1fY29yZU9iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgIGlmICghdmFsdWVE
ZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5hZGQoInZhbHVldGV4dCIsIHZhbHVl
RGVzY3JpcHRpb24pOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBXM0MgQ29yZSBBY2Nlc3Np
YmlsaXR5IEFQSSBNYXBwaW5ncyAxLjEsIHNlY3Rpb24gNS40LjEgR2VuZXJhbCBSdWxlczoKKyAg
ICAvLyAiVXNlciBhZ2VudHMgbXVzdCBleHBvc2UgdGhlIFdBSS1BUklBIHJvbGUgc3RyaW5nIGlm
IHRoZSBBUEkgc3VwcG9ydHMgYSBtZWNoYW5pc20gdG8gZG8gc28uIgorICAgIC8vIEluIHRoZSBj
YXNlIG9mIEFUSywgdGhlIG1lY2hhbmlzbSB0byBkbyBzbyBpcyBhbiBvYmplY3QgYXR0cmlidXRl
IHBhaXIgKHhtbC1yb2xlczoic3RyaW5nIikuCisgICAgLy8gV2UgY2Fubm90IHVzZSB0aGUgY29t
cHV0ZWRSb2xlU3RyaW5nIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSBpdCBpcyBub3QgbGltaXRl
ZCB0byBlbGVtZW50cworICAgIC8vIHdpdGggQVJJQSByb2xlcywgYW5kIGl0IG1pZ2h0IG5vdCBj
b250YWluIHRoZSBhY3R1YWwgQVJJQSByb2xlIHZhbHVlIChlLmcuIERQdWIgQVJJQSkuCisgICAg
U3RyaW5nIHJvbGVTdHJpbmcgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4obV9j
b3JlT2JqZWN0KS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cm9sZUF0dHIpOworICAgIGlmICgh
cm9sZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5hZGQoInhtbC1yb2xlcyIsIHJvbGVT
dHJpbmcpOworCisgICAgU3RyaW5nIGNvbXB1dGVkUm9sZVN0cmluZyA9IG1fY29yZU9iamVjdC0+
Y29tcHV0ZWRSb2xlU3RyaW5nKCk7CisgICAgaWYgKCFjb21wdXRlZFJvbGVTdHJpbmcuaXNFbXB0
eSgpKSB7CisgICAgICAgIG1hcC5hZGQoImNvbXB1dGVkLXJvbGUiLCBjb21wdXRlZFJvbGVTdHJp
bmcpOworCisgICAgICAgIC8vIFRoZSBIVE1MIEFBTSBtYXBzIHNldmVyYWwgZWxlbWVudHMgdG8g
QVJJQSBsYW5kbWFyayByb2xlcy4gSW4gb3JkZXIgZm9yIHRoZSB0eXBlIG9mIGxhbmRtYXJrCisg
ICAgICAgIC8vIHRvIGJlIG9idGFpbmFibGUgaW4gdGhlIHNhbWUgZmFzaGlvbiBhcyBhbiBBUklB
IGxhbmRtYXJrLCBmYWxsIGJhY2sgb24gdGhlIGNvbXB1dGVkUm9sZVN0cmluZy4KKyAgICAgICAg
Ly8gV2UgYWxzbyB3YW50IHRvIGRvIHRoaXMgZm9yIHRoZSBzdHlsZS1mb3JtYXQtZ3JvdXAgZWxl
bWVudCB0eXBlcyBzbyB0aGF0IHRoZSB0eXBlIG9mIGZvcm1hdAorICAgICAgICAvLyBncm91cCBp
dCBpcyBkb2Vzbid0IGdldCBsb3N0IHRvIGEgZ2VuZXJpYyBwbGF0Zm9ybSByb2xlLgorICAgICAg
ICBpZiAobV9jb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlS
b2xlOjpVbmtub3duICYmIChtX2NvcmVPYmplY3QtPmlzTGFuZG1hcmsoKSB8fCBtX2NvcmVPYmpl
Y3QtPmlzU3R5bGVGb3JtYXRHcm91cCgpKSkKKyAgICAgICAgICAgIG1hcC5zZXQoInhtbC1yb2xl
cyIsIGNvbXB1dGVkUm9sZVN0cmluZyk7CisgICAgfQorCisgICAgU3RyaW5nIHJvbGVEZXNjcmlw
dGlvbiA9IG1fY29yZU9iamVjdC0+cm9sZURlc2NyaXB0aW9uKCk7CisgICAgaWYgKCFyb2xlRGVz
Y3JpcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBtYXAuYWRkKCJyb2xlZGVzY3JpcHRpb24iLCBy
b2xlRGVzY3JpcHRpb24pOworCisgICAgU3RyaW5nIGRyb3BFZmZlY3QgPSBzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0Kj4obV9jb3JlT2JqZWN0KS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6YXJpYV9kcm9wZWZmZWN0QXR0cik7CisgICAgaWYgKCFkcm9wRWZmZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgbWFwLmFkZCgiZHJvcGVmZmVjdCIsIGRyb3BFZmZlY3QpOworCisgICAgaWYgKG1f
Y29yZU9iamVjdC0+c3VwcG9ydHNEcmFnZ2luZygpKQorICAgICAgICBtYXAuYWRkKCJncmFiYmVk
IiwgbV9jb3JlT2JqZWN0LT5pc0dyYWJiZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisgICAg
U3RyaW5nIGtleVNob3J0Y3V0cyA9IG1fY29yZU9iamVjdC0+a2V5U2hvcnRjdXRzVmFsdWUoKTsK
KyAgICBpZiAoIWtleVNob3J0Y3V0cy5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5hZGQoImtleXNo
b3J0Y3V0cyIsIGtleVNob3J0Y3V0cyk7CisKKyAgICByZXR1cm4gbWFwOworfQorCit2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRBdHRyaWJ1dGVzKEdWYXJpYW50QnVpbGRlciog
YnVpbGRlcikgY29uc3QKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBBY2Nlc3NpYmlsaXR5Ojpy
ZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4+KFt0aGlz
XSgpIC0+IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPmF0
dHJpYnV0ZXMoKTsKKyAgICB9KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBhdHRyaWJ1
dGVzKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIntzc30iLCBpdC5r
ZXkudXRmOCgpLmRhdGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0hhc2hNYXA8
dWludDMyX3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4+IEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6cmVsYXRpb25NYXAoKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4+IG1hcDsKKyAgICBpZiAobV9jb3JlT2Jq
ZWN0KQorICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAg
aWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiBtYXA7CisKKyAgICBhdXRvIGFkZFJl
bGF0aW9uID0gWyZdKEF0c3BpOjpSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgQWNjZXNzaWJpbGl0
eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikgeworICAgICAg
ICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IHdyYXBwZXJzOworICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKSkKKyAgICAgICAgICAgICAgICB3cmFw
cGVycy5hcHBlbmQod3JhcHBlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF3cmFwcGVycy5p
c0VtcHR5KCkpCisgICAgICAgICAgICBtYXAuYWRkKHJlbGF0aW9uLCBXVEZNb3ZlKHdyYXBwZXJz
KSk7CisKKyAgICB9OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHM7CisgICAgaWYgKG1fY29yZU9iamVj
dC0+aXNDb250cm9sKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxhYmVsID0gbV9jb3JlT2JqZWN0
LT5jb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgYXJp
YUxhYmVsbGVkQnlFbGVtZW50cy5hcHBlbmQobGFiZWwpOworICAgIH0gZWxzZSBpZiAobV9jb3Jl
T2JqZWN0LT5pc0ZpZWxkc2V0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxhYmVsID0gbV9jb3Jl
T2JqZWN0LT50aXRsZVVJRWxlbWVudCgpKQorICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnlFbGVt
ZW50cy5hcHBlbmQobGFiZWwpOworICAgIH0gZWxzZSBpZiAobV9jb3JlT2JqZWN0LT5yb2xlVmFs
dWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGVnZW5kKSB7CisgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJGaWVsZHNldCA9IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJCbG9jaz4oKm1fY29yZU9iamVj
dC0+cmVuZGVyZXIoKSkuZmlyc3QoKSkgeworICAgICAgICAgICAgaWYgKHJlbmRlckZpZWxkc2V0
LT5pc0ZpZWxkc2V0KCkpCisgICAgICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnlFbGVtZW50cy5h
cHBlbmQobV9jb3JlT2JqZWN0LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHJlbmRlckZp
ZWxkc2V0KSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX2NvcmVPYmplY3QtPmNvcnJl
c3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCkpCisgICAgICAgIG1fY29yZU9iamVjdC0+
YXJpYUxhYmVsbGVkQnlFbGVtZW50cyhhcmlhTGFiZWxsZWRCeUVsZW1lbnRzKTsKKyAgICBhZGRS
ZWxhdGlvbihBdHNwaTo6TGFiZWxsZWRCeSwgYXJpYUxhYmVsbGVkQnlFbGVtZW50cyk7CisKKyAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUxh
YmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzOworICAgIGlmIChhdXRvKiBjb250cm9sID0gbV9j
b3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxlbWVudCgpKQorICAgICAg
ICBhcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMuYXBwZW5kKGNvbnRyb2wpOworICAg
IGVsc2UKKyAgICAgICAgbV9jb3JlT2JqZWN0LT5hcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxl
bWVudHMoYXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKyAgICBhZGRSZWxhdGlv
bihBdHNwaTo6TGFiZWxGb3IsIGFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyk7CisK
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJp
YUZsb3dUb0VsZW1lbnRzOworICAgIG1fY29yZU9iamVjdC0+YXJpYUZsb3dUb0VsZW1lbnRzKGFy
aWFGbG93VG9FbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkZsb3dzVG8sIGFyaWFG
bG93VG9FbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgYXJpYUZsb3dUb1JlZmVyZW5jaW5nRWxlbWVudHM7CisgICAgbV9jb3Jl
T2JqZWN0LT5hcmlhRmxvd1RvUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhRmxvd1RvUmVmZXJlbmNp
bmdFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkZsb3dzRnJvbSwgYXJpYUZsb3dU
b1JlZmVyZW5jaW5nRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzOworICAgIG1fY29y
ZU9iamVjdC0+YXJpYURlc2NyaWJlZEJ5RWxlbWVudHMoYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMp
OworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXNjcmliZWRCeSwgYXJpYURlc2NyaWJlZEJ5RWxl
bWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIGFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5nRWxlbWVudHM7CisgICAgbV9jb3JlT2Jq
ZWN0LT5hcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKGFyaWFEZXNjcmliZWRCeVJl
ZmVyZW5jaW5nRWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXNjcmlwdGlvbkZv
ciwgYXJpYURlc2NyaWJlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUNvbnRyb2xzRWxlbWVu
dHM7CisgICAgbV9jb3JlT2JqZWN0LT5hcmlhQ29udHJvbHNFbGVtZW50cyhhcmlhQ29udHJvbHNF
bGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkNvbnRyb2xsZXJGb3IsIGFyaWFDb250
cm9sc0VsZW1lbnRzKTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBhcmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzOworICAgIG1fY29y
ZU9iamVjdC0+YXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhQ29udHJvbHNSZWZl
cmVuY2luZ0VsZW1lbnRzKTsKKyAgICBhZGRSZWxhdGlvbihBdHNwaTo6Q29udHJvbGxlZEJ5LCBh
cmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhT3duc0VsZW1lbnRzOworICAgIG1f
Y29yZU9iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3duc0VsZW1lbnRzKTsKKyAgICBhZGRS
ZWxhdGlvbihBdHNwaTo6Tm9kZVBhcmVudE9mLCBhcmlhT3duc0VsZW1lbnRzKTsKKworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhT3duc1Jl
ZmVyZW5jaW5nRWxlbWVudHM7CisgICAgbV9jb3JlT2JqZWN0LT5hcmlhT3duc1JlZmVyZW5jaW5n
RWxlbWVudHMoYXJpYU93bnNSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKyAgICBhZGRSZWxhdGlvbihB
dHNwaTo6Tm9kZUNoaWxkT2YsIGFyaWFPd25zUmVmZXJlbmNpbmdFbGVtZW50cyk7CisKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYURldGFp
bHNFbGVtZW50czsKKyAgICBtX2NvcmVPYmplY3QtPmFyaWFEZXRhaWxzRWxlbWVudHMoYXJpYURl
dGFpbHNFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkRldGFpbHMsIGFyaWFEZXRh
aWxzRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50czsKKyAgICBtX2NvcmVP
YmplY3QtPmFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhRGV0YWlsc1JlZmVyZW5j
aW5nRWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXRhaWxzRm9yLCBhcmlhRGV0
YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFFcnJvck1lc3NhZ2VFbGVtZW50czsKKyAgICBt
X2NvcmVPYmplY3QtPmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyhhcmlhRXJyb3JNZXNzYWdlRWxl
bWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpFcnJvck1lc3NhZ2UsIGFyaWFFcnJvck1l
c3NhZ2VFbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgYXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHM7CisgICAg
bV9jb3JlT2JqZWN0LT5hcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhRXJy
b3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkVy
cm9yRm9yLCBhcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyk7CisKKyAgICByZXR1
cm4gbWFwOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRSZWxhdGlv
blNldChHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgYXV0byByZWxhdGlv
bk1hcCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxIYXNoTWFw
PHVpbnQzMl90LCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+Pj4oW3Ro
aXNdKCkgLT4gSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+Pj4geworICAgICAgICByZXR1cm4gdGhpcy0+cmVsYXRpb25NYXAoKTsKKyAgICB9
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiByZWxhdGlvbk1hcCkgeworICAgICAgICBH
VmFyaWFudEJ1aWxkZXIgYXJyYXlCdWlsZGVyID0gR19WQVJJQU5UX0JVSUxERVJfSU5JVChHX1ZB
UklBTlRfVFlQRSgiYShzbykiKSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgYXRzcGlPYmpl
Y3QgOiBpdC52YWx1ZSkgeworICAgICAgICAgICAgYXRzcGlPYmplY3QtPnNldFJvb3Qocm9vdCgp
KTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYXJyYXlCdWlsZGVyLCAiQChz
bykiLCBhdHNwaU9iamVjdC0+cmVmZXJlbmNlKCkpOworICAgICAgICB9CisgICAgICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHVhKHNvKSkiLCBpdC5rZXksICZhcnJheUJ1aWxk
ZXIpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmJ1aWxkSW50
ZXJmYWNlcyhHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKElu
dGVyZmFjZTo6QWNjZXNzaWJsZSkpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWls
ZGVyLCAicyIsIHdlYmtpdF9hY2Nlc3NpYmxlX2ludGVyZmFjZS5uYW1lKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlcmlhbGl6ZShHVmFyaWFudEJ1aWxkZXIqIGJ1aWxk
ZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBh
dXRvKiBhdHNwaVJvb3QgPSByb290KCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxk
ZXIsICIoc28pIiwgYXRzcGlSb290LT5hdHNwaSgpLnVuaXF1ZU5hbWUoKSwgbV9wYXRoLnV0Zjgo
KS5kYXRhKCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHNvKSIsIGF0
c3BpUm9vdC0+cGFyZW50VW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCksICIvb3JnL2ExMXkvYXRz
cGkvYWNjZXNzaWJsZS9yb290Iik7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIs
ICJAKHNvKSIsIHBhcmVudFJlZmVyZW5jZSgpKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZChidWlsZGVyLCAiaSIsIGluZGV4SW5QYXJlbnQoKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKGJ1aWxkZXIsICJpIiwgY2hpbGRDb3VudCgpKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBp
bnRlcmZhY2VzID0gR19WQVJJQU5UX0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYXMiKSk7
CisgICAgYnVpbGRJbnRlcmZhY2VzKCZpbnRlcmZhY2VzKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQoYnVpbGRlciwgIkBhcyIsIGdfdmFyaWFudF9uZXcoImFzIiwgJmludGVyZmFjZXMpKTsK
KworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIG5hbWUoKS5kYXRhKCkp
OworCisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJ1Iiwgcm9sZSgpKTsKKwor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIGRlc2NyaXB0aW9uKCkuZGF0
YSgpKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBzdGF0ZXMgPSBHX1ZBUklBTlRfQlVJTERFUl9J
TklUKEdfVkFSSUFOVF9UWVBFKCJhdSIpKTsKKyAgICBhdXRvIGF0c3BpU3RhdGVzID0gc3RhdGUo
KTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJnN0YXRlcywgInUiLCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXRzcGlTdGF0ZXMgJiAweGZmZmZmZmZmKSk7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfYWRkKCZzdGF0ZXMsICJ1Iiwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGF0c3BpU3RhdGVzID4+
IDMyKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAYXUiLCBnX3Zhcmlh
bnRfYnVpbGRlcl9lbmQoJnN0YXRlcykpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6Y2hpbGRBZGRlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNoaWxkKQoreworICAg
IFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVk
LmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2hpbGQgPSBSZWYgeyBjaGls
ZCB9XSB7CisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICByb290KCktPmF0c3BpKCkuY2hpbGRyZW5DaGFuZ2VkKCp0aGlzLCBjaGlsZCwgQWNj
ZXNzaWJpbGl0eUF0c3BpOjpDaGlsZHJlbkNoYW5nZWQ6OkFkZGVkKTsKKyAgICB9KTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkUmVtb3ZlZChBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmIGNoaWxkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcm9vdCgpLT5hdHNwaSgpLmNoaWxkcmVuQ2hhbmdlZCgqdGhpcywgY2hpbGQsIEFjY2Vzc2li
aWxpdHlBdHNwaTo6Q2hpbGRyZW5DaGFuZ2VkOjpSZW1vdmVkKTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlQ2hhbmdlZChjb25zdCBjaGFyKiBuYW1lLCBib29sIHZh
bHVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1f
aXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcm9vdCgpLT5hdHNw
aSgpLnN0YXRlQ2hhbmdlZCgqdGhpcywgbmFtZSwgdmFsdWUpOworfQorCit1bnNpZ25lZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvbGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAgICByZXR1cm4g
QXRzcGk6OlJvbGU6OlVua25vd247CisKKyAgICByZXR1cm4gYXRzcGlSb2xlKG1fYXhPYmplY3Qt
PnJvbGVWYWx1ZSgpKTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm9s
ZU5hbWUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAgICByZXR1cm4gImludmFsaWQiOworCisgICAgcmV0
dXJuIG1fYXhPYmplY3QtPnJvbGVQbGF0Zm9ybVN0cmluZygpOworfQorCitjb25zdCBjaGFyKiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmxvY2FsaXplZFJvbGVOYW1lKCkgY29uc3QKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9heE9iamVjdCkK
KyAgICAgICAgcmV0dXJuIF8oImludmFsaWQiKTsKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
QXRzcGk6OmxvY2FsaXplZFJvbGVOYW1lKG1fYXhPYmplY3QtPnJvbGVWYWx1ZSgpKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCit7Cisg
ICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCisgICAg
ICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fYXhPYmplY3QpCisgICAgICAgIG1fYXhPYmplY3QtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFj
aFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5
cGUpCiB7CisgICAgc3dpdGNoIChkZXRhY2htZW50VHlwZSkgeworICAgIGNhc2UgQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlOjpDYWNoZURlc3Ryb3llZDoKKyAgICAgICAgd3JhcHBlcigpLT5j
YWNoZURlc3Ryb3llZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlE
ZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZDoKKyAgICAgICAgd3JhcHBlcigpLT5lbGVt
ZW50RGVzdHJveWVkKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eURl
dGFjaG1lbnRUeXBlOjpFbGVtZW50Q2hhbmdlZDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QKQEAgLTQ1LDYg
KzExNTcsMjkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdub3Jl
QXR0YWNobWVudCgpIGNvbnN0CiAKIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQWNjZXNz
aWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmplY3QoKSBjb25z
dAogeworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGF1dG8qIHBh
cmVudCA9IHBhcmVudE9iamVjdCgpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOworCisgICAgLy8g
SWYgdGhlIGF1dGhvciBoYXMgcHJvdmlkZWQgYSByb2xlLCBwbGF0Zm9ybS1zcGVjaWZpYyBpbmNs
dXNpb24gbGlrZWx5IGRvZXNuJ3QgYXBwbHkuCisgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRlKCkg
IT0gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24pCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7CisKKyAgICAvLyBOZXZlciBleHBv
c2UgYW4gdW5rbm93biBvYmplY3QsIHNpbmNlIEFUJ3Mgd29uJ3Qga25vdyB3aGF0IHRvCisgICAg
Ly8gZG8gd2l0aCB0aGVtLiBUaGlzIGlzIHdoYXQgaXMgZG9uZSBvbiB0aGUgTWFjIGFzIHdlbGwu
CisgICAgaWYgKHJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtub3duKQorICAg
ICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0Owor
CisgICAgLy8gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0ZXh0IHNob3VsZCBpbXBsZW1lbnQg
b3JnLmExMXkuYXRzcGkuVGV4dCBpdHNlbGYuCisgICAgaWYgKHJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0KQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9i
amVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0OworCisgICAgLy8gRW50cmllcyBhbmQgcGFzc3dv
cmQgZmllbGRzIGhhdmUgZXh0cmFuZW91cyBjaGlsZHJlbiB3aGljaCB3ZSB3YW50IHRvIGlnbm9y
ZS4KKyAgICBpZiAocGFyZW50LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBwYXJlbnQtPmlzVGV4dENv
bnRyb2woKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246Okln
bm9yZU9iamVjdDsKKwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpE
ZWZhdWx0QmVoYXZpb3I7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCmluZGV4IDQzMDVj
MGI2ZmY3OS4uNTY2MzBlZWFjNWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgKQEAgLTIw
LDE5ICsyMCw4OCBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkg
JiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaS5oIgorI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dEQnVzSW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50
ZXJmYWNlVlRhYmxlOwordHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50IEdWYXJpYW50OwordHlwZWRl
ZiBzdHJ1Y3QgX0dWYXJpYW50QnVpbGRlciBHVmFyaWFudEJ1aWxkZXI7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEFYQ29yZU9iamVjdDsKK2NsYXNzIEFjY2Vzc2liaWxpdHlSb290QXRz
cGk7CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSBmaW5hbCA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gY3JlYXRlKEFYQ29yZU9iamVj
dCopOwogICAgIH5BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkoKSA9IGRlZmF1bHQ7CiAKKyAgICBl
bnVtIGNsYXNzIEludGVyZmFjZSA6IHVpbnQ4X3QgeworICAgICAgICBBY2Nlc3NpYmxlID0gMSA8
PCAwCisgICAgfTsKKyAgICBjb25zdCBPcHRpb25TZXQ8SW50ZXJmYWNlPiYgaW50ZXJmYWNlcygp
IGNvbnN0IHsgcmV0dXJuIG1faW50ZXJmYWNlczsgfQorCisgICAgdm9pZCBzZXRSb290KEFjY2Vz
c2liaWxpdHlSb290QXRzcGkqKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKiByb290KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRQYXJlbnQoc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqPik7CisgICAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkq
PiBwYXJlbnQoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAg
dm9pZCBhdHRhY2goQVhDb3JlT2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2goKTsKKyAgICB2b2lk
IGVsZW1lbnREZXN0cm95ZWQoKTsKKyAgICB2b2lkIGNhY2hlRGVzdHJveWVkKCk7CisKKyAgICBp
bnQgaW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5QXRzcGk6OkNo
aWxkcmVuQ2hhbmdlZCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKTsKKyAgICBHVmFyaWFu
dCogcmVmZXJlbmNlKCk7CisgICAgdm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKikgY29u
c3Q7CisKKyAgICBTdHJpbmcgaWQoKSBjb25zdDsKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsK
KyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgdW5zaWduZWQgcm9sZSgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGNoaWxkQ291bnQoKSBjb25zdDsKKyAgICBWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGNoaWxkcmVuKCkgY29uc3Q7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKKyAgICB1aW50NjRf
dCBzdGF0ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKGNvbnN0IGNoYXIqLCBib29s
KTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAg
SGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+
Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkoQVhDb3JlT2JqZWN0Kik7CisKKyAgICBpbnQgaW5kZXhJblBhcmVu
dCgpIGNvbnN0OworICAgIEdWYXJpYW50KiBwYXJlbnRSZWZlcmVuY2UoKSBjb25zdDsKKyAgICB2
b2lkIGNoaWxkQWRkZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJik7CisgICAgdm9pZCBjaGls
ZFJlbW92ZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJik7CisKKyAgICBTdHJpbmcgcm9sZU5h
bWUoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBsb2NhbGl6ZWRSb2xlTmFtZSgpIGNvbnN0Owor
ICAgIHZvaWQgYnVpbGRBdHRyaWJ1dGVzKEdWYXJpYW50QnVpbGRlciopIGNvbnN0OworICAgIHZv
aWQgYnVpbGRSZWxhdGlvblNldChHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKKyAgICB2b2lkIGJ1
aWxkSW50ZXJmYWNlcyhHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKKworICAgIHN0YXRpYyBPcHRp
b25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYpOworCisg
ICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfYWNjZXNzaWJsZUZ1bmN0aW9uczsKKwor
ICAgIEFYQ29yZU9iamVjdCogbV9heE9iamVjdCB7IG51bGxwdHIgfTsKKyAgICBBWENvcmVPYmpl
Y3QqIG1fY29yZU9iamVjdCB7IG51bGxwdHIgfTsKKyAgICBPcHRpb25TZXQ8SW50ZXJmYWNlPiBt
X2ludGVyZmFjZXM7CisgICAgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSogbV9yb290IFdURl9HVUFS
REVEX0JZX0xPQ0sobV9yb290TG9jaykgeyBudWxscHRyIH07CisgICAgc3RkOjpvcHRpb25hbDxB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBtX3BhcmVudDsKKyAgICBBdG9taWM8Ym9vbD4gbV9p
c1JlZ2lzdGVyZWQgeyBmYWxzZSB9OworICAgIFN0cmluZyBtX3BhdGg7CisgICAgbXV0YWJsZSBp
bnQgbV9pbmRleEluUGFyZW50IHsgLTEgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9yb290TG9jazsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCmlu
ZGV4IGEwYjk0ODg2MWUyZC4uODJiNTc4OTJjNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5j
cHAKQEAgLTIxLDcgKzIxLDExIEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5o
IgogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKKyNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaCIKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlJbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00NCwxMCAr
NDgsOSBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzX2Fj
Y2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nv
bm5lY3Rpb24qLCBjb25zdCBnY2hhciogc2VuZGVyLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFy
KiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01l
dGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KICAgICAgICAgYXV0byYgcm9vdE9i
amVjdCA9ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4odXNlckRhdGEpOwog
ICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Um9sZSIpKQotICAgICAgICAg
ICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3Zh
cmlhbnRfbmV3KCIodSkiLCAwKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIih1KSIsIEF0c3BpOjpS
b2xlOjpGaWxsZXIpKTsKICAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAi
R2V0Um9sZU5hbWUiKSkKICAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1
cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHMpIiwgImZpbGxlciIpKTsKICAg
ICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TG9jYWxpemVkUm9sZU5h
bWUiKSkKQEAgLTY0LDkgKzY3LDEwIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxp
dHlSb290QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9IHsKICNlbmRpZgogICAgICAgICAg
ICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFS
SUFOVF9UWVBFKCIoYXUpIikpOwogCisgICAgICAgICAgICB1aW50NjRfdCBhdHNwaVN0YXRlcyA9
IChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgQXRzcGk6OlN0YXRlOjpNYW5hZ2VzRGVzY2VuZGFu
dHMpOwogICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEUoImF1IikpOwotICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWls
ZGVyLCAidSIsIDApOwotICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVy
LCAidSIsIDApOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWlsZGVyLCAi
dSIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhdHNwaVN0YXRlcyAmIDB4ZmZmZmZmZmYpKTsKKyAg
ICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgInUiLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oYXRzcGlTdGF0ZXMgPj4gMzIpKTsKICAgICAgICAgICAgIGdfdmFyaWFudF9i
dWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKIAogICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1
aWxkZXIpKTsKQEAgLTg0LDEwICs4OCwyNiBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICAgICBn
X2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFu
dF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOwogICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldEFwcGxpY2F0aW9uIikpCiAgICAgICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihAKHNv
KSkiLCByb290T2JqZWN0LmFwcGxpY2F0aW9uUmVmZXJlbmNlKCkpKTsKLSAgICAgICAgZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hpbGRBdEluZGV4IikpCisgICAgICAgIGVs
c2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldENoaWxkQXRJbmRleCIpKSB7CisgICAg
ICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMs
ICIoaSkiLCAmaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbmRleCkgeworICAgICAgICAgICAg
ICAgIGF1dG8qIGNoaWxkID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFsmcm9vdE9iamVjdF0oKSAtPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmpl
Y3QuY2hpbGQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoY2hp
bGQpIHsKKyAgICAgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoQChzbykpIiwgY2hpbGQtPnJlZmVy
ZW5jZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0
dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihAKHNvKSkiLCByb290T2JqZWN0
LmF0c3BpKCkubnVsbFJlZmVyZW5jZSgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldENoaWxkcmVuIikpIHsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJj
bXAwKG1ldGhvZE5hbWUsICJHZXRDaGlsZHJlbiIpKSB7CiAgICAgICAgICAgICBHVmFyaWFudEJ1
aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImEo
c28pIikpOworICAgICAgICAgICAgYXV0byogY2hpbGQgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZVZhbHVlRnJvbU1haW5UaHJlYWQ8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4oWyZyb290T2Jq
ZWN0XSgpIC0+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogeworICAgICAgICAgICAgICAgIHJl
dHVybiByb290T2JqZWN0LmNoaWxkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlm
IChjaGlsZCkKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIs
ICJAKHNvKSIsIGNoaWxkLT5yZWZlcmVuY2UoKSk7CiAgICAgICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihhKHNv
KSkiLCAmYnVpbGRlcikpOwogICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFt
ZSwgIkdldEluZGV4SW5QYXJlbnQiKSkgewogICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoaSkiLCAwKSk7
CkBAIC0xMDIsOSArMTIyLDggQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0gewogICAgICAgICB9CiAgICAgfSwKICAg
ICAvLyBnZXRfcHJvcGVydHkKLSAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciog
c2VuZGVyLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5
TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogewor
ICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yLCBncG9p
bnRlciB1c2VyRGF0YSkgLT4gR1ZhcmlhbnQqIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKLQogICAgICAgICBhdXRvJiByb290T2JqZWN0ID0gKnN0YXRpY19jYXN0
PEFjY2Vzc2liaWxpdHlSb290QXRzcGkqPih1c2VyRGF0YSk7CiAgICAgICAgIGlmICghZ19zdHJj
bXAwKHByb3BlcnR5TmFtZSwgIk5hbWUiKSkKICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRf
bmV3X3N0cmluZygiIik7CkBAIC0xMTYsOCArMTM1LDEyIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9IHsKICAgICAg
ICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIik7CiAgICAgICAgIGlmICghZ19z
dHJjbXAwKHByb3BlcnR5TmFtZSwgIlBhcmVudCIpKQogICAgICAgICAgICAgcmV0dXJuIGdfdmFy
aWFudF9uZXcoIihzbykiLCByb290T2JqZWN0Lm1fcGFyZW50VW5pcXVlTmFtZS51dGY4KCkuZGF0
YSgpLCByb290T2JqZWN0Lm1fcGFyZW50UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgaWYg
KCFnX3N0cmNtcDAocHJvcGVydHlOYW1lLCAiQ2hpbGRDb3VudCIpKQotICAgICAgICAgICAgcmV0
dXJuIGdfdmFyaWFudF9uZXdfaW50MzIoMCk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3Bl
cnR5TmFtZSwgIkNoaWxkQ291bnQiKSkgeworICAgICAgICAgICAgYXV0byBjaGlsZENvdW50ID0g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGludDMyX3Q+KFsmcm9v
dE9iamVjdF0oKSAtPiBpbnQzMl90IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcm9vdE9iamVj
dC5jaGlsZCgpID8gMSA6IDA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfbmV3X2ludDMyKGNoaWxkQ291bnQpOworICAgICAgICB9CiAKICAgICAgICAgZ19z
ZXRfZXJyb3IoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwgIlVu
a25vd24gcHJvcGVydHkgJyVzJyIsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMTM2LDYgKzE1OSwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnJl
Z2lzdGVyT2JqZWN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJgogICAgIG1f
YXRzcGkucmVnaXN0ZXJSb290KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6dW5y
ZWdpc3Rlck9iamVjdCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fYXRzcGkudW5yZWdpc3RlclJvb3QoKnRoaXMpOworfQorCiB2b2lkIEFjY2Vzc2liaWxp
dHlSb290QXRzcGk6OnNldFBhdGgoU3RyaW5nJiYgcGF0aCkKIHsKICAgICBSRUxFQVNFX0FTU0VS
VCghaXNNYWluVGhyZWFkKCkpOwpAQCAtMTYyLDYgKzE5MSw2NiBAQCBHVmFyaWFudCogQWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6cmVmZXJlbmNlKCkgY29uc3QKICAgICByZXR1cm4gZ192YXJpYW50
X25ldygiKHNvKSIsIG1fYXRzcGkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7
CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6
Y2hpbGQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIEFY
T2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKworICAgIGlmICghbV9wYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+bWFp
bkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZnJhbWUuZG9jdW1lbnQoKS0+YXhP
YmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVhDb3JlT2JqZWN0KiByb290T2JqZWN0ID0gY2FjaGUtPnJvb3RPYmplY3QoKTsKKyAg
ICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byog
d3JhcHBlciA9IHJvb3RPYmplY3QtPndyYXBwZXIoKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgd3JhcHBlci0+c2V0Um9vdChjb25zdF9jYXN0PEFj
Y2Vzc2liaWxpdHlSb290QXRzcGkqPih0aGlzKSk7CisgICAgd3JhcHBlci0+c2V0UGFyZW50KG51
bGxwdHIpOyAvLyBudWxscHRyIHBhcmVudCBtZWFucyByb290LgorCisgICAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c2VyaWFsaXplKEdWYXJpYW50
QnVpbGRlciogYnVpbGRlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHNvKSIsIG1fYXRz
cGkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKGJ1aWxkZXIsICIoc28pIiwgbV9wYXJlbnRVbmlxdWVOYW1lLnV0ZjgoKS5kYXRh
KCksICIvb3JnL2ExMXkvYXRzcGkvYWNjZXNzaWJsZS9yb290Iik7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKGJ1aWxkZXIsICIoc28pIiwgbV9wYXJlbnRVbmlxdWVOYW1lLnV0ZjgoKS5kYXRh
KCksIG1fcGFyZW50UGF0aC51dGY4KCkuZGF0YSgpKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZChidWlsZGVyLCAiaSIsIDApOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVy
LCAiaSIsIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpbnQzMl90
PihbdGhpc10oKSAtPiBpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuIGNoaWxkKCkgPyAxIDogMDsK
KyAgICB9KSk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgaW50ZXJmYWNlcyA9IEdfVkFSSUFOVF9C
VUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImFzIikpOworICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZCgmaW50ZXJmYWNlcywgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7
CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAYXMiLCBnX3ZhcmlhbnRfbmV3
KCJhcyIsICZpbnRlcmZhY2VzKSk7CisKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRl
ciwgInMiLCAiIik7CisKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInUiLCBB
dHNwaTo6Um9sZTo6RmlsbGVyKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVy
LCAicyIsICIiKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBzdGF0ZXMgPSBHX1ZBUklBTlRfQlVJ
TERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhdSIpKTsKKyAgICB1aW50NjRfdCBhdHNwaVN0YXRl
cyA9IChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgQXRzcGk6OlN0YXRlOjpNYW5hZ2VzRGVzY2Vu
ZGFudHMpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmc3RhdGVzLCAidSIsIHN0YXRpY19j
YXN0PHVpbnQzMl90PihhdHNwaVN0YXRlcyAmIDB4ZmZmZmZmZmYpKTsKKyAgICBnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQoJnN0YXRlcywgInUiLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oYXRzcGlTdGF0
ZXMgPj4gMzIpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIkBhdSIsIGdf
dmFyaWFudF9idWlsZGVyX2VuZCgmc3RhdGVzKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRTUEkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlS
b290QXRzcGkuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaS5oCmluZGV4IDQwNmRhMTA2MTBkYy4uZWMxOWJlMWJmMGE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290
QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlSb290QXRzcGkuaApAQCAtMzgsMTIgKzM4LDE4IEBAIHB1YmxpYzoKICAgICB+QWNjZXNz
aWJpbGl0eVJvb3RBdHNwaSgpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgcmVnaXN0ZXJPYmplY3Qo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CisgICAgdm9pZCB1bnJl
Z2lzdGVyT2JqZWN0KCk7CiAgICAgdm9pZCBzZXRQYXRoKFN0cmluZyYmKTsKICAgICB2b2lkIHNl
dFBhcmVudFBhdGgoU3RyaW5nJiYpOwogCisgICAgY29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiBwYXJlbnRVbmlxdWVOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJlbnRVbmlxdWVOYW1lOyB9CiAgICAgR1ZhcmlhbnQqIHJlZmVy
ZW5jZSgpIGNvbnN0OwogICAgIEdWYXJpYW50KiBhcHBsaWNhdGlvblJlZmVyZW5jZSgpIGNvbnN0
OwogICAgIEFjY2Vzc2liaWxpdHlBdHNwaSYgYXRzcGkoKSBjb25zdCB7IHJldHVybiBtX2F0c3Bp
OyB9CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZCgpIGNvbnN0OworCisgICAg
dm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAg
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaShjb25zdCBQYWdlJiwgQWNjZXNzaWJpbGl0eUF0c3BpJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9h
dHNwaS9BWElzb2xhdGVkT2JqZWN0QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvYXRzcGkvQVhJc29sYXRlZE9iamVjdEF0c3BpLmNwcAppbmRleCA5
ZDNkZDBjMjQ3OTMuLjcxY2UxMTdmZjZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvYXRzcGkvQVhJc29sYXRlZE9iamVjdEF0c3BpLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9hdHNwaS9BWElz
b2xhdGVkT2JqZWN0QXRzcGkuY3BwCkBAIC0zMSwxMSArMzEsMTMgQEAgdm9pZCBBWElzb2xhdGVk
T2JqZWN0Ojppbml0aWFsaXplUGxhdGZvcm1Qcm9wZXJ0aWVzKGNvbnN0IEFYQ29yZU9iamVjdCYs
IGJvb2wpCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQogeworICAgIHdyYXBwZXItPmF0dGFj
aCh0aGlzKTsKICAgICBzZXRXcmFwcGVyKHdyYXBwZXIpOwogfQogCi12b2lkIEFYSXNvbGF0ZWRP
YmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUg
ZGV0YWNobWVudFR5cGUpCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3Jh
cHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCiB7CisgICAgd3JhcHBlcigpLT5kZXRh
Y2goKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4NWJhY2JkODU5
Y2UuLjQ2NmZjZDkzYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wOS0zMCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S11bYTExeV0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzaWJsZSBpbnRlcmZh
Y2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtRGV0YWNoKTogVW5yZWdpc3Rl
ciB0aGUgcGFnZSBhY2Nlc3NpYmxlIG9iamVjdC4KKwogMjAyMS0wOS0zMCAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bYTExeV0gQ29u
bmVjdCBVSSBwcm9jZXNzIGExMXkgdHJlZSB3aXRoIHRoZSB3ZWIgcHJvY2VzcyB3aGVuIGJ1aWxk
aW5nIHdpdGggQVRTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCBhODlkZGZiZmNlNWIuLmUzNTA2NmYzNTM4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3Rr
LmNwcApAQCAtOTEsNiArOTEsMTAgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVJlaW5pdGlhbGl6
ZSgpCiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EZXRhY2goKQogeworI2lmIFVTRShBVFNQSSkK
KyAgICBpZiAobV9hY2Nlc3NpYmlsaXR5Um9vdE9iamVjdCkKKyAgICAgICAgbV9hY2Nlc3NpYmls
aXR5Um9vdE9iamVjdC0+dW5yZWdpc3Rlck9iamVjdCgpOworI2VuZGlmCiB9CiAKIGJvb2wgV2Vi
UGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGtleWJvYXJkRXZlbnQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNDBiZDI5OGU5ODkxLi4wZjA3ZGFiYjZlMGYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAor
MjAyMS0wOS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dUS11bYTExeV0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNz
aWJsZSBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSB1bml0IHRlc3RzIGZvciB0
aGUgYWNjZXNzaWJsZSBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHA6CisgICAgICAgIChBdHNwaUV2
ZW50RGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGVz
dDo6c3RhcnRFdmVudE1vbml0b3IpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0b3BF
dmVudE1vbml0b3IpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZSk6
CisgICAgICAgICh0ZXN0QWNjZXNzaWJsZUJhc2ljSGllcmFyY2h5KToKKyAgICAgICAgKHRlc3RB
Y2Nlc3NpYmxlSWdub3JlZE9iamVjdHMpOgorICAgICAgICAodGVzdEFjY2Vzc2libGVDaGlsZHJl
bkNoYW5nZWQpOgorICAgICAgICAodGVzdEFjY2Vzc2libGVBdHRyaWJ1dGVzKToKKyAgICAgICAg
KHRlc3RBY2Nlc3NpYmxlU3RhdGUpOgorICAgICAgICAodGVzdEFjY2Vzc2libGVTdGF0ZUNoYW5n
ZWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKHRlc3RBdHNwaUJhc2ljSGllcmFy
Y2h5KTogRGVsZXRlZC4KKwogMjAyMS0wOS0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFRlcm1pbmF0ZSBQQ00gZGFlbW9uIGJlZm9yZSBh
bmQgYWZ0ZXIgdW5pdCB0ZXN0IHRoYXQgdXNlcyBpdApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHku
Y3BwCmluZGV4IDFhNDU2YjgwZDM4MS4uYTYwYWIxNTdkN2U0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwCkBAIC0yMCwxMiArMjAsMjIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAog
I2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4K
IAogLy8gVGhlIGxpYmF0c3BpIGhlYWRlcnMgZG9uJ3QgdXNlIEdfQkVHSU5fREVDTFMKIGV4dGVy
biAiQyIgewogI2luY2x1ZGUgPGF0c3BpL2F0c3BpLmg+CiB9CiAKK3N0cnVjdCBBdHNwaUV2ZW50
RGVsZXRlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEF0c3BpRXZlbnQqIGV2ZW50KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZ19ib3hlZF9mcmVlKEFUU1BJX1RZUEVfRVZFTlQsIGV2ZW50KTsKKyAg
ICB9Cit9OworCit1c2luZyBVbmlxdWVBdHNwaUV2ZW50ID0gc3RkOjp1bmlxdWVfcHRyPEF0c3Bp
RXZlbnQsIEF0c3BpRXZlbnREZWxldGVyPjsKKwogY2xhc3MgQWNjZXNzaWJpbGl0eVRlc3QgOiBw
dWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
QWNjZXNzaWJpbGl0eVRlc3QpOwpAQCAtODgsMTEgKzk4LDUwIEBAIHB1YmxpYzoKICAgICAgICAg
bV9ldmVudFNvdXJjZSA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdm9pZCBzdGFydEV2ZW50TW9u
aXRvcihBdHNwaUFjY2Vzc2libGUqIHNvdXJjZSwgY29uc3QgVmVjdG9yPGNvbnN0IGNoYXIqPiYg
ZXZlbnRzKQorICAgIHsKKyAgICAgICAgbV9ldmVudE1vbml0b3Iuc291cmNlID0gc291cmNlOwor
ICAgICAgICBtX2V2ZW50TW9uaXRvci5saXN0ZW5lciA9IGFkb3B0R1JlZihhdHNwaV9ldmVudF9s
aXN0ZW5lcl9uZXcoW10oQXRzcGlFdmVudCogZXZlbnQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Cisg
ICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eVRlc3QqPih1
c2VyRGF0YSk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnNvdXJjZSA9PSB0ZXN0LT5tX2V2ZW50
TW9uaXRvci5zb3VyY2UpCisgICAgICAgICAgICAgICAgdGVzdC0+bV9ldmVudE1vbml0b3IuZXZl
bnRzLmFwcGVuZChzdGF0aWNfY2FzdDxBdHNwaUV2ZW50Kj4oZ19ib3hlZF9jb3B5KEFUU1BJX1RZ
UEVfRVZFTlQsIGV2ZW50KSkpOworICAgICAgICB9LCB0aGlzLCBudWxscHRyKSk7CisKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvKiBldmVudCA6IGV2ZW50cykKKyAgICAgICAgICAgIGF0c3BpX2V2
ZW50X2xpc3RlbmVyX3JlZ2lzdGVyKG1fZXZlbnRNb25pdG9yLmxpc3RlbmVyLmdldCgpLCBldmVu
dCwgbnVsbHB0cik7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZUF0c3BpRXZlbnQ+IHN0b3BF
dmVudE1vbml0b3IodW5zaWduZWQgZXhwZWN0ZWRFdmVudHMsIHN0ZDo6b3B0aW9uYWw8U2Vjb25k
cz4gdGltZW91dCA9IHN0ZDo6bnVsbG9wdCkKKyAgICB7CisgICAgICAgIC8vIElmIGV2ZW50cyBp
cyBlbXB0eSB3YWl0IGZvciB0aGUgZXZlbnRzLgorICAgICAgICBhdXRvIHN0YXJ0VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOworICAgICAgICB3aGlsZSAobV9ldmVudE1vbml0b3IuZXZlbnRz
LnNpemUoKSA8IGV4cGVjdGVkRXZlbnRzICYmIE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRU
aW1lIDwgdGltZW91dC52YWx1ZV9vcihTZWNvbmRzOjppbmZpbml0eSgpKSkKKyAgICAgICAgICAg
IGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihudWxscHRyLCB0aW1lb3V0ID8gRkFMU0UgOiBUUlVF
KTsKKworICAgICAgICBhdXRvIGV2ZW50cyA9IFdURk1vdmUobV9ldmVudE1vbml0b3IuZXZlbnRz
KTsKKyAgICAgICAgbV9ldmVudE1vbml0b3IgPSB7IG51bGxwdHIsIHsgfSwgbnVsbHB0ciB9Owor
ICAgICAgICByZXR1cm4gZXZlbnRzOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBzdGF0
ZVNldFNpemUoQXRzcGlTdGF0ZVNldCogc3RhdGVTZXQpCisgICAgeworICAgICAgICBHQXJyYXkq
IHN0YXRlcyA9IGF0c3BpX3N0YXRlX3NldF9nZXRfc3RhdGVzKHN0YXRlU2V0KTsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RhdGVzLT5sZW47CisgICAgICAgIGdfYXJyYXlfZnJlZShzdGF0
ZXMsIFRSVUUpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBBdHNwaUFjY2Vzc2libGUqIG1fZXZlbnRTb3VyY2UgeyBudWxscHRyIH07CisKKyAgICBzdHJ1
Y3QgeworICAgICAgICBHUmVmUHRyPEF0c3BpRXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXI7CisgICAg
ICAgIFZlY3RvcjxVbmlxdWVBdHNwaUV2ZW50PiBldmVudHM7CisgICAgICAgIEF0c3BpQWNjZXNz
aWJsZSogc291cmNlIHsgbnVsbHB0ciB9OworICAgIH0gbV9ldmVudE1vbml0b3I7CiB9OwogCi1z
dGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShBY2Nlc3NpYmlsaXR5VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3N0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQmFzaWNIaWVyYXJj
aHkoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgdGVzdC0+
c2hvd0luV2luZG93KCk7CiAgICAgdGVzdC0+bG9hZEh0bWwoCkBAIC0xNTIsOSArMjAxLDE1IEBA
IHN0YXRpYyB2b2lkIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KEFjY2Vzc2liaWxpdHlUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICAiICA8L2JvZHk+IgogICAgICAgICAiPC9odG1s
PiIsCiAgICAgICAgIG51bGxwdHIpOworI2lmIFVTRShBVFNQSSkKKyAgICAvLyBJbiBhdHNwaSBp
bXBsZW1lbnRhdGlvbiB0aGUgcm9vdCBvYmplY3QgZG9lc24ndCBlbWl0IGNoaWxkcmVuLWNoYW5n
ZWQgYmVjYXVzZSBpdAorICAgIC8vIGFsd2F5cyBoYXMgTWFuYWdlc0Rlc2NlbmRhbnRzIGluIHN0
YXRlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworI2Vsc2UKICAgICAvLyBD
aGVjayB0aGF0IGNoaWxkcmVuLWNoYW5nZWQ6OnJlbW92ZSBpcyBlbWl0dGVkIG9uIHRoZSByb290
IG9iamVjdCBvbiBuYXZpZ2F0aW9uLAogICAgIC8vIGFuZCB0aGUgYTExeSBoaWVyYXJjaHkgaXMg
dXBkYXRlZC4KICAgICB0ZXN0LT53YWl0VW50aWxDaGlsZHJlblJlbW92ZWQocm9vdE9iamVjdC5n
ZXQoKSk7CisjZW5kaWYKIAogICAgIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2Vi
KHRlc3RBcHAuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShk
b2N1bWVudFdlYi5nZXQoKSkpOwpAQCAtMTc1LDkgKzIzMCw0OTUgQEAgc3RhdGljIHZvaWQgdGVz
dEF0c3BpQmFzaWNIaWVyYXJjaHkoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoaW1nLmdl
dCgpLCBudWxscHRyKSwgPT0sIEFUU1BJX1JPTEVfSU1BR0UpOwogfQogCitzdGF0aWMgdm9pZCB0
ZXN0QWNjZXNzaWJsZUlnbm9yZWRPYmplY3RzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvdygpOworICAgIHRlc3QtPmxvYWRI
dG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAg
PGRpdj4iCisgICAgICAgICIgICAgICA8cD5TdGF0aWMgdGV4dCBub2RlcyBhcmUgaWdub3JlZCwg
c28gdGhpcyBwYXJhZ3JhcGggc2hvdWxkbid0IGhhdmUgYSBjaGlsZDwvcD4iCisgICAgICAgICIg
ICAgPC9kaXY+IgorICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1sPiIsCisgICAg
ICAgIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
YXV0byB0ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAgIGdfYXNzZXJ0
X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAgICBhdXRvIGRv
Y3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOworICAgIGdf
YXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOworICAg
IGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVu
dFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKworICAgIGF1dG8gcCA9IGFkb3B0R1JlZihh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShwLmdldCgp
KSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUocC5nZXQo
KSwgbnVsbHB0ciksID09LCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KHAuZ2V0KCksIG51bGxwdHIpLCA9
PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQ2hpbGRyZW5DaGFuZ2VkKEFj
Y2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworI2lmICFVU0UoQVRTUEkp
CisgICAgZ190ZXN0X3NraXAoIlRoaXMgdGVzdCBkb2Vzbid0IHdvcmsgd2l0aCBBVEsiKTsKKyNl
bHNlCisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+bG9hZEh0bWwoCisgICAg
ICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8ZGl2IGlkPSdn
cmFuZHBhcmVudCc+IgorICAgICAgICAiICAgICAgPGRpdiBpZD0ncGFyZW50Jz4iCisgICAgICAg
ICIgICAgICAgIDxwPkZvbzwvcD48cD5CYXI8L3A+IgorICAgICAgICAiICAgICAgPC9kaXY+Igor
ICAgICAgICAiICAgIDwvZGl2PiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRt
bD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQo
KTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsKKyAg
ICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOworCisg
ICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0
KCkpKTsKKyAgICAvLyBUaGUgZGl2cyBhcmUgbm90IGV4cG9zZWQgdG8gQVRzLgorICAgIGdfYXNz
ZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5n
ZXQoKSwgbnVsbHB0ciksID09LCAyKTsKKworICAgIGF1dG8gZm9vID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGZvby5nZXQoKSkp
OworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChm
b28uZ2V0KCksIG51bGxwdHIpLCA9PSwgMCk7CisKKyAgICBhdXRvIGJhciA9IGFkb3B0R1JlZihh
dHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMSwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShiYXIuZ2V0
KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291
bnQoYmFyLmdldCgpLCBudWxscHRyKSwgPT0sIDApOworCisgICAgLy8gQWRkIGEgbmV3IHBhcmFn
cmFwaC4KKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihkb2N1bWVudFdlYi5nZXQoKSwgeyAi
b2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQ6YWRkIiwgIm9iamVjdDpjaGlsZHJlbi1jaGFuZ2VkOnJl
bW92ZSIgfSk7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJs
ZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC5pbm5lclRleHQgPSAnQmF6Jzsg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcmVudCcpLmFwcGVuZENoaWxkKHApOyIsIG51bGxw
dHIpOworICAgIGF1dG8gZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigxKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDpjaGlsZHJlbi1jaGFuZ2VkOmFkZCIpOwor
ICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgMik7IC8vIE5ldyBu
b2RlIGFkZGVkIHRvIHBvc2l0aW9uIDIuCisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERT
X09CSkVDVCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGF1dG8gYmF6ID0gYWRvcHRHUmVm
KHN0YXRpY19jYXN0PEF0c3BpQWNjZXNzaWJsZSo+KGdfdmFsdWVfZHVwX29iamVjdCgmZXZlbnRz
WzBdLT5hbnlfZGF0YSkpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUo
YmF6LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3Jv
bGUoYmF6LmdldCgpLCBudWxscHRyKSwgPT0sIEFUU1BJX1JPTEVfUEFSQUdSQVBIKTsKKyAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3BhcmVudChiYXouZ2V0KCksIG51bGxw
dHIpID09IGRvY3VtZW50V2ViLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwg
Myk7CisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGNoaWxkID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShmb28uZ2V0KCkgPT0gY2hpbGQuZ2V0KCkpOworICAg
IGNoaWxkID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRv
Y3VtZW50V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShiYXIuZ2V0
KCkgPT0gY2hpbGQuZ2V0KCkpOworICAgIGNoaWxkID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAyLCBudWxscHRyKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShiYXouZ2V0KCkgPT0gY2hpbGQuZ2V0KCkpOworICAgIGNoaWxkID0g
bnVsbHB0cjsKKyAgICBldmVudHMgPSB7IH07CisKKyAgICAvLyBSZW1vdmUgb25lIG9mIHRoZSBw
YXJhZ3JhcGhzLgorICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRvY3VtZW50V2ViLmdldCgp
LCB7ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDphZGQiLCAib2JqZWN0OmNoaWxkcmVuLWNoYW5n
ZWQ6cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNo
ZWQoImxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50Jyk7IGRpdi5yZW1v
dmVDaGlsZChkaXYuY2hpbGRyZW5bMF0pOyIsIG51bGxwdHIpOworICAgIGV2ZW50cyA9IHRlc3Qt
PnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgp
LCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmpl
Y3Q6Y2hpbGRyZW4tY2hhbmdlZDpyZW1vdmUiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50
c1swXS0+ZGV0YWlsMSwgPT0sIDApOyAvLyBSZW1vdmUgbm9kZSB3YXMgYXQgcG9zaXRpb24gMC4K
KyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfT0JKRUNUKCZldmVudHNbMF0tPmFueV9k
YXRhKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX3ZhbHVlX2dldF9vYmplY3QoJmV2ZW50c1swXS0+
YW55X2RhdGEpID09IGZvby5nZXQoKSk7CisgICAgR1JlZlB0cjxBdHNwaVN0YXRlU2V0PiBzZXQg
PSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGZvby5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHNldC5nZXQoKSwgQVRT
UElfU1RBVEVfREVGVU5DVCkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxl
X2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAyKTsKKyAg
ICBjaGlsZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChk
b2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoYmFyLmdl
dCgpID09IGNoaWxkLmdldCgpKTsKKyAgICBjaGlsZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMSwgbnVsbHB0cikpOwor
ICAgIGdfYXNzZXJ0X3RydWUoYmF6LmdldCgpID09IGNoaWxkLmdldCgpKTsKKyAgICBjaGlsZCA9
IG51bGxwdHI7CisgICAgZXZlbnRzID0geyB9OworCisgICAgLy8gQ2hhbmdpbmcgcm9sZSBjYXVz
ZXMgYW4gaW50ZXJuYWwgZGV0YWNoICsgYXR0YWNoIHRoYXQgc2hvdWxkbid0IGJlIGV4cG9zZWQg
dG8gQVRzLgorICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRvY3VtZW50V2ViLmdldCgpLCB7
ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDphZGQiLCAib2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQ6
cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQo
ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKS5jaGlsZHJlblswXS5yb2xlPSdidXR0
b24nIiwgbnVsbHB0cik7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigwLCAw
LjVfcyk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMCk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYmFyLmdldCgpLCBudWxs
cHRyKSwgPT0sIEFUU1BJX1JPTEVfUFVTSF9CVVRUT04pOworICAgIGV2ZW50cyA9IHsgfTsKKwor
ICAgIC8vIFJlbW92ZSB0aGUgY29udGFpbmVyLgorICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9y
KGRvY3VtZW50V2ViLmdldCgpLCB7ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDphZGQiLCAib2Jq
ZWN0OmNoaWxkcmVuLWNoYW5nZWQ6cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0
QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncmFuZHBhcmVu
dCcpLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKSk7IiwgbnVs
bHB0cik7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigyKTsKKyAgICBnX2Fz
c2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
ZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDpjaGlsZHJlbi1jaGFuZ2VkOnJlbW92ZSIpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMV0tPnR5cGUsID09LCAib2JqZWN0OmNoaWxkcmVu
LWNoYW5nZWQ6cmVtb3ZlIik7CisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERTX09CSkVD
VCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9IT0xE
U19PQkpFQ1QoJmV2ZW50c1sxXS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfdmFs
dWVfZ2V0X29iamVjdCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkgPT0gYmFyLmdldCgpIHx8IGdfdmFs
dWVfZ2V0X29iamVjdCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkgPT0gYmF6LmdldCgpKTsKKyAgICBn
X2Fzc2VydF90cnVlKGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzFdLT5hbnlfZGF0YSkgPT0g
YmFyLmdldCgpIHx8IGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzFdLT5hbnlfZGF0YSkgPT0g
YmF6LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRz
WzBdLT5hbnlfZGF0YSkgIT0gZ192YWx1ZV9nZXRfb2JqZWN0KCZldmVudHNbMV0tPmFueV9kYXRh
KSk7CisgICAgc2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChi
YXIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhz
ZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0RFRlVOQ1QpKTsKKyAgICBzZXQgPSBhZG9wdEdSZWYoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGJhei5nZXQoKSkpOworICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHNldC5nZXQoKSwgQVRTUElfU1RBVEVfREVGVU5D
VCkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3Vu
dChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAwKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZUF0dHJpYnV0ZXMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+
bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAg
IiAgICA8aDI+SGVhZGluZyBsZXZlbCAyPC9oMj4iCisgICAgICAgICIgICAgPGEgaWQ9XCJ3ZWJr
aXRndGtcIiBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+QSBsaW5rPC9hPiIKKyAg
ICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworI2lmIFVTRShBVFNQSSkKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogdG9vbGtpdE5hbWUgPSAiV2ViS2l0R1RLIjsKKyNlbHNlCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHRvb2xraXROYW1lID0gIldlYktpdEd0ayI7CisjZW5kaWYK
KworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsKKyAgICBn
X2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOworCisgICAg
YXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBwLmdldCgpKTsK
KyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRXZWIuZ2V0KCkp
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQo
ZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMik7CisgICAgYXV0byBhdHRyaWJ1dGVz
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXMoZG9jdW1lbnRXZWIu
Z2V0KCksIG51bGxwdHIpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3NlcnRfY21wdWludChn
X2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwgPT0sIDEpOworI2Vsc2UKKyAgICAv
LyBGSVhNRTogQVRLIGluY2x1ZGVzIGRyYWdnZWQgc3RhdGUsIGJ1dCBkcmFnZ2luZyBpcyBub3Qg
c3VwcG9ydGVkLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmli
dXRlcy5nZXQoKSksID09LCAyKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAi
dG9vbGtpdCIpKSwgPT0sIHRvb2xraXROYW1lKTsKKworICAgIGF1dG8gaDIgPSBhZG9wdEdSZWYo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDAs
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoaDIuZ2V0
KCkpKTsKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2F0
dHJpYnV0ZXMoaDIuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFz
aF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21w
c3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0
ZXMuZ2V0KCksICJ0b29sa2l0IikpLCA9PSwgdG9vbGtpdE5hbWUpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1
dGVzLmdldCgpLCAiY29tcHV0ZWQtcm9sZSIpKSwgPT0sICJoZWFkaW5nIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0
dHJpYnV0ZXMuZ2V0KCksICJsZXZlbCIpKSwgPT0sICIyIik7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMu
Z2V0KCksICJ0YWciKSksID09LCAiaDIiKTsKKworICAgIGF1dG8gc2VjdGlvbiA9IGFkb3B0R1Jl
ZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwg
MSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShzZWN0
aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2NvdW50KHNlY3Rpb24uZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAgICBhdXRvIGEg
PSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5n
ZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJM
RShhLmdldCgpKSk7CisgICAgYXR0cmlidXRlcyA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxl
X2dldF9hdHRyaWJ1dGVzKGEuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgNCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0
dHJpYnV0ZXMuZ2V0KCksICJ0b29sa2l0IikpLCA9PSwgdG9vbGtpdE5hbWUpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChh
dHRyaWJ1dGVzLmdldCgpLCAiY29tcHV0ZWQtcm9sZSIpKSwgPT0sICJsaW5rIik7CisjaWYgVVNF
KEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19o
YXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiaWQiKSksID09LCAid2Via2l0Z3Rr
Iik7CisjZWxzZQorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
Z19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiaHRtbC1pZCIpKSwgPT0sICJ3
ZWJraXRndGsiKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAidGFnIikpLCA9
PSwgImEiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZShBY2Nlc3NpYmls
aXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3co
ODAwLCA2MDApOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAg
ICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPGgxPlN0YXRlPC9oMT4iCisgICAgICAgICIgICAg
PGJ1dHRvbj5CdXR0b248L2J1dHRvbj4iCisgICAgICAgICIgICAgPGJ1dHRvbiBkaXNhYmxlZD5E
aXNhYmxlZDwvYnV0dG9uPiIKKyAgICAgICAgIiAgICA8YnV0dG9uIGFyaWEtcHJlc3NlZD0ndHJ1
ZSc+VG9nZ2xlIGJ1dHRvbjwvYnV0dG9uPiIKKyAgICAgICAgIiAgICA8aW5wdXQgdHlwZT0ncmFk
aW8nIG5hbWU9J3JhZGlvJy8+UmFkaW8iCisgICAgICAgICIgICAgPGlucHV0IHR5cGU9J3JhZGlv
JyBuYW1lPSdyYWRpbycgY2hlY2tlZC8+UmFkaW8gQ2hlY2tlZCIKKyAgICAgICAgIiAgICA8aW5w
dXQgdHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvJyBkaXNhYmxlZC8+UmFkaW8gZGlzYWJsZWQiCisg
ICAgICAgICIgICAgPGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdjaGVjay1kaXNhYmxlZCcg
Y2hlY2tlZCBkaXNhYmxlZC8+Q2hlY2tlZCBEaXNhYmxlZCIKKyAgICAgICAgIiAgICA8aW5wdXQg
dmFsdWU9J0VudHJ5JyBhcmlhLXJlcXVpcmVkPSd0cnVlJz4iCisgICAgICAgICIgICAgPGlucHV0
IHZhbHVlPSdEaXNhYmxlZCcgZGlzYWJsZWQ+IgorICAgICAgICAiICAgIDxpbnB1dCB2YWx1ZT0n
UmVhZCBvbmx5JyByZWFkb25seT4iCisgICAgICAgICIgICAgPHRleHRhcmVhIHJvd3M9NSBhdXRv
Zm9jdXM+PC90ZXh0YXJlYT4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+
IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAg
IGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgp
KSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50
KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDIpOworCisgICAgYXV0byBoMSA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5n
ZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJM
RShoMS5nZXQoKSkpOworICAgIEdSZWZQdHI8QXRzcGlTdGF0ZVNldD4gc3RhdGVTZXQgPSBhZG9w
dEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGgxLmdldCgpKSk7CisjaWYgVVNF
KEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0
U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCA0KTsKKyNlbHNlCisgICAgLy8gRklYTUU6IEFUSyBp
bmNsdWRlcyBvcmllbnRhdGlvbiBzdGF0ZSBpbiBldmVyeSBlbGVtZW50LgorICAgIGdfYXNzZXJ0
X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5nZXQoKSks
ID09LCA1KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0
ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOworI2VuZGlmCisgICAgZ19hc3Nl
cnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NU
QVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlu
cyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0VOU0lUSVZFKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRF
X1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhz
dGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hPV0lORykpOworCisgICAgYXV0byBzZWN0aW9u
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50
V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NF
U1NJQkxFKHNlY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfY291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09LCAxMSk7CisK
KyAgICB1bnNpZ25lZCBuZXh0Q2hpbGQgPSAwOworICAgIGF1dG8gYnV0dG9uID0gYWRvcHRHUmVm
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0KCksIG5leHRD
aGlsZCsrLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxF
KGJ1dHRvbi5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X3N0YXRlX3NldChidXR0b24uZ2V0KCkpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19h
c3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0Lmdl
dCgpKSwgPT0sIDUpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVzIG9yaWVudGF0
aW9uIHN0YXRlIGluIGV2ZXJ5IGVsZW1lbnQuCisgICAgZ19hc3NlcnRfY21wdWludChBY2Nlc3Np
YmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDYpOworICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQ
SV9TVEFURV9IT1JJWk9OVEFMKSk7CisjZW5kaWYKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0
YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRU5BQkxFRCkpOwor
ICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgp
LCBBVFNQSV9TVEFURV9TRU5TSVRJVkUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRl
X3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfVklTSUJMRSkpOworICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9TSE9XSU5HKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0ZPQ1VTQUJMRSkpOworCisgICAg
YXV0byBidXR0b25EaXNhYmxlZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGls
ZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShidXR0b25EaXNhYmxlZC5nZXQoKSkpOwor
ICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChi
dXR0b25EaXNhYmxlZC5nZXQoKSkpOworI2lmIFVTRShBVFNQSSkKKyAgICBnX2Fzc2VydF9jbXB1
aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwg
Mik7CisgICAgLy8gRklYTUU6IEFUSyBpbmNsdWRlcyBvcmllbnRhdGlvbiBzdGF0ZSBpbiBldmVy
eSBlbGVtZW50LgorICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRl
U2V0U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCAzKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3Bp
X3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRB
TCkpOworI2VuZGlmCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMo
c3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hP
V0lORykpOworCisgICAgYXV0byB0b2dnbGVCdXR0b24gPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodG9nZ2xlQnV0dG9u
LmdldCgpKSk7CisgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
c3RhdGVfc2V0KHRvZ2dsZUJ1dHRvbi5nZXQoKSkpOworI2lmIFVTRShBVFNQSSkKKyAgICBnX2Fz
c2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0
KCkpLCA9PSwgNik7CisjZWxzZQorICAgIC8vIEZJWE1FOiBBVEsgaW5jbHVkZXMgb3JpZW50YXRp
b24gc3RhdGUgaW4gZXZlcnkgZWxlbWVudC4KKyAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2li
aWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwgNyk7CisgICAgZ19h
c3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJ
X1NUQVRFX0hPUklaT05UQUwpKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3Rh
dGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9FTkFCTEVEKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVf
c2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFU
U1BJX1NUQVRFX1NIT1dJTkcpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9DVVNBQkxFKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJ
X1NUQVRFX1BSRVNTRUQpKTsKKworICAgIGF1dG8gcmFkaW8gPSBhZG9wdEdSZWYoYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51
bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUocmFkaW8uZ2V0
KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9zdGF0
ZV9zZXQocmFkaW8uZ2V0KCkpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3NlcnRfY21wdWlu
dChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDYp
OworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVzIG9yaWVudGF0aW9uIHN0YXRlIGlu
IGV2ZXJ5IGVsZW1lbnQuCisgICAgZ19hc3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6
c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDcpOworICAgIGdfYXNzZXJ0X3RydWUo
YXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WRVJU
SUNBTCkpOworI2VuZGlmCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFp
bnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fzc2VydF90
cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVf
U0VOU0lUSVZFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMo
c3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hP
V0lORykpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRl
U2V0LmdldCgpLCBBVFNQSV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfQ0hFQ0tB
QkxFKSk7CisKKyAgICBhdXRvIHJhZGlvQ2hlY2tlZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3Np
YmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShyYWRpb0NoZWNrZWQu
Z2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9z
dGF0ZV9zZXQocmFkaW9DaGVja2VkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wdWludChBY2Nl
c3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDcpOworICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9FTkFCTEVEKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOworICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQ
SV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29u
dGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RB
VEVfRk9DVVNBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFp
bnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0NIRUNLQUJMRSkpOworICAgIGdfYXNzZXJ0
X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFU
RV9DSEVDS0VEKSk7CisKKyAgICBhdXRvIHJhZGlvRGlzYWJsZWQgPSBhZG9wdEdSZWYoYXRzcGlf
YWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyss
IG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUocmFkaW9E
aXNhYmxlZC5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X3N0YXRlX3NldChyYWRpb0Rpc2FibGVkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
dWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0s
IDMpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQo
KSwgQVRTUElfU1RBVEVfQ0hFQ0tBQkxFKSk7CisKKyAgICBhdXRvIGNoZWNrYm94ID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0KCksIG5l
eHRDaGlsZCsrLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJ
QkxFKGNoZWNrYm94LmdldCgpKSk7CisgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNj
ZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGNoZWNrYm94LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
dWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0s
IDQpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQo
KSwgQVRTUElfU1RBVEVfQ0hFQ0tBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0NIRUNLRUQpKTsKKwor
ICAgIGF1dG8gZW50cnkgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZW50cnkuZ2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9
IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9zdGF0ZV9zZXQoZW50cnkuZ2V0KCkpKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3Rh
dGVTZXQuZ2V0KCkpLCA9PSwgOSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElf
U1RBVEVfU0VOU0lUSVZFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29u
dGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RB
VEVfU0hPV0lORykpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5z
KHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBnX2Fzc2VydF90
cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVf
RURJVEFCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhz
dGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0lOR0xFX0xJTkUpKTsKKyNpZiBVU0UoQVRTUEkp
CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0
KCksIEFUU1BJX1NUQVRFX1NFTEVDVEFCTEVfVEVYVCkpOworI2Vsc2UKKyAgICAvLyBGSVhNRTog
QVRLIGRvZXNuJ3QgaW1wbGVtZW50IHNlbGVjdGFibGUgdGV4dCwgYnV0IGluY2x1ZGVzIG9wcmll
bnRhdGlvbi4KKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0
ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOworI2VuZGlmCisgICAgZ19hc3Nl
cnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NU
QVRFX1JFUVVJUkVEKSk7CisKKyAgICBhdXRvIGVudHJ5RGlzYWJsZWQgPSBhZG9wdEdSZWYoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxk
KyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZW50
cnlEaXNhYmxlZC5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vz
c2libGVfZ2V0X3N0YXRlX3NldChlbnRyeURpc2FibGVkLmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwg
PT0sIDUpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRl
U2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNw
aV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5n
ZXQoKSwgQVRTUElfU1RBVEVfRURJVEFCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0
YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0lOR0xFX0xJTkUp
KTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29u
dGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTEVDVEFCTEVfVEVYVCkpOworI2Vs
c2UKKyAgICAvLyBGSVhNRTogQVRLIGRvZXNuJ3QgaW1wbGVtZW50IHNlbGVjdGFibGUgdGV4dCwg
YnV0IGluY2x1ZGVzIG9wcmllbnRhdGlvbi4KKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRl
X3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOwor
I2VuZGlmCisKKyAgICBhdXRvIGVudHJ5UmVhZE9ubHkgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxw
dHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZW50cnlSZWFkT25s
eS5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0
X3N0YXRlX3NldChlbnRyeVJlYWRPbmx5LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wdWludChB
Y2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDgpOwor
ICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgp
LCBBVFNQSV9TVEFURV9FTkFCTEVEKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9z
ZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOworICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsKKyAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElf
U1RBVEVfRk9DVVNBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29u
dGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NJTkdMRV9MSU5FKSk7CisjaWYgVVNF
KEFUU1BJKQorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRl
U2V0LmdldCgpLCBBVFNQSV9TVEFURV9TRUxFQ1RBQkxFX1RFWFQpKTsKKyNlbHNlCisgICAgLy8g
RklYTUU6IEFUSyBkb2Vzbid0IGltcGxlbWVudCBzZWxlY3RhYmxlIHRleHQsIGJ1dCBpbmNsdWRl
cyBvcHJpZW50YXRpb24uCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFp
bnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKKyNlbmRpZgorICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9SRUFEX09OTFkpKTsKKworICAgIGF1dG8gdGV4dEFyZWEgPSBhZG9wdEdSZWYo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENo
aWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUo
dGV4dEFyZWEuZ2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3Np
YmxlX2dldF9zdGF0ZV9zZXQodGV4dEFyZWEuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwgOSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0
KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRl
X3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0VOU0lUSVZFKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3Nl
dF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hPV0lORykpOworICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQ
SV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9DVVNFRCkpOworICAgIGdfYXNz
ZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9T
VEFURV9FRElUQUJMRSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRh
aW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9NVUxUSV9MSU5FKSk7CisjaWYgVVNFKEFU
U1BJKQorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9TRUxFQ1RBQkxFX1RFWFQpKTsKKyNlbHNlCisgICAgLy8gRklY
TUU6IEFUSyBkb2Vzbid0IGltcGxlbWVudCBzZWxlY3RhYmxlIHRleHQsIGJ1dCBpbmNsdWRlcyBv
cHJpZW50YXRpb24uCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMo
c3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKKyNlbmRpZgorfQorCitz
dGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZVN0YXRlQ2hhbmdlZChBY2Nlc3NpYmlsaXR5VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKKyAgICB0
ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJvZHk+IgorICAg
ICAgICAiICAgIDxpbnB1dCBpZD0nY2hlY2snIHR5cGU9J2NoZWNrYm94Jy8+Q2hlY2tib3giCisg
ICAgICAgICIgICAgPGJ1dHRvbiBpZD0ndG9nZ2xlJyBhcmlhLXByZXNzZWQ9J3RydWUnPlRvZ2ds
ZSBidXR0b248L2J1dHRvbj4iCisgICAgICAgICIgICAgPGlucHV0IGlkPSdlbnRyeScgdmFsdWU9
J0VudHJ5Jz4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+IiwKKyAgICAg
ICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBh
dXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAgIGF1dG8gZG9j
dW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50
V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworCisgICAgYXV0byBzZWN0aW9uID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgp
LCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHNl
Y3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfY291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09LCAzKTsKKworICAgIHVuc2ln
bmVkIG5leHRDaGlsZCA9IDA7CisgICAgYXV0byBjaGVja2JveCA9IGFkb3B0R1JlZihhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShjaGVja2Jv
eC5nZXQoKSkpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGNoZWNrYm94LmdldCgpLCB7
ICJvYmplY3Q6c3RhdGUtY2hhbmdlZCIgfSk7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hlY2snKS5jaGVja2Vk
ID0gdHJ1ZTsiLCBudWxscHRyKTsKKyAgICBhdXRvIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1v
bml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6c3RhdGUtY2hh
bmdlZDpjaGVja2VkIik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEs
ID09LCAxKTsKKyAgICBldmVudHMgPSB7IH07CisKKyAgICBhdXRvIHRvZ2dsZUJ1dHRvbiA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgp
LCBuZXh0Q2hpbGQrKywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUND
RVNTSUJMRSh0b2dnbGVCdXR0b24uZ2V0KCkpKTsKKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRv
cih0b2dnbGVCdXR0b24uZ2V0KCksIHsgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkIiB9KTsKKyAgICB0
ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0b2dnbGUnKS5hcmlhUHJlc3NlZCA9IGZhbHNlOyIsIG51bGxwdHIpOworICAgIGV2
ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChl
dmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlw
ZSwgPT0sICJvYmplY3Q6c3RhdGUtY2hhbmdlZDpwcmVzc2VkIik7CisgICAgZ19hc3NlcnRfY21w
dWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAwKTsKKyAgICBldmVudHMgPSB7IH07CisKKyAg
ICBhdXRvIGVudHJ5ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KHNlY3Rpb24uZ2V0KCksIG5leHRDaGlsZCsrLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGVudHJ5LmdldCgpKSk7CisgICAgdGVzdC0+c3RhcnRF
dmVudE1vbml0b3IoZW50cnkuZ2V0KCksIHsgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkIiB9KTsKKyAg
ICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImxldCBlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2VudHJ5Jyk7IGUuYXJpYVJlcXVpcmVkID0gdHJ1ZTsgZS5mb2N1
cygpOyIsIG51bGxwdHIpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMik7
CisjaWYgIVVTRShBVFNQSSkKKyAgICAvLyBGSVhNRTogV2l0aCBBVEsgZm9jdXNlZCBldmVudCBp
cyBlbWl0dGVkIHR3aWNlIGZvciBzb21lIHJlYXNvbi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2
ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBldmVudHMucmVtb3ZlRmlyc3RNYXRjaGluZyhbXShh
dXRvJiBpdGVtKSB7CisgICAgICAgIGlmICghc3RyY21wKGl0ZW0tPnR5cGUsICJvYmplY3Q6c3Rh
dGUtY2hhbmdlZDpmb2N1c2VkIikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworI2VuZGlmCisgICAgZ19hc3NlcnRfY21wdWludChldmVu
dHMuc2l6ZSgpLCA9PSwgMik7CisgICAgaWYgKCFnX3N0cmNtcDAoZXZlbnRzWzBdLT50eXBlLCAi
b2JqZWN0OnN0YXRlLWNoYW5nZWQ6Zm9jdXNlZCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgMSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3Ry
KGV2ZW50c1sxXS0+dHlwZSwgPT0sICJvYmplY3Q6c3RhdGUtY2hhbmdlZDpyZXF1aXJlZCIpOwor
ICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sxXS0+ZGV0YWlsMSwgPT0sIDEpOworICAg
IH0gZWxzZSBpZiAoIWdfc3RyY21wMChldmVudHNbMF0tPnR5cGUsICJvYmplY3Q6c3RhdGUtY2hh
bmdlZDpyZXF1aXJlZCIpKSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5k
ZXRhaWwxLCA9PSwgMSk7CisKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1sxXS0+dHlw
ZSwgPT0sICJvYmplY3Q6c3RhdGUtY2hhbmdlZDpmb2N1c2VkIik7CisgICAgICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwxLCA9PSwgMSk7CisgICAgfSBlbHNlCisgICAgICAg
IGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgZXZlbnRzID0geyB9OworfQorCiB2b2lkIGJl
Zm9yZUFsbCgpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJp
bGl0eSIsICJhdHNwaS1iYXNpYy1oaWVyYXJjaHkiLCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeSk7
CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nl
c3NpYmxlL2Jhc2ljLWhpZXJhcmNoeSIsIHRlc3RBY2Nlc3NpYmxlQmFzaWNIaWVyYXJjaHkpOwor
ICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQoIldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNz
aWJsZS9pZ25vcmVkLW9iamVjdHMiLCB0ZXN0QWNjZXNzaWJsZUlnbm9yZWRPYmplY3RzKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2li
bGUvY2hpbGRyZW4tY2hhbmdlZCIsIHRlc3RBY2Nlc3NpYmxlQ2hpbGRyZW5DaGFuZ2VkKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2li
bGUvYXR0cmlidXRlcyIsIHRlc3RBY2Nlc3NpYmxlQXR0cmlidXRlcyk7CisgICAgQWNjZXNzaWJp
bGl0eVRlc3Q6OmFkZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL3N0YXRlIiwg
dGVzdEFjY2Vzc2libGVTdGF0ZSk7CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFkZCgiV2ViS2l0
QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL3N0YXRlLWNoYW5nZWQiLCB0ZXN0QWNjZXNzaWJs
ZVN0YXRlQ2hhbmdlZCk7CiB9CiAKIHZvaWQgYWZ0ZXJBbGwoKQo=
</data>
<flag name="review"
          id="463446"
          type_id="1"
          status="-"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439831</attachid>
            <date>2021-10-01 01:40:30 -0700</date>
            <delta_ts>2021-10-01 02:53:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-accessible.diff</filename>
            <type>text/plain</type>
            <size>131341</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxMDI2ZjgyZDgxMzUuLjMxMGU1ZTQ1MTExOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDg1IEBACisyMDIxLTA5LTMwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBBZGQgaW5pdGlhbCBpbXBsZW1lbnRh
dGlvbiBvZiBhY2Nlc3NpYmxlIGludGVyZmFjZSB3aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMDI1NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1H
VEsuY21ha2U6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0VmFsdWVBdHRyaWJ1dGUg
Y29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpyb2xlUGxhdGZvcm1TdHJp
bmcgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0
c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBsYXRmb3JtSGFuZGxlRm9j
dXNlZFVJRWxlbWVudENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
ZGV0YWNoV3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0
c3BpOjpyZWdpc3RlclJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3Bp
Ojp1bnJlZ2lzdGVyUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnJlZ2lzdGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
dW5yZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6Omxv
Y2FsaXplZFJvbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
ZW5zdXJlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjphZGRB
Y2Nlc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6cmVtb3Zl
QWNjZXNzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5OjpjcmVhdGVQbGF0
Zm9ybVJvbGVNYXApOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eUF0c3BpLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRz
cGlFbnVtcy5oOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OmludGVyZmFjZXNGb3JPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjYWNoZURlc3Ryb3llZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVsZW1lbnREZXN0cm95ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6YXRzcGlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnNldFJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpyb290IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnBhcmVudFJlZmVyZW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkQ291
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpj
aGlsZEF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6Y2hpbGRyZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjppbmRleEluUGFyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6aW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om5hbWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkZXNjcmlwdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbmNsdWRlT3JpZW50YXRpb25TdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRyaWJ1dGVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRB
dHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6cmVsYXRpb25NYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpidWlsZFJlbGF0aW9uU2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZhY2VzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VyaWFsaXplIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBZGRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkUmVtb3Zl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvbGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb2xl
TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmxvY2FsaXplZFJvbGVOYW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6dXBkYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09i
amVjdCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlSb290QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNw
aTo6dW5yZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9v
dEF0c3BpOjpjaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9v
dEF0c3BpOjpzZXJpYWxpemUgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0
ZWR0cmVlL2F0c3BpL0FYSXNvbGF0ZWRPYmplY3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWElzb2xhdGVkT2JqZWN0OjphdHRhY2hQbGF0Zm9ybVdyYXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhJc29sYXRlZE9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKToKKwogMjAyMS0w
OS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4IGFmdGVyIHIyODMzMDQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKaW5kZXggNjY2YTM1YjUzYTRiLi40ZDQzOWQ0ODU3YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCkBAIC01NSw2ICs1NSw3IEBAIGVuZGlmICgpCiAKIGxpc3QoQVBQRU5EIFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eUF0c3BpLmgKKyAgICBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlBdHNwaUVudW1zLmgKICAgICBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaS5oCiAgICAgYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRl
eCA0MzlmNmI0ZTc5YmQuLmY2YTNmNjIzMGNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZW1vdmUoV2lkZ2V0Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKLSNpZiAhUExB
VEZPUk0oQ09DT0EpCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhVVNFKEFUU1BJKQogICAgIHZv
aWQgZGV0YWNoV3JhcHBlcihBWENvcmVPYmplY3QqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5
cGUpOwogI2VuZGlmCiBwcml2YXRlOgpAQCAtNTg0LDcgKzU4NCw3IEBAIGlubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OmRlZmVyUmVjb21wdXRlSXNJZ25vcmVkKEVsZW1lbnQqKSB7IH0KIGlubGlu
ZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRlZmVyVGV4dENoYW5nZWRJZk5lZWRlZChOb2RlKikgeyB9
CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2Vk
SWZOZWVkZWQoRWxlbWVudCYpIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6ZGVmZXJU
ZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJvbChIVE1MVGV4dEZvcm1Db250
cm9sRWxlbWVudCYsIGNvbnN0IFN0cmluZyYpIHsgfQotI2lmICFQTEFURk9STShDT0NPQSkKKyNp
ZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoQVRTUEkpCiBpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjpkZXRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCosIEFjY2Vzc2liaWxpdHlEZXRhY2htZW50
VHlwZSkgeyB9CiAjZW5kaWYKIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZvY3VzTW9kYWxO
b2RlVGltZXJGaXJlZCgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCAyNzBiYmQ5ZDhjYTguLjUz
MDI1M2RmYmM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKQEAgLTIyMjIsNyArMjIyMiw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3QKICAg
ICBpZiAoaXNQcm9ncmVzc0luZGljYXRvcigpIHx8IGlzU2xpZGVyKCkgfHwgaXNTY3JvbGxiYXIo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBVU0UoQVRLKQorI2lmIFVTRShBVEspIHx8
IFVTRShBVFNQSSkKICAgICAvLyBJbiBBVEssIGlucHV0IHR5cGVzIHdoaWNoIHN1cHBvcnQgYXJp
YS1yZWFkb25seSBhcmUgdHJlYXRlZCBhcyBoYXZpbmcgYQogICAgIC8vIHNldHRhYmxlIHZhbHVl
IGlmIHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIHdpZGdldCdzIHZhbHVlIG9yIGl0cyBzdGF0ZS4K
ICAgICBpZiAoc3VwcG9ydHNSZWFkT25seSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggMGYwMTZjNDUzMjY1Li41
MDY5NGE5OGQzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjI3Miw4ICsyMjcyLDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpoYXNIaWdobGlnaHRpbmcoKSBjb25zdAogI2lmICFQTEFURk9STShNQUMp
CiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6cm9sZVBsYXRmb3JtU3RyaW5nKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IGluIG90aGVyIHBsYXRmb3Jtcy4KLSAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJvbGVUb1BsYXRmb3JtU3Ry
aW5nKHJvbGVWYWx1ZSgpKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJvbGVQ
bGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QKQEAgLTM2NDksNyArMzY0OCw3IEBAIFN0cmluZyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpvdXRlckhUTUwoKSBjb25zdAogCiBuYW1lc3BhY2UgQWNjZXNz
aWJpbGl0eSB7CiAKLSNpZiAhUExBVEZPUk0oTUFDKQorI2lmICFQTEFURk9STShNQUMpICYmICFV
U0UoQVRTUEkpCiAvLyBGSVhNRTogaW1wbGVtZW50IGluIG90aGVyIHBsYXRmb3Jtcy4KIFBsYXRm
b3JtUm9sZU1hcCBjcmVhdGVQbGF0Zm9ybVJvbGVNYXAoKSB7IHJldHVybiBQbGF0Zm9ybVJvbGVN
YXAoKTsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAKaW5kZXggNmJlNGMzOTlmOGRlLi40YTQ3
NmQ3ODI3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QVhPYmplY3RDYWNoZUF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FYT2JqZWN0Q2FjaGVBdHNwaS5jcHAKQEAgLTI0LDE2ICsyNCwyOCBAQAogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiTm9kZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBheE9iamVjdCwgQWNjZXNzaWJp
bGl0eURldGFjaG1lbnRUeXBlIGRldGFjaG1lbnRUeXBlKQotewotfQotCiB2b2lkIEFYT2JqZWN0
Q2FjaGU6OmF0dGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBheE9iamVjdCkKIHsKKyAgICBhdXRv
IHdyYXBwZXIgPSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNyZWF0ZShheE9iamVjdCk7Cisg
ICAgYXhPYmplY3QtPnNldFdyYXBwZXIod3JhcHBlci5wdHIoKSk7CisKKyAgICBhdXRvKiBheFBh
cmVudCA9IGF4T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBpZiAoIWF4UGFy
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBheFBhcmVudFdyYXBwZXIgPSBheFBh
cmVudC0+d3JhcHBlcigpOworICAgIGlmICghYXhQYXJlbnRXcmFwcGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICB3cmFwcGVyLT5zZXRQYXJlbnQoYXhQYXJlbnRXcmFwcGVyKTsKIH0KIAogdm9p
ZCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybVBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCkKQEAg
LTU2LDYgKzY4LDEyMSBAQCBib29sIEFYT2JqZWN0Q2FjaGU6OnVzZWRPbkFYVGhyZWFkKCkKIAog
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0
KiBjb3JlT2JqZWN0LCBBWE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pCiB7CisgICAgUkVMRUFT
RV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGF1dG8qIHdyYXBwZXIgPSBjb3JlT2JqZWN0
LT53cmFwcGVyKCk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBz
d2l0Y2ggKG5vdGlmaWNhdGlvbikgeworICAgIGNhc2UgQVhDaGVja2VkU3RhdGVDaGFuZ2VkOgor
ICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2JveE9yUmFkaW8oKSB8fCBjb3JlT2JqZWN0
LT5pc1N3aXRjaCgpKQorICAgICAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJjaGVja2Vk
IiwgY29yZU9iamVjdC0+aXNDaGVja2VkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFY
U2VsZWN0ZWRTdGF0ZUNoYW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgic2Vs
ZWN0ZWQiLCBjb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQ6CisgICAgY2FzZSBBWE1lbnVMaXN0VmFsdWVD
aGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYVmFsdWVDaGFuZ2VkOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQ6CisgICAgICAgIHdyYXBw
ZXItPnN0YXRlQ2hhbmdlZCgiaW52YWxpZC1lbnRyeSIsIGNvcmVPYmplY3QtPmludmFsaWRTdGF0
dXMoKSAhPSAiZmFsc2UiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEVsZW1lbnRCdXN5
Q2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJidXN5IiwgY29yZU9iamVj
dC0+aXNCdXN5KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYQ3VycmVudFN0YXRlQ2hh
bmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFJvd0V4cGFuZGVkOgorICAgICAgICB3
cmFwcGVyLT5zdGF0ZUNoYW5nZWQoImV4cGFuZGVkIiwgdHJ1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhSb3dDb2xsYXBzZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgi
ZXhwYW5kZWQiLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhFeHBhbmRlZENo
YW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZXhwYW5kZWQiLCBjb3JlT2Jq
ZWN0LT5pc0V4cGFuZGVkKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRGlzYWJsZWRT
dGF0ZUNoYW5nZWQ6IHsKKyAgICAgICAgYm9vbCBlbmFibGVkU3RhdGUgPSBjb3JlT2JqZWN0LT5p
c0VuYWJsZWQoKTsKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJlbmFibGVkIiwgZW5h
YmxlZFN0YXRlKTsKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJzZW5zaXRpdmUiLCBl
bmFibGVkU3RhdGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBWFByZXNzZWRT
dGF0ZUNoYW5nZWQ6CisgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgicHJlc3NlZCIsIGNv
cmVPYmplY3QtPmlzUHJlc3NlZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFJlYWRP
bmx5U3RhdHVzQ2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3RhdGVDaGFuZ2VkKCJyZWFkLW9u
bHkiLCBjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBWFJlcXVpcmVkU3RhdHVzQ2hhbmdlZDoKKyAgICAgICAgd3JhcHBlci0+c3Rh
dGVDaGFuZ2VkKCJyZXF1aXJlZCIsIGNvcmVPYmplY3QtPmlzUmVxdWlyZWQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZDoKKyAgICAgICAgaWYg
KGF1dG8qIGRlc2NlbmRhbnQgPSBjb3JlT2JqZWN0LT5hY3RpdmVEZXNjZW5kYW50KCkpCisgICAg
ICAgICAgICBwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKG51bGxwdHIsIGRl
c2NlbmRhbnQtPm5vZGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhBcmlhQXR0cmli
dXRlQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEFyaWFSb2xlQ2hhbmdlZDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWEF1dG9jb3JyZWN0aW9uT2NjdXJlZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBWENoaWxkcmVuQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYRnJhbWVMb2FkQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhJZEF0
dHJpYnV0ZUNoYW5nZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhJbWFnZU92ZXJsYXlD
aGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYTGFuZ3VhZ2VDaGFuZ2VkOgorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFYTGF5b3V0Q29tcGxldGU6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhMb2FkQ29tcGxldGU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhOZXdE
b2N1bWVudExvYWRDb21wbGV0ZToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFBhZ2VTY3Jv
bGxlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWFNlbGVjdGVkVGV4dENoYW5nZWQ6Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhTY3JvbGxlZFRvQW5jaG9yOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFYTGl2ZVJlZ2lvbkNyZWF0ZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQVhMaXZlUmVnaW9uQ2hhbmdlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE1lbnVM
aXN0SXRlbVNlbGVjdGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYTWVudUNsb3NlZDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWE1lbnVPcGVuZWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQVhSb3dDb3VudENoYW5nZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhQ
cmVzc0RpZFN1Y2NlZWQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhQcmVzc0RpZEZhaWw6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQVhTb3J0RGlyZWN0aW9uQ2hhbmdlZDoKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBWFRleHRDaGFuZ2VkOgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFYRHJhZ2dpbmdTdGFydGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dp
bmdFbmRlZDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBWERyYWdnaW5nRW50ZXJlZERyb3Ba
b25lOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dpbmdEcm9wcGVkOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFYRHJhZ2dpbmdFeGl0ZWREcm9wWm9uZToKKyAgICAgICAgYnJl
YWs7CisgICAgfQogfQogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZv
cm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWFRleHRDaGFuZ2Ug
dGV4dENoYW5nZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpCkBAIC02OCw2
ICsxOTUsMTQgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudFBsYXRmb3Jt
Tm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG8KIAogdm9pZCBBWE9iamVjdENhY2hl
OjpwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKE5vZGUqIG9sZEZvY3VzZWRO
b2RlLCBOb2RlKiBuZXdGb2N1c2VkTm9kZSkKIHsKKyAgICBpZiAoYXV0byogYXhPYmplY3QgPSBn
ZXQob2xkRm9jdXNlZE5vZGUpKSB7CisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gYXhPYmpl
Y3QtPndyYXBwZXIoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZm9jdXNl
ZCIsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKGF1dG8qIGF4T2JqZWN0ID0gZ2V0T3JDcmVhdGUo
bmV3Rm9jdXNlZE5vZGUpKSB7CisgICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gYXhPYmplY3Qt
PndyYXBwZXIoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPnN0YXRlQ2hhbmdlZCgiZm9jdXNlZCIs
IHRydWUpOworICAgIH0KIH0KIAogdm9pZCBBWE9iamVjdENhY2hlOjpoYW5kbGVTY3JvbGxlZFRv
QW5jaG9yKGNvbnN0IE5vZGUqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCmluZGV4IGNhZmM4MWI1ZTFhNC4u
NmY0NDljMTExNGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU29ydGVkQXJyYXlNYXAuaD4KICNpbmNs
dWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIApAQCAt
NjUsNiArNjYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6cmVnaXN0ZXJSb290KEFjY2Vz
c2liaWxpdHlSb290QXRzcGkmIHJvb3RPYmplY3QsIFZlY3RvcgogICAgIG1fcXVldWUtPmRpc3Bh
dGNoKFt0aGlzLCByb290T2JqZWN0ID0gUmVmIHsgcm9vdE9iamVjdCB9LCBpbnRlcmZhY2VzID0g
V1RGTW92ZShpbnRlcmZhY2VzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgU3RyaW5nIHJlZmVyZW5jZTsKICAgICAg
ICAgaWYgKG1fY29ubmVjdGlvbikgeworICAgICAgICAgICAgZW5zdXJlQ2FjaGUoKTsKICAgICAg
ICAgICAgIFN0cmluZyBwYXRoID0gbWFrZVN0cmluZygiL29yZy9hMTF5L3dlYmtpdC9hY2Nlc3Np
YmxlLyIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS5yZXBsYWNlKCctJywgJ18nKSk7CiAg
ICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDI+IHJlZ2lzdGVyZWRPYmplY3RzOwogICAgICAg
ICAgICAgcmVnaXN0ZXJlZE9iamVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnRlcmZhY2Vz
LnNpemUoKSk7CkBAIC04Miw2ICs4NCwzMjMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJl
Z2lzdGVyUm9vdChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpJiByb290T2JqZWN0LCBWZWN0b3IKICAg
ICB9KTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnVucmVnaXN0ZXJSb290KEFjY2Vz
c2liaWxpdHlSb290QXRzcGkmIHJvb3RPYmplY3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCByb290T2JqZWN0ID0g
UmVmIHsgcm9vdE9iamVjdCB9XSB7CisgICAgICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1f
Y29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgcm9vdE9iamVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRh
KCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiU3RhdGVDaGFuZ2VkIiwKKyAgICAg
ICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgImRlZnVuY3QiLCBUUlVFLCAwLCBn
X3ZhcmlhbnRfbmV3X3N0cmluZygiMCIpLCBudWxscHRyKSwgbnVsbHB0cik7CisKKyAgICAgICAg
YXV0byByZWdpc3RlcmVkT2JqZWN0cyA9IG1fcm9vdE9iamVjdHMudGFrZShyb290T2JqZWN0LnB0
cigpKTsKKyAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9u
LmdldCgpLCBudWxscHRyLCAiL29yZy9hMTF5L2F0c3BpL2NhY2hlIiwgIm9yZy5hMTF5LmF0c3Bp
LkNhY2hlIiwgIlJlbW92ZUFjY2Vzc2libGUiLAorICAgICAgICAgICAgZ192YXJpYW50X25ldygi
KChzbykpIiwgdW5pcXVlTmFtZSgpLCByb290T2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSks
IG51bGxwdHIpOworICAgICAgICBmb3IgKGF1dG8gaWQgOiByZWdpc3RlcmVkT2JqZWN0cykKKyAg
ICAgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0KG1fY29ubmVjdGlv
bi5nZXQoKSwgaWQpOworICAgIH0pOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eUF0c3BpOjpy
ZWdpc3Rlck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0LCBWZWN0
b3I8c3RkOjpwYWlyPEdEQnVzSW50ZXJmYWNlSW5mbyosIEdEQnVzSW50ZXJmYWNlVlRhYmxlKj4+
JiYgaW50ZXJmYWNlcykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgZW5zdXJl
Q2FjaGUoKTsKKyAgICBTdHJpbmcgcGF0aCA9IG1ha2VTdHJpbmcoIi9vcmcvYTExeS9hdHNwaS9h
Y2Nlc3NpYmxlLyIsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS5yZXBsYWNlKCctJywgJ18n
KSk7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAyMD4gcmVnaXN0ZXJlZE9iamVjdHM7CisgICAgcmVn
aXN0ZXJlZE9iamVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnRlcmZhY2VzLnNpemUoKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmZhY2UgOiBpbnRlcmZhY2VzKSB7CisgICAgICAg
IGF1dG8gaWQgPSBnX2RidXNfY29ubmVjdGlvbl9yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9u
LmdldCgpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGludGVyZmFjZS5maXJzdCwgaW50ZXJmYWNlLnNl
Y29uZCwgJmF0c3BpT2JqZWN0LCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgcmVnaXN0ZXJl
ZE9iamVjdHMudW5jaGVja2VkQXBwZW5kKGlkKTsKKyAgICB9CisgICAgbV9hdHNwaU9iamVjdHMu
YWRkKCZhdHNwaU9iamVjdCwgV1RGTW92ZShyZWdpc3RlcmVkT2JqZWN0cykpOworCisgICAgYWRk
QWNjZXNzaWJsZShhdHNwaU9iamVjdCwgcGF0aCk7CisKKyAgICByZXR1cm4gcGF0aDsKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnVucmVnaXN0ZXJPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpJiBhdHNwaU9iamVjdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0ID0gUmVmIHsg
YXRzcGlPYmplY3QgfV0geworICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5l
Y3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSwg
Im9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9iamVjdCIsICJTdGF0ZUNoYW5nZWQiLAorICAgICAgICAg
ICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCAiZGVmdW5jdCIsIFRSVUUsIDAsIGdfdmFy
aWFudF9uZXdfc3RyaW5nKCIwIiksIG51bGxwdHIpLCBudWxscHRyKTsKKworICAgICAgICByZW1v
dmVBY2Nlc3NpYmxlKGF0c3BpT2JqZWN0KTsKKworICAgICAgICBhdXRvIHJlZ2lzdGVyZWRPYmpl
Y3RzID0gbV9hdHNwaU9iamVjdHMudGFrZShhdHNwaU9iamVjdC5wdHIoKSk7CisgICAgICAgIGZv
ciAoYXV0byBpZCA6IHJlZ2lzdGVyZWRPYmplY3RzKQorICAgICAgICAgICAgZ19kYnVzX2Nvbm5l
Y3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdldCgpLCBpZCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjpjaGlsZHJlbkNoYW5nZWQoQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBj
aGlsZCwgQ2hpbGRyZW5DaGFuZ2VkIGNoYW5nZSkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0ID0g
UmVmIHsgYXRzcGlPYmplY3QgfSwgY2hpbGQgPSBSZWYgeyBjaGlsZCB9LCBjaGFuZ2VdIHsKKyAg
ICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2hpbGQtPnNldFJvb3QoYXRzcGlPYmplY3QtPnJvb3QoKSk7CisgICAgICAgIGdfZGJ1c19jb25u
ZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmpl
Y3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0Iiwg
IkNoaWxkcmVuQ2hhbmdlZCIsCisgICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2lpdihzbykp
IiwgY2hhbmdlID09IENoaWxkcmVuQ2hhbmdlZDo6QWRkZWQgPyAiYWRkIiA6ICJyZW1vdmUiLCBj
aGlsZC0+aW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdlZChjaGFuZ2UpLAorICAgICAgICAg
ICAgMCwgZ192YXJpYW50X25ldygiKHNvKSIsIHVuaXF1ZU5hbWUoKSwgY2hpbGQtPnBhdGgoKS51
dGY4KCkuZGF0YSgpKSwgdW5pcXVlTmFtZSgpLCBhdHNwaU9iamVjdC0+cGF0aCgpLnV0ZjgoKS5k
YXRhKCkpLCBudWxscHRyKTsKKyAgICB9KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6
OnN0YXRlQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0LCBjb25z
dCBjaGFyKiBuYW1lLCBib29sIHZhbHVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYg
eyBhdHNwaU9iamVjdCB9LCBuYW1lID0gQ1N0cmluZyhuYW1lKSwgdmFsdWVdIHsKKyAgICAgICAg
aWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19kYnVz
X2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNw
aU9iamVjdC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmpl
Y3QiLCAiU3RhdGVDaGFuZ2VkIiwKKyAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtz
dn0pIiwgbmFtZS5kYXRhKCksIHZhbHVlLCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiMCIpLCBu
dWxscHRyKSwgbnVsbHB0cik7CisgICAgfSk7Cit9CisKK3N0cnVjdCBSb2xlTmFtZUVudHJ5IHsK
KyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGNvbnN0IGNoYXIqIGxvY2FsaXplZE5hbWU7Cit9
OworCitzdGF0aWMgY29uc3RleHByIHN0ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5Um9sZSwgUm9sZU5h
bWVFbnRyeT4gcm9sZU5hbWVzW10gPSB7CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VW5rbm93
biwgeyAidW5rbm93biIsIE5fKCJ1bmtub3duIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJv
bGU6OkJ1dHRvbiwgeyAicHVzaCBidXR0b24iLCBOXygicHVzaCBidXR0b24iKSB9IH0sCisgICAg
eyBBY2Nlc3NpYmlsaXR5Um9sZTo6UmFkaW9CdXR0b24sIHsgInJhZGlvIGJ1dHRvbiIsIE5fKCJy
YWRpbyBidXR0b24iKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2hlY2tCb3gsIHsg
ImNoZWNrIGJveCIsIE5fKCJjaGVjayBib3giKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9s
ZTo6U2xpZGVyLCB7ICJzbGlkZXIiLCBOXygic2xpZGVyIikgfSB9LAorICAgIHsgQWNjZXNzaWJp
bGl0eVJvbGU6OlRhYkdyb3VwLCB7ICJwYWdlIHRhYiBsaXN0IiwgTl8oInBhZ2UgdGFiIGxpc3Qi
KSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkLCB7ICJlbnRyeSIsIE5f
KCJlbnRyeSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0LCB7ICJ0
ZXh0IiwgTl8oInRleHQiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEFyZWEs
IHsgImVudHJ5IiwgTl8oImVudHJ5IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNj
cm9sbEFyZWEsIHsgInNjcm9sbCBwYW5lIiwgTl8oInNjcm9sbCBwYW5lIikgfSB9LAorICAgIHsg
QWNjZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9uLCB7ICJjb21ibyBib3giLCBOXygiY29tYm8g
Ym94IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVCdXR0b24sIHsgIm1lbnUg
aXRlbSIsIE5fKCJtZW51IGl0ZW0iKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFi
bGUsIHsgInRhYmxlIiwgTl8oInRhYmxlIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6
OkFwcGxpY2F0aW9uLCB7ICJhcHBsaWNhdGlvbiIsIE5fKCJhcHBsaWNhdGlvbiIpIH0gfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cCwgeyAicGFuZWwiLCBOXygicGFuZWwiKSB9IH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEdyb3VwLCB7ICJzZWN0aW9uIiwgTl8oInNl
Y3Rpb24iKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6UmFkaW9Hcm91cCwgeyAicGFu
ZWwiLCBOXygicGFuZWwiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdCwgeyAi
bGlzdCIsIE5fKCJsaXN0IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkRpcmVjdG9y
eSwgeyAiZGlyZWN0b3J5IHBhbmUiLCBOXygiZGlyZWN0b3J5IHBhbmUiKSB9IH0sCisgICAgeyBB
Y2Nlc3NpYmlsaXR5Um9sZTo6U2Nyb2xsQmFyLCB7ICJzY3JvbGwgYmFyIiwgTl8oInNjcm9sbCBi
YXIiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6SW1hZ2UsIHsgImltYWdlIiwgTl8o
ImltYWdlIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVCYXIsIHsgIm1lbnUg
YmFyIiwgTl8oIm1lbnUgYmFyIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnUs
IHsgIm1lbnUiLCBOXygibWVudSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51
SXRlbSwgeyAibWVudSBpdGVtIiwgTl8oIm1lbnUgaXRlbSIpIH0gfSwKKyAgICB7IEFjY2Vzc2li
aWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94LCB7ICJjaGVjayBtZW51IGl0ZW0iLCBOXygiY2hl
Y2sgbWVudSBpdGVtIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVJdGVtUmFk
aW8sIHsgInJhZGlvIG1lbnUgaXRlbSIsIE5fKCJyYWRpbyBtZW51IGl0ZW0iKSB9IH0sCisgICAg
eyBBY2Nlc3NpYmlsaXR5Um9sZTo6Um93LCB7ICJ0YWJsZSByb3ciLCBOXygidGFibGUgcm93Iikg
fSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXIsIHsgInRvb2wgYmFyIiwgTl8o
InRvb2wgYmFyIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkJ1c3lJbmRpY2F0b3Is
IHsgInByb2dyZXNzIGJhciIsIE5fKCJwcm9ncmVzcyBiYXIiKSB9IH0sCisgICAgeyBBY2Nlc3Np
YmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IsIHsgInByb2dyZXNzIGJhciIsIE5fKCJwcm9n
cmVzcyBiYXIiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TWV0ZXIsIHsgImxldmVs
IGJhciIsIE5fKCJsZXZlbCBiYXIiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6V2lu
ZG93LCB7ICJ3aW5kb3ciLCBOXygid2luZG93IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJv
bGU6Ok91dGxpbmUsIHsgInRyZWUiLCBOXygidHJlZSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxp
dHlSb2xlOjpDb21ib0JveCwgeyAiY29tYm8gYm94IiwgTl8oImNvbWJvIGJveCIpIH0gfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTcGxpdEdyb3VwLCB7ICJzcGxpdCBwYW5lIiwgTl8oInNw
bGl0IHBhbmUiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6U3BsaXR0ZXIsIHsgInNl
cGFyYXRvciIsIE5fKCJzZXBhcmF0b3IiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29sb3JXZWxsLCB7ICJwdXNoIGJ1dHRvbiIsIE5fKCJwdXNoIGJ1dHRvbiIpIH0gfSwKKyAgICB7
IEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5rLCB7ICJsaW5rIiwgTl8oImxpbmsiKSB9IH0sCisgICAg
eyBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JpZCwgeyAidGFibGUiLCBOXygidGFibGUiKSB9IH0sCisg
ICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJlZUdyaWQsIHsgInRyZWUgdGFibGUiLCBOXygidHJl
ZSB0YWJsZSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJDb3JlTGluaywgeyAi
bGluayIsIE5fKCJsaW5rIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlTWFw
TGluaywgeyAibGluayIsIE5fKCJsaW5rIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6
OkltYWdlTWFwLCB7ICJpbWFnZSBtYXAiLCBOXygiaW1hZ2UgbWFwIikgfSB9LAorICAgIHsgQWNj
ZXNzaWJpbGl0eVJvbGU6Okxpc3RNYXJrZXIsIHsgInRleHQiLCBOXygidGV4dCIpIH0gfSwKKyAg
ICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJBcmVhLCB7ICJkb2N1bWVudCB3ZWIiLCBOXygiZG9j
dW1lbnQgd2ViIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkhlYWRpbmcsIHsgImhl
YWRpbmciLCBOXygiaGVhZGluZyIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0
Qm94LCB7ICJoZWFkaW5nIiwgTl8oImxpc3QgYm94IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6Okxpc3RCb3hPcHRpb24sIHsgImxpc3QgaXRlbSIsIE5fKCJsaXN0IGl0ZW0iKSB9IH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbCwgeyAidGFibGUgY2VsbCIsIE5fKCJ0YWJs
ZSBjZWxsIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkdyaWRDZWxsLCB7ICJ0YWJs
ZSBjZWxsIiwgTl8oInRhYmxlIGNlbGwiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
Q29sdW1uSGVhZGVyLCB7ICJjb2x1bW4gaGVhZGVyIiwgTl8oImNvbHVtbiBoZWFkZXIiKSB9IH0s
CisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6Um93SGVhZGVyLCB7ICJyb3cgaGVhZGVyIiwgTl8o
InJvdyBoZWFkZXIiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVmaW5pdGlvbiwg
eyAiZGVmaW5pdGlvbiIsIE5fKCJkZWZpbml0aW9uIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6OkRlc2NyaXB0aW9uTGlzdERldGFpbCwgeyAiZGVzY3JpcHRpb24gdmFsdWUiLCBOXygi
ZGVzY3JpcHRpb24gdmFsdWUiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3Jp
cHRpb25MaXN0VGVybSwgeyAiZGVzY3JpcHRpb24gdGVybSIsIE5fKCJkZXNjcmlwdGlvbiB0ZXJt
IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlRlcm0sIHsgImRlc2NyaXB0aW9uIHRl
cm0iLCBOXygiZGVzY3JpcHRpb24gdGVybSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xl
OjpEZXNjcmlwdGlvbkxpc3QsIHsgImRlc2NyaXB0aW9uIGxpc3QiLCBOXygiZGVzY3JpcHRpb24g
bGlzdCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya0Jhbm5lciwgeyAi
bGFuZG1hcmsiLCBOXygibGFuZG1hcmsiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6
TGFuZG1hcmtDb21wbGVtZW50YXJ5LCB7ICJsYW5kbWFyayIsIE5fKCJsYW5kbWFyayIpIH0gfSwK
KyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya0RvY1JlZ2lvbiwgeyAibGFuZG1hcmsi
LCBOXygibGFuZG1hcmsiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtD
b250ZW50SW5mbywgeyAibGFuZG1hcmsiLCBOXygibGFuZG1hcmsiKSB9IH0sCisgICAgeyBBY2Nl
c3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtNYWluLCB7ICJsYW5kbWFyayIsIE5fKCJsYW5kbWFyayIp
IH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb24sIHsgImxh
bmRtYXJrIiwgTl8oImxhbmRtYXJrIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Okxh
bmRtYXJrUmVnaW9uLCB7ICJsYW5kbWFyayIsIE5fKCJsYW5kbWFyayIpIH0gfSwKKyAgICB7IEFj
Y2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya1NlYXJjaCwgeyAibGFuZG1hcmsiLCBOXygibGFuZG1h
cmsiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25BbGVydCwgeyAi
bm90aWZpY2F0aW9uIiwgTl8oIm5vdGlmaWNhdGlvbiIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxp
dHlSb2xlOjpBcHBsaWNhdGlvbkFsZXJ0RGlhbG9nLCB7ICJhbGVydCIsIE5fKCJhbGVydCIpIH0g
fSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbkRpYWxvZywgeyAiZGlhbG9n
IiwgTl8oImRpYWxvZyIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlv
bkdyb3VwLCB7ICJncm91cGluZyIsIE5fKCJncm91cGluZyIpIH0gfSwKKyAgICB7IEFjY2Vzc2li
aWxpdHlSb2xlOjpBcHBsaWNhdGlvblRleHRHcm91cCwgeyAic2VjdGlvbiIsIE5fKCJzZWN0aW9u
IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uTG9nLCB7ICJsb2ci
LCBOXygibG9nIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uTWFy
cXVlZSwgeyAibWFycXVlZSIsIE5fKCJtYXJxdWVlIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6OkFwcGxpY2F0aW9uU3RhdHVzLCB7ICJzdGF0dXNiYXIiLCBOXygic3RhdHVzYmFyIikg
fSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGltZXIsIHsgInRpbWVy
IiwgTl8oInRpbWVyIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkRvY3VtZW50LCB7
ICJkb2N1bWVudCBmcmFtZSIsIE5fKCJkb2N1bWVudCBmcmFtZSIpIH0gfSwKKyAgICB7IEFjY2Vz
c2liaWxpdHlSb2xlOjpEb2N1bWVudEFydGljbGUsIHsgImFydGljbGUiLCBOXygiYXJ0aWNsZSIp
IH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudE1hdGgsIHsgIm1hdGgiLCBO
XygibWF0aCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudE5vdGUsIHsg
ImNvbW1lbnQiLCBOXygiY29tbWVudCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpV
c2VySW50ZXJmYWNlVG9vbHRpcCwgeyAidG9vbCB0aXAiLCBOXygidG9vbCB0aXAiKSB9IH0sCisg
ICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiLCB7ICJwYWdlIHRhYiIsIE5fKCJwYWdlIHRhYiIp
IH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJMaXN0LCB7ICJwYWdlIHRhYiBsaXN0
IiwgTl8oInBhZ2UgdGFiIGxpc3QiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFi
UGFuZWwsIHsgInNjcm9sbCBwYW5lIiwgTl8oInNjcm9sbCBwYW5lIikgfSB9LAorICAgIHsgQWNj
ZXNzaWJpbGl0eVJvbGU6OlRyZWUsIHsgInRyZWUiLCBOXygidHJlZSIpIH0gfSwKKyAgICB7IEFj
Y2Vzc2liaWxpdHlSb2xlOjpUcmVlSXRlbSwgeyAidHJlZSBpdGVtIiwgTl8oInRyZWUgaXRlbSIp
IH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0SXRlbSwgeyAibGlzdCBpdGVtIiwg
Tl8oImxpc3QgaXRlbSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpQYXJhZ3JhcGgs
IHsgInBhcmFncmFwaCIsIE5fKCJwYXJhZ3JhcGgiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5
Um9sZTo6TGFiZWwsIHsgImxhYmVsIiwgTl8oImxhYmVsIikgfSB9LAorICAgIHsgQWNjZXNzaWJp
bGl0eVJvbGU6OkRpdiwgeyAic2VjdGlvbiIsIE5fKCJzZWN0aW9uIikgfSB9LAorICAgIHsgQWNj
ZXNzaWJpbGl0eVJvbGU6OkZvcm0sIHsgImZvcm0iLCBOXygiZm9ybSIpIH0gfSwKKyAgICB7IEFj
Y2Vzc2liaWxpdHlSb2xlOjpTcGluQnV0dG9uLCB7ICJzcGluIGJ1dHRvbiIsIE5fKCJzcGluIGJ1
dHRvbiIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpGb290ZXIsIHsgImZvb3RlciIs
IE5fKCJmb290ZXIiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VG9nZ2xlQnV0dG9u
LCB7ICJ0b2dnbGUgYnV0dG9uIiwgTl8oInRvZ2dsZSBidXR0b24iKSB9IH0sCisgICAgeyBBY2Nl
c3NpYmlsaXR5Um9sZTo6Q2FudmFzLCB7ICJjYW52YXMiLCBOXygiY2FudmFzIikgfSB9LAorICAg
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1Jvb3QsIHsgInBhbmVsIiwgTl8oInBhbmVsIikgfSB9
LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkxlZ2VuZCwgeyAibGFiZWwiLCBOXygibGFiZWwi
KSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6TWF0aEVsZW1lbnQsIHsgIm1hdGgiLCBO
XygibWF0aCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpBdWRpbywgeyAiYXVkaW8i
LCBOXygiYXVkaW8iKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW8sIHsgInZp
ZGVvIiwgTl8oInZpZGVvIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Okhvcml6b250
YWxSdWxlLCB7ICJzZXBhcmF0b3IiLCBOXygic2VwYXJhdG9yIikgfSB9LAorICAgIHsgQWNjZXNz
aWJpbGl0eVJvbGU6OkJsb2NrcXVvdGUsIHsgImJsb2NrIHF1b3RlIiwgTl8oImJsb2NrIHF1b3Rl
IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlN3aXRjaCwgeyAidG9nZ2xlIGJ1dHRv
biIsIE5fKCJ0b2dnbGUgYnV0dG9uIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNl
YXJjaEZpZWxkLCB7ICJlbnRyeSIsIE5fKCJlbnRyeSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxp
dHlSb2xlOjpQcmUsIHsgInNlY3Rpb24iLCBOXygic2VjdGlvbiIpIH0gfSwKKyAgICB7IEFjY2Vz
c2liaWxpdHlSb2xlOjpTVkdUZXh0UGF0aCwgeyAidGV4dCIsIE5fKCJ0ZXh0IikgfSB9LAorICAg
IHsgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1RleHQsIHsgInNlY3Rpb24iLCBOXygic2VjdGlvbiIp
IH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUU3BhbiwgeyAidGV4dCIsIE5fKCJ0
ZXh0IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OklubGluZSwgeyAidGV4dCIsIE5f
KCJ0ZXh0IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Ok1hcmssIHsgIm1hciIsIE5f
KCJtYXJrIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlRpbWUsIHsgInRleHQiLCBO
XygidGV4dCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpGZWVkLCB7ICJwYW5lbCIs
IE5fKCJwYW5lbCIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpGaWd1cmUsIHsgInBh
bmVsIiwgTl8oInBhbmVsIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OkZvb3Rub3Rl
LCB7ICJmb290bm90ZSIsIE5fKCJmb290bm90ZSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlS
b2xlOjpHcmFwaGljc0RvY3VtZW50LCB7ICJkb2N1bWVudCBmcmFtZSIsIE5fKCJkb2N1bWVudCBm
cmFtZSIpIH0gfSwKKyAgICB7IEFjY2Vzc2liaWxpdHlSb2xlOjpHcmFwaGljc09iamVjdCwgeyAi
cGFuZWwiLCBOXygicGFuZWwiKSB9IH0sCisgICAgeyBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JhcGhp
Y3NTeW1ib2wsIHsgImltYWdlIiwgTl8oImltYWdlIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0
eVJvbGU6OkNhcHRpb24sIHsgImNhcHRpb24iLCBOXygiY2FwdGlvbiIpIH0gfSwKKyAgICB7IEFj
Y2Vzc2liaWxpdHlSb2xlOjpEZWxldGlvbiwgeyAiY29udGVudCBkZWxldGlvbiIsIE5fKCJjb250
ZW50IGRlbGV0aW9uIikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6Okluc2VydGlvbiwg
eyAiY29udGVudCBpbnNlcnRpb24iLCBOXygiY29udGVudCBpbnNlcnRpb24iKSB9IH0sCisgICAg
eyBBY2Nlc3NpYmlsaXR5Um9sZTo6U3Vic2NyaXB0LCB7ICJzdWJzY3JpcHQiLCBOXygic3Vic2Ny
aXB0IikgfSB9LAorICAgIHsgQWNjZXNzaWJpbGl0eVJvbGU6OlN1cGVyc2NyaXB0LCB7ICJzdXBl
cnNjcmlwdCIsIE5fKCJzdXBlcnNjcmlwdCIpIH0gfQorfTsKKworY29uc3QgY2hhciogQWNjZXNz
aWJpbGl0eUF0c3BpOjpsb2NhbGl6ZWRSb2xlTmFtZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQor
eworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGVkQXJyYXlNYXAgcm9sZU5hbWVzTWFwIHsgcm9s
ZU5hbWVzIH07CisgICAgaWYgKGF1dG8gZW50cnkgPSByb2xlTmFtZXNNYXAudHJ5R2V0KHJvbGUp
KQorICAgICAgICByZXR1cm4gZW50cnktPmxvY2FsaXplZE5hbWU7CisKKyAgICByZXR1cm4gXygi
dW5rbm93biIpOworfQorCisjZGVmaW5lIElURU1fU0lHTkFUVVJFICIoc28pKHNvKShzbylpaWFz
c3VzYXUiCisjZGVmaW5lIEdFVF9JVEVNU19TSUdOQVRVUkUgImEoIiBJVEVNX1NJR05BVFVSRSAi
KSIKKworR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eUF0c3BpOjpzX2NhY2hlRnVu
Y3Rpb25zID0geworICAgIC8vIG1ldGhvZF9jYWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwg
Y29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1l
dGhvZE5hbWUsIEdWYXJpYW50KiwgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBpbnZvY2F0aW9uLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFk
KCkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0SXRlbXMiKSkgewor
ICAgICAgICAgICAgYXV0byYgYXRzcGkgPSAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eUF0c3Bp
Kj4odXNlckRhdGEpOworICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZB
UklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCIoIiBHRVRfSVRFTVNfU0lHTkFUVVJF
ICIpIikpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRlciwgR19W
QVJJQU5UX1RZUEUoR0VUX0lURU1TX1NJR05BVFVSRSkpOworICAgICAgICAgICAgZm9yIChjb25z
dCBhdXRvKiByb290T2JqZWN0IDogYXRzcGkubV9yb290T2JqZWN0cy5rZXlzKCkpIHsKKyAgICAg
ICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9vcGVuKCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQ
RSgiKCIgSVRFTV9TSUdOQVRVUkUgIikiKSk7CisgICAgICAgICAgICAgICAgcm9vdE9iamVjdC0+
c2VyaWFsaXplKCZidWlsZGVyKTsKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9j
bG9zZSgmYnVpbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG5lZWQg
dG8gY2FsbCB1cGRhdGVCYWNraW5nU3RvcmUoKSBvbiBldmVyeSBvYmplY3QgYmVmb3JlIGNhbGxp
bmcgc2VyaWFsaXplKCkKKyAgICAgICAgICAgIC8vIGFuZCB1cGRhdGluZyB0aGUgYmFja2luZyBz
dG9yZSBjYW4gZGV0YWNoIHRoZSBvYmplY3QgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBjYWNoZS4K
KyAgICAgICAgICAgIGF1dG8gcGF0aHMgPSBjb3B5VG9WZWN0b3IoYXRzcGkubV9jYWNoZS5rZXlz
KCkpOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHdyYXBwZXIgPSBhdHNwaS5tX2NhY2hlLmdldChwYXRoKTsKKyAgICAg
ICAgICAgICAgICB3cmFwcGVyLT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWF0c3BpLm1fY2FjaGUuY29udGFpbnMocGF0aCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX29wZW4oJmJ1aWxk
ZXIsIEdfVkFSSUFOVF9UWVBFKCIoIiBJVEVNX1NJR05BVFVSRSAiKSIpKTsKKyAgICAgICAgICAg
ICAgICB3cmFwcGVyLT5zZXJpYWxpemUoJmJ1aWxkZXIpOworICAgICAgICAgICAgICAgIGdfdmFy
aWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGdfdmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKKyAgICAgICAgICAgIGdfZGJ1c19t
ZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X2J1aWxk
ZXJfZW5kKCZidWlsZGVyKSk7CisgICAgICAgIH0KKyAgICB9LAorICAgIC8vIGdldF9wcm9wZXJ0
eQorICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBj
b25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yLCBn
cG9pbnRlcikgLT4gR1ZhcmlhbnQqIHsKKyAgICAgICAgZ19zZXRfZXJyb3IoZXJyb3IsIEdfSU9f
RVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwgIlVua25vd24gcHJvcGVydHkgJyVzJyIs
IHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0sCisgICAgLy8g
c2V0X3Byb3BlcnR5LAorICAgIG51bGxwdHIsCisgICAgLy8gcGFkZGluZworICAgIG51bGxwdHIK
K307CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjplbnN1cmVDYWNoZSgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jYWNoZUlEIHx8ICFtX2Nv
bm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2FjaGVJRCA9IGdfZGJ1c19jb25u
ZWN0aW9uX3JlZ2lzdGVyX29iamVjdChtX2Nvbm5lY3Rpb24uZ2V0KCksICIvb3JnL2ExMXkvYXRz
cGkvY2FjaGUiLCBjb25zdF9jYXN0PEdEQnVzSW50ZXJmYWNlSW5mbyo+KCZ3ZWJraXRfY2FjaGVf
aW50ZXJmYWNlKSwgJnNfY2FjaGVGdW5jdGlvbnMsIHRoaXMsIG51bGxwdHIsIG51bGxwdHIpOwor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6YWRkQWNjZXNzaWJsZShBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0LCBjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgUkVM
RUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2NhY2hlLmFkZChwYXRoLCAm
YXRzcGlPYmplY3QpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEFkZEFjY2Vzc2libGUgbmVlZHMgdG8gYmUgZW1pdHRlZCBhZnRlciBD
aGlsZHJlbkNoYW5nZWQuCisgICAgUnVuTG9vcDo6Y3VycmVudCgpLmRpc3BhdGNoKFt0aGlzLCBh
dHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIHBhdGggPSBwYXRoLmlzb2xhdGVkQ29w
eSgpXSB7CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICAg
ICAgaWYgKCFtX2NhY2hlLmNvbnRhaW5zKHBhdGgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5UX0JVSUxERVJfSU5JVChH
X1ZBUklBTlRfVFlQRSgiKCIgSVRFTV9TSUdOQVRVUkUgIikiKSk7CisgICAgICAgIGF0c3BpT2Jq
ZWN0LT5zZXJpYWxpemUoJmJ1aWxkZXIpOworICAgICAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0
X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsICIvb3JnL2ExMXkvYXRzcGkvY2Fj
aGUiLCAib3JnLmExMXkuYXRzcGkuQ2FjaGUiLCAiQWRkQWNjZXNzaWJsZSIsCisgICAgICAgICAg
ICBnX3ZhcmlhbnRfbmV3KCIoQCgiIElURU1fU0lHTkFUVVJFICIpKSIsIGdfdmFyaWFudF9idWls
ZGVyX2VuZCgmYnVpbGRlcikpLCBudWxscHRyKTsKKyAgICB9KTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5QXRzcGk6OnJlbW92ZUFjY2Vzc2libGUoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBh
dHNwaU9iamVjdCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAg
IGNvbnN0IGF1dG8mIHBhdGggPSBhdHNwaU9iamVjdC5wYXRoKCk7CisgICAgbV9jYWNoZS5yZW1v
dmUocGF0aCk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9u
LmdldCgpLCBudWxscHRyLCAiL29yZy9hMTF5L2F0c3BpL2NhY2hlIiwgIm9yZy5hMTF5LmF0c3Bp
LkNhY2hlIiwgIlJlbW92ZUFjY2Vzc2libGUiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoKHNv
KSkiLCB1bmlxdWVOYW1lKCksIHBhdGgudXRmOCgpLmRhdGEoKSksIG51bGxwdHIpOworfQorCitu
YW1lc3BhY2UgQWNjZXNzaWJpbGl0eSB7CisKK1BsYXRmb3JtUm9sZU1hcCBjcmVhdGVQbGF0Zm9y
bVJvbGVNYXAoKQoreworICAgIFBsYXRmb3JtUm9sZU1hcCByb2xlTWFwOworICAgIGZvciAoY29u
c3QgYXV0byYgZW50cnkgOiByb2xlTmFtZXMpCisgICAgICAgIHJvbGVNYXAuYWRkKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihlbnRyeS5maXJzdCksIFN0cmluZzo6ZnJvbVVURjgoZW50cnkuc2Vjb25k
Lm5hbWUpKTsKKyAgICByZXR1cm4gcm9sZU1hcDsKK30KKworfSAvLyBuYW1lc3BhY2UgQWNjZXNz
aWJpbGl0eQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQUND
RVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmgKaW5kZXggMWYwOGVmY2VhNWE5
Li5jZTM3ZjkzZTM4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuaApAQCAtMzAsMTAgKzMwLDEyIEBACiB0eXBl
ZGVmIHN0cnVjdCBfR0RCdXNDb25uZWN0aW9uIEdEQnVzQ29ubmVjdGlvbjsKIHR5cGVkZWYgc3Ry
dWN0IF9HREJ1c0ludGVyZmFjZUluZm8gR0RCdXNJbnRlcmZhY2VJbmZvOwogdHlwZWRlZiBzdHJ1
Y3QgX0dEQnVzSW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNlVlRhYmxlOwordHlwZWRlZiBz
dHJ1Y3QgX0dWYXJpYW50IEdWYXJpYW50OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOwor
ZW51bSBjbGFzcyBBY2Nlc3NpYmlsaXR5Um9sZTsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eUF0c3Bp
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTQ1LDExICs0NywzMCBAQCBwdWJs
aWM6CiAgICAgR1ZhcmlhbnQqIG51bGxSZWZlcmVuY2UoKSBjb25zdDsKIAogICAgIHZvaWQgcmVn
aXN0ZXJSb290KEFjY2Vzc2liaWxpdHlSb290QXRzcGkmLCBWZWN0b3I8c3RkOjpwYWlyPEdEQnVz
SW50ZXJmYWNlSW5mbyosIEdEQnVzSW50ZXJmYWNlVlRhYmxlKj4+JiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpOworICAgIHZvaWQgdW5yZWdpc3RlclJvb3QoQWNj
ZXNzaWJpbGl0eVJvb3RBdHNwaSYpOworICAgIFN0cmluZyByZWdpc3Rlck9iamVjdChBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmLCBWZWN0b3I8c3RkOjpwYWlyPEdEQnVzSW50ZXJmYWNlSW5mbyos
IEdEQnVzSW50ZXJmYWNlVlRhYmxlKj4+JiYpOworICAgIHZvaWQgdW5yZWdpc3Rlck9iamVjdChB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmKTsKKworICAgIGVudW0gY2xhc3MgQ2hpbGRyZW5DaGFu
Z2VkIHsgQWRkZWQsIFJlbW92ZWQgfTsKKyAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmLCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmLCBDaGlsZHJlbkNo
YW5nZWQpOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
JiwgY29uc3QgY2hhciosIGJvb2wpOworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGxvY2FsaXpl
ZFJvbGVOYW1lKEFjY2Vzc2liaWxpdHlSb2xlKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGVuc3Vy
ZUNhY2hlKCk7CisgICAgdm9pZCBhZGRBY2Nlc3NpYmxlKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVtb3ZlQWNjZXNzaWJsZShBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkmKTsKKworICAgIHN0YXRpYyBHREJ1c0ludGVyZmFjZVZUYWJsZSBzX2Nh
Y2hlRnVuY3Rpb25zOworCiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9xdWV1ZTsKICAgICBHUmVmUHRy
PEdEQnVzQ29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIEhhc2hNYXA8QWNjZXNzaWJpbGl0
eVJvb3RBdHNwaSosIFZlY3Rvcjx1bnNpZ25lZCwgMj4+IG1fcm9vdE9iamVjdHM7CisgICAgSGFz
aE1hcDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqLCBWZWN0b3I8dW5zaWduZWQsIDIwPj4gbV9h
dHNwaU9iamVjdHM7CisgICAgdW5zaWduZWQgbV9jYWNoZUlEIHsgMCB9OworICAgIEhhc2hNYXA8
U3RyaW5nLCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBtX2NhY2hlOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZWE3NjI3YjllZTUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGlFbnVt
cy5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQ
SSkKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBBdHNwaSB7CisKK2VudW0gUm9sZSB7
CisgICAgSW52YWxpZFJvbGUsCisgICAgQWNjZWxlcmF0b3JMYWJlbCwKKyAgICBBbGVydCwKKyAg
ICBBbmltYXRpb24sCisgICAgQXJyb3csCisgICAgQ2FsZW5kYXIsCisgICAgQ2FudmFzLAorICAg
IENoZWNrQm94LAorICAgIENoZWNrTWVudUl0ZW0sCisgICAgQ29sb3JDaG9vc2VyLAorICAgIENv
bHVtbkhlYWRlciwKKyAgICBDb21ib0JveCwKKyAgICBEYXRlRWRpdG9yLAorICAgIERlc2t0b3BJ
Y29uLAorICAgIERlc2t0b3BGcmFtZSwKKyAgICBEaWFsLAorICAgIERpYWxvZywKKyAgICBEaXJl
Y3RvcnlQYW5lLAorICAgIERyYXdpbmdBcmVhLAorICAgIEZpbGVDaG9vc2VyLAorICAgIEZpbGxl
ciwKKyAgICBGb2N1c1RyYXZlcnNhYmxlLAorICAgIEZvbnRDaG9vc2VyLAorICAgIEZyYW1lLAor
ICAgIEdsYXNzUGFuZSwKKyAgICBIdG1sQ29udGFpbmVyLAorICAgIEljb24sCisgICAgSW1hZ2Us
CisgICAgSW50ZXJuYWxGcmFtZSwKKyAgICBMYWJlbCwKKyAgICBMYXllcmVkUGFuZSwKKyAgICBM
aXN0LAorICAgIExpc3RJdGVtLAorICAgIE1lbnUsCisgICAgTWVudUJhciwKKyAgICBNZW51SXRl
bSwKKyAgICBPcHRpb25QYW5lLAorICAgIFBhZ2VUYWIsCisgICAgUGFnZVRhYkxpc3QsCisgICAg
UGFuZWwsCisgICAgUGFzc3dvcmRUZXh0LAorICAgIFBvcHVwTWVudSwKKyAgICBQcm9ncmVzc0Jh
ciwKKyAgICBQdXNoQnV0dG9uLAorICAgIFJhZGlvQnV0dG9uLAorICAgIFJhZGlvTWVudUl0ZW0s
CisgICAgUm9vdFBhbmUsCisgICAgUm93SGVhZGVyLAorICAgIFNjcm9sbEJhciwKKyAgICBTY3Jv
bGxQYW5lLAorICAgIFNlcGFyYXRvciwKKyAgICBTbGlkZXIsCisgICAgU3BpbkJ1dHRvbiwKKyAg
ICBTcGxpdFBhbmUsCisgICAgU3RhdHVzQmFyLAorICAgIFRhYmxlLAorICAgIFRhYmxlQ2VsbCwK
KyAgICBUYWJsZUNvbHVtbkhlYWRlciwKKyAgICBUYWJsZVJvd0hlYWRlciwKKyAgICBUZWFyb2Zm
TWVudUl0ZW0sCisgICAgVGVybWluYWwsCisgICAgVGV4dCwKKyAgICBUb2dnbGVCdXR0b24sCisg
ICAgVG9vbEJhciwKKyAgICBUb29sVGlwLAorICAgIFRyZWUsCisgICAgVHJlZVRhYmxlLAorICAg
IFVua25vd24sCisgICAgVmlld3BvcnQsCisgICAgV2luZG93LAorICAgIEV4dGVuZGVkLAorICAg
IEhlYWRlciwKKyAgICBGb290ZXIsCisgICAgUGFyYWdyYXBoLAorICAgIFJ1bGVyLAorICAgIEFw
cGxpY2F0aW9uLAorICAgIEF1dG9jb21wbGV0ZSwKKyAgICBFZGl0YmFyLAorICAgIEVtYmVkZGVk
LAorICAgIEVudHJ5LAorICAgIENoYXJ0LAorICAgIENhcHRpb24sCisgICAgRG9jdW1lbnRGcmFt
ZSwKKyAgICBIZWFkaW5nLAorICAgIFBhZ2UsCisgICAgU2VjdGlvbiwKKyAgICBSZWR1bmRhbnRP
YmplY3QsCisgICAgRm9ybSwKKyAgICBMaW5rLAorICAgIElucHV0TWV0aG9kV2luZG93LAorICAg
IFRhYmxlUm93LAorICAgIFRyZWVJdGVtLAorICAgIERvY3VtZW50U3ByZWFkc2hlZXQsCisgICAg
RG9jdW1lbnRQcmVzZW50YXRpb24sCisgICAgRG9jdW1lbnRUZXh0LAorICAgIERvY3VtZW50V2Vi
LAorICAgIERvY3VtZW50RW1haWwsCisgICAgQ29tbWVudCwKKyAgICBMaXN0Qm94LAorICAgIEdy
b3VwaW5nLAorICAgIEltYWdlTWFwLAorICAgIE5vdGlmaWNhdGlvbiwKKyAgICBJbmZvQmFyLAor
ICAgIExldmVsQmFyLAorICAgIFRpdGxlQmFyLAorICAgIEJsb2NrUXVvdGUsCisgICAgQXVkaW8s
CisgICAgVmlkZW8sCisgICAgRGVmaW5pdGlvbiwKKyAgICBBcnRpY2xlLAorICAgIExhbmRtYXJr
LAorICAgIExvZywKKyAgICBNYXJxdWVlLAorICAgIE1hdGgsCisgICAgUmF0aW5nLAorICAgIFRp
bWVyLAorICAgIFN0YXRpYywKKyAgICBNYXRoRnJhY3Rpb24sCisgICAgTWF0aFJvb3QsCisgICAg
U3Vic2NyaXB0LAorICAgIFN1cGVyc2NyaXB0LAorICAgIERlc2NyaXB0aW9uTGlzdCwKKyAgICBE
ZXNjcmlwdGlvblRlcm0sCisgICAgRGVzY3JpcHRpb25WYWx1ZSwKKyAgICBGb290bm90ZSwKKyAg
ICBDb250ZW50RGVsZXRpb24sCisgICAgQ29udGVudEluc2VydGlvbiwKKyAgICBNYXJrLAorICAg
IFN1Z2dlc3Rpb24sCisgICAgTGFzdERlZmluZWRSb2xlLAorfTsKKworZW51bSBTdGF0ZSB7Cisg
ICAgSW52YWxpZFN0YXRlLAorICAgIEFjdGl2ZSwKKyAgICBBcm1lZCwKKyAgICBCdXN5LAorICAg
IENoZWNrZWQsCisgICAgQ29sbGFwc2VkLAorICAgIERlZnVuY3QsCisgICAgRWRpdGFibGUsCisg
ICAgRW5hYmxlZCwKKyAgICBFeHBhbmRhYmxlLAorICAgIEV4cGFuZGVkLAorICAgIEZvY3VzYWJs
ZSwKKyAgICBGb2N1c2VkLAorICAgIEhhc1Rvb2x0aXAsCisgICAgSG9yaXpvbnRhbCwKKyAgICBJ
Y29uaWZpZWQsCisgICAgTW9kYWwsCisgICAgTXVsdGlMaW5lLAorICAgIE11bHRpc2VsZWN0YWJs
ZSwKKyAgICBPcGFxdWUsCisgICAgUHJlc3NlZCwKKyAgICBSZXNpemFibGUsCisgICAgU2VsZWN0
YWJsZSwKKyAgICBTZWxlY3RlZCwKKyAgICBTZW5zaXRpdmUsCisgICAgU2hvd2luZywKKyAgICBT
aW5nbGVMaW5lLAorICAgIFN0YWxlLAorICAgIFRyYW5zaWVudCwKKyAgICBWZXJ0aWNhbCwKKyAg
ICBWaXNpYmxlLAorICAgIE1hbmFnZXNEZXNjZW5kYW50cywKKyAgICBJbmRldGVybWluYXRlLAor
ICAgIFJlcXVpcmVkLAorICAgIFRydW5jYXRlZCwKKyAgICBBbmltYXRlZCwKKyAgICBJbnZhbGlk
RW50cnksCisgICAgU3VwcG9ydHNBdXRvY29tcGxldGlvbiwKKyAgICBTZWxlY3RhYmxlVGV4dCwK
KyAgICBJc0RlZmF1bHQsCisgICAgVmlzaXRlZCwKKyAgICBDaGVja2FibGUsCisgICAgSGFzUG9w
dXAsCisgICAgUmVhZE9ubHksCisgICAgTGFzdERlZmluZWRTdGF0ZSwKK307CisKK2VudW0gUmVs
YXRpb24geworICAgIE51bGwsCisgICAgTGFiZWxGb3IsCisgICAgTGFiZWxsZWRCeSwKKyAgICBD
b250cm9sbGVyRm9yLAorICAgIENvbnRyb2xsZWRCeSwKKyAgICBNZW1iZXJPZiwKKyAgICBUb29s
dGlwRm9yLAorICAgIE5vZGVDaGlsZE9mLAorICAgIE5vZGVQYXJlbnRPZiwKKyAgICBFeHRlbmRl
ZFJlbGF0aW9uLAorICAgIEZsb3dzVG8sCisgICAgRmxvd3NGcm9tLAorICAgIFN1YndpbmRvd09m
LAorICAgIEVtYmVkcywKKyAgICBFbWJlZGRlZEJ5LAorICAgIFBvdXBGb3IsCisgICAgUGFyZW50
V2luZG93T2YsCisgICAgRGVzY3JpcHRpb25Gb3IsCisgICAgRGVzY3JpYmVkQnksCisgICAgRGV0
YWlscywKKyAgICBEZXRhaWxzRm9yLAorICAgIEVycm9yTWVzc2FnZSwKKyAgICBFcnJvckZvciwK
KyAgICBMYXN0RGVmaW5lZFJlbGF0aW9uLAorfTsKKworfSAvLyBuYW1lc3BhY2UgQXRzcGkKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAm
JiBVU0UoQVRTUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggZDU4YjhiMDY2
NTU2Li42OTgxNzQxNzQ0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAgLTIx
LDcgKzIxLDE1IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgiCiAKICNp
ZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlBdHNwaUVudW1zLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlSb290QXRzcGkuaCIKKyNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVuZGVyQW5jZXN0b3JJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9VVUlELmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzAsMTIgKzM4LDExMTYgQEAgUmVmPEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaT4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjcmVhdGUoQVhDb3JlT2Jq
ZWN0KiBjb3IKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkoY29yZU9iamVjdCkpOwogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaShBWENvcmVPYmplY3QqKQorT3B0aW9uU2V0PEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6SW50ZXJmYWNlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmludGVyZmFj
ZXNGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQogeworICAgIE9wdGlvblNldDxJ
bnRlcmZhY2U+IGludGVyZmFjZXMgPSB7IEludGVyZmFjZTo6QWNjZXNzaWJsZSB9OworCisgICAg
cmV0dXJuIGludGVyZmFjZXM7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6QWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpKEFYQ29yZU9iamVjdCogY29yZU9iamVjdCkKKyAgICA6IG1fY29y
ZU9iamVjdChjb3JlT2JqZWN0KQorICAgICwgbV9pbnRlcmZhY2VzKGludGVyZmFjZXNGb3JPYmpl
Y3QoKm1fY29yZU9iamVjdCkpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXR0YWNoKEFYQ29yZU9iamVj
dCogYXhPYmplY3QpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXM8QVhJc29sYXRlZE9iamVjdD4o
KmF4T2JqZWN0KSk7CisgICAgbV9heE9iamVjdCA9IGF4T2JqZWN0OworfQorCit2b2lkIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6ZGV0YWNoKCkKK3sKKyAgICBtX2F4T2JqZWN0ID0gbnVsbHB0
cjsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNhY2hlRGVzdHJveWVkKCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9jb3JlT2JqZWN0
ID0gbnVsbHB0cjsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcm9vdCgpLT5hdHNwaSgpLnVucmVnaXN0ZXJPYmplY3QoKnRoaXMpOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZWxlbWVudERlc3Ryb3llZCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fY29yZU9iamVjdCA9IG51
bGxwdHI7CisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX3BhcmVudCAmJiAqbV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LnZhbHVl
KCktPmNoaWxkUmVtb3ZlZCgqdGhpcyk7CisKKyAgICByb290KCktPmF0c3BpKCkudW5yZWdpc3Rl
ck9iamVjdCgqdGhpcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBhdHNwaVJvbGUoQWNjZXNzaWJp
bGl0eVJvbGUgcm9sZSkKK3sKKyAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpBbm5vdGF0aW9uOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxp
Y2F0aW9uQWxlcnQ6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Tm90aWZpY2F0aW9uOwor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uQWxlcnREaWFsb2c6CisgICAg
ICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QWxlcnQ7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6QXBwbGljYXRpb25EaWFsb2c6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6RGlhbG9n
OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uU3RhdHVzOgorICAgICAg
ICByZXR1cm4gQXRzcGk6OlJvbGU6OlN0YXR1c0JhcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpVbmtub3duOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlVua25vd247CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXVkaW86CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6QXVkaW87CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW86CisgICAgICAgIHJl
dHVybiBBdHNwaTo6Um9sZTo6VmlkZW87CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0
dG9uOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlB1c2hCdXR0b247CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6U3dpdGNoOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRv
Z2dsZUJ1dHRvbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUb2dnbGVCdXR0b247Cisg
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UmFkaW9CdXR0b246CisgICAgICAgIHJldHVybiBB
dHNwaTo6Um9sZTo6UmFkaW9CdXR0b247CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2hl
Y2tCb3g6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q2hlY2tCb3g7CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6U2xpZGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlNs
aWRlcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJHcm91cDoKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpUYWJMaXN0OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlBh
Z2VUYWJMaXN0OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRGaWVsZDoKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpTZWFyY2hGaWVsZDoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpFbnRyeTsKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0OgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OlN0YXRpYzsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpPdXRsaW5lOgor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRyZWU6CisgICAgICAgIHJldHVybiBBdHNwaTo6
Um9sZTo6VHJlZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVlSXRlbToKKyAgICAg
ICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUcmVlSXRlbTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpNZW51QmFyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1lbnVCYXI7CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUxpc3RQb3B1cDoKKyAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpNZW51OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1lbnU7CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUxpc3RPcHRpb246CisgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6TWVudUl0ZW06CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUJ1
dHRvbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpNZW51SXRlbTsKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbUNoZWNrYm94OgorICAgICAgICByZXR1cm4gQXRzcGk6
OlJvbGU6OkNoZWNrTWVudUl0ZW07CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWVudUl0
ZW1SYWRpbzoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpSYWRpb01lbnVJdGVtOworICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNvbHVtbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpS
b2xlOjpVbmtub3duOyAvLyBUaGVyZSdzIG5vIFRhYmxlQ29sdW1uIGluIGF0c3BpLgorICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OlJvdzoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpU
YWJsZVJvdzsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUb29sYmFyOgorICAgICAgICBy
ZXR1cm4gQXRzcGk6OlJvbGU6OlRvb2xCYXI7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6
TWV0ZXI6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6TGV2ZWxCYXI7CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6QnVzeUluZGljYXRvcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpQcm9ncmVzc0luZGljYXRvcjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQcm9n
cmVzc0JhcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpXaW5kb3c6CisgICAgICAgIHJl
dHVybiBBdHNwaTo6Um9sZTo6V2luZG93OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlBv
cFVwQnV0dG9uOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNvbWJvQm94OgorICAgICAg
ICByZXR1cm4gQXRzcGk6OlJvbGU6OkNvbWJvQm94OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJv
bGU6OlNwbGl0R3JvdXA6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6U3BsaXRQYW5lOwor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0dGVyOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OlNlcGFyYXRvcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDb2xvcldl
bGw6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6UHVzaEJ1dHRvbjsKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpMaXN0OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Okxpc3Q7
CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2Nyb2xsQmFyOgorICAgICAgICByZXR1cm4g
QXRzcGk6OlJvbGU6OlNjcm9sbEJhcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTY3Jv
bGxBcmVhOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRhYlBhbmVsOgorICAgICAgICBy
ZXR1cm4gQXRzcGk6OlJvbGU6OlNjcm9sbFBhbmU7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6R3JpZDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUYWJsZToKKyAgICAgICAgcmV0
dXJuIEF0c3BpOjpSb2xlOjpUYWJsZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVl
R3JpZDoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUcmVlVGFibGU7CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb246CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6QXBwbGljYXRpb247CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25H
cm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGZWVkOgorICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OkZpZ3VyZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcmFwaGlj
c09iamVjdDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcm91cDoKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpSYWRpb0dyb3VwOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OlNWR1Jvb3Q6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6UGFuZWw7CisgICAgY2FzZSBB
Y2Nlc3NpYmlsaXR5Um9sZTo6Um93SGVhZGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OlJvd0hlYWRlcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDb2x1bW5IZWFkZXI6Cisg
ICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q29sdW1uSGVhZGVyOworICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OkNhcHRpb246CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q2FwdGlv
bjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDZWxsOgorICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkdyaWRDZWxsOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlRhYmxlQ2Vs
bDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5rOgorICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OldlYkNvcmVMaW5rOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdl
TWFwTGluazoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpMaW5rOworICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OkltYWdlTWFwOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Oklt
YWdlTWFwOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkdyYXBoaWNzU3ltYm9sOgorICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkltYWdlOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJv
bGU6OkltYWdlOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RNYXJrZXI6CisgICAg
ICAgIHJldHVybiBBdHNwaTo6Um9sZTo6VGV4dDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpEb2N1bWVudEFydGljbGU6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6QXJ0aWNsZTsK
KyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudDoKKyAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpHcmFwaGljc0RvY3VtZW50OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OkRvY3VtZW50RnJhbWU7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnROb3Rl
OgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkNvbW1lbnQ7CisgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6SGVhZGluZzoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpIZWFkaW5n
OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3g6CisgICAgICAgIHJldHVybiBB
dHNwaTo6Um9sZTo6TGlzdEJveDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0SXRl
bToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94T3B0aW9uOgorICAgICAgICBy
ZXR1cm4gQXRzcGk6OlJvbGU6Okxpc3RJdGVtOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OlBhcmFncmFwaDoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQYXJhZ3JhcGg7CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFiZWw6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TGVnZW5kOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkxhYmVsOworICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OkJsb2NrcXVvdGU6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6QmxvY2tRdW90ZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGb290bm90ZToKKyAg
ICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpGb290bm90ZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpBcHBsaWNhdGlvblRleHRHcm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpEaXY6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJlOgorICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OlNWR1RleHQ6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEdy
b3VwOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlNlY3Rpb247CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6Rm9vdGVyOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkZvb3Rl
cjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGb3JtOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OkZvcm07CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2FudmFzOgorICAg
ICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkNhbnZhczsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpIb3Jpem9udGFsUnVsZToKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpTZXBhcmF0
b3I7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3BpbkJ1dHRvbjoKKyAgICAgICAgcmV0
dXJuIEF0c3BpOjpSb2xlOjpTcGluQnV0dG9uOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OlRhYjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpQYWdlVGFiOworICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OlVzZXJJbnRlcmZhY2VUb29sdGlwOgorICAgICAgICByZXR1cm4gQXRz
cGk6OlJvbGU6OlRvb2xUaXA7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJlYToK
KyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpEb2N1bWVudFdlYjsKKyAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpXZWJBcHBsaWNhdGlvbjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xl
OjpFbWJlZGRlZDsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvbkxvZzoK
KyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpMb2c7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6QXBwbGljYXRpb25NYXJxdWVlOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1h
cnF1ZWU7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25UaW1lcjoKKyAg
ICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUaW1lcjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpEZWZpbml0aW9uOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkRlZmluaXRpb247
CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1lbnRNYXRoOgorICAgICAgICByZXR1
cm4gQXRzcGk6OlJvbGU6Ok1hdGg7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TWF0aEVs
ZW1lbnQ6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6TWF0aEZyYWN0aW9uOworICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrQmFubmVyOgorICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkxhbmRtYXJrQ29tcGxlbWVudGFyeToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpMYW5kbWFya0NvbnRlbnRJbmZvOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxh
bmRtYXJrRG9jUmVnaW9uOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrTWFp
bjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb246CisgICAg
Y2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtSZWdpb246CisgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6TGFuZG1hcmtTZWFyY2g6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6
TGFuZG1hcms7CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0Ogor
ICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OkRlc2NyaXB0aW9uTGlzdDsKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpUZXJtOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRlc2Ny
aXB0aW9uTGlzdFRlcm06CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6RGVzY3JpcHRpb25U
ZXJtOworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRlc2NyaXB0aW9uTGlzdERldGFpbDoK
KyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpEZXNjcmlwdGlvblZhbHVlOworICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6OkRlbGV0aW9uOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OkNvbnRlbnREZWxldGlvbjsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpJbnNlcnRpb246
CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6Q29udGVudEluc2VydGlvbjsKKyAgICBjYXNl
IEFjY2Vzc2liaWxpdHlSb2xlOjpTdWJzY3JpcHQ6CisgICAgICAgIHJldHVybiBBdHNwaTo6Um9s
ZTo6U3Vic2NyaXB0OworICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN1cGVyc2NyaXB0Ogor
ICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlN1cGVyc2NyaXB0OworICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OklubGluZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUZXh0
UGF0aDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUU3BhbjoKKyAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpUaW1lOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlN0YXRp
YzsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEaXJlY3Rvcnk6CisgICAgICAgIHJldHVy
biBBdHNwaTo6Um9sZTo6RGlyZWN0b3J5UGFuZTsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpNYXJrOgorICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1hcms7CisgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Um9sZTo6QnJvd3NlcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEZXRh
aWxzOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRpc2Nsb3N1cmVUcmlhbmdsZToKKyAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEcmF3ZXI6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6RWRpdGFibGVUZXh0OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okdyb3dBcmVh
OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkhlbHBUYWc6CisgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6SWdub3JlZDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpJbmNyZW1l
bnRvcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNYXR0ZToKKyAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpQcmVzZW50YXRpb25hbDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xl
OjpSb3dHcm91cDoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSdWJ5QmFzZToKKyAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSdWJ5QmxvY2s6CisgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6UnVieUlubGluZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSdWJ5UnVuOgor
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlJ1YnlUZXh0OgorICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OlJ1bGVyOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlJ1bGVyTWFya2Vy
OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNoZWV0OgorICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OlNsaWRlclRodW1iOgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNwaW5C
dXR0b25QYXJ0OgorICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN1bW1hcnk6CisgICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3lzdGVtV2lkZToKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpUYWJsZUhlYWRlckNvbnRhaW5lcjoKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpW
YWx1ZUluZGljYXRvcjoKKyAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpVbmtub3duOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0dEQnVzSW50ZXJm
YWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25z
ID0geworICAgIC8vIG1ldGhvZF9jYWxsCisgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3Qg
Z2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5h
bWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRp
b24sIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CisgICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CisgICAgICAgIGF0c3BpT2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiR2V0Um9sZSIpKQorICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9u
X3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBhdHNwaU9iamVj
dC0+cm9sZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdl
dFJvbGVOYW1lIikpCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJu
X3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsIGF0c3BpT2JqZWN0LT5yb2xl
TmFtZSgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiR2V0TG9jYWxpemVkUm9sZU5hbWUiKSkKKyAgICAgICAgICAgIGdfZGJ1c19tZXRo
b2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHMp
IiwgYXRzcGlPYmplY3QtPmxvY2FsaXplZFJvbGVOYW1lKCkpKTsKKyAgICAgICAgZWxzZSBpZiAo
IWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0U3RhdGUiKSkgeworICAgICAgICAgICAgR1Zhcmlh
bnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBF
KCIoYXUpIikpOworCisgICAgICAgICAgICBhdXRvIHN0YXRlcyA9IGF0c3BpT2JqZWN0LT5zdGF0
ZSgpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRlciwgR19WQVJJ
QU5UX1RZUEUoImF1IikpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZidWls
ZGVyLCAidSIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGF0ZXMgJiAweGZmZmZmZmZmKSk7Cisg
ICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJmJ1aWxkZXIsICJ1Iiwgc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHN0YXRlcyA+PiAzMikpOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxk
ZXJfY2xvc2UoJmJ1aWxkZXIpOworCisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRp
b25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRl
cikpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEF0dHJp
YnV0ZXMiKSkgeworICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklB
TlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCIoYXtzc30pIikpOworCisgICAgICAgICAg
ICBnX3ZhcmlhbnRfYnVpbGRlcl9vcGVuKCZidWlsZGVyLCBHX1ZBUklBTlRfVFlQRSgiYXtzc30i
KSk7CisgICAgICAgICAgICBhdHNwaU9iamVjdC0+YnVpbGRBdHRyaWJ1dGVzKCZidWlsZGVyKTsK
KyAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKKworICAgICAg
ICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBn
X3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1aWxkZXIpKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19z
dHJjbXAwKG1ldGhvZE5hbWUsICJHZXRBcHBsaWNhdGlvbiIpKQorICAgICAgICAgICAgZ19kYnVz
X21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3
KCIoQChzbykpIiwgYXRzcGlPYmplY3QtPnJvb3QoKS0+YXBwbGljYXRpb25SZWZlcmVuY2UoKSkp
OworICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRDaGlsZEF0SW5k
ZXgiKSkgeworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICAgICAgZ192YXJpYW50X2dl
dChwYXJhbWV0ZXJzLCAiKGkpIiwgJmluZGV4KTsKKyAgICAgICAgICAgIGF1dG8qIHdyYXBwZXIg
PSBpbmRleCA+PSAwID8gYXRzcGlPYmplY3QtPmNoaWxkQXQoaW5kZXgpIDogbnVsbHB0cjsKKyAg
ICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKEAoc28pKSIsIHdyYXBwZXIgPyB3cmFwcGVyLT5yZWZlcmVuY2Uo
KSA6IGF0c3BpT2JqZWN0LT5yb290KCktPmF0c3BpKCkubnVsbFJlZmVyZW5jZSgpKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hpbGRyZW4iKSkgewor
ICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9J
TklUKEdfVkFSSUFOVF9UWVBFKCJhKHNvKSIpKTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgd3JhcHBlciA6IGF0c3BpT2JqZWN0LT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIGdf
dmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIkAoc28pIiwgd3JhcHBlci0+cmVmZXJlbmNl
KCkpOworICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShp
bnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYShzbykpIiwgJmJ1aWxkZXIpKTsKKyAgICAgICAg
fSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRJbmRleEluUGFyZW50IikpIHsK
KyAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2Nh
dGlvbiwgZ192YXJpYW50X25ldygiKGkpIiwgYXRzcGlPYmplY3QtPmluZGV4SW5QYXJlbnQoKSkp
OworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldFJlbGF0aW9u
U2V0IikpIHsKKyAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5U
X0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYSh1YShzbykpIikpOworICAgICAgICAgICAg
YXRzcGlPYmplY3QtPmJ1aWxkUmVsYXRpb25TZXQoJmJ1aWxkZXIpOworICAgICAgICAgICAgZ19k
YnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRf
bmV3KCIoYSh1YShzbykpKSIsICZidWlsZGVyKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3Ry
Y21wMChtZXRob2ROYW1lLCAiR2V0SW50ZXJmYWNlcyIpKSB7CisgICAgICAgICAgICBHVmFyaWFu
dEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUo
ImFzIikpOworICAgICAgICAgICAgYXRzcGlPYmplY3QtPmJ1aWxkSW50ZXJmYWNlcygmYnVpbGRl
cik7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGlu
dm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihhcykiLCAmYnVpbGRlcikpOworICAgICAgICB9Cisg
ICAgfSwKKyAgICAvLyBnZXRfcHJvcGVydHkKKyAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogcHJvcGVy
dHlOYW1lLCBHRXJyb3IqKiBlcnJvciwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdWYXJpYW50KiB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGF1dG8g
YXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Kj4odXNlckRhdGEpIH07CisgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUo
KTsKKworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJOYW1lIikpCisgICAg
ICAgICAgICByZXR1cm4gZ192YXJpYW50X25ld19zdHJpbmcoYXRzcGlPYmplY3QtPm5hbWUoKS5k
YXRhKCkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJEZXNjcmlwdGlv
biIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfc3RyaW5nKGF0c3BpT2JqZWN0
LT5kZXNjcmlwdGlvbigpLmRhdGEoKSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5
TmFtZSwgIkxvY2FsZSIpKQorICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfc3RyaW5n
KHNldGxvY2FsZShMQ19NRVNTQUdFUywgbnVsbHB0cikpOworICAgICAgICBpZiAoIWdfc3RyY21w
MChwcm9wZXJ0eU5hbWUsICJBY2Nlc3NpYmxlSWQiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3Zh
cmlhbnRfbmV3X3N0cmluZyhhdHNwaU9iamVjdC0+bV9heE9iamVjdCA/IFN0cmluZzo6bnVtYmVy
KGF0c3BpT2JqZWN0LT5tX2F4T2JqZWN0LT5vYmplY3RJRCgpKS51dGY4KCkuZGF0YSgpIDogIiIp
OworICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJQYXJlbnQiKSkKKyAgICAg
ICAgICAgIHJldHVybiBhdHNwaU9iamVjdC0+cGFyZW50UmVmZXJlbmNlKCk7CisgICAgICAgIGlm
ICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIkNoaWxkQ291bnQiKSkKKyAgICAgICAgICAgIHJl
dHVybiBnX3ZhcmlhbnRfbmV3X2ludDMyKGF0c3BpT2JqZWN0LT5jaGlsZENvdW50KCkpOworCisg
ICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQ
T1JURUQsICJVbmtub3duIHByb3BlcnR5ICclcyciLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9LAorICAgIC8vIHNldF9wcm9wZXJ0eSwKKyAgICBudWxscHRy
LAorICAgIC8vIHBhZGRpbmcKKyAgICBudWxscHRyCit9OworCitjb25zdCBTdHJpbmcmIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6cGF0aCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKKyAgICBpZiAobV9wYXRoLmlzTnVsbCgpKSB7CisgICAgICAgIGF1dG8qIGF0
c3BpUm9vdCA9IHJvb3QoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXRzcGlSb290KTsKKyAg
ICAgICAgbV9pc1JlZ2lzdGVyZWQuc3RvcmUodHJ1ZSk7CisKKyAgICAgICAgVmVjdG9yPHN0ZDo6
cGFpcjxHREJ1c0ludGVyZmFjZUluZm8qLCBHREJ1c0ludGVyZmFjZVZUYWJsZSo+PiBpbnRlcmZh
Y2VzOworICAgICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6QWNjZXNz
aWJsZSkpCisgICAgICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8R0RCdXNJ
bnRlcmZhY2VJbmZvKj4oJndlYmtpdF9hY2Nlc3NpYmxlX2ludGVyZmFjZSksICZzX2FjY2Vzc2li
bGVGdW5jdGlvbnMgfSk7CisgICAgICAgIG1fcGF0aCA9IGF0c3BpUm9vdC0+YXRzcGkoKS5yZWdp
c3Rlck9iamVjdCgqdGhpcywgV1RGTW92ZShpbnRlcmZhY2VzKSk7CisgICAgfQorCisgICAgcmV0
dXJuIG1fcGF0aDsKK30KKworR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVm
ZXJlbmNlKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIHJl
dHVybiBnX3ZhcmlhbnRfbmV3KCIoc28pIiwgcm9vdCgpLT5hdHNwaSgpLnVuaXF1ZU5hbWUoKSwg
cGF0aCgpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6c2V0Um9vdChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKiByb290KQoreworICAgIExvY2tlciBs
b2NrZXIgeyBtX3Jvb3RMb2NrIH07CisgICAgbV9yb290ID0gcm9vdDsKK30KKworQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaSogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb290KCkgY29uc3QKK3sK
KyAgICBMb2NrZXIgbG9ja2VyIHsgbV9yb290TG9jayB9OworICAgIHJldHVybiBtX3Jvb3Q7Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXRQYXJlbnQoc3RkOjpvcHRpb25h
bDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBhdHNwaVBhcmVudCkKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fcGFyZW50ID09IGF0c3BpUGFyZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhcmVudCA9IGF0c3BpUGFyZW50OworICAgIGlm
IChtX3BhcmVudCAmJiAqbV9wYXJlbnQpCisgICAgICAgIG1fcGFyZW50LnZhbHVlKCktPmNoaWxk
QWRkZWQoKnRoaXMpOworfQorCitzdGQ6Om9wdGlvbmFsPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSo+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cGFyZW50KCkgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9heE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8qIGF4UGFyZW50ID0gbV9heE9iamVj
dC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgaWYgKCFheFBhcmVudCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoYXV0byogYXRzcGlQYXJlbnQgPSBheFBhcmVudC0+
d3JhcHBlcigpKQorICAgICAgICByZXR1cm4gYXRzcGlQYXJlbnQ7CisKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCitHVmFyaWFudCogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpwYXJl
bnRSZWZlcmVuY2UoKSBjb25zdAoreworICAgIGF1dG8gcGFyZW50QXRzcGkgPSBwYXJlbnQoKTsK
KyAgICBpZiAoIXBhcmVudEF0c3BpKQorICAgICAgICByZXR1cm4gcm9vdCgpLT5hdHNwaSgpLm51
bGxSZWZlcmVuY2UoKTsKKworICAgIGlmICghcGFyZW50QXRzcGkudmFsdWUoKSkKKyAgICAgICAg
cmV0dXJuIHJvb3QoKS0+cmVmZXJlbmNlKCk7CisKKyAgICByZXR1cm4gcGFyZW50QXRzcGkudmFs
dWUoKS0+cmVmZXJlbmNlKCk7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6Y2hpbGRDb3VudCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIG1fYXhPYmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpOworfQorCitBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRv
JiBjaGlsZHJlbiA9IG1fYXhPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgaWYgKGluZGV4ID49IGNo
aWxkcmVuLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiB3cmFw
cGVyID0gY2hpbGRyZW5baW5kZXhdLT53cmFwcGVyKCk7CisgICAgd3JhcHBlci0+c2V0Um9vdChy
b290KCkpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCitWZWN0b3I8UmVmUHRyPEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaT4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRyZW4oKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X2F4T2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgY29uc3QgYXV0byYgY2hpbGRy
ZW4gPSBtX2F4T2JqZWN0LT5jaGlsZHJlbigpOworICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpPj4gd3JhcHBlcnM7CisgICAgd3JhcHBlcnMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOworICAgIGF1dG8qIHJvb3QgPSB0aGlzLT5yb290KCk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChh
dXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKSkgeworICAgICAgICAgICAgd3JhcHBlci0+
c2V0Um9vdChyb290KTsKKyAgICAgICAgICAgIHdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZCh3cmFw
cGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gd3JhcHBlcnM7Cit9CisKK2ludCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmluZGV4SW5QYXJlbnQoKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KSB7Cisg
ICAgICAgIG1faW5kZXhJblBhcmVudCA9IC0xOworICAgICAgICByZXR1cm4gbV9pbmRleEluUGFy
ZW50OworICAgIH0KKworICAgIG1fYXhPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworCisg
ICAgYXV0byogYXhQYXJlbnQgPSBtX2F4T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsK
KyAgICBpZiAoIWF4UGFyZW50KSB7CisgICAgICAgIG1faW5kZXhJblBhcmVudCA9IDA7CisgICAg
ICAgIHJldHVybiBtX2luZGV4SW5QYXJlbnQ7CisgICAgfQorCisgICAgY29uc3QgYXV0byYgY2hp
bGRyZW4gPSBheFBhcmVudC0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgIGlmIChjaGls
ZC5nZXQoKSA9PSBtX2F4T2JqZWN0KSB7CisgICAgICAgICAgICBtX2luZGV4SW5QYXJlbnQgPSBp
bmRleDsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4SW5QYXJlbnQ7CisgICAgICAgIH0KKyAg
ICAgICAgaW5kZXgrKzsKKyAgICB9CisKKyAgICBtX2luZGV4SW5QYXJlbnQgPSAtMTsKKyAgICBy
ZXR1cm4gbV9pbmRleEluUGFyZW50OworfQorCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjppbmRleEluUGFyZW50Rm9yQ2hpbGRyZW5DaGFuZ2VkKEFjY2Vzc2liaWxpdHlBdHNwaTo6Q2hp
bGRyZW5DaGFuZ2VkIGNoYW5nZSkKK3sKKyAgICBpZiAoY2hhbmdlID09IEFjY2Vzc2liaWxpdHlB
dHNwaTo6Q2hpbGRyZW5DaGFuZ2VkOjpSZW1vdmVkKQorICAgICAgICByZXR1cm4gbV9pbmRleElu
UGFyZW50OworCisgICAgdXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIGluZGV4SW5Q
YXJlbnQoKTsKK30KKworQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om5hbWUoKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFt
X2F4T2JqZWN0KQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0
eVRleHQ+IHRleHRPcmRlcjsKKyAgICBtX2F4T2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0
T3JkZXIpOworCisgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0IDogdGV4dE9yZGVyKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGhlcmUgYmVjYXVzZSBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCgpCisgICAgICAgIC8vIGFwcGVuZHMgYW4gZW1wdHkg
U3RyaW5nIGZvciB0aGUgTGFiZWxCeUVsZW1lbnRUZXh0IHNvdXJjZSB3aGVuIHRoZXJlIGlzIGEK
KyAgICAgICAgLy8gdGl0bGVVSUVsZW1lbnQoKS4gUmVtb3ZpbmcgdGhpcyBjaGVjayBtYWtlcyBz
b21lIGZpZWxkc2V0cyBsb3NlIHRoZWlyIG5hbWUuCisgICAgICAgIGlmICh0ZXh0LnRleHQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2ViQ29yZSBBY2Nl
c3NpYmlsaXR5IHNob3VsZCBwcm92aWRlIHVzIHdpdGggdGhlIHRleHQgYWx0ZXJuYXRpdmUgY29t
cHV0YXRpb24KKyAgICAgICAgLy8gaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhhdCBzcGVjLiBT
byB0YWtlIHRoZSBmaXJzdCB0aGluZyB0aGF0IG91ciBwbGF0Zm9ybQorICAgICAgICAvLyBkb2Vz
IG5vdCBleHBvc2UgdmlhIHRoZSBBdGtPYmplY3QgZGVzY3JpcHRpb24uCisgICAgICAgIGlmICh0
ZXh0LnRleHRTb3VyY2UgIT0gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OkhlbHAgJiYgdGV4dC50
ZXh0U291cmNlICE9IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpTdW1tYXJ5KQorICAgICAgICAg
ICAgcmV0dXJuIHRleHQudGV4dC51dGY4KCk7CisgICAgfQorCisgICAgcmV0dXJuICIiOworfQor
CitDU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZGVzY3JpcHRpb24oKSBjb25zdAor
eworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2Jq
ZWN0KQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBWZWN0b3I8QWNjZXNzaWJpbGl0eVRleHQ+
IHRleHRPcmRlcjsKKyAgICBtX2F4T2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIp
OworCisgICAgYm9vbCBuYW1lVGV4dEF2YWlsYWJsZSA9IGZhbHNlOworICAgIGZvciAoY29uc3Qg
YXV0byYgdGV4dCA6IHRleHRPcmRlcikgeworICAgICAgICAvLyBXZWJDb3JlIEFjY2Vzc2liaWxp
dHkgc2hvdWxkIHByb3ZpZGUgdXMgd2l0aCB0aGUgdGV4dCBhbHRlcm5hdGl2ZSBjb21wdXRhdGlv
bgorICAgICAgICAvLyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGF0IHNwZWMuIFNvIHRha2Ug
dGhlIGZpcnN0IHRoaW5nIHRoYXQgb3VyIHBsYXRmb3JtCisgICAgICAgIC8vIGRvZXMgbm90IGV4
cG9zZSB2aWEgdGhlIEF0a09iamVjdCBuYW1lLgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNl
ID09IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpIZWxwIHx8IHRleHQudGV4dFNvdXJjZSA9PSBB
Y2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6U3VtbWFyeSkKKyAgICAgICAgICAgIHJldHVybiB0ZXh0
LnRleHQudXRmOCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG90aGVyIHRleHQgYWx0
ZXJuYXRpdmUsIHRoZSB0aXRsZSB0YWcgY29udGVudHMgd2lsbCBoYXZlIGJlZW4KKyAgICAgICAg
Ly8gdXNlZCBmb3IgdGhlIEF0a09iamVjdCBuYW1lLiBXZSBkb24ndCB3YW50IHRvIGR1cGxpY2F0
ZSBpdCBoZXJlLgorICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFjY2Vzc2liaWxpdHlU
ZXh0U291cmNlOjpUaXRsZVRhZyAmJiBuYW1lVGV4dEF2YWlsYWJsZSkKKyAgICAgICAgICAgIHJl
dHVybiB0ZXh0LnRleHQudXRmOCgpOworCisgICAgICAgIG5hbWVUZXh0QXZhaWxhYmxlID0gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEluY2x1
ZGVPcmllbnRhdGlvblN0YXRlKGNvbnN0IEFYQ29yZU9iamVjdCYgY29yZU9iamVjdCkKK3sKKyAg
ICByZXR1cm4gY29yZU9iamVjdC5pc0NvbWJvQm94KCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5p
c1JhZGlvR3JvdXAoKQorICAgICAgICB8fCBjb3JlT2JqZWN0LmlzVHJlZUdyaWQoKQorICAgICAg
ICB8fCBjb3JlT2JqZWN0LmlzU2Nyb2xsYmFyKCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5pc0xp
c3RCb3goKQorICAgICAgICB8fCBjb3JlT2JqZWN0LmlzTWVudSgpCisgICAgICAgIHx8IGNvcmVP
YmplY3QuaXNUcmVlKCkKKyAgICAgICAgfHwgY29yZU9iamVjdC5pc01lbnVCYXIoKQorICAgICAg
ICB8fCBjb3JlT2JqZWN0LmlzU3BsaXR0ZXIoKQorICAgICAgICB8fCBjb3JlT2JqZWN0LmlzVGFi
TGlzdCgpCisgICAgICAgIHx8IGNvcmVPYmplY3QuaXNUb29sYmFyKCkKKyAgICAgICAgfHwgY29y
ZU9iamVjdC5pc1NsaWRlcigpOworfQorCit1aW50NjRfdCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OnN0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPHVpbnQ2NF90PihbdGhpc10oKSAtPiB1aW50NjRfdCB7CisgICAg
ICAgIHVpbnQ2NF90IHN0YXRlcyA9IDA7CisKKyAgICAgICAgYXV0byBhZGRTdGF0ZSA9IFsmXShB
dHNwaTo6U3RhdGUgYXRzcGlTdGF0ZSkgeworICAgICAgICAgICAgc3RhdGVzIHw9IChHX0dVSU5U
NjRfQ09OU1RBTlQoMSkgPDwgYXRzcGlTdGF0ZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYg
KG1fY29yZU9iamVjdCkKKyAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7CisKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpIHsKKyAgICAgICAgICAgIGFkZFN0
YXRlKEF0c3BpOjpTdGF0ZTo6RGVmdW5jdCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGVzOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNFbmFibGVkKCkpIHsKKyAg
ICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6RW5hYmxlZCk7CisgICAgICAgICAgICBh
ZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlNlbnNpdGl2ZSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAobV9jb3JlT2JqZWN0LT5pc1Zpc2libGUoKSkgeworICAgICAgICAgICAgYWRkU3RhdGUoQXRz
cGk6OlN0YXRlOjpWaXNpYmxlKTsKKyAgICAgICAgICAgIGlmICghbV9jb3JlT2JqZWN0LT5pc09m
ZlNjcmVlbigpKQorICAgICAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2hvd2lu
Zyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5TZXRGb2N1c0F0
dHJpYnV0ZSgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpGb2N1c2FibGUp
OworCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzRm9jdXNlZCgpKQorICAgICAgICAgICAg
YWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpGb2N1c2VkKTsKKworICAgICAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKSB7CisgICAgICAgICAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5zdXBwb3J0c0NoZWNrZWQoKSkKKyAgICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6
U3RhdGU6OkNoZWNrYWJsZSk7CisKKyAgICAgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzVGV4
dENvbnRyb2woKSB8fCBtX2NvcmVPYmplY3QtPmlzTm9uTmF0aXZlVGV4dENvbnRyb2woKSkKKyAg
ICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkVkaXRhYmxlKTsKKyAgICAgICAg
fSBlbHNlIGlmIChtX2NvcmVPYmplY3QtPnN1cHBvcnRzUmVhZE9ubHkoKSkKKyAgICAgICAgICAg
IGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6UmVhZE9ubHkpOworCisgICAgICAgIGlmIChtX2NvcmVP
YmplY3QtPmlzQ2hlY2tlZCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpD
aGVja2VkKTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1ByZXNzZWQoKSkKKyAgICAg
ICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6UHJlc3NlZCk7CisKKyAgICAgICAgaWYgKG1f
Y29yZU9iamVjdC0+aXNSZXF1aXJlZCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0
YXRlOjpSZXF1aXJlZCk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+cm9sZVZhbHVlKCkg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVhIHx8IG1fY29yZU9iamVjdC0+YXJpYUlzTXVs
dGlsaW5lKCkpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6Ok11bHRpTGluZSk7
CisgICAgICAgIGVsc2UgaWYgKG1fY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OlRleHRGaWVsZCB8fCBtX2NvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpTZWFyY2hGaWVsZCkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpT
dGF0ZTo6U2luZ2xlTGluZSk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNUZXh0Q29u
dHJvbCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpTZWxlY3RhYmxlVGV4
dCk7CisKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUo
KSkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2VsZWN0YWJsZSk7CisKKyAg
ICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSkKKyAgICAgICAgICAg
IGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6TXVsdGlzZWxlY3RhYmxlKTsKKworICAgICAgICBpZiAo
bV9jb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6
U3RhdGU6OlNlbGVjdGVkKTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5TZXRFeHBh
bmRlZEF0dHJpYnV0ZSgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpFeHBh
bmRhYmxlKTsKKworICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc0V4cGFuZGVkKCkpCisgICAg
ICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkV4cGFuZGVkKTsKKworICAgICAgICBpZiAo
bV9jb3JlT2JqZWN0LT5oYXNQb3B1cCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0
YXRlOjpIYXNQb3B1cCk7CisKKyAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVPcmllbnRhdGlvblN0
YXRlKCptX2NvcmVPYmplY3QpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+
b3JpZW50YXRpb24oKSkgeworICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRp
b246Okhvcml6b250YWw6CisgICAgICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpI
b3Jpem9udGFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbDoKKyAgICAgICAgICAgICAgICBhZGRTdGF0
ZShBdHNwaTo6U3RhdGU6OlZlcnRpY2FsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpVbmRlZmluZWQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9jb3JlT2JqZWN0LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0
c3BpOjpTdGF0ZTo6SW5kZXRlcm1pbmF0ZSk7CisgICAgICAgIGVsc2UgaWYgKChtX2NvcmVPYmpl
Y3QtPmlzQ2hlY2tib3hPclJhZGlvKCkgfHwgbV9jb3JlT2JqZWN0LT5pc01lbnVJdGVtKCkgfHwg
bV9jb3JlT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSAmJiBtX2NvcmVPYmplY3QtPmNoZWNrYm94
T3JSYWRpb1ZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpNaXhlZCkKKyAgICAg
ICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6SW5kZXRlcm1pbmF0ZSk7CisKKyAgICAgICAg
aWYgKG1fY29yZU9iamVjdC0+aXNNb2RhbE5vZGUoKSkKKyAgICAgICAgICAgIGFkZFN0YXRlKEF0
c3BpOjpTdGF0ZTo6TW9kYWwpOworCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzQnVzeSgp
KQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpCdXN5KTsKKworICAgICAgICBp
ZiAobV9jb3JlT2JqZWN0LT5pbnZhbGlkU3RhdHVzKCkgIT0gImZhbHNlIikKKyAgICAgICAgICAg
IGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6SW52YWxpZEVudHJ5KTsKKworICAgICAgICBpZiAobV9j
b3JlT2JqZWN0LT5zdXBwb3J0c0F1dG9Db21wbGV0ZSgpICYmIG1fY29yZU9iamVjdC0+YXV0b0Nv
bXBsZXRlVmFsdWUoKSAhPSAibm9uZSIpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3Rh
dGU6OlN1cHBvcnRzQXV0b2NvbXBsZXRpb24pOworCisgICAgICAgIHJldHVybiBzdGF0ZXM7Cisg
ICAgfSk7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmlkKCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29yZU9i
amVjdCkKKyAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
IGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKGF1dG8q
IGVsZW1lbnQgPSBtX2NvcmVPYmplY3QtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1l
bnQtPmdldElkQXR0cmlidXRlKCkuc3RyaW5nKCk7CisKKyAgICByZXR1cm4geyB9OworfQorCitI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmF0dHJpYnV0
ZXMoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBI
YXNoTWFwPFN0cmluZywgU3RyaW5nPiBtYXA7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIG1hcC5h
ZGQoInRvb2xraXQiLCAiV2ViS2l0R1RLIik7CisjZWxpZiBQTEFURk9STShXUEUpCisgICAgbWFw
LmFkZCgidG9vbGtpdCIsICJXUEVXZWJLaXQiKTsKKyNlbmRpZgorICAgIGlmIChtX2NvcmVPYmpl
Y3QpCisgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBp
ZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1hcDsKKworICAgIFN0cmluZyB0YWdO
YW1lID0gbV9jb3JlT2JqZWN0LT50YWdOYW1lKCk7CisgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHko
KSkKKyAgICAgICAgbWFwLmFkZCgidGFnIiwgdGFnTmFtZSk7CisKKyAgICBpZiAoYXV0byogZWxl
bWVudCA9IG1fY29yZU9iamVjdC0+ZWxlbWVudCgpKSB7CisgICAgICAgIFN0cmluZyBpZCA9IGVs
ZW1lbnQtPmdldElkQXR0cmlidXRlKCkuc3RyaW5nKCk7CisgICAgICAgIGlmICghaWQuaXNFbXB0
eSgpKQorICAgICAgICAgICAgbWFwLmFkZCgiaWQiLCBpZCk7CisgICAgfQorCisgICAgaW50IGxl
dmVsID0gbV9jb3JlT2JqZWN0LT5pc0hlYWRpbmcoKSA/IG1fY29yZU9iamVjdC0+aGVhZGluZ0xl
dmVsKCkgOiBtX2NvcmVPYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7CisgICAgaWYgKGxldmVs
KQorICAgICAgICBtYXAuYWRkKCJsZXZlbCIsIFN0cmluZzo6bnVtYmVyKGxldmVsKSk7CisKKyAg
ICBpbnQgcm93Q291bnQgPSBtX2NvcmVPYmplY3QtPmF4Um93Q291bnQoKTsKKyAgICBpZiAocm93
Q291bnQpCisgICAgICAgIG1hcC5hZGQoInJvd2NvdW50IiwgU3RyaW5nOjpudW1iZXIocm93Q291
bnQpKTsKKworICAgIGludCBjb2x1bW5Db3VudCA9IG1fY29yZU9iamVjdC0+YXhDb2x1bW5Db3Vu
dCgpOworICAgIGlmIChjb2x1bW5Db3VudCkKKyAgICAgICAgbWFwLmFkZCgiY29sY291bnQiLCBT
dHJpbmc6Om51bWJlcihjb2x1bW5Db3VudCkpOworCisgICAgaW50IHJvd0luZGV4ID0gbV9jb3Jl
T2JqZWN0LT5heFJvd0luZGV4KCk7CisgICAgaWYgKHJvd0luZGV4ICE9IC0xKQorICAgICAgICBt
YXAuYWRkKCJyb3dpbmRleCIsIFN0cmluZzo6bnVtYmVyKHJvd0luZGV4KSk7CisKKyAgICBpbnQg
Y29sdW1uSW5kZXggPSBtX2NvcmVPYmplY3QtPmF4Q29sdW1uSW5kZXgoKTsKKyAgICBpZiAoY29s
dW1uSW5kZXggIT0gLTEpCisgICAgICAgIG1hcC5hZGQoImNvbGluZGV4IiwgU3RyaW5nOjpudW1i
ZXIoY29sdW1uSW5kZXgpKTsKKworICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPiht
X2NvcmVPYmplY3QpKSB7CisgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGVDZWxsPigqbV9jb3JlT2JqZWN0KTsKKyAgICAgICAgaW50IHJvd1NwYW4gPSBjZWxs
LmF4Um93U3BhbigpOworICAgICAgICBpZiAocm93U3BhbiAhPSAtMSkKKyAgICAgICAgICAgIG1h
cC5hZGQoInJvd3NwYW4iLCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKSk7CisKKyAgICAgICAgaW50
IGNvbHVtblNwYW4gPSBjZWxsLmF4Q29sdW1uU3BhbigpOworICAgICAgICBpZiAoY29sdW1uU3Bh
biAhPSAtMSkKKyAgICAgICAgICAgIG1hcC5hZGQoImNvbHNwYW4iLCBTdHJpbmc6Om51bWJlcihj
b2x1bW5TcGFuKSk7CisgICAgfQorCisgICAgU3RyaW5nIHBsYWNlaG9sZGVyID0gbV9jb3JlT2Jq
ZWN0LT5wbGFjZWhvbGRlclZhbHVlKCk7CisgICAgaWYgKCFwbGFjZWhvbGRlci5pc0VtcHR5KCkp
CisgICAgICAgIG1hcC5hZGQoInBsYWNlaG9sZGVyLXRleHQiLCBwbGFjZWhvbGRlcik7CisKKyAg
ICBpZiAobV9jb3JlT2JqZWN0LT5zdXBwb3J0c0F1dG9Db21wbGV0ZSgpKQorICAgICAgICBtYXAu
YWRkKCJhdXRvY29tcGxldGUiLCBtX2NvcmVPYmplY3QtPmF1dG9Db21wbGV0ZVZhbHVlKCkpOwor
CisgICAgaWYgKG1fY29yZU9iamVjdC0+c3VwcG9ydHNIYXNQb3B1cCgpKQorICAgICAgICBtYXAu
YWRkKCJoYXNwb3B1cCIsIG1fY29yZU9iamVjdC0+cG9wdXBWYWx1ZSgpKTsKKworICAgIGlmICht
X2NvcmVPYmplY3QtPnN1cHBvcnRzQ3VycmVudCgpKQorICAgICAgICBtYXAuYWRkKCJjdXJyZW50
IiwgbV9jb3JlT2JqZWN0LT5jdXJyZW50VmFsdWUoKSk7CisKKyAgICBpZiAobV9jb3JlT2JqZWN0
LT5zdXBwb3J0c1Bvc0luU2V0KCkpCisgICAgICAgIG1hcC5hZGQoInBvc2luc2V0IiwgU3RyaW5n
OjpudW1iZXIobV9jb3JlT2JqZWN0LT5wb3NJblNldCgpKSk7CisKKyAgICBpZiAobV9jb3JlT2Jq
ZWN0LT5zdXBwb3J0c1NldFNpemUoKSkKKyAgICAgICAgbWFwLmFkZCgic2V0c2l6ZSIsIFN0cmlu
Zzo6bnVtYmVyKG1fY29yZU9iamVjdC0+c2V0U2l6ZSgpKSk7CisKKyAgICAvLyBUaGUgQ29yZSBB
QU0gc3RhdGVzIHRoYXQgYW4gZXhwbGljaXRseS1zZXQgdmFsdWUgc2hvdWxkIGJlIGV4cG9zZWQs
IGluY2x1ZGluZyAibm9uZSIuCisgICAgaWYgKHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmpl
Y3QqPihtX2NvcmVPYmplY3QpLT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjphcmlhX3NvcnRBdHRy
KSkgeworICAgICAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+c29ydERpcmVjdGlvbigpKSB7Cisg
ICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246OkludmFsaWQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6QXNj
ZW5kaW5nOgorICAgICAgICAgICAgbWFwLmFkZCgic29ydCIsICJhc2NlbmRpbmciKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpE
ZXNjZW5kaW5nOgorICAgICAgICAgICAgbWFwLmFkZCgic29ydCIsICJkZXNjZW5kaW5nIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlv
bjo6T3RoZXI6CisgICAgICAgICAgICBtYXAuYWRkKCJzb3J0IiwgIm90aGVyIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6Tm9u
ZToKKyAgICAgICAgICAgIG1hcC5hZGQoInNvcnQiLCAibm9uZSIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgaXNSZWFkT25seSA9IG1fY29yZU9i
amVjdC0+cmVhZE9ubHlWYWx1ZSgpOworICAgIGlmICghaXNSZWFkT25seS5pc0VtcHR5KCkpCisg
ICAgICAgIG1hcC5hZGQoInJlYWRvbmx5IiwgaXNSZWFkT25seSk7CisKKyAgICBTdHJpbmcgdmFs
dWVEZXNjcmlwdGlvbiA9IG1fY29yZU9iamVjdC0+dmFsdWVEZXNjcmlwdGlvbigpOworICAgIGlm
ICghdmFsdWVEZXNjcmlwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5hZGQoInZhbHVldGV4
dCIsIHZhbHVlRGVzY3JpcHRpb24pOworCisgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBXM0MgQ29y
ZSBBY2Nlc3NpYmlsaXR5IEFQSSBNYXBwaW5ncyAxLjEsIHNlY3Rpb24gNS40LjEgR2VuZXJhbCBS
dWxlczoKKyAgICAvLyAiVXNlciBhZ2VudHMgbXVzdCBleHBvc2UgdGhlIFdBSS1BUklBIHJvbGUg
c3RyaW5nIGlmIHRoZSBBUEkgc3VwcG9ydHMgYSBtZWNoYW5pc20gdG8gZG8gc28uIgorICAgIC8v
IEluIHRoZSBjYXNlIG9mIEFUSywgdGhlIG1lY2hhbmlzbSB0byBkbyBzbyBpcyBhbiBvYmplY3Qg
YXR0cmlidXRlIHBhaXIgKHhtbC1yb2xlczoic3RyaW5nIikuCisgICAgLy8gV2UgY2Fubm90IHVz
ZSB0aGUgY29tcHV0ZWRSb2xlU3RyaW5nIGZvciB0aGlzIHB1cnBvc2UgYmVjYXVzZSBpdCBpcyBu
b3QgbGltaXRlZCB0byBlbGVtZW50cworICAgIC8vIHdpdGggQVJJQSByb2xlcywgYW5kIGl0IG1p
Z2h0IG5vdCBjb250YWluIHRoZSBhY3R1YWwgQVJJQSByb2xlIHZhbHVlIChlLmcuIERQdWIgQVJJ
QSkuCisgICAgU3RyaW5nIHJvbGVTdHJpbmcgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0Kj4obV9jb3JlT2JqZWN0KS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cm9sZUF0dHIpOwor
ICAgIGlmICghcm9sZVN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5hZGQoInhtbC1yb2xl
cyIsIHJvbGVTdHJpbmcpOworCisgICAgU3RyaW5nIGNvbXB1dGVkUm9sZVN0cmluZyA9IG1fY29y
ZU9iamVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCk7CisgICAgaWYgKCFjb21wdXRlZFJvbGVTdHJp
bmcuaXNFbXB0eSgpKSB7CisgICAgICAgIG1hcC5hZGQoImNvbXB1dGVkLXJvbGUiLCBjb21wdXRl
ZFJvbGVTdHJpbmcpOworCisgICAgICAgIC8vIFRoZSBIVE1MIEFBTSBtYXBzIHNldmVyYWwgZWxl
bWVudHMgdG8gQVJJQSBsYW5kbWFyayByb2xlcy4gSW4gb3JkZXIgZm9yIHRoZSB0eXBlIG9mIGxh
bmRtYXJrCisgICAgICAgIC8vIHRvIGJlIG9idGFpbmFibGUgaW4gdGhlIHNhbWUgZmFzaGlvbiBh
cyBhbiBBUklBIGxhbmRtYXJrLCBmYWxsIGJhY2sgb24gdGhlIGNvbXB1dGVkUm9sZVN0cmluZy4K
KyAgICAgICAgLy8gV2UgYWxzbyB3YW50IHRvIGRvIHRoaXMgZm9yIHRoZSBzdHlsZS1mb3JtYXQt
Z3JvdXAgZWxlbWVudCB0eXBlcyBzbyB0aGF0IHRoZSB0eXBlIG9mIGZvcm1hdAorICAgICAgICAv
LyBncm91cCBpdCBpcyBkb2Vzbid0IGdldCBsb3N0IHRvIGEgZ2VuZXJpYyBwbGF0Zm9ybSByb2xl
LgorICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vz
c2liaWxpdHlSb2xlOjpVbmtub3duICYmIChtX2NvcmVPYmplY3QtPmlzTGFuZG1hcmsoKSB8fCBt
X2NvcmVPYmplY3QtPmlzU3R5bGVGb3JtYXRHcm91cCgpKSkKKyAgICAgICAgICAgIG1hcC5zZXQo
InhtbC1yb2xlcyIsIGNvbXB1dGVkUm9sZVN0cmluZyk7CisgICAgfQorCisgICAgU3RyaW5nIHJv
bGVEZXNjcmlwdGlvbiA9IG1fY29yZU9iamVjdC0+cm9sZURlc2NyaXB0aW9uKCk7CisgICAgaWYg
KCFyb2xlRGVzY3JpcHRpb24uaXNFbXB0eSgpKQorICAgICAgICBtYXAuYWRkKCJyb2xlZGVzY3Jp
cHRpb24iLCByb2xlRGVzY3JpcHRpb24pOworCisgICAgU3RyaW5nIGRyb3BFZmZlY3QgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4obV9jb3JlT2JqZWN0KS0+Z2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6YXJpYV9kcm9wZWZmZWN0QXR0cik7CisgICAgaWYgKCFkcm9wRWZmZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgbWFwLmFkZCgiZHJvcGVmZmVjdCIsIGRyb3BFZmZlY3QpOworCisg
ICAgaWYgKG1fY29yZU9iamVjdC0+c3VwcG9ydHNEcmFnZ2luZygpKQorICAgICAgICBtYXAuYWRk
KCJncmFiYmVkIiwgbV9jb3JlT2JqZWN0LT5pc0dyYWJiZWQoKSA/ICJ0cnVlIiA6ICJmYWxzZSIp
OworCisgICAgU3RyaW5nIGtleVNob3J0Y3V0cyA9IG1fY29yZU9iamVjdC0+a2V5U2hvcnRjdXRz
VmFsdWUoKTsKKyAgICBpZiAoIWtleVNob3J0Y3V0cy5pc0VtcHR5KCkpCisgICAgICAgIG1hcC5h
ZGQoImtleXNob3J0Y3V0cyIsIGtleVNob3J0Y3V0cyk7CisKKyAgICByZXR1cm4gbWFwOworfQor
Cit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRBdHRyaWJ1dGVzKEdWYXJpYW50
QnVpbGRlciogYnVpbGRlcikgY29uc3QKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZXMgPSBBY2Nlc3Np
YmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8SGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4+KFt0aGlzXSgpIC0+IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHsKKyAgICAgICAgcmV0dXJu
IHRoaXMtPmF0dHJpYnV0ZXMoKTsKKyAgICB9KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaXQg
OiBhdHRyaWJ1dGVzKQorICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIntz
c30iLCBpdC5rZXkudXRmOCgpLmRhdGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSk7Cit9CisK
K0hhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
Pj4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVsYXRpb25NYXAoKSBjb25zdAoreworICAg
IFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIEhhc2hNYXA8dWludDMyX3Qs
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4+IG1hcDsKKyAgICBpZiAo
bV9jb3JlT2JqZWN0KQorICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgp
OworCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiBtYXA7CisKKyAgICBh
dXRvIGFkZFJlbGF0aW9uID0gWyZdKEF0c3BpOjpSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbikg
eworICAgICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IHdyYXBw
ZXJzOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKSkKKyAgICAgICAgICAg
ICAgICB3cmFwcGVycy5hcHBlbmQod3JhcHBlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF3
cmFwcGVycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtYXAuYWRkKHJlbGF0aW9uLCBXVEZNb3Zl
KHdyYXBwZXJzKSk7CisKKyAgICB9OworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFMYWJlbGxlZEJ5RWxlbWVudHM7CisgICAgaWYgKG1f
Y29yZU9iamVjdC0+aXNDb250cm9sKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxhYmVsID0gbV9j
b3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nTGFiZWxGb3JDb250cm9sRWxlbWVudCgpKQorICAgICAg
ICAgICAgYXJpYUxhYmVsbGVkQnlFbGVtZW50cy5hcHBlbmQobGFiZWwpOworICAgIH0gZWxzZSBp
ZiAobV9jb3JlT2JqZWN0LT5pc0ZpZWxkc2V0KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGxhYmVs
ID0gbV9jb3JlT2JqZWN0LT50aXRsZVVJRWxlbWVudCgpKQorICAgICAgICAgICAgYXJpYUxhYmVs
bGVkQnlFbGVtZW50cy5hcHBlbmQobGFiZWwpOworICAgIH0gZWxzZSBpZiAobV9jb3JlT2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGVnZW5kKSB7CisgICAgICAgIGlm
IChhdXRvKiByZW5kZXJGaWVsZHNldCA9IGFuY2VzdG9yc09mVHlwZTxSZW5kZXJCbG9jaz4oKm1f
Y29yZU9iamVjdC0+cmVuZGVyZXIoKSkuZmlyc3QoKSkgeworICAgICAgICAgICAgaWYgKHJlbmRl
ckZpZWxkc2V0LT5pc0ZpZWxkc2V0KCkpCisgICAgICAgICAgICAgICAgYXJpYUxhYmVsbGVkQnlF
bGVtZW50cy5hcHBlbmQobV9jb3JlT2JqZWN0LT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRl
KHJlbmRlckZpZWxkc2V0KSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFtX2NvcmVPYmpl
Y3QtPmNvcnJlc3BvbmRpbmdDb250cm9sRm9yTGFiZWxFbGVtZW50KCkpCisgICAgICAgIG1fY29y
ZU9iamVjdC0+YXJpYUxhYmVsbGVkQnlFbGVtZW50cyhhcmlhTGFiZWxsZWRCeUVsZW1lbnRzKTsK
KyAgICBhZGRSZWxhdGlvbihBdHNwaTo6TGFiZWxsZWRCeSwgYXJpYUxhYmVsbGVkQnlFbGVtZW50
cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgYXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzOworICAgIGlmIChhdXRvKiBjb250
cm9sID0gbV9jb3JlT2JqZWN0LT5jb3JyZXNwb25kaW5nQ29udHJvbEZvckxhYmVsRWxlbWVudCgp
KQorICAgICAgICBhcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMuYXBwZW5kKGNvbnRy
b2wpOworICAgIGVsc2UKKyAgICAgICAgbV9jb3JlT2JqZWN0LT5hcmlhTGFiZWxsZWRCeVJlZmVy
ZW5jaW5nRWxlbWVudHMoYXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKyAgICBh
ZGRSZWxhdGlvbihBdHNwaTo6TGFiZWxGb3IsIGFyaWFMYWJlbGxlZEJ5UmVmZXJlbmNpbmdFbGVt
ZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3IgYXJpYUZsb3dUb0VsZW1lbnRzOworICAgIG1fY29yZU9iamVjdC0+YXJpYUZsb3dUb0Vs
ZW1lbnRzKGFyaWFGbG93VG9FbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkZsb3dz
VG8sIGFyaWFGbG93VG9FbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUZsb3dUb1JlZmVyZW5jaW5nRWxlbWVudHM7Cisg
ICAgbV9jb3JlT2JqZWN0LT5hcmlhRmxvd1RvUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhRmxvd1Rv
UmVmZXJlbmNpbmdFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkZsb3dzRnJvbSwg
YXJpYUZsb3dUb1JlZmVyZW5jaW5nRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFEZXNjcmliZWRCeUVsZW1lbnRzOwor
ICAgIG1fY29yZU9iamVjdC0+YXJpYURlc2NyaWJlZEJ5RWxlbWVudHMoYXJpYURlc2NyaWJlZEJ5
RWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXNjcmliZWRCeSwgYXJpYURlc2Ny
aWJlZEJ5RWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5nRWxlbWVudHM7CisgICAg
bV9jb3JlT2JqZWN0LT5hcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0VsZW1lbnRzKGFyaWFEZXNj
cmliZWRCeVJlZmVyZW5jaW5nRWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXNj
cmlwdGlvbkZvciwgYXJpYURlc2NyaWJlZEJ5UmVmZXJlbmNpbmdFbGVtZW50cyk7CisKKyAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUNvbnRy
b2xzRWxlbWVudHM7CisgICAgbV9jb3JlT2JqZWN0LT5hcmlhQ29udHJvbHNFbGVtZW50cyhhcmlh
Q29udHJvbHNFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkNvbnRyb2xsZXJGb3Is
IGFyaWFDb250cm9sc0VsZW1lbnRzKTsKKworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzOwor
ICAgIG1fY29yZU9iamVjdC0+YXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhQ29u
dHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKyAgICBhZGRSZWxhdGlvbihBdHNwaTo6Q29udHJv
bGxlZEJ5LCBhcmlhQ29udHJvbHNSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhT3duc0VsZW1lbnRz
OworICAgIG1fY29yZU9iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3duc0VsZW1lbnRzKTsK
KyAgICBhZGRSZWxhdGlvbihBdHNwaTo6Tm9kZVBhcmVudE9mLCBhcmlhT3duc0VsZW1lbnRzKTsK
KworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBh
cmlhT3duc1JlZmVyZW5jaW5nRWxlbWVudHM7CisgICAgbV9jb3JlT2JqZWN0LT5hcmlhT3duc1Jl
ZmVyZW5jaW5nRWxlbWVudHMoYXJpYU93bnNSZWZlcmVuY2luZ0VsZW1lbnRzKTsKKyAgICBhZGRS
ZWxhdGlvbihBdHNwaTo6Tm9kZUNoaWxkT2YsIGFyaWFPd25zUmVmZXJlbmNpbmdFbGVtZW50cyk7
CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
YXJpYURldGFpbHNFbGVtZW50czsKKyAgICBtX2NvcmVPYmplY3QtPmFyaWFEZXRhaWxzRWxlbWVu
dHMoYXJpYURldGFpbHNFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24oQXRzcGk6OkRldGFpbHMs
IGFyaWFEZXRhaWxzRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50czsKKyAg
ICBtX2NvcmVPYmplY3QtPmFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyhhcmlhRGV0YWls
c1JlZmVyZW5jaW5nRWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpEZXRhaWxzRm9y
LCBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudHMpOworCisgICAgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFFcnJvck1lc3NhZ2VFbGVtZW50
czsKKyAgICBtX2NvcmVPYmplY3QtPmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyhhcmlhRXJyb3JN
ZXNzYWdlRWxlbWVudHMpOworICAgIGFkZFJlbGF0aW9uKEF0c3BpOjpFcnJvck1lc3NhZ2UsIGFy
aWFFcnJvck1lc3NhZ2VFbGVtZW50cyk7CisKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgYXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVu
dHM7CisgICAgbV9jb3JlT2JqZWN0LT5hcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50
cyhhcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyk7CisgICAgYWRkUmVsYXRpb24o
QXRzcGk6OkVycm9yRm9yLCBhcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50cyk7CisK
KyAgICByZXR1cm4gbWFwOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVp
bGRSZWxhdGlvblNldChHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgYXV0
byByZWxhdGlvbk1hcCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxIYXNoTWFwPHVpbnQzMl90LCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aT4+Pj4oW3RoaXNdKCkgLT4gSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk+Pj4geworICAgICAgICByZXR1cm4gdGhpcy0+cmVsYXRpb25NYXAo
KTsKKyAgICB9KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiByZWxhdGlvbk1hcCkgewor
ICAgICAgICBHVmFyaWFudEJ1aWxkZXIgYXJyYXlCdWlsZGVyID0gR19WQVJJQU5UX0JVSUxERVJf
SU5JVChHX1ZBUklBTlRfVFlQRSgiYShzbykiKSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYg
YXRzcGlPYmplY3QgOiBpdC52YWx1ZSkgeworICAgICAgICAgICAgYXRzcGlPYmplY3QtPnNldFJv
b3Qocm9vdCgpKTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYXJyYXlCdWls
ZGVyLCAiQChzbykiLCBhdHNwaU9iamVjdC0+cmVmZXJlbmNlKCkpOworICAgICAgICB9CisgICAg
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHVhKHNvKSkiLCBpdC5rZXksICZh
cnJheUJ1aWxkZXIpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OmJ1aWxkSW50ZXJmYWNlcyhHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAg
UkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pbnRlcmZhY2VzLmNv
bnRhaW5zKEludGVyZmFjZTo6QWNjZXNzaWJsZSkpCisgICAgICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZChidWlsZGVyLCAicyIsIHdlYmtpdF9hY2Nlc3NpYmxlX2ludGVyZmFjZS5uYW1lKTsKK30K
Kwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlcmlhbGl6ZShHVmFyaWFudEJ1aWxk
ZXIqIGJ1aWxkZXIpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKKyAgICBhdXRvKiBhdHNwaVJvb3QgPSByb290KCk7CisgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKGJ1aWxkZXIsICIoc28pIiwgYXRzcGlSb290LT5hdHNwaSgpLnVuaXF1ZU5hbWUoKSwgbV9w
YXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAi
KHNvKSIsIGF0c3BpUm9vdC0+cGFyZW50VW5pcXVlTmFtZSgpLnV0ZjgoKS5kYXRhKCksICIvb3Jn
L2ExMXkvYXRzcGkvYWNjZXNzaWJsZS9yb290Iik7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KGJ1aWxkZXIsICJAKHNvKSIsIHBhcmVudFJlZmVyZW5jZSgpKTsKKworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2FkZChidWlsZGVyLCAiaSIsIGluZGV4SW5QYXJlbnQoKSk7CisgICAgZ192YXJpYW50
X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJpIiwgY2hpbGRDb3VudCgpKTsKKworICAgIEdWYXJpYW50
QnVpbGRlciBpbnRlcmZhY2VzID0gR19WQVJJQU5UX0JVSUxERVJfSU5JVChHX1ZBUklBTlRfVFlQ
RSgiYXMiKSk7CisgICAgYnVpbGRJbnRlcmZhY2VzKCZpbnRlcmZhY2VzKTsKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIkBhcyIsIGdfdmFyaWFudF9uZXcoImFzIiwgJmludGVy
ZmFjZXMpKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIG5hbWUo
KS5kYXRhKCkpOworCisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJ1Iiwgcm9s
ZSgpKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAicyIsIGRlc2NyaXB0
aW9uKCkuZGF0YSgpKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBzdGF0ZXMgPSBHX1ZBUklBTlRf
QlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhdSIpKTsKKyAgICBhdXRvIGF0c3BpU3RhdGVz
ID0gc3RhdGUoKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoJnN0YXRlcywgInUiLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oYXRzcGlTdGF0ZXMgJiAweGZmZmZmZmZmKSk7CisgICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKCZzdGF0ZXMsICJ1Iiwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGF0c3Bp
U3RhdGVzID4+IDMyKSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAYXUi
LCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJnN0YXRlcykpOworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6Y2hpbGRBZGRlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNoaWxk
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1faXNS
ZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY2hpbGQgPSBS
ZWYgeyBjaGlsZCB9XSB7CisgICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICByb290KCktPmF0c3BpKCkuY2hpbGRyZW5DaGFuZ2VkKCp0aGlzLCBj
aGlsZCwgQWNjZXNzaWJpbGl0eUF0c3BpOjpDaGlsZHJlbkNoYW5nZWQ6OkFkZGVkKTsKKyAgICB9
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkUmVtb3ZlZChBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNoaWxkKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcm9vdCgpLT5hdHNwaSgpLmNoaWxkcmVuQ2hhbmdlZCgqdGhpcywgY2hpbGQs
IEFjY2Vzc2liaWxpdHlBdHNwaTo6Q2hpbGRyZW5DaGFuZ2VkOjpSZW1vdmVkKTsKK30KKwordm9p
ZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlQ2hhbmdlZChjb25zdCBjaGFyKiBuYW1l
LCBib29sIHZhbHVlKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1faXNSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcm9v
dCgpLT5hdHNwaSgpLnN0YXRlQ2hhbmdlZCgqdGhpcywgbmFtZSwgdmFsdWUpOworfQorCit1bnNp
Z25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvbGUoKSBjb25zdAoreworICAgIFJFTEVB
U0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAg
ICByZXR1cm4gQXRzcGk6OlJvbGU6OlVua25vd247CisKKyAgICByZXR1cm4gYXRzcGlSb2xlKG1f
YXhPYmplY3QtPnJvbGVWYWx1ZSgpKTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6cm9sZU5hbWUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CisgICAgaWYgKCFtX2F4T2JqZWN0KQorICAgICAgICByZXR1cm4gImludmFsaWQiOwor
CisgICAgcmV0dXJuIG1fYXhPYmplY3QtPnJvbGVQbGF0Zm9ybVN0cmluZygpOworfQorCitjb25z
dCBjaGFyKiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmxvY2FsaXplZFJvbGVOYW1lKCkgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9h
eE9iamVjdCkKKyAgICAgICAgcmV0dXJuIF8oImludmFsaWQiKTsKKworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5QXRzcGk6OmxvY2FsaXplZFJvbGVOYW1lKG1fYXhPYmplY3QtPnJvbGVWYWx1ZSgp
KTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpCit7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIGlmIChtX2NvcmVPYmpl
Y3QpCisgICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fYXhPYmplY3QpCisgICAgICAgIG1fYXhP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0
YWNobWVudFR5cGUpCiB7CisgICAgc3dpdGNoIChkZXRhY2htZW50VHlwZSkgeworICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eURldGFjaG1lbnRUeXBlOjpDYWNoZURlc3Ryb3llZDoKKyAgICAgICAgd3Jh
cHBlcigpLT5jYWNoZURlc3Ryb3llZCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFjY2Vz
c2liaWxpdHlEZXRhY2htZW50VHlwZTo6RWxlbWVudERlc3Ryb3llZDoKKyAgICAgICAgd3JhcHBl
cigpLT5lbGVtZW50RGVzdHJveWVkKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWNjZXNz
aWJpbGl0eURldGFjaG1lbnRUeXBlOjpFbGVtZW50Q2hhbmdlZDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QK
QEAgLTQ1LDYgKzExNTcsMjkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmls
aXR5SWdub3JlQXR0YWNobWVudCgpIGNvbnN0CiAKIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNp
b24gQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eVBsYXRmb3JtSW5jbHVkZXNPYmpl
Y3QoKSBjb25zdAogeworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGF1dG8qIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOworICAgIGlmICghcGFyZW50KQorICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOwor
CisgICAgLy8gSWYgdGhlIGF1dGhvciBoYXMgcHJvdmlkZWQgYSByb2xlLCBwbGF0Zm9ybS1zcGVj
aWZpYyBpbmNsdXNpb24gbGlrZWx5IGRvZXNuJ3QgYXBwbHkuCisgICAgaWYgKGFyaWFSb2xlQXR0
cmlidXRlKCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24pCisgICAgICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7CisKKyAgICAvLyBO
ZXZlciBleHBvc2UgYW4gdW5rbm93biBvYmplY3QsIHNpbmNlIEFUJ3Mgd29uJ3Qga25vdyB3aGF0
IHRvCisgICAgLy8gZG8gd2l0aCB0aGVtLiBUaGlzIGlzIHdoYXQgaXMgZG9uZSBvbiB0aGUgTWFj
IGFzIHdlbGwuCisgICAgaWYgKHJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtu
b3duKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3Jl
T2JqZWN0OworCisgICAgLy8gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0ZXh0IHNob3VsZCBp
bXBsZW1lbnQgb3JnLmExMXkuYXRzcGkuVGV4dCBpdHNlbGYuCisgICAgaWYgKHJvbGVWYWx1ZSgp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTdGF0aWNUZXh0KQorICAgICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0OworCisgICAgLy8gRW50cmllcyBh
bmQgcGFzc3dvcmQgZmllbGRzIGhhdmUgZXh0cmFuZW91cyBjaGlsZHJlbiB3aGljaCB3ZSB3YW50
IHRvIGlnbm9yZS4KKyAgICBpZiAocGFyZW50LT5pc1Bhc3N3b3JkRmllbGQoKSB8fCBwYXJlbnQt
PmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNs
dXNpb246Oklnbm9yZU9iamVjdDsKKwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5j
bHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmggYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCmlu
ZGV4IDQzMDVjMGI2ZmY3OS4uNTY2MzBlZWFjNWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
LmgKQEAgLTIwLDE5ICsyMCw4OCBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoQUNDRVNT
SUJJTElUWSkgJiYgVVNFKEFUU1BJKQorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlBdHNwaS5oIgor
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaCIKICNpbmNsdWRlIDx3dGYv
QXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dEQnVzSW50ZXJmYWNlVlRhYmxl
IEdEQnVzSW50ZXJmYWNlVlRhYmxlOwordHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50IEdWYXJpYW50
OwordHlwZWRlZiBzdHJ1Y3QgX0dWYXJpYW50QnVpbGRlciBHVmFyaWFudEJ1aWxkZXI7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFYQ29yZU9iamVjdDsKK2NsYXNzIEFjY2Vzc2liaWxp
dHlSb290QXRzcGk7CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSBmaW5hbCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gY3JlYXRlKEFY
Q29yZU9iamVjdCopOwogICAgIH5BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkoKSA9IGRlZmF1bHQ7
CiAKKyAgICBlbnVtIGNsYXNzIEludGVyZmFjZSA6IHVpbnQ4X3QgeworICAgICAgICBBY2Nlc3Np
YmxlID0gMSA8PCAwCisgICAgfTsKKyAgICBjb25zdCBPcHRpb25TZXQ8SW50ZXJmYWNlPiYgaW50
ZXJmYWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJmYWNlczsgfQorCisgICAgdm9pZCBzZXRS
b290KEFjY2Vzc2liaWxpdHlSb290QXRzcGkqKTsKKyAgICBBY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
KiByb290KCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYXJlbnQoc3RkOjpvcHRpb25hbDxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqPik7CisgICAgc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqPiBwYXJlbnQoKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgp
OworCisgICAgdm9pZCBhdHRhY2goQVhDb3JlT2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2goKTsK
KyAgICB2b2lkIGVsZW1lbnREZXN0cm95ZWQoKTsKKyAgICB2b2lkIGNhY2hlRGVzdHJveWVkKCk7
CisKKyAgICBpbnQgaW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5
QXRzcGk6OkNoaWxkcmVuQ2hhbmdlZCk7CisKKyAgICBjb25zdCBTdHJpbmcmIHBhdGgoKTsKKyAg
ICBHVmFyaWFudCogcmVmZXJlbmNlKCk7CisgICAgdm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWls
ZGVyKikgY29uc3Q7CisKKyAgICBTdHJpbmcgaWQoKSBjb25zdDsKKyAgICBDU3RyaW5nIG5hbWUo
KSBjb25zdDsKKyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CisgICAgdW5zaWduZWQg
cm9sZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNoaWxkQ291bnQoKSBjb25zdDsKKyAgICBWZWN0
b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+IGNoaWxkcmVuKCkgY29uc3Q7Cisg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKKyAg
ICB1aW50NjRfdCBzdGF0ZSgpIGNvbnN0OworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKGNvbnN0IGNo
YXIqLCBib29sKTsKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzKCkgY29u
c3Q7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+Pj4gcmVsYXRpb25NYXAoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNp
dCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkoQVhDb3JlT2JqZWN0Kik7CisKKyAgICBpbnQgaW5k
ZXhJblBhcmVudCgpIGNvbnN0OworICAgIEdWYXJpYW50KiBwYXJlbnRSZWZlcmVuY2UoKSBjb25z
dDsKKyAgICB2b2lkIGNoaWxkQWRkZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJik7CisgICAg
dm9pZCBjaGlsZFJlbW92ZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJik7CisKKyAgICBTdHJp
bmcgcm9sZU5hbWUoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyKiBsb2NhbGl6ZWRSb2xlTmFtZSgp
IGNvbnN0OworICAgIHZvaWQgYnVpbGRBdHRyaWJ1dGVzKEdWYXJpYW50QnVpbGRlciopIGNvbnN0
OworICAgIHZvaWQgYnVpbGRSZWxhdGlvblNldChHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKKyAg
ICB2b2lkIGJ1aWxkSW50ZXJmYWNlcyhHVmFyaWFudEJ1aWxkZXIqKSBjb25zdDsKKworICAgIHN0
YXRpYyBPcHRpb25TZXQ8SW50ZXJmYWNlPiBpbnRlcmZhY2VzRm9yT2JqZWN0KEFYQ29yZU9iamVj
dCYpOworCisgICAgc3RhdGljIEdEQnVzSW50ZXJmYWNlVlRhYmxlIHNfYWNjZXNzaWJsZUZ1bmN0
aW9uczsKKworICAgIEFYQ29yZU9iamVjdCogbV9heE9iamVjdCB7IG51bGxwdHIgfTsKKyAgICBB
WENvcmVPYmplY3QqIG1fY29yZU9iamVjdCB7IG51bGxwdHIgfTsKKyAgICBPcHRpb25TZXQ8SW50
ZXJmYWNlPiBtX2ludGVyZmFjZXM7CisgICAgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSogbV9yb290
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9yb290TG9jaykgeyBudWxscHRyIH07CisgICAgc3RkOjpv
cHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPiBtX3BhcmVudDsKKyAgICBBdG9taWM8
Ym9vbD4gbV9pc1JlZ2lzdGVyZWQgeyBmYWxzZSB9OworICAgIFN0cmluZyBtX3BhdGg7CisgICAg
bXV0YWJsZSBpbnQgbV9pbmRleEluUGFyZW50IHsgLTEgfTsKKyAgICBtdXRhYmxlIExvY2sgbV9y
b290TG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRz
cGkuY3BwCmluZGV4IGEwYjk0ODg2MWUyZC4uODJiNTc4OTJjNGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaS5jcHAKQEAgLTIxLDcgKzIxLDExIEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaS5oIgogCiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKKyNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpRW51
bXMuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGlJbnRlcmZhY2VzLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBA
IC00NCwxMCArNDgsOSBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5Um9vdEF0
c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBb
XShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciogc2VuZGVyLCBjb25zdCBnY2hhciosIGNv
bnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJz
LCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KICAgICAgICAgYXV0
byYgcm9vdE9iamVjdCA9ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4odXNl
ckRhdGEpOwogICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Um9sZSIpKQot
ICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0
aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCAwKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9k
X2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIih1KSIs
IEF0c3BpOjpSb2xlOjpGaWxsZXIpKTsKICAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRo
b2ROYW1lLCAiR2V0Um9sZU5hbWUiKSkKICAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2Nh
dGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlvbiwgZ192YXJpYW50X25ldygiKHMpIiwgImZpbGxl
ciIpKTsKICAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0TG9jYWxp
emVkUm9sZU5hbWUiKSkKQEAgLTY0LDkgKzY3LDEwIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9IHsKICNlbmRpZgog
ICAgICAgICAgICAgR1ZhcmlhbnRCdWlsZGVyIGJ1aWxkZXIgPSBHX1ZBUklBTlRfQlVJTERFUl9J
TklUKEdfVkFSSUFOVF9UWVBFKCIoYXUpIikpOwogCisgICAgICAgICAgICB1aW50NjRfdCBhdHNw
aVN0YXRlcyA9IChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgQXRzcGk6OlN0YXRlOjpNYW5hZ2Vz
RGVzY2VuZGFudHMpOwogICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfb3BlbigmYnVpbGRl
ciwgR19WQVJJQU5UX1RZUEUoImF1IikpOwotICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJf
YWRkKCZidWlsZGVyLCAidSIsIDApOwotICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KCZidWlsZGVyLCAidSIsIDApOworICAgICAgICAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKCZi
dWlsZGVyLCAidSIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihhdHNwaVN0YXRlcyAmIDB4ZmZmZmZm
ZmYpKTsKKyAgICAgICAgICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgInUiLCBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oYXRzcGlTdGF0ZXMgPj4gMzIpKTsKICAgICAgICAgICAgIGdf
dmFyaWFudF9idWlsZGVyX2Nsb3NlKCZidWlsZGVyKTsKIAogICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfYnVpbGRl
cl9lbmQoJmJ1aWxkZXIpKTsKQEAgLTg0LDEwICs4OCwyNiBAQCBHREJ1c0ludGVyZmFjZVZUYWJs
ZSBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAg
ICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24s
IGdfdmFyaWFudF9idWlsZGVyX2VuZCgmYnVpbGRlcikpOwogICAgICAgICB9IGVsc2UgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEFwcGxpY2F0aW9uIikpCiAgICAgICAgICAgICBnX2Ri
dXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9u
ZXcoIihAKHNvKSkiLCByb290T2JqZWN0LmFwcGxpY2F0aW9uUmVmZXJlbmNlKCkpKTsKLSAgICAg
ICAgZWxzZSBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0Q2hpbGRBdEluZGV4IikpCisg
ICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldENoaWxkQXRJbmRleCIp
KSB7CisgICAgICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBh
cmFtZXRlcnMsICIoaSkiLCAmaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbmRleCkgeworICAg
ICAgICAgICAgICAgIGF1dG8qIGNoaWxkID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZy
b21NYWluVGhyZWFkPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFsmcm9vdE9iamVjdF0oKSAt
PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJvb3RPYmplY3QuY2hpbGQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0
aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoQChzbykpIiwgY2hp
bGQtPnJlZmVyZW5jZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9j
YXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihAKHNvKSkiLCBy
b290T2JqZWN0LmF0c3BpKCkubnVsbFJlZmVyZW5jZSgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFn
X3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldENoaWxkcmVuIikpIHsKKyAgICAgICAgfSBlbHNlIGlm
ICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJHZXRDaGlsZHJlbiIpKSB7CiAgICAgICAgICAgICBH
VmFyaWFudEJ1aWxkZXIgYnVpbGRlciA9IEdfVkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5U
X1RZUEUoImEoc28pIikpOworICAgICAgICAgICAgYXV0byogY2hpbGQgPSBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4o
WyZyb290T2JqZWN0XSgpIC0+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogeworICAgICAgICAg
ICAgICAgIHJldHVybiByb290T2JqZWN0LmNoaWxkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQo
JmJ1aWxkZXIsICJAKHNvKSIsIGNoaWxkLT5yZWZlcmVuY2UoKSk7CiAgICAgICAgICAgICBnX2Ri
dXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9u
ZXcoIihhKHNvKSkiLCAmYnVpbGRlcikpOwogICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
bWV0aG9kTmFtZSwgIkdldEluZGV4SW5QYXJlbnQiKSkgewogICAgICAgICAgICAgZ19kYnVzX21l
dGhvZF9pbnZvY2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIo
aSkiLCAwKSk7CkBAIC0xMDIsOSArMTIyLDggQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0gewogICAgICAgICB9CiAg
ICAgfSwKICAgICAvLyBnZXRfcHJvcGVydHkKLSAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBnY2hhciogc2VuZGVyLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIq
IHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFy
aWFudCogeworICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2No
YXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVy
cm9yLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR1ZhcmlhbnQqIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQogICAgICAgICBhdXRvJiByb290T2JqZWN0ID0gKnN0
YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlSb290QXRzcGkqPih1c2VyRGF0YSk7CiAgICAgICAgIGlm
ICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIk5hbWUiKSkKICAgICAgICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfbmV3X3N0cmluZygiIik7CkBAIC0xMTYsOCArMTM1LDEyIEBAIEdEQnVzSW50ZXJm
YWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9
IHsKICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIik7CiAgICAgICAg
IGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIlBhcmVudCIpKQogICAgICAgICAgICAgcmV0
dXJuIGdfdmFyaWFudF9uZXcoIihzbykiLCByb290T2JqZWN0Lm1fcGFyZW50VW5pcXVlTmFtZS51
dGY4KCkuZGF0YSgpLCByb290T2JqZWN0Lm1fcGFyZW50UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgaWYgKCFnX3N0cmNtcDAocHJvcGVydHlOYW1lLCAiQ2hpbGRDb3VudCIpKQotICAgICAg
ICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIoMCk7CisgICAgICAgIGlmICghZ19zdHJj
bXAwKHByb3BlcnR5TmFtZSwgIkNoaWxkQ291bnQiKSkgeworICAgICAgICAgICAgYXV0byBjaGls
ZENvdW50ID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGludDMy
X3Q+KFsmcm9vdE9iamVjdF0oKSAtPiBpbnQzMl90IHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cm9vdE9iamVjdC5jaGlsZCgpID8gMSA6IDA7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3X2ludDMyKGNoaWxkQ291bnQpOworICAgICAgICB9CiAKICAg
ICAgICAgZ19zZXRfZXJyb3IoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBP
UlRFRCwgIlVua25vd24gcHJvcGVydHkgJyVzJyIsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwpAQCAtMTM2LDYgKzE1OSwxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSb290
QXRzcGk6OnJlZ2lzdGVyT2JqZWN0KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5n
JgogICAgIG1fYXRzcGkucmVnaXN0ZXJSb290KCp0aGlzLCBXVEZNb3ZlKGludGVyZmFjZXMpLCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVJvb3RB
dHNwaTo6dW5yZWdpc3Rlck9iamVjdCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIG1fYXRzcGkudW5yZWdpc3RlclJvb3QoKnRoaXMpOworfQorCiB2b2lkIEFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OnNldFBhdGgoU3RyaW5nJiYgcGF0aCkKIHsKICAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwpAQCAtMTYyLDYgKzE5MSw2NiBAQCBHVmFyaWFu
dCogQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6cmVmZXJlbmNlKCkgY29uc3QKICAgICByZXR1cm4g
Z192YXJpYW50X25ldygiKHNvKSIsIG1fYXRzcGkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgp
LmRhdGEoKSk7CiB9CiAKK0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaTo6Y2hpbGQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisg
ICAgICAgIEFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKKworICAgIGlmICgh
bV9wYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZnJhbWUuZG9jdW1l
bnQoKS0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgQVhDb3JlT2JqZWN0KiByb290T2JqZWN0ID0gY2FjaGUtPnJvb3RPYmpl
Y3QoKTsKKyAgICBpZiAoIXJvb3RPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byogd3JhcHBlciA9IHJvb3RPYmplY3QtPndyYXBwZXIoKTsKKyAgICBpZiAoIXdyYXBw
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgd3JhcHBlci0+c2V0Um9vdChjb25z
dF9jYXN0PEFjY2Vzc2liaWxpdHlSb290QXRzcGkqPih0aGlzKSk7CisgICAgd3JhcHBlci0+c2V0
UGFyZW50KG51bGxwdHIpOyAvLyBudWxscHRyIHBhcmVudCBtZWFucyByb290LgorCisgICAgcmV0
dXJuIHdyYXBwZXI7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c2VyaWFsaXpl
KEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHNv
KSIsIG1fYXRzcGkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICIoc28pIiwgbV9wYXJlbnRVbmlxdWVOYW1lLnV0
ZjgoKS5kYXRhKCksICIvb3JnL2ExMXkvYXRzcGkvYWNjZXNzaWJsZS9yb290Iik7CisgICAgZ192
YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICIoc28pIiwgbV9wYXJlbnRVbmlxdWVOYW1lLnV0
ZjgoKS5kYXRhKCksIG1fcGFyZW50UGF0aC51dGY4KCkuZGF0YSgpKTsKKworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZChidWlsZGVyLCAiaSIsIDApOworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZChidWlsZGVyLCAiaSIsIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVh
ZDxpbnQzMl90PihbdGhpc10oKSAtPiBpbnQzMl90IHsKKyAgICAgICAgcmV0dXJuIGNoaWxkKCkg
PyAxIDogMDsKKyAgICB9KSk7CisKKyAgICBHVmFyaWFudEJ1aWxkZXIgaW50ZXJmYWNlcyA9IEdf
VkFSSUFOVF9CVUlMREVSX0lOSVQoR19WQVJJQU5UX1RZUEUoImFzIikpOworICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZCgmaW50ZXJmYWNlcywgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZh
Y2UubmFtZSk7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAYXMiLCBnX3Zh
cmlhbnRfbmV3KCJhcyIsICZpbnRlcmZhY2VzKSk7CisKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9h
ZGQoYnVpbGRlciwgInMiLCAiIik7CisKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRl
ciwgInUiLCBBdHNwaTo6Um9sZTo6RmlsbGVyKTsKKworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZChidWlsZGVyLCAicyIsICIiKTsKKworICAgIEdWYXJpYW50QnVpbGRlciBzdGF0ZXMgPSBHX1ZB
UklBTlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhdSIpKTsKKyAgICB1aW50NjRfdCBh
dHNwaVN0YXRlcyA9IChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgQXRzcGk6OlN0YXRlOjpNYW5h
Z2VzRGVzY2VuZGFudHMpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmc3RhdGVzLCAidSIs
IHN0YXRpY19jYXN0PHVpbnQzMl90PihhdHNwaVN0YXRlcyAmIDB4ZmZmZmZmZmYpKTsKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQoJnN0YXRlcywgInUiLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
YXRzcGlTdGF0ZXMgPj4gMzIpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwg
IkBhdSIsIGdfdmFyaWFudF9idWlsZGVyX2VuZCgmc3RhdGVzKSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRT
UEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlSb290QXRzcGkuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5oCmluZGV4IDQwNmRhMTA2MTBkYy4uZWMxOWJlMWJmMGE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlSb290QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3Bp
L0FjY2Vzc2liaWxpdHlSb290QXRzcGkuaApAQCAtMzgsMTIgKzM4LDE4IEBAIHB1YmxpYzoKICAg
ICB+QWNjZXNzaWJpbGl0eVJvb3RBdHNwaSgpID0gZGVmYXVsdDsKIAogICAgIHZvaWQgcmVnaXN0
ZXJPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CisgICAg
dm9pZCB1bnJlZ2lzdGVyT2JqZWN0KCk7CiAgICAgdm9pZCBzZXRQYXRoKFN0cmluZyYmKTsKICAg
ICB2b2lkIHNldFBhcmVudFBhdGgoU3RyaW5nJiYpOwogCisgICAgY29uc3QgU3RyaW5nJiBwYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CisgICAgY29uc3QgU3RyaW5nJiBwYXJlbnRVbmlx
dWVOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRVbmlxdWVOYW1lOyB9CiAgICAgR1Zhcmlh
bnQqIHJlZmVyZW5jZSgpIGNvbnN0OwogICAgIEdWYXJpYW50KiBhcHBsaWNhdGlvblJlZmVyZW5j
ZSgpIGNvbnN0OwogICAgIEFjY2Vzc2liaWxpdHlBdHNwaSYgYXRzcGkoKSBjb25zdCB7IHJldHVy
biBtX2F0c3BpOyB9CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBjaGlsZCgpIGNvbnN0
OworCisgICAgdm9pZCBzZXJpYWxpemUoR1ZhcmlhbnRCdWlsZGVyKikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaShjb25zdCBQYWdlJiwgQWNjZXNzaWJpbGl0
eUF0c3BpJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xh
dGVkdHJlZS9hdHNwaS9BWElzb2xhdGVkT2JqZWN0QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvYXRzcGkvQVhJc29sYXRlZE9iamVjdEF0c3BpLmNw
cAppbmRleCA5ZDNkZDBjMjQ3OTMuLjcxY2UxMTdmZjZiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvYXRzcGkvQVhJc29sYXRlZE9iamVjdEF0
c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9h
dHNwaS9BWElzb2xhdGVkT2JqZWN0QXRzcGkuY3BwCkBAIC0zMSwxMSArMzEsMTMgQEAgdm9pZCBB
WElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplUGxhdGZvcm1Qcm9wZXJ0aWVzKGNvbnN0IEFYQ29y
ZU9iamVjdCYsIGJvb2wpCiAKIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXR0YWNoUGxhdGZvcm1X
cmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQogeworICAgIHdyYXBw
ZXItPmF0dGFjaCh0aGlzKTsKICAgICBzZXRXcmFwcGVyKHdyYXBwZXIpOwogfQogCi12b2lkIEFY
SXNvbGF0ZWRPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNo
bWVudFR5cGUgZGV0YWNobWVudFR5cGUpCit2b2lkIEFYSXNvbGF0ZWRPYmplY3Q6OmRldGFjaFBs
YXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCiB7CisgICAgd3JhcHBl
cigpLT5kZXRhY2goKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4
NWJhY2JkODU5Y2UuLjQ2NmZjZDkzYzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAy
MS0wOS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dUS11bYTExeV0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYWNjZXNzaWJs
ZSBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtRGV0YWNoKTog
VW5yZWdpc3RlciB0aGUgcGFnZSBhY2Nlc3NpYmxlIG9iamVjdC4KKwogMjAyMS0wOS0zMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11b
YTExeV0gQ29ubmVjdCBVSSBwcm9jZXNzIGExMXkgdHJlZSB3aXRoIHRoZSB3ZWIgcHJvY2VzcyB3
aGVuIGJ1aWxkaW5nIHdpdGggQVRTUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAppbmRleCBhODlkZGZiZmNlNWIuLmUzNTA2NmYz
NTM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
YlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcApAQCAtOTEsNiArOTEsMTAgQEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybVJl
aW5pdGlhbGl6ZSgpCiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EZXRhY2goKQogeworI2lmIFVT
RShBVFNQSSkKKyAgICBpZiAobV9hY2Nlc3NpYmlsaXR5Um9vdE9iamVjdCkKKyAgICAgICAgbV9h
Y2Nlc3NpYmlsaXR5Um9vdE9iamVjdC0+dW5yZWdpc3Rlck9iamVjdCgpOworI2VuZGlmCiB9CiAK
IGJvb2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdl
YktleWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNDBiZDI5OGU5ODkxLi4wZjA3ZGFiYjZlMGYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNiBAQAorMjAyMS0wOS0zMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS11bYTExeV0gQWRkIGluaXRpYWwgaW1wbGVtZW50YXRpb24g
b2YgYWNjZXNzaWJsZSBpbnRlcmZhY2Ugd2hlbiBidWlsZGluZyB3aXRoIEFUU1BJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzAyNTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgbW9yZSB1bml0IHRl
c3RzIGZvciB0aGUgYWNjZXNzaWJsZSBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eS5jcHA6CisgICAgICAg
IChBdHNwaUV2ZW50RGVsZXRlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5VGVzdDo6c3RhcnRFdmVudE1vbml0b3IpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRl
c3Q6OnN0b3BFdmVudE1vbml0b3IpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRl
U2V0U2l6ZSk6CisgICAgICAgICh0ZXN0QWNjZXNzaWJsZUJhc2ljSGllcmFyY2h5KToKKyAgICAg
ICAgKHRlc3RBY2Nlc3NpYmxlSWdub3JlZE9iamVjdHMpOgorICAgICAgICAodGVzdEFjY2Vzc2li
bGVDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAodGVzdEFjY2Vzc2libGVBdHRyaWJ1dGVzKToK
KyAgICAgICAgKHRlc3RBY2Nlc3NpYmxlU3RhdGUpOgorICAgICAgICAodGVzdEFjY2Vzc2libGVT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKHRlc3RBdHNwaUJh
c2ljSGllcmFyY2h5KTogRGVsZXRlZC4KKwogMjAyMS0wOS0yOSAgQWxleCBDaHJpc3RlbnNlbiAg
PGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFRlcm1pbmF0ZSBQQ00gZGFlbW9u
IGJlZm9yZSBhbmQgYWZ0ZXIgdW5pdCB0ZXN0IHRoYXQgdXNlcyBpdApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHku
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vz
c2liaWxpdHkuY3BwCmluZGV4IDFhNDU2YjgwZDM4MS4uNTAxNTFiMzZiMzY3IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNjZXNzaWJp
bGl0eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdl
YktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0yMCwxMiArMjAsMjIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKIAogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL01vbm90b25p
Y1RpbWUuaD4KIAogLy8gVGhlIGxpYmF0c3BpIGhlYWRlcnMgZG9uJ3QgdXNlIEdfQkVHSU5fREVD
TFMKIGV4dGVybiAiQyIgewogI2luY2x1ZGUgPGF0c3BpL2F0c3BpLmg+CiB9CiAKK3N0cnVjdCBB
dHNwaUV2ZW50RGVsZXRlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEF0c3BpRXZlbnQqIGV2ZW50
KSBjb25zdAorICAgIHsKKyAgICAgICAgZ19ib3hlZF9mcmVlKEFUU1BJX1RZUEVfRVZFTlQsIGV2
ZW50KTsKKyAgICB9Cit9OworCit1c2luZyBVbmlxdWVBdHNwaUV2ZW50ID0gc3RkOjp1bmlxdWVf
cHRyPEF0c3BpRXZlbnQsIEF0c3BpRXZlbnREZWxldGVyPjsKKwogY2xhc3MgQWNjZXNzaWJpbGl0
eVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNU
X0ZJWFRVUkUoQWNjZXNzaWJpbGl0eVRlc3QpOwpAQCAtODgsMTEgKzk4LDUwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9ldmVudFNvdXJjZSA9IG51bGxwdHI7CiAgICAgfQogCisgICAgdm9pZCBzdGFy
dEV2ZW50TW9uaXRvcihBdHNwaUFjY2Vzc2libGUqIHNvdXJjZSwgY29uc3QgVmVjdG9yPGNvbnN0
IGNoYXIqPiYgZXZlbnRzKQorICAgIHsKKyAgICAgICAgbV9ldmVudE1vbml0b3Iuc291cmNlID0g
c291cmNlOworICAgICAgICBtX2V2ZW50TW9uaXRvci5saXN0ZW5lciA9IGFkb3B0R1JlZihhdHNw
aV9ldmVudF9saXN0ZW5lcl9uZXcoW10oQXRzcGlFdmVudCogZXZlbnQsIGdwb2ludGVyIHVzZXJE
YXRhKSB7CisgICAgICAgICAgICBhdXRvKiB0ZXN0ID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBpZiAoZXZlbnQtPnNvdXJjZSA9PSB0ZXN0
LT5tX2V2ZW50TW9uaXRvci5zb3VyY2UpCisgICAgICAgICAgICAgICAgdGVzdC0+bV9ldmVudE1v
bml0b3IuZXZlbnRzLmFwcGVuZChzdGF0aWNfY2FzdDxBdHNwaUV2ZW50Kj4oZ19ib3hlZF9jb3B5
KEFUU1BJX1RZUEVfRVZFTlQsIGV2ZW50KSkpOworICAgICAgICB9LCB0aGlzLCBudWxscHRyKSk7
CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvKiBldmVudCA6IGV2ZW50cykKKyAgICAgICAgICAg
IGF0c3BpX2V2ZW50X2xpc3RlbmVyX3JlZ2lzdGVyKG1fZXZlbnRNb25pdG9yLmxpc3RlbmVyLmdl
dCgpLCBldmVudCwgbnVsbHB0cik7CisgICAgfQorCisgICAgVmVjdG9yPFVuaXF1ZUF0c3BpRXZl
bnQ+IHN0b3BFdmVudE1vbml0b3IodW5zaWduZWQgZXhwZWN0ZWRFdmVudHMsIHN0ZDo6b3B0aW9u
YWw8U2Vjb25kcz4gdGltZW91dCA9IHN0ZDo6bnVsbG9wdCkKKyAgICB7CisgICAgICAgIC8vIElm
IGV2ZW50cyBpcyBlbXB0eSB3YWl0IGZvciB0aGUgZXZlbnRzLgorICAgICAgICBhdXRvIHN0YXJ0
VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOworICAgICAgICB3aGlsZSAobV9ldmVudE1vbml0
b3IuZXZlbnRzLnNpemUoKSA8IGV4cGVjdGVkRXZlbnRzICYmIE1vbm90b25pY1RpbWU6Om5vdygp
IC0gc3RhcnRUaW1lIDwgdGltZW91dC52YWx1ZV9vcihTZWNvbmRzOjppbmZpbml0eSgpKSkKKyAg
ICAgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihudWxscHRyLCB0aW1lb3V0ID8gRkFM
U0UgOiBUUlVFKTsKKworICAgICAgICBhdXRvIGV2ZW50cyA9IFdURk1vdmUobV9ldmVudE1vbml0
b3IuZXZlbnRzKTsKKyAgICAgICAgbV9ldmVudE1vbml0b3IgPSB7IG51bGxwdHIsIHsgfSwgbnVs
bHB0ciB9OworICAgICAgICByZXR1cm4gZXZlbnRzOworICAgIH0KKworICAgIHN0YXRpYyB1bnNp
Z25lZCBzdGF0ZVNldFNpemUoQXRzcGlTdGF0ZVNldCogc3RhdGVTZXQpCisgICAgeworICAgICAg
ICBHQXJyYXkqIHN0YXRlcyA9IGF0c3BpX3N0YXRlX3NldF9nZXRfc3RhdGVzKHN0YXRlU2V0KTsK
KyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RhdGVzLT5sZW47CisgICAgICAgIGdfYXJyYXlf
ZnJlZShzdGF0ZXMsIFRSVUUpOworICAgICAgICByZXR1cm4gbGVuZ3RoOworICAgIH0KKwogcHJp
dmF0ZToKICAgICBBdHNwaUFjY2Vzc2libGUqIG1fZXZlbnRTb3VyY2UgeyBudWxscHRyIH07CisK
KyAgICBzdHJ1Y3QgeworICAgICAgICBHUmVmUHRyPEF0c3BpRXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXI7CisgICAgICAgIFZlY3RvcjxVbmlxdWVBdHNwaUV2ZW50PiBldmVudHM7CisgICAgICAgIEF0
c3BpQWNjZXNzaWJsZSogc291cmNlIHsgbnVsbHB0ciB9OworICAgIH0gbV9ldmVudE1vbml0b3I7
CiB9OwogCi1zdGF0aWMgdm9pZCB0ZXN0QXRzcGlCYXNpY0hpZXJhcmNoeShBY2Nlc3NpYmlsaXR5
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3N0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQmFz
aWNIaWVyYXJjaHkoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAg
ICAgdGVzdC0+c2hvd0luV2luZG93KCk7CiAgICAgdGVzdC0+bG9hZEh0bWwoCkBAIC0xNTIsOSAr
MjAxLDE1IEBAIHN0YXRpYyB2b2lkIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KEFjY2Vzc2liaWxp
dHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICAiICA8L2JvZHk+IgogICAgICAg
ICAiPC9odG1sPiIsCiAgICAgICAgIG51bGxwdHIpOworI2lmIFVTRShBVFNQSSkKKyAgICAvLyBJ
biBhdHNwaSBpbXBsZW1lbnRhdGlvbiB0aGUgcm9vdCBvYmplY3QgZG9lc24ndCBlbWl0IGNoaWxk
cmVuLWNoYW5nZWQgYmVjYXVzZSBpdAorICAgIC8vIGFsd2F5cyBoYXMgTWFuYWdlc0Rlc2NlbmRh
bnRzIGluIHN0YXRlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworI2Vsc2UK
ICAgICAvLyBDaGVjayB0aGF0IGNoaWxkcmVuLWNoYW5nZWQ6OnJlbW92ZSBpcyBlbWl0dGVkIG9u
IHRoZSByb290IG9iamVjdCBvbiBuYXZpZ2F0aW9uLAogICAgIC8vIGFuZCB0aGUgYTExeSBoaWVy
YXJjaHkgaXMgdXBkYXRlZC4KICAgICB0ZXN0LT53YWl0VW50aWxDaGlsZHJlblJlbW92ZWQocm9v
dE9iamVjdC5nZXQoKSk7CisjZW5kaWYKIAogICAgIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERv
Y3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUND
RVNTSUJMRShkb2N1bWVudFdlYi5nZXQoKSkpOwpAQCAtMTc1LDkgKzIzMCw0OTYgQEAgc3RhdGlj
IHZvaWQgdGVzdEF0c3BpQmFzaWNIaWVyYXJjaHkoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3Jv
bGUoaW1nLmdldCgpLCBudWxscHRyKSwgPT0sIEFUU1BJX1JPTEVfSU1BR0UpOwogfQogCitzdGF0
aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZUlnbm9yZWRPYmplY3RzKEFjY2Vzc2liaWxpdHlUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvdygpOworICAgIHRl
c3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+IgorICAgICAgICAiICA8Ym9keT4iCisgICAg
ICAgICIgICAgPGRpdj4iCisgICAgICAgICIgICAgICA8cD5TdGF0aWMgdGV4dCBub2RlcyBhcmUg
aWdub3JlZCwgc28gdGhpcyBwYXJhZ3JhcGggc2hvdWxkbid0IGhhdmUgYSBjaGlsZDwvcD4iCisg
ICAgICAgICIgICAgPC9kaXY+IgorICAgICAgICAiICA8L2JvZHk+IgorICAgICAgICAiPC9odG1s
PiIsCisgICAgICAgIG51bGxwdHIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgYXV0byB0ZXN0QXBwID0gdGVzdC0+ZmluZFRlc3RBcHBsaWNhdGlvbigpOworICAg
IGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0ZXN0QXBwLmdldCgpKSk7CisKKyAg
ICBhdXRvIGRvY3VtZW50V2ViID0gdGVzdC0+ZmluZERvY3VtZW50V2ViKHRlc3RBcHAuZ2V0KCkp
OworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShkb2N1bWVudFdlYi5nZXQo
KSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3Vu
dChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAxKTsKKworICAgIGF1dG8gcCA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5n
ZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJM
RShwLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3Jv
bGUocC5nZXQoKSwgbnVsbHB0ciksID09LCBBVFNQSV9ST0xFX1BBUkFHUkFQSCk7CisgICAgZ19h
c3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KHAuZ2V0KCksIG51
bGxwdHIpLCA9PSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQ2hpbGRyZW5D
aGFuZ2VkKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworI2lmICFV
U0UoQVRTUEkpCisgICAgZ190ZXN0X3NraXAoIlRoaXMgdGVzdCBkb2Vzbid0IHdvcmsgd2l0aCBB
VEsiKTsKKyNlbHNlCisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7CisgICAgdGVzdC0+bG9hZEh0
bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIKKyAgICAgICAgIiAgICA8
ZGl2IGlkPSdncmFuZHBhcmVudCc+IgorICAgICAgICAiICAgICAgPGRpdiBpZD0ncGFyZW50Jz4i
CisgICAgICAgICIgICAgICAgIDxwPkZvbzwvcD48cD5CYXI8L3A+IgorICAgICAgICAiICAgICAg
PC9kaXY+IgorICAgICAgICAiICAgIDwvZGl2PiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAg
ICAgIjwvaHRtbD4iLAorICAgICAgICBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2Fk
RmluaXNoZWQoKTsKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRp
b24oKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQo
KSkpOworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0
QXBwLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1l
bnRXZWIuZ2V0KCkpKTsKKyAgICAvLyBUaGUgZGl2cyBhcmUgbm90IGV4cG9zZWQgdG8gQVRzLgor
ICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1
bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAyKTsKKworICAgIGF1dG8gZm9vID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgp
LCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGZv
by5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGls
ZF9jb3VudChmb28uZ2V0KCksIG51bGxwdHIpLCA9PSwgMCk7CisKKyAgICBhdXRvIGJhciA9IGFk
b3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5n
ZXQoKSwgMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJM
RShiYXIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfY291bnQoYmFyLmdldCgpLCBudWxscHRyKSwgPT0sIDApOworCisgICAgLy8gQWRkIGEg
bmV3IHBhcmFncmFwaC4KKyAgICB0ZXN0LT5zdGFydEV2ZW50TW9uaXRvcihkb2N1bWVudFdlYi5n
ZXQoKSwgeyAib2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQ6YWRkIiwgIm9iamVjdDpjaGlsZHJlbi1j
aGFuZ2VkOnJlbW92ZSIgfSk7CisgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTsgcC5pbm5lclRleHQg
PSAnQmF6JzsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcmVudCcpLmFwcGVuZENoaWxkKHAp
OyIsIG51bGxwdHIpOworICAgIGF1dG8gZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigx
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fz
c2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDpjaGlsZHJlbi1jaGFuZ2Vk
OmFkZCIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgMik7
IC8vIE5ldyBub2RlIGFkZGVkIHRvIHBvc2l0aW9uIDIuCisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZB
TFVFX0hPTERTX09CSkVDVCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGF1dG8gYmF6ID0g
YWRvcHRHUmVmKHN0YXRpY19jYXN0PEF0c3BpQWNjZXNzaWJsZSo+KGdfdmFsdWVfZHVwX29iamVj
dCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FD
Q0VTU0lCTEUoYmF6LmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X3JvbGUoYmF6LmdldCgpLCBudWxscHRyKSwgPT0sIEFUU1BJX1JPTEVfUEFSQUdSQVBI
KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3BhcmVudChiYXouZ2V0
KCksIG51bGxwdHIpID09IGRvY3VtZW50V2ViLmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxw
dHIpLCA9PSwgMyk7CisgICAgR1JlZlB0cjxBdHNwaUFjY2Vzc2libGU+IGNoaWxkID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgp
LCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShmb28uZ2V0KCkgPT0gY2hpbGQuZ2V0
KCkpOworICAgIGNoaWxkID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0
X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShiYXIuZ2V0KCkgPT0gY2hpbGQuZ2V0KCkpOworICAgIGNoaWxkID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAyLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShiYXouZ2V0KCkgPT0gY2hpbGQuZ2V0KCkpOworICAg
IGNoaWxkID0gbnVsbHB0cjsKKyAgICBldmVudHMgPSB7IH07CisKKyAgICAvLyBSZW1vdmUgb25l
IG9mIHRoZSBwYXJhZ3JhcGhzLgorICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRvY3VtZW50
V2ViLmdldCgpLCB7ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDphZGQiLCAib2JqZWN0OmNoaWxk
cmVuLWNoYW5nZWQ6cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVu
dGlsRmluaXNoZWQoImxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFyZW50Jyk7
IGRpdi5yZW1vdmVDaGlsZChkaXYuY2hpbGRyZW5bMF0pOyIsIG51bGxwdHIpOworICAgIGV2ZW50
cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVu
dHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwg
PT0sICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDpyZW1vdmUiKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGV2ZW50c1swXS0+ZGV0YWlsMSwgPT0sIDApOyAvLyBSZW1vdmUgbm9kZSB3YXMgYXQgcG9z
aXRpb24gMC4KKyAgICBnX2Fzc2VydF90cnVlKEdfVkFMVUVfSE9MRFNfT0JKRUNUKCZldmVudHNb
MF0tPmFueV9kYXRhKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShnX3ZhbHVlX2dldF9vYmplY3QoJmV2
ZW50c1swXS0+YW55X2RhdGEpID09IGZvby5nZXQoKSk7CisgICAgR1JlZlB0cjxBdHNwaVN0YXRl
U2V0PiBzZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGZvby5n
ZXQoKSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHNldC5n
ZXQoKSwgQVRTUElfU1RBVEVfREVGVU5DVCkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9jaGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09
LCAyKTsKKyAgICBjaGlsZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9h
dF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3Ry
dWUoYmFyLmdldCgpID09IGNoaWxkLmdldCgpKTsKKyAgICBjaGlsZCA9IGFkb3B0R1JlZihhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdlYi5nZXQoKSwgMSwgbnVs
bHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoYmF6LmdldCgpID09IGNoaWxkLmdldCgpKTsKKyAg
ICBjaGlsZCA9IG51bGxwdHI7CisgICAgZXZlbnRzID0geyB9OworCisgICAgLy8gQ2hhbmdpbmcg
cm9sZSBjYXVzZXMgYW4gaW50ZXJuYWwgZGV0YWNoICsgYXR0YWNoIHRoYXQgc2hvdWxkbid0IGJl
IGV4cG9zZWQgdG8gQVRzLgorICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGRvY3VtZW50V2Vi
LmdldCgpLCB7ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDphZGQiLCAib2JqZWN0OmNoaWxkcmVu
LWNoYW5nZWQ6cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKS5jaGlsZHJlblswXS5y
b2xlPSdidXR0b24nIiwgbnVsbHB0cik7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9u
aXRvcigwLCAwLjVfcyk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwg
MCk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3JvbGUoYmFyLmdl
dCgpLCBudWxscHRyKSwgPT0sIEFUU1BJX1JPTEVfUFVTSF9CVVRUT04pOworICAgIGV2ZW50cyA9
IHsgfTsKKworICAgIC8vIFJlbW92ZSB0aGUgY29udGFpbmVyLgorICAgIHRlc3QtPnN0YXJ0RXZl
bnRNb25pdG9yKGRvY3VtZW50V2ViLmdldCgpLCB7ICJvYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZDph
ZGQiLCAib2JqZWN0OmNoaWxkcmVuLWNoYW5nZWQ6cmVtb3ZlIiB9KTsKKyAgICB0ZXN0LT5ydW5K
YXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdn
cmFuZHBhcmVudCcpLnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQn
KSk7IiwgbnVsbHB0cik7CisgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2ZW50TW9uaXRvcigyKTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDpjaGlsZHJlbi1jaGFuZ2VkOnJl
bW92ZSIpOworICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMV0tPnR5cGUsID09LCAib2JqZWN0
OmNoaWxkcmVuLWNoYW5nZWQ6cmVtb3ZlIik7CisgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hP
TERTX09CSkVDVCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOworICAgIGdfYXNzZXJ0X3RydWUoR19W
QUxVRV9IT0xEU19PQkpFQ1QoJmV2ZW50c1sxXS0+YW55X2RhdGEpKTsKKyAgICBnX2Fzc2VydF90
cnVlKGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkgPT0gYmFyLmdldCgp
IHx8IGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkgPT0gYmF6LmdldCgp
KTsKKyAgICBnX2Fzc2VydF90cnVlKGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzFdLT5hbnlf
ZGF0YSkgPT0gYmFyLmdldCgpIHx8IGdfdmFsdWVfZ2V0X29iamVjdCgmZXZlbnRzWzFdLT5hbnlf
ZGF0YSkgPT0gYmF6LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKGdfdmFsdWVfZ2V0X29iamVj
dCgmZXZlbnRzWzBdLT5hbnlfZGF0YSkgIT0gZ192YWx1ZV9nZXRfb2JqZWN0KCZldmVudHNbMV0t
PmFueV9kYXRhKSk7CisgICAgc2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3N0
YXRlX3NldChiYXIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0RFRlVOQ1QpKTsKKyAgICBzZXQgPSBhZG9w
dEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGJhei5nZXQoKSkpOworICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHNldC5nZXQoKSwgQVRTUElfU1RB
VEVfREVGVU5DVCkpOworICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9hY2Nlc3NpYmxlX2dldF9j
aGlsZF9jb3VudChkb2N1bWVudFdlYi5nZXQoKSwgbnVsbHB0ciksID09LCAwKTsKKyNlbmRpZgor
fQorCitzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZUF0dHJpYnV0ZXMoQWNjZXNzaWJpbGl0eVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2luZG93KCk7Cisg
ICAgdGVzdC0+bG9hZEh0bWwoCisgICAgICAgICI8aHRtbD4iCisgICAgICAgICIgIDxib2R5PiIK
KyAgICAgICAgIiAgICA8aDI+SGVhZGluZyBsZXZlbCAyPC9oMj4iCisgICAgICAgICIgICAgPGEg
aWQ9XCJ3ZWJraXRndGtcIiBocmVmPVwiaHR0cDovL3d3dy53ZWJraXRndGsub3JnXCI+QSBsaW5r
PC9hPiIKKyAgICAgICAgIiAgPC9ib2R5PiIKKyAgICAgICAgIjwvaHRtbD4iLAorICAgICAgICBu
dWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworI2lmIFVTRShB
VFNQSSkKKyAgICBzdGF0aWMgY29uc3QgY2hhciogdG9vbGtpdE5hbWUgPSAiV2ViS2l0R1RLIjsK
KyNlbHNlCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHRvb2xraXROYW1lID0gIldlYktpdEd0ayI7
CisjZW5kaWYKKworICAgIGF1dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24o
KTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkp
OworCisgICAgYXV0byBkb2N1bWVudFdlYiA9IHRlc3QtPmZpbmREb2N1bWVudFdlYih0ZXN0QXBw
LmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZG9jdW1lbnRX
ZWIuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfY291bnQoZG9jdW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpLCA9PSwgMik7CisgICAgYXV0byBh
dHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2F0dHJpYnV0ZXMoZG9j
dW1lbnRXZWIuZ2V0KCksIG51bGxwdHIpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3NlcnRf
Y21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwgPT0sIDEpOworI2Vs
c2UKKyAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVzIGRyYWdnZWQgc3RhdGUsIGJ1dCBkcmFnZ2lu
ZyBpcyBub3Qgc3VwcG9ydGVkLgorICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3Np
emUoYXR0cmlidXRlcy5nZXQoKSksID09LCAyKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2NtcHN0
cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVz
LmdldCgpLCAidG9vbGtpdCIpKSwgPT0sIHRvb2xraXROYW1lKTsKKworICAgIGF1dG8gaDIgPSBh
ZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIu
Z2V0KCksIDAsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lC
TEUoaDIuZ2V0KCkpKTsKKyAgICBhdHRyaWJ1dGVzID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2F0dHJpYnV0ZXMoaDIuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgNCk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3Vw
KGF0dHJpYnV0ZXMuZ2V0KCksICJ0b29sa2l0IikpLCA9PSwgdG9vbGtpdE5hbWUpOworICAgIGdf
YXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1
cChhdHRyaWJ1dGVzLmdldCgpLCAiY29tcHV0ZWQtcm9sZSIpKSwgPT0sICJoZWFkaW5nIik7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVf
bG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJsZXZlbCIpKSwgPT0sICIyIik7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0
dHJpYnV0ZXMuZ2V0KCksICJ0YWciKSksID09LCAiaDIiKTsKKworICAgIGF1dG8gc2VjdGlvbiA9
IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1bWVudFdl
Yi5nZXQoKSwgMSwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNT
SUJMRShzZWN0aW9uLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2li
bGVfZ2V0X2NoaWxkX2NvdW50KHNlY3Rpb24uZ2V0KCksIG51bGxwdHIpLCA9PSwgMSk7CisKKyAg
ICBhdXRvIGEgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgo
c2VjdGlvbi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNf
QUNDRVNTSUJMRShhLmdldCgpKSk7CisgICAgYXR0cmlidXRlcyA9IGFkb3B0R1JlZihhdHNwaV9h
Y2Nlc3NpYmxlX2dldF9hdHRyaWJ1dGVzKGEuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgNCk7Cisg
ICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVf
bG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJ0b29sa2l0IikpLCA9PSwgdG9vbGtpdE5hbWUpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxl
X2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiY29tcHV0ZWQtcm9sZSIpKSwgPT0sICJsaW5rIik7
CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiaWQiKSksID09LCAi
d2Via2l0Z3RrIik7CisjZWxzZQorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiaHRtbC1pZCIp
KSwgPT0sICJ3ZWJraXRndGsiKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAi
dGFnIikpLCA9PSwgImEiKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZShB
Y2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93
SW5XaW5kb3coODAwLCA2MDApOworICAgIHRlc3QtPmxvYWRIdG1sKAorICAgICAgICAiPGh0bWw+
IgorICAgICAgICAiICA8Ym9keT4iCisgICAgICAgICIgICAgPGgxPlN0YXRlPC9oMT4iCisgICAg
ICAgICIgICAgPGJ1dHRvbj5CdXR0b248L2J1dHRvbj4iCisgICAgICAgICIgICAgPGJ1dHRvbiBk
aXNhYmxlZD5EaXNhYmxlZDwvYnV0dG9uPiIKKyAgICAgICAgIiAgICA8YnV0dG9uIGFyaWEtcHJl
c3NlZD0ndHJ1ZSc+VG9nZ2xlIGJ1dHRvbjwvYnV0dG9uPiIKKyAgICAgICAgIiAgICA8aW5wdXQg
dHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvJy8+UmFkaW8iCisgICAgICAgICIgICAgPGlucHV0IHR5
cGU9J3JhZGlvJyBuYW1lPSdyYWRpbycgY2hlY2tlZC8+UmFkaW8gQ2hlY2tlZCIKKyAgICAgICAg
IiAgICA8aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9J3JhZGlvJyBkaXNhYmxlZC8+UmFkaW8gZGlz
YWJsZWQiCisgICAgICAgICIgICAgPGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdjaGVjay1k
aXNhYmxlZCcgY2hlY2tlZCBkaXNhYmxlZC8+Q2hlY2tlZCBEaXNhYmxlZCIKKyAgICAgICAgIiAg
ICA8aW5wdXQgdmFsdWU9J0VudHJ5JyBhcmlhLXJlcXVpcmVkPSd0cnVlJz4iCisgICAgICAgICIg
ICAgPGlucHV0IHZhbHVlPSdEaXNhYmxlZCcgZGlzYWJsZWQ+IgorICAgICAgICAiICAgIDxpbnB1
dCB2YWx1ZT0nUmVhZCBvbmx5JyByZWFkb25seT4iCisgICAgICAgICIgICAgPHRleHRhcmVhIHJv
d3M9NSBhdXRvZm9jdXM+PC90ZXh0YXJlYT4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAg
ICI8L2h0bWw+IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9u
KCk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkp
KTsKKworICAgIGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFw
cC5nZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50
V2ViLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDIpOworCisgICAgYXV0
byBoMSA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChkb2N1
bWVudFdlYi5nZXQoKSwgMCwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNf
QUNDRVNTSUJMRShoMS5nZXQoKSkpOworICAgIEdSZWZQdHI8QXRzcGlTdGF0ZVNldD4gc3RhdGVT
ZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGgxLmdldCgpKSk7
CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6
OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCA0KTsKKyNlbHNlCisgICAgLy8gRklY
TUU6IEFUSyBpbmNsdWRlcyBvcmllbnRhdGlvbiBzdGF0ZSBpbiBldmVyeSBlbGVtZW50LgorICAg
IGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNl
dC5nZXQoKSksID09LCA1KTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250
YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOworI2VuZGlmCisg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3Nl
dF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0VOU0lUSVZFKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFU
U1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hPV0lORykpOworCisgICAgYXV0
byBzZWN0aW9uID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4
KGRvY3VtZW50V2ViLmdldCgpLCAxLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQ
SV9JU19BQ0NFU1NJQkxFKHNlY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09
LCAxMSk7CisKKyAgICB1bnNpZ25lZCBuZXh0Q2hpbGQgPSAwOworICAgIGF1dG8gYnV0dG9uID0g
YWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0
KCksIG5leHRDaGlsZCsrLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19B
Q0NFU1NJQkxFKGJ1dHRvbi5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChidXR0b24uZ2V0KCkpKTsKKyNpZiBVU0UoQVRTUEkp
CisgICAgZ19hc3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0
YXRlU2V0LmdldCgpKSwgPT0sIDUpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVz
IG9yaWVudGF0aW9uIHN0YXRlIGluIGV2ZXJ5IGVsZW1lbnQuCisgICAgZ19hc3NlcnRfY21wdWlu
dChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDYp
OworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0Lmdl
dCgpLCBBVFNQSV9TVEFURV9IT1JJWk9OVEFMKSk7CisjZW5kaWYKKyAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRU5B
QkxFRCkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRl
U2V0LmdldCgpLCBBVFNQSV9TVEFURV9TRU5TSVRJVkUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfVklTSUJM
RSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9TSE9XSU5HKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0ZPQ1VTQUJMRSkp
OworCisgICAgYXV0byBidXR0b25EaXNhYmxlZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxl
X2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0cikp
OworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShidXR0b25EaXNhYmxlZC5n
ZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X3N0
YXRlX3NldChidXR0b25EaXNhYmxlZC5nZXQoKSkpOworI2lmIFVTRShBVFNQSSkKKyAgICBnX2Fz
c2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0
KCkpLCA9PSwgMik7CisgICAgLy8gRklYTUU6IEFUSyBpbmNsdWRlcyBvcmllbnRhdGlvbiBzdGF0
ZSBpbiBldmVyeSBlbGVtZW50LgorICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRl
c3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCAzKTsKKyAgICBnX2Fzc2VydF90
cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVf
SE9SSVpPTlRBTCkpOworI2VuZGlmCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElf
U1RBVEVfU0hPV0lORykpOworCisgICAgYXV0byB0b2dnbGVCdXR0b24gPSBhZG9wdEdSZWYoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxk
KyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodG9n
Z2xlQnV0dG9uLmdldCgpKSk7CisgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfc3RhdGVfc2V0KHRvZ2dsZUJ1dHRvbi5nZXQoKSkpOworI2lmIFVTRShBVFNQSSkK
KyAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3Rh
dGVTZXQuZ2V0KCkpLCA9PSwgNik7CisjZWxzZQorICAgIC8vIEZJWE1FOiBBVEsgaW5jbHVkZXMg
b3JpZW50YXRpb24gc3RhdGUgaW4gZXZlcnkgZWxlbWVudC4KKyAgICBnX2Fzc2VydF9jbXB1aW50
KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwgNyk7
CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0
KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X3RydWUo
YXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9FTkFC
TEVEKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVT
ZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRz
cGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxF
KSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQu
Z2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0
YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9DVVNBQkxFKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0
KCksIEFUU1BJX1NUQVRFX1BSRVNTRUQpKTsKKworICAgIGF1dG8gcmFkaW8gPSBhZG9wdEdSZWYo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENo
aWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUo
cmFkaW8uZ2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxl
X2dldF9zdGF0ZV9zZXQocmFkaW8uZ2V0KCkpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3Nl
cnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgp
KSwgPT0sIDYpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVzIG9yaWVudGF0aW9u
IHN0YXRlIGluIGV2ZXJ5IGVsZW1lbnQuCisgICAgZ19hc3NlcnRfY21wdWludChBY2Nlc3NpYmls
aXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDcpOworICAgIGdfYXNz
ZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9T
VEFURV9WRVJUSUNBTCkpOworI2VuZGlmCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9z
ZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRT
UElfU1RBVEVfU0VOU0lUSVZFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElf
U1RBVEVfU0hPV0lORykpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRh
aW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RB
VEVfQ0hFQ0tBQkxFKSk7CisKKyAgICBhdXRvIHJhZGlvQ2hlY2tlZCA9IGFkb3B0R1JlZihhdHNw
aV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQr
KywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRShyYWRp
b0NoZWNrZWQuZ2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3Np
YmxlX2dldF9zdGF0ZV9zZXQocmFkaW9DaGVja2VkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21w
dWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0s
IDcpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9FTkFCTEVEKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkp
OworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0Lmdl
dCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwg
QVRTUElfU1RBVEVfRk9DVVNBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9z
ZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0NIRUNLQUJMRSkpOworICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9DSEVDS0VEKSk7CisKKyAgICBhdXRvIHJhZGlvRGlzYWJsZWQgPSBhZG9wdEdS
ZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4
dENoaWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lC
TEUocmFkaW9EaXNhYmxlZC5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3Bp
X2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChyYWRpb0Rpc2FibGVkLmdldCgpKSk7CisgICAgZ19h
c3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0Lmdl
dCgpKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5z
KHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NI
T1dJTkcpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0
ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfQ0hFQ0tBQkxFKSk7CisKKyAgICBhdXRvIGNoZWNrYm94
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24u
Z2V0KCksIG5leHRDaGlsZCsrLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9J
U19BQ0NFU1NJQkxFKGNoZWNrYm94LmdldCgpKSk7CisgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGNoZWNrYm94LmdldCgpKSk7CisgICAgZ19h
c3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0Lmdl
dCgpKSwgPT0sIDQpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5z
KHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NI
T1dJTkcpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0
ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfQ0hFQ0tBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShh
dHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0NIRUNL
RUQpKTsKKworICAgIGF1dG8gZW50cnkgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRf
Y2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxwdHIpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZW50cnkuZ2V0KCkpKTsKKyAgICBz
dGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9zdGF0ZV9zZXQoZW50cnku
Z2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNl
dFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwgOSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQo
KSwgQVRTUElfU1RBVEVfU0VOU0lUSVZFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwg
QVRTUElfU1RBVEVfU0hPV0lORykpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0
X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRT
UElfU1RBVEVfRURJVEFCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0lOR0xFX0xJTkUpKTsKKyNpZiBV
U0UoQVRTUEkpCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3Rh
dGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTEVDVEFCTEVfVEVYVCkpOworI2Vsc2UKKyAgICAv
LyBGSVhNRTogQVRLIGRvZXNuJ3QgaW1wbGVtZW50IHNlbGVjdGFibGUgdGV4dCwgYnV0IGluY2x1
ZGVzIG9wcmllbnRhdGlvbi4KKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250
YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOworI2VuZGlmCisg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX1JFUVVJUkVEKSk7CisKKyAgICBhdXRvIGVudHJ5RGlzYWJsZWQgPSBhZG9w
dEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwg
bmV4dENoaWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VT
U0lCTEUoZW50cnlEaXNhYmxlZC5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChlbnRyeURpc2FibGVkLmdldCgpKSk7CisgICAg
Z19hc3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0
LmdldCgpKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRh
aW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRf
dHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRF
X1NIT1dJTkcpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhz
dGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRURJVEFCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0lO
R0xFX0xJTkUpKTsKKyNpZiBVU0UoQVRTUEkpCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTEVDVEFCTEVfVEVY
VCkpOworI2Vsc2UKKyAgICAvLyBGSVhNRTogQVRLIGRvZXNuJ3QgaW1wbGVtZW50IHNlbGVjdGFi
bGUgdGV4dCwgYnV0IGluY2x1ZGVzIG9wcmllbnRhdGlvbi4KKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpP
TlRBTCkpOworI2VuZGlmCisKKyAgICBhdXRvIGVudHJ5UmVhZE9ubHkgPSBhZG9wdEdSZWYoYXRz
cGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxk
KyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoZW50
cnlSZWFkT25seS5nZXQoKSkpOworICAgIHN0YXRlU2V0ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vz
c2libGVfZ2V0X3N0YXRlX3NldChlbnRyeVJlYWRPbmx5LmdldCgpKSk7CisgICAgZ19hc3NlcnRf
Y21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwg
PT0sIDgpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRl
U2V0LmdldCgpLCBBVFNQSV9TVEFURV9FTkFCTEVEKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNw
aV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElW
RSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NIT1dJTkcpKTsK
KyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQo
KSwgQVRTUElfU1RBVEVfRk9DVVNBQkxFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NJTkdMRV9MSU5FKSk7
CisjaWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRh
aW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9TRUxFQ1RBQkxFX1RFWFQpKTsKKyNlbHNl
CisgICAgLy8gRklYTUU6IEFUSyBkb2Vzbid0IGltcGxlbWVudCBzZWxlY3RhYmxlIHRleHQsIGJ1
dCBpbmNsdWRlcyBvcHJpZW50YXRpb24uCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9z
ZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKKyNl
bmRpZgorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0
LmdldCgpLCBBVFNQSV9TVEFURV9SRUFEX09OTFkpKTsKKworICAgIGF1dG8gdGV4dEFyZWEgPSBh
ZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlvbi5nZXQo
KSwgbmV4dENoaWxkKyssIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FD
Q0VTU0lCTEUodGV4dEFyZWEuZ2V0KCkpKTsKKyAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNw
aV9hY2Nlc3NpYmxlX2dldF9zdGF0ZV9zZXQodGV4dEFyZWEuZ2V0KCkpKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkp
LCA9PSwgOSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3Rh
dGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0VOU0lU
SVZFKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVT
ZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3Bp
X3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hPV0lORykp
OworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0Lmdl
dCgpLCBBVFNQSV9TVEFURV9GT0NVU0FCTEUpKTsKKyAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0
YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfRk9DVVNFRCkpOwor
ICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgp
LCBBVFNQSV9TVEFURV9FRElUQUJMRSkpOworICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVf
c2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9NVUxUSV9MSU5FKSk7Cisj
aWYgVVNFKEFUU1BJKQorICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5z
KHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9TRUxFQ1RBQkxFX1RFWFQpKTsKKyNlbHNlCisg
ICAgLy8gRklYTUU6IEFUSyBkb2Vzbid0IGltcGxlbWVudCBzZWxlY3RhYmxlIHRleHQsIGJ1dCBp
bmNsdWRlcyBvcHJpZW50YXRpb24uCisgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRf
Y29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKKyNlbmRp
ZgorfQorCitzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZVN0YXRlQ2hhbmdlZChBY2Nlc3NpYmls
aXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3co
KTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgKKyAgICAgICAgIjxodG1sPiIKKyAgICAgICAgIiAgPGJv
ZHk+IgorICAgICAgICAiICAgIDxpbnB1dCBpZD0nY2hlY2snIHR5cGU9J2NoZWNrYm94Jy8+Q2hl
Y2tib3giCisgICAgICAgICIgICAgPGJ1dHRvbiBpZD0ndG9nZ2xlJyBhcmlhLXByZXNzZWQ9J3Ry
dWUnPlRvZ2dsZSBidXR0b248L2J1dHRvbj4iCisgICAgICAgICIgICAgPGlucHV0IGlkPSdlbnRy
eScgdmFsdWU9J0VudHJ5Jz4iCisgICAgICAgICIgIDwvYm9keT4iCisgICAgICAgICI8L2h0bWw+
IiwKKyAgICAgICAgbnVsbHB0cik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CisKKyAgICBhdXRvIHRlc3RBcHAgPSB0ZXN0LT5maW5kVGVzdEFwcGxpY2F0aW9uKCk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRlc3RBcHAuZ2V0KCkpKTsKKworICAg
IGF1dG8gZG9jdW1lbnRXZWIgPSB0ZXN0LT5maW5kRG9jdW1lbnRXZWIodGVzdEFwcC5nZXQoKSk7
CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGRvY3VtZW50V2ViLmdldCgp
KSk7CisgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50
KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOworCisgICAgYXV0byBzZWN0aW9u
ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50
V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NF
U1NJQkxFKHNlY3Rpb24uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfY2hpbGRfY291bnQoc2VjdGlvbi5nZXQoKSwgbnVsbHB0ciksID09LCAzKTsKKwor
ICAgIHVuc2lnbmVkIG5leHRDaGlsZCA9IDA7CisgICAgYXV0byBjaGVja2JveCA9IGFkb3B0R1Jl
ZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0
Q2hpbGQrKywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJM
RShjaGVja2JveC5nZXQoKSkpOworICAgIHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGNoZWNrYm94
LmdldCgpLCB7ICJvYmplY3Q6c3RhdGUtY2hhbmdlZCIgfSk7CisgICAgdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hlY2sn
KS5jaGVja2VkID0gdHJ1ZTsiLCBudWxscHRyKTsKKyAgICBhdXRvIGV2ZW50cyA9IHRlc3QtPnN0
b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9
PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6
c3RhdGUtY2hhbmdlZDpjaGVja2VkIik7CisgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0t
PmRldGFpbDEsID09LCAxKTsKKyAgICBldmVudHMgPSB7IH07CisKKyAgICBhdXRvIHRvZ2dsZUJ1
dHRvbiA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0
aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X3RydWUoQVRT
UElfSVNfQUNDRVNTSUJMRSh0b2dnbGVCdXR0b24uZ2V0KCkpKTsKKyAgICB0ZXN0LT5zdGFydEV2
ZW50TW9uaXRvcih0b2dnbGVCdXR0b24uZ2V0KCksIHsgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkIiB9
KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCd0b2dnbGUnKS5hcmlhUHJlc3NlZCA9IGZhbHNlOyIsIG51bGxwdHIp
OworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1vbml0b3IoMSk7CisgICAgZ19hc3NlcnRf
Y21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50
c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6c3RhdGUtY2hhbmdlZDpwcmVzc2VkIik7CisgICAgZ19h
c3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAwKTsKKyAgICBldmVudHMgPSB7
IH07CisKKyAgICBhdXRvIGVudHJ5ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2No
aWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0KCksIG5leHRDaGlsZCsrLCBudWxscHRyKSk7CisgICAg
Z19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGVudHJ5LmdldCgpKSk7CisgICAgdGVz
dC0+c3RhcnRFdmVudE1vbml0b3IoZW50cnkuZ2V0KCksIHsgIm9iamVjdDpzdGF0ZS1jaGFuZ2Vk
IiB9KTsKKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImxldCBl
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VudHJ5Jyk7IGUuYXJpYVJlcXVpcmVkID0gdHJ1
ZTsgZS5mb2N1cygpOyIsIG51bGxwdHIpOworICAgIGV2ZW50cyA9IHRlc3QtPnN0b3BFdmVudE1v
bml0b3IoMik7CisjaWYgIVVTRShBVFNQSSkKKyAgICAvLyBGSVhNRTogV2l0aCBBVEsgZm9jdXNl
ZCBldmVudCBpcyBzb21ldGltZXMgZW1pdHRlZCB0d2ljZSBmb3Igc29tZSByZWFzb24uCisgICAg
aWYgKGV2ZW50cy5zaXplKCkgPT0gMykgeworICAgICAgICBldmVudHMucmVtb3ZlRmlyc3RNYXRj
aGluZyhbXShhdXRvJiBpdGVtKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChpdGVtLT50eXBl
LCAib2JqZWN0OnN0YXRlLWNoYW5nZWQ6Zm9jdXNlZCIpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICB9Cisj
ZW5kaWYKKyAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBp
ZiAoIWdfc3RyY21wMChldmVudHNbMF0tPnR5cGUsICJvYmplY3Q6c3RhdGUtY2hhbmdlZDpmb2N1
c2VkIikpIHsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09
LCAxKTsKKworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzFdLT50eXBlLCA9PSwgIm9i
amVjdDpzdGF0ZS1jaGFuZ2VkOnJlcXVpcmVkIik7CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQo
ZXZlbnRzWzFdLT5kZXRhaWwxLCA9PSwgMSk7CisgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKGV2
ZW50c1swXS0+dHlwZSwgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkOnJlcXVpcmVkIikpIHsKKyAgICAg
ICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAxKTsKKworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzFdLT50eXBlLCA9PSwgIm9iamVjdDpzdGF0ZS1jaGFu
Z2VkOmZvY3VzZWQiKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMV0tPmRldGFp
bDEsID09LCAxKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsK
KyAgICBldmVudHMgPSB7IH07Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKLSAgICBBY2Nlc3Np
YmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImF0c3BpLWJhc2ljLWhpZXJh
cmNoeSIsIHRlc3RBdHNwaUJhc2ljSGllcmFyY2h5KTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6
YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2libGUvYmFzaWMtaGllcmFyY2h5Iiwg
dGVzdEFjY2Vzc2libGVCYXNpY0hpZXJhcmNoeSk7CisgICAgQWNjZXNzaWJpbGl0eVRlc3Q6OmFk
ZCgiV2ViS2l0QWNjZXNzaWJpbGl0eSIsICJhY2Nlc3NpYmxlL2lnbm9yZWQtb2JqZWN0cyIsIHRl
c3RBY2Nlc3NpYmxlSWdub3JlZE9iamVjdHMpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQo
IldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNzaWJsZS9jaGlsZHJlbi1jaGFuZ2VkIiwgdGVz
dEFjY2Vzc2libGVDaGlsZHJlbkNoYW5nZWQpOworICAgIEFjY2Vzc2liaWxpdHlUZXN0OjphZGQo
IldlYktpdEFjY2Vzc2liaWxpdHkiLCAiYWNjZXNzaWJsZS9hdHRyaWJ1dGVzIiwgdGVzdEFjY2Vz
c2libGVBdHRyaWJ1dGVzKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nl
c3NpYmlsaXR5IiwgImFjY2Vzc2libGUvc3RhdGUiLCB0ZXN0QWNjZXNzaWJsZVN0YXRlKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5VGVzdDo6YWRkKCJXZWJLaXRBY2Nlc3NpYmlsaXR5IiwgImFjY2Vzc2li
bGUvc3RhdGUtY2hhbmdlZCIsIHRlc3RBY2Nlc3NpYmxlU3RhdGVDaGFuZ2VkKTsKIH0KIAogdm9p
ZCBhZnRlckFsbCgpCg==
</data>
<flag name="review"
          id="463575"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>