<?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>110077</bug_id>
          
          <creation_ts>2013-02-17 22:38:54 -0800</creation_ts>
          <short_desc>AX: Make iOS wrapper use the WebAccessibilityObjectBase wrapper</short_desc>
          <delta_ts>2013-02-18 14:14:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</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="chris fleizach">cfleizach</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>835142</commentid>
    <comment_count>0</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 22:38:54 -0800</bug_when>
    <thetext>Make the iOS wrapper a subclass of the shared wrapper so that iOS can re-use code from the Mac</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835156</commentid>
    <comment_count>1</comment_count>
      <attachid>188802</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-17 23:31:09 -0800</bug_when>
    <thetext>Created attachment 188802
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835442</commentid>
    <comment_count>2</comment_count>
      <attachid>188802</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-18 06:47:22 -0800</bug_when>
    <thetext>Comment on attachment 188802
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835541</commentid>
    <comment_count>3</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-18 09:08:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/143230</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835744</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2013-02-18 14:14:36 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; http://trac.webkit.org/changeset/143230

Follow-up build fix in r143263:
&lt;http://trac.webkit.org/changeset/143263 &gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188802</attachid>
            <date>2013-02-17 23:31:09 -0800</date>
            <delta_ts>2013-02-18 06:47:22 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>89774</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MzE1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAyLTE3ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IE1ha2UgaU9TIHdy
YXBwZXIgdXNlIHRoZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0QmFzZSB3cmFwcGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTAwNzcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRoZSBpT1Mgd3Jh
cHBlciBhIHN1YmNsYXNzIG9mIHRoZSBzaGFyZWQgd3JhcHBlciBzbyB0aGF0IGlPUyBjYW4gcmUt
dXNlIGNvZGUgZnJvbSB0aGUgTWFjLgorICAgICAgICBSZW5hbWUgdGhlIGlPUyBmaWxlIHRvIHJl
ZmxlY3QgdGhlIGNsYXNzIG5hbWUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlP
Uy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmF0dGFjaFdyYXBwZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9u
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5oOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
LmguCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MubW06IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tLgorICAgICAgICAoLVtXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGF0dGFjaG1lbnRWaWV3XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQb3N0
ZWROb3RpZmljYXRpb246V2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6XSk6CisKIDIwMTMtMDItMTcg
IERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBTdG9w
IHBhc3NpbmcgYXJvdW5kIFNlbGVjdG9yQ2hlY2tlciBpbiBTZWxlY3RvclF1ZXJ5LCBub3cgdGhh
dCBpdCdzIHN0YWNrLWFsbG9jYXRlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MuaAkocmV2aXNpb24gMTQzMTQyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
U19oCi0jZGVmaW5lIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TX2gKLQotI2lmIEhBVkUo
QUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLQotQGNsYXNzIFdBS1ZpZXc7
Ci0KLUBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgOiBOU09iamVjdCB7
Ci0gICAgV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCogbV9vYmplY3Q7Ci0gICAgCi0gICAg
Ly8gQ2FjaGVkIGRhdGEgdG8gYXZvaWQgZnJlcXVlbnQgcmUtY29tcHV0YXRpb24uCi0gICAgaW50
IG1faXNBY2Nlc3NpYmlsaXR5RWxlbWVudDsKLSAgICB1aW50NjRfdCBtX2FjY2Vzc2liaWxpdHlU
cmFpdHNGcm9tQW5jZXN0b3I7Ci19Ci0KLS0gKGlkKWluaXRXaXRoQWNjZXNzaWJpbGl0eU9iamVj
dDooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3Q7Ci0tICh2b2lkKWRldGFj
aDsKLS0gKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3Q7
Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihDR1BvaW50KXBvaW50OwotLSAoQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5UG9zdFByb2Nlc3NIaXRUZXN0OihD
R1BvaW50KXBvaW50OwotLSAoQk9PTClhY2Nlc3NpYmlsaXR5Q2FuRnV6enlIaXRUZXN0OwotCi0t
IChCT09MKWlzQWNjZXNzaWJpbGl0eUVsZW1lbnQ7Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxp
dHlMYWJlbDsKLS0gKENHUmVjdClhY2Nlc3NpYmlsaXR5RnJhbWU7Ci0tIChOU1N0cmluZyAqKWFj
Y2Vzc2liaWxpdHlWYWx1ZTsKLQotLSAoTlNJbnRlZ2VyKWFjY2Vzc2liaWxpdHlFbGVtZW50Q291
bnQ7Ci0tIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXg6KE5TSW50ZWdlcilpbmRleDsK
LS0gKE5TSW50ZWdlcilpbmRleE9mQWNjZXNzaWJpbGl0eUVsZW1lbnQ6KGlkKWVsZW1lbnQ7Ci0K
LS0gKEJPT0wpaXNBdHRhY2htZW50OwotLSAoV0FLVmlldyAqKWF0dGFjaG1lbnRWaWV3OwotCi0t
ICh2b2lkKXBvc3RGb2N1c0NoYW5nZU5vdGlmaWNhdGlvbjsKLS0gKHZvaWQpcG9zdFNlbGVjdGVk
VGV4dENoYW5nZU5vdGlmaWNhdGlvbjsKLS0gKHZvaWQpcG9zdExheW91dENoYW5nZU5vdGlmaWNh
dGlvbjsKLS0gKHZvaWQpcG9zdExpdmVSZWdpb25DaGFuZ2VOb3RpZmljYXRpb247Ci0tICh2b2lk
KXBvc3RMb2FkQ29tcGxldGVOb3RpZmljYXRpb247Ci0tICh2b2lkKXBvc3RDaGlsZHJlbkNoYW5n
ZWROb3RpZmljYXRpb247Ci0tICh2b2lkKXBvc3RJbnZhbGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNh
dGlvbjsKLQotLy8gVXNlZCB0byBpbmZvcm0gYW4gZWxlbWVudCB3aGVuIGEgbm90aWZpY2F0aW9u
IGlzIHBvc3RlZCBmb3IgaXQuIFVzZWQgYnkgRFJULgotLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9z
dGVkTm90aWZpY2F0aW9uOihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbilu
b3RpZmljYXRpb247Ci0KLUBlbmQKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPU19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkocmV2aXNpb24gMTQzMTQzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmgiCisjaW1wb3J0ICJXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5oIgogCiAjaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiBQTEFURk9S
TShJT1MpCiAKQEAgLTE4MiwxMiArMTgyLDEwIEBACiAKIC0gKGlkKWluaXRXaXRoQWNjZXNzaWJp
bGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKIHsKLSAgICBzZWxmID0g
W3N1cGVyIGluaXRdOworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OmF4T2JqZWN0XTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgbV9vYmplY3QgPSBheE9iamVjdDsKLSAgICAKICAgICAvLyBJbml0aWFsaXplIHRvIGEg
c2VudGluZWwgdmFsdWUuCiAgICAgbV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yID0g
VUxMT05HX01BWDsKICAgICBtX2lzQWNjZXNzaWJpbGl0eUVsZW1lbnQgPSAtMTsKQEAgLTIzMSwx
MSArMjI5LDYgQEAKICAgICByZXR1cm4gWUVTOwogfQogCi0tIChBY2Nlc3NpYmlsaXR5T2JqZWN0
KilhY2Nlc3NpYmlsaXR5T2JqZWN0Ci17Ci0gICAgcmV0dXJuIG1fb2JqZWN0OwotfQotCiAvLyBU
aGVzZSBhcmUgaGVyZSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaW1wb3J0IEFYUnVudGltZS4K
IC8vIFRoZSBtZXRob2RzIHdpbGwgYmUgc3dpenpsZWQgd2hlbiB0aGUgYWNjZXNzaWJpbGl0eSBi
dW5kbGUgaXMgbG9hZGVkLgogCkBAIC0xMTQ4LDcgKzExNDEsNyBAQAogICAgIG1fb2JqZWN0LT5w
cmVzcygpOwogfQogCi0tIChXQUtWaWV3ICopYXR0YWNobWVudFZpZXcKKy0gKGlkKWF0dGFjaG1l
bnRWaWV3CiB7CiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKQEAgLTIwNTUsMjIgKzIwNDgsOCBAQAogCiAtICh2b2lkKWFjY2Vz
c2liaWxpdHlQb3N0ZWROb3RpZmljYXRpb246KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYTm90
aWZpY2F0aW9uKW5vdGlmaWNhdGlvblR5cGUKIHsKLSAgICBpZiAoQVhOb3RpZmljYXRpb25DYWxs
YmFjaykgewotICAgICAgICBOU1N0cmluZyAqbm90aWZpY2F0aW9uU3RyaW5nID0gbmlsOwotICAg
ICAgICAKLSAgICAgICAgLy8gUGFzcyBhIHN0cmluZyBiYWNrIHRvIERSVCB3aGljaCBpcyBlYXNp
ZXIgdG8gbWF0Y2ggdGhhbiBhbiBlbnVtIHR5cGUuCi0gICAgICAgIHN3aXRjaCAobm90aWZpY2F0
aW9uVHlwZSkgewotICAgICAgICAgICAgY2FzZSBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpBWEFj
dGl2ZURlc2NlbmRhbnRDaGFuZ2VkOgotICAgICAgICAgICAgY2FzZSBXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgotICAgICAgICAgICAgICAgIG5vdGlm
aWNhdGlvblN0cmluZyA9IEAiQVhGb2N1c0NoYW5nZWQiOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG5vdGlmaWNhdGlvblN0cmluZykKLSAgICAgICAgICAg
IEFYTm90aWZpY2F0aW9uQ2FsbGJhY2soc2VsZiwgbm90aWZpY2F0aW9uU3RyaW5nLCBBWFBvc3Rl
ZE5vdGlmaWNhdGlvbkNvbnRleHQpOwotICAgIH0KKyAgICBpZiAoQVhOb3RpZmljYXRpb25DYWxs
YmFjayAmJiBub3RpZmljYXRpb25TdHJpbmcpCisgICAgICAgIEFYTm90aWZpY2F0aW9uQ2FsbGJh
Y2soc2VsZiwgbm90aWZpY2F0aW9uU3RyaW5nLCBBWFBvc3RlZE5vdGlmaWNhdGlvbkNvbnRleHQp
OwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0JKHJldmlzaW9uIDE0MzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIwODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCIKLQotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkg
JiYgUExBVEZPUk0oSU9TKQotCi0jaW1wb3J0ICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Lmgi
Ci0jaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKLSNpbXBvcnQgIkFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0
ICJGcmFtZVNlbGVjdGlvbi5oIgotI2ltcG9ydCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJIaXRU
ZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKLSNpbXBvcnQg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxOYW1lcy5oIgotI2ltcG9ydCAiSW50
UmVjdC5oIgotI2ltcG9ydCAiSW50U2l6ZS5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQg
IlJlbmRlclZpZXcuaCIKLSNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrc0lPUy5oIgot
I2ltcG9ydCAiVGV4dEl0ZXJhdG9yLmgiCi0jaW1wb3J0ICJXQUtTY3JvbGxWaWV3LmgiCi0jaW1w
b3J0ICJXQUtWaWV3LmgiCi0jaW1wb3J0ICJXQUtXaW5kb3cuaCIKLSNpbXBvcnQgIldlYkNvcmVU
aHJlYWQuaCIKLSNpbXBvcnQgInZpc2libGVfdW5pdHMuaCIKLQotI2ltcG9ydCA8R3JhcGhpY3NT
ZXJ2aWNlcy9HcmFwaGljc1NlcnZpY2VzLmg+Ci0KLUBpbnRlcmZhY2UgTlNPYmplY3QgKEFjY2Vz
c2liaWxpdHlQcml2YXRlKQotLSAodm9pZClfYWNjZXNzaWJpbGl0eVVucmVnaXN0ZXI7Ci0tIChO
U1N0cmluZyAqKWFjY2Vzc2liaWxpdHlMYWJlbDsKLS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0
eVZhbHVlOwotLSAoQk9PTClpc0FjY2Vzc2liaWxpdHlFbGVtZW50OwotLSAoTlNJbnRlZ2VyKWFj
Y2Vzc2liaWxpdHlFbGVtZW50Q291bnQ7Ci0tIChpZClhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5k
ZXg6KE5TSW50ZWdlcilpbmRleDsKLS0gKE5TSW50ZWdlcilpbmRleE9mQWNjZXNzaWJpbGl0eUVs
ZW1lbnQ6KGlkKWVsZW1lbnQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgKEFjY2Vzc2liaWxpdHlQcml2YXRlKQotLSAoaWQpX2FjY2Vzc2liaWxpdHlX
ZWJEb2N1bWVudFZpZXc7Ci0tIChpZClhY2Nlc3NpYmlsaXR5Q29udGFpbmVyOwotLSAodm9pZClz
ZXRBY2Nlc3NpYmlsaXR5TGFiZWw6KE5TU3RyaW5nICopbGFiZWw7Ci0tICh2b2lkKXNldEFjY2Vz
c2liaWxpdHlWYWx1ZTooTlNTdHJpbmcgKil2YWx1ZTsKLS0gKEJPT0wpY29udGFpbnNVbm5hdHVy
YWxseVNlZ21lbnRlZENoaWxkcmVuOwotLSAoTlNJbnRlZ2VyKXBvc2l0aW9uRm9yVGV4dE1hcmtl
cjooaWQpbWFya2VyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdBS1ZpZXcgKGlPU0FjY2Vzc2liaWxp
dHkpCi0tIChCT09MKWFjY2Vzc2liaWxpdHlJc0lnbm9yZWQ7Ci1AZW5kCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLQotLy8gVGhlc2UgYXJl
IHRva2VucyBhY2Nlc3NpYmlsaXR5IHVzZXMgdG8gZGVub3RlIGF0dHJpYnV0ZXMuIAotc3RhdGlj
IE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VG9rZW5CbG9ja3F1b3RlTGV2ZWwgPSBA
IlVJQWNjZXNzaWJpbGl0eVRva2VuQmxvY2txdW90ZUxldmVsIjsKLXN0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuSGVhZGluZ0xldmVsID0gQCJVSUFjY2Vzc2liaWxp
dHlUb2tlbkhlYWRpbmdMZXZlbCI7Ci1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBVSUFjY2Vzc2li
aWxpdHlUb2tlbkZvbnROYW1lID0gQCJVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnROYW1lIjsKLXN0
YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuRm9udEZhbWlseSA9IEAi
VUlBY2Nlc3NpYmlsaXR5VG9rZW5Gb250RmFtaWx5IjsKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0
IFVJQWNjZXNzaWJpbGl0eVRva2VuRm9udFNpemUgPSBAIlVJQWNjZXNzaWJpbGl0eVRva2VuRm9u
dFNpemUiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3QgVUlBY2Nlc3NpYmlsaXR5VG9rZW5Cb2xk
ID0gQCJVSUFjY2Vzc2liaWxpdHlUb2tlbkJvbGQiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3Qg
VUlBY2Nlc3NpYmlsaXR5VG9rZW5JdGFsaWMgPSBAIlVJQWNjZXNzaWJpbGl0eVRva2VuSXRhbGlj
IjsKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFVJQWNjZXNzaWJpbGl0eVRva2VuVW5kZXJsaW5l
ID0gQCJVSUFjY2Vzc2liaWxpdHlUb2tlblVuZGVybGluZSI7Ci0KLXN0YXRpYyBBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciogQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyICp3cmFwcGVyKQotewotICAgIHdoaWxlICh3cmFwcGVyICYmICFb
d3JhcHBlciBpc0FjY2Vzc2liaWxpdHlFbGVtZW50XSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmplY3QgPSBbd3JhcHBlciBhY2Nlc3NpYmlsaXR5T2JqZWN0XTsKLSAgICAgICAg
aWYgKCFvYmplY3QpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGlmIChb
d3JhcHBlciBpc0F0dGFjaG1lbnRdICYmICFbW3dyYXBwZXIgYXR0YWNobWVudFZpZXddIGFjY2Vz
c2liaWxpdHlJc0lnbm9yZWRdKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0ID0gb2JqZWN0LT5wYXJlbnRP
YmplY3RVbmlnbm9yZWQoKTsKLSAgICAgICAgaWYgKCFwYXJlbnRPYmplY3QpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICB3cmFwcGVyID0gcGFyZW50T2JqZWN0LT53cmFwcGVyKCk7Ci0g
ICAgfQotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi0jcHJhZ21hIG1hcmsgQWNjZXNzaWJpbGl0
eSBUZXh0IE1hcmtlcgotCi1AaW50ZXJmYWNlIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIDog
TlNPYmplY3QKLXsKLSAgICBBWE9iamVjdENhY2hlKiBfY2FjaGU7Ci0gICAgVGV4dE1hcmtlckRh
dGEgX3RleHRNYXJrZXJEYXRhOwotfQotCi0rIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAq
KXRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQ
b3MgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcgotCi0tIChpZClpbml0V2l0aFRleHRNYXJrZXI6
KFRleHRNYXJrZXJEYXRhICopZGF0YSBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKLXsKLSAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAK
LSAgICBfY2FjaGUgPSBjYWNoZTsKLSAgICBtZW1jcHkoJl90ZXh0TWFya2VyRGF0YSwgZGF0YSwg
c2l6ZW9mKFRleHRNYXJrZXJEYXRhKSk7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKWlu
aXRXaXRoRGF0YTooTlNEYXRhICopZGF0YSBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKLXsK
LSAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBfY2FjaGUgPSBjYWNoZTsKLSAgICBbZGF0YSBnZXRCeXRlczomX3RleHRNYXJrZXJE
YXRhIGxlbmd0aDpzaXplb2YoVGV4dE1hcmtlckRhdGEpXTsKLSAgICAKLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLy8gVGhpcyBpcyBuZWVkZWQgZm9yIGV4dGVybmFsIGNsaWVudHMgdG8gYmUgYWJs
ZSB0byBjcmVhdGUgYSB0ZXh0IG1hcmtlciB3aXRob3V0IGhhdmluZyBhIHBvaW50ZXIgdG8gdGhl
IGNhY2hlLgotLSAoaWQpaW5pdFdpdGhEYXRhOihOU0RhdGEgKilkYXRhIGFjY2Vzc2liaWxpdHlP
YmplY3Q6KEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICopd3JhcHBlcgotewotICAgIFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gW3dyYXBwZXIgYWNjZXNzaWJpbGl0
eU9iamVjdF07IAotICAgIGlmICghYXhPYmplY3QpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoRGF0YTpkYXRhIGNhY2hlOmF4T2JqZWN0LT5heE9i
amVjdENhY2hlKCldOwotfQotCi0rIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRN
YXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQb3MgY2Fj
aGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCi17Ci0gICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtl
ckRhdGE7Ci0gICAgY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKHRleHRN
YXJrZXJEYXRhLCB2aXNpYmxlUG9zKTsKLSAgICAKLSAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEg
Y2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoTlNEYXRhICopZGF0YVJlcHJlc2Vu
dGF0aW9uCi17Ci0gICAgcmV0dXJuIFtOU0RhdGEgZGF0YVdpdGhCeXRlczomX3RleHRNYXJrZXJE
YXRhIGxlbmd0aDpzaXplb2YoVGV4dE1hcmtlckRhdGEpXTsKLX0KLQotLSAoVmlzaWJsZVBvc2l0
aW9uKXZpc2libGVQb3NpdGlvbgotewotICAgIHJldHVybiBfY2FjaGUtPnZpc2libGVQb3NpdGlv
bkZvclRleHRNYXJrZXJEYXRhKF90ZXh0TWFya2VyRGF0YSk7Ci19Ci0KLS0gKE5TU3RyaW5nICop
ZGVzY3JpcHRpb24KLXsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJb
QVhUZXh0TWFya2VyICVwXSA9IG5vZGU6ICVwIG9mZnNldDogJWQiLCBzZWxmLCBfdGV4dE1hcmtl
ckRhdGEubm9kZSwgX3RleHRNYXJrZXJEYXRhLm9mZnNldF07Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyCi0KLS0gKGlkKWluaXRXaXRo
QWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNzaWJpbGl0eU9iamVjdCopYXhPYmplY3QKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICBtX29iamVjdCA9IGF4T2JqZWN0OwotICAgIAotICAgIC8vIEluaXRpYWxp
emUgdG8gYSBzZW50aW5lbCB2YWx1ZS4KLSAgICBtX2FjY2Vzc2liaWxpdHlUcmFpdHNGcm9tQW5j
ZXN0b3IgPSBVTExPTkdfTUFYOwotICAgIG1faXNBY2Nlc3NpYmlsaXR5RWxlbWVudCA9IC0xOwot
ICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRldGFjaAotewotICAgIC8vIHJk
YXI6Ly84Nzk4OTYwIE1ha2Ugc3VyZSB0aGUgb2JqZWN0IGlzIGdvbmUgZWFybHksIHNvIHRoYXQg
YW55dGhpbmcgX2FjY2Vzc2liaWxpdHlVbnJlZ2lzdGVyIAotICAgIC8vIGRvZXMgY2FuJ3QgY2Fs
bCBiYWNrIGludG8gdGhlIHJlbmRlciB0cmVlLgotICAgIG1fb2JqZWN0ID0gMDsKLQotICAgIGlm
IChbc2VsZiByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9hY2Nlc3NpYmlsaXR5VW5yZWdp
c3RlcildKQotICAgICAgICBbc2VsZiBfYWNjZXNzaWJpbGl0eVVucmVnaXN0ZXJdOwotfQotCi0t
ICh2b2lkKWRlYWxsb2MKLXsKLSAgICAvLyBXZSBzaG91bGQgaGF2ZSBiZWVuIGRldGFjaGVkIGJl
Zm9yZSBkZWFsbG9jYXRlZC4KLSAgICBBU1NFUlQoIW1fb2JqZWN0KTsKLSAgICBbc3VwZXIgZGVh
bGxvY107Ci19Ci0KLS0gKEJPT0wpX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbAotewotICAgIC8v
IHJkYXI6Ly83OTgwMzE4IGlmIHdlIHN0YXJ0IGEgY2FsbCwgdGhlbiBibG9jayBpbiBXZWJUaHJl
YWRMb2NrKCksIHRoZW4gd2UncmUgZGVhbGxvY2VkIG9uIGFub3RoZXIsIHRocmVhZCwgd2UgY291
bGQKLSAgICAvLyBjcmFzaCwgc28gd2Ugc2hvdWxkIHJldGFpbiBvdXJzZWxmIGZvciB0aGUgZHVy
YXRpb24gb2YgdXNhZ2UgaGVyZS4KLSAgICBbW3NlbGYgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0K
LSAgICBXZWJUaHJlYWRMb2NrKCk7Ci0gICAgCi0gICAgLy8gSWYgd2UgY2FtZSBiYWNrIGZyb20g
b3VyIHRocmVhZCBsb2NrIGFuZCB3ZSB3ZXJlIGRldGFjaGVkLCB3ZSB3aWxsIG5vIGxvbmdlciBo
YXZlIGFuIG1fb2JqZWN0LgotICAgIGlmICghbV9vYmplY3QpCi0gICAgICAgIHJldHVybiBOTzsK
LSAgICAKLSAgICBtX29iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgaWYgKCFtX29i
amVjdCkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0g
KEFjY2Vzc2liaWxpdHlPYmplY3QqKWFjY2Vzc2liaWxpdHlPYmplY3QKLXsKLSAgICByZXR1cm4g
bV9vYmplY3Q7Ci19Ci0KLS8vIFRoZXNlIGFyZSBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0
byBpbXBvcnQgQVhSdW50aW1lLgotLy8gVGhlIG1ldGhvZHMgd2lsbCBiZSBzd2l6emxlZCB3aGVu
IHRoZSBhY2Nlc3NpYmlsaXR5IGJ1bmRsZSBpcyBsb2FkZWQuCi0KLS0gKHVpbnQ2NF90KV9heExp
bmtUcmFpdCB7IHJldHVybiAoMSA8PCAwKTsgfQotLSAodWludDY0X3QpX2F4VmlzaXRlZFRyYWl0
IHsgcmV0dXJuICgxIDw8IDEpOyB9Ci0tICh1aW50NjRfdClfYXhIZWFkZXJUcmFpdCB7IHJldHVy
biAoMSA8PCAyKTsgfQotLSAodWludDY0X3QpX2F4Q29udGFpbmVkQnlMaXN0VHJhaXQgeyByZXR1
cm4gKDEgPDwgMyk7IH0KLS0gKHVpbnQ2NF90KV9heENvbnRhaW5lZEJ5VGFibGVUcmFpdCB7IHJl
dHVybiAoMSA8PCA0KTsgfQotLSAodWludDY0X3QpX2F4Q29udGFpbmVkQnlMYW5kbWFya1RyYWl0
IHsgcmV0dXJuICgxIDw8IDUpOyB9Ci0tICh1aW50NjRfdClfYXhXZWJDb250ZW50VHJhaXQgeyBy
ZXR1cm4gKDEgPDwgNik7IH0KLS0gKHVpbnQ2NF90KV9heFNlY3VyZVRleHRGaWVsZFRyYWl0IHsg
cmV0dXJuICgxIDw8IDcpOyB9Ci0tICh1aW50NjRfdClfYXhUZXh0RW50cnlUcmFpdCB7IHJldHVy
biAoMSA8PCA4KTsgfQotLSAodWludDY0X3QpX2F4SGFzVGV4dEN1cnNvclRyYWl0IHsgcmV0dXJu
ICgxIDw8IDkpOyB9Ci0tICh1aW50NjRfdClfYXhUZXh0T3BlcmF0aW9uc0F2YWlsYWJsZVRyYWl0
IHsgcmV0dXJuICgxIDw8IDEwKTsgfQotLSAodWludDY0X3QpX2F4SW1hZ2VUcmFpdCB7IHJldHVy
biAoMSA8PCAxMSk7IH0KLS0gKHVpbnQ2NF90KV9heFRhYkJ1dHRvblRyYWl0IHsgcmV0dXJuICgx
IDw8IDEyKTsgfQotLSAodWludDY0X3QpX2F4QnV0dG9uVHJhaXQgeyByZXR1cm4gKDEgPDwgMTMp
OyB9Ci0tICh1aW50NjRfdClfYXhUb2dnbGVUcmFpdCB7IHJldHVybiAoMSA8PCAxNCk7IH0KLS0g
KHVpbnQ2NF90KV9heFBvcHVwQnV0dG9uVHJhaXQgeyByZXR1cm4gKDEgPDwgMTUpOyB9Ci0tICh1
aW50NjRfdClfYXhTdGF0aWNUZXh0VHJhaXQgeyByZXR1cm4gKDEgPDwgMTYpOyB9Ci0tICh1aW50
NjRfdClfYXhBZGp1c3RhYmxlVHJhaXQgeyByZXR1cm4gKDEgPDwgMTcpOyB9Ci0tICh1aW50NjRf
dClfYXhNZW51SXRlbVRyYWl0IHsgcmV0dXJuICgxIDw8IDE4KTsgfQotLSAodWludDY0X3QpX2F4
U2VsZWN0ZWRUcmFpdCB7IHJldHVybiAoMSA8PCAxOSk7IH0KLS0gKHVpbnQ2NF90KV9heE5vdEVu
YWJsZWRUcmFpdCB7IHJldHVybiAoMSA8PCAyMCk7IH0KLS0gKHVpbnQ2NF90KV9heFJhZGlvQnV0
dG9uVHJhaXQgeyByZXR1cm4gKDEgPDwgMjEpOyB9Ci0KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eUNh
bkZ1enp5SGl0VGVzdAotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2Fs
bF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9s
ZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKLSAgICAvLyBFbGVtZW50cyB0aGF0IGNhbiBiZSBy
ZXR1cm5lZCB3aGVuIHBlcmZvcm1pbmcgZnV6enkgaGl0IHRlc3RpbmcuCi0gICAgc3dpdGNoIChy
b2xlKSB7Ci0gICAgY2FzZSBCdXR0b25Sb2xlOgotICAgIGNhc2UgQ2hlY2tCb3hSb2xlOgotICAg
IGNhc2UgQ29tYm9Cb3hSb2xlOgotICAgIGNhc2UgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZToKLSAg
ICBjYXNlIEhlYWRpbmdSb2xlOgotICAgIGNhc2UgSW1hZ2VNYXBMaW5rUm9sZToKLSAgICBjYXNl
IEltYWdlUm9sZToKLSAgICBjYXNlIExpbmtSb2xlOgotICAgIGNhc2UgTGlzdEJveFJvbGU6Ci0g
ICAgY2FzZSBMaXN0Qm94T3B0aW9uUm9sZToKLSAgICBjYXNlIE1lbnVCdXR0b25Sb2xlOgotICAg
IGNhc2UgTWVudUl0ZW1Sb2xlOgotICAgIGNhc2UgUG9wVXBCdXR0b25Sb2xlOgotICAgIGNhc2Ug
UmFkaW9CdXR0b25Sb2xlOgotICAgIGNhc2UgU2Nyb2xsQmFyUm9sZToKLSAgICBjYXNlIFNsaWRl
clJvbGU6Ci0gICAgY2FzZSBTdGF0aWNUZXh0Um9sZToKLSAgICBjYXNlIFRhYlJvbGU6Ci0gICAg
Y2FzZSBUZXh0RmllbGRSb2xlOgotICAgICAgICByZXR1cm4gIW1fb2JqZWN0LT5hY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5UG9z
dFByb2Nlc3NIaXRUZXN0OihDR1BvaW50KXBvaW50Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHBvaW50
KTsKLSAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUg
dGhpcyBhbmQgcGVyZm9ybSB0aGUgcG9zdCBwcm9jZXNzIGhpdCB0ZXN0LgotICAgIHJldHVybiBu
aWw7Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihDR1BvaW50KXBvaW50Ci17Ci0g
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAKLSAgICAvLyBUcnkgYSBmdXp6eSBoaXQgdGVzdCBmaXJzdCB0byBmaW5kIGFu
IGFjY2Vzc2libGUgZWxlbWVudC4KLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gYXhP
YmplY3QgPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoSW50UG9pbnQocG9pbnQpKTsK
LSAgICBpZiAoIWF4T2JqZWN0KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIElm
IHRoaXMgaXMgYSBnb29kIGFjY2Vzc2libGUgb2JqZWN0IHRvIHJldHVybiwgbm8gZXh0cmEgd29y
ayBpcyByZXF1aXJlZC4KLSAgICBpZiAoW2F4T2JqZWN0LT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0
eUNhbkZ1enp5SGl0VGVzdF0pCi0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVk
QW5jZXN0b3IoYXhPYmplY3QtPndyYXBwZXIoKSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdG8gc2Vl
IGlmIHdlIGNhbiBwb3N0LXByb2Nlc3MgdGhpcyBoaXQgdGVzdCB0byBmaW5kIGEgYmV0dGVyIGNh
bmRpZGF0ZS4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciogd3JhcHBlciA9IFtheE9i
amVjdC0+d3JhcHBlcigpIGFjY2Vzc2liaWxpdHlQb3N0UHJvY2Vzc0hpdFRlc3Q6cG9pbnRdOwot
ICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFu
Y2VzdG9yKHdyYXBwZXIpOwotICAgIAotICAgIC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGJlaGF2
aW9yLgotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VW5pZ25vcmVkQW5jZXN0b3IoYXhPYmplY3Qt
PndyYXBwZXIoKSk7ICAgIAotfQotCi0tIChOU0ludGVnZXIpYWNjZXNzaWJpbGl0eUVsZW1lbnRD
b3VudAotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAoW3NlbGYgaXNBdHRhY2htZW50XSkKLSAgICAgICAg
cmV0dXJuIFtbc2VsZiBhdHRhY2htZW50Vmlld10gYWNjZXNzaWJpbGl0eUVsZW1lbnRDb3VudF07
Ci0gICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5jaGlsZHJlbigpLnNpemUoKTsKLX0KLQotLSAo
aWQpYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4OihOU0ludGVnZXIpaW5kZXgKLXsKLSAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmls
OwotCi0gICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCi0gICAgICAgIHJldHVybiBbW3NlbGYg
YXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleDppbmRleF07Ci0gICAg
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNo
aWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbmRleCkgPj0gY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyID0gY2hpbGRyZW5baW5k
ZXhdLT53cmFwcGVyKCk7Ci0gICAgaWYgKGNoaWxkcmVuW2luZGV4XS0+aXNBdHRhY2htZW50KCkp
Ci0gICAgICAgIHJldHVybiBbd3JhcHBlciBhdHRhY2htZW50Vmlld107Ci0KLSAgICByZXR1cm4g
d3JhcHBlcjsKLX0KLQotLSAoTlNJbnRlZ2VyKWluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDoo
aWQpZWxlbWVudAotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
Ci0gICAgICAgIHJldHVybiBOU05vdEZvdW5kOwotICAgIAotICAgIGlmIChbc2VsZiBpc0F0dGFj
aG1lbnRdKQotICAgICAgICByZXR1cm4gW1tzZWxmIGF0dGFjaG1lbnRWaWV3XSBpbmRleE9mQWNj
ZXNzaWJpbGl0eUVsZW1lbnQ6ZWxlbWVudF07Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxk
cmVuKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBlcigpOwotICAgICAgICBp
ZiAod3JhcHBlciA9PSBlbGVtZW50IHx8IChjaGlsZHJlbltrXS0+aXNBdHRhY2htZW50KCkgJiYg
W3dyYXBwZXIgYXR0YWNobWVudFZpZXddID09IGVsZW1lbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBOU05vdEZvdW5kOwotfQotCi0tIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlMYW5ndWFnZQotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIG1f
b2JqZWN0LT5sYW5ndWFnZSgpOwotfQotCi0tIChCT09MKV9hY2Nlc3NpYmlsaXR5SXNMYW5kbWFy
a1JvbGU6KEFjY2Vzc2liaWxpdHlSb2xlKXJvbGUKLXsKLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAg
ICAgICAgY2FzZSBMYW5kbWFya0FwcGxpY2F0aW9uUm9sZToKLSAgICAgICAgY2FzZSBMYW5kbWFy
a0Jhbm5lclJvbGU6Ci0gICAgICAgIGNhc2UgTGFuZG1hcmtDb21wbGVtZW50YXJ5Um9sZToKLSAg
ICAgICAgY2FzZSBMYW5kbWFya0NvbnRlbnRJbmZvUm9sZToKLSAgICAgICAgY2FzZSBMYW5kbWFy
a01haW5Sb2xlOgotICAgICAgICBjYXNlIExhbmRtYXJrTmF2aWdhdGlvblJvbGU6Ci0gICAgICAg
IGNhc2UgTGFuZG1hcmtTZWFyY2hSb2xlOgotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICB9ICAgIAotfQotCi0tIChB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciopX2FjY2Vzc2liaWxpdHlMaXN0QW5jZXN0b3IKLXsK
LSAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRP
YmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gcGFyZW50LT5yb2xlVmFsdWUoKTsK
LSAgICAgICAgaWYgKHJvbGUgPT0gTGlzdFJvbGUgfHwgcm9sZSA9PSBMaXN0Qm94Um9sZSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5pbDsKLX0KLQotLSAoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqKV9hY2Nlc3NpYmls
aXR5TGFuZG1hcmtBbmNlc3RvcgotewotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFy
ZW50ID0gbV9vYmplY3QtPnBhcmVudE9iamVjdCgpOyBwYXJlbnQgIT0gbmlsOyBwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChbc2VsZiBfYWNjZXNzaWJpbGl0
eUlzTGFuZG1hcmtSb2xlOnBhcmVudC0+cm9sZVZhbHVlKCldKQotICAgICAgICAgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpOwotICAgIH0KLQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKEFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKilfYWNjZXNzaWJpbGl0eVRhYmxlQW5jZXN0b3IKLXsK
LSAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRP
YmplY3QoKTsgcGFyZW50ICE9IG5pbDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkg
ewotICAgICAgICBpZiAocGFyZW50LT5yb2xlVmFsdWUoKSA9PSBUYWJsZVJvbGUpCi0gICAgICAg
ICAgICByZXR1cm4gcGFyZW50LT53cmFwcGVyKCk7ICAgCi0gICAgfQotICAgIAotICAgIHJldHVy
biBuaWw7Ci19Ci0KLS0gKHVpbnQ2NF90KV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9y
cwotewotICAgIHVpbnQ2NF90IHRyYWl0cyA9IDA7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9s
ZSA9IG1fb2JqZWN0LT5yb2xlVmFsdWUoKTsKLSAgICAKLSAgICAvLyBUcmFpdCBpbmZvcm1hdGlv
biBhbHNvIG5lZWRzIHRvIGJlIGdhdGhlcmVkIGZyb20gdGhlIHBhcmVudHMgYWJvdmUgdGhlIG9i
amVjdC4KLSAgICAvLyBUaGUgcGFyZW50T2JqZWN0IGlzIG5lZWRlZCBpbnN0ZWFkIG9mIHRoZSB1
bmlnbm9yZWRQYXJlbnRPYmplY3QsIGJlY2F1c2UgYSB0YWJsZSBtaWdodCBiZSBpZ25vcmVkLCBi
dXQgaW5mb3JtYXRpb24gc3RpbGwgbmVlZHMgdG8gYmUgZ2F0aGVyZWQgZnJvbSBpdC4gICAgCi0g
ICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBtX29iamVjdC0+cGFyZW50T2Jq
ZWN0KCk7IHBhcmVudCAhPSBuaWw7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsK
LSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcGFyZW50Um9sZSA9IHBhcmVudC0+cm9sZVZhbHVl
KCk7Ci0gICAgICAgIGlmIChwYXJlbnRSb2xlID09IFdlYkFyZWFSb2xlKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHBhcmVudFJvbGUpIHsKLSAgICAgICAg
ICAgIGNhc2UgTGlua1JvbGU6Ci0gICAgICAgICAgICBjYXNlIFdlYkNvcmVMaW5rUm9sZToKLSAg
ICAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4TGlua1RyYWl0XTsKLSAgICAgICAgICAg
ICAgICBpZiAocGFyZW50LT5pc1Zpc2l0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgdHJhaXRz
IHw9IFtzZWxmIF9heFZpc2l0ZWRUcmFpdF07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIEhlYWRpbmdSb2xlOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHRyYWl0cyB8PSBbc2VsZiBfYXhIZWFkZXJUcmFpdF07Ci0gICAgICAgICAgICAgICAgLy8gSWYg
dGhpcyBvYmplY3QgaGFzIHRoZSBoZWFkZXIgdHJhaXQsIHdlIHNob3VsZCBzZXQgdGhlIHZhbHVl
Ci0gICAgICAgICAgICAgICAgLy8gdG8gdGhlIGhlYWRpbmcgbGV2ZWwuIElmIGl0IHdhcyBhIHN0
YXRpYyB0ZXh0IGVsZW1lbnQsIHdlIG5lZWQgdG8gc3RvcmUKLSAgICAgICAgICAgICAgICAvLyB0
aGUgdmFsdWUgYXMgdGhlIGxhYmVsLCBiZWNhdXNlIHRoZSBoZWFkaW5nIGxldmVsIG5lZWRzIHRv
IHRoZSB2YWx1ZS4KLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciog
d3JhcHBlciA9IHBhcmVudC0+d3JhcHBlcigpOwotICAgICAgICAgICAgICAgIGlmIChyb2xlID09
IFN0YXRpY1RleHRSb2xlKSAKLSAgICAgICAgICAgICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJp
bGl0eUxhYmVsOm1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpXTsgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgW3NlbGYgc2V0QWNjZXNzaWJpbGl0eVZhbHVlOlt3cmFwcGVyIGFjY2Vzc2li
aWxpdHlWYWx1ZV1dOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY2FzZSBMaXN0Qm94Um9sZToKLSAgICAgICAgICAgIGNhc2UgTGlzdFJvbGU6Ci0g
ICAgICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heENvbnRhaW5lZEJ5TGlzdFRyYWl0XTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVGFibGVSb2xlOgotICAg
ICAgICAgICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhDb250YWluZWRCeVRhYmxlVHJhaXRdOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBpZiAoW3NlbGYgX2FjY2Vzc2liaWxpdHlJc0xhbmRtYXJrUm9sZTpwYXJlbnRSb2xlXSkK
LSAgICAgICAgICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heENvbnRhaW5lZEJ5TGFuZG1h
cmtUcmFpdF07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHRyYWl0czsKLX0KLQotLSAodWludDY0X3QpYWNjZXNzaWJpbGl0eVRyYWl0
cwotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBtX29iamVjdC0+
cm9sZVZhbHVlKCk7Ci0gICAgdWludDY0X3QgdHJhaXRzID0gW3NlbGYgX2F4V2ViQ29udGVudFRy
YWl0XTsKLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICAgICAgY2FzZSBMaW5rUm9sZToKLSAgICAg
ICAgY2FzZSBXZWJDb3JlTGlua1JvbGU6Ci0gICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4
TGlua1RyYWl0XTsKLSAgICAgICAgICAgIGlmIChtX29iamVjdC0+aXNWaXNpdGVkKCkpCi0gICAg
ICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFZpc2l0ZWRUcmFpdF07Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgLy8gVGV4dEZpZWxkUm9sZSBpcyBpbnRlbmRlZCB0byBmYWxsIHRo
cm91Z2ggdG8gVGV4dEFyZWFSb2xlLCBpbiBvcmRlciB0byBwaWNrIHVwIHRoZSB0ZXh0IGVudHJ5
IGFuZCB0ZXh0IGN1cnNvciB0cmFpdHMuCi0gICAgICAgIGNhc2UgVGV4dEZpZWxkUm9sZToKLSAg
ICAgICAgICAgIGlmIChtX29iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgICAgICAg
ICAgdHJhaXRzIHw9IFtzZWxmIF9heFNlY3VyZVRleHRGaWVsZFRyYWl0XTsKLSAgICAgICAgY2Fz
ZSBUZXh0QXJlYVJvbGU6Ci0gICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VGV4dEVudHJ5
VHJhaXRdOyAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5pc0ZvY3VzZWQo
KSkKLSAgICAgICAgICAgICAgICB0cmFpdHMgfD0gKFtzZWxmIF9heEhhc1RleHRDdXJzb3JUcmFp
dF0gfCBbc2VsZiBfYXhUZXh0T3BlcmF0aW9uc0F2YWlsYWJsZVRyYWl0XSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbWFnZVJvbGU6Ci0gICAgICAgICAgICB0cmFpdHMgfD0g
W3NlbGYgX2F4SW1hZ2VUcmFpdF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBU
YWJSb2xlOgotICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFRhYkJ1dHRvblRyYWl0XTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJ1dHRvblJvbGU6Ci0gICAgICAgICAg
ICB0cmFpdHMgfD0gW3NlbGYgX2F4QnV0dG9uVHJhaXRdOwotICAgICAgICAgICAgaWYgKG1fb2Jq
ZWN0LT5pc1ByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4VG9n
Z2xlVHJhaXRdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUG9wVXBCdXR0b25S
b2xlOgotICAgICAgICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFBvcHVwQnV0dG9uVHJhaXRdOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmFkaW9CdXR0b25Sb2xlOgotICAgICAg
ICAgICAgdHJhaXRzIHw9IFtzZWxmIF9heFJhZGlvQnV0dG9uVHJhaXRdIHwgW3NlbGYgX2F4VG9n
Z2xlVHJhaXRdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tCb3hSb2xl
OgotICAgICAgICAgICAgdHJhaXRzIHw9IChbc2VsZiBfYXhCdXR0b25UcmFpdF0gfCBbc2VsZiBf
YXhUb2dnbGVUcmFpdF0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGVhZGlu
Z1JvbGU6Ci0gICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYgX2F4SGVhZGVyVHJhaXRdOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RhdGljVGV4dFJvbGU6Ci0gICAgICAgICAg
ICB0cmFpdHMgfD0gW3NlbGYgX2F4U3RhdGljVGV4dFRyYWl0XTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFNsaWRlclJvbGU6Ci0gICAgICAgICAgICB0cmFpdHMgfD0gW3NlbGYg
X2F4QWRqdXN0YWJsZVRyYWl0XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1l
bnVCdXR0b25Sb2xlOgotICAgICAgICBjYXNlIE1lbnVJdGVtUm9sZToKLSAgICAgICAgICAgIHRy
YWl0cyB8PSBbc2VsZiBfYXhNZW51SXRlbVRyYWl0XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc1NlbGVjdGVkKCkpCi0gICAgICAgIHRyYWl0cyB8PSBbc2VsZiBfYXhTZWxlY3RlZFRy
YWl0XTsKLQotICAgIGlmICghbV9vYmplY3QtPmlzRW5hYmxlZCgpKQotICAgICAgICB0cmFpdHMg
fD0gW3NlbGYgX2F4Tm90RW5hYmxlZFRyYWl0XTsKLSAgICAKLSAgICBpZiAobV9hY2Nlc3NpYmls
aXR5VHJhaXRzRnJvbUFuY2VzdG9yID09IFVMTE9OR19NQVgpCi0gICAgICAgIG1fYWNjZXNzaWJp
bGl0eVRyYWl0c0Zyb21BbmNlc3RvciA9IFtzZWxmIF9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFu
Y2VzdG9yc107Ci0gICAgCi0gICAgdHJhaXRzIHw9IG1fYWNjZXNzaWJpbGl0eVRyYWl0c0Zyb21B
bmNlc3RvcjsKLQotICAgIHJldHVybiB0cmFpdHM7Ci19Ci0KLS0gKEJPT0wpZGV0ZXJtaW5lSXNB
Y2Nlc3NpYmlsaXR5RWxlbWVudAotewotICAgIGlmICghbV9vYmplY3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBIb25vciB3aGVuIHNvbWV0aGluZyBleHBsaWNpdGx5IG1h
a2VzIHRoaXMgYW4gZWxlbWVudCAoc3VwZXIgd2lsbCBjb250YWluIHRoYXQgbG9naWMpIAotICAg
IGlmIChbc3VwZXIgaXNBY2Nlc3NpYmlsaXR5RWxlbWVudF0pCi0gICAgICAgIHJldHVybiBZRVM7
Ci0gICAgCi0gICAgbV9vYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgIAotICAgIHN3
aXRjaCAobV9vYmplY3QtPnJvbGVWYWx1ZSgpKSB7Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxkUm9s
ZToKLSAgICAgICAgY2FzZSBUZXh0QXJlYVJvbGU6Ci0gICAgICAgIGNhc2UgQnV0dG9uUm9sZToK
LSAgICAgICAgY2FzZSBQb3BVcEJ1dHRvblJvbGU6Ci0gICAgICAgIGNhc2UgQ2hlY2tCb3hSb2xl
OgotICAgICAgICBjYXNlIFJhZGlvQnV0dG9uUm9sZToKLSAgICAgICAgY2FzZSBTbGlkZXJSb2xl
OgotICAgICAgICBjYXNlIE1lbnVCdXR0b25Sb2xlOgotICAgICAgICBjYXNlIFZhbHVlSW5kaWNh
dG9yUm9sZToKLSAgICAgICAgY2FzZSBJbWFnZVJvbGU6Ci0gICAgICAgIGNhc2UgTWVudUl0ZW1S
b2xlOgotICAgICAgICBjYXNlIEluY3JlbWVudG9yUm9sZToKLSAgICAgICAgY2FzZSBDb21ib0Jv
eFJvbGU6Ci0gICAgICAgIGNhc2UgRGlzY2xvc3VyZVRyaWFuZ2xlUm9sZToKLSAgICAgICAgY2Fz
ZSBJbWFnZU1hcFJvbGU6Ci0gICAgICAgIGNhc2UgTGlzdE1hcmtlclJvbGU6Ci0gICAgICAgIGNh
c2UgTGlzdEJveE9wdGlvblJvbGU6Ci0gICAgICAgIGNhc2UgVGFiUm9sZToKLSAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hdGhSb2xlOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNh
c2UgU3RhdGljVGV4dFJvbGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIE1hbnkgdGV4dCBl
bGVtZW50cyBvbmx5IGNvbnRhaW4gYSBzcGFjZS4KLSAgICAgICAgICAgIGlmICghW1tbc2VsZiBh
Y2Nlc3NpYmlsaXR5TGFiZWxdIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hh
cmFjdGVyU2V0IHdoaXRlc3BhY2VDaGFyYWN0ZXJTZXRdXSBsZW5ndGhdKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gVGV4dCBlbGVtZW50cyB0aGF0IGFy
ZSBqdXN0IHBpZWNlcyBvZiBsaW5rcyBvciBoZWFkZXJzIHNob3VsZCBub3QgYmUgZXhwb3NlZC4K
LSAgICAgICAgICAgIGlmIChbQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKFtzZWxmIGFj
Y2Vzc2liaWxpdHlDb250YWluZXJdKSBjb250YWluc1VubmF0dXJhbGx5U2VnbWVudGVkQ2hpbGRy
ZW5dKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gRG9uJ3QgZXhwb3NlIGhl
YWRlcnMgYXMgZWxlbWVudHM7IGluc3RlYWQgZXhwb3NlIHRoZWlyIGNoaWxkcmVuIGFzIGVsZW1l
bnRzLCB3aXRoIHRoZSBoZWFkZXIgdHJhaXQgKHVubGVzcyB0aGV5IGhhdmUgbm8gY2hpbGRyZW4p
Ci0gICAgICAgIGNhc2UgSGVhZGluZ1JvbGU6Ci0gICAgICAgICAgICBpZiAoIVtzZWxmIGFjY2Vz
c2liaWxpdHlFbGVtZW50Q291bnRdKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIC8vIExpbmtzIGNh
biBzb21ldGltZXMgYmUgZWxlbWVudHMgKHdoZW4gdGhleSBvbmx5IGNvbnRhaW4gc3RhdGljIHRl
eHQgb3IgZG9uJ3QgY29udGFpbiBhbnl0aGluZykuCi0gICAgICAgIC8vIFRoZXkgc2hvdWxkIG5v
dCBiZSBlbGVtZW50cyB3aGVuIGNvbnRhaW5pbmcgdGV4dCBhbmQgb3RoZXIgdHlwZXMuCi0gICAg
ICAgIGNhc2UgV2ViQ29yZUxpbmtSb2xlOgotICAgICAgICBjYXNlIExpbmtSb2xlOgotICAgICAg
ICAgICAgaWYgKFtzZWxmIGNvbnRhaW5zVW5uYXR1cmFsbHlTZWdtZW50ZWRDaGlsZHJlbl0gfHwg
IVtzZWxmIGFjY2Vzc2liaWxpdHlFbGVtZW50Q291bnRdKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIEFsbCBvdGhl
ciBlbGVtZW50cyBhcmUgaWdub3JlZCBvbiB0aGUgaXBob25lLgotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICBjYXNlIFVua25vd25Sb2xlOgotICAgICAgICBjYXNlIFRhYkdyb3VwUm9sZToKLSAg
ICAgICAgY2FzZSBTY3JvbGxBcmVhUm9sZToKLSAgICAgICAgY2FzZSBUYWJsZVJvbGU6Ci0gICAg
ICAgIGNhc2UgQXBwbGljYXRpb25Sb2xlOgotICAgICAgICBjYXNlIEdyb3VwUm9sZToKLSAgICAg
ICAgY2FzZSBSYWRpb0dyb3VwUm9sZToKLSAgICAgICAgY2FzZSBMaXN0Um9sZToKLSAgICAgICAg
Y2FzZSBMaXN0Qm94Um9sZToKLSAgICAgICAgY2FzZSBTY3JvbGxCYXJSb2xlOgotICAgICAgICBj
YXNlIE1lbnVCYXJSb2xlOgotICAgICAgICBjYXNlIE1lbnVSb2xlOgotICAgICAgICBjYXNlIENv
bHVtblJvbGU6Ci0gICAgICAgIGNhc2UgUm93Um9sZToKLSAgICAgICAgY2FzZSBUb29sYmFyUm9s
ZToKLSAgICAgICAgY2FzZSBCdXN5SW5kaWNhdG9yUm9sZToKLSAgICAgICAgY2FzZSBQcm9ncmVz
c0luZGljYXRvclJvbGU6Ci0gICAgICAgIGNhc2UgV2luZG93Um9sZToKLSAgICAgICAgY2FzZSBE
cmF3ZXJSb2xlOgotICAgICAgICBjYXNlIFN5c3RlbVdpZGVSb2xlOgotICAgICAgICBjYXNlIE91
dGxpbmVSb2xlOgotICAgICAgICBjYXNlIEJyb3dzZXJSb2xlOgotICAgICAgICBjYXNlIFNwbGl0
R3JvdXBSb2xlOgotICAgICAgICBjYXNlIFNwbGl0dGVyUm9sZToKLSAgICAgICAgY2FzZSBDb2xv
cldlbGxSb2xlOgotICAgICAgICBjYXNlIEdyb3dBcmVhUm9sZToKLSAgICAgICAgY2FzZSBTaGVl
dFJvbGU6Ci0gICAgICAgIGNhc2UgSGVscFRhZ1JvbGU6Ci0gICAgICAgIGNhc2UgTWF0dGVSb2xl
OgotICAgICAgICBjYXNlIFJ1bGVyUm9sZToKLSAgICAgICAgY2FzZSBSdWxlck1hcmtlclJvbGU6
Ci0gICAgICAgIGNhc2UgR3JpZFJvbGU6Ci0gICAgICAgIGNhc2UgV2ViQXJlYVJvbGU6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0tIChCT09MKWlzQWNjZXNzaWJpbGl0
eUVsZW1lbnQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQot
ICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgaWYgKG1faXNBY2Nlc3NpYmlsaXR5RWxlbWVu
dCA9PSAtMSkKLSAgICAgICAgbV9pc0FjY2Vzc2liaWxpdHlFbGVtZW50ID0gW3NlbGYgZGV0ZXJt
aW5lSXNBY2Nlc3NpYmlsaXR5RWxlbWVudF07Ci0gICAgCi0gICAgcmV0dXJuIG1faXNBY2Nlc3Np
YmlsaXR5RWxlbWVudDsKLX0KLQotLSAoQk9PTClzdHJpbmdWYWx1ZVNob3VsZEJlVXNlZEluTGFi
ZWwKLXsKLSAgICBpZiAobV9vYmplY3QtPmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgcmV0dXJu
IE5POwotICAgIGlmIChtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gUG9wVXBCdXR0b25Sb2xlKQot
ICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoTlNTdHJp
bmcgKilhY2Nlc3NpYmlsaXR5TGFiZWwKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNz
aWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gY2hlY2sgaWYgdGhl
IGxhYmVsIHdhcyBvdmVycmlkZW4KLSAgICBOU1N0cmluZyAqbGFiZWwgPSBbc3VwZXIgYWNjZXNz
aWJpbGl0eUxhYmVsXTsKLSAgICBpZiAobGFiZWwpCi0gICAgICAgIHJldHVybiBsYWJlbDsKLQot
ICAgIE5TU3RyaW5nKiB0aXRsZSA9IG1fb2JqZWN0LT50aXRsZSgpOwotICAgIGlmICghW3RpdGxl
IGxlbmd0aF0pCi0gICAgICAgIHRpdGxlID0gbV9vYmplY3QtPmFjY2Vzc2liaWxpdHlEZXNjcmlw
dGlvbigpOwotCi0gICAgLy8gRXZlcnl0aGluZyBleGNlcHQgYSB0ZXh0IGNvbnRyb2wgbmVlZHMg
dG8gcmV0dXJuIHRoZWlyIHN0cmluZyB2YWx1ZSBpbiB0aGUgYXhMYWJlbCAocGVyIGlQaG9uZSBB
WCBBUEkpLgotICAgIGlmICghW3RpdGxlIGxlbmd0aF0gJiYgW3NlbGYgc3RyaW5nVmFsdWVTaG91
bGRCZVVzZWRJbkxhYmVsXSkKLSAgICAgICAgdGl0bGUgPSBtX29iamVjdC0+c3RyaW5nVmFsdWUo
KTsKLSAgICAKLSAgICByZXR1cm4gdGl0bGU7Ci19Ci0KLS0gKEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwqKXRhYmxlQ2VsbFBhcmVudAotewotICAgIC8vIEZpbmQgaWYgdGhpcyBlbGVtZW50IGlzIGlu
IGEgdGFibGUgY2VsbC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjZWxsID0gMDsKLSAgICBm
b3IgKGNlbGwgPSBtX29iamVjdDsgY2VsbCAmJiAhY2VsbC0+aXNUYWJsZUNlbGwoKTsgY2VsbCA9
IGNlbGwtPnBhcmVudE9iamVjdCgpKSAKLSAgICB7IH0KLSAgICAKLSAgICBpZiAoIWNlbGwpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwqPihjZWxsKTsKLX0KLQotLSAoQWNjZXNzaWJpbGl0eVRhYmxlKil0YWJsZVBhcmVu
dAotewotICAgIC8vIEZpbmQgaWYgdGhlIHBhcmVudCB0YWJsZSBmb3IgdGhlIHRhYmxlIGNlbGwu
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50VGFibGUgPSAwOwotICAgIGZvciAocGFy
ZW50VGFibGUgPSBtX29iamVjdDsgcGFyZW50VGFibGUgJiYgIXBhcmVudFRhYmxlLT5pc0RhdGFU
YWJsZSgpOyBwYXJlbnRUYWJsZSA9IHBhcmVudFRhYmxlLT5wYXJlbnRPYmplY3QoKSkgCi0gICAg
eyB9Ci0gICAgCi0gICAgaWYgKCFwYXJlbnRUYWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZSo+KHBhcmVudFRhYmxl
KTsKLX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eVRpdGxlRWxlbWVudAotewotICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiB0aXRsZUVsZW1lbnQgPSBtX29iamVjdC0+dGl0bGVVSUVs
ZW1lbnQoKTsKLSAgICBpZiAodGl0bGVFbGVtZW50KQotICAgICAgICByZXR1cm4gdGl0bGVFbGVt
ZW50LT53cmFwcGVyKCk7Ci0KLSAgICByZXR1cm4gbmlsOwotfQotCi0vLyBNZWFudCB0byByZXR1
cm4gcm93IG9yIGNvbHVtbiBoZWFkZXJzIChvciBvdGhlciB0aGluZ3MgYXMgdGhlIGZ1dHVyZSBw
ZXJtaXRzKS4KLS0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5SGVhZGVyRWxlbWVudHMKLXsKLSAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4g
bmlsOwotCi0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVDZWxsID0gW3NlbGYgdGFi
bGVDZWxsUGFyZW50XTsKLSAgICBpZiAoIXRhYmxlQ2VsbCkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHRhYmxlID0gW3NlbGYgdGFibGVQYXJlbnRd
OwotICAgIGlmICghdGFibGUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gR2V0
IHRoZSByb3cgYW5kIGNvbHVtbiByYW5nZSwgc28gd2UgY2FuIHVzZSB0aGVtIHRvIGZpbmQgdGhl
IGhlYWRlcnMuCi0gICAgcGFpcjxpbnQsIGludD4gcm93UmFuZ2U7Ci0gICAgcGFpcjxpbnQsIGlu
dD4gY29sdW1uUmFuZ2U7Ci0gICAgdGFibGVDZWxsLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsK
LSAgICB0YWJsZUNlbGwtPmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUmFuZ2UpOwotICAgIAotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dIZWFk
ZXJzOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjb2x1bW5IZWFkZXJzOwotICAgIHRhYmxlLT5yb3dIZWFkZXJzKHJvd0hlYWRlcnMpOwotICAg
IHRhYmxlLT5jb2x1bW5IZWFkZXJzKGNvbHVtbkhlYWRlcnMpOwotICAgIAotICAgIE5TTXV0YWJs
ZUFycmF5ICpoZWFkZXJzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKLSAgICAKLSAgICB1bnNp
Z25lZCBjb2x1bW5SYW5nZUluZGV4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNvbHVtblJhbmdl
LmZpcnN0KTsKLSAgICBpZiAoY29sdW1uUmFuZ2VJbmRleCA8IGNvbHVtbkhlYWRlcnMuc2l6ZSgp
KSB7Ci0gICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjb2x1bW5IZWFkZXIgPSBj
b2x1bW5IZWFkZXJzW2NvbHVtblJhbmdlLmZpcnN0XTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjb2x1bW5IZWFkZXItPndyYXBwZXIoKTsKLSAgICAgICAg
aWYgKHdyYXBwZXIpCi0gICAgICAgICAgICBbaGVhZGVycyBhZGRPYmplY3Q6d3JhcHBlcl07Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgcm93UmFuZ2VJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihyb3dSYW5nZS5maXJzdCk7Ci0gICAgaWYgKHJvd1JhbmdlSW5kZXggPCByb3dIZWFkZXJzLnNp
emUoKSkgewotICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gcm93SGVhZGVyID0g
cm93SGVhZGVyc1tyb3dSYW5nZS5maXJzdF07Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyKiB3cmFwcGVyID0gcm93SGVhZGVyLT53cmFwcGVyKCk7Ci0gICAgICAgIGlmICh3cmFw
cGVyKQotICAgICAgICAgICAgW2hlYWRlcnMgYWRkT2JqZWN0OndyYXBwZXJdOwotICAgIH0KLSAg
ICAgICAgCi0gICAgcmV0dXJuIGhlYWRlcnM7Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlFbGVt
ZW50Rm9yUm93OihOU0ludGVnZXIpcm93IGFuZENvbHVtbjooTlNJbnRlZ2VyKWNvbHVtbgotewot
ICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHRhYmxlID0gW3NlbGYgdGFibGVQYXJl
bnRdOwotICAgIGlmICghdGFibGUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsKiBjZWxsID0gdGFibGUtPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1u
LCByb3cpOwotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
Y2VsbC0+d3JhcHBlcigpOwotfQotCi0tIChOU1JhbmdlKWFjY2Vzc2liaWxpdHlSb3dSYW5nZQot
ewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJl
dHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLQotICAgIGlmIChtX29iamVjdC0+aXNS
YWRpb0J1dHRvbigpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciByYWRpb0J1dHRvblNpYmxpbmdzOwotICAgICAgICBtX29iamVjdC0+
bGlua2VkVUlFbGVtZW50cyhyYWRpb0J1dHRvblNpYmxpbmdzKTsKLSAgICAgICAgaWYgKHJhZGlv
QnV0dG9uU2libGluZ3Muc2l6ZSgpIDw9IDEpCi0gICAgICAgICAgICByZXR1cm4gTlNNYWtlUmFu
Z2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
cmFkaW9CdXR0b25TaWJsaW5ncy5maW5kKG1fb2JqZWN0KSwgcmFkaW9CdXR0b25TaWJsaW5ncy5z
aXplKCkpOwotICAgIH0KLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiB0YWJsZUNl
bGwgPSBbc2VsZiB0YWJsZUNlbGxQYXJlbnRdOwotICAgIGlmICghdGFibGVDZWxsKQotICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgCi0gICAgcGFpcjxpbnQs
IGludD4gcm93UmFuZ2U7Ci0gICAgdGFibGVDZWxsLT5yb3dJbmRleFJhbmdlKHJvd1JhbmdlKTsK
LSAgICByZXR1cm4gTlNNYWtlUmFuZ2Uocm93UmFuZ2UuZmlyc3QsIHJvd1JhbmdlLnNlY29uZCk7
Ci19Ci0KLS0gKE5TUmFuZ2UpYWNjZXNzaWJpbGl0eUNvbHVtblJhbmdlCi17Ci0gICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJh
bmdlKE5TTm90Rm91bmQsIDApOwotCi0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogdGFibGVD
ZWxsID0gW3NlbGYgdGFibGVDZWxsUGFyZW50XTsKLSAgICBpZiAoIXRhYmxlQ2VsbCkKLSAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAgIAotICAgIHBhaXI8aW50
LCBpbnQ+IGNvbHVtblJhbmdlOwotICAgIHRhYmxlQ2VsbC0+Y29sdW1uSW5kZXhSYW5nZShjb2x1
bW5SYW5nZSk7Ci0gICAgcmV0dXJuIE5TTWFrZVJhbmdlKGNvbHVtblJhbmdlLmZpcnN0LCBjb2x1
bW5SYW5nZS5zZWNvbmQpOwotfQotCi0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlQbGFjZWhv
bGRlclZhbHVlCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVybiBtX29iamVjdC0+cGxhY2Vob2xkZXJW
YWx1ZSgpOwotfQotCi0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlWYWx1ZQotewotICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgLy8gY2hlY2sgaWYgdGhlIHZhbHVlIHdhcyBvdmVycmlkZW4KLSAgICBOU1N0
cmluZyAqdmFsdWUgPSBbc3VwZXIgYWNjZXNzaWJpbGl0eVZhbHVlXTsKLSAgICBpZiAodmFsdWUp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAKLSAgICBpZiAobV9vYmplY3QtPmlzQ2hlY2ti
b3hPclJhZGlvKCkpIHsKLSAgICAgICAgc3dpdGNoIChtX29iamVjdC0+Y2hlY2tib3hPclJhZGlv
VmFsdWUoKSkgewotICAgICAgICBjYXNlIEJ1dHRvblN0YXRlT2ZmOgotICAgICAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAwXTsKLSAgICAgICAgY2FzZSBC
dXR0b25TdGF0ZU9uOgotICAgICAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJWQiLCAxXTsKLSAgICAgICAgY2FzZSBCdXR0b25TdGF0ZU1peGVkOgotICAgICAgICAg
ICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAyXTsKLSAgICAgICAg
fQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAwXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb2Jq
ZWN0LT5pc0J1dHRvbigpICYmIG1fb2JqZWN0LT5pc1ByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJu
IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCAxXTsKLQotICAgIC8vIHJkYXI6Ly84
MTMxMzg4IFdlYktpdCBzaG91bGQgZXhwb3NlIHRoZSBzYW1lIGluZm8gYXMgVUlLaXQgZm9yIGl0
cyBwYXNzd29yZCBmaWVsZHMuCi0gICAgaWYgKG1fb2JqZWN0LT5pc1Bhc3N3b3JkRmllbGQoKSkg
ewotICAgICAgICBpbnQgcGFzc3dvcmRMZW5ndGggPSBtX29iamVjdC0+YWNjZXNzaWJpbGl0eVBh
c3N3b3JkRmllbGRMZW5ndGgoKTsKLSAgICAgICAgTlNNdXRhYmxlU3RyaW5nKiBzdHJpbmcgPSBb
TlNNdXRhYmxlU3RyaW5nIHN0cmluZ107Ci0gICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgcGFz
c3dvcmRMZW5ndGg7ICsraykKLSAgICAgICAgICAgIFtzdHJpbmcgYXBwZW5kU3RyaW5nOkAi4oCi
Il07Ci0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotICAgIAotICAgIC8vIEEgdGV4dCBj
b250cm9sIHNob3VsZCByZXR1cm4gaXRzIHRleHQgZGF0YSBhcyB0aGUgYXhWYWx1ZSAocGVyIGlQ
aG9uZSBBWCBBUEkpLgotICAgIGlmICghW3NlbGYgc3RyaW5nVmFsdWVTaG91bGRCZVVzZWRJbkxh
YmVsXSkKLSAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwotICAgIAotICAg
IGlmIChtX29iamVjdC0+aXNQcm9ncmVzc0luZGljYXRvcigpIHx8IG1fb2JqZWN0LT5pc1NsaWRl
cigpKSB7Ci0gICAgICAgIC8vIFByZWZlciBhIHZhbHVlRGVzY3JpcHRpb24gaWYgcHJvdmlkZWQg
YnkgdGhlIGF1dGhvciAodGhyb3VnaCBhcmlhLXZhbHVldGV4dCkuCi0gICAgICAgIFN0cmluZyB2
YWx1ZURlc2NyaXB0aW9uID0gbV9vYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKTsKLSAgICAgICAg
aWYgKCF2YWx1ZURlc2NyaXB0aW9uLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZURlc2NyaXB0aW9uOwotCi0gICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiUuMmYiLCBtX29iamVjdC0+dmFsdWVGb3JSYW5nZSgpXTsKLSAgICB9Ci0KLSAgICBpZiAo
bV9vYmplY3QtPmlzSGVhZGluZygpKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlZCIsIG1fb2JqZWN0LT5oZWFkaW5nTGV2ZWwoKV07Ci0gICAgCi0gICAgcmV0
dXJuIG5pbDsKLX0KLQotLSAoQk9PTClhY2Nlc3NpYmlsaXR5SXNDb21ib0JveAotewotICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBOTzsK
LQotICAgIHJldHVybiBtX29iamVjdC0+cm9sZVZhbHVlKCkgPT0gQ29tYm9Cb3hSb2xlOwotfQot
Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlIaW50Ci17Ci0gICAgaWYgKCFbc2VsZiBfcHJl
cGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIHJldHVy
biBtX29iamVjdC0+aGVscFRleHQoKTsKLX0KLQotLSAoTlNVUkwgKilhY2Nlc3NpYmlsaXR5VVJM
Ci17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKLSAgICBLVVJMIHVybCA9IG1fb2JqZWN0LT51cmwoKTsKLSAgICBp
ZiAodXJsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiAoTlNVUkwq
KXVybDsKLX0KLQotLSAoQ0dSZWN0KV9jb252ZXJ0SW50UmVjdFRvU2NyZWVuQ29vcmRpbmF0ZXM6
KEludFJlY3QpcmVjdAotewotICAgIGlmICghbV9vYmplY3QpCi0gICAgICAgIHJldHVybiBDR1Jl
Y3RaZXJvOwotICAgIAotICAgIENHU2l6ZSBzaXplID0gQ0dTaXplTWFrZShyZWN0LnNpemUoKS53
aWR0aCgpLCByZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgQ0dQb2ludCBwb2ludCA9IENHUG9p
bnRNYWtlKHJlY3QueCgpLCByZWN0LnkoKSk7Ci0gICAgCi0gICAgQ0dSZWN0IGZyYW1lID0gQ0dS
ZWN0TWFrZShwb2ludC54LCBwb2ludC55LCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7Ci0gICAg
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXco
KTsKLSAgICBpZiAoZnJhbWVWaWV3KSB7Ci0gICAgICAgIFdBS1ZpZXcqIHZpZXcgPSBmcmFtZVZp
ZXctPmRvY3VtZW50VmlldygpOwotICAgICAgICBmcmFtZSA9IFt2aWV3IGNvbnZlcnRSZWN0OmZy
YW1lIHRvVmlldzpuaWxdOwotICAgIH0KLSAgICAKLSAgICAvLyB3ZSBuZWVkIHRoZSB3ZWIgZG9j
dW1lbnQgdmlldyB0byBnaXZlIHVzIG91ciBmaW5hbCBzY3JlZW4gY29vcmRpbmF0ZXMKLSAgICAv
LyBiZWNhdXNlIHRoYXQgY2FuIHRha2UgYWNjb3VudCBvZiB0aGUgc2Nyb2xsZXIKLSAgICBpZCB3
ZWJEb2N1bWVudCA9IFtzZWxmIF9hY2Nlc3NpYmlsaXR5V2ViRG9jdW1lbnRWaWV3XTsKLSAgICBp
ZiAod2ViRG9jdW1lbnQpCi0gICAgICAgIGZyYW1lID0gW3dlYkRvY3VtZW50IGNvbnZlcnRSZWN0
OmZyYW1lIHRvVmlldzpuaWxdOwotICAgIAotICAgIHJldHVybiBmcmFtZTsKLX0KLQotLy8gVXNl
ZCBieSBVSUtpdCBhY2Nlc3NpYmlsaXR5IGJ1bmRsZSB0byBoZWxwIGRldGVybWluZSBkaXN0YW5j
ZSBkdXJpbmcgYSBoaXQtdGVzdC4KLS0gKENHUmVjdClhY2Nlc3NpYmlsaXR5RWxlbWVudFJlY3QK
LXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICBy
ZXR1cm4gQ0dSZWN0WmVybzsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX29iamVjdC0+
ZWxlbWVudFJlY3QoKTsKLSAgICByZXR1cm4gQ0dSZWN0TWFrZShyZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci19Ci0KLS8vIFRoZSAiY2VudGVyIHBvaW50
IiBpcyB3aGVyZSBWb2ljZU92ZXIgd2lsbCAicHJlc3MiIGFuIG9iamVjdC4gVGhpcyBtYXkgbm90
IGJlIHRoZSBhY3R1YWwKLS8vIGNlbnRlciBvZiB0aGUgYWNjZXNzaWJpbGl0eUZyYW1lCi0tIChD
R1BvaW50KWFjY2Vzc2liaWxpdHlBY3RpdmF0aW9uUG9pbnQKLXsKLSAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gQ0dQb2ludFplcm87Ci0g
ICAgCi0gICAgSW50UmVjdCByZWN0ID0gcGl4ZWxTbmFwcGVkSW50UmVjdChtX29iamVjdC0+Ym91
bmRpbmdCb3hSZWN0KCkpOwotICAgIENHUmVjdCBjZ1JlY3QgPSBbc2VsZiBfY29udmVydEludFJl
Y3RUb1NjcmVlbkNvb3JkaW5hdGVzOnJlY3RdOwotICAgIHJldHVybiBDR1BvaW50TWFrZShDR1Jl
Y3RHZXRNaWRYKGNnUmVjdCksIENHUmVjdEdldE1pZFkoY2dSZWN0KSk7Ci19Ci0KLS0gKENHUmVj
dClhY2Nlc3NpYmlsaXR5RnJhbWUKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICAKLSAgICBJbnRSZWN0
IHJlY3QgPSBwaXhlbFNuYXBwZWRJbnRSZWN0KG1fb2JqZWN0LT5lbGVtZW50UmVjdCgpKTsKLSAg
ICByZXR1cm4gW3NlbGYgX2NvbnZlcnRJbnRSZWN0VG9TY3JlZW5Db29yZGluYXRlczpyZWN0XTsK
LX0KLQotLy8gQ2hlY2tzIHdoZXRoZXIgYSBsaW5rIGNvbnRhaW5zIG9ubHkgc3RhdGljIHRleHQg
YW5kIGltYWdlcyAoYW5kIGhhcyBiZWVuIGRpdmlkZWQgdW5uYXR1cmFsbHkgYnkgPHNwYW5zPiBh
bmQgb3RoZXIgbmVmYXJpb3VzIG1lY2hhbmlzbXMpLgotLSAoQk9PTCljb250YWluc1VubmF0dXJh
bGx5U2VnbWVudGVkQ2hpbGRyZW4KLXsKLSAgICBpZiAoIW1fb2JqZWN0KQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IG1fb2JqZWN0LT5yb2xl
VmFsdWUoKTsKLSAgICBpZiAocm9sZSAhPSBMaW5rUm9sZSAmJiByb2xlICE9IFdlYkNvcmVMaW5r
Um9sZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJl
bigpOwotICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IGNoaWxkcmVuLnNpemUoKTsKLQotICAg
IC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgY2hpbGQsIHRoZW4gaXQgZG9lc24ndCBoYXZlIHNlZ21l
bnRlZCBjaGlsZHJlbi4gCi0gICAgaWYgKGNoaWxkcmVuU2l6ZSA9PSAxKQotICAgICAgICByZXR1
cm4gTk87Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuU2l6ZTsg
KytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBjaGlsZHJlbltpXS0+cm9s
ZVZhbHVlKCk7Ci0gICAgICAgIGlmIChyb2xlICE9IFN0YXRpY1RleHRSb2xlICYmIHJvbGUgIT0g
SW1hZ2VSb2xlICYmIHJvbGUgIT0gR3JvdXBSb2xlKQotICAgICAgICAgICAgcmV0dXJuIE5POwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5Q29u
dGFpbmVyCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAvLyBBcyBsb25nIGFzIHRoZXJlJ3MgYSBwYXJl
bnQgd3JhcHBlciwgdGhhdCdzIHRoZSBjb3JyZWN0IGNoYWluIHRvIGNsaW1iLgotICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIHBhcmVudCA9IG1fb2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQo
KTsgCi0gICAgaWYgKHBhcmVudCkKLSAgICAgICAgcmV0dXJuIHBhcmVudC0+d3JhcHBlcigpOwot
Ci0gICAgLy8gVGhlIG9ubHkgb2JqZWN0IHdpdGhvdXQgYSBwYXJlbnQgd3JhcHBlciBzaG91bGQg
YmUgYSBzY3JvbGwgdmlldy4KLSAgICBBU1NFUlQobV9vYmplY3QtPmlzQWNjZXNzaWJpbGl0eVNj
cm9sbFZpZXcoKSk7Ci0gICAgCi0gICAgLy8gVmVyaWZ5IHRoaXMgaXMgdGhlIHRvcCBkb2N1bWVu
dC4gSWYgbm90LCB3ZSBtaWdodCBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHBsYXRmb3JtIHdpZGdl
dC4KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fb2JqZWN0LT5kb2N1bWVudEZyYW1lVmll
dygpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAg
IGlmIChkb2N1bWVudCAmJiBmcmFtZVZpZXcgJiYgZG9jdW1lbnQgIT0gZG9jdW1lbnQtPnRvcERv
Y3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmcmFtZVZpZXctPnBsYXRmb3JtV2lkZ2V0KCk7Ci0g
ICAgCi0gICAgLy8gVGhlIHRvcCBzY3JvbGwgdmlldydzIHBhcmVudCBpcyB0aGUgd2ViIGRvY3Vt
ZW50IHZpZXcuCi0gICAgcmV0dXJuIFtzZWxmIF9hY2Nlc3NpYmlsaXR5V2ViRG9jdW1lbnRWaWV3
XTsKLX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKLXsKLSAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRPYmogPSBtX29iamVjdC0+Zm9j
dXNlZFVJRWxlbWVudCgpOwotICAgIAotICAgIGlmICghZm9jdXNlZE9iaikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gZm9jdXNlZE9iai0+d3JhcHBlcigpOwotfQotCi0t
IChpZClfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50VmlldwotewotICAgIGlmICghW3NlbGYgX3By
ZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBU
aGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgY3J1Y2lhbCB0YXNrIG9mIGNvbm5lY3RpbmcgdG8gdGhl
IFVJV2ViRG9jdW1lbnRWaWV3LgotICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIGNvcnJlY3RseSBj
YWxjdWxhdGUgdGhlIHNjcmVlbiBwb3NpdGlvbiBvZiB0aGUgQVggb2JqZWN0LgotICAgIHN0YXRp
YyBDbGFzcyB3ZWJWaWV3Q2xhc3MgPSBuaWw7Ci0gICAgaWYgKCF3ZWJWaWV3Q2xhc3MpCi0gICAg
ICAgIHdlYlZpZXdDbGFzcyA9IE5TQ2xhc3NGcm9tU3RyaW5nKEAiV2ViVmlldyIpOwotCi0gICAg
aWYgKCF3ZWJWaWV3Q2xhc3MpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBtX29iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsKLQotICAgIGlm
ICghZnJhbWVWaWV3KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIElmIHRoaXMg
aXMgdGhlIHRvcCBsZXZlbCBmcmFtZSwgdGhlIFVJV2ViRG9jdW1lbnRWaWV3IHNob3VsZCBiZSBy
ZXR1cm5lZC4KLSAgICBpZCBwYXJlbnRWaWV3ID0gZnJhbWVWaWV3LT5kb2N1bWVudFZpZXcoKTsK
LSAgICB3aGlsZSAocGFyZW50VmlldyAmJiAhW3BhcmVudFZpZXcgaXNLaW5kT2ZDbGFzczp3ZWJW
aWV3Q2xhc3NdKQotICAgICAgICBwYXJlbnRWaWV3ID0gW3BhcmVudFZpZXcgc3VwZXJ2aWV3XTsK
LSAgICAKLSAgICAvLyBUaGUgcGFyZW50VmlldyBzaG91bGQgaGF2ZSBhbiBhY2Nlc3NpYmlsaXR5
Q29udGFpbmVyLCBpZiB0aGUgVUlLaXQgYWNjZXNzaWJpbGl0eSBidW5kbGUgd2FzIGxvYWRlZC4g
Ci0gICAgLy8gVGhlIGV4Y2VwdGlvbiBpcyBEUlQsIHdoaWNoIHRlc3RzIGFjY2Vzc2liaWxpdHkg
d2l0aG91dCB0aGUgZW50aXJlIHN5c3RlbSB0dXJuaW5nIGFjY2Vzc2liaWxpdHkgb24uIEhlbmNl
LAotICAgIC8vIHRoaXMgY2hlY2sgc2hvdWxkIGJlIHZhbGlkIGZvciBldmVyeXRoaW5nIGV4Y2Vw
dCBEUlQuCi0gICAgQVNTRVJUKFtwYXJlbnRWaWV3IGFjY2Vzc2liaWxpdHlDb250YWluZXJdIHx8
IGFwcGxpY2F0aW9uSXNEdW1wUmVuZGVyVHJlZSgpKTsKLSAgICAKLSAgICByZXR1cm4gW3BhcmVu
dFZpZXcgYWNjZXNzaWJpbGl0eUNvbnRhaW5lcl07Ci19Ci0KLS0gKE5TQXJyYXkgKilfYWNjZXNz
aWJpbGl0eU5leHRFbGVtZW50c1dpdGhDb3VudDooVUludDMyKWNvdW50Ci17ICAgIAotICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgcmV0dXJuIFtbc2VsZiBfYWNjZXNzaWJpbGl0eVdlYkRvY3VtZW50Vmlld10g
X2FjY2Vzc2liaWxpdHlOZXh0RWxlbWVudHNXaXRoQ291bnQ6Y291bnRdOwotfQotCi0tIChOU0Fy
cmF5ICopX2FjY2Vzc2liaWxpdHlQcmV2aW91c0VsZW1lbnRzV2l0aENvdW50OihVSW50MzIpY291
bnQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIHJldHVybiBbW3NlbGYgX2FjY2Vzc2liaWxpdHlXZWJE
b2N1bWVudFZpZXddIF9hY2Nlc3NpYmlsaXR5UHJldmlvdXNFbGVtZW50c1dpdGhDb3VudDpjb3Vu
dF07Ci19Ci0KLS0gKEJPT0wpYWNjZXNzaWJpbGl0eVJlcXVpcmVkCi17Ci0gICAgaWYgKCFbc2Vs
ZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAg
cmV0dXJuIG1fb2JqZWN0LT5pc1JlcXVpcmVkKCk7Ci19Ci0KLS0gKE5TQXJyYXkgKilhY2Nlc3Np
YmlsaXR5Rmxvd1RvRWxlbWVudHMKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbjsKLSAgICBtX29iamVj
dC0+YXJpYUZsb3dUb0VsZW1lbnRzKGNoaWxkcmVuKTsKLSAgICAKLSAgICB1bnNpZ25lZCBsZW5n
dGggPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkqIGFycmF5ID0gW05TTXV0
YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Omxlbmd0aF07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiB3cmFwcGVyID0gY2hpbGRyZW5baV0tPndyYXBwZXIoKTsKLSAgICAgICAgQVNTRVJUKHdy
YXBwZXIpOwotICAgICAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICBpZiAoY2hpbGRyZW5baV0tPmlzQXR0YWNobWVudCgpICYmIFt3cmFwcGVyIGF0dGFj
aG1lbnRWaWV3XSkKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6W3dyYXBwZXIgYXR0YWNo
bWVudFZpZXddXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDp3
cmFwcGVyXTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi0tIChpZClhY2Nlc3NpYmls
aXR5TGlua2VkRWxlbWVudAotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5
Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgLy8gSWYgdGhpcyBzdGF0aWMg
dGV4dCBpbnNpZGUgb2YgYSBsaW5rLCBpdCBzaG91bGQgdXNlIGl0cyBwYXJlbnQncyBsaW5rZWQg
ZWxlbWVudC4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBlbGVtZW50ID0gbV9vYmplY3Q7Ci0g
ICAgaWYgKG1fb2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBTdGF0aWNUZXh0Um9sZSAmJiBtX29iamVj
dC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPmlzTGluaygpKQotICAgICAgICBlbGVtZW50ID0g
bV9vYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIAotICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbjsKLSAgICBlbGVt
ZW50LT5saW5rZWRVSUVsZW1lbnRzKGNoaWxkcmVuKTsKLSAgICBpZiAoY2hpbGRyZW4uc2l6ZSgp
ID09IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIGNoaWxkcmVuWzBd
LT53cmFwcGVyKCk7Ci19Ci0KLQotLSAoQk9PTClpc0F0dGFjaG1lbnQKLXsKLSAgICBpZiAoIW1f
b2JqZWN0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5p
c0F0dGFjaG1lbnQoKTsKLX0KLQotLSAodm9pZClfYWNjZXNzaWJpbGl0eUFjdGl2YXRlCi17Ci0g
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9vYmplY3QtPnByZXNzKCk7Ci19Ci0KLS0gKFdBS1ZpZXcgKilhdHRhY2htZW50
VmlldwotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0KLSAgICBBU1NFUlQoW3NlbGYgaXNBdHRhY2htZW50XSk7Ci0gICAg
V2lkZ2V0KiB3aWRnZXQgPSBtX29iamVjdC0+d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKTsKLSAg
ICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gd2lkZ2V0LT5w
bGF0Zm9ybVdpZGdldCgpOyAgICAKLX0KLQotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJG
b3JWaWV3KFdBS1ZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCFbdmlldyBjb25mb3Jtc1RvUHJvdG9j
b2w6QHByb3RvY29sKFdlYkNvcmVGcmFtZVZpZXcpXSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Ci0gICAgV0FLVmlldzxXZWJDb3JlRnJhbWVWaWV3PiogZnJhbWVWaWV3ID0gKFdBS1ZpZXc8V2Vi
Q29yZUZyYW1lVmlldz4qKXZpZXc7Ci0gICAgRnJhbWUqIGZyYW1lID0gW2ZyYW1lVmlldyBfd2Vi
X2ZyYW1lXTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBO
b2RlKiBub2RlID0gZnJhbWUtPmRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpOwotICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVy
KCk7Ci19Ci0KLS0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzooaWQpc3Vidmll
dwoteyAgIAotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJlckZvclZpZXcoc3Vi
dmlldyk7Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSByZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZW5kZXJlcik7Ci0gICAgaWYgKG9iaikKLSAgICAgICAg
cmV0dXJuIG9iai0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCktPndyYXBwZXIoKTsKLSAgICByZXR1
cm4gbmlsOwotfQotCi0tICh2b2lkKXBvc3RGb2N1c0NoYW5nZU5vdGlmaWNhdGlvbgotewotICAg
IC8vIFRoZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9z
dCBhcHByb3ByaWF0ZSBub3RpZmljYXRpb24uCi19Ci0KLS0gKHZvaWQpcG9zdFNlbGVjdGVkVGV4
dENoYW5nZU5vdGlmaWNhdGlvbgotewotICAgIC8vIFRoZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IHdy
YXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0ZSBub3RpZmljYXRpb24uICAg
IAotfQotCi0tICh2b2lkKXBvc3RMYXlvdXRDaGFuZ2VOb3RpZmljYXRpb24KLXsKLSAgICAvLyBU
aGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBw
cm9wcmlhdGUgbm90aWZpY2F0aW9uLiAgICAgICAgCi19Ci0KLS0gKHZvaWQpcG9zdExpdmVSZWdp
b25DaGFuZ2VOb3RpZmljYXRpb24KLXsKLSAgICAvLyBUaGUgVUlLaXQgYWNjZXNzaWJpbGl0eSB3
cmFwcGVyIHdpbGwgb3ZlcnJpZGUgYW5kIHBvc3QgYXBwcm9wcmlhdGUgbm90aWZpY2F0aW9uLiAg
ICAKLX0KLQotLSAodm9pZClwb3N0TG9hZENvbXBsZXRlTm90aWZpY2F0aW9uCi17Ci0gICAgLy8g
VGhlIFVJS2l0IGFjY2Vzc2liaWxpdHkgd3JhcHBlciB3aWxsIG92ZXJyaWRlIGFuZCBwb3N0IGFw
cHJvcHJpYXRlIG5vdGlmaWNhdGlvbi4gICAgCi19Ci0KLS0gKHZvaWQpcG9zdENoaWxkcmVuQ2hh
bmdlZE5vdGlmaWNhdGlvbgotewotICAgIC8vIFRoZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IHdyYXBw
ZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9zdCBhcHByb3ByaWF0ZSBub3RpZmljYXRpb24uICAgIAot
fQotCi0tICh2b2lkKXBvc3RJbnZhbGlkU3RhdHVzQ2hhbmdlZE5vdGlmaWNhdGlvbgotewotICAg
IC8vIFRoZSBVSUtpdCBhY2Nlc3NpYmlsaXR5IHdyYXBwZXIgd2lsbCBvdmVycmlkZSBhbmQgcG9z
dCBhcHByb3ByaWF0ZSBub3RpZmljYXRpb24uICAgICAgICAKLX0KLQotLSAodm9pZClhY2Nlc3Np
YmlsaXR5RWxlbWVudERpZEJlY29tZUZvY3VzZWQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhlIGZv
Y3VzZWQgVm9pY2VPdmVyIGVsZW1lbnQgbWlnaHQgYmUgdGhlIHRleHQgaW5zaWRlIGEgbGluay4K
LSAgICAvLyBJbiB0aG9zZSBjYXNlcyB3ZSBzaG91bGQgZm9jdXMgb24gdGhlIGxpbmsgaXRzZWxm
LgotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gbV9vYmplY3Q7IG9iamVj
dCAhPSBuaWw7IG9iamVjdCA9IG9iamVjdC0+cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYg
KG9iamVjdC0+cm9sZVZhbHVlKCkgPT0gV2ViQXJlYVJvbGUpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBpZiAob2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKSB7Ci0gICAgICAg
ICAgICBvYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5TW9kaWZ5U2VsZWN0aW9uOihU
ZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHkgaW5jcmVhc2U6KEJPT0wpaW5jcmVhc2UKLXsKLSAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgRnJhbWVTZWxlY3Rpb24qIGZyYW1lU2VsZWN0aW9uID0gbV9vYmplY3QtPmRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9vYmplY3QtPnNlbGVjdGlvbigpOwotICAgIFZpc2libGVQb3NpdGlvblJhbmdl
IHJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlKCk7Ci0gICAgCi0gICAgLy8g
QmVmb3JlIGEgc2VsZWN0aW9uIHdpdGggbGVuZ3RoIGV4aXN0cywgdGhlIGN1cnNvciBwb3NpdGlv
biBuZWVkcyB0byBtb3ZlIHRvIHRoZSByaWdodCBzdGFydGluZyBwbGFjZS4KLSAgICAvLyBUaGF0
IHNob3VsZCBiZSB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZWxlbWVudCAocmFuZ2Uuc3RhcnQpLiBI
b3dldmVyLCBpZiB0aGUgY3Vyc29yIGlzIGFscmVhZHkgd2l0aGluIHRoZSAKLSAgICAvLyByYW5n
ZSBvZiB0aGlzIGVsZW1lbnQgKHRoZSBjdXJzb3IgaXMgcmVwcmVzZW50ZWQgYnkgc2VsZWN0aW9u
KSwgdGhlbiB0aGUgY3Vyc29yIGRvZXMgbm90IG5lZWQgdG8gbW92ZS4KLSAgICBpZiAoZnJhbWVT
ZWxlY3Rpb24tPmlzTm9uZSgpICYmIChzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkgPCByYW5nZS5z
dGFydCB8fCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpID4gcmFuZ2UuZW5kKSkKLSAgICAgICAgZnJh
bWVTZWxlY3Rpb24tPm1vdmVUbyhyYW5nZS5zdGFydCwgVXNlclRyaWdnZXJlZCk7Ci0gICAgCi0g
ICAgZnJhbWVTZWxlY3Rpb24tPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVu
ZCwgKGluY3JlYXNlKSA/IERpcmVjdGlvblJpZ2h0IDogRGlyZWN0aW9uTGVmdCwgZ3JhbnVsYXJp
dHksIFVzZXJUcmlnZ2VyZWQpOwotfQotCi0tICh2b2lkKWFjY2Vzc2liaWxpdHlJbmNyZWFzZVNl
bGVjdGlvbjooVGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5Ci17Ci0gICAgW3NlbGYgYWNjZXNz
aWJpbGl0eU1vZGlmeVNlbGVjdGlvbjpncmFudWxhcml0eSBpbmNyZWFzZTpZRVNdOwotfQotCi0t
ICh2b2lkKWFjY2Vzc2liaWxpdHlEZWNyZWFzZVNlbGVjdGlvbjooVGV4dEdyYW51bGFyaXR5KWdy
YW51bGFyaXR5Ci17Ci0gICAgW3NlbGYgYWNjZXNzaWJpbGl0eU1vZGlmeVNlbGVjdGlvbjpncmFu
dWxhcml0eSBpbmNyZWFzZTpOT107Ci19Ci0KLS0gKHZvaWQpYWNjZXNzaWJpbGl0eU1vdmVTZWxl
Y3Rpb25Ub01hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJrZXIKLXsKLSAg
ICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbiA9IFttYXJrZXIgdmlz
aWJsZVBvc2l0aW9uXTsKLSAgICBpZiAodmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBtX29iamVj
dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Ci0gICAgZnJhbWVTZWxlY3Rpb24t
Pm1vdmVUbyh2aXNpYmxlUG9zaXRpb24sIFVzZXJUcmlnZ2VyZWQpOwotfQotCi0tICh2b2lkKWFj
Y2Vzc2liaWxpdHlJbmNyZW1lbnQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29iamVjdC0+aW5jcmVtZW50KCk7
Ci19Ci0KLS0gKHZvaWQpYWNjZXNzaWJpbGl0eURlY3JlbWVudAotewotICAgIGlmICghW3NlbGYg
X3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb2Jq
ZWN0LT5kZWNyZW1lbnQoKTsKLX0KLQotI3ByYWdtYSBtYXJrIEFjY2Vzc2liaWxpdHkgVGV4dCBN
YXJrZXIgSGFuZGxlcnMKLQotLSAoQk9PTClfYWRkQWNjZXNzaWJpbGl0eU9iamVjdDooQWNjZXNz
aWJpbGl0eU9iamVjdCopYXhPYmplY3QgdG9UZXh0TWFya2VyQXJyYXk6KE5TTXV0YWJsZUFycmF5
ICopYXJyYXkKLXsKLSAgICBpZiAoIWF4T2JqZWN0KQotICAgICAgICByZXR1cm4gTk87Ci0gICAg
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBheE9iamVjdC0+d3Jh
cHBlcigpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIE5POwotCi0gICAgLy8g
RG9uJ3QgYWRkIHRoZSBzYW1lIG9iamVjdCB0d2ljZSwgYnV0IHNpbmNlIHRoaXMgaGFzIGFscmVh
ZHkgYmVlbiBhZGRlZCwgd2Ugc2hvdWxkIHJldHVybgotICAgIC8vIFlFUyBiZWNhdXNlIHdlIHdh
bnQgdG8gaW5mb3JtIHRoYXQgaXQncyBpbiB0aGUgYXJyYXkKLSAgICBpZiAoW2FycmF5IGNvbnRh
aW5zT2JqZWN0OndyYXBwZXJdKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIC8vIEV4
cGxpY2l0eSBzZXQgdGhhdCB0aGlzIGlzIG5vdyBhbiBlbGVtZW50IChpbiBjYXNlIG90aGVyIGxv
Z2ljIHRyaWVzIHRvIG92ZXJyaWRlKS4KLSAgICBbd3JhcHBlciBzZXRWYWx1ZTpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6QCJpc0FjY2Vzc2liaWxpdHlFbGVtZW50Il07ICAg
IAotICAgIFthcnJheSBhZGRPYmplY3Q6d3JhcHBlcl07Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQot
LSAoTlNTdHJpbmcgKilzdHJpbmdGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMKLXsK
LSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIGlmIChbbWFya2VycyBjb3VudF0gIT0gMikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJr
ZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjBdOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiBlbmRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjFdOwotICAgIGlmICgh
W3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNs
YXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAvLyBleHRyYWN0
IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3NpdGlvbgotICAgIFZpc2libGVQb3NpdGlvbiBz
dGFydFZpc2libGVQb3NpdGlvbiA9IFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAg
IGlmIChzdGFydFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uID0gW2VuZE1hcmtl
ciB2aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxl
UG9zUmFuZ2UgPSBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFZpc2libGVQb3NpdGlvbiwgZW5k
VmlzaWJsZVBvc2l0aW9uKTsKLSAgICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7Ci19Ci0KLXN0YXRpYyBpbnQgYmxvY2txdW90
ZUxldmVsKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgaW50IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShibG9ja3F1b3RlVGFnKSkKLSAgICAg
ICAgICAgIHJlc3VsdCArPSAxOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEJsb2NrcXVvdGVMZXZlbChOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBO
U1JhbmdlIHJhbmdlKQotewotICAgIGludCBxdW90ZUxldmVsID0gYmxvY2txdW90ZUxldmVsKHJl
bmRlcmVyKTsKLSAgICAKLSAgICBpZiAocXVvdGVMZXZlbCkKLSAgICAgICAgW2F0dHJTdHJpbmcg
YWRkQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuQmxvY2txdW90ZUxldmVsIHZhbHVlOltO
U051bWJlciBudW1iZXJXaXRoSW50OnF1b3RlTGV2ZWxdIHJhbmdlOnJhbmdlXTsKLSAgICBlbHNl
Ci0gICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tl
bkJsb2NrcXVvdGVMZXZlbCByYW5nZTpyYW5nZV07Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgaWYg
KCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudE9iamVjdCA9IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHJlbmRlcmVyLT5wYXJlbnQoKSk7Ci0gICAgaW50IHBhcmVudEhlYWRpbmdM
ZXZlbCA9IHBhcmVudE9iamVjdC0+aGVhZGluZ0xldmVsKCk7Ci0gICAgCi0gICAgaWYgKHBhcmVu
dEhlYWRpbmdMZXZlbCkKLSAgICAgICAgW2F0dHJTdHJpbmcgYWRkQXR0cmlidXRlOlVJQWNjZXNz
aWJpbGl0eVRva2VuSGVhZGluZ0xldmVsIHZhbHVlOltOU051bWJlciBudW1iZXJXaXRoSW50OnBh
cmVudEhlYWRpbmdMZXZlbF0gcmFuZ2U6cmFuZ2VdOwotICAgIGVsc2UKLSAgICAgICAgW2F0dHJT
dHJpbmcgcmVtb3ZlQXR0cmlidXRlOlVJQWNjZXNzaWJpbGl0eVRva2VuSGVhZGluZ0xldmVsIHJh
bmdlOnJhbmdlXTsKLX0KLQotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRGb250KE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIEdTRm9udFJlZiBmb250LCBOU1Jh
bmdlIHJhbmdlKQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGNvbnN0IGNoYXIqIG5hbWVDU3RyID0gR1NGb250R2V0RnVsbE5hbWUoZm9udCk7Ci0gICAgY29u
c3QgY2hhciogZmFtaWx5Q1N0ciA9IEdTRm9udEdldEZhbWlseU5hbWUoZm9udCk7Ci0gICAgTlNO
dW1iZXIqIHNpemUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OkdTRm9udEdldFNpemUoZm9u
dCldOwotICAgIE5TTnVtYmVyKiBib2xkID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOkdTRm9u
dElzQm9sZChmb250KV07Ci0gICAgR1NGb250VHJhaXRNYXNrIHRyYWl0cyA9IEdTRm9udEdldFRy
YWl0cyhmb250KTsKLSAgICBpZiAobmFtZUNTdHIpCi0gICAgICAgIFthdHRyU3RyaW5nIGFkZEF0
dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnROYW1lIHZhbHVlOltOU1N0cmluZyBzdHJp
bmdXaXRoVVRGOFN0cmluZzpuYW1lQ1N0cl0gcmFuZ2U6cmFuZ2VdOwotICAgIGlmIChmYW1pbHlD
U3RyKQotICAgICAgICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9r
ZW5Gb250RmFtaWx5IHZhbHVlOltOU1N0cmluZyBzdHJpbmdXaXRoVVRGOFN0cmluZzpmYW1pbHlD
U3RyXSByYW5nZTpyYW5nZV07Ci0gICAgaWYgKFtzaXplIGJvb2xWYWx1ZV0pCi0gICAgICAgIFth
dHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpVSUFjY2Vzc2liaWxpdHlUb2tlbkZvbnRTaXplIHZhbHVl
OnNpemUgcmFuZ2U6cmFuZ2VdOwotICAgIGlmIChbYm9sZCBib29sVmFsdWVdIHx8ICh0cmFpdHMg
JiBHU0JvbGRGb250TWFzaykpCi0gICAgICAgIFthdHRyU3RyaW5nIGFkZEF0dHJpYnV0ZTpVSUFj
Y2Vzc2liaWxpdHlUb2tlbkJvbGQgdmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10g
cmFuZ2U6cmFuZ2VdOwotICAgIGlmICh0cmFpdHMgJiBHU0l0YWxpY0ZvbnRNYXNrKQotICAgICAg
ICBbYXR0clN0cmluZyBhZGRBdHRyaWJ1dGU6VUlBY2Nlc3NpYmlsaXR5VG9rZW5JdGFsaWMgdmFs
dWU6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gcmFuZ2U6cmFuZ2VdOwotCi19Ci0KLXN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsIE5TU3RyaW5nKiBhdHRyaWJ1dGUsIE5TTnVtYmVyKiBudW1iZXIs
IE5TUmFuZ2UgcmFuZ2UpCi17Ci0gICAgaWYgKG51bWJlcikKLSAgICAgICAgW2F0dHJTdHJpbmcg
YWRkQXR0cmlidXRlOmF0dHJpYnV0ZSB2YWx1ZTpudW1iZXIgcmFuZ2U6cmFuZ2VdOwotICAgIGVs
c2UKLSAgICAgICAgW2F0dHJTdHJpbmcgcmVtb3ZlQXR0cmlidXRlOmF0dHJpYnV0ZSByYW5nZTpy
YW5nZV07Ci19Ci0KLXN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
TlNSYW5nZSByYW5nZSkKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5
bGUoKTsKLSAgICAKLSAgICAvLyBzZXQgYmFzaWMgZm9udCBpbmZvCi0gICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRGb250KGF0dHJTdHJpbmcsIHN0eWxlLT5mb250KCkucHJpbWFyeUZvbnQoKS0+Z2V0
R1NGb250KCksIHJhbmdlKTsKLSAgICAgICAgICAgICAgICAKLSAgICBpbnQgZGVjb3IgPSBzdHls
ZS0+dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLSAgICBpZiAoKGRlY29yICYgKFVOREVSTElO
RSB8IExJTkVfVEhST1VHSCkpICE9IDApIHsKLSAgICAgICAgLy8gZmluZCBjb2xvcnMgdXNpbmcg
cXVpcmsgbW9kZSBhcHByb2FjaCAoc3RyaWN0IG1vZGUgd291bGQgdXNlIGN1cnJlbnQKLSAgICAg
ICAgLy8gY29sb3IgZm9yIGFsbCBidXQgdGhlIHJvb3QgbGluZSBib3gsIHdoaWNoIHdvdWxkIHVz
ZSBnZXRUZXh0RGVjb3JhdGlvbkNvbG9ycykKLSAgICAgICAgQ29sb3IgdW5kZXJsaW5lLCBvdmVy
bGluZSwgbGluZXRocm91Z2g7Ci0gICAgICAgIHJlbmRlcmVyLT5nZXRUZXh0RGVjb3JhdGlvbkNv
bG9ycyhkZWNvciwgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRocm91Z2gpOwotICAgICAgICAK
LSAgICAgICAgaWYgKGRlY29yICYgVU5ERVJMSU5FKQotICAgICAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgVUlBY2Nlc3NpYmlsaXR5VG9rZW5VbmRlcmxpbmUs
IFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCByYW5nZSk7Ci0gICAgfQotfQotCi1zdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcqIGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxl
bmd0aCkKLXsKLSAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0Ci0gICAgaWYgKCFub2RlLT5yZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gZWFzaWVyIHRvIGNhbGN1bGF0
ZSB0aGUgcmFuZ2UgYmVmb3JlIGFwcGVuZGluZyB0aGUgc3RyaW5nCi0gICAgTlNSYW5nZSBhdHRy
U3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBsZW5ndGgpOwot
ICAgIAotICAgIC8vIGFwcGVuZCB0aGUgc3RyaW5nIGZyb20gdGhpcyBub2RlCi0gICAgW1thdHRy
U3RyaW5nIG11dGFibGVTdHJpbmddIGFwcGVuZFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aENo
YXJhY3RlcnM6Y2hhcnMgbGVuZ3RoOmxlbmd0aF1dOwotICAgIAotICAgIC8vIHNldCBuZXcgYXR0
cmlidXRlcwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0U3R5bGUoYXR0clN0cmluZywgbm9kZS0+
cmVuZGVyZXIoKSwgYXR0clN0cmluZ1JhbmdlKTsKLSAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldEhl
YWRpbmdMZXZlbChhdHRyU3RyaW5nLCBub2RlLT5yZW5kZXJlcigpLCBhdHRyU3RyaW5nUmFuZ2Up
OwotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKGF0dHJTdHJpbmcsIG5v
ZGUtPnJlbmRlcmVyKCksIGF0dHJTdHJpbmdSYW5nZSk7ICAgIAotfQotCi0KLS8vIFRoaXMgbWV0
aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCBhY2Nlc3Np
YmlsaXR5IGVsZW1lbnRzIHRoYXQgCi0vLyByZXByZXNlbnQgdGhlIG9iamVjdHMgb24gb25lIGxp
bmUgb2YgcmVuZGVyZWQgd2ViIGNvbnRlbnQuIFRoZSBhcnJheSBvZiBtYXJrZXJzIHNlbnQKLS8v
IGluIHNob3VsZCBiZSBvcmRlcmVkIGFuZCBjb250YWluIG9ubHkgYSBzdGFydCBhbmQgZW5kIG1h
cmtlci4KLS0gKE5TQXJyYXkgKilhcnJheU9mVGV4dEZvclRleHRNYXJrZXJzOihOU0FycmF5ICop
bWFya2VycyBhdHRyaWJ1dGVkOihCT09MKWF0dHJpYnV0ZWQKLXsKLSAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgaWYg
KFttYXJrZXJzIGNvdW50XSAhPSAyKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFdl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFttYXJrZXJzIG9iamVjdEF0
SW5kZXg6MF07Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFtt
YXJrZXJzIG9iamVjdEF0SW5kZXg6MV07Ci0gICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZD
bGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBp
c0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIC8vIGV4dHJhY3QgdGhlIHN0YXJ0IGFuZCBlbmQgVmlz
aWJsZVBvc2l0aW9uCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uID0g
W3N0YXJ0TWFya2VyIHZpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0
aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3Np
dGlvbiBlbmRWaXNpYmxlUG9zaXRpb24gPSBbZW5kTWFya2VyIHZpc2libGVQb3NpdGlvbl07Ci0g
ICAgaWYgKGVuZFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICAvLyBpdGVyYXRlIG92ZXIgdGhlIHJhbmdlIHRvIGJ1aWxkIHRoZSBBWCBhdHRy
aWJ1dGVkIHN0cmluZwotICAgIE5TTXV0YWJsZUFycmF5KiBhcnJheSA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdOwotICAgIFRleHRJdGVyYXRvciBpdChtYWtlUmFuZ2Uoc3RhcnRWaXNp
YmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlvbikuZ2V0KCkpOwotICAgIGZvciAoOyAhaXQu
YXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7Ci0gICAgICAgIC8vIGxvY2F0ZSB0aGUgbm9kZSBhbmQg
c3RhcnRpbmcgb2Zmc2V0IGZvciB0aGlzIHJhbmdlCi0gICAgICAgIGludCBleGNlcHRpb24gPSAw
OwotICAgICAgICBOb2RlKiBub2RlID0gaXQucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZXhjZXB0
aW9uKTsKLSAgICAgICAgQVNTRVJUKG5vZGUgPT0gaXQucmFuZ2UoKS0+ZW5kQ29udGFpbmVyKGV4
Y2VwdGlvbikpOwotICAgICAgICBpbnQgb2Zmc2V0ID0gaXQucmFuZ2UoKS0+c3RhcnRPZmZzZXQo
ZXhjZXB0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vIG5vbi16ZXJvIGxlbmd0aCBtZWFucyB0
ZXh0dWFsIG5vZGUsIHplcm8gbGVuZ3RoIG1lYW5zIHJlcGxhY2VkIG5vZGUgKEFLQSAiYXR0YWNo
bWVudHMiIGluIEFYKQotICAgICAgICBpZiAoaXQubGVuZ3RoKCkgIT0gMCkgewotICAgICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYg
dGhpcyBpcyByZXByZXNlbnRlZCBieSBhIGxpbmsuCi0gICAgICAgICAgICAgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogbGlua09iamVjdCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1l
bnRGb3JOb2RlKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChbc2VsZiBfYWRkQWNjZXNzaWJp
bGl0eU9iamVjdDpsaW5rT2JqZWN0IHRvVGV4dE1hcmtlckFycmF5OmFycmF5XSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gTmV4dCBjaGVjayBpZiB0aGlzIHJlZ2lvbiBpcyByZXByZXNlbnRlZCBieSBhIGhlYWRpbmcu
Ci0gICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaGVhZGluZ09iamVjdCA9IEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmhlYWRpbmdFbGVtZW50Rm9yTm9kZShub2RlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoW3NlbGYgX2FkZEFjY2Vzc2liaWxpdHlPYmplY3Q6aGVhZGluZ09iamVjdCB0
b1RleHRNYXJrZXJBcnJheTphcnJheV0pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9
IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihub2RlLCBWaXNpYmxl
UG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7IAotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghbGlzdE1hcmtlclRleHQuaXNFbXB0eSgpKSAKLSAgICAg
ICAgICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJh
Y3RlcnM6bGlzdE1hcmtlclRleHQuY2hhcmFjdGVycygpIGxlbmd0aDpsaXN0TWFya2VyVGV4dC5s
ZW5ndGgoKV1dOwotICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBub3QgYW4gZWxlbWVudCBy
ZXByZXNlbnRhdGlvbiwgc28ganVzdCByZXR1cm4gdGhlIHRleHQuCi0gICAgICAgICAgICAgICAg
W2FycmF5IGFkZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6aXQuY2hhcmFj
dGVycygpIGxlbmd0aDppdC5sZW5ndGgoKV1dOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4
dCA9IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihub2RlLCBWaXNp
YmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7IAotCi0gICAgICAgICAg
ICAgICAgaWYgKCFsaXN0TWFya2VyVGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZyA9IFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICAgICAgICAgIEFYQXR0cmli
dXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgbGlzdE1hcmtlclRleHQuY2hh
cmFjdGVycygpLCBsaXN0TWFya2VyVGV4dC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IFthcnJheSBhZGRPYmplY3Q6YXR0clN0cmluZ107Ci0gICAgICAgICAgICAgICAgICAgIFthdHRy
U3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nID0gW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKLSAgICAgICAgICAgICAgICBB
WEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGl0LmNoYXJhY3Rl
cnMoKSwgaXQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6YXR0
clN0cmluZ107Ci0gICAgICAgICAgICAgICAgW2F0dHJTdHJpbmcgcmVsZWFzZV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUg
PSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChyZXBsYWNlZE5vZGUp
IHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBtX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShyZXBsYWNlZE5vZGUtPnJlbmRlcmVyKCkpOwot
ICAgICAgICAgICAgICAgIGlmIChvYmogJiYgIW9iai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
KQotICAgICAgICAgICAgICAgICAgICBbc2VsZiBfYWRkQWNjZXNzaWJpbGl0eU9iamVjdDpvYmog
dG9UZXh0TWFya2VyQXJyYXk6YXJyYXldOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBbYXJyYXkgYXV0b3JlbGVhc2VdOwotfQotCi0tIChOU1Jhbmdl
KV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKXJhbmdlCi17Ci0gICAgaWYgKCFyYW5nZSB8fCAh
cmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKLSAgICAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9j
dW1lbnQoKTsKLSAgICBGcmFtZVNlbGVjdGlvbiogZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+
ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Ci0gICAgCi0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9
IGZyYW1lU2VsZWN0aW9uLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgRWxlbWVudCogc2Nv
cGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsKLSAgICAKLSAgICAvLyBNb3VzZSBldmVudHMgbWF5IGNhdXNlIFRTTSB0byBhdHRl
bXB0IHRvIGNyZWF0ZSBhbiBOU1JhbmdlIGZvciBhIHBvcnRpb24gb2YgdGhlIHZpZXcKLSAgICAv
LyB0aGF0IGlzIG5vdCBpbnNpZGUgdGhlIGN1cnJlbnQgZWRpdGFibGUgcmVnaW9uLiAgVGhlc2Ug
Y2hlY2tzIGVuc3VyZSB3ZSBkb24ndCBwcm9kdWNlCi0gICAgLy8gcG90ZW50aWFsbHkgaW52YWxp
ZCBkYXRhIHdoZW4gcmVzcG9uZGluZyB0byBzdWNoIHJlcXVlc3RzLgotICAgIGlmIChyYW5nZS0+
c3RhcnRDb250YWluZXIoKSAhPSBzY29wZSAmJiAhcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmlz
RGVzY2VuZGFudE9mKHNjb3BlKSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOwotICAgIGlmIChyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gc2NvcGUgJiYgIXJhbmdl
LT5lbmRDb250YWluZXIoKS0+aXNEZXNjZW5kYW50T2Yoc2NvcGUpKQotICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgCi0gICAgUmVmUHRyPFJhbmdlPiB0ZXN0
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBBU1NFUlQodGVz
dFJhbmdlLT5zdGFydENvbnRhaW5lcigpID09IHNjb3BlKTsKLSAgICBpbnQgc3RhcnRQb3NpdGlv
biA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKLSAgICAKLSAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250
YWluZXIoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7Ci0gICAgQVNTRVJUKHRlc3RSYW5nZS0+
c3RhcnRDb250YWluZXIoKSA9PSBzY29wZSk7Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOwotICAgIHJldHVybiBOU01ha2VS
YW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotfQotCi0t
IChQYXNzUmVmUHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQot
ewotICAgIGlmIChuc3JhbmdlLmxvY2F0aW9uID4gSU5UX01BWCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKG5zcmFuZ2UubGVuZ3RoID4gSU5UX01BWCB8fCBuc3JhbmdlLmxvY2F0aW9uICsg
bnNyYW5nZS5sZW5ndGggPiBJTlRfTUFYKQotICAgICAgICBuc3JhbmdlLmxlbmd0aCA9IElOVF9N
QVggLSBuc3JhbmdlLmxvY2F0aW9uOwotICAgICAgICAKLSAgICAvLyBvdXIgY3JpdGljYWwgYXNz
dW1wdGlvbiBpcyB0aGF0IHdlIGFyZSBvbmx5IGNhbGxlZCBieSBpbnB1dCBtZXRob2RzIHRoYXQK
LSAgICAvLyBjb25jZW50cmF0ZSBvbiBhIGdpdmVuIGFyZWEgY29udGFpbmluZyB0aGUgc2VsZWN0
aW9uCi0gICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2Ugb2YgdGV4dCBmaWVsZHMgYW5k
IHRleHRhcmVhcy4gVGhlIERPTSBmb3IgdGhvc2UgaXMgbm90Ci0gICAgLy8gZGlyZWN0bHkgaW4g
dGhlIGRvY3VtZW50IERPTSwgc28gc2VyaWFsaXphdGlvbiBpcyBwcm9ibGVtYXRpYy4gT3VyIHNv
bHV0aW9uIGlzCi0gICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQgb2YgdGhl
IHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgotICAgIC8vIFRoYXQgZml0
cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNlbGVjdGlvbiogZnJh
bWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7Ci0gICAgRWxlbWVu
dCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLT5yb290RWRpdGFibGVFbGVtZW50KCk7
Ci0gICAgRWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRv
Y3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICByZXR1cm4gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUZyb21Mb2NhdGlvbkFuZExlbmd0aChzY29wZSwgbnNyYW5nZS5sb2NhdGlvbiwgbnNyYW5nZS5s
ZW5ndGgpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byB0YWtlIGEgdGV4dCBt
YXJrZXIgcmVwcmVzZW50aW5nIGEgVmlzaWJsZVBvc2l0aW9uIGFuZCBjb252ZXJ0IGl0Ci0vLyBp
bnRvIGEgbm9ybWFsaXplZCBsb2NhdGlvbiB3aXRoaW4gdGhlIGRvY3VtZW50LgotLSAoTlNJbnRl
Z2VyKXBvc2l0aW9uRm9yVGV4dE1hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilt
YXJrZXIKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAg
ICAgICByZXR1cm4gTlNOb3RGb3VuZDsKLQotICAgIGlmICghbWFya2VyKQotICAgICAgICByZXR1
cm4gTlNOb3RGb3VuZDsgICAgCi0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihbbWFy
a2VyIHZpc2libGVQb3NpdGlvbl0pOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBOU1JhbmdlIG5zUmFuZ2UgPSBbc2VsZiBfY29u
dmVydFRvTlNSYW5nZTpyYW5nZS5nZXQoKV07Ci0gICAgcmV0dXJuIG5zUmFuZ2UubG9jYXRpb247
Ci19Ci0KLS0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2UKLXsKLSAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IFZpc2libGVQb3NpdGlvblJhbmdlIHJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJh
bmdlKCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSByYW5nZS5zdGFydDsK
LSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSByYW5nZS5lbmQ7Ci0gICAgV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0ID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
IHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnN0YXJ0UG9zaXRpb24gY2FjaGU6bV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVu
ZCA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3Np
dGlvbjplbmRQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAgICAK
LSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpzdGFydCwgZW5kLCBuaWxdOwot
fQotCi0vLyBBIG1ldGhvZCB0byBnZXQgdGhlIG5vcm1hbGl6ZWQgdGV4dCBjdXJzb3IgcmFuZ2Ug
b2YgYW4gZWxlbWVudC4gVXNlZCBpbiBEdW1wUmVuZGVyVHJlZS4KLS0gKE5TUmFuZ2UpZWxlbWVu
dFRleHRSYW5nZQotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
Ci0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLQotICAgIE5TQXJy
YXkgKm1hcmtlcnMgPSBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VdOwotICAgIGlmIChbbWFya2VycyBj
b3VudF0gIT0gMikKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwot
ICAgIAotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICpzdGFydE1hcmtlciA9IFttYXJr
ZXJzIG9iamVjdEF0SW5kZXg6MF07Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKmVu
ZE1hcmtlciA9IFttYXJrZXJzIG9iamVjdEF0SW5kZXg6MV07Ci0gICAgCi0gICAgTlNJbnRlZ2Vy
IHN0YXJ0UG9zaXRpb24gPSBbc2VsZiBwb3NpdGlvbkZvclRleHRNYXJrZXI6c3RhcnRNYXJrZXJd
OwotICAgIE5TSW50ZWdlciBlbmRQb3NpdGlvbiA9IFtzZWxmIHBvc2l0aW9uRm9yVGV4dE1hcmtl
cjplbmRNYXJrZXJdOwotICAgIAotICAgIHJldHVybiBOU01ha2VSYW5nZShzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pOwotfQotCi0tIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciAqKWFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyOihXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nl
c3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBpZiAoIW1hcmtlcikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBv
c2l0aW9uID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iaiA9IG1fb2JqZWN0LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yUG9zaXRpb24odmlzaWJs
ZVBvc2l0aW9uKTsKLSAgICBpZiAoIW9iaikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVVuaWdub3JlZEFuY2VzdG9yKG9iai0+d3JhcHBlcigpKTsK
LX0KLQotLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbgotewotICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2VsZWN0
aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24udmlzaWJs
ZUVuZCgpOwotCi0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0g
W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9u
OnN0YXJ0UG9zaXRpb24gY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci0gICAgV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjplbmRQb3NpdGlvbiBjYWNoZTpt
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAgICBpZiAoIXN0YXJ0TWFya2VyIHx8ICFlbmRN
YXJrZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIFtOU0FycmF5IGFy
cmF5V2l0aE9iamVjdHM6c3RhcnRNYXJrZXIsIGVuZE1hcmtlciwgbmlsXTsKLX0KLQotLSAoV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyRm9yUG9zaXRpb246KE5TSW50ZWdl
cilwb3NpdGlvbgotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtz
ZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgMCldOwotICAgIGlm
ICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsK
LQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24gPSBzZWxlY3Rpb24udmlzaWJs
ZVN0YXJ0KCk7Ci0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFy
a2VyV2l0aFZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zaXRpb24gY2FjaGU6bV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKV07Ci19Ci0KLS0gKGlkKV9zdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5n
ZSBhdHRyaWJ1dGVkOihCT09MKWF0dHJpYnV0ZWQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFdlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFtzZWxmIHRleHRNYXJrZXJGb3JQ
b3NpdGlvbjpyYW5nZS5sb2NhdGlvbl07Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIq
IGVuZE1hcmtlciA9IFtzZWxmIHRleHRNYXJrZXJGb3JQb3NpdGlvbjpOU01heFJhbmdlKHJhbmdl
KV07Ci0gICAgCi0gICAgLy8gQ2xpZW50cyBkb24ndCBhbHdheXMga25vdyB0aGUgZXhhY3QgcmFu
Z2UsIHJhdGhlciB0aGFuIGZvcmNlIHRoZW0gdG8gY29tcHV0ZSBpdCwKLSAgICAvLyBhbGxvdyBj
bGllbnRzIHRvIG92ZXJzaG9vdCBhbmQgdXNlIHRoZSBtYXggdGV4dCBtYXJrZXIgcmFuZ2UuCi0g
ICAgaWYgKCFzdGFydE1hcmtlciB8fCAhZW5kTWFya2VyKSB7Ci0gICAgICAgIE5TQXJyYXkgKm1h
cmtlcnMgPSBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VdOwotICAgICAgICBpZiAoW21hcmtlcnMgY291
bnRdICE9IDIpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBpZiAoIXN0YXJ0TWFy
a2VyKQotICAgICAgICAgICAgc3RhcnRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjBd
OwotICAgICAgICBpZiAoIWVuZE1hcmtlcikKLSAgICAgICAgICAgIGVuZE1hcmtlciA9IFttYXJr
ZXJzIG9iamVjdEF0SW5kZXg6MV07Ci0gICAgfQotICAgIAotICAgIE5TQXJyYXkqIGFycmF5ID0g
W3NlbGYgYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Rz
OnN0YXJ0TWFya2VyLCBlbmRNYXJrZXIsIG5pbF0gYXR0cmlidXRlZDphdHRyaWJ1dGVkXTsKLSAg
ICBDbGFzcyByZXR1cm5DbGFzcyA9IGF0dHJpYnV0ZWQgPyBbTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyBjbGFzc10gOiBbTlNNdXRhYmxlU3RyaW5nIGNsYXNzXTsKLSAgICBpZCByZXR1cm5WYWx1
ZSA9IFtbW3JldHVybkNsYXNzIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0gICAgCi0gICAg
TlNJbnRlZ2VyIGNvdW50ID0gW2FycmF5IGNvdW50XTsKLSAgICBmb3IgKE5TSW50ZWdlciBrID0g
MDsgayA8IGNvdW50OyArK2spIHsKLSAgICAgICAgaWQgb2JqZWN0ID0gW2FycmF5IG9iamVjdEF0
SW5kZXg6a107Ci0KLSAgICAgICAgaWYgKCFbb2JqZWN0IGlzS2luZE9mQ2xhc3M6cmV0dXJuQ2xh
c3NdKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoYXR0cmli
dXRlZCkKLSAgICAgICAgICAgIFsoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqKXJldHVyblZh
bHVlIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6b2JqZWN0XTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgWyhOU011dGFibGVTdHJpbmcgKilyZXR1cm5WYWx1ZSBhcHBlbmRTdHJpbmc6b2JqZWN0
XTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi0KLS8vIEEgY29udmVuaWVu
Y2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSB0ZXh0IG9mIGEgTlNSYW5nZS4gQ3VycmVudGx5IHVz
ZWQgb25seSBieSBEUlQuCi0tIChOU1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJh
bmdlCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zdHJpbmdGb3JSYW5nZTpyYW5nZSBhdHRyaWJ1dGVk
Ok5PXTsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0ZvclJh
bmdlOihOU1JhbmdlKXJhbmdlCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zdHJpbmdGb3JSYW5nZTpy
YW5nZSBhdHRyaWJ1dGVkOllFU107Ci19Ci0KLS8vIEEgY29udmVuaWVuY2UgbWV0aG9kIGZvciBn
ZXR0aW5nIHRoZSBhY2Nlc3NpYmlsaXR5IG9iamVjdHMgb2YgYSBOU1JhbmdlLiBDdXJyZW50bHkg
dXNlZCBvbmx5IGJ5IERSVC4KLS0gKE5TQXJyYXkgKillbGVtZW50c0ZvclJhbmdlOihOU1Jhbmdl
KXJhbmdlCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciog
c3RhcnRNYXJrZXIgPSBbc2VsZiB0ZXh0TWFya2VyRm9yUG9zaXRpb246cmFuZ2UubG9jYXRpb25d
OwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbc2VsZiB0ZXh0
TWFya2VyRm9yUG9zaXRpb246TlNNYXhSYW5nZShyYW5nZSldOwotICAgIGlmICghc3RhcnRNYXJr
ZXIgfHwgIWVuZE1hcmtlcikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBOU0FycmF5
KiBhcnJheSA9IFtzZWxmIGFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6W05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0czpzdGFydE1hcmtlciwgZW5kTWFya2VyLCBuaWxdIGF0dHJpYnV0ZWQ6Tk9dOwot
ICAgIE5TTXV0YWJsZUFycmF5KiBlbGVtZW50cyA9IFtOU011dGFibGVBcnJheSBhcnJheV07Ci0g
ICAgZm9yIChpZCBlbGVtZW50IGluIGFycmF5KSB7Ci0gICAgICAgIGlmICghW2VsZW1lbnQgaXNL
aW5kT2ZDbGFzczpbQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgY2xhc3NdXSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBbZWxlbWVudHMgYWRkT2JqZWN0OmVsZW1lbnRdOwotICAg
IH0KLSAgICByZXR1cm4gZWxlbWVudHM7Ci19Ci0KLS0gKE5TU3RyaW5nICopc2VsZWN0aW9uUmFu
Z2VTdHJpbmcKLXsKLSAgICBOU0FycmF5ICptYXJrZXJzID0gW3NlbGYgdGV4dE1hcmtlclJhbmdl
Rm9yU2VsZWN0aW9uXTsKLSAgICByZXR1cm4gW3NlbGYgc3RyaW5nRm9yVGV4dE1hcmtlcnM6bWFy
a2Vyc107Ci19Ci0KLS0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopc2VsZWN0ZWRUZXh0
TWFya2VyCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24gPSBz
ZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgCi0gICAgLy8gaWYgdGhlcmUncyBubyBzZWxl
Y3Rpb24sIHN0YXJ0IGF0IHRoZSB0b3Agb2YgdGhlIGRvY3VtZW50Ci0gICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQotICAgICAgICBwb3NpdGlvbiA9IHN0YXJ0T2ZEb2N1bWVudChtX29iamVjdC0+
ZG9jdW1lbnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpwb3NpdGlvbiBjYWNoZTptX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpXTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcmV0
dXJuIHRoZSBtYXJrZXIgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzdGFydGluZyBhdAotLy8gdGhl
IG1hcmtlciB0aGF0IGlzIHBhc3NlZCBpbnRvIHRoZSBtZXRob2QuCi0tIChXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciAqKWxpbmVFbmRNYXJrZXJGb3JNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyICopbWFya2VyCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxp
dHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlmICghbWFya2VyKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IFttYXJrZXIg
dmlzaWJsZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9zaXRpb24gbGluZUVuZCA9IG1fb2JqZWN0
LT5uZXh0TGluZUVuZFBvc2l0aW9uKHN0YXJ0KTsKLSAgICAKLSAgICByZXR1cm4gW1dlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmxpbmVFbmQg
Y2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci19Ci0KLS8vIFRoaXMgbWV0aG9kIGlz
IGludGVuZGVkIHRvIHJldHVybiB0aGUgbWFya2VyIGF0IHRoZSBzdGFydCBvZiB0aGUgbGluZSBz
dGFydGluZyBhdAotLy8gdGhlIG1hcmtlciB0aGF0IGlzIHBhc3NlZCBpbnRvIHRoZSBtZXRob2Qu
Ci0tIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKWxpbmVTdGFydE1hcmtlckZvck1hcmtl
cjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJrZXIKLXsKLSAgICBpZiAoIVtzZWxm
IF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAg
aWYgKCFtYXJrZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIFZpc2libGVQb3NpdGlv
biBsaW5lU3RhcnQgPSBtX29iamVjdC0+cHJldmlvdXNMaW5lU3RhcnRQb3NpdGlvbihzdGFydCk7
Ci0gICAgCi0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjpsaW5lU3RhcnQgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKV07Ci19Ci0KLS0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbmV4dE1hcmtlckZv
ck1hcmtlcjooV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJrZXIKLXsKLSAgICBpZiAo
IVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgaWYgKCFtYXJrZXIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0ID0gW21hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIFZpc2libGVQ
b3NpdGlvbiBuZXh0TWFya2VyID0gbV9vYmplY3QtPm5leHRWaXNpYmxlUG9zaXRpb24oc3RhcnQp
OwotICAgIAotICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtl
cldpdGhWaXNpYmxlUG9zaXRpb246bmV4dE1hcmtlciBjYWNoZTptX29iamVjdC0+YXhPYmplY3RD
YWNoZSgpXTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gcmV0dXJuIHRoZSBt
YXJrZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHN0YXJ0aW5nIGF0Ci0vLyB0aGUgbWFya2Vy
IHRoYXQgaXMgcGFzc2VkIGludG8gdGhlIG1ldGhvZC4KLS0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyICopcHJldmlvdXNNYXJrZXJGb3JNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyICopbWFya2VyCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxs
XSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIGlmICghbWFya2VyKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IFttYXJrZXIgdmlzaWJs
ZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNNYXJrZXIgPSBtX29iamVj
dC0+cHJldmlvdXNWaXNpYmxlUG9zaXRpb24oc3RhcnQpOwotICAgIAotICAgIHJldHVybiBbV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246cHJl
dmlvdXNNYXJrZXIgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci19Ci0KLS8vIFRo
aXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHJldHVybiB0aGUgYm91bmRzIG9mIGEgdGV4dCBtYXJr
ZXIgcmFuZ2UgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLgotLSAoQ0dSZWN0KWZyYW1lRm9yVGV4dE1h
cmtlcnM6KE5TQXJyYXkgKilhcnJheQotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotCi0gICAgaWYgKFthcnJh
eSBjb3VudF0gIT0gMikKLSAgICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0gICAgCi0gICAgV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gW2FycmF5IG9iamVjdEF0SW5k
ZXg6MF07Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFthcnJh
eSBvYmplY3RBdEluZGV4OjFdOwotICAgIGlmICghW3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6
W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5k
T2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSkKLSAgICAgICAgcmV0
dXJuIENHUmVjdFplcm87Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRzRm9y
VmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3N0YXJ0TWFya2VyIHZp
c2libGVQb3NpdGlvbl0sIFtlbmRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSkpOwotICAgIHJldHVy
biBbc2VsZiBfY29udmVydEludFJlY3RUb1NjcmVlbkNvb3JkaW5hdGVzOnJlY3RdOwotfQotCi0t
IChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJGb3JQb2ludDooQ0dQb2lu
dClwb2ludAotewotICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IG1fb2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludCkpOwotICAgIHJldHVy
biBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRp
b246cG9zIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOwotfQotCi0tIChOU1N0cmlu
ZyAqKWFjY2Vzc2liaWxpdHlJZGVudGlmaWVyCi17Ci0gICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFj
Y2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4g
bV9vYmplY3QtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7Ci19Ci0KLS0gKE5TU3Ry
aW5nICopYWNjZXNzaWJpbGl0eVNwZWVjaEhpbnQKLXsKLSAgICBpZiAoIVtzZWxmIF9wcmVwYXJl
QWNjZXNzaWJpbGl0eUNhbGxdKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgc3dpdGNoICht
X29iamVjdC0+c3BlYWtQcm9wZXJ0eSgpKSB7Ci0gICAgZGVmYXVsdDoKLSAgICBjYXNlIFNwZWFr
Tm9ybWFsOgotICAgICAgICByZXR1cm4gQCJub3JtYWwiOwotICAgIGNhc2UgU3BlYWtOb25lOgot
ICAgICAgICByZXR1cm4gQCJub25lIjsKLSAgICBjYXNlIFNwZWFrU3BlbGxPdXQ6Ci0gICAgICAg
IHJldHVybiBAInNwZWxsLW91dCI7Ci0gICAgY2FzZSBTcGVha0RpZ2l0czoKLSAgICAgICAgcmV0
dXJuIEAiZGlnaXRzIjsKLSAgICBjYXNlIFNwZWFrTGl0ZXJhbFB1bmN0dWF0aW9uOgotICAgICAg
ICByZXR1cm4gQCJsaXRlcmFsLXB1bmN0dWF0aW9uIjsKLSAgICBjYXNlIFNwZWFrTm9QdW5jdHVh
dGlvbjoKLSAgICAgICAgcmV0dXJuIEAibm8tcHVuY3R1YXRpb24iOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gbmlsOwotfQotCi0tIChCT09MKWFjY2Vzc2liaWxpdHlBUklBSXNCdXN5Ci17Ci0g
ICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25CdXN5KCk7Ci19Ci0K
LS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eUFSSUFMaXZlUmVnaW9uU3RhdHVzCi17Ci0gICAg
aWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIHJldHVybiBtX29iamVjdC0+YXJpYUxpdmVSZWdpb25TdGF0dXMoKTsKLX0KLQot
LSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50U3RhdHVzCi17Ci0gICAgaWYg
KCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmFyaWFMaXZlUmVnaW9uUmVsZXZhbnQoKTsKLX0K
LQotLSAoQk9PTClhY2Nlc3NpYmlsaXR5QVJJQUxpdmVSZWdpb25Jc0F0b21pYwotewotICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCi0gICAgcmV0dXJuIG1fb2JqZWN0LT5hcmlhTGl2ZVJlZ2lvbkF0b21pYygpOwotfQot
Ci0tIChOU1N0cmluZyAqKWFjY2Vzc2liaWxpdHlJbnZhbGlkU3RhdHVzCi17Ci0gICAgaWYgKCFb
c2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICByZXR1cm4gbV9vYmplY3QtPmludmFsaWRTdGF0dXMoKTsKLX0KLQotLSAoV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFJvb3RJbmRleE9iamVj
dAotewotICAgIHJldHVybiBtX29iamVjdC0+bWF0aFJvb3RJbmRleE9iamVjdCgpID8gbV9vYmpl
Y3QtPm1hdGhSb290SW5kZXhPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFJhZGljYW5kT2JqZWN0
Ci17Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoUmFkaWNhbmRPYmplY3QoKSA/IG1fb2JqZWN0
LT5tYXRoUmFkaWNhbmRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aE51bWVyYXRvck9iamVjdAot
ewotICAgIHJldHVybiBtX29iamVjdC0+bWF0aE51bWVyYXRvck9iamVjdCgpID8gbV9vYmplY3Qt
Pm1hdGhOdW1lcmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aERlbm9taW5hdG9yT2JqZWN0
Ci17Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKSA/IG1fb2Jq
ZWN0LT5tYXRoRGVub21pbmF0b3JPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aEJhc2VPYmplY3QK
LXsKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhCYXNlT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0
aEJhc2VPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFN1YnNjcmlwdE9iamVjdAotewotICAgIHJl
dHVybiBtX29iamVjdC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpID8gbV9vYmplY3QtPm1hdGhTdWJz
Y3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFN1cGVyc2NyaXB0T2JqZWN0Ci17Ci0gICAg
cmV0dXJuIG1fb2JqZWN0LT5tYXRoU3VwZXJzY3JpcHRPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRo
U3VwZXJzY3JpcHRPYmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aFVuZGVyT2JqZWN0Ci17Ci0gICAg
cmV0dXJuIG1fb2JqZWN0LT5tYXRoVW5kZXJPYmplY3QoKSA/IG1fb2JqZWN0LT5tYXRoVW5kZXJP
YmplY3QoKS0+d3JhcHBlcigpIDogMDsKLX0KLQotLSAoV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgKilhY2Nlc3NpYmlsaXR5TWF0aE92ZXJPYmplY3QKLXsKLSAgICByZXR1cm4gbV9vYmpl
Y3QtPm1hdGhPdmVyT2JqZWN0KCkgPyBtX29iamVjdC0+bWF0aE92ZXJPYmplY3QoKS0+d3JhcHBl
cigpIDogMDsKLX0KLQotLSAoTlNTdHJpbmcgKilhY2Nlc3NpYmlsaXR5TWF0aEZlbmNlZE9wZW5T
dHJpbmcKLXsKLSAgICByZXR1cm4gbV9vYmplY3QtPm1hdGhGZW5jZWRPcGVuU3RyaW5nKCk7Ci19
Ci0KLS0gKE5TU3RyaW5nICopYWNjZXNzaWJpbGl0eU1hdGhGZW5jZWRDbG9zZVN0cmluZwotewot
ICAgIHJldHVybiBtX29iamVjdC0+bWF0aEZlbmNlZENsb3NlU3RyaW5nKCk7Ci19Ci0KLS0gKEJP
T0wpYWNjZXNzaWJpbGl0eUlzTWF0aFRvcE9iamVjdAotewotICAgIHJldHVybiBtX29iamVjdC0+
cm9sZVZhbHVlKCkgPT0gRG9jdW1lbnRNYXRoUm9sZTsKLX0KLQotLSAoTlNTdHJpbmcgKilhY2Nl
c3NpYmlsaXR5TWF0aFR5cGUKLXsKLSAgICBpZiAobV9vYmplY3QtPnJvbGVWYWx1ZSgpID09IE1h
dGhFbGVtZW50Um9sZSkgewotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aEZyYWN0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGcmFjdGlvbiI7Ci0gICAgICAgIGlmIChtX29i
amVjdC0+aXNNYXRoRmVuY2VkKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZWQi
OwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCI7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoUm93KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhS
b3ciOwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFVuZGVyT3ZlcigpKQotICAgICAgICAg
ICAgcmV0dXJuIEAiQVhNYXRoVW5kZXJPdmVyIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhTcXVhcmVSb290KCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhTcXVhcmVSb290IjsK
LSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhSb290KCkpCi0gICAgICAgICAgICByZXR1cm4g
QCJBWE1hdGhSb290IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhUZXh0KCkpCi0gICAg
ICAgICAgICByZXR1cm4gQCJBWE1hdGhUZXh0IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01h
dGhOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aE51bWJlciI7Ci0gICAgICAg
IGlmIChtX29iamVjdC0+aXNNYXRoSWRlbnRpZmllcigpKQotICAgICAgICAgICAgcmV0dXJuIEAi
QVhNYXRoSWRlbnRpZmllciI7Ci0gICAgICAgIGlmIChtX29iamVjdC0+aXNNYXRoVGFibGUoKSkK
LSAgICAgICAgICAgIHJldHVybiBAIkFYTWF0aFRhYmxlIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0
LT5pc01hdGhUYWJsZVJvdygpKQotICAgICAgICAgICAgcmV0dXJuIEAiQVhNYXRoVGFibGVSb3ci
OwotICAgICAgICBpZiAobV9vYmplY3QtPmlzTWF0aFRhYmxlQ2VsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIEAiQVhNYXRoVGFibGVDZWxsIjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhG
ZW5jZU9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhGZW5jZU9wZXJhdG9y
IjsKLSAgICAgICAgaWYgKG1fb2JqZWN0LT5pc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpKQotICAg
ICAgICAgICAgcmV0dXJuIEAiQVhNYXRoU2VwYXJhdG9yT3BlcmF0b3IiOwotICAgICAgICBpZiAo
bV9vYmplY3QtPmlzTWF0aE9wZXJhdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gQCJBWE1hdGhP
cGVyYXRvciI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuaWw7Ci19Ci0KLS8vIFRoZXNlIGFy
ZSB1c2VkIGJ5IERSVCBzbyB0aGF0IGl0IGNhbiBrbm93IHdoZW4gbm90aWZpY2F0aW9ucyBhcmUg
c2VudC4KLS8vIFNpbmNlIHRoZXkgYXJlIHN0YXRpYywgb25seSBvbmUgY2FsbGJhY2sgY2FuIGJl
IGluc3RhbGxlZCBhdCBhIHRpbWUgKHRoYXQncyBhbGwgRFJUIHNob3VsZCBuZWVkKS4KLXR5cGVk
ZWYgdm9pZCAoKkFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2spKGlkIGVsZW1lbnQsIE5TU3Ry
aW5nKiBub3RpZmljYXRpb24sIHZvaWQqIGNvbnRleHQpOwotc3RhdGljIEFYUG9zdGVkTm90aWZp
Y2F0aW9uQ2FsbGJhY2sgQVhOb3RpZmljYXRpb25DYWxsYmFjayA9IDA7Ci1zdGF0aWMgdm9pZCog
QVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0ID0gMDsKLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5
U2V0UG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJhY2s6KEFYUG9zdGVkTm90aWZpY2F0aW9uQ2FsbGJh
Y2spZnVuY3Rpb24gd2l0aENvbnRleHQ6KHZvaWQqKWNvbnRleHQKLXsKLSAgICBBWE5vdGlmaWNh
dGlvbkNhbGxiYWNrID0gZnVuY3Rpb247Ci0gICAgQVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0
ID0gY29udGV4dDsKLX0KLQotLSAodm9pZClhY2Nlc3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9u
OihXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpBWE5vdGlmaWNhdGlvbilub3RpZmljYXRpb25UeXBl
Ci17Ci0gICAgaWYgKEFYTm90aWZpY2F0aW9uQ2FsbGJhY2spIHsKLSAgICAgICAgTlNTdHJpbmcg
Km5vdGlmaWNhdGlvblN0cmluZyA9IG5pbDsKLSAgICAgICAgCi0gICAgICAgIC8vIFBhc3MgYSBz
dHJpbmcgYmFjayB0byBEUlQgd2hpY2ggaXMgZWFzaWVyIHRvIG1hdGNoIHRoYW4gYW4gZW51bSB0
eXBlLgotICAgICAgICBzd2l0Y2ggKG5vdGlmaWNhdGlvblR5cGUpIHsKLSAgICAgICAgICAgIGNh
c2UgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6QVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZDoKLSAg
ICAgICAgICAgIGNhc2UgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6QVhGb2N1c2VkVUlFbGVtZW50
Q2hhbmdlZDoKLSAgICAgICAgICAgICAgICBub3RpZmljYXRpb25TdHJpbmcgPSBAIkFYRm9jdXND
aGFuZ2VkIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChu
b3RpZmljYXRpb25TdHJpbmcpCi0gICAgICAgICAgICBBWE5vdGlmaWNhdGlvbkNhbGxiYWNrKHNl
bGYsIG5vdGlmaWNhdGlvblN0cmluZywgQVhQb3N0ZWROb3RpZmljYXRpb25Db250ZXh0KTsKLSAg
ICB9Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0tIChOU1N0cmluZyAqKWRlc2NyaXB0aW9uCi17Ci0g
ICAgQ0dSZWN0IGZyYW1lID0gW3NlbGYgYWNjZXNzaWJpbGl0eUZyYW1lXTsKLSAgICByZXR1cm4g
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJSb2xlOiAoJWQpIC0gVGV4dDogJUA6IFZhbHVl
OiAlQCAtLSBGcmFtZTogJWYgJWYgJWYgJWYiLCBtX29iamVjdCA/IG1fb2JqZWN0LT5yb2xlVmFs
dWUoKSA6IDAsIFtzZWxmIGFjY2Vzc2liaWxpdHlMYWJlbF0sIFtzZWxmIGFjY2Vzc2liaWxpdHlW
YWx1ZV0sIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwg
ZnJhbWUuc2l6ZS5oZWlnaHRdOwotfQotI2VuZGlmCi0KLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL0FYT2JqZWN0
Q2FjaGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9p
b3MvQVhPYmplY3RDYWNoZUlPUy5tbQkocmV2aXNpb24gMTQzMTQzKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvQVhPYmplY3RDYWNoZUlPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjksNyArMjksNyBAQAogI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oSU9T
KQogCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW1wb3J0ICJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5oIgorI2ltcG9ydCAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MuaCIKICNpbXBvcnQgIlJlbmRlck9iamVjdC5oIgogCiAjaW1wb3J0IDx3dGYvUGFz
c1JlZlB0ci5oPgpAQCAtNDUsNyArNDUsNyBAQAogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmF0dGFj
aFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQogewotICAgIFJldGFpblB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4gd3JhcHBlcihBZG9wdE5TLCBbW0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGFsbG9jXSBpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6b2JqXSk7Cisg
ICAgUmV0YWluUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPiB3cmFwcGVyKEFkb3B0TlMs
IFtbV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWxsb2NdIGluaXRXaXRoQWNjZXNzaWJp
bGl0eU9iamVjdDpvYmpdKTsKICAgICBvYmotPnNldFdyYXBwZXIod3JhcHBlci5nZXQoKSk7CiB9
CiAKQEAgLTU0LDEwICs1NCwxMiBAQAogICAgIGlmICghb2JqKQogICAgICAgICByZXR1cm47CiAK
KyAgICBOU1N0cmluZyAqbm90aWZpY2F0aW9uU3RyaW5nID0gbmlsOwogICAgIHN3aXRjaCAobm90
aWZpY2F0aW9uKSB7CiAgICAgICAgIGNhc2UgQVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZDoKICAg
ICAgICAgY2FzZSBBWEZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkOgogICAgICAgICAgICAgW29iai0+
d3JhcHBlcigpIHBvc3RGb2N1c0NoYW5nZU5vdGlmaWNhdGlvbl07CisgICAgICAgICAgICBub3Rp
ZmljYXRpb25TdHJpbmcgPSBAIkFYRm9jdXNDaGFuZ2VkIjsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEFYU2VsZWN0ZWRUZXh0Q2hhbmdlZDoKICAgICAgICAgICAgIFtvYmotPndy
YXBwZXIoKSBwb3N0U2VsZWN0ZWRUZXh0Q2hhbmdlTm90aWZpY2F0aW9uXTsKQEAgLTg1LDcgKzg3
LDcgQEAKICAgICB9CiAgICAgCiAgICAgLy8gVXNlZCBieSBEUlQgdG8ga25vdyB3aGVuIG5vdGlm
aWNhdGlvbnMgYXJlIHBvc3RlZC4KLSAgICBbb2JqLT53cmFwcGVyKCkgYWNjZXNzaWJpbGl0eVBv
c3RlZE5vdGlmaWNhdGlvbjpub3RpZmljYXRpb25dOworICAgIFtvYmotPndyYXBwZXIoKSBhY2Nl
c3NpYmlsaXR5UG9zdGVkTm90aWZpY2F0aW9uOm5vdGlmaWNhdGlvblN0cmluZ107CiB9CiAKIHZv
aWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgQVhUZXh0Q2hhbmdlLCB1bnNpZ25lZCwgY29uc3QgU3RyaW5nJikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaAkocmV2aXNpb24gMTQz
MTQzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXJJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjEgKzMwLDE0IEBACiAK
ICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5oIgogCi1A
Y2xhc3MgV0FLVmlldzsKLQotQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciA6IE5TT2JqZWN0IHsKLSAgICBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtX29iamVj
dDsKLSAgICAKK0BpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgOiBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UgewogICAgIC8vIENhY2hlZCBkYXRhIHRvIGF2
b2lkIGZyZXF1ZW50IHJlLWNvbXB1dGF0aW9uLgogICAgIGludCBtX2lzQWNjZXNzaWJpbGl0eUVs
ZW1lbnQ7CiAgICAgdWludDY0X3QgbV9hY2Nlc3NpYmlsaXR5VHJhaXRzRnJvbUFuY2VzdG9yOwog
fQogCi0tIChpZClpbml0V2l0aEFjY2Vzc2liaWxpdHlPYmplY3Q6KFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3QqKWF4T2JqZWN0OwotLSAodm9pZClkZXRhY2g7Ci0tIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0KilhY2Nlc3NpYmlsaXR5T2JqZWN0OwotCiAtIChpZClhY2Nlc3NpYmls
aXR5SGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0gKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
ICopYWNjZXNzaWJpbGl0eVBvc3RQcm9jZXNzSGl0VGVzdDooQ0dQb2ludClwb2ludDsKIC0gKEJP
T0wpYWNjZXNzaWJpbGl0eUNhbkZ1enp5SGl0VGVzdDsKQEAgLTU5LDcgKzUyLDYgQEAKIC0gKE5T
SW50ZWdlcilpbmRleE9mQWNjZXNzaWJpbGl0eUVsZW1lbnQ6KGlkKWVsZW1lbnQ7CiAKIC0gKEJP
T0wpaXNBdHRhY2htZW50OwotLSAoV0FLVmlldyAqKWF0dGFjaG1lbnRWaWV3OwogCiAtICh2b2lk
KXBvc3RGb2N1c0NoYW5nZU5vdGlmaWNhdGlvbjsKIC0gKHZvaWQpcG9zdFNlbGVjdGVkVGV4dENo
YW5nZU5vdGlmaWNhdGlvbjsKQEAgLTY5LDkgKzYxLDYgQEAKIC0gKHZvaWQpcG9zdENoaWxkcmVu
Q2hhbmdlZE5vdGlmaWNhdGlvbjsKIC0gKHZvaWQpcG9zdEludmFsaWRTdGF0dXNDaGFuZ2VkTm90
aWZpY2F0aW9uOwogCi0vLyBVc2VkIHRvIGluZm9ybSBhbiBlbGVtZW50IHdoZW4gYSBub3RpZmlj
YXRpb24gaXMgcG9zdGVkIGZvciBpdC4gVXNlZCBieSBEUlQuCi0tICh2b2lkKWFjY2Vzc2liaWxp
dHlQb3N0ZWROb3RpZmljYXRpb246KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OkFYTm90aWZpY2F0
aW9uKW5vdGlmaWNhdGlvbjsKLQogQGVuZAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MzE0
MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNDY3Miw4ICs0NjcyLDggQEAKIAkJQUE3RkVFQTkxNkE0RTZGMzAw
NEMwQzMzIC8qIEpTU3BlZWNoU3ludGhlc2lzVm9pY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBN0ZFRUExMTZBNEU2RjMwMDRDMEMzMyAvKiBKU1Nw
ZWVjaFN5bnRoZXNpc1ZvaWNlLmggKi87IH07CiAJCUFBN0ZFRUFEMTZBNEU3NEIwMDRDMEMzMyAv
KiBKU1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUE3RkVFQUMxNkE0RTc0QjAwNEMwQzMzIC8qIEpTU3BlZWNoU3ludGhlc2lz
LmggKi87IH07CiAJCUFBQTcyOEY2MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RJT1MubW0gKi87
IH07Ci0JCUFBQTcyOEY3MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QUFBNzI4RjExNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
LmggKi87IH07Ci0JCUFBQTcyOEY4MTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEFBQTcyOEYyMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbSAqLzsgfTsKKwkJQUFBNzI4RjcxNkQxRDhCQzAwRDNCQkM2IC8qIFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQUE3MjhGMTE2RDFEOEJDMDBEM0JCQzYgLyogV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MuaCAqLzsgfTsKKwkJQUFBNzI4RjgxNkQxRDhCQzAwRDNCQkM2
IC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUFBNzI4RjIxNkQxRDhCQzAwRDNCQkM2IC8q
IFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICovOyB9OwogCQlBQUE3MjhGOTE2
RDFEOEJDMDBEM0JCQzYgLyogQVhPYmplY3RDYWNoZUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBQTcyOEYzMTZEMUQ4QkMwMEQzQkJDNiAvKiBB
WE9iamVjdENhY2hlSU9TLm1tICovOyB9OwogCQlBQUI2MDU0RTE1ODc0QzU4MDA3QjUwMzEgLyog
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEFBQjYwNTRBMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3RlZFNjcmlwdEJh
c2UuY3BwICovOyB9OwogCQlBQUI2MDU0RjE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3Jp
cHRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QUI2MDU0QjE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmggKi87IH07CkBA
IC0xMjA3Myw4ICsxMjA3Myw4IEBACiAJCUFBOTAzMEZFMTU3RTE2QTAwMDI3NjI0NyAvKiBJbmpl
Y3RlZFNjcmlwdENhbnZhc01vZHVsZVNvdXJjZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlU291cmNlLmpzOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTkxMjc1MDE1N0UzNUE1MDA0NTRFNTQgLyogSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGVTb3VyY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQUFBNzI4RjAxNkQxRDhCQzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxp
dHlPYmplY3RJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlB
QUE3MjhGMTE2RDFEOEJDMDBEM0JCQzYgLyogQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJJT1MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQUFBNzI4RjIxNkQxRDhC
QzAwRDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUFBQTcyOEYxMTZEMUQ4QkMwMEQz
QkJDNiAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBQUE3MjhGMjE2RDFEOEJDMDBEM0JCQzYgLyog
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUFBNzI4RjMxNkQxRDhCQzAwRDNCQkM2IC8q
IEFYT2JqZWN0Q2FjaGVJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBBWE9iamVjdENhY2hlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QUI2MDU0QTE1ODc0QzU4MDA3QjUwMzEgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0QmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBQjYwNTRCMTU4NzRDNTgwMDdCNTAzMSAvKiBJ
bmplY3RlZFNjcmlwdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5q
ZWN0ZWRTY3JpcHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTkyMSw5
ICsxOTkyMSw5IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFB
QTcyOEYwMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0SU9TLm1tICovLAot
CQkJCUFBQTcyOEYxMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5oICovLAotCQkJCUFBQTcyOEYyMTZEMUQ4QkMwMEQzQkJDNiAvKiBBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbSAqLywKIAkJCQlBQUE3MjhGMzE2RDFEOEJDMDBEM0JCQzYgLyog
QVhPYmplY3RDYWNoZUlPUy5tbSAqLywKKwkJCQlBQUE3MjhGMTE2RDFEOEJDMDBEM0JCQzYgLyog
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MuaCAqLywKKwkJCQlBQUE3MjhGMjE2RDFE
OEJDMDBEM0JCQzYgLyogV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMzE5
Myw3ICsyMzE5Myw2IEBACiAJCQkJNzZDREQyRjUxMTAzREE2NjAwNjgwNTIxIC8qIEFjY2Vzc2li
aWxpdHlNZW51TGlzdFBvcHVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUFDQjIxMjE0M0U3MTI4
MDA2QkNBNUYgLyogQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI5QTgxMjM2MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBQUE3MjhGNzE2RDFEOEJDMDBEM0JCQzYgLyogQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE0MDlDOTg1MTE2RDBEREQwMDcx
OTdCRCAvKiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTI5QTgxMjM5MEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0M0RjZFQjExMDhGOUE1MDA5OUQwREIgLyogQWNjZXNz
aWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjQzMyw2ICsyNjQzMiw3IEBA
CiAJCQkJRkQ3RjI5OTcxM0Q0QzBDQjAwQUQ5NTM1IC8qIFdhdmVTaGFwZXJQcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjQ5MEZCQjlDQTkwMDUxMDI5MyAvKiBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlckJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUFBQTcyOEY3
MTZEMUQ4QkMwMEQzQkJDNiAvKiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QTgwODI0NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVGcmFt
ZVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQzY5RERBMTYzNzFGRDQwMDdDMzhERiAvKiBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0RD
NjlERDYxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaCBp
biBIZWFkZXJzICovLApAQCAtMjY5NDAsNyArMjY5NDAsNiBAQAogCQkJCTI5QUNCMjE0MTQzRTc0
OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBQUE3MjhGNjE2RDFEOEJDMDBEM0JCQzYgLyogQWNjZXNzaWJpbGl0eU9iamVjdElPUy5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTI5QTgxMjQ4MEZCQjlDQTkwMDUxMDI5MyAvKiBBY2Nlc3Np
YmlsaXR5T2JqZWN0TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJQUFBNzI4RjgxNkQxRDhCQzAw
RDNCQkM2IC8qIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTQwOUM5ODQxMTZEMERERDAwNzE5N0JEIC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0lu
ZGljYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyOUQ3QkNGNjE0NDRBRjU4MDA3MDYxOUMg
LyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjVEMzFE
RkExMUNGNjEwQjAwOUYyMkI0IC8qIEFjdGl2ZURPTUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjk2NDEsNiArMjk2NDAsNyBAQAogCQkJCUZEN0YyOTk2MTNENEMwQ0IwMEFEOTUzNSAv
KiBXYXZlU2hhcGVyUHJvY2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTgxRkI0MTUy
MEY5M0IwMDNBN0E3NSAvKiBXYXZlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjlBODEy
NEEwRkJCOUNBOTAwNTEwMjkzIC8qIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQmFzZS5t
bSBpbiBTb3VyY2VzICovLAorCQkJCUFBQTcyOEY4MTZEMUQ4QkMwMEQzQkJDNiAvKiBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNEN0UwNTIy
MTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VMb2FkZXIubW0gaW4gU291cmNl
cyAqLywKIAkJCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5Q
bGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLywKIAkJCQlDREM2OURENzE2MzIwMjZDMDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="209013"
          type_id="1"
          status="+"
          setter="ddkilzer"
    />
          </attachment>
      

    </bug>

</bugzilla>