<?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>88460</bug_id>
          
          <creation_ts>2012-06-06 15:08:01 -0700</creation_ts>
          <short_desc>[chromium] Clean up GraphicsContext3D implementation</short_desc>
          <delta_ts>2012-06-06 15:59:40 -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>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>abarth</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>642858</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:08:01 -0700</bug_when>
    <thetext>[chromium] Clean up GraphicsContext3D implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642875</commentid>
    <comment_count>1</comment_count>
      <attachid>146123</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:21:06 -0700</bug_when>
    <thetext>Created attachment 146123
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642880</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:23:30 -0700</bug_when>
    <thetext>Here&apos;s some very overdue cleanup.  Diffstat:

 Source/WebKit/chromium/ChangeLog                   |  128 ++
 Source/WebKit/chromium/WebKit.gyp                  |    1 +
 .../WebKit/chromium/src/Extensions3DChromium.cpp   |   56 +-
 .../chromium/src/GraphicsContext3DChromium.cpp     | 1404 +++++---------------
 .../chromium/src/GraphicsContext3DPrivate.cpp      |  379 ++++++
 .../WebKit/chromium/src/GraphicsContext3DPrivate.h |  247 +----
 6 files changed, 855 insertions(+), 1360 deletions(-)


To review, I&apos;d recommend looking at just the right hand side - the diff isn&apos;t all that illuminating.

I plan to move the implemenetations into Source/WebCore/platform/chromium/support/ as a followup, but would rather do code changes and file moves in different patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642901</commentid>
    <comment_count>3</comment_count>
      <attachid>146123</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-06-06 15:37:13 -0700</bug_when>
    <thetext>Comment on attachment 146123
Patch

Thanks for doing this and deleting so much boilerplate code. Looks great. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642921</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:58:39 -0700</bug_when>
    <thetext>Thanks for the fast review.  webkit_unit_tests, layout tests, and gpu_tests are all happy with this patch on my box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642922</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-06 15:59:40 -0700</bug_when>
    <thetext>Committed r119631: &lt;http://trac.webkit.org/changeset/119631&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146123</attachid>
            <date>2012-06-06 15:21:06 -0700</date>
            <delta_ts>2012-06-06 15:37:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88460-20120606152106.patch</filename>
            <type>text/plain</type>
            <size>122806</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5NDQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDIwZGM2NmIxOWY5YjhjNDVkYzRmZTY1MmZmMGVmYzUwZmRkNzZmOGUuLjYyM2M5OWE0OTAxZjA0
