<?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>170752</bug_id>
          
          <creation_ts>2017-04-11 15:08:49 -0700</creation_ts>
          <short_desc>Modernize and clean up code</short_desc>
          <delta_ts>2017-04-11 16:24:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1296566</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-11 15:08:49 -0700</bug_when>
    <thetext>Modernize and clean up code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296567</commentid>
    <comment_count>1</comment_count>
      <attachid>306860</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-11 15:09:03 -0700</bug_when>
    <thetext>Created attachment 306860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1296597</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-11 16:24:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/r215255</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306860</attachid>
            <date>2017-04-11 15:09:03 -0700</date>
            <delta_ts>2017-04-11 16:17:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170752-20170411150859.patch</filename>
            <type>text/plain</type>
            <size>26589</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTI1MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE3LTA0LTExICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW9kZXJuaXpl
IGFuZCBjbGVhbiB1cCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzA3NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAg
ICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3JlLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElIaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKEFQSTo6SGl0VGVzdFJlc3VsdDo6
Y3JlYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUhpdFRlc3RSZXN1bHQuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1By
ZWZlcmVuY2VzQ3JlYXRlKToKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNDcmVhdGVXaXRoSWRlbnRp
Zmllcik6CisgICAgICAgIChXS1ByZWZlcmVuY2VzQ3JlYXRlQ29weSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dGhlbnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcmVmZXJlbmNlczo6Y3JlYXRlV2l0aExlZ2FjeURlZmF1bHRzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJlZmVyZW5jZXM6OmNvcHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcmVmZXJl
bmNlcy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJMb2FkZXJTdHJhdGVneS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjphZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JX
ZWJTZWxlY3Rpb25BdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VG
b3JCbG9ja0F0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleHBhbmRlZFJhbmdl
RnJvbUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZy
b21IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlRXhwYW5kQW5kU2hy
aW5rVGhyZXNob2xkc0ZvckhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNoYW5n
ZUJsb2NrU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmFuZ2VGb3JHcmFu
dWxhcml0eUF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlUGFnZXNG
b3JQcmludGluZ0FuZERyYXdUb1BERik6CisKIDIwMTctMDQtMTEgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgb3V0ZGF0ZWQgV3JpdGFibGVTdHJlYW0g
QVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMjE1MTgxKQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc0LDcgKzc0LDYgQEAgcHVibGljOgogI2VuZGlmCiAgICAgdm9pZCBjb250aW51ZVdpbGxTZW5k
UmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiBuZXdSZXF1ZXN0KTsKIAotICAgIFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlciogYnVmZmVyZWREYXRhKCkgeyByZXR1cm4gbV9idWZmZXJlZERh
dGEuZ2V0KCk7IH0KICAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzcG9uc2U7IH0KIAogICAgIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJiBjb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgeyByZXR1cm4gbV9jb25uZWN0
aW9uOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViUHJlZmVyZW5jZXNTdG9yZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJlbmNlc1N0b3Jl
LmgJKHJldmlzaW9uIDIxNTE4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcmVmZXJl
bmNlc1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByZWZlcmVuY2VzU3Rv
cmVfaAotI2RlZmluZSBXZWJQcmVmZXJlbmNlc1N0b3JlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiRGVjb2Rlci5oIgogI2luY2x1ZGUgIkVuY29kZXIuaCIKQEAgLTE4Myw1ICsxODIsMyBA
QCBzdHJ1Y3QgV2ViUHJlZmVyZW5jZXNTdG9yZSB7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFdlYlByZWZlcmVuY2VzU3RvcmVfaApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAyMTUxODEpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIFJlZjxXZWJQcmVmZXJlbmNlcz4gV2ViUHJlZmVyZW5jZXM6OmNy
ZWEKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQcmVmZXJlbmNlcyhpZGVudGlmaWVyLCBr
ZXlQcmVmaXgsIGdsb2JhbERlYnVnS2V5UHJlZml4KSk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViUHJl
ZmVyZW5jZXM+IFdlYlByZWZlcmVuY2VzOjpjcmVhdGVXaXRoTGVnYWN5RGVmYXVsdHMoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGtleVByZWZpeCwgY29uc3QgU3RyaW5n
JiBnbG9iYWxEZWJ1Z0tleVByZWZpeCkKK1JlZjxXZWJQcmVmZXJlbmNlcz4gV2ViUHJlZmVyZW5j
ZXM6OmNyZWF0ZVdpdGhMZWdhY3lEZWZhdWx0cyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYga2V5UHJlZml4LCBjb25zdCBTdHJpbmcmIGdsb2JhbERlYnVnS2V5UHJlZml4
KQogewogICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBXZWJQcmVmZXJlbmNlczo6Y3JlYXRlKGlkZW50
aWZpZXIsIGtleVByZWZpeCwgZ2xvYmFsRGVidWdLZXlQcmVmaXgpOwogICAgIC8vIEZJWE1FOiBU
aGUgcmVnaXN0ZXJEZWZhdWx0Li4uVmFsdWVGb3JLZXkgbWFjaGluZXJ5IGlzIHVubmVjZXNzYXJp
bHkgaGVhdnl3ZWlnaHQgYW5kIGNvbXBsaWNhdGVkLgpAQCAtNTMsNyArNTMsNyBAQCBQYXNzUmVm
UHRyPFdlYlByZWZlcmVuY2VzPiBXZWJQcmVmZXJlbmNlCiAgICAgcHJlZmVyZW5jZXMtPnJlZ2lz
dGVyRGVmYXVsdEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YUVuYWJsZWRG
b3JMb2NhbEZpbGVzS2V5KCksIHRydWUpOwogICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1
bHRCb29sVmFsdWVGb3JLZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnBsdWdpbnNFbmFibGVkS2V5KCks
IHRydWUpOwogICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRVSW50MzJWYWx1ZUZvcktl
eShXZWJQcmVmZXJlbmNlc0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5KCksIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2UpOwotICAgIHJldHVybiBXVEZNb3ZlKHBy
ZWZlcmVuY2VzKTsKKyAgICByZXR1cm4gcHJlZmVyZW5jZXM7CiB9CiAKIFdlYlByZWZlcmVuY2Vz
OjpXZWJQcmVmZXJlbmNlcyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
a2V5UHJlZml4LCBjb25zdCBTdHJpbmcmIGdsb2JhbERlYnVnS2V5UHJlZml4KQpAQCAtNzcsNyAr
NzcsNyBAQCBXZWJQcmVmZXJlbmNlczo6fldlYlByZWZlcmVuY2VzKCkKICAgICBBU1NFUlQobV9w
YWdlcy5pc0VtcHR5KCkpOwogfQogCi1QYXNzUmVmUHRyPFdlYlByZWZlcmVuY2VzPiBXZWJQcmVm
ZXJlbmNlczo6Y29weSgpIGNvbnN0CitSZWY8V2ViUHJlZmVyZW5jZXM+IFdlYlByZWZlcmVuY2Vz
Ojpjb3B5KCkgY29uc3QKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQcmVmZXJlbmNl
cygqdGhpcykpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZlcmVu
Y2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZlcmVu
Y2VzLmgJKHJldmlzaW9uIDIxNTE4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJQcmVmZXJlbmNlc19o
Ci0jZGVmaW5lIFdlYlByZWZlcmVuY2VzX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJ
RXhwZXJpbWVudGFsRmVhdHVyZS5oIgogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgpAQCAtMzIsNyAr
MzEsNiBAQAogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzRGVmaW5pdGlvbnMuaCIKICNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2RlZmlu
ZSBERUNMQVJFX1BSRUZFUkVOQ0VfR0VUVEVSX0FORF9TRVRURVJTKEtleVVwcGVyLCBLZXlMb3dl
ciwgVHlwZU5hbWUsIFR5cGUsIERlZmF1bHRWYWx1ZSwgSHVtYW5SZWFkYWJsZU5hbWUsIEh1bWFu
UmVhZGFibGVEZXNjcmlwdGlvbikgXApAQCAtNDYsMTQgKzQ0LDE0IEBAIGNsYXNzIFdlYlBhZ2VQ
cm94eTsKIGNsYXNzIFdlYlByZWZlcmVuY2VzIDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6
Ok9iamVjdDo6VHlwZTo6UHJlZmVyZW5jZXM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFdl
YlByZWZlcmVuY2VzPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIGtleVByZWZpeCwgY29uc3QgU3RyaW5nJiBnbG9iYWxEZWJ1Z0tleVByZWZpeCk7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViUHJlZmVyZW5jZXM+IGNyZWF0ZVdpdGhMZWdhY3lEZWZhdWx0
cyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5UHJlZml4LCBjb25z
dCBTdHJpbmcmIGdsb2JhbERlYnVnS2V5UHJlZml4KTsKKyAgICBzdGF0aWMgUmVmPFdlYlByZWZl
cmVuY2VzPiBjcmVhdGVXaXRoTGVnYWN5RGVmYXVsdHMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBTdHJpbmcmIGtleVByZWZpeCwgY29uc3QgU3RyaW5nJiBnbG9iYWxEZWJ1Z0tleVBy
ZWZpeCk7CiAKICAgICBleHBsaWNpdCBXZWJQcmVmZXJlbmNlcyhjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYga2V5UHJlZml4LCBjb25zdCBTdHJpbmcmIGdsb2JhbERlYnVn
S2V5UHJlZml4KTsKICAgICBXZWJQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlcyYpOwog
CiAgICAgdmlydHVhbCB+V2ViUHJlZmVyZW5jZXMoKTsKIAotICAgIFBhc3NSZWZQdHI8V2ViUHJl
ZmVyZW5jZXM+IGNvcHkoKSBjb25zdDsKKyAgICBSZWY8V2ViUHJlZmVyZW5jZXM+IGNvcHkoKSBj
b25zdDsKIAogICAgIHZvaWQgYWRkUGFnZShXZWJQYWdlUHJveHkmKTsKICAgICB2b2lkIHJlbW92
ZVBhZ2UoV2ViUGFnZVByb3h5Jik7CkBAIC0xMTAsNSArMTA4LDMgQEAgcHJpdmF0ZToKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViUHJlZmVyZW5jZXNfaApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElIaXRUZXN0UmVzdWx0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhpdFRlc3RSZXN1bHQu
Y3BwCShyZXZpc2lvbiAyMTUxODEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQ
SUhpdFRlc3RSZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw5IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgQVBJIHsKIAotUGFzc1JlZlB0cjxIaXRU
ZXN0UmVzdWx0PiBIaXRUZXN0UmVzdWx0OjpjcmVhdGUoY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0
UmVzdWx0RGF0YSYgaGl0VGVzdFJlc3VsdERhdGEpCitSZWY8SGl0VGVzdFJlc3VsdD4gSGl0VGVz
dFJlc3VsdDo6Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEmIGhpdFRl
c3RSZXN1bHREYXRhKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGl0VGVzdFJlc3VsdCho
aXRUZXN0UmVzdWx0RGF0YSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhpdFRlc3RSZXN1
bHQoaGl0VGVzdFJlc3VsdERhdGEpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhpdFRlc3RSZXN1bHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUhpdFRlc3RSZXN1bHQuaAkocmV2
aXNpb24gMjE1MTgxKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElIaXRUZXN0
UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDggKzE3LDcgQEAKICAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgQVBJSGl0VGVzdFJlc3VsdF9oCi0jZGVm
aW5lIEFQSUhpdFRlc3RSZXN1bHRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKQEAgLTI4LDcgKzI3LDYgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtNDksNyArNDcsNyBAQCBjbGFzcyBXZWJGcmFtZTsKIAogY2xhc3MgSGl0VGVzdFJlc3Vs
dCA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkhpdFRlc3RSZXN1
bHQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxIaXRUZXN0UmVzdWx0PiBjcmVh
dGUoY29uc3QgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0RGF0YSYpOworICAgIHN0YXRpYyBSZWY8
SGl0VGVzdFJlc3VsdD4gY3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdERhdGEm
KTsKIAogICAgIFdURjo6U3RyaW5nIGFic29sdXRlSW1hZ2VVUkwoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuYWJzb2x1dGVJbWFnZVVSTDsgfQogICAgIFdURjo6U3RyaW5nIGFic29sdXRlUERGVVJM
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmFic29sdXRlUERGVVJMOyB9CkBAIC04Niw1ICs4NCwz
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8vIEFQSUhp
dFRlc3RSZXN1bHRfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1ByZWZlcmVuY2VzLmNwcAkocmV2aXNpb24gMjE1MTgxKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
OSArNDIsMTkgQEAgV0tUeXBlSUQgV0tQcmVmZXJlbmNlc0dldFR5cGVJRCgpCiBXS1ByZWZlcmVu
Y2VzUmVmIFdLUHJlZmVyZW5jZXNDcmVhdGUoKQogewogICAgIGF1dG8gcHJlZmVyZW5jZXMgPSBX
ZWJQcmVmZXJlbmNlczo6Y3JlYXRlV2l0aExlZ2FjeURlZmF1bHRzKFN0cmluZygpLCAiV2ViS2l0
Mi4iLCAiV2ViS2l0Mi4iKTsKLSAgICByZXR1cm4gdG9BUEkocHJlZmVyZW5jZXMubGVha1JlZigp
KTsKKyAgICByZXR1cm4gdG9BUEkoJnByZWZlcmVuY2VzLmxlYWtSZWYoKSk7CiB9CiAKIFdLUHJl
ZmVyZW5jZXNSZWYgV0tQcmVmZXJlbmNlc0NyZWF0ZVdpdGhJZGVudGlmaWVyKFdLU3RyaW5nUmVm
IGlkZW50aWZpZXJSZWYpCiB7CiAgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYlByZWZlcmVuY2Vz
OjpjcmVhdGVXaXRoTGVnYWN5RGVmYXVsdHModG9XVEZTdHJpbmcoaWRlbnRpZmllclJlZiksICJX
ZWJLaXQyLiIsICJXZWJLaXQyLiIpOwotICAgIHJldHVybiB0b0FQSShwcmVmZXJlbmNlcy5sZWFr
UmVmKCkpOworICAgIHJldHVybiB0b0FQSSgmcHJlZmVyZW5jZXMubGVha1JlZigpKTsKIH0KIAog
V0tQcmVmZXJlbmNlc1JlZiBXS1ByZWZlcmVuY2VzQ3JlYXRlQ29weShXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQogewogICAgIGF1dG8gcHJlZmVyZW5jZXMgPSB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5jb3B5KCk7Ci0gICAgcmV0dXJuIHRvQVBJKHByZWZlcmVuY2VzLmxlYWtSZWYo
KSk7CisgICAgcmV0dXJuIHRvQVBJKCZwcmVmZXJlbmNlcy5sZWFrUmVmKCkpOwogfQogCiB2b2lk
IFdLUHJlZmVyZW5jZXNFbmFibGVBbGxFeHBlcmltZW50YWxGZWF0dXJlcyhXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0F1dGhl
bnRpY2F0aW9uL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eS5oCShyZXZpc2lvbiAyMTUxODEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMywxMiArMjMsMTAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlfaAotI2Rl
ZmluZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBJUEMgewog
Y2xhc3MgQ29ubmVjdGlvbjsKQEAgLTczLDUgKzcxLDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViTG9hZGVy
U3RyYXRlZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViTG9hZGVyU3RyYXRlZ3kuaAkocmV2aXNpb24gMjE1MTgxKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYkxvYWRlclN0cmF0ZWd5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIFdlYkxvYWRlclN0cmF0ZWd5X2gKLSNkZWZpbmUgV2ViTG9hZGVyU3RyYXRl
Z3lfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTG9hZGVyU3RyYXRlZ3kuaD4KQEAgLTgxLDUgKzgwLDMgQEAgcHJpdmF0
ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDIxNTE4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29y
ZCgKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhUZXh0Q2hl
Y2tpbmdSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBj
dXJyZW50U2VsZWN0aW9uKQogewogICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IGdlbmVyYXRlVGV4
dENoZWNraW5nUmVxdWVzdElEKCk7Ci0gICAgbV9wYWdlLT5hZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0
KHJlcXVlc3RJRCwgJnJlcXVlc3QpOworICAgIG1fcGFnZS0+YWRkVGV4dENoZWNraW5nUmVxdWVz
dChyZXF1ZXN0SUQsIHJlcXVlc3QpOwogCiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJlcXVlc3RDaGVja2luZ09mU3RyaW5nKHJlcXVlc3RJRCwgcmVxdWVzdC5kYXRh
KCksIGluc2VydGlvblBvaW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oY3VycmVudFNlbGVjdGlvbikp
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDIxNTE4MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE5Nyw5ICs1MTk3LDkgQEAgYm9v
bCBXZWJQYWdlOjpjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBXZWJQYWdlOjphZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHVpbnQ2NF90IHJlcXVl
c3RJRCwgUGFzc1JlZlB0cjxUZXh0Q2hlY2tpbmdSZXF1ZXN0PiByZXF1ZXN0KQordm9pZCBXZWJQ
YWdlOjphZGRUZXh0Q2hlY2tpbmdSZXF1ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgUmVmPFRleHRD
aGVja2luZ1JlcXVlc3Q+JiYgcmVxdWVzdCkKIHsKLSAgICBtX3BlbmRpbmdUZXh0Q2hlY2tpbmdS
ZXF1ZXN0TWFwLmFkZChyZXF1ZXN0SUQsIHJlcXVlc3QpOworICAgIG1fcGVuZGluZ1RleHRDaGVj
a2luZ1JlcXVlc3RNYXAuYWRkKHJlcXVlc3RJRCwgV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29u
c3QgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjE1MTgxKQorKysg
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNzUxLDcgKzc1MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdQYWdlc1RvUERGKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYsIHVpbnQzMl90IGZpcnN0LCB1aW50MzJf
dCBjb3VudCwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkcmF3UGFnZXNUb1BERklt
cGwodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiwgdWludDMyX3QgZmlyc3QsIHVp
bnQzMl90IGNvdW50LCBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4mIHBkZlBhZ2VEYXRhKTsK
ICNpZiBQTEFURk9STShJT1MpCi0gICAgdm9pZCBjb21wdXRlUGFnZXNGb3JQcmludGluZ0FuZERy
YXdUb1BERih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mLCB1aW50NjRfdCBjYWxs
YmFja0lELCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdlOjpDb21wdXRlUGFnZXNGb3JQcmlu
dGluZ0FuZERyYXdUb1BERjo6RGVsYXllZFJlcGx5Pik7CisgICAgdm9pZCBjb21wdXRlUGFnZXNG
b3JQcmludGluZ0FuZERyYXdUb1BERih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8m
LCB1aW50NjRfdCBjYWxsYmFja0lELCBSZWY8TWVzc2FnZXM6OldlYlBhZ2U6OkNvbXB1dGVQYWdl
c0ZvclByaW50aW5nQW5kRHJhd1RvUERGOjpEZWxheWVkUmVwbHk+JiYpOwogI2VuZGlmCiAjZWxp
ZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBkcmF3UGFnZXNGb3JQcmludGluZyh1aW50NjRfdCBm
cmFtZUlELCBjb25zdCBQcmludEluZm8mLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKQEAgLTg3OCw3
ICs4NzgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBTdHJp
bmcmIE1JTUVUeXBlKSBjb25zdDsKIAotICAgIHZvaWQgYWRkVGV4dENoZWNraW5nUmVxdWVzdCh1
aW50NjRfdCByZXF1ZXN0SUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVz
dD4pOworICAgIHZvaWQgYWRkVGV4dENoZWNraW5nUmVxdWVzdCh1aW50NjRfdCByZXF1ZXN0SUQs
IFJlZjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PiYmKTsKICAgICB2b2lkIGRpZEZpbmlz
aENoZWNraW5nVGV4dCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdSZXN1bHQ+Jik7CiAgICAgdm9pZCBkaWRDYW5jZWxDaGVja2luZ1RleHQodWlu
dDY0X3QgcmVxdWVzdElEKTsKIApAQCAtOTk1LDEyICs5OTUsMTIgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZUZvckNTU1ZpZXdwb3J0VW5pdHMoKTsKIAogICAgIHN0YXRp
YyB2b2lkIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcoV2ViQ29yZTo6RnJhbWVWaWV3
KiwgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+Jik7Ci0gICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gcmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiwgU2VsZWN0aW9uRmxh
Z3MmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckJsb2NrQXRQb2lu
dChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
cmFuZ2VGb3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
Y29uc3QgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiwgU2VsZWN0aW9uRmxhZ3MmKTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CiAgICAgdm9pZCBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0Zv
ckhhbmRsZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
LCBmbG9hdCYgZ3Jvd1RocmVzaG9sZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCk7Ci0gICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY2hhbmdlQmxvY2tTZWxlY3Rpb24oY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hv
bGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQsIFNlbGVjdGlvbkZsYWdzJik7Ci0gICAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoV2ViQ29yZTo6UmFu
Z2UqLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShXZWJDb3JlOjpSYW5nZSogY3VycmVudFJh
bmdlLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmKTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IGNoYW5nZUJsb2NrU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBm
bG9hdCYgc2hyaW5rVGhyZXNob2xkLCBTZWxlY3Rpb25GbGFncyYpOworICAgIFJlZjxXZWJDb3Jl
OjpSYW5nZT4gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoV2ViQ29yZTo6UmFuZ2UmLCBTZWxlY3Rp
b25IYW5kbGVQb3NpdGlvbik7CisgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBjb250cmFjdGVkUmFu
Z2VGcm9tSGFuZGxlKFdlYkNvcmU6OlJhbmdlJiBjdXJyZW50UmFuZ2UsIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uLCBTZWxlY3Rpb25GbGFncyYpOwogICAgIHZvaWQgZ2V0QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKTsKICAgICB2b2lkIHBsYXRmb3JtSW5p
dGlhbGl6ZUFjY2Vzc2liaWxpdHkoKTsKICAgICB2b2lkIGhhbmRsZVN5bnRoZXRpY0NsaWNrKFdl
YkNvcmU6Ok5vZGUqIG5vZGVSZXNwb25kaW5nVG9DbGljaywgY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgbG9jYXRpb24pOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNlbmRUYXBIaWdobGlnaHRGb3JOb2RlSWZOZWNlc3NhcnkodWludDY0X3QgcmVxdWVzdElELCBX
ZWJDb3JlOjpOb2RlKik7CiAgICAgdm9pZCByZXNldFRleHRBdXRvc2l6aW5nKCk7CiAgICAgV2Vi
Q29yZTo6VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2lu
dChjb25zdCBXZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50
ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJh
bmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5n
V2l0aEFzc2lzdGVkTm9kZSk7CiAgICAgYm9vbCBzaG91bGRTd2l0Y2hUb0Jsb2NrTW9kZUZvckhh
bmRsZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgaGFuZGxlUG9pbnQsIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHN3aXRjaFRvQmxvY2tTZWxl
Y3Rpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb24pOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNp
b24gMjE1MTgxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsNyArOTQxLDcgQEAgc3RhdGljIGJvb2wg
aGFzQ3VzdG9tTGluZUhlaWdodChOb2RlJiBubwogICAgIHJldHVybiByZW5kZXJlciAmJiByZW5k
ZXJlci0+c3R5bGUoKS5saW5lSGVpZ2h0KCkuaXNTcGVjaWZpZWQoKTsKIH0KICAgICAKLVBhc3NS
ZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIFNlbGVj
dGlvbkZsYWdzJiBmbGFncykKK1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxl
Y3Rpb25BdFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmIGZsYWdzKQogewogICAgIEhpdFRlc3RSZXN1
bHQgcmVzdWx0ID0gbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVz
dWx0QXRQb2ludCgocG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVx
dWVzdDo6QWN0aXZlIHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29u
dGVudCB8IEhpdFRlc3RSZXF1ZXN0OjpBbGxvd0NoaWxkRnJhbWVDb250ZW50KTsKIApAQCAtMTAx
NCw3ICsxMDE0LDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZQog
ICAgIHJldHVybiByYW5nZS0+Y29sbGFwc2VkKCkgPyBudWxscHRyIDogcmFuZ2U7CiB9CiAKLVBh
c3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IEludFBv
aW50JiBwb2ludCkKK1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0UG9pbnQo
Y29uc3QgSW50UG9pbnQmIHBvaW50KQogewogICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCgocG9p
bnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwg
SGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCB8IEhpdFRlc3RS
ZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyk7CiAKQEAgLTEzMjAsOSArMTMyMCw5IEBAIHN0YXRpYyBp
bmxpbmUgSW50UG9pbnQgY29tcHV0ZUVkZ2VDZW50ZXIKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8
UmFuZ2U+IFdlYlBhZ2U6OmV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKFJhbmdlKiBjdXJyZW50UmFu
Z2UsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQorUmVmPFJhbmdlPiBX
ZWJQYWdlOjpleHBhbmRlZFJhbmdlRnJvbUhhbmRsZShSYW5nZSYgY3VycmVudFJhbmdlLCBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKIHsKLSAgICBJbnRSZWN0IGN1cnJl
bnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShjdXJyZW50UmFuZ2UpOworICAgIEludFJlY3Qg
Y3VycmVudEJveCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKCZjdXJyZW50UmFuZ2UpOwogICAgIElu
dFBvaW50IGVkZ2VDZW50ZXIgPSBjb21wdXRlRWRnZUNlbnRlcihjdXJyZW50Qm94LCBoYW5kbGVQ
b3NpdGlvbik7CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heERpc3RhbmNlID0gMTAwMDsKICAg
ICBjb25zdCBmbG9hdCBtdWx0aXBsZSA9IHBvd2YobWF4RGlzdGFuY2UsIDEuMC8obWF4SGl0VGVz
dHMgLSAxKSk7CkBAIC0xMzU5LDE1ICsxMzU5LDE1IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBh
Z2U6OmV4cGFuZGVkUmFuZ2UKIAogICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlOwogICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlQXRQb3NpdGlvbiA9IHJhbmdlRm9yQmxvY2tBdFBvaW50
KHRlc3RQb2ludCk7Ci0gICAgICAgIGlmICghcmFuZ2VBdFBvc2l0aW9uIHx8ICZjdXJyZW50UmFu
Z2UtPm93bmVyRG9jdW1lbnQoKSAhPSAmcmFuZ2VBdFBvc2l0aW9uLT5vd25lckRvY3VtZW50KCkp
CisgICAgICAgIGlmICghcmFuZ2VBdFBvc2l0aW9uIHx8ICZjdXJyZW50UmFuZ2Uub3duZXJEb2N1
bWVudCgpICE9ICZyYW5nZUF0UG9zaXRpb24tPm93bmVyRG9jdW1lbnQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChyYW5nZUF0UG9zaXRpb24tPmNvbnRhaW5zKCpjdXJy
ZW50UmFuZ2UpKQorICAgICAgICBpZiAocmFuZ2VBdFBvc2l0aW9uLT5jb250YWlucyhjdXJyZW50
UmFuZ2UpKQogICAgICAgICAgICAgbmV3UmFuZ2UgPSByYW5nZUF0UG9zaXRpb247Ci0gICAgICAg
IGVsc2UgaWYgKGN1cnJlbnRSYW5nZS0+Y29udGFpbnMoKnJhbmdlQXRQb3NpdGlvbi5nZXQoKSkp
Ci0gICAgICAgICAgICBuZXdSYW5nZSA9IGN1cnJlbnRSYW5nZTsKKyAgICAgICAgZWxzZSBpZiAo
Y3VycmVudFJhbmdlLmNvbnRhaW5zKCpyYW5nZUF0UG9zaXRpb24uZ2V0KCkpKQorICAgICAgICAg
ICAgbmV3UmFuZ2UgPSAmY3VycmVudFJhbmdlOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBu
ZXdSYW5nZSA9IHVuaW9uRE9NUmFuZ2VzKGN1cnJlbnRSYW5nZSwgcmFuZ2VBdFBvc2l0aW9uLmdl
dCgpKTsKKyAgICAgICAgICAgIG5ld1JhbmdlID0gdW5pb25ET01SYW5nZXMoJmN1cnJlbnRSYW5n
ZSwgcmFuZ2VBdFBvc2l0aW9uLmdldCgpKTsKIAogICAgICAgICBJbnRSZWN0IGNvcHlSZWN0ID0g
c2VsZWN0aW9uQm94Rm9yUmFuZ2UobmV3UmFuZ2UuZ2V0KCkpOwogCkBAIC0xNDA4LDE4ICsxNDA4
LDE4IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmV4cGFuZGVkUmFuZ2UKICAgICB9CiAK
ICAgICBpZiAoYmVzdFJhbmdlKQotICAgICAgICByZXR1cm4gYmVzdFJhbmdlOworICAgICAgICBy
ZXR1cm4gYmVzdFJhbmdlLnJlbGVhc2VOb25OdWxsKCk7CiAKICAgICByZXR1cm4gY3VycmVudFJh
bmdlOwogfQogCi1QYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpjb250cmFjdGVkUmFuZ2VGcm9t
SGFuZGxlKFJhbmdlKiBjdXJyZW50UmFuZ2UsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRs
ZVBvc2l0aW9uLCBTZWxlY3Rpb25GbGFncyYgZmxhZ3MpCitSZWY8UmFuZ2U+IFdlYlBhZ2U6OmNv
bnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2UmIGN1cnJlbnRSYW5nZSwgU2VsZWN0aW9uSGFu
ZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIFNlbGVjdGlvbkZsYWdzJiBmbGFncykKIHsKICAg
ICAvLyBTaHJpbmtpbmcgd2l0aCBhIGJhc2UgYW5kIGV4dGVudCB3aWxsIGFsd2F5cyBnaXZlIGJl
dHRlciByZXN1bHRzLiBJZiB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwKICAgICAvLyBz
ZWUgaWYgd2UgY2FuIGJyZWFrIHRoYXQgZG93biB0byBhIGJhc2UgYW5kIGV4dGVudC4gU2hyaW5r
aW5nIGJhc2UgYW5kIGV4dGVudCBpcyBjb21wYXJhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC4KICAg
ICAvLyBTaHJpbmtpbmcgZG93biB0byBhbm90aGVyIGVsZW1lbnQgaXMgdW5saWtlbHkgdG8gbW92
ZSBqdXN0IG9uZSBlZGdlLCBidXQgd2UgY2FuIHRyeSB0aGF0IGFzIGEgZmFsbGJhY2suCiAKLSAg
ICBJbnRSZWN0IGN1cnJlbnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShjdXJyZW50UmFuZ2Up
OworICAgIEludFJlY3QgY3VycmVudEJveCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKCZjdXJyZW50
UmFuZ2UpOwogICAgIEludFBvaW50IGVkZ2VDZW50ZXIgPSBjb21wdXRlRWRnZUNlbnRlcihjdXJy
ZW50Qm94LCBoYW5kbGVQb3NpdGlvbik7CiAgICAgZmxhZ3MgPSBJc0Jsb2NrU2VsZWN0aW9uOwog
CkBAIC0xNDc5LDEzICsxNDc5LDEzIEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRy
YWN0ZWRSYW4KICAgICAgICAgZGlzdGFuY2UgKj0gbXVsdGlwbGU7CiAKICAgICAgICAgUmVmUHRy
PFJhbmdlPiBuZXdSYW5nZSA9IHJhbmdlRm9yQmxvY2tBdFBvaW50KHRlc3RQb2ludCk7Ci0gICAg
ICAgIGlmICghbmV3UmFuZ2UgfHwgJm5ld1JhbmdlLT5vd25lckRvY3VtZW50KCkgIT0gJmN1cnJl
bnRSYW5nZS0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICBpZiAoIW5ld1JhbmdlIHx8ICZuZXdS
YW5nZS0+b3duZXJEb2N1bWVudCgpICE9ICZjdXJyZW50UmFuZ2Uub3duZXJEb2N1bWVudCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKGhhbmRsZVBvc2l0aW9uID09IFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3AgfHwgaGFuZGxlUG9zaXRpb24gPT0gU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OkxlZnQpCi0gICAgICAgICAgICBuZXdSYW5nZSA9IFJhbmdlOjpjcmVh
dGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbmV3UmFuZ2UtPmVuZFBv
c2l0aW9uKCksIGN1cnJlbnRSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBuZXdS
YW5nZSA9IFJhbmdlOjpjcmVhdGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgbmV3UmFuZ2UtPmVuZFBvc2l0aW9uKCksIGN1cnJlbnRSYW5nZS5lbmRQb3NpdGlvbigpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1Jh
bmdlLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIGN1cnJlbnRSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCBuZXdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIG5ld1Jhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBj
dXJyZW50UmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBuZXdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsK
IAogICAgICAgICBJbnRSZWN0IGNvcHlSZWN0ID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UobmV3UmFu
Z2UuZ2V0KCkpOwogICAgICAgICBpZiAoY29weVJlY3QuaXNFbXB0eSgpKSB7CkBAIC0xNTA4LDcg
KzE1MDgsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpjb250cmFjdGVkUmFuCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gaXNC
ZXR0ZXJDaG9pY2UgJiYgIWFyZVJhbmdlc0VxdWFsKG5ld1JhbmdlLmdldCgpLCBjdXJyZW50UmFu
Z2UpOworICAgICAgICBpc0JldHRlckNob2ljZSA9IGlzQmV0dGVyQ2hvaWNlICYmICFhcmVSYW5n
ZXNFcXVhbChuZXdSYW5nZS5nZXQoKSwgJmN1cnJlbnRSYW5nZSk7CiAgICAgICAgIGlmIChiZXN0
UmFuZ2UgJiYgaXNCZXR0ZXJDaG9pY2UpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9z
aXRpb24pIHsKICAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoK
QEAgLTE1MjksNyArMTUyOSw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0
ZWRSYW4KICAgICB9CiAKICAgICBpZiAoIWJlc3RSYW5nZSkKLSAgICAgICAgYmVzdFJhbmdlID0g
Y3VycmVudFJhbmdlOworICAgICAgICBiZXN0UmFuZ2UgPSAmY3VycmVudFJhbmdlOwogICAgIAog
ICAgIC8vIElmIHdlIGNhbiBzaHJpbmsgZG93biB0byB0ZXh0IG9ubHksIHRoZSBvbmx5IHJlYXNv
biB3ZSB3b3VsZG4ndCBpcyB0aGF0CiAgICAgLy8gdGhlcmUgYXJlIG11bHRpcGxlIHN1Yi1lbGVt
ZW50IGJsb2NrcyBiZW5lYXRoIHVzLiAgSWYgd2UgZGlkbid0IGZpbmQKQEAgLTE1MzgsNyArMTUz
OCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW4KICAgICBpZiAo
Y2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKCpiZXN0UmFuZ2UuZ2V0KCkpKQogICAgICAgICBmbGFn
cyA9IE5vbmU7CiAKLSAgICByZXR1cm4gYmVzdFJhbmdlOworICAgIHJldHVybiBiZXN0UmFuZ2Uu
cmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpjb21wdXRlRXhwYW5kQW5kU2hy
aW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIFNlbGVjdGlvbkhh
bmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9sZCwgZmxvYXQm
IHNocmlua1RocmVzaG9sZCkKQEAgLTE1NDksMTIgKzE1NDksMTIgQEAgdm9pZCBXZWJQYWdlOjpj
b21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZQogICAgIGlmICghY3VycmVudFJhbmdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGV4cGFuZGVkUmFuZ2UgPSBleHBhbmRlZFJh
bmdlRnJvbUhhbmRsZShjdXJyZW50UmFuZ2UuZ2V0KCksIGhhbmRsZVBvc2l0aW9uKTsKKyAgICBS
ZWY8UmFuZ2U+IGV4cGFuZGVkUmFuZ2UgPSBleHBhbmRlZFJhbmdlRnJvbUhhbmRsZSgqY3VycmVu
dFJhbmdlLCBoYW5kbGVQb3NpdGlvbik7CiAgICAgU2VsZWN0aW9uRmxhZ3MgZmxhZ3M7Ci0gICAg
UmVmUHRyPFJhbmdlPiBjb250cmFjdGVkUmFuZ2UgPSBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxl
KGN1cnJlbnRSYW5nZS5nZXQoKSwgaGFuZGxlUG9zaXRpb24sIGZsYWdzKTsKKyAgICBSZWZQdHI8
UmFuZ2U+IGNvbnRyYWN0ZWRSYW5nZSA9IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJl
bnRSYW5nZSwgaGFuZGxlUG9zaXRpb24sIGZsYWdzKTsKIAogICAgIEludFJlY3QgY3VycmVudEJv
dW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSk7Ci0gICAgSW50
UmVjdCBleHBhbmRlZEJvdW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGV4cGFuZGVkUmFuZ2Uu
Z2V0KCkpOworICAgIEludFJlY3QgZXhwYW5kZWRCb3VuZHMgPSBzZWxlY3Rpb25Cb3hGb3JSYW5n
ZShleHBhbmRlZFJhbmdlLnB0cigpKTsKICAgICBJbnRSZWN0IGNvbnRyYWN0ZWRCb3VuZHMgPSBz
ZWxlY3Rpb25Cb3hGb3JSYW5nZShjb250cmFjdGVkUmFuZ2UuZ2V0KCkpOwogCiAgICAgZmxvYXQg
Y3VycmVudDsKQEAgLTE2MDIsNyArMTYwMiw3IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUV4cGFu
ZEFuZFNocmlua1RocmUKIAogICAgIGdyb3dUaHJlc2hvbGQgPSBjdXJyZW50ICsgKGV4cGFuZGVk
IC0gY3VycmVudCkgKiBmcmFjdGlvblRvR3JvdzsKICAgICBzaHJpbmtUaHJlc2hvbGQgPSBjdXJy
ZW50ICsgKGNvbnRyYWN0ZWQgLSBjdXJyZW50KSAqICgxIC0gZnJhY3Rpb25Ub0dyb3cpOwotICAg
IGlmIChhcmVSYW5nZXNFcXVhbChleHBhbmRlZFJhbmdlLmdldCgpLCBjdXJyZW50UmFuZ2UuZ2V0
KCkpKQorICAgIGlmIChhcmVSYW5nZXNFcXVhbChleHBhbmRlZFJhbmdlLnB0cigpLCBjdXJyZW50
UmFuZ2UuZ2V0KCkpKQogICAgICAgICBncm93VGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogCiAg
ICAgaWYgKGZsYWdzICYgSXNCbG9ja1NlbGVjdGlvbiAmJiBhcmVSYW5nZXNFcXVhbChjb250cmFj
dGVkUmFuZ2UuZ2V0KCksIGN1cnJlbnRSYW5nZS5nZXQoKSkpCkBAIC0xNjIzLDEzICsxNjIzLDEz
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFeHBhbmQoU2VsZWN0aW8KICAgICB9CiB9CiAK
LVBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IFdlYlBhZ2U6OmNoYW5nZUJsb2NrU2VsZWN0aW9u
KGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9z
aXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkLCBTZWxl
Y3Rpb25GbGFncyYgZmxhZ3MpCitSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IFdlYlBhZ2U6OmNoYW5n
ZUJsb2NrU2VsZWN0aW9uKGNvbnN0IEludFBvaW50JiBwb2ludCwgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb24gaGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5r
VGhyZXNob2xkLCBTZWxlY3Rpb25GbGFncyYgZmxhZ3MpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBSZWZQ
dHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID8gbV9jdXJy
ZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghY3VycmVudFJhbmdlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gc2hvdWxkRXhwYW5kKGhh
bmRsZVBvc2l0aW9uLCBzZWxlY3Rpb25Cb3hGb3JSYW5nZShjdXJyZW50UmFuZ2UuZ2V0KCkpLCBw
b2ludCkgPyBleHBhbmRlZFJhbmdlRnJvbUhhbmRsZShjdXJyZW50UmFuZ2UuZ2V0KCksIGhhbmRs
ZVBvc2l0aW9uKSA6IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoY3VycmVudFJhbmdlLmdldCgp
LCBoYW5kbGVQb3NpdGlvbiwgZmxhZ3MpOworICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBz
aG91bGRFeHBhbmQoaGFuZGxlUG9zaXRpb24sIHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRS
YW5nZS5nZXQoKSksIHBvaW50KSA/IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKCpjdXJyZW50UmFu
Z2UsIGhhbmRsZVBvc2l0aW9uKSA6IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRS
YW5nZSwgaGFuZGxlUG9zaXRpb24sIGZsYWdzKTsKIAogICAgIGlmIChuZXdSYW5nZSkgewogICAg
ICAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG5ld1JhbmdlOwpAQCAtMTk1NCw3ICsxOTU0
LDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdAogICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKIH0KIAot
UGFzc1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JHcmFudWxhcml0eUF0UG9pbnQoY29u
c3QgRnJhbWUmIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90
IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKQorUmVmUHRy
PFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChjb25zdCBGcmFtZSYg
ZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJp
dHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpCiB7CiAgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGZy
YW1lLCBwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOwogCkBAIC0zMjUwLDcg
KzMyNTAsNyBAQCB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoQXN5bmNocm9ub3VzVG91Y2hFCiB9CiAj
ZW5kaWYKIAotdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ0FuZERyYXdUb1BE
Rih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgdWludDY0X3Qg
Y2FsbGJhY2tJRCwgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUGFnZTo6Q29tcHV0ZVBhZ2VzRm9y
UHJpbnRpbmdBbmREcmF3VG9QREY6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCit2b2lkIFdlYlBhZ2U6
OmNvbXB1dGVQYWdlc0ZvclByaW50aW5nQW5kRHJhd1RvUERGKHVpbnQ2NF90IGZyYW1lSUQsIGNv
bnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCB1aW50NjRfdCBjYWxsYmFja0lELCBSZWY8TWVzc2Fn
ZXM6OldlYlBhZ2U6OkNvbXB1dGVQYWdlc0ZvclByaW50aW5nQW5kRHJhd1RvUERGOjpEZWxheWVk
UmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgaWYgKHByaW50SW5mby5zbmFwc2hvdEZpcnN0UGFnZSkg
ewogICAgICAgICByZXBseS0+c2VuZCgxKTsK
</data>
<flag name="review"
          id="328185"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>