NDczMmM4ZDc5ZDc4OWU4NGNjMzRlYWQ1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMxIEBACisyMDEyLTA2LTA2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBDbGVhbiB1cCBHcmFwaGljc0NvbnRleHQz
RCBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODg0NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDaHJvbWl1bSdzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHcmFwaGljc0NvbnRleHQz
RCBpbXBsZW1lbnRhdGlvbiBoYXMgYmVlbiBzb21ld2hhdCBtZXNzeSBmb3IgaGlzdG9yaWNhbAor
ICAgICAgICByZWFzb25zLiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtYWpvcml0
eSBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgZG9uZSBieSBkZWxlZ2F0aW5nIHRvIHRoZSBQbGF0Zm9y
bSBBUEkKKyAgICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QuIEEgZmV3IGJpdHMgb2YgZnVuY3Rp
b25hbGl0eSAtIGV4dGVuc2lvbiBtYXBwaW5nLCBzb21lIGNvbXBvc2l0b3IgZnVuY3Rpb25hbGl0
eSwgYSByZWFkYmFjaworICAgICAgICB1dGlsaXR5IC0gYXJlIGltcGxlbWVudGVkIGJ5IGNvZGUg
aW4gV2ViS2l0LiBQcmV2aW91c2x5LCBhbGwgR3JhcGhpY3NDb250ZXh0M0QgZnVuY3Rpb25zIGRl
bGVnYXRlcyB0byBhIGNsb25lIG9mCisgICAgICAgIHRoZSBpbnRlcmZhY2UgaW4gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlIHdoaWNoIGluIHR1cm4gZGVsZWdhdGVkIHRvIFdlYkdyYXBoaWNzQ29u
dGV4dDNELiBUaGlzIHJlcXVpcmVkCisgICAgICAgIGR1cGxpY2F0aW5nIHRoZSBlbnRpcmUgR3Jh
cGhpY3NDb250ZXh0M0QgaW50ZXJmYWNlIGFuZCBtYWRlIHVwZGF0aW5nIHRoZSBpbnRlcmZhY2Ug
YW4gZXBpYyBwYWluIGluIHRoZSByZWFyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcHJvdmlkZXMg
dGhlIGltcGxlbWVudGF0aW9ucyBvZiBHcmFwaGljc0NvbnRleHQzRCBmdW5jdGlvbnMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAuIE1vc3Qgb2YKKyAgICAgICAgdGhlc2UgZnVuY3Rp
b25zIGRlbGVnYXRlIGRpcmVjdGx5IHRvIFdlYkdyYXBoaWNzQ29udGV4dDNELiBUaGUgb25lcyB0
aGF0IGRvIG5vdCBkZWxlZ2F0ZSB0bworICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUs
IHdoaWNoIG5vdyBoYXMgYSBkZWRpY2F0ZWQgaGVhZGVyIGFuZCBjcHAgZmlsZS4gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcCBpbXBsZW1lbnRzCisgICAgICAgIGFsbCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUgZnVuY3Rpb25zLiBJJ3ZlIGFsc28gcmVvcmRlcmVkIHRoZSBpbXBsZW1lbnRh
dGlvbiBmaWxlcyBzbyB0aGF0IHRoZSBmdW5jdGlvbiBvcmRlcgorICAgICAgICBtYXRjaGVzIHRo
ZSBhc3NvY2lhdGVkIGhlYWRlciBmaWxlIGFuZCBub3JtYWxpemVkIHRoZSBuYW1lcyBvZiBjYWxs
YmFjayBhZGFwdGVycy4KKworICAgICAgICBSZWZhY3RvciBvbmx5LCBubyBjaGFuZ2UgaW4gZnVu
Y3Rpb25hbGl0eS4gRXhpc3RpbmcgdGVzdHMgYXBwbHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIHNyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6ZW5zdXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06
OnBvc3RTdWJCdWZmZXJDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RD
aHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTSk6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVN
KToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp1bm1hcFRleFN1Yklt
YWdlMkRDSFJPTUlVTSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6
c2V0VmlzaWJpbGl0eUNIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENo
cm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXJFWFQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNEQ2hyb21pdW06OmVuc3VyZUZyYW1lYnVmZmVyQ0hST01JVU0pOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6cmF0ZUxpbWl0T2Zm
c2NyZWVuQ29udGV4dENIUk9NSVVNKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENo
cm9taXVtOjp0ZXhJbWFnZUlPU3VyZmFjZTJEQ0hST01JVU0pOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNEQ2hyb21pdW06OnRleFN0b3JhZ2UyREVYVCk6CisgICAgICAgIChXZWJDb3Jl
OjpFeHRlbnNpb25zM0RDaHJvbWl1bTo6Y3JlYXRlUXVlcnlFWFQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjppc1F1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnMzRENocm9taXVtOjpiZWdpblF1ZXJ5RVhUKToKKyAgICAgICAgKFdlYkNvcmU6
OkV4dGVuc2lvbnMzRENocm9taXVtOjplbmRRdWVyeUVYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlpdkVYVCk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0UXVlcnlPYmplY3R1aXZFWFQpOgorICAgICAgICAqIHNy
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpzZXRDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Jlc291cmNlU2FmZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRCk6
CisgICAgICAgIChHck1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrOjpHck1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3JNZW1vcnlBbGxvY2F0
aW9uQ2hhbmdlZENhbGxiYWNrOjpvbkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z3JDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0NvbnRleHRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bGF5ZXJDb21w
b3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFy
a0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyk6CisgICAgICAgIChHcmFwaGljc0NvbnRl
eHRMb3N0Q2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dExvc3RDYWxsYmFja0FkYXB0ZXI6OkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjo6
fkdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjo6b25Db250ZXh0TG9zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldENvbnRleHRMb3N0Q2Fs
bGJhY2spOgorICAgICAgICAoR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI6Okdy
YXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOjp+R3JhcGhpY3NFcnJvck1lc3NhZ2VD
YWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NFcnJvck1lc3NhZ2VD
YWxsYmFja0FkYXB0ZXI6Om9uRXJyb3JNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRFeHRlbnNpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUV4dGVuc2lv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzdXBwb3J0
c0V4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjppc0V4dGVuc2lvbkVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjppc1Jlc291cmNlU2FmZSk6CisgICAgICAgIChHcmFwaGlj
c0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFw
dGVyOjpHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tBZGFwdGVyOjp+R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2Fs
bGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1
ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjo6b25Td2FwQnVmZmVyc0NvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0U3dhcEJ1ZmZlcnND
b21wbGV0ZUNhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0RNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyOjpH
cmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWRDYWxsYmFja0FkYXB0ZXI6On5HcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkQ2FsbGJhY2tBZGFwdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI6Om9uTWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpz
ZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0pOgorICAgICAgICAq
IHNyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDoKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OndlYkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpOgorCiAyMDEyLTA2LTA0ICBEYW5hIEphbnNlbnMgIDxk
YW5ha2pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVtb3ZlIHJlZHVuZGFu
dCBzZXROZWVkc0NvbW1pdCB3aGVuIHByZXBhcmVUb0RyYXcgZmFpbHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAppbmRleCBiYWFjZjQwNTgxYWI3OTcyNzI0NWYyNjIzY2Q1NTQ4MTE4MmRlOGRl
Li40NWM4YjRhYmVhOWMyNGIzZWQ2MDZmOGQwZDJlZDBiMDdkYzc5ODVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCkBAIC00MDEsNiArNDAxLDcgQEAKICAgICAgICAgICAgICAgICAnc3Jj
L0dlb2xvY2F0aW9uQ2xpZW50UHJveHkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0dlb2xv
Y2F0aW9uQ2xpZW50UHJveHkuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9HcmFwaGljc0NvbnRl
eHQzRENocm9taXVtLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oJywKICAgICAgICAgICAgICAgICAnc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGVscGVyUGx1Z2luSW1wbC5jcHAnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3Bw
CmluZGV4IDg0YWQwZjc4YTMyM2M3ZWVkNDRlYzAxMGM1ZDBlYjBhNTJlODllNTQuLmE2NGE3N2Vm
YTUwMDZmODQ3ODI4NWE4MTI3YWE2YTljMjI0MTBkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0V4dGVuc2lvbnMzRENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9FeHRlbnNpb25zM0RDaHJvbWl1bS5jcHAKQEAgLTI1LDEyICsyNSwx
MSBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKLSNpZiBFTkFCTEUoV0VCR0wpCi0KICNpbmNs
dWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC01MCwxMSArNDksOCBAQCBib29sIEV4dGVuc2lvbnMzRENocm9taXVtOjpzdXBwb3J0cyhjb25z
dCBTdHJpbmcmIG5hbWUpCiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQogewotI2lmbmRlZiBOREVCVUcKLSAgICBib29sIHJlc3Vs
dCA9Ci0jZW5kaWYKLSAgICAgICAgbV9wcml2YXRlLT5lbnN1cmVFeHRlbnNpb25FbmFibGVkKG5h
bWUpOwotICAgIEFTU0VSVChyZXN1bHQpOworICAgIGJvb2wgcmVzdWx0ID0gbV9wcml2YXRlLT5l
bnN1cmVFeHRlbnNpb25FbmFibGVkKG5hbWUpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCBy
ZXN1bHQpOwogfQogCiBib29sIEV4dGVuc2lvbnMzRENocm9taXVtOjppc0VuYWJsZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQpAQCAtNjQsNTcgKzYwLDU3IEBAIGJvb2wgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCiAKIGludCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4obV9wcml2YXRlLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCkpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpibGl0
RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZ
MSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWdu
ZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKIHsKLSAgICBtX3ByaXZhdGUtPmJs
aXRGcmFtZWJ1ZmZlckNIUk9NSVVNKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwg
ZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKKyAgICBtX3ByaXZhdGUtPndlYkNv
bnRleHQoKS0+YmxpdEZyYW1lYnVmZmVyQ0hST01JVU0oc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3Jj
WTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOwogfQogCiB2b2lk
IEV4dGVuc2lvbnMzRENocm9taXVtOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBp
bnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
CiB7Ci0gICAgbV9wcml2YXRlLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlV
TSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBt
X3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQ0hS
T01JVU0odGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBtX3ByaXZhdGUtPnBvc3RT
dWJCdWZmZXJDSFJPTUlVTSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3ByaXZhdGUtPndl
YkNvbnRleHQoKS0+cG9zdFN1YkJ1ZmZlckNIUk9NSVVNKHgsIHksIHdpZHRoLCBoZWlnaHQpOwog
fQogCiB2b2lkKiBFeHRlbnNpb25zM0RDaHJvbWl1bTo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVN
KHVuc2lnbmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFjY2VzcykK
IHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odGFyZ2V0
LCBvZmZzZXQsIHNpemUsIGFjY2Vzcyk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4
dCgpLT5tYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0odGFyZ2V0LCBvZmZzZXQsIHNpemUsIGFjY2Vz
cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnVubWFwQnVmZmVyU3ViRGF0YUNI
Uk9NSVVNKGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgbV9wcml2YXRlLT51bm1hcEJ1ZmZlclN1
YkRhdGFDSFJPTUlVTShkYXRhKTsKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+dW5tYXBC
dWZmZXJTdWJEYXRhQ0hST01JVU0oZGF0YSk7CiB9CiAKIHZvaWQqIEV4dGVuc2lvbnMzRENocm9t
aXVtOjptYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odW5zaWduZWQgdGFyZ2V0LCBpbnQgbGV2ZWws
IGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGFjY2VzcykKIHsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5tYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0odGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBhY2Nlc3MpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+bWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgYWNjZXNzKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6dW5tYXBUZXhTdWJJ
bWFnZTJEQ0hST01JVU0oY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBtX3ByaXZhdGUtPnVubWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNKGRhdGEpOworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgp
LT51bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShkYXRhKTsKIH0KIAogdm9pZCBFeHRlbnNpb25z
M0RDaHJvbWl1bTo6c2V0VmlzaWJpbGl0eUNIUk9NSVVNKGJvb2wgdmlzaWJpbGl0eSkKIHsKLSAg
ICBtX3ByaXZhdGUtPnNldFZpc2liaWxpdHlDSFJPTUlVTSh2aXNpYmlsaXR5KTsKKyAgICBtX3By
aXZhdGUtPndlYkNvbnRleHQoKS0+c2V0VmlzaWJpbGl0eUNIUk9NSVVNKHZpc2liaWxpdHkpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpkaXNjYXJkRnJhbWVidWZmZXJFWFQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdDM0RlbnVtKiBh
dHRhY2htZW50cykKIHsKLSAgICBtX3ByaXZhdGUtPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVCh0YXJn
ZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CisgICAgbV9wcml2YXRlLT53ZWJDb250
ZXh0KCktPmRpc2NhcmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRh
Y2htZW50cyk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmVuc3VyZUZyYW1lYnVm
ZmVyQ0hST01JVU0oKQogewotICAgIG1fcHJpdmF0ZS0+ZW5zdXJlRnJhbWVidWZmZXJDSFJPTUlV
TSgpOworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5lbnN1cmVGcmFtZWJ1ZmZlckNIUk9N
SVVNKCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnNldEdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEdwdU1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2tDSFJPTUlVTT4gY2FsbGJhY2spCkBAIC0xNDIsNyArMTM4LDcgQEAg
dm9pZCBFeHRlbnNpb25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QpCiAKIFN0cmluZyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewotICAgIHJldHVybiBtX3By
aXZhdGUtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOworICAgIHJldHVy
biBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KHNoYWRlcik7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnNldFN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25QdHI8U3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrQ0hST01JVU0+IGNhbGxiYWNrKQpAQCAtMTUyLDcgKzE0OCw3IEBAIHZvaWQgRXh0ZW5z
aW9uczNEQ2hyb21pdW06OnNldFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0NIUk9NSVVNKFBh
c3NPd25QdHI8U3dhCiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnJhdGVMaW1pdE9mZnNj
cmVlbkNvbnRleHRDSFJPTUlVTSgpCiB7Ci0gICAgbV9wcml2YXRlLT5yYXRlTGltaXRPZmZzY3Jl
ZW5Db250ZXh0Q0hST01JVU0oKTsKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmF0ZUxp
bWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hy
b21pdW06OnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZmZXIsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIpCkBAIC0xNjIsNDkgKzE1OCw0NyBAQCB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpw
YWludEZyYW1lYnVmZmVyVG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsCiAKIHZv
aWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OnRleEltYWdlSU9TdXJmYWNlMkRDSFJPTUlVTSh1bnNp
Z25lZCB0YXJnZXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdWludDMyX3QgaW9TdXJmYWNlSWQs
IHVuc2lnbmVkIHBsYW5lKQogewotICAgIG1fcHJpdmF0ZS0+dGV4SW1hZ2VJT1N1cmZhY2UyRENI
Uk9NSVVNKHRhcmdldCwgd2lkdGgsIGhlaWdodCwgaW9TdXJmYWNlSWQsIHBsYW5lKTsKKyAgICBt
X3ByaXZhdGUtPndlYkNvbnRleHQoKS0+dGV4SW1hZ2VJT1N1cmZhY2UyRENIUk9NSVVNKHRhcmdl
dCwgd2lkdGgsIGhlaWdodCwgaW9TdXJmYWNlSWQsIHBsYW5lKTsKIH0KIAogdm9pZCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6dGV4U3RvcmFnZTJERVhUKHVuc2lnbmVkIGludCB0YXJnZXQsIGludCBs
ZXZlbHMsIHVuc2lnbmVkIGludCBpbnRlcm5hbEZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQogewotICAgIG1fcHJpdmF0ZS0+dGV4U3RvcmFnZTJERVhUKHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
PnRleFN0b3JhZ2UyREVYVCh0YXJnZXQsIGxldmVscywgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiBQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzRENocm9taXVtOjpjcmVh
dGVRdWVyeUVYVCgpCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y3JlYXRlUXVlcnlFWFQoKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmNyZWF0ZVF1ZXJ5RVhUKCk7CiB9
CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmRlbGV0ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RP
YmplY3QgcXVlcnkpCiB7Ci0gICAgbV9wcml2YXRlLT5kZWxldGVRdWVyeUVYVChxdWVyeSk7Cisg
ICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmRlbGV0ZVF1ZXJ5RVhUKHF1ZXJ5KTsKIH0KIAog
R0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNEQ2hyb21pdW06OmlzUXVlcnlFWFQoUGxhdGZvcm0zRE9i
amVjdCBxdWVyeSkKIHsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5pc1F1ZXJ5RVhUKHF1ZXJ5KTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmlzUXVlcnlFWFQocXVlcnkpOwog
fQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVtOjpiZWdpblF1ZXJ5RVhUKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBxdWVyeSkKIHsKLSAgICBtX3ByaXZhdGUtPmJlZ2luUXVl
cnlFWFQodGFyZ2V0LCBxdWVyeSk7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJlZ2lu
UXVlcnlFWFQodGFyZ2V0LCBxdWVyeSk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06
OmVuZFF1ZXJ5RVhUKEdDM0RlbnVtIHRhcmdldCkKIHsKLSAgICBtX3ByaXZhdGUtPmVuZFF1ZXJ5
RVhUKHRhcmdldCk7CisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmVuZFF1ZXJ5RVhUKHRh
cmdldCk7CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFF1ZXJ5aXZFWFQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogcGFyYW1zKQogewotICAgIG1f
cHJpdmF0ZS0+Z2V0UXVlcnlpdkVYVCh0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworICAgIG1fcHJp
dmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRRdWVyeWl2RVhUKHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7
CiB9CiAKIHZvaWQgRXh0ZW5zaW9uczNEQ2hyb21pdW06OmdldFF1ZXJ5T2JqZWN0dWl2RVhUKFBs
YXRmb3JtM0RPYmplY3QgcXVlcnksIEdDM0RlbnVtIHBuYW1lLCBHQzNEdWludCogcGFyYW1zKQog
ewotICAgIG1fcHJpdmF0ZS0+Z2V0UXVlcnlPYmplY3R1aXZFWFQocXVlcnksIHBuYW1lLCBwYXJh
bXMpOworICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRRdWVyeU9iamVjdHVpdkVYVChx
dWVyeSwgcG5hbWUsIHBhcmFtcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKaW5kZXggM2VmOGNmOGEyYmUzYzMx
NTAzOGFhODkwZjJkYWZjY2UzZDg4N2NiOS4uZDAyMGFjYzM4MWQ3MmNmYjE1MjM0OGE4NGFiODFh
ZTRmZjA4OTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhp
Y3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKQEAgLTMwLDQ3NyArMzAsMjY5IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAotI2lmIEVOQUJMRShXRUJHTCkKLQogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCiAKICNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJHckNvbnRleHQuaCIKLSNpbmNsdWRl
ICJHckdMSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViR3JhcGhpY3NDb250
ZXh0M0QuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgotCi0KLW5hbWVzcGFjZSB7Ci0KLS8vIFRoZSBsaW1pdCBvZiB0aGUgbnVtYmVy
IG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIEdyQ29udGV4dCdzIGJpdG1hcC0+dGV4dHVyZSBj
YWNoZS4KLWNvbnN0IGludCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLS8vIFRo
ZSBsaW1pdCBvZiB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgR3JD
b250ZXh0J3MgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgotY29uc3Qgc2l6ZV90IG1heEdhbmVzaFRl
eHR1cmVDYWNoZUJ5dGVzID0gOTYgKiAxMDI0ICogMTAyNDsKLQotfQotCi0vLyBUaGVyZSBhcmUg
dHdvIGxldmVscyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMgZmlsZToKLS8vCi0vLyAgIDEuIEdyYXBo
aWNzQ29udGV4dDNEIGRlbGVnYXRlcyB0byBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuIFRoaXMg
aXMgZG9uZQotLy8gICAgICBzbyB0aGF0IHdlIGhhdmUgc29tZSBwbGFjZSB0byBzdG9yZSBkYXRh
IG1lbWJlcnMgY29tbW9uIGFtb25nCi0vLyAgICAgIGltcGxlbWVudGF0aW9uczsgR3JhcGhpY3ND
b250ZXh0M0Qgb25seSBwcm92aWRlcyB1cyB0aGUgbV9wcml2YXRlCi0vLyAgICAgIHBvaW50ZXIu
IFdlIGFsd2F5cyBkZWxlZ2F0ZSB0byB0aGUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLiBXaGls
ZSB3ZQotLy8gICAgICBjb3VsZCBzaWRlc3RlcCBpdCBhbmQgZ28gZGlyZWN0bHkgdG8gdGhlIFdl
YkdyYXBoaWNzQ29udGV4dDNEIGluIHNvbWUKLS8vICAgICAgY2FzZXMsIGl0IGlzIGJldHRlciBm
b3IgY29uc2lzdGVuY3kgdG8gYWx3YXlzIGRlbGVnYXRlIHRocm91Z2ggaXQuCi0vLwotLy8gICAy
LiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUgZGVsZWdhdGVzIHRvIGFuIGltcGxlbWVudGF0aW9u
IG9mCi0vLyAgICAgIFdlYkdyYXBoaWNzQ29udGV4dDNELiBUaGlzIGlzIGRvbmUgc28gd2UgaGF2
ZSBhIHBsYWNlIHRvIGluamVjdCBhbgotLy8gICAgICBpbXBsZW1lbnRhdGlvbiB3aGljaCByZW1v
dGVzIHRoZSBPcGVuR0wgY2FsbHMgYWNyb3NzIHByb2Nlc3Nlcy4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhpY3ND
b250ZXh0M0Q+IHdlYkNvbnRleHQsIGJvb2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKQotICAgIDog
bV9pbXBsKHdlYkNvbnRleHQpCi0gICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9u
cyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQotICAgICwgbV9wcmVzZXJ2
ZURyYXdpbmdCdWZmZXIocHJlc2VydmVEcmF3aW5nQnVmZmVyKQotICAgICwgbV9yZXNvdXJjZVNh
ZmV0eShSZXNvdXJjZVNhZmV0eVVua25vd24pCi0gICAgLCBtX2dyQ29udGV4dCgwKQotewotfQot
Ci1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQot
ewotICAgIGlmIChtX2dyQ29udGV4dCkgewotICAgICAgICBtX2dyQ29udGV4dC0+Y29udGV4dERl
c3Ryb3llZCgpOwotICAgICAgICBHclNhZmVVbnJlZihtX2dyQ29udGV4dCk7Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KFBhc3NPd25QdHI8V2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRl
clN0eWxlIHJlbmRlclN0eWxlLCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKLXsKLSAgICBi
b29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93ID0gcmVuZGVyU3R5bGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93OwotCi0gICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCksIDAsIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KSk7Ci0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwcml2ID0gYWRv
cHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSh3ZWJDb250ZXh0LCBwcmVzZXJ2ZURy
YXdpbmdCdWZmZXIpKTsKLSAgICBjb250ZXh0LT5tX3ByaXZhdGUgPSBwcml2LnJlbGVhc2UoKTsK
LSAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLXZvaWQg
Z2V0RHJhd2luZ1BhcmFtZXRlcnMoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIFBsYXRmb3JtM0RPYmplY3QqIGZyYW1lQnVmZmVySWQsIGludCogd2lkdGgs
IGludCogaGVpZ2h0KQotewotICAgIGlmIChkcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgICpmcmFt
ZUJ1ZmZlcklkID0gZHJhd2luZ0J1ZmZlci0+ZnJhbWVidWZmZXIoKTsKLSAgICAgICAgKndpZHRo
ID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7Ci0gICAgICAgICpoZWlnaHQgPSBkcmF3
aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKmZyYW1l
QnVmZmVySWQgPSAwOwotICAgICAgICAqd2lkdGggPSBncmFwaGljc0NvbnRleHQzRC0+d2lkdGgo
KTsKLSAgICAgICAgKmhlaWdodCA9IGdyYXBoaWNzQ29udGV4dDNELT5oZWlnaHQoKTsKLSAgICB9
Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1XZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNEKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRl
eHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUtPm1faW1wbC5n
ZXQoKTsKLX0KLQotUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAotewotICAgIHJldHVybiBt
X2ltcGwuZ2V0KCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAotewotICAgIHJldHVybiBtX2ltcGwtPmdldFBs
YXRmb3JtVGV4dHVyZUlkKCk7Ci19Ci0KLWNsYXNzIEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFjayA6IHB1YmxpYyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNIHsKLXB1YmxpYzoKLSAgICBHck1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkQ2FsbGJhY2soR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBjb250ZXh0KQotICAg
ICAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgb25HcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1
TWVtb3J5QWxsb2NhdGlvbkNIUk9NSVVNIGFsbG9jYXRpb24pCi0gICAgewotICAgICAgICBHckNv
bnRleHQqIGNvbnRleHQgPSBtX2NvbnRleHQtPmdyQ29udGV4dCgpOwotICAgICAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFhbGxvY2F0aW9uLmdw
dVJlc291cmNlU2l6ZUluQnl0ZXMpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmZyZWVHcHVSZXNv
dXJjZXMoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cygwLCAw
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVM
aW1pdHMobWF4R2FuZXNoVGV4dHVyZUNhY2hlQ291bnQsIG1heEdhbmVzaFRleHR1cmVDYWNoZUJ5
dGVzKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBt
X2NvbnRleHQ7Ci19OwotCi1HckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z3JD
b250ZXh0KCkKLXsKLSAgICBpZiAoIW1fZ3JDb250ZXh0KSB7Ci0gICAgICAgIFNrQXV0b1RVbnJl
ZjxHckdMSW50ZXJmYWNlPiBpbnRlcmZhY2UobV9pbXBsLT5jcmVhdGVHckdMSW50ZXJmYWNlKCkp
OwotICAgICAgICBtX2dyQ29udGV4dCA9IEdyQ29udGV4dDo6Q3JlYXRlKGtPcGVuR0xfU2hhZGVy
c19HckVuZ2luZSwgcmVpbnRlcnByZXRfY2FzdDxHclBsYXRmb3JtM0RDb250ZXh0PihpbnRlcmZh
Y2UuZ2V0KCkpKTsKLSAgICAgICAgaWYgKG1fZ3JDb250ZXh0KSB7Ci0gICAgICAgICAgICBtX2dy
Q29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heEdhbmVzaFRleHR1cmVDYWNoZUNvdW50
LCBtYXhHYW5lc2hUZXh0dXJlQ2FjaGVCeXRlcyk7Ci0gICAgICAgICAgICBFeHRlbnNpb25zM0RD
aHJvbWl1bSogZXh0ZW5zaW9uczNEQ2hyb21pdW0gPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RD
aHJvbWl1bSo+KGdldEV4dGVuc2lvbnMoKSk7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uczNE
Q2hyb21pdW0tPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9ncHVfbWVtb3J5X21hbmFnZXIiKSkKLSAg
ICAgICAgICAgICAgICBleHRlbnNpb25zM0RDaHJvbWl1bS0+c2V0R3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKGFkb3B0UHRyKG5ldyBHck1lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2sodGhpcykpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbV9n
ckNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwcmVwYXJlVGV4
dHVyZSgpCitHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQogewotICAgIG1faW1wbC0+cHJl
cGFyZVRleHR1cmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1hcmtD
b250ZXh0Q2hhbmdlZCgpCitHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkK
IHsKLSAgICBtX2xheWVyQ29tcG9zaXRlZCA9IGZhbHNlOworICAgIG1fcHJpdmF0ZS0+c2V0Q29u
dGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsKKyAgICBtX3ByaXZhdGUtPnNldEVycm9yTWVzc2Fn
ZUNhbGxiYWNrKG51bGxwdHIpOworICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0
ZUNhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CisgICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2FsbGJhY2spCiB7Ci0gICAgbV9sYXllckNv
bXBvc2l0ZWQgPSB0cnVlOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhj
YWxsYmFjayk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpsYXllckNvbXBv
c2l0ZWQoKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
IGNhbGxiYWNrKQogewotICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKKyAgICBtX3ByaXZh
dGUtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKGNhbGxiYWNrKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhpbnQgZnJhbWVidWZm
ZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIpCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBI
b3N0V2luZG93KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQog
ewotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IDA7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUg
PSA0ICogd2lkdGggKiBoZWlnaHQ7Ci0KLSAgICBjb25zdCBTa0JpdG1hcCogY2FudmFzQml0bWFw
ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpOwot
ICAgIGNvbnN0IFNrQml0bWFwKiByZWFkYmFja0JpdG1hcCA9IDA7Ci0gICAgQVNTRVJUKGNhbnZh
c0JpdG1hcC0+Y29uZmlnKCkgPT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKTsKLSAgICBp
ZiAoY2FudmFzQml0bWFwLT53aWR0aCgpID09IHdpZHRoICYmIGNhbnZhc0JpdG1hcC0+aGVpZ2h0
KCkgPT0gaGVpZ2h0KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZhc3Rlc3QgYW5kIG1vc3Qg
Y29tbW9uIGNhc2UuIFdlIHJlYWQgYmFjawotICAgICAgICAvLyBkaXJlY3RseSBpbnRvIHRoZSBj
YW52YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICByZWFkYmFja0JpdG1hcCA9IGNhbnZhc0Jp
dG1hcDsKLSAgICAgICAgbV9yZXNpemluZ0JpdG1hcC5yZXNldCgpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFdlIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3JhcnkgYml0bWFwIGZvciByZWFk
aW5nIGJhY2sgdGhlCi0gICAgICAgIC8vIHBpeGVsIGRhdGEuIFdlIHdpbGwgdGhlbiB1c2UgU2tp
YSB0byByZXNjYWxlIHRoaXMgYml0bWFwIHRvCi0gICAgICAgIC8vIHRoZSBzaXplIG9mIHRoZSBj
YW52YXMncyBiYWNraW5nIHN0b3JlLgotICAgICAgICBpZiAobV9yZXNpemluZ0JpdG1hcC53aWR0
aCgpICE9IHdpZHRoIHx8IG1fcmVzaXppbmdCaXRtYXAuaGVpZ2h0KCkgIT0gaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICBtX3Jlc2l6aW5nQml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0FSR0JfODg4
OF9Db25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7Ci0gICAgICAg
ICAgICBpZiAoIW1fcmVzaXppbmdCaXRtYXAuYWxsb2NQaXhlbHMoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVhZGJhY2tCaXRtYXAgPSAmbV9yZXNpemlu
Z0JpdG1hcDsKLSAgICB9Ci0KLSAgICAvLyBSZWFkIGJhY2sgdGhlIGZyYW1lIGJ1ZmZlci4KLSAg
ICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1hcExvY2soKnJlYWRiYWNrQml0bWFwKTsKLSAgICBwaXhl
bHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocmVhZGJhY2tCaXRtYXAtPmdldFBpeGVs
cygpKTsKLQotICAgIG1faW1wbC0+cmVhZEJhY2tGcmFtZWJ1ZmZlcihwaXhlbHMsIDQgKiB3aWR0
aCAqIGhlaWdodCwgZnJhbWVidWZmZXIsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXJTaXpl
OyBpICs9IDQpIHsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMF0gPSBzdGQ6Om1pbigyNTUsIHBp
eGVsc1tpICsgMF0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgICAgIHBpeGVsc1tp
ICsgMV0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsgMV0gKiBwaXhlbHNbaSArIDNdIC8gMjU1
KTsKLSAgICAgICAgICAgIHBpeGVsc1tpICsgMl0gPSBzdGQ6Om1pbigyNTUsIHBpeGVsc1tpICsg
Ml0gKiBwaXhlbHNbaSArIDNdIC8gMjU1KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBBU1NFUlQo
cmVuZGVyU3R5bGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KTsKIAotICAgIHJlYWRiYWNrQml0bWFwLT5ub3RpZnlQaXhlbHNDaGFuZ2VkKCk7Ci0gICAg
aWYgKG1fcmVzaXppbmdCaXRtYXAucmVhZHlUb0RyYXcoKSkgewotICAgICAgICAvLyBXZSBuZWVk
IHRvIGRyYXcgdGhlIHJlc2l6aW5nIGJpdG1hcCBpbnRvIHRoZSBjYW52YXMncyBiYWNraW5nIHN0
b3JlLgotICAgICAgICBTa0NhbnZhcyBjYW52YXMoKmNhbnZhc0JpdG1hcCk7Ci0gICAgICAgIFNr
UmVjdCBkc3Q7Ci0gICAgICAgIGRzdC5zZXQoU2tJbnRUb1NjYWxhcigwKSwgU2tJbnRUb1NjYWxh
cigwKSwgU2tJbnRUb1NjYWxhcihjYW52YXNCaXRtYXAtPndpZHRoKCkpLCBTa0ludFRvU2NhbGFy
KGNhbnZhc0JpdG1hcC0+aGVpZ2h0KCkpKTsKLSAgICAgICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0
KG1fcmVzaXppbmdCaXRtYXAsIDAsIGRzdCk7Ci0gICAgfQotfQorICAgIFdlYktpdDo6V2ViR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgd2ViQXR0cmlidXRlczsKKyAgICB3ZWJBdHRyaWJ1
dGVzLmFscGhhID0gYXR0cnMuYWxwaGE7CisgICAgd2ViQXR0cmlidXRlcy5kZXB0aCA9IGF0dHJz
LmRlcHRoOworICAgIHdlYkF0dHJpYnV0ZXMuc3RlbmNpbCA9IGF0dHJzLnN0ZW5jaWw7CisgICAg
d2ViQXR0cmlidXRlcy5hbnRpYWxpYXMgPSBhdHRycy5hbnRpYWxpYXM7CisgICAgd2ViQXR0cmli
dXRlcy5wcmVtdWx0aXBsaWVkQWxwaGEgPSBhdHRycy5wcmVtdWx0aXBsaWVkQWxwaGE7CisgICAg
d2ViQXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSBhdHRycy5ub0V4dGVuc2lvbnM7CisgICAgd2Vi
QXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGF0dHJzLnNoYXJlUmVzb3VyY2VzOworICAgIHdl
YkF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSBhdHRycy5wcmVmZXJEaXNjcmV0ZUdQVTsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1
ZmZlcikKLXsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVySWQ7Ci0gICAgaW50IHdp
ZHRoLCBoZWlnaHQ7Ci0gICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJhd2luZ0J1ZmZlciwgbV9p
bXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBwYWludEZy
YW1lYnVmZmVyVG9DYW52YXMoZnJhbWVidWZmZXJJZCwgd2lkdGgsIGhlaWdodCwgIW1faW1wbC0+
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBsaWVkQWxwaGEsIGltYWdlQnVmZmVyKTsK
LX0KKyAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9
IGFkb3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlT2Zmc2NyZWVuR3Jh
cGhpY3NDb250ZXh0M0Qod2ViQXR0cmlidXRlcykpOworICAgIGlmICghd2ViQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIDA7CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludENv
bXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqKQotewotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgcmVuZGVyU3R5bGUsIGF0
dHJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcik7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KERyYXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIpCitQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QKIHsK
LSAgICBpZiAobV9pbXBsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpLnByZW11bHRpcGxpZWRBbHBo
YSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVy
SWQ7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgZ2V0RHJhd2luZ1BhcmFtZXRlcnMoZHJh
d2luZ0J1ZmZlciwgbV9pbXBsLmdldCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0
KTsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRl
KEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IGlt
YWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7Ci0gICAgc2l6ZV90IGJ1ZmZlclNpemUgPSA0ICogd2lk
dGggKiBoZWlnaHQ7Ci0KLSAgICBtX2ltcGwtPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBi
dWZmZXJTaXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4
ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKLQotICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgp
OworICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorUGxhdGZv
cm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1UZXh0dXJlKCkgY29uc3QKIHsK
LSAgICBpZiAod2lkdGggPT0gbV9pbXBsLT53aWR0aCgpICYmIGhlaWdodCA9PSBtX2ltcGwtPmhl
aWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ltcGwtPnJlc2hhcGUod2lkdGgsIGhl
aWdodCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRQbGF0Zm9ybVRl
eHR1cmVJZCgpOwogfQogCi1JbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAorR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQz
RDo6Z3JDb250ZXh0KCkKIHsKLSAgICByZXR1cm4gSW50U2l6ZShtX2ltcGwtPndpZHRoKCksIG1f
aW1wbC0+aGVpZ2h0KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmdyQ29udGV4dCgpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNDb250ZXh0TG9zdCgpCitQbGF0Zm9y
bUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1faW1wbC0+aXNDb250ZXh0TG9zdCgpOworICAgIHJldHVybiAwOwogfQogCi0vLyBN
YWNyb3MgdG8gYXNzaXN0IGluIGRlbGVnYXRpbmcgZnJvbSBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUgdG8KKy8vIE1hY3JvcyB0byBhc3Npc3QgaW4gZGVsZWdhdGluZyBmcm9tIEdyYXBoaWNzQ29u
dGV4dDNEIHRvCiAvLyBXZWJHcmFwaGljc0NvbnRleHQzRC4KIAotI2RlZmluZSBERUxFR0FURV9U
T19JTVBMKG5hbWUpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKCkgXAor
I2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUKG5hbWUpIFwKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om5hbWUoKSBcCiB7IFwKLSAgICBtX2ltcGwtPm5hbWUoKTsgXAorICAgIG1fcHJpdmF0
ZS0+d2ViQ29udGV4dCgpLT5uYW1lKCk7IFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBM
X1IobmFtZSwgcnQpICAgICAgICAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5h
bWUoKSBcCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfUihuYW1lLCBydCkgICAgICAg
ICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAogeyBcCi0gICAgcmV0dXJuIG1f
aW1wbC0+bmFtZSgpOyBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1l
KCk7IFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzEobmFtZSwgdDEpIFwKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExKSBcCisjZGVmaW5lIERFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfMShuYW1lLCB0MSkgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFt
ZSh0MSBhMSkgXAogeyBcCi0gICAgbV9pbXBsLT5uYW1lKGExKTsgXAorICAgIG1fcHJpdmF0ZS0+
d2ViQ29udGV4dCgpLT5uYW1lKGExKTsgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
MVIobmFtZSwgdDEsIHJ0KSAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om5hbWUo
dDEgYTEpIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihuYW1lLCB0MSwgcnQp
ICAgIFwKK3J0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSBcCiB7IFwKLSAgICByZXR1
cm4gbV9pbXBsLT5uYW1lKGExKTsgXAorICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQo
KS0+bmFtZShhMSk7IFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzIobmFtZSwgdDEs
IHQyKSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIp
IFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKG5hbWUsIHQxLCB0MikgXAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKIHsgXAotICAgIG1faW1w
bC0+bmFtZShhMSwgYTIpOyBcCisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEs
IGEyKTsgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMlIobmFtZSwgdDEsIHQyLCBy
dCkgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIpIFwK
KyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yUihuYW1lLCB0MSwgdDIsIHJ0KSAgXAor
cnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyKSBcCiB7IFwKLSAgICByZXR1
cm4gbV9pbXBsLT5uYW1lKGExLCBhMik7IFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250
ZXh0KCktPm5hbWUoYTEsIGEyKTsgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMyhu
YW1lLCB0MSwgdDIsIHQzKSAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKKyNkZWZpbmUgREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8zKG5hbWUsIHQxLCB0MiwgdDMpICAgXAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCiB7IFwKLSAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBh
Myk7ICAgICAgICAgICAgICAgICAgXAorICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1l
KGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzNSKG5hbWUsIHQxLCB0MiwgdDMsIHJ0KSAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCisjZGVmaW5lIERFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfM1IobmFtZSwgdDEsIHQyLCB0MywgcnQpICAgXAorcnQgR3JhcGhpY3ND
b250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAogeyBcCi0gICAgcmV0dXJu
IG1faW1wbC0+bmFtZShhMSwgYTIsIGEzKTsgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAg
ICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzQobmFtZSwgdDEsIHQyLCB0Mywg
dDQpICAgIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBh
MiwgdDMgYTMsIHQ0IGE0KSAgXAorI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzQobmFt
ZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEg
YTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCiB7IFwKLSAgICBtX2ltcGwtPm5hbWUoYTEsIGEy
LCBhMywgYTQpOyAgICAgICAgICAgICAgXAorICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5u
YW1lKGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FU
RV9UT19JTVBMXzRSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCBydCkgICAgICAgXAotcnQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgICAg
ICAgXAorI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzRSKG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCBydCkgICAgXAorcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0
MyBhMywgdDQgYTQpICBcCiB7IFwKLSAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMs
IGE0KTsgICAgICAgICAgIFwKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5h
bWUoYTEsIGEyLCBhMywgYTQpOyAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RP
X0lNUExfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAg
ICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzUobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1KSAgICAgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAgICAgICAgXAogeyBcCi0gICAgbV9pbXBsLT5uYW1l
KGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAorICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5u
YW1lKGExLCBhMiwgYTMsIGE0LCBhNSk7ICAgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfNVIobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCBydCkgICAgICBcCi1ydCBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1KSAg
ICAgICAgXAorI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzYobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1LCB0NikgIFwKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQy
IGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNikgXAogeyBcCi0gICAgcmV0dXJuIG1faW1w
bC0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUpOyAgIFwKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRl
eHQoKS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsgICBcCiB9CiAKLSNkZWZpbmUgREVM
RUdBVEVfVE9fSU1QTF82KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYpICBcCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2KSBcCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNlIobmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgcnQpICBcCitydCBHcmFwaGljc0NvbnRleHQzRDo6bmFt
ZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCiB7IFwKLSAgICBt
X2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgICAgIFwKKyAgICByZXR1cm4g
bV9wcml2YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAg
ICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzZSKG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSwgdDYsIHJ0KSAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQx
IGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYpIFwKKyNkZWZpbmUgREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF83KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KSBcCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0
NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCiB7IFwKLSAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExLCBh
MiwgYTMsIGE0LCBhNSwgYTYpOyAgICAgICBcCisgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKIH0KIAotI2RlZmluZSBERUxF
R0FURV9UT19JTVBMXzcobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIFwKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0
LCB0NSBhNSwgdDYgYTYsIHQ3IGE3KSBcCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
N1IobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHJ0KSBcCitydCBHcmFwaGljc0Nv
bnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNykgXAogeyBcCi0gICAgbV9pbXBsLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3
KTsgICBcCisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwg
YTMsIGE0LCBhNSwgYTYsIGE3KTsgICBcCiB9CiAKLSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF83
UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgcnQpIFwKLXJ0IEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2
IGE2LCB0NyBhNykgXAorI2RlZmluZSBERUxFR0FURV9UT19XRUJDT05URVhUXzgobmFtZSwgdDEs
IHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICBcCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3
LCB0OCBhOCkgXAogeyBcCi0gICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEzLCBhNCwg
YTUsIGE2LCBhNyk7ICAgXAorICAgIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBh
MiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCk7ICAgICAgXAogfQogCi0jZGVmaW5lIERFTEVHQVRF
X1RPX0lNUExfOChuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgpICAgICAgIFwK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSwgdDYgYTYsIHQ3IGE3LCB0OCBhOCkgXAorI2RlZmluZSBERUxFR0FURV9U
T19XRUJDT05URVhUXzkobmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSkg
XAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBh
NCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgsIHQ5IGE5KSBcCiB7IFwKLSAgICBtX2ltcGwt
Pm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsgICAgICBcCisgICAgbV9wcml2
YXRlLT53ZWJDb250ZXh0KCktPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBh
OSk7ICAgXAogfQogCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfOShuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSAgICAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0
NyBhNywgdDggYTgsIHQ5IGE5KSBcCisjZGVmaW5lIERFTEVHQVRFX1RPX1dFQkNPTlRFWFRfOVIo
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSwgcnQpIFwKK3J0IEdyYXBo
aWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSwgdDYg
YTYsIHQ3IGE3LCB0OCBhOCwgdDkgYTkpIFwKIHsgXAotICAgIG1faW1wbC0+bmFtZShhMSwgYTIs
IGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICAgICBcCisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+d2ViQ29udGV4dCgpLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkp
OyAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzlSKG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDksIHJ0KSBcCi1ydCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcs
IHQ4IGE4LCB0OSBhOSkgXAoteyBcCi0gICAgcmV0dXJuIG1faW1wbC0+bmFtZShhMSwgYTIsIGEz
LCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCi19CitERUxFR0FURV9UT19XRUJDT05URVhU
X1IobWFrZUNvbnRleHRDdXJyZW50LCBib29sKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVChwcmVw
YXJlVGV4dHVyZSkKIAotI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzEwKG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDksIHQxMCkgXAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwg
dDcgYTcsIHQ4IGE4LCB0OSBhOSwgdDEwIGExMCkgXAoteyBcCi0gICAgbV9pbXBsLT5uYW1lKGEx
LCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCk7IFwKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPndlYkNvbnRleHQoKS0+aXNHTEVTMkNvbXBsaWFudCgpOwogfQogCi1ERUxFR0FURV9UT19J
TVBMX1IobWFrZUNvbnRleHRDdXJyZW50LCBib29sKQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzUmVzb3VyY2VTYWZlKCkKIHsKLSAgICByZXR1cm4gbV9pbXBsLT5pc0dMRVMyQ29tcGxp
YW50KCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNSZXNvdXJjZVNhZmUoKTsKIH0KIAotREVM
RUdBVEVfVE9fSU1QTF8xKGFjdGl2ZVRleHR1cmUsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU1Q
TF8yKGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKK0RF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfMShhY3RpdmVUZXh0dXJlLCBHQzNEZW51bSkKK0RFTEVHQVRF
X1RPX1dFQkNPTlRFWFRfMihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3Jt
M0RPYmplY3QpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpiaW5kQXR0cmliTG9j
YXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgY29uc3QgU3Ry
aW5nJiBuYW1lKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKLSAgICBtX2ltcGwtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+YmluZEF0dHJp
YkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1ERUxF
R0FURV9UT19JTVBMXzIoYmluZEJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1E
RUxFR0FURV9UT19JTVBMXzIoYmluZEZyYW1lYnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9i
amVjdCkKLURFTEVHQVRFX1RPX0lNUExfMihiaW5kUmVuZGVyYnVmZmVyLCBHQzNEZW51bSwgUGxh
dGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMihiaW5kVGV4dHVyZSwgR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzQoYmxlbmRDb2xvciwgR0MzRGNs
YW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZikKLURFTEVHQVRFX1RPX0lN
UExfMShibGVuZEVxdWF0aW9uLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMihibGVuZEVx
dWF0aW9uU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMihi
bGVuZEZ1bmMsIEdDM0RlbnVtLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lNUExfNChibGVuZEZ1
bmNTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
R0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1faW1wbC0+YnVmZmVy
RGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdlKTsKLX0KK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MihiaW5kQnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX1dF
QkNPTlRFWFRfMihiaW5kRnJhbWVidWZmZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQor
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJpbmRSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBQbGF0
Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJpbmRUZXh0dXJlLCBHQzNE
ZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChibGVuZENv
bG9yLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8xKGJsZW5kRXF1YXRpb24sIEdDM0RlbnVtKQorREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVt
KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGJsZW5kRnVuYywgR0MzRGVudW0sIEdDM0RlbnVt
KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KGJsZW5kRnVuY1NlcGFyYXRlLCBHQzNEZW51bSwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29u
c3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
dWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVz
YWdlKQogewotICAgIG1faW1wbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdl
KTsKKyAgICBidWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsK
LSAgICBtX2ltcGwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwot
fQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KGJ1ZmZlckRhdGEsIEdDM0RlbnVtLCBHQzNEc2l6
ZWlwdHIsIGNvbnN0IHZvaWQqLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChi
dWZmZXJTdWJEYXRhLCBHQzNEZW51bSwgR0MzRGludHB0ciwgR0MzRHNpemVpcHRyLCBjb25zdCB2
b2lkKikKKworREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
LCBHQzNEZW51bSwgR0MzRGVudW0pCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoY2xlYXIsIEdD
M0RiaXRmaWVsZCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChjbGVhckNvbG9yLCBHQzNEY2xh
bXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmKQorREVMRUdBVEVfVE9fV0VC
Q09OVEVYVF8xKGNsZWFyRGVwdGgsIEdDM0RjbGFtcGYpCitERUxFR0FURV9UT19XRUJDT05URVhU
XzEoY2xlYXJTdGVuY2lsLCBHQzNEaW50KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KGNvbG9y
TWFzaywgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9vbGVhbiwgR0MzRGJvb2xlYW4p
CitERUxFR0FURV9UT19XRUJDT05URVhUXzEoY29tcGlsZVNoYWRlciwgUGxhdGZvcm0zRE9iamVj
dCkKIAotREVMRUdBVEVfVE9fSU1QTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBHQzNEZW51
bSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzEoY2xlYXIsIEdDM0RiaXRmaWVsZCkKLURF
TEVHQVRFX1RPX0lNUExfNChjbGVhckNvbG9yLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBmLCBHQzNE
Y2xhbXBmLCBHQzNEY2xhbXBmKQotREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyRGVwdGgsIEdDM0Rj
bGFtcGYpCi1ERUxFR0FURV9UT19JTVBMXzEoY2xlYXJTdGVuY2lsLCBHQzNEaW50KQotREVMRUdB
VEVfVE9fSU1QTF80KGNvbG9yTWFzaywgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBHQzNEYm9v
bGVhbiwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTVBMXzEoY29tcGlsZVNoYWRlciwgUGxh
dGZvcm0zRE9iamVjdCkKLQotREVMRUdBVEVfVE9fSU1QTF84KGNvbXByZXNzZWRUZXhJbWFnZTJE
LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXpl
aSwgR0MzRHNpemVpLCBjb25zdCB2b2lkKikKLURFTEVHQVRFX1RPX0lNUExfOShjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEc2l6ZWksIGNvbnN0IHZvaWQqKQotREVMRUdBVEVf
VE9fSU1QTF84KGNvcHlUZXhJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdD
M0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50KQotREVMRUdBVEVf
VE9fSU1QTF84KGNvcHlUZXhTdWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwg
R0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi1ERUxFR0FU
RV9UT19JTVBMXzEoY3VsbEZhY2UsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU1QTF8xKGRlcHRo
RnVuYywgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzEoZGVwdGhNYXNrLCBHQzNEYm9vbGVh
bikKLURFTEVHQVRFX1RPX0lNUExfMihkZXB0aFJhbmdlLCBHQzNEY2xhbXBmLCBHQzNEY2xhbXBm
KQotREVMRUdBVEVfVE9fSU1QTF8yKGRldGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxh
dGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMShkaXNhYmxlLCBHQzNEZW51bSkKLURF
TEVHQVRFX1RPX0lNUExfMShkaXNhYmxlVmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50KQotREVM
RUdBVEVfVE9fSU1QTF8zKGRyYXdBcnJheXMsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEc2l6ZWkp
Ci1ERUxFR0FURV9UT19JTVBMXzQoZHJhd0VsZW1lbnRzLCBHQzNEZW51bSwgR0MzRHNpemVpLCBH
QzNEZW51bSwgR0MzRHNpemVpcHRyKQotCi1ERUxFR0FURV9UT19JTVBMXzEoZW5hYmxlLCBHQzNE
ZW51bSkKLURFTEVHQVRFX1RPX0lNUExfMShlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVp
bnQpCi1ERUxFR0FURV9UT19JTVBMKGZpbmlzaCkKLURFTEVHQVRFX1RPX0lNUEwoZmx1c2gpCi1E
RUxFR0FURV9UT19JTVBMXzQoZnJhbWVidWZmZXJSZW5kZXJidWZmZXIsIEdDM0RlbnVtLCBHQzNE
ZW51bSwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzUoZnJh
bWVidWZmZXJUZXh0dXJlMkQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIFBsYXRmb3Jt
M0RPYmplY3QsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTVBMXzEoZnJvbnRGYWNlLCBHQzNEZW51
bSkKLURFTEVHQVRFX1RPX0lNUExfMShnZW5lcmF0ZU1pcG1hcCwgR0MzRGVudW0pCi0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfOChjb21wcmVzc2VkVGV4SW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdD
M0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgY29uc3Qgdm9p
ZCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzkoY29tcHJlc3NlZFRleFN1YkltYWdlMkQsIEdD
M0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBjb25zdCB2b2lkKikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfOChj
b3B5VGV4SW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGludCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfOChjb3B5VGV4U3ViSW1hZ2UyRCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQorREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF8xKGN1bGxGYWNlLCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MShkZXB0aEZ1bmMsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRlcHRoTWFz
aywgR0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19XRUJDT05URVhUXzIoZGVwdGhSYW5nZSwgR0Mz
RGNsYW1wZiwgR0MzRGNsYW1wZikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihkZXRhY2hTaGFk
ZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJD
T05URVhUXzEoZGlzYWJsZSwgR0MzRGVudW0pCitERUxFR0FURV9UT19XRUJDT05URVhUXzEoZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5LCBHQzNEdWludCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
MyhkcmF3QXJyYXlzLCBHQzNEZW51bSwgR0MzRGludCwgR0MzRHNpemVpKQorREVMRUdBVEVfVE9f
V0VCQ09OVEVYVF80KGRyYXdFbGVtZW50cywgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0s
IEdDM0RpbnRwdHIpCisKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShlbmFibGUsIEdDM0RlbnVt
KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGVuYWJsZVZlcnRleEF0dHJpYkFycmF5LCBHQzNE
dWludCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFQoZmluaXNoKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVChmbHVzaCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKK0RF
TEVHQVRFX1RPX1dFQkNPTlRFWFRfNShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgR0MzRGVudW0sIEdD
M0RlbnVtLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCkKK0RFTEVHQVRFX1RP
X1dFQkNPTlRFWFRfMShmcm9udEZhY2UsIEdDM0RlbnVtKQorREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8xKGdlbmVyYXRlTWlwbWFwLCBHQzNEZW51bSkKKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCiB7CiAgICAgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6
QWN0aXZlSW5mbyB3ZWJJbmZvOwotICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVBdHRyaWIocHJv
Z3JhbSwgaW5kZXgsIHdlYkluZm8pKQorICAgIGlmICghbV9wcml2YXRlLT53ZWJDb250ZXh0KCkt
PmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgd2ViSW5mbykpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICBpbmZvLm5hbWUgPSB3ZWJJbmZvLm5hbWU7CiAgICAgaW5mby50eXBlID0g
d2ViSW5mby50eXBlOwpAQCAtNTA4LDEwICszMDAsMTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmdldEFjdGl2ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1
aW4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVu
aWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZv
IHdlYkluZm87Ci0gICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5k
ZXgsIHdlYkluZm8pKQorICAgIGlmICghbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldEFjdGl2
ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIHdlYkluZm8pKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaW5mby5uYW1lID0gd2ViSW5mby5uYW1lOwogICAgIGluZm8udHlwZSA9IHdlYkluZm8u
dHlwZTsKQEAgLTUxOSw4MzUgKzMxMSwyNjEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWkKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotREVMRUdBVEVfVE9fSU1QTF80KGdldEF0dGFjaGVkU2hhZGVy
cywgUGxhdGZvcm0zRE9iamVjdCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkqLCBQbGF0Zm9ybTNET2Jq
ZWN0KikKIAotR0MzRGludCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldEF0dHJpYkxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF80KGdldEF0dGFjaGVkU2hhZGVycywgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRHNpemVpLCBHQzNEc2l6ZWkqLCBQbGF0Zm9ybTNET2JqZWN0KikKKworR0MzRGludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1faW1wbC0+Z2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT53ZWJDb250ZXh0KCktPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKLURFTEVHQVRFX1RPX0lNUExfMihnZXRCb29sZWFudiwgR0MzRGVudW0sIEdD
M0Rib29sZWFuKikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihnZXRCb29sZWFudiwgR0MzRGVu
dW0sIEdDM0Rib29sZWFuKikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRCdWZmZXJQYXJh
bWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKIAotREVMRUdBVEVfVE9fSU1Q
TF8zKGdldEJ1ZmZlclBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKQot
Ci1HcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCiB7Ci0gICAgV2ViS2l0OjpX
ZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRyaWJ1dGVzID0gbV9pbXBsLT5n
ZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMgd2ViQXR0cmlidXRlcyA9IG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRD
b250ZXh0QXR0cmlidXRlcygpOwogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXM7CiAgICAgYXR0cmlidXRlcy5hbHBoYSA9IHdlYkF0dHJpYnV0ZXMuYWxwaGE7CiAg
ICAgYXR0cmlidXRlcy5kZXB0aCA9IHdlYkF0dHJpYnV0ZXMuZGVwdGg7CiAgICAgYXR0cmlidXRl
cy5zdGVuY2lsID0gd2ViQXR0cmlidXRlcy5zdGVuY2lsOwogICAgIGF0dHJpYnV0ZXMuYW50aWFs
aWFzID0gd2ViQXR0cmlidXRlcy5hbnRpYWxpYXM7CiAgICAgYXR0cmlidXRlcy5wcmVtdWx0aXBs
aWVkQWxwaGEgPSB3ZWJBdHRyaWJ1dGVzLnByZW11bHRpcGxpZWRBbHBoYTsKLSAgICBhdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyOworICAg
IGF0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID0gbV9wcml2YXRlLT5wcmVzZXJ2ZURy
YXdpbmdCdWZmZXIoKTsKICAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gd2ViQXR0
cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVTsKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAot
REVMRUdBVEVfVE9fSU1QTF9SKGdldEVycm9yLCBHQzNEZW51bSkKLQotREVMRUdBVEVfVE9fSU1Q
TF8yKGdldEZsb2F0diwgR0MzRGVudW0sIEdDM0RmbG9hdCopCi0KLURFTEVHQVRFX1RPX0lNUExf
NChnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGludCopCi0KLURFTEVHQVRFX1RPX0lNUExfMihnZXRJbnRlZ2Vydiwg
R0MzRGVudW0sIEdDM0RpbnQqKQotCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0UHJvZ3JhbWl2LCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCopCi0KLVN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKLXsKLSAgICByZXR1cm4gbV9pbXBsLT5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKLX0K
LQotREVMRUdBVEVfVE9fSU1QTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RpbnQqKQotCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0U2hhZGVyaXYs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfUihnZXRFcnJvciwgR0MzRGVudW0pCitERUxFR0FURV9UT19XRUJDT05URVhUXzIoZ2V0
RmxvYXR2LCBHQzNEZW51bSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzIoZ2V0SW50ZWdlcnYs
IEdDM0RlbnVtLCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRQcm9ncmFt
aXYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50KikKIAotU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQogewotICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlckluZm9M
b2coc2hhZGVyKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFByb2dy
YW1JbmZvTG9nKHByb2dyYW0pOwogfQogCi1ERUxFR0FURV9UT19JTVBMXzQoZ2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqLCBHQzNEaW50KikKIAot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQotewotICAgIHJldHVybiBtX2ltcGwtPmdldFNoYWRlclNvdXJjZShz
aGFkZXIpOwotfQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCop
CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmdldFN0cmluZyhHQzNEZW51bSBu
YW1lKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQogewotICAgIHJldHVybiBtX2ltcGwtPmdldFN0cmluZyhuYW1lKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFNoYWRlckluZm9Mb2coc2hh
ZGVyKTsKIH0KIAotREVMRUdBVEVfVE9fSU1QTF8zKGdldFRleFBhcmFtZXRlcmZ2LCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0VGV4UGFyYW1l
dGVyaXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCiAKLURFTEVHQVRFX1RPX0lNUExf
MyhnZXRVbmlmb3JtZnYsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RmbG9hdCopCi1E
RUxFR0FURV9UT19JTVBMXzMoZ2V0VW5pZm9ybWl2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50
LCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChnZXRTaGFkZXJQcmVjaXNpb25G
b3JtYXQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCosIEdDM0RpbnQqKQogCi1HQzNEaW50
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgcmV0
dXJuIG1faW1wbC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRTaGFkZXJTb3VyY2Uo
c2hhZGVyKTsKIH0KIAotREVMRUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYmZ2LCBHQzNE
dWludCwgR0MzRGVudW0sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0VmVydGV4
QXR0cmliaXYsIEdDM0R1aW50LCBHQzNEZW51bSwgR0MzRGludCopCi0KLURFTEVHQVRFX1RPX0lN
UExfMlIoZ2V0VmVydGV4QXR0cmliT2Zmc2V0LCBHQzNEdWludCwgR0MzRGVudW0sIEdDM0RzaXpl
aXB0cikKLQotREVMRUdBVEVfVE9fSU1QTF8yKGhpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSkKLURF
TEVHQVRFX1RPX0lNUExfMVIoaXNCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFu
KQotREVMRUdBVEVfVE9fSU1QTF8xUihpc0VuYWJsZWQsIEdDM0RlbnVtLCBHQzNEYm9vbGVhbikK
LURFTEVHQVRFX1RPX0lNUExfMVIoaXNGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTVBMXzFSKGlzUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTVBMXzFSKGlzUmVuZGVyYnVmZmVyLCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExfMVIoaXNTaGFkZXIs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF8xUihpc1Rl
eHR1cmUsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF8x
KGxpbmVXaWR0aCwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9fSU1QTF8xKGxpbmtQcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8yKHBpeGVsU3RvcmVpLCBHQzNEZW51
bSwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lNUExfMihwb2x5Z29uT2Zmc2V0LCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfNyhyZWFkUGl4ZWxzLCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCB2b2lkKikKLURF
TEVHQVRFX1RPX0lNUEwocmVsZWFzZVNoYWRlckNvbXBpbGVyKQotREVMRUdBVEVfVE9fSU1QTF80
KHJlbmRlcmJ1ZmZlclN0b3JhZ2UsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNE
c2l6ZWkpCi1ERUxFR0FURV9UT19JTVBMXzIoc2FtcGxlQ292ZXJhZ2UsIEdDM0RjbGFtcGYsIEdD
M0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU1QTF80KHNjaXNzb3IsIEdDM0RpbnQsIEdDM0RpbnQs
IEdDM0RzaXplaSwgR0MzRHNpemVpKQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6
c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKEdDM0RlbnVtIG5hbWUpCiB7
Ci0gICAgbV9pbXBsLT5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzdHJpbmcudXRmOCgpLmRhdGEoKSk7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT5nZXRTdHJpbmcobmFtZSk7CiB9
CiAKLURFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsRnVuYywgR0MzRGVudW0sIEdDM0RpbnQsIEdD
M0R1aW50KQotREVMRUdBVEVfVE9fSU1QTF80KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIEdDM0RlbnVt
LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19JTVBMXzEoc3RlbmNp
bE1hc2ssIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU1QTF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUs
IEdDM0RlbnVtLCBHQzNEdWludCkKLURFTEVHQVRFX1RPX0lNUExfMyhzdGVuY2lsT3AsIEdDM0Rl
bnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzQoc3RlbmNpbE9wU2Vw
YXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtX2ltcGwtPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ERUxFR0FURV9UT19JTVBMXzMo
dGV4UGFyYW1ldGVyZiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZmxvYXQpCi1ERUxFR0FURV9U
T19JTVBMXzModGV4UGFyYW1ldGVyaSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KQorREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFRleFBhcmFtZXRlcmZ2LCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19XRUJDT05URVhUXzMoZ2V0VGV4UGFyYW1ldGVy
aXYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGludCopCitERUxFR0FURV9UT19XRUJDT05URVhU
XzMoZ2V0VW5pZm9ybWZ2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZmxvYXQqKQor
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKGdldFVuaWZvcm1pdiwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRGludCwgR0MzRGludCopCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCitHQzNEaW50
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9pbXBsLT50ZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1ERUxFR0FU
RV9UT19JTVBMXzIodW5pZm9ybTFmLCBHQzNEaW50LCBHQzNEZmxvYXQpCiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXpl
aSBzaXplLCBHQzNEZmxvYXQqIHYpCi17Ci0gICAgbV9pbXBsLT51bmlmb3JtMWZ2KGxvY2F0aW9u
LCBzaXplLCB2KTsKLX0KK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyhnZXRWZXJ0ZXhBdHRyaWJm
diwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF8zKGdldFZlcnRleEF0dHJpYml2LCBHQzNEdWludCwgR0MzRGVudW0sIEdDM0RpbnQqKQorREVM
RUdBVEVfVE9fV0VCQ09OVEVYVF8yUihnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQsIEdDM0R1aW50LCBH
QzNEZW51bSwgR0MzRHNpemVpcHRyKQogCi1ERUxFR0FURV9UT19JTVBMXzIodW5pZm9ybTFpLCBH
QzNEaW50LCBHQzNEaW50KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKGhpbnQsIEdDM0RlbnVt
LCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNCdWZmZXIsIFBsYXRmb3Jt
M0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihpc0VuYWJs
ZWQsIEdDM0RlbnVtLCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNG
cmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCitERUxFR0FURV9UT19X
RUJDT05URVhUXzFSKGlzUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCitE
RUxFR0FURV9UT19XRUJDT05URVhUXzFSKGlzUmVuZGVyYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMVIoaXNTaGFkZXIsIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xUihpc1Rl
eHR1cmUsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rib29sZWFuKQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8xKGxpbmVXaWR0aCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGxp
bmtQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKHBp
eGVsU3RvcmVpLCBHQzNEZW51bSwgR0MzRGludCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMihw
b2x5Z29uT2Zmc2V0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RpbnQqIHYpCi17Ci0gICAgbV9pbXBsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2
KTsKLX0KK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNyhyZWFkUGl4ZWxzLCBHQzNEaW50LCBHQzNE
aW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVtLCB2b2lkKikKIAot
REVMRUdBVEVfVE9fSU1QTF8zKHVuaWZvcm0yZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpCitERUxFR0FURV9UT19XRUJDT05URVhUKHJlbGVhc2VTaGFkZXJDb21waWxlcikKK0RFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfNChyZW5kZXJidWZmZXJTdG9yYWdlLCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RzaXplaSwgR0MzRHNpemVpKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKHNhbXBs
ZUNvdmVyYWdlLCBHQzNEY2xhbXBmLCBHQzNEYm9vbGVhbikKK0RFTEVHQVRFX1RPX1dFQkNPTlRF
WFRfNChzY2lzc29yLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0RmbG9hdCogdikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgbV9pbXBsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKKyAgICBt
X3ByaXZhdGUtPndlYkNvbnRleHQoKS0+c2hhZGVyU291cmNlKHNoYWRlciwgc3RyaW5nLnV0Zjgo
KS5kYXRhKCkpOwogfQogCi1ERUxFR0FURV9UT19JTVBMXzModW5pZm9ybTJpLCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEaW50KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxGdW5jLCBH
QzNEZW51bSwgR0MzRGludCwgR0MzRHVpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzQoc3Rl
bmNpbEZ1bmNTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEdWludCkK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShzdGVuY2lsTWFzaywgR0MzRHVpbnQpCitERUxFR0FU
RV9UT19XRUJDT05URVhUXzIoc3RlbmNpbE1hc2tTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0R1aW50
KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHN0ZW5jaWxPcCwgR0MzRGVudW0sIEdDM0RlbnVt
LCBHQzNEZW51bSkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNChzdGVuY2lsT3BTZXBhcmF0ZSwg
R0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0pCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBz
aXplLCBHQzNEaW50KiB2KQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBtX2ltcGwt
PnVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzQo
dW5pZm9ybTNmLCBHQzNEaW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGZsb2F0KiB2KQotewotICAgIG1faW1wbC0+dW5pZm9ybTNm
dihsb2NhdGlvbiwgc2l6ZSwgdik7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfNCh1bmlmb3JtM2ks
IEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXpl
LCBHQzNEaW50KiB2KQotewotICAgIG1faW1wbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6ZSwg
dik7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfNSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUs
IEdDM0RmbG9hdCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm00ZnYobG9jYXRpb24sIHNpemUs
IHYpOwotfQotCi1ERUxFR0FURV9UT19JTVBMXzUodW5pZm9ybTRpLCBHQzNEaW50LCBHQzNEaW50
LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6dW5pZm9ybTRpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRGlu
dCogdikKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYpOworICAg
IG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVu
aWZvcm1NYXRyaXgyZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKLXsKLSAgICBtX2ltcGwtPnVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwotfQorREVMRUdBVEVf
VE9fV0VCQ09OVEVYVF8zKHRleFBhcmFtZXRlcmYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZs
b2F0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHRleFBhcmFtZXRlcmksIEdDM0RlbnVtLCBH
QzNEZW51bSwgR0MzRGludCkKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIG1fcHJpdmF0
ZS0+d2ViQ29udGV4dCgpLT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKworREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF8yKHVuaWZvcm0xZiwgR0MzRGludCwgR0MzRGZsb2F0KQorREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF8zKHVuaWZvcm0xZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZs
b2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMih1bmlmb3JtMWksIEdDM0RpbnQsIEdDM0Rp
bnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTFpdiwgR0MzRGludCwgR0MzRHNp
emVpLCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtMmYsIEdDM0Rp
bnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8zKHVuaWZv
cm0yZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNP
TlRFWFRfMyh1bmlmb3JtMmksIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQpCitERUxFR0FURV9U
T19XRUJDT05URVhUXzModW5pZm9ybTJpdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEaW50KikK
K0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNCh1bmlmb3JtM2YsIEdDM0RpbnQsIEdDM0RmbG9hdCwg
R0MzRGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTNm
diwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVY
VF80KHVuaWZvcm0zaSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCkKK0RFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfMyh1bmlmb3JtM2l2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rp
bnQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF81KHVuaWZvcm00ZiwgR0MzRGludCwgR0MzRGZs
b2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fV0VCQ09O
VEVYVF8zKHVuaWZvcm00ZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZsb2F0KikKK0RFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfNSh1bmlmb3JtNGksIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQs
IEdDM0RpbnQsIEdDM0RpbnQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzModW5pZm9ybTRpdiwg
R0MzRGludCwgR0MzRHNpemVpLCBHQzNEaW50KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNCh1
bmlmb3JtTWF0cml4MmZ2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuLCBHQzNEZmxv
YXQqKQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF80KHVuaWZvcm1NYXRyaXgzZnYsIEdDM0RpbnQs
IEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19XRUJDT05U
RVhUXzQodW5pZm9ybU1hdHJpeDRmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiwg
R0MzRGZsb2F0KikKKworREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKHVzZVByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJDT05URVhUXzEodmFsaWRhdGVQcm9ncmFtLCBQ
bGF0Zm9ybTNET2JqZWN0KQorCitERUxFR0FURV9UT19XRUJDT05URVhUXzIodmVydGV4QXR0cmli
MWYsIEdDM0R1aW50LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIodmVydGV4
QXR0cmliMWZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRf
Myh2ZXJ0ZXhBdHRyaWIyZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF8yKHZlcnRleEF0dHJpYjJmdiwgR0MzRHVpbnQsIEdDM0RmbG9hdCop
CitERUxFR0FURV9UT19XRUJDT05URVhUXzQodmVydGV4QXR0cmliM2YsIEdDM0R1aW50LCBHQzNE
ZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8yKHZl
cnRleEF0dHJpYjNmdiwgR0MzRHVpbnQsIEdDM0RmbG9hdCopCitERUxFR0FURV9UT19XRUJDT05U
RVhUXzUodmVydGV4QXR0cmliNGYsIEdDM0R1aW50LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0Mz
RGZsb2F0LCBHQzNEZmxvYXQpCitERUxFR0FURV9UT19XRUJDT05URVhUXzIodmVydGV4QXR0cmli
NGZ2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNih2ZXJ0
ZXhBdHRyaWJQb2ludGVyLCBHQzNEdWludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0Rib29sZWFu
LCBHQzNEc2l6ZWksIEdDM0RpbnRwdHIpCisKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfNCh2aWV3
cG9ydCwgR0MzRGludCwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlm
ICh3aWR0aCA9PSBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+d2lkdGgoKSAmJiBoZWlnaHQgPT0g
bV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmhlaWdodCgpKQorICAgICAgICByZXR1cm47CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
dmFsdWUpCi17Ci0gICAgbV9pbXBsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKyAgICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+cmVzaGFwZSh3
aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnVuaWZv
cm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
cmtDb250ZXh0Q2hhbmdlZCgpCiB7Ci0gICAgbV9pbXBsLT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKKyAgICBtX3ByaXZhdGUtPm1hcmtDb250ZXh0
Q2hhbmdlZCgpOwogfQogCi1ERUxFR0FURV9UT19JTVBMXzEodXNlUHJvZ3JhbSwgUGxhdGZvcm0z
RE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMSh2YWxpZGF0ZVByb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZiwgR0MzRHVpbnQsIEdD
M0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWIxZnYsIEdDM0R1aW50LCBH
QzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1QTF8zKHZlcnRleEF0dHJpYjJmLCBHQzNEdWludCwg
R0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMmZ2
LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX0lNUExfNCh2ZXJ0ZXhBdHRyaWIz
ZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9U
T19JTVBMXzIodmVydGV4QXR0cmliM2Z2LCBHQzNEdWludCwgR0MzRGZsb2F0KikKLURFTEVHQVRF
X1RPX0lNUExfNSh2ZXJ0ZXhBdHRyaWI0ZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0
LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lNUExfMih2ZXJ0ZXhBdHRyaWI0
ZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU1QTF82KHZlcnRleEF0dHJp
YlBvaW50ZXIsIEdDM0R1aW50LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4sIEdDM0Rz
aXplaSwgR0MzRHNpemVpcHRyKQotCi1ERUxFR0FURV9UT19JTVBMXzQodmlld3BvcnQsIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpKQotCi1ERUxFR0FURV9UT19JTVBMX1Io
Y3JlYXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0
ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0
ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMX1IoY3JlYXRlUmVu
ZGVyYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xUihjcmVhdGVT
aGFkZXIsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF9SKGNy
ZWF0ZVRleHR1cmUsIFBsYXRmb3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExfMShkZWxl
dGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlRnJh
bWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlUHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMShkZWxldGVSZW5kZXJi
dWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTVBMXzEoZGVsZXRlU2hhZGVy
LCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVRleHR1cmUsIFBs
YXRmb3JtM0RPYmplY3QpCi0KLURFTEVHQVRFX1RPX0lNUExfMShzeW50aGVzaXplR0xFcnJvciwg
R0MzRGVudW0pCi0KLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnZXRF
eHRlbnNpb25zKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFk
b3B0UHRyKG5ldyBFeHRlbnNpb25zM0RDaHJvbWl1bSh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0
ZW5zaW9ucy5nZXQoKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5sYXllckNvbXBvc2l0ZWQoKTsK
IH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzUmVzb3VyY2VTYWZlKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQogewotICAgIGlmICht
X3Jlc291cmNlU2FmZXR5ID09IFJlc291cmNlU2FmZXR5VW5rbm93bikKLSAgICAgICAgbV9yZXNv
dXJjZVNhZmV0eSA9IGdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNv
dXJjZV9zYWZlIikgPyBSZXNvdXJjZVNhZmUgOiBSZXNvdXJjZVVuc2FmZTsKLSAgICByZXR1cm4g
bV9yZXNvdXJjZVNhZmV0eSA9PSBSZXNvdXJjZVNhZmU7CisgICAgbV9wcml2YXRlLT5tYXJrTGF5
ZXJDb21wb3NpdGVkKCk7CiB9CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgc3BsaXRTdHJpbmdIZWxw
ZXIoY29uc3QgU3RyaW5nJiBzdHIsIEhhc2hTZXQ8U3RyaW5nPiYgc2V0KQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHN1YnN0cmluZ3M7Ci0gICAgc3RyLnNwbGl0KCIgIiwgc3Vic3RyaW5ncyk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJzdHJpbmdzLnNpemUoKTsgKytpKQotICAgICAg
ICBzZXQuYWRkKHN1YnN0cmluZ3NbaV0pOwotfQotCi1TdHJpbmcgbWFwRXh0ZW5zaW9uTmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQiCi0gICAgICAgIHx8IG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIikKLSAgICAgICAgcmV0dXJuICJHTF9DSFJPTUlVTV9mcmFtZWJ1ZmZlcl9tdWx0aXNh
bXBsZSI7Ci0gICAgcmV0dXJuIG5hbWU7Ci19Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aW5pdGlhbGl6ZUV4dGVuc2lvbnMoKQot
ewotICAgIGlmIChtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOwotICAg
IGJvb2wgc3VjY2VzcyA9IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEFTU0VSVChzdWNjZXNz
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBleHRl
bnNpb25zU3RyaW5nID0gZ2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpFWFRFTlNJT05TKTsK
LSAgICBzcGxpdFN0cmluZ0hlbHBlcihleHRlbnNpb25zU3RyaW5nLCBtX2VuYWJsZWRFeHRlbnNp
b25zKTsKLQotICAgIFN0cmluZyByZXF1ZXN0YWJsZUV4dGVuc2lvbnNTdHJpbmcgPSBtX2ltcGwt
PmdldFJlcXVlc3RhYmxlRXh0ZW5zaW9uc0NIUk9NSVVNKCk7Ci0gICAgc3BsaXRTdHJpbmdIZWxw
ZXIocmVxdWVzdGFibGVFeHRlbnNpb25zU3RyaW5nLCBtX3JlcXVlc3RhYmxlRXh0ZW5zaW9ucyk7
Ci19Ci0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOwotICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKLSAgICByZXR1cm4g
bV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSB8fCBtX3JlcXVlc3RhYmxl
RXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmVuc3VyZUV4dGVuc2lvbkVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQor
dm9pZCBnZXREcmF3aW5nUGFyYW1ldGVycyhEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGxhdGZvcm0zRE9iamVjdCogZnJhbWVCdWZmZXJJZCwgaW50KiB3
aWR0aCwgaW50KiBoZWlnaHQpCiB7Ci0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLQotICAg
IFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKLSAgICBpZiAobV9l
bmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAobV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFt
ZSkpIHsKLSAgICAgICAgbV9pbXBsLT5yZXF1ZXN0RXh0ZW5zaW9uQ0hST01JVU0obWFwcGVkTmFt
ZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMuY2xlYXIoKTsK
LSAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY2xlYXIoKTsKLSAgICAgICAgbV9pbml0
aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSBmYWxzZTsKKyAgICBpZiAoZHJhd2luZ0J1ZmZl
cikgeworICAgICAgICAqZnJhbWVCdWZmZXJJZCA9IGRyYXdpbmdCdWZmZXItPmZyYW1lYnVmZmVy
KCk7CisgICAgICAgICp3aWR0aCA9IGRyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOworICAg
ICAgICAqaGVpZ2h0ID0gZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgICpmcmFtZUJ1ZmZlcklkID0gMDsKKyAgICAgICAgKndpZHRoID0gZ3JhcGhp
Y3NDb250ZXh0M0QtPndpZHRoKCk7CisgICAgICAgICpoZWlnaHQgPSBncmFwaGljc0NvbnRleHQz
RC0+aGVpZ2h0KCk7CiAgICAgfQotCi0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLSAgICBy
ZXR1cm4gbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKTsKLX0KLQotYm9v
bCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmlzRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMoKTsKLSAgICBTdHJpbmcgbWFw
cGVkTmFtZSA9IG1hcEV4dGVuc2lvbk5hbWUobmFtZSk7Ci0gICAgcmV0dXJuIG1fZW5hYmxlZEV4
dGVuc2lvbnMuY29udGFpbnMobWFwcGVkTmFtZSk7Ci19Ci0KLURFTEVHQVRFX1RPX0lNUExfNChw
b3N0U3ViQnVmZmVyQ0hST01JVU0sIGludCwgaW50LCBpbnQsIGludCkKLQotREVMRUdBVEVfVE9f
SU1QTF80UihtYXBCdWZmZXJTdWJEYXRhQ0hST01JVU0sIEdDM0RlbnVtLCBHQzNEc2l6ZWlwdHIs
IEdDM0RzaXplaSwgR0MzRGVudW0sIHZvaWQqKQotREVMRUdBVEVfVE9fSU1QTF8xKHVubWFwQnVm
ZmVyU3ViRGF0YUNIUk9NSVVNLCBjb25zdCB2b2lkKikKLURFTEVHQVRFX1RPX0lNUExfOVIobWFw
VGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGlu
dCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIHZv
aWQqKQotREVMRUdBVEVfVE9fSU1QTF8xKHVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNLCBjb25z
dCB2b2lkKikKLQotREVMRUdBVEVfVE9fSU1QTF8xKHNldFZpc2liaWxpdHlDSFJPTUlVTSwgYm9v
bCk7Ci0KLURFTEVHQVRFX1RPX0lNUExfMyhkaXNjYXJkRnJhbWVidWZmZXJFWFQsIEdDM0RlbnVt
LCBHQzNEc2l6ZWksIGNvbnN0IEdDM0RlbnVtKik7Ci1ERUxFR0FURV9UT19JTVBMKGVuc3VyZUZy
YW1lYnVmZmVyQ0hST01JVU0pOwotCi1ERUxFR0FURV9UT19JTVBMXzEwKGJsaXRGcmFtZWJ1ZmZl
ckNIUk9NSVVNLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEYml0ZmllbGQsIEdDM0RlbnVtKQotREVMRUdB
VEVfVE9fSU1QTF81KHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUNIUk9NSVVNLCBHQzNE
ZW51bSwgR0MzRHNpemVpLCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWkpCi0KLURFTEVH
QVRFX1RPX0lNUEwocmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKQotREVMRUdBVEVf
VE9fSU1QTF9SKGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIsIEdDM0RlbnVtKQotCi1ERUxFR0FU
RV9UT19JTVBMXzFSKGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSwgUGxhdGZvcm0zRE9i
amVjdCwgU3RyaW5nKQotREVMRUdBVEVfVE9fSU1QTF81KHRleEltYWdlSU9TdXJmYWNlMkRDSFJP
TUlVTSwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0R1aW50LCBHQzNEdWludCkKLURF
TEVHQVRFX1RPX0lNUExfNSh0ZXhTdG9yYWdlMkRFWFQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNE
dWludCwgR0MzRGludCwgR0MzRGludCkKLQotREVMRUdBVEVfVE9fSU1QTF9SKGNyZWF0ZVF1ZXJ5
RVhULCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xKGRlbGV0ZVF1ZXJ5RVhU
LCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU1QTF8xUihpc1F1ZXJ5RVhULCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lNUExfMihiZWdpblF1ZXJ5
RVhULCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lNUExfMShlbmRR
dWVyeUVYVCwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTVBMXzMoZ2V0UXVlcnlpdkVYVCwgR0Mz
RGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lNUExfMyhnZXRRdWVyeU9i
amVjdHVpdkVYVCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIEdDM0R1aW50KikKLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBHcmFwaGljc0NvbnRleHQzRAotLy8KLQotLy8gTWFjcm9zIHRvIGFz
c2lzdCBpbiBkZWxlZ2F0aW5nIGZyb20gR3JhcGhpY3NDb250ZXh0M0QgdG8KLS8vIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS4KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTChuYW1lKSBc
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKCkgXAoteyBcCi0gICAgbV9wcml2YXRlLT5u
YW1lKCk7IFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF9SKG5hbWUsIHJ0KSAg
ICAgICAgICAgXAotcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUoKSBcCi17IFwKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5uYW1lKCk7IFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5B
TF8xKG5hbWUsIHQxKSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExKSBcCi17
IFwKLSAgICBtX3ByaXZhdGUtPm5hbWUoYTEpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9f
SU5URVJOQUxfMVIobmFtZSwgdDEsIHJ0KSAgICBcCi1ydCBHcmFwaGljc0NvbnRleHQzRDo6bmFt
ZSh0MSBhMSkgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSk7IFwKLX0KLQot
I2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8yKG5hbWUsIHQxLCB0MikgXAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKLXsgXAotICAgIG1fcHJpdmF0ZS0+
bmFtZShhMSwgYTIpOyBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMlIobmFt
ZSwgdDEsIHQyLCBydCkgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBh
MikgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIpOyBcCi19Ci0KLSNk
ZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfMyhuYW1lLCB0MSwgdDIsIHQzKSAgIFwKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAgXAoteyBcCi0g
ICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAgICAgIFwKLX0KLQot
I2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF8zUihuYW1lLCB0MSwgdDIsIHQzLCBydCkgICBc
Ci1ydCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCi17
IFwKLSAgICByZXR1cm4gbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAgICAg
ICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF80KG5hbWUsIHQxLCB0Miwg
dDMsIHQ0KSAgICBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpuYW1lKHQxIGExLCB0MiBhMiwg
dDMgYTMsIHQ0IGE0KSAgXAoteyBcCi0gICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0
KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF80Uihu
YW1lLCB0MSwgdDIsIHQzLCB0NCwgcnQpICAgIFwKLXJ0IEdyYXBoaWNzQ29udGV4dDNEOjpuYW1l
KHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0KSAgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCk7ICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgREVMRUdB
VEVfVE9fSU5URVJOQUxfNShuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUpICAgICAgXAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUp
ICAgICAgICBcCi17IFwKLSAgICBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsg
ICBcCi19Ci0KLSNkZWZpbmUgREVMRUdBVEVfVE9fSU5URVJOQUxfNihuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUsIHQ2KSAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBhMSwgdDIg
YTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCi17IFwKLSAgICBtX3ByaXZhdGUtPm5h
bWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNik7ICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RP
X0lOVEVSTkFMXzZSKG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHJ0KSAgXAotcnQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0
NiBhNikgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwg
YTUsIGE2KTsgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzcobmFt
ZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwK
LXsgXAotICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNyk7ICAg
XAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0lOVEVSTkFMXzdSKG5hbWUsIHQxLCB0MiwgdDMs
IHQ0LCB0NSwgdDYsIHQ3LCBydCkgXAotcnQgR3JhcGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEs
IHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgXAotICAgIHJl
dHVybiBtX3ByaXZhdGUtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgIFwKLX0K
LQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF84KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0
NSwgdDYsIHQ3LCB0OCkgICAgICAgXAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bmFtZSh0MSBh
MSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKLXsg
XAotICAgIG1fcHJpdmF0ZS0+bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpOyAg
ICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF85KG5hbWUsIHQxLCB0Miwg
dDMsIHQ0LCB0NSwgdDYsIHQ3LCB0OCwgdDkpIFwKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcsIHQ4IGE4
LCB0OSBhOSkgXAoteyBcCi0gICAgbV9wcml2YXRlLT5uYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwg
YTYsIGE3LCBhOCwgYTkpOyAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19JTlRFUk5BTF85
UihuYW1lLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCBydCkgXAotcnQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0
NiBhNiwgdDcgYTcsIHQ4IGE4LCB0OSBhOSkgXAoteyBcCi0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
bmFtZShhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5KTsgICBcCi19Ci0KLUdyYXBo
aWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjp+R3Jh
cGhpY3NDb250ZXh0M0QoKQotewotICAgIG1fcHJpdmF0ZS0+c2V0Q29udGV4dExvc3RDYWxsYmFj
ayhudWxscHRyKTsKLSAgICBtX3ByaXZhdGUtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKG51bGxw
dHIpOwotICAgIG1fcHJpdmF0ZS0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01J
VU0obnVsbHB0cik7Ci0gICAgbV9wcml2YXRlLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdl
ZENhbGxiYWNrQ0hST01JVU0obnVsbHB0cik7Ci19Ci0KLVBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyU3R5bGUg
cmVuZGVyU3R5bGUpCi17Ci0gICAgQVNTRVJUKHJlbmRlclN0eWxlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7Ci0KLSAgICBXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJpYnV0ZXM7Ci0gICAgd2ViQXR0cmlidXRl
cy5hbHBoYSA9IGF0dHJzLmFscGhhOwotICAgIHdlYkF0dHJpYnV0ZXMuZGVwdGggPSBhdHRycy5k
ZXB0aDsKLSAgICB3ZWJBdHRyaWJ1dGVzLnN0ZW5jaWwgPSBhdHRycy5zdGVuY2lsOwotICAgIHdl
YkF0dHJpYnV0ZXMuYW50aWFsaWFzID0gYXR0cnMuYW50aWFsaWFzOwotICAgIHdlYkF0dHJpYnV0
ZXMucHJlbXVsdGlwbGllZEFscGhhID0gYXR0cnMucHJlbXVsdGlwbGllZEFscGhhOwotICAgIHdl
YkF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gYXR0cnMubm9FeHRlbnNpb25zOwotICAgIHdlYkF0
dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBhdHRycy5zaGFyZVJlc291cmNlczsKLSAgICB3ZWJB
dHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gYXR0cnMucHJlZmVyRGlzY3JldGVHUFU7Ci0K
LSAgICBPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4gd2ViQ29udGV4dCA9IGFk
b3B0UHRyKFdlYktpdDo6UGxhdGZvcm06OmN1cnJlbnQoKS0+Y3JlYXRlT2Zmc2NyZWVuR3JhcGhp
Y3NDb250ZXh0M0Qod2ViQXR0cmlidXRlcykpOwotICAgIGlmICghd2ViQ29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJDb250ZXh0LnJlbGVhc2UoKSwgcmVu
ZGVyU3R5bGUsIGF0dHJzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcik7Ci19Ci0KLVBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPnBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZv
cm1UZXh0dXJlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5wbGF0Zm9ybVRleHR1
cmUoKTsKLX0KLQotR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzRDo6Z3JDb250ZXh0KCkKLXsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT5nckNvbnRleHQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPnByZXBh
cmVUZXh0dXJlKCk7Ci19Ci0KLUludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFs
RnJhbWVidWZmZXJTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRJbnRl
cm5hbEZyYW1lYnVmZmVyU2l6ZSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1Jl
c291cmNlU2FmZSgpCi17Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNSZXNvdXJjZVNhZmUoKTsK
LX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIEdy
YXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKG1ha2VDb250ZXh0Q3VycmVudCwg
Ym9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIocmVzaGFwZSwgaW50LCBpbnQpCi0KLURFTEVH
QVRFX1RPX0lOVEVSTkFMXzEoYWN0aXZlVGV4dHVyZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVj
dCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoYmluZEF0dHJpYkxvY2F0aW9uLCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEdWludCwgY29uc3QgU3RyaW5nJikKLQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MihiaW5kQnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lO
VEVSTkFMXzIoYmluZEZyYW1lYnVmZmVyLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZFJlbmRlcmJ1ZmZlciwgR0MzRGVudW0sIFBsYXRmb3Jt
M0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGJpbmRUZXh0dXJlLCBHQzNEZW51bSwg
UGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYmxlbmRDb2xvciwgR0Mz
RGNsYW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZiwgR0MzRGNsYW1wZikKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoYmxlbmRFcXVhdGlvbiwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8yKGJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfMihibGVuZEZ1bmMsIEdDM0RlbnVtLCBHQzNEZW51bSkKLURFTEVHQVRFX1RP
X0lOVEVSTkFMXzQoYmxlbmRGdW5jU2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVu
dW0sIEdDM0RlbnVtKQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKGJ1ZmZlckRhdGEsIEdDM0Rl
bnVtLCBHQzNEc2l6ZWlwdHIsIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNChidWZm
ZXJEYXRhLCBHQzNEZW51bSwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiwgR0MzRGVudW0pCi1E
RUxFR0FURV9UT19JTlRFUk5BTF80KGJ1ZmZlclN1YkRhdGEsIEdDM0RlbnVtLCBHQzNEaW50cHRy
LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqKQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihj
aGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBHQzNEZW51bSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8xKGNsZWFyLCBHQzNEYml0ZmllbGQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGNs
ZWFyQ29sb3IsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYp
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGNsZWFyRGVwdGgsIEdDM0RjbGFtcGYpCi1ERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGNsZWFyU3RlbmNpbCwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzQoY29sb3JNYXNrLCBHQzNEYm9vbGVhbiwgR0MzRGJvb2xlYW4sIEdDM0Rib29sZWFuLCBH
QzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY29tcGlsZVNoYWRlciwgUGxhdGZv
cm0zRE9iamVjdCkKLQotREVMRUdBVEVfVE9fSU5URVJOQUxfOChjb21wcmVzc2VkVGV4SW1hZ2Uy
RCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEc2l6
ZWksIEdDM0RzaXplaSwgY29uc3Qgdm9pZCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF85KGNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGludCwgR0MzRGludCwg
R0MzRGludCwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RzaXplaSwgY29uc3Qgdm9pZCopCi1ERUxF
R0FURV9UT19JTlRFUk5BTF84KGNvcHlUZXhJbWFnZTJELCBHQzNEZW51bSwgR0MzRGludCwgR0Mz
RGVudW0sIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNpemVpLCBHQzNEaW50KQot
REVMRUdBVEVfVE9fSU5URVJOQUxfOChjb3B5VGV4U3ViSW1hZ2UyRCwgR0MzRGVudW0sIEdDM0Rp
bnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRHNp
emVpKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShjdWxsRmFjZSwgR0MzRGVudW0pCi1ERUxFR0FU
RV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8xKGRlcHRoTWFzaywgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGRlcHRo
UmFuZ2UsIEdDM0RjbGFtcGYsIEdDM0RjbGFtcGYpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGRl
dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzEoZGlzYWJsZSwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8x
KGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSwgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8zKGRyYXdBcnJheXMsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEc2l6ZWkpCi1ERUxFR0FURV9U
T19JTlRFUk5BTF80KGRyYXdFbGVtZW50cywgR0MzRGVudW0sIEdDM0RzaXplaSwgR0MzRGVudW0s
IEdDM0RpbnRwdHIpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlLCBHQzNEZW51bSkK
LURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlVmVydGV4QXR0cmliQXJyYXksIEdDM0R1aW50
KQotREVMRUdBVEVfVE9fSU5URVJOQUwoZmluaXNoKQotREVMRUdBVEVfVE9fSU5URVJOQUwoZmx1
c2gpCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyLCBHQzNE
ZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9f
SU5URVJOQUxfNShmcmFtZWJ1ZmZlclRleHR1cmUyRCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNE
ZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEo
ZnJvbnRGYWNlLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZ2VuZXJhdGVNaXBt
YXAsIEdDM0RlbnVtKQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zUihnZXRBY3RpdmVBdHRyaWIs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1aW50LCBBY3RpdmVJbmZvJiwgYm9vbCkKLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZVVuaWZvcm0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0R1
aW50LCBBY3RpdmVJbmZvJiwgYm9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZ2V0QXR0YWNo
ZWRTaGFkZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEc2l6ZWksIEdDM0RzaXplaSosIFBsYXRm
b3JtM0RPYmplY3QqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0QXR0cmliTG9jYXRpb24s
IFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8yKGdldEJvb2xlYW52LCBHQzNEZW51bSwgR0MzRGJvb2xlYW4qKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhnZXRCdWZmZXJQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBH
QzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0Q29udGV4dEF0dHJpYnV0ZXMsIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihnZXRF
cnJvciwgR0MzRGVudW0pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGdldEZsb2F0diwgR0MzRGVu
dW0sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50
KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoZ2V0SW50ZWdlcnYsIEdDM0RlbnVtLCBHQzNEaW50
KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0UHJvZ3JhbWl2LCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEZW51bSwgR0MzRGludCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRQcm9ncmFt
SW5mb0xvZywgUGxhdGZvcm0zRE9iamVjdCwgU3RyaW5nKQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50
KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0U2hhZGVyaXYsIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFNoYWRlcklu
Zm9Mb2csIFBsYXRmb3JtM0RPYmplY3QsIFN0cmluZykKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQqLCBH
QzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFNoYWRlclNvdXJjZSwgUGxhdGZv
cm0zRE9iamVjdCwgU3RyaW5nKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U3RyaW5nLCBH
QzNEZW51bSwgU3RyaW5nKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRUZXhQYXJhbWV0ZXJm
diwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MyhnZXRUZXhQYXJhbWV0ZXJpdiwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVH
QVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9ybWZ2LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50
LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRVbmlmb3JtaXYsIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RpbnQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMlIo
Z2V0VW5pZm9ybUxvY2F0aW9uLCBQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmLCBHQzNE
aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhBdHRyaWJmdiwgR0MzRHVpbnQs
IEdDM0RlbnVtLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRWZXJ0ZXhB
dHRyaWJpdiwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEaW50KikKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzJSKGdldFZlcnRleEF0dHJpYk9mZnNldCwgR0MzRHVpbnQsIEdDM0RlbnVtLCBHQzNEc2l6
ZWlwdHIpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoaGludCwgR0MzRGVudW0sIEdDM0RlbnVt
KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIEdD
M0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNFbmFibGVkLCBHQzNEZW51bSwg
R0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc0ZyYW1lYnVmZmVyLCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEYm9vbGVhbikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUHJv
Z3JhbSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8xUihpc1JlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xlYW4pCi1ERUxF
R0FURV9UT19JTlRFUk5BTF8xUihpc1NoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGJvb2xl
YW4pCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1RleHR1cmUsIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShsaW5lV2lkdGgsIEdDM0RmbG9h
dCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEobGlua1Byb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qp
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHBpeGVsU3RvcmVpLCBHQzNEZW51bSwgR0MzRGludCkK
LURFTEVHQVRFX1RPX0lOVEVSTkFMXzIocG9seWdvbk9mZnNldCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzcocmVhZFBpeGVscywgR0MzRGludCwgR0MzRGlu
dCwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RlbnVtLCBHQzNEZW51bSwgdm9pZCopCi0KLURF
TEVHQVRFX1RPX0lOVEVSTkFMKHJlbGVhc2VTaGFkZXJDb21waWxlcikKLURFTEVHQVRFX1RPX0lO
VEVSTkFMXzQocmVuZGVyYnVmZmVyU3RvcmFnZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEc2l6
ZWksIEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoc2FtcGxlQ292ZXJhZ2UsIEdD
M0RjbGFtcGYsIEdDM0Rib29sZWFuKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNChzY2lzc29yLCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSkKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzIoc2hhZGVyU291cmNlLCBQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmKQotREVM
RUdBVEVfVE9fSU5URVJOQUxfMyhzdGVuY2lsRnVuYywgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0R1
aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfNChzdGVuY2lsRnVuY1NlcGFyYXRlLCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0R1aW50KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShz
dGVuY2lsTWFzaywgR0MzRHVpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHN0ZW5jaWxNYXNr
U2VwYXJhdGUsIEdDM0RlbnVtLCBHQzNEdWludCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoc3Rl
bmNpbE9wLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtKQotREVMRUdBVEVfVE9fSU5URVJO
QUxfNChzdGVuY2lsT3BTZXBhcmF0ZSwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgR0Mz
RGVudW0pCi0KLURFTEVHQVRFX1RPX0lOVEVSTkFMXzlSKHRleEltYWdlMkQsIEdDM0RlbnVtLCBH
QzNEaW50LCBHQzNEZW51bSwgR0MzRHNpemVpLCBHQzNEc2l6ZWksIEdDM0RpbnQsIEdDM0RlbnVt
LCBHQzNEZW51bSwgY29uc3Qgdm9pZCosIGJvb2wpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHRl
eFBhcmFtZXRlcmYsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMyh0ZXhQYXJhbWV0ZXJpLCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RpbnQpCi1E
RUxFR0FURV9UT19JTlRFUk5BTF85KHRleFN1YkltYWdlMkQsIEdDM0RlbnVtLCBHQzNEaW50LCBH
QzNEaW50LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0RzaXplaSwgR0MzRGVudW0sIEdDM0RlbnVt
LCBjb25zdCB2b2lkKikKLQotREVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlmb3JtMWYsIEdDM0Rp
bnQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTFmdiwgR0MzRGlu
dCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMih1bmlmb3Jt
MWksIEdDM0RpbnQsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm0xaXYs
IEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGludCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVu
aWZvcm0yZiwgR0MzRGludCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTlRF
Uk5BTF8zKHVuaWZvcm0yZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZsb2F0KikKLURFTEVH
QVRFX1RPX0lOVEVSTkFMXzModW5pZm9ybTJpLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQot
REVMRUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtMml2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdD
M0RpbnQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtM2YsIEdDM0RpbnQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZv
cm0zZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGZsb2F0KikKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzQodW5pZm9ybTNpLCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50LCBHQzNEaW50KQotREVM
RUdBVEVfVE9fSU5URVJOQUxfMyh1bmlmb3JtM2l2LCBHQzNEaW50LCBHQzNEc2l6ZWksIEdDM0Rp
bnQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNSh1bmlmb3JtNGYsIEdDM0RpbnQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzModW5pZm9ybTRmdiwgR0MzRGludCwgR0MzRHNpemVpLCBHQzNEZmxvYXQqKQotREVMRUdBVEVf
VE9fSU5URVJOQUxfNSh1bmlmb3JtNGksIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0Rp
bnQsIEdDM0RpbnQpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKHVuaWZvcm00aXYsIEdDM0RpbnQs
IEdDM0RzaXplaSwgR0MzRGludCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRy
aXgyZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi1ERUxF
R0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgzZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1N
YXRyaXg0ZnYsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4sIEdDM0RmbG9hdCopCi0K
LURFTEVHQVRFX1RPX0lOVEVSTkFMXzEodXNlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzEodmFsaWRhdGVQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQot
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjFmLCBHQzNEdWludCwgR0MzRGZs
b2F0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWIxZnYsIEdDM0R1aW50LCBH
QzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyh2ZXJ0ZXhBdHRyaWIyZiwgR0MzRHVp
bnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfMih2ZXJ0ZXhB
dHRyaWIyZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2
ZXJ0ZXhBdHRyaWIzZiwgR0MzRHVpbnQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQp
Ci1ERUxFR0FURV9UT19JTlRFUk5BTF8yKHZlcnRleEF0dHJpYjNmdiwgR0MzRHVpbnQsIEdDM0Rm
bG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF81KHZlcnRleEF0dHJpYjRmLCBHQzNEdWludCwg
R0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMih2ZXJ0ZXhBdHRyaWI0ZnYsIEdDM0R1aW50LCBHQzNEZmxvYXQqKQotREVMRUdB
VEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludGVyLCBHQzNEdWludCwgR0MzRGludCwg
R0MzRGVudW0sIEdDM0Rib29sZWFuLCBHQzNEc2l6ZWksIEdDM0RpbnRwdHIpCi0KLURFTEVHQVRF
X1RPX0lOVEVSTkFMXzQodmlld3BvcnQsIEdDM0RpbnQsIEdDM0RpbnQsIEdDM0RzaXplaSwgR0Mz
RHNpemVpKQotCi1ERUxFR0FURV9UT19JTlRFUk5BTChtYXJrTGF5ZXJDb21wb3NpdGVkKQotREVM
RUdBVEVfVE9fSU5URVJOQUwobWFya0NvbnRleHRDaGFuZ2VkKQotCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PmxheWVyQ29tcG9zaXRlZCgpOwotfQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlcikKIHsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhpbWFnZUJ1ZmZl
ciwgZHJhd2luZ0J1ZmZlcik7CisgICAgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcklkOwor
ICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdpbmdQYXJhbWV0ZXJzKGRyYXdpbmdC
dWZmZXIsIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLCAmZnJhbWVidWZmZXJJZCwgJndpZHRoLCAm
aGVpZ2h0KTsKKyAgICBtX3ByaXZhdGUtPnBhaW50RnJhbWVidWZmZXJUb0NhbnZhcyhmcmFtZWJ1
ZmZlcklkLCB3aWR0aCwgaGVpZ2h0LCAhZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5wcmVtdWx0aXBs
aWVkQWxwaGEsIGltYWdlQnVmZmVyKTsKIH0KIAogUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBo
aWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyKQogewotICAgIHJldHVybiBtX3ByaXZhdGUtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvSW1hZ2VEYXRhKGRyYXdpbmdCdWZmZXIpOwotfQotCi1ERUxFR0FURV9UT19J
TlRFUk5BTF8xUihwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMsIEltYWdlQnVmZmVyKiwg
Ym9vbCkKLQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVCdWZmZXIsIFBsYXRmb3JtM0RP
YmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF9SKGNyZWF0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9y
bTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVQcm9ncmFtLCBQbGF0Zm9y
bTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVSZW5kZXJidWZmZXIsIFBs
YXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihjcmVhdGVTaGFkZXIsIEdD
M0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVU
ZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0KQotCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlbGV0
ZUJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVsZXRl
RnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRl
bGV0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGRl
bGV0ZVJlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCkKLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzEoZGVsZXRlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQotREVMRUdBVEVfVE9fSU5URVJOQUxf
MShkZWxldGVUZXh0dXJlLCBQbGF0Zm9ybTNET2JqZWN0KQotCi1ERUxFR0FURV9UT19JTlRFUk5B
TF8xKHN5bnRoZXNpemVHTEVycm9yLCBHQzNEZW51bSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMX1Io
Z2V0RXh0ZW5zaW9ucywgRXh0ZW5zaW9uczNEKikKLQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShz
ZXRDb250ZXh0TG9zdENhbGxiYWNrLCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpDb250
ZXh0TG9zdENhbGxiYWNrPikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEoc2V0RXJyb3JNZXNzYWdl
Q2FsbGJhY2ssIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxi
YWNrPikKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlciA6IHB1Ymxp
YyBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2Fs
bGJhY2sgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCk7Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcj4gY3Jl
YXRlKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+KTsK
LSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKCkgeyB9Ci1w
cml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2IpIDogbV9jb250ZXh0
TG9zdENhbGxiYWNrKGNiKSB7IH0KLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRl
eHRMb3N0Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxsYmFjazsKLX07Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjo6b25Db250ZXh0TG9zdCgpCi17Ci0gICAgaWYg
KG1fY29udGV4dExvc3RDYWxsYmFjaykKLSAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNrLT5v
bkNvbnRleHRMb3N0KCk7Ci19CisgICAgaWYgKGdldENvbnRleHRBdHRyaWJ1dGVzKCkucHJlbXVs
dGlwbGllZEFscGhhKQorICAgICAgICByZXR1cm4gMDsKIAotUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyPiBHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2tBZGFw
dGVyOjpjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxs
YmFjaz4gY2IpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGNiLmdldCgpID8gbmV3IEdyYXBoaWNz
Q29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIoY2IpIDogMCk7Ci19CisgICAgUGxhdGZvcm0zRE9i
amVjdCBmcmFtZWJ1ZmZlcklkOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIGdldERyYXdp
bmdQYXJhbWV0ZXJzKGRyYXdpbmdCdWZmZXIsIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLCAmZnJh
bWVidWZmZXJJZCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQz
RDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2IpCi17Ci0gICAgbV9jb250ZXh0TG9zdENhbGxiYWNr
QWRhcHRlciA9IEdyYXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI6OmNyZWF0ZShjYik7
Ci0gICAgbV9pbXBsLT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKG1fY29udGV4dExvc3RDYWxsYmFj
a0FkYXB0ZXIuZ2V0KCkpOwotfQorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IElt
YWdlRGF0YTo6Y3JlYXRlKEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVscyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCk7CisgICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSA0ICogd2lkdGggKiBoZWlnaHQ7CiAKLWNsYXNzIEdyYXBoaWNzRXJyb3JNZXNzYWdl
Q2FsbGJhY2tBZGFwdGVyIDogcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0Q6Oldl
YkdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2sgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBvbkVycm9yTWVzc2FnZShjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYsIFdlYktpdDo6V0dDM0Rp
bnQpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tB
ZGFwdGVyPiBjcmVhdGUoUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrQWRh
cHRlcigpIHsgfQotcHJpdmF0ZToKLSAgICBHcmFwaGljc0Vycm9yTWVzc2FnZUNhbGxiYWNrQWRh
cHRlcihQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4g
Y2IpIDogbV9lcnJvck1lc3NhZ2VDYWxsYmFjayhjYikgeyB9Ci0gICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjaz4gbV9lcnJvck1lc3NhZ2VDYWxsYmFjazsK
LX07Ci0KLXZvaWQgR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXI6Om9uRXJyb3JN
ZXNzYWdlKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBtZXNzYWdlLCBXZWJLaXQ6OldHQzNEaW50
IGlkKQotewotICAgIGlmIChtX2Vycm9yTWVzc2FnZUNhbGxiYWNrKQotICAgICAgICBtX2Vycm9y
TWVzc2FnZUNhbGxiYWNrLT5vbkVycm9yTWVzc2FnZShtZXNzYWdlLCBpZCk7Ci19CisgICAgbV9w
cml2YXRlLT53ZWJDb250ZXh0KCktPnJlYWRCYWNrRnJhbWVidWZmZXIocGl4ZWxzLCBidWZmZXJT
aXplLCBmcmFtZWJ1ZmZlcklkLCB3aWR0aCwgaGVpZ2h0KTsKIAotUGFzc093blB0cjxHcmFwaGlj
c0Vycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlcj4gR3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFj
a0FkYXB0ZXI6OmNyZWF0ZShQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1lc3Nh
Z2VDYWxsYmFjaz4gY2IpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGNiLmdldCgpID8gbmV3IEdy
YXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKGNiKSA6IDApOwotfQorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAo
cGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6
OkVycm9yTWVzc2FnZUNhbGxiYWNrPiBjYikKLXsKLSAgICBtX2Vycm9yTWVzc2FnZUNhbGxiYWNr
QWRhcHRlciA9IEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoY2Ip
OwotICAgIG1faW1wbC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobV9lcnJvck1lc3NhZ2VDYWxs
YmFja0FkYXB0ZXIuZ2V0KCkpOworICAgIHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1
ZmZlciopCiB7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNHTEVTMkNvbXBsaWFudCgpOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0Nv
bXBsZXRlQ2FsbGJhY2tBZGFwdGVyIDogcHVibGljIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0Q6OldlYkdyYXBoaWNzU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0gewotcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKTsKLSAgICBzdGF0
aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0FkYXB0ZXI+IGNyZWF0ZShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4pOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29u
dGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcigpIHsgfQotCi1wcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRl
cihQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2Fs
bGJhY2tDSFJPTUlVTT4gY2IpIDogbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2soY2IpIHsg
fQotICAgIE93blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNh
bGxiYWNrQ0hST01JVU0+IG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrOwotfTsKK0RFTEVH
QVRFX1RPX1dFQkNPTlRFWFRfUihjcmVhdGVCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QpCitERUxF
R0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlRnJhbWVidWZmZXIsIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlUHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfUihjcmVhdGVSZW5kZXJidWZmZXIsIFBsYXRmb3Jt
M0RPYmplY3QpCitERUxFR0FURV9UT19XRUJDT05URVhUXzFSKGNyZWF0ZVNoYWRlciwgR0MzRGVu
dW0sIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19XRUJDT05URVhUX1IoY3JlYXRlVGV4
dHVyZSwgUGxhdGZvcm0zRE9iamVjdCkKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI6Om9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpCi17Ci0g
ICAgaWYgKG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrKQotICAgICAgICBtX3N3YXBCdWZm
ZXJzQ29tcGxldGVDYWxsYmFjay0+b25Td2FwQnVmZmVyc0NvbXBsZXRlKCk7Ci19CitERUxFR0FU
RV9UT19XRUJDT05URVhUXzEoZGVsZXRlQnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdB
VEVfVE9fV0VCQ09OVEVYVF8xKGRlbGV0ZUZyYW1lYnVmZmVyLCBQbGF0Zm9ybTNET2JqZWN0KQor
REVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRlbGV0ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19XRUJDT05URVhUXzEoZGVsZXRlUmVuZGVyYnVmZmVyLCBQbGF0Zm9ybTNE
T2JqZWN0KQorREVMRUdBVEVfVE9fV0VCQ09OVEVYVF8xKGRlbGV0ZVNoYWRlciwgUGxhdGZvcm0z
RE9iamVjdCkKK0RFTEVHQVRFX1RPX1dFQkNPTlRFWFRfMShkZWxldGVUZXh0dXJlLCBQbGF0Zm9y
bTNET2JqZWN0KQogCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21w
bGV0ZUNhbGxiYWNrQWRhcHRlcj4gR3JhcGhpY3NDb250ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRl
Q2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6
U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+IGNiKQotewotICAgIHJldHVybiBh
ZG9wdFB0cihjYi5nZXQoKSA/IG5ldyBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxl
dGVDYWxsYmFja0FkYXB0ZXIoY2IpIDogMCk7Ci19CitERUxFR0FURV9UT19XRUJDT05URVhUXzEo
c3ludGhlc2l6ZUdMRXJyb3IsIEdDM0RlbnVtKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0oUGFzc093blB0cjxF
eHRlbnNpb25zM0RDaHJvbWl1bTo6U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+
IGNiKQorRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCiB7
Ci0gICAgbV9zd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyID0gR3JhcGhpY3NDb250
ZXh0M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOjpjcmVhdGUoY2IpOwotICAg
IG1faW1wbC0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obV9zd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5nZXRFeHRlbnNpb25zKCk7CiB9CiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxs
b2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hS
T01JVU0gewotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNo
YW5nZWRDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1
TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPiBjYikKLSAgICAgICAgOiBt
X21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2soY2IpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFj
a0FkYXB0ZXIoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBvbk1lbW9yeUFsbG9jYXRpb25DaGFu
Z2VkKHNpemVfdCBncHVSZXNvdXJjZVNpemVJbkJ5dGVzKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xpZW50cyBzdGFydCB1c2luZyBXZWJHcmFwaGljc01lbW9y
eUFsbG9jYXRpb24gZXhjbHVzaXZlbHkuCi0gICAgICAgIG9uTWVtb3J5QWxsb2NhdGlvbkNoYW5n
ZWQoV2ViS2l0OjpXZWJHcmFwaGljc01lbW9yeUFsbG9jYXRpb24oZ3B1UmVzb3VyY2VTaXplSW5C
eXRlcywgdHJ1ZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBvbk1lbW9yeUFsbG9jYXRp
b25DaGFuZ2VkKFdlYktpdDo6V2ViR3JhcGhpY3NNZW1vcnlBbGxvY2F0aW9uIGFsbG9jYXRpb24p
Ci0gICAgewotICAgICAgICBpZiAobV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrKQot
ICAgICAgICAgICAgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrLT5vbkdwdU1lbW9y
eUFsbG9jYXRpb25DaGFuZ2VkKEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0
aW9uQ0hST01JVU0oYWxsb2NhdGlvbi5ncHVSZXNvdXJjZVNpemVJbkJ5dGVzLCBhbGxvY2F0aW9u
LnN1Z2dlc3RIYXZlQmFja2J1ZmZlcikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPd25QdHI8
RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tD
SFJPTUlVTT4gbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrOwotfTsKLQotdm9pZCBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnNldEdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2Fs
bGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlB
bGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0+IGNiKQorSW50U2l6ZSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdAogewotICAgIG1fbWVt
b3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcgR3JhcGhp
Y3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcihjYikpOwot
ICAgIG1faW1wbC0+c2V0TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKG1f
bWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIuZ2V0KCkpOworICAgIHJldHVy
biBJbnRTaXplKG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT53aWR0aCgpLCBtX3ByaXZhdGUtPndl
YkNvbnRleHQoKS0+aGVpZ2h0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MWM3NzM0M2Vj
YTdlNDU3N2ZjZDhkNTlkNTc2NmJlOWQ4ZGNjZjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMCww
ICsxLDM3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRENocm9taXVtLmgiCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjaW5jbHVkZSAi
R3JHTEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8cHVi
bGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIHsKKworLy8g
VGhlIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgR3JDb250
ZXh0J3MgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorY29uc3QgaW50IG1heEdhbmVzaFRleHR1cmVD
YWNoZUNvdW50ID0gNTEyOworLy8gVGhlIGxpbWl0IG9mIHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93
YXJkIHRleHR1cmVzIGluIHRoZSBHckNvbnRleHQncyBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCitj
b25zdCBzaXplX3QgbWF4R2FuZXNoVGV4dHVyZUNhY2hlQnl0ZXMgPSA5NiAqIDEwMjQgKiAxMDI0
OworCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUKKworR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoUGFzc093blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
PiB3ZWJDb250ZXh0LCBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKKyAgICA6IG1faW1wbCh3
ZWJDb250ZXh0KQorICAgICwgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2Up
CisgICAgLCBtX2xheWVyQ29tcG9zaXRlZChmYWxzZSkKKyAgICAsIG1fcHJlc2VydmVEcmF3aW5n
QnVmZmVyKHByZXNlcnZlRHJhd2luZ0J1ZmZlcikKKyAgICAsIG1fcmVzb3VyY2VTYWZldHkoUmVz
b3VyY2VTYWZldHlVbmtub3duKQorICAgICwgbV9nckNvbnRleHQoMCkKK3sKK30KKworR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCkKK3sKKyAgICBp
ZiAobV9nckNvbnRleHQpIHsKKyAgICAgICAgbV9nckNvbnRleHQtPmNvbnRleHREZXN0cm95ZWQo
KTsKKyAgICAgICAgR3JTYWZlVW5yZWYobV9nckNvbnRleHQpOworICAgIH0KK30KKworUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVH
cmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dChQYXNzT3duUHRyPFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0Q+IHdlYkNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSBy
ZW5kZXJTdHlsZSwgYm9vbCBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIpCit7CisgICAgYm9vbCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdyA9IHJlbmRlclN0eWxlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdzsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcygpLCAwLCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykpOwor
CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gcHJpdiA9IGFkb3B0UHRyKG5l
dyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUod2ViQ29udGV4dCwgcHJlc2VydmVEcmF3aW5nQnVm
ZmVyKSk7CisgICAgY29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7CisgICAgcmV0
dXJuIGNvbnRleHQucmVsZWFzZSgpOworfQorCitXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
KiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmV4dHJhY3RXZWJHcmFwaGljc0NvbnRleHQzRChH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjb250ZXh0LT5tX3ByaXZhdGUtPndlYkNvbnRleHQoKTsK
K30KKworY2xhc3MgR3JNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrIDogcHVibGljIEV4
dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hS
T01JVU0geworcHVibGljOgorICAgIEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayhH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUqIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNv
bnRleHQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkdwdU1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkKEV4dGVuc2lvbnMzRENocm9taXVtOjpHcHVNZW1vcnlBbGxvY2F0aW9uQ0hS
T01JVU0gYWxsb2NhdGlvbikKKyAgICB7CisgICAgICAgIEdyQ29udGV4dCogY29udGV4dCA9IG1f
Y29udGV4dC0+Z3JDb250ZXh0KCk7CisgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoIWFsbG9jYXRpb24uZ3B1UmVzb3VyY2VTaXplSW5CeXRl
cykgeworICAgICAgICAgICAgY29udGV4dC0+ZnJlZUdwdVJlc291cmNlcygpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKDAsIDApOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhHYW5lc2hUZXh0
dXJlQ2FjaGVDb3VudCwgbWF4R2FuZXNoVGV4dHVyZUNhY2hlQnl0ZXMpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIG1fY29udGV4dDsKK307CisKK0dy
Q29udGV4dCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpnckNvbnRleHQoKQoreworICAgIGlm
ICghbV9nckNvbnRleHQpIHsKKyAgICAgICAgU2tBdXRvVFVucmVmPEdyR0xJbnRlcmZhY2U+IGlu
dGVyZmFjZShtX2ltcGwtPmNyZWF0ZUdyR0xJbnRlcmZhY2UoKSk7CisgICAgICAgIG1fZ3JDb250
ZXh0ID0gR3JDb250ZXh0OjpDcmVhdGUoa09wZW5HTF9TaGFkZXJzX0dyRW5naW5lLCByZWludGVy
cHJldF9jYXN0PEdyUGxhdGZvcm0zRENvbnRleHQ+KGludGVyZmFjZS5nZXQoKSkpOworICAgICAg
ICBpZiAobV9nckNvbnRleHQpIHsKKyAgICAgICAgICAgIG1fZ3JDb250ZXh0LT5zZXRUZXh0dXJl
Q2FjaGVMaW1pdHMobWF4R2FuZXNoVGV4dHVyZUNhY2hlQ291bnQsIG1heEdhbmVzaFRleHR1cmVD
YWNoZUJ5dGVzKTsKKyAgICAgICAgICAgIEV4dGVuc2lvbnMzRENocm9taXVtKiBleHRlbnNpb25z
M0RDaHJvbWl1bSA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4oZ2V0RXh0ZW5z
aW9ucygpKTsKKyAgICAgICAgICAgIGlmIChleHRlbnNpb25zM0RDaHJvbWl1bS0+c3VwcG9ydHMo
IkdMX0NIUk9NSVVNX2dwdV9tZW1vcnlfbWFuYWdlciIpKQorICAgICAgICAgICAgICAgIGV4dGVu
c2lvbnMzRENocm9taXVtLT5zZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hS
T01JVU0oYWRvcHRQdHIobmV3IEdyTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFjayh0aGlz
KSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX2dyQ29udGV4dDsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAg
bV9sYXllckNvbXBvc2l0ZWQgPSBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJDb21w
b3NpdGVkOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6bWFya0xheWVyQ29t
cG9zaXRlZCgpCit7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnRGcmFtZWJ1ZmZlclRvQ2FudmFzKGludCBmcmFt
ZWJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcikKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSAw
OworICAgIHNpemVfdCBidWZmZXJTaXplID0gNCAqIHdpZHRoICogaGVpZ2h0OworCisgICAgY29u
c3QgU2tCaXRtYXAqIGNhbnZhc0JpdG1hcCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLT5iaXRtYXAoKTsKKyAgICBjb25zdCBTa0JpdG1hcCogcmVhZGJhY2tCaXRt
YXAgPSAwOworICAgIEFTU0VSVChjYW52YXNCaXRtYXAtPmNvbmZpZygpID09IFNrQml0bWFwOjpr
QVJHQl84ODg4X0NvbmZpZyk7CisgICAgaWYgKGNhbnZhc0JpdG1hcC0+d2lkdGgoKSA9PSB3aWR0
aCAmJiBjYW52YXNCaXRtYXAtPmhlaWdodCgpID09IGhlaWdodCkgeworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBmYXN0ZXN0IGFuZCBtb3N0IGNvbW1vbiBjYXNlLiBXZSByZWFkIGJhY2sKKyAgICAg
ICAgLy8gZGlyZWN0bHkgaW50byB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KKyAgICAgICAg
cmVhZGJhY2tCaXRtYXAgPSBjYW52YXNCaXRtYXA7CisgICAgICAgIG1fcmVzaXppbmdCaXRtYXAu
cmVzZXQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBuZWVkIHRvIGFsbG9jYXRlIGEg
dGVtcG9yYXJ5IGJpdG1hcCBmb3IgcmVhZGluZyBiYWNrIHRoZQorICAgICAgICAvLyBwaXhlbCBk
YXRhLiBXZSB3aWxsIHRoZW4gdXNlIFNraWEgdG8gcmVzY2FsZSB0aGlzIGJpdG1hcCB0bworICAg
ICAgICAvLyB0aGUgc2l6ZSBvZiB0aGUgY2FudmFzJ3MgYmFja2luZyBzdG9yZS4KKyAgICAgICAg
aWYgKG1fcmVzaXppbmdCaXRtYXAud2lkdGgoKSAhPSB3aWR0aCB8fCBtX3Jlc2l6aW5nQml0bWFw
LmhlaWdodCgpICE9IGhlaWdodCkgeworICAgICAgICAgICAgbV9yZXNpemluZ0JpdG1hcC5zZXRD
b25maWcoU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQpOworICAgICAgICAgICAgaWYgKCFtX3Jlc2l6aW5nQml0bWFwLmFsbG9j
UGl4ZWxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHJl
YWRiYWNrQml0bWFwID0gJm1fcmVzaXppbmdCaXRtYXA7CisgICAgfQorCisgICAgLy8gUmVhZCBi
YWNrIHRoZSBmcmFtZSBidWZmZXIuCisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKCpy
ZWFkYmFja0JpdG1hcCk7CisgICAgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KHJlYWRiYWNrQml0bWFwLT5nZXRQaXhlbHMoKSk7CisKKyAgICBtX2ltcGwtPnJlYWRCYWNrRnJh
bWVidWZmZXIocGl4ZWxzLCA0ICogd2lkdGggKiBoZWlnaHQsIGZyYW1lYnVmZmVyLCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIGlmIChwcmVtdWx0aXBseUFscGhhKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYnVmZmVyU2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICBwaXhlbHNb
aSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1
NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSAr
IDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0g
c3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZWFkYmFja0JpdG1hcC0+bm90aWZ5UGl4ZWxzQ2hhbmdlZCgp
OworICAgIGlmIChtX3Jlc2l6aW5nQml0bWFwLnJlYWR5VG9EcmF3KCkpIHsKKyAgICAgICAgLy8g
V2UgbmVlZCB0byBkcmF3IHRoZSByZXNpemluZyBiaXRtYXAgaW50byB0aGUgY2FudmFzJ3MgYmFj
a2luZyBzdG9yZS4KKyAgICAgICAgU2tDYW52YXMgY2FudmFzKCpjYW52YXNCaXRtYXApOworICAg
ICAgICBTa1JlY3QgZHN0OworICAgICAgICBkc3Quc2V0KFNrSW50VG9TY2FsYXIoMCksIFNrSW50
VG9TY2FsYXIoMCksIFNrSW50VG9TY2FsYXIoY2FudmFzQml0bWFwLT53aWR0aCgpKSwgU2tJbnRU
b1NjYWxhcihjYW52YXNCaXRtYXAtPmhlaWdodCgpKSk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0
bWFwUmVjdChtX3Jlc2l6aW5nQml0bWFwLCAwLCBkc3QpOworICAgIH0KK30KKworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc0NvbnRleHRMb3N0Q2FsbGJhY2sgewor
cHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dDNEQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIo
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjaz4gY2FsbGJh
Y2spCisgICAgICAgIDogbV9jb250ZXh0TG9zdENhbGxiYWNrKGNhbGxiYWNrKSB7IH0KKyAgICB2
aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQzRENvbnRleHRMb3N0Q2FsbGJhY2tBZGFwdGVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpCisgICAgeworICAgICAgICBpZiAo
bV9jb250ZXh0TG9zdENhbGxiYWNrKQorICAgICAgICAgICAgbV9jb250ZXh0TG9zdENhbGxiYWNr
LT5vbkNvbnRleHRMb3N0KCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBPd25QdHI8R3JhcGhpY3ND
b250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IG1fY29udGV4dExvc3RDYWxsYmFjazsKK307
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRDb250ZXh0TG9zdENhbGxiYWNr
KFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2s+IGNhbGxi
YWNrKQoreworICAgIG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXIgPSBhZG9wdFB0cihuZXcg
R3JhcGhpY3NDb250ZXh0M0RDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcihjYWxsYmFjaykpOwor
ICAgIG1faW1wbC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhtX2NvbnRleHRMb3N0Q2FsbGJhY2tB
ZGFwdGVyLmdldCgpKTsKK30KKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RFcnJvck1lc3NhZ2VD
YWxsYmFja0FkYXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2Vi
R3JhcGhpY3NFcnJvck1lc3NhZ2VDYWxsYmFjayB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250
ZXh0M0RFcnJvck1lc3NhZ2VDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+IGNhbGxiYWNrKQorICAgICAgICA6IG1fZXJyb3JN
ZXNzYWdlQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
b25FcnJvck1lc3NhZ2UoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIG1lc3NhZ2UsIFdlYktpdDo6
V0dDM0RpbnQgaWQpCisgICAgeworICAgICAgICBpZiAobV9lcnJvck1lc3NhZ2VDYWxsYmFjaykK
KyAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2stPm9uRXJyb3JNZXNzYWdlKG1lc3Nh
Z2UsIGlkKTsKKyAgICB9Citwcml2YXRlOgorICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRDo6
RXJyb3JNZXNzYWdlQ2FsbGJhY2s+IG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2s7Cit9OworCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+IGNhbGxiYWNrKQor
eworICAgIG1fZXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyYXBo
aWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyKGNhbGxiYWNrKSk7CisgICAg
bV9pbXBsLT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhtX2Vycm9yTWVzc2FnZUNhbGxiYWNrQWRh
cHRlci5nZXQoKSk7Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9l
eHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRENocm9taXVtKHRoaXMpKTsKKyAg
ICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCituYW1lc3BhY2UgeworCit2b2lkIHNw
bGl0U3RyaW5nSGVscGVyKGNvbnN0IFN0cmluZyYgc3RyLCBIYXNoU2V0PFN0cmluZz4mIHNldCkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBzdWJzdHJpbmdzOworICAgIHN0ci5zcGxpdCgiICIsIHN1
YnN0cmluZ3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Vic3RyaW5ncy5zaXplKCk7
ICsraSkKKyAgICAgICAgc2V0LmFkZChzdWJzdHJpbmdzW2ldKTsKK30KKworU3RyaW5nIG1hcEV4
dGVuc2lvbk5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IgorICAgICAgICB8fCBuYW1lID09ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisgICAgICAgIHJldHVybiAiR0xfQ0hST01JVU1fZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiOworICAgIHJldHVybiBuYW1lOworfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKwordm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmluaXRpYWxpemVF
eHRlbnNpb25zKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMp
CisgICAgICAgIHJldHVybjsKKworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
ID0gdHJ1ZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2ltcGwtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nID0gbV9pbXBsLT5nZXRTdHJpbmcoR3Jh
cGhpY3NDb250ZXh0M0Q6OkVYVEVOU0lPTlMpOworICAgIHNwbGl0U3RyaW5nSGVscGVyKGV4dGVu
c2lvbnNTdHJpbmcsIG1fZW5hYmxlZEV4dGVuc2lvbnMpOworCisgICAgU3RyaW5nIHJlcXVlc3Rh
YmxlRXh0ZW5zaW9uc1N0cmluZyA9IG1faW1wbC0+Z2V0UmVxdWVzdGFibGVFeHRlbnNpb25zQ0hS
T01JVU0oKTsKKyAgICBzcGxpdFN0cmluZ0hlbHBlcihyZXF1ZXN0YWJsZUV4dGVuc2lvbnNTdHJp
bmcsIG1fcmVxdWVzdGFibGVFeHRlbnNpb25zKTsKK30KKworCitib29sIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGluaXRpYWxpemVFeHRlbnNpb25zKCk7CisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBFeHRl
bnNpb25OYW1lKG5hbWUpOworICAgIHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25zLmNvbnRhaW5z
KG1hcHBlZE5hbWUpIHx8IG1fcmVxdWVzdGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG1hcHBlZE5h
bWUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6ZW5zdXJlRXh0ZW5zaW9u
RW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaW5pdGlhbGl6ZUV4dGVuc2lvbnMo
KTsKKworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFtZShuYW1lKTsKKyAg
ICBpZiAobV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWROYW1lKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAobV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
bWFwcGVkTmFtZSkpIHsKKyAgICAgICAgbV9pbXBsLT5yZXF1ZXN0RXh0ZW5zaW9uQ0hST01JVU0o
bWFwcGVkTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIG1fZW5hYmxlZEV4dGVuc2lvbnMu
Y2xlYXIoKTsKKyAgICAgICAgbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnMuY2xlYXIoKTsKKyAgICAg
ICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpbml0aWFsaXplRXh0ZW5zaW9ucygpOworICAgIHJldHVybiBtX2VuYWJsZWRFeHRlbnNpb25z
LmNvbnRhaW5zKG1hcHBlZE5hbWUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6aXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpbml0aWFs
aXplRXh0ZW5zaW9ucygpOworICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFwRXh0ZW5zaW9uTmFt
ZShuYW1lKTsKKyAgICByZXR1cm4gbV9lbmFibGVkRXh0ZW5zaW9ucy5jb250YWlucyhtYXBwZWRO
YW1lKTsKK30KKworCitib29sIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6aXNSZXNvdXJjZVNh
ZmUoKQoreworICAgIGlmIChtX3Jlc291cmNlU2FmZXR5ID09IFJlc291cmNlU2FmZXR5VW5rbm93
bikKKyAgICAgICAgbV9yZXNvdXJjZVNhZmV0eSA9IGdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVk
KCJHTF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZlIikgPyBSZXNvdXJjZVNhZmUgOiBSZXNvdXJjZVVu
c2FmZTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZVNhZmV0eSA9PSBSZXNvdXJjZVNhZmU7Cit9CisK
K2NsYXNzIEdyYXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0Fk
YXB0ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRDo6V2ViR3JhcGhpY3NN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0geworcHVibGljOgorICAgIEdy
YXBoaWNzQ29udGV4dDNETWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXIoUGFz
c093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRD
YWxsYmFja0NIUk9NSVVNPiBjYWxsYmFjaykKKyAgICAgICAgOiBtX21lbW9yeUFsbG9jYXRpb25D
aGFuZ2VkQ2FsbGJhY2soY2FsbGJhY2spIHsgfQorCisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250
ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcigpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIG9uTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoc2l6ZV90IGdwdVJlc291cmNl
U2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBj
bGllbnRzIHN0YXJ0IHVzaW5nIFdlYkdyYXBoaWNzTWVtb3J5QWxsb2NhdGlvbiBleGNsdXNpdmVs
eS4KKyAgICAgICAgb25NZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZChXZWJLaXQ6OldlYkdyYXBoaWNz
TWVtb3J5QWxsb2NhdGlvbihncHVSZXNvdXJjZVNpemVJbkJ5dGVzLCB0cnVlKSk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIG9uTWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoV2ViS2l0OjpXZWJH
cmFwaGljc01lbW9yeUFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICB7CisgICAgICAgIGlmICht
X21lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2spCisgICAgICAgICAgICBtX21lbW9yeUFs
bG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2stPm9uR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWQoRXh0
ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DSFJPTUlVTShhbGxvY2F0aW9u
LmdwdVJlc291cmNlU2l6ZUluQnl0ZXMsIGFsbG9jYXRpb24uc3VnZ2VzdEhhdmVCYWNrYnVmZmVy
KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE93blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6
R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPiBtX21lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2s7Cit9OworCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6c2V0R3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNKFBhc3NPd25Q
dHI8RXh0ZW5zaW9uczNEQ2hyb21pdW06OkdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJh
Y2tDSFJPTUlVTT4gY2FsbGJhY2spCit7CisgICAgbV9tZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENh
bGxiYWNrQWRhcHRlciA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHQzRE1lbW9yeUFsbG9j
YXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFwdGVyKGNhbGxiYWNrKSk7CisgICAgbV9pbXBsLT5zZXRN
ZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hST01JVU0obV9tZW1vcnlBbGxvY2F0aW9u
Q2hhbmdlZENhbGxiYWNrQWRhcHRlci5nZXQoKSk7Cit9CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4
dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlciA6IHB1YmxpYyBXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNEOjpXZWJHcmFwaGljc1N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0NIUk9NSVVNIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29t
cGxldGVDYWxsYmFja0FkYXB0ZXIoUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6U3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0+IGNhbGxiYWNrKQorICAgICAgICA6IG1f
c3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrKGNhbGxiYWNrKSB7IH0KKyAgICB2aXJ0dWFsIH5H
cmFwaGljc0NvbnRleHQzRFN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXIoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBvblN3YXBCdWZmZXJzQ29tcGxldGUoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fc3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrKQorICAgICAgICAgICAgbV9zd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2stPm9uU3dhcEJ1ZmZlcnNDb21wbGV0ZSgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBPd25QdHI8RXh0ZW5zaW9uczNEQ2hyb21pdW06OlN3YXBCdWZmZXJz
Q29tcGxldGVDYWxsYmFja0NIUk9NSVVNPiBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFjazsK
K307CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpzZXRTd2FwQnVmZmVyc0NvbXBs
ZXRlQ2FsbGJhY2tDSFJPTUlVTShQYXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTT4gY2FsbGJhY2spCit7CisgICAgbV9zd2Fw
QnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29u
dGV4dDNEU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcihjYWxsYmFjaykpOworICAg
IG1faW1wbC0+c2V0U3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQ0hST01JVU0obV9zd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyLmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaAppbmRleCBhMjY5MTkyYTQ0NjcyM2FjZWZhMGMxMzJmOTcwZGYyMTI4
OTZhOWY3Li40Y2M3MTczM2FhYjcwZTY0MTNlZWJkYWQwMjkxMWNhZWMwNmY3Yzg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAj
aW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogY2xhc3MgR3JD
b250ZXh0OwpAQCAtNDMsMTAgKzQyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRENocm9taXVtOwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0TG9zdENhbGxiYWNrQWRhcHRlcjsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEU3dh
cEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKLWNsYXNzIEdyYXBoaWNzRXJyb3JNZXNz
YWdlQ2FsbGJhY2tBZGFwdGVyOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RDb250ZXh0TG9zdENh
bGxiYWNrQWRhcHRlcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJh
Y2tBZGFwdGVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RNZW1vcnlBbGxvY2F0aW9uQ2hhbmdl
ZENhbGxiYWNrQWRhcHRlcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEU3dhcEJ1ZmZlcnNDb21w
bGV0ZUNhbGxiYWNrQWRhcHRlcjsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsK
IHB1YmxpYzoKQEAgLTU1LDIwNSArNTQsMjIgQEAgcHVibGljOgogICAgIC8vIGJlIHVzZWQgb24g
YW55IG90aGVyIHRocmVhZC4KICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoUGFzc093blB0cjxXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlLCBi
b29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlciA9IGZhbHNlKTsKIAotICAgIHZpcnR1YWwgfkdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZSgpOwotCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByb3Zp
ZGUgYWNjZXNzIHRvIHRoZSBsb3dlci1sZXZlbCBXZWJHcmFwaGljc0NvbnRleHQzRCwKICAgICAv
LyB3aGljaCBpcyBuZWVkZWQgZm9yIHN1Ym9yZGluYXRlIGNvbnRleHRzIGxpa2UgV2ViR0wncyB0
byBzaGFyZSByZXNvdXJjZXMKICAgICAvLyB3aXRoIHRoZSBjb21wb3NpdG9yJ3MgY29udGV4dC4K
ICAgICBzdGF0aWMgV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRCogZXh0cmFjdFdlYkdyYXBo
aWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKLSAgICBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDNEIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdDsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IHBsYXRmb3JtVGV4dHVyZSgpIGNvbnN0OwotICAgIEdyQ29udGV4dCogZ3JDb250
ZXh0KCk7CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CiAKLSAgICBi
b29sIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0QqIHdlYkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KIAotICAgIHZv
aWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIEludFNpemUgZ2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKSBjb25zdDsKLSAgICBib29sIGlzUmVzb3VyY2VTYWZlKCk7Cisg
ICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKIAogICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7CiAgICAgYm9vbCBsYXllckNvbXBvc2l0ZWQoKSBjb25zdDsKICAgICB2b2lkIG1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKIAotICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
SW1hZ2VCdWZmZXIqLCBEcmF3aW5nQnVmZmVyKik7CiAgICAgdm9pZCBwYWludEZyYW1lYnVmZmVy
VG9DYW52YXMoaW50IGZyYW1lYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgSW1hZ2VCdWZmZXIqKTsKLSAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4g
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luZ0J1ZmZlciopOwotICAgIGJv
b2wgcGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7Ci0KLSAgICB2
b2lkIHByZXBhcmVUZXh0dXJlKCk7Ci0KLSAgICAvLyBDSFJPTUlVTV9wb3N0X3N1Yl9idWZmZXIK
LSAgICB2b2lkIHBvc3RTdWJCdWZmZXJDSFJPTUlVTShpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0KLSAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSBjb25zdDsKLQotICAg
IHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7
Ci0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgot
ICAgIC8vCi0gICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpOwotICAgIHZv
aWQgYXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIHZvaWQgYmluZEJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBiaW5k
UmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9p
ZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZv
aWQgYmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1w
ZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKLSAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVu
dW0gbW9kZSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKTsKLSAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFj
dG9yLCBHQzNEZW51bSBkZmFjdG9yKTsKLSAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpOwotCi0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNp
emVpcHRyLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSk7Ci0g
ICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQs
IEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSk7Ci0KLSAgICBHQzNEZW51bSBjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCk7Ci0gICAgdm9pZCBjbGVhcihHQzNEYml0
ZmllbGQgbWFzayk7Ci0gICAgdm9pZCBjbGVhckNvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xh
bXBmIGdyZWVuLCBHQzNEY2xhbXBmIGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpOwotICAgIHZvaWQg
Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKTsKLSAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNE
aW50IHMpOwotICAgIHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4g
Z3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNv
bXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwotICAgIHZvaWQgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpOwotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBt
b2RlKTsKLSAgICB2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKTsKLSAgICB2b2lkIGRlcHRo
TWFzayhHQzNEYm9vbGVhbiBmbGFnKTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6
TmVhciwgR0MzRGNsYW1wZiB6RmFyKTsKLSAgICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2Fw
KTsKLSAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCk7Ci0g
ICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLSAgICB2b2lkIGVu
YWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpOwotICAgIHZvaWQgZmluaXNoKCk7Ci0gICAgdm9pZCBmbHVzaCgpOwotICAg
IHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rp
bnQgbGV2ZWwpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIGJvb2wgZ2V0QWN0aXZlQXR0
cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8m
KTsKLSAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOwotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkq
IGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKTsKLSAgICBHQzNEaW50IGdldEF0dHJp
YkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9p
ZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVlKTsKLSAgICB2
b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBnZXRD
b250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgdm9pZCBn
ZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQg
Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGdl
dFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSk7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwotICAgIHZvaWQgZ2V0U2hhZGVyaXYo
UGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKLSAgICBT
dHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNp
b25UeXBlLCBHQzNEaW50KiByYW5nZSwgR0MzRGludCogcHJlY2lzaW9uKTsKLQotICAgIFN0cmlu
ZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgU3RyaW5nIGdldFN0cmlu
ZyhHQzNEZW51bSBuYW1lKTsKLSAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgZ2V0VGV4
UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpOwotICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRVbmlmb3JtaXYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1
ZSk7Ci0gICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSk7Ci0gICAgdm9pZCBnZXRWZXJ0
ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KTsKLSAgICBHQzNEc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBtb2RlKTsKLSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsK
LSAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVh
biBpc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0KTsKLSAgICBHQzNEYm9vbGVhbiBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFBsYXRmb3Jt
M0RPYmplY3QpOwotICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pOwotICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxv
YXQgdW5pdHMpOwotCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgdm9pZCogZGF0YSk7Ci0KLSAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hh
ZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc3Rl
bmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAg
IHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWlu
dCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0Mz
RHVpbnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0g
emZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLSAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7
Ci0KLSAgICAvLyB0ZXhJbWFnZTJEIHJldHVybiBmYWxzZSBvbiBhbnkgZXJyb3IgcmF0aGVyIHRo
YW4gdXNpbmcgYW4gRXhjZXB0aW9uQ29kZS4KLSAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgdGV4UGFyYW1l
dGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOwot
ICAgIHZvaWQgdGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0KLSAgICB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0
aW9uLCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RzaXplaSwgR0MzRGZsb2F0KiB2KTsKLSAgICB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEaW50IHgpOwotICAgIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2b2lkIHVuaWZvcm0yZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTJp
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKLSAgICB2b2lkIHVuaWZv
cm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKLSAgICB2b2lk
IHVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6KTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopOwotICAgIHZvaWQgdW5pZm9ybTNpdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOwotICAgIHZvaWQgdW5pZm9y
bTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEdDM0RmbG9hdCB3KTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRHNpemVpLCBHQzNEZmxvYXQqIHYpOwotICAgIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdyk7Ci0gICAg
dm9pZCB1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7
Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKLSAgICB2b2lkIHVuaWZv
cm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSk7Ci0KLSAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dm9pZCB2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0KLSAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBH
QzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQg
aW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXpl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGlu
dHB0ciBvZmZzZXQpOwotCi0gICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgY3JlYXRlQnVmZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZl
cigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVTaGFkZXIoR0MzRGVudW0pOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgp
OwotCi0gICAgdm9pZCBkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBk
ZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGRlbGV0ZVByb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7Ci0g
ICAgdm9pZCBkZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpOwotCi0gICAgdm9pZCBzeW50
aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvcik7CiAKICAgICB2b2lkIHNldENvbnRleHRMb3N0
Q2FsbGJhY2soUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFj
az4pOwogICAgIHZvaWQgc2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxHcmFwaGlj
c0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2s+KTsKQEAgLTI2NCw1NiArODAsMTUgQEAg
cHVibGljOgogICAgIGJvb2wgZW5zdXJlRXh0ZW5zaW9uRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpOwogICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAK
LSAgICAvLyBFWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKLSAgICBib29sIHN1cHBvcnRzQkdS
QSgpOwotCi0gICAgLy8gR0xfQ0hST01JVU1fbWFwX3N1YgotICAgIGJvb2wgc3VwcG9ydHNNYXBT
dWJDSFJPTUlVTSgpOwotICAgIHZvaWQqIG1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShHQzNEZW51
bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBvZmZzZXQsIEdDM0RzaXplaSwgR0MzRGVudW0gYWNjZXNz
KTsKLSAgICB2b2lkIHVubWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsKLSAg
ICB2b2lkKiBtYXBUZXhTdWJJbWFnZTJEQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0Rl
bnVtIGFjY2Vzcyk7Ci0gICAgdm9pZCB1bm1hcFRleFN1YkltYWdlMkRDSFJPTUlVTShjb25zdCB2
b2lkKik7Ci0KLSAgICAvLyBHTF9DSFJPTUlVTV9zZXRfdmlzaWJpbGl0eQotICAgIHZvaWQgc2V0
VmlzaWJpbGl0eUNIUk9NSVVNKGJvb2wpOwotCi0gICAgLy8gR0xfRVhUX2Rpc2NhcmRfZnJhbWVi
dWZmZXIKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY2FyZEZyYW1lYnVmZmVyRVhUKEdDM0RlbnVtIHRh
cmdldCwgR0MzRHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHQzNEZW51bSogYXR0YWNobWVu
dHMpOwotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVGcmFtZWJ1ZmZlckNIUk9NSVVNKCk7CisgICAg
Ym9vbCBpc1Jlc291cmNlU2FmZSgpOwogCiAgICAgLy8gR0xfQ0hST01JVU1fZ3B1X21lbW9yeV9t
YW5hZ2VyCiAgICAgdm9pZCBzZXRHcHVNZW1vcnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQ0hS
T01JVU0oUGFzc093blB0cjxFeHRlbnNpb25zM0RDaHJvbWl1bTo6R3B1TWVtb3J5QWxsb2NhdGlv
bkNoYW5nZWRDYWxsYmFja0NIUk9NSVVNPik7CiAKLSAgICAvLyBHTF9DSFJPTUlVTV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZQotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyQ0hST01JVU0oR0MzRGlu
dCBzcmNYMCwgR0MzRGludCBzcmNZMCwgR0MzRGludCBzcmNYMSwgR0MzRGludCBzcmNZMSwgR0Mz
RGludCBkc3RYMCwgR0MzRGludCBkc3RZMCwgR0MzRGludCBkc3RYMSwgR0MzRGludCBkc3RZMSwg
R0MzRGJpdGZpZWxkIG1hc2ssIEdDM0RlbnVtIGZpbHRlcik7Ci0gICAgdm9pZCByZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVDSFJPTUlVTShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaSBz
YW1wbGVzLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKLQogICAgIC8vIEdMX0NIUk9NSVVNX3N3YXBidWZmZXJzX2NvbXBsZXRlX2Nh
bGxiYWNrCiAgICAgdm9pZCBzZXRTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tDSFJPTUlVTShQ
YXNzT3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtOjpTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJh
Y2tDSFJPTUlVTT4pOwogCi0gICAgLy8gR0xfQ0hST01JVU1fcmF0ZV9saW1pdF9vZmZzY3JlZW5f
Y29udGV4dAotICAgIHZvaWQgcmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCk7Ci0K
LSAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwotICAgIEdDM0RlbnVtIGdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKTsKLQotICAgIC8vIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQot
ICAgIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpOwotCi0gICAgLy8gR0xfQ0hST01JVU1faW9zdXJmYWNlCi0gICAgdm9pZCB0ZXhJ
bWFnZUlPU3VyZmFjZTJEQ0hST01JVU0oR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IHdpZHRoLCBH
QzNEaW50IGhlaWdodCwgR0MzRHVpbnQgaW9TdXJmYWNlSWQsIEdDM0R1aW50IHBsYW5lKTsKLQot
ICAgIC8vIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKLSAgICB2b2lkIHRleFN0b3JhZ2UyREVYVChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWxzLCBHQzNEdWludCBpbnRlcm5hbGZvcm1hdCwg
R0MzRGludCB3aWR0aCwgR0MzRGludCBoZWlnaHQpOwotCi0gICAgLy8gR0xfRVhUX29jY2x1c2lv
bl9xdWVyeQotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlUXVlcnlFWFQoKTsKLSAgICB2b2lk
IGRlbGV0ZVF1ZXJ5RVhUKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIEdDM0Rib29sZWFuIGlzUXVl
cnlFWFQoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBiZWdpblF1ZXJ5RVhUKEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2b2lkIGVuZFF1ZXJ5RVhUKEdDM0RlbnVtKTsKLSAg
ICB2b2lkIGdldFF1ZXJ5aXZFWFQoR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEaW50Kik7Ci0gICAg
dm9pZCBnZXRRdWVyeU9iamVjdHVpdkVYVChQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0Mz
RHVpbnQqKTsKKyAgICBib29sIHByZXNlcnZlRHJhd2luZ0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlc2VydmVEcmF3aW5nQnVmZmVyOyB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlKFBhc3NPd25QdHI8V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRD4sIGJv
b2wgcHJlc2VydmVEcmF3aW5nQnVmZmVyKTsKQEAgLTMyMiwxMCArOTcsMTAgQEAgcHJpdmF0ZToK
IAogICAgIE93blB0cjxXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEPiBtX2ltcGw7CiAgICAg
T3duUHRyPEV4dGVuc2lvbnMzRENocm9taXVtPiBtX2V4dGVuc2lvbnM7Ci0gICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI+IG1fY29udGV4dExvc3RDYWxsYmFja0Fk
YXB0ZXI7Ci0gICAgT3duUHRyPEdyYXBoaWNzRXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyPiBt
X2Vycm9yTWVzc2FnZUNhbGxiYWNrQWRhcHRlcjsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
M0RTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyPiBtX3N3YXBCdWZmZXJzQ29tcGxl
dGVDYWxsYmFja0FkYXB0ZXI7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEQ29udGV4dExv
c3RDYWxsYmFja0FkYXB0ZXI+IG1fY29udGV4dExvc3RDYWxsYmFja0FkYXB0ZXI7CisgICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dDNERXJyb3JNZXNzYWdlQ2FsbGJhY2tBZGFwdGVyPiBtX2Vycm9y
TWVzc2FnZUNhbGxiYWNrQWRhcHRlcjsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RNZW1v
cnlBbGxvY2F0aW9uQ2hhbmdlZENhbGxiYWNrQWRhcHRlcj4gbV9tZW1vcnlBbGxvY2F0aW9uQ2hh
bmdlZENhbGxiYWNrQWRhcHRlcjsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RTd2FwQnVm
ZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyPiBtX3N3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFj
a0FkYXB0ZXI7CiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAg
ICBIYXNoU2V0PFN0cmluZz4gbV9lbmFibGVkRXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9yZXF1ZXN0YWJsZUV4dGVuc2lvbnM7Cg==
</data>
<flag name="review"
          id="153372"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>