<?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>155817</bug_id>
          
          <creation_ts>2016-03-23 16:00:18 -0700</creation_ts>
          <short_desc>CSP: Simplify logic for checking policies</short_desc>
          <delta_ts>2016-03-23 19:41:30 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mkwst</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1177520</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-23 16:00:18 -0700</bug_when>
    <thetext>Currently we have various static template functions in ContentSecurityPolicy.cpp to check if a resource request for a particular directive violates any of the CSPs that were delivered with the document. These functions are identical up to the function F they invoke and the arguments they take and pass to F. We should look to consolidate these function into a single function that has a similar prototype as std::invoke() to remove duplication and centralize the semantics for determining a directive violation against some CSP policy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177521</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-03-23 16:01:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/25326546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177522</commentid>
    <comment_count>2</comment_count>
      <attachid>274789</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-23 16:05:33 -0700</bug_when>
    <thetext>Created attachment 274789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177586</commentid>
    <comment_count>3</comment_count>
      <attachid>274789</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-23 19:41:27 -0700</bug_when>
    <thetext>Comment on attachment 274789
Patch

Clearing flags on attachment: 274789

Committed r198613: &lt;http://trac.webkit.org/changeset/198613&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177587</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-03-23 19:41:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274789</attachid>
            <date>2016-03-23 16:05:33 -0700</date>
            <delta_ts>2016-03-23 19:41:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155817-20160323160534.patch</filename>
            <type>text/plain</type>
            <size>25558</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRkMDE2Y2Y5YjQwOWIz
NDNkMzk5MGVmM2MzMTg1ZTAxZGE1NWI3ZC4uZjQ0NzI1OWZiYzg3YTdmODMyMGUxMmRiNTM3YTUx
ODdjMTllNWRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE2LTAzLTIzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBDU1A6IFNpbXBsaWZ5IGxv
Z2ljIGZvciBjaGVja2luZyBwb2xpY2llcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1ODE3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTMyNjU0
Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb25z
b2xpZGF0ZSB0aGUgdmFyaW91cyBzdGF0aWMgdGVtcGxhdGUgZnVuY3Rpb25zIGludG8gYSBzaW5n
bGUgZnVuY3Rpb24gY2FsbGVkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxv
dygpCisgICAgICAgIHRoYXQgdGVzdHMgd2hldGhlciBhIHJlc291cmNlIHJlcXVlc3Qgd2hlbiBl
dmFsdWF0ZWQgd2l0aCByZXNwZWN0IHRvIGEgZGlyZWN0aXZlIChnaXZlbiBhcyBhIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QKKyAgICAgICAgcG9pbnRlci10by1tZW1iZXIgZnVu
Y3Rpb24pIHZpb2xhdGVzIGFueSBvZiB0aGUgQ1NQcyB0aGF0IHdlcmUgZGVsaXZlcmVkIHdpdGgg
dGhlIGRvY3VtZW50LgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlZC4gU28sIG5v
IG5ldyB0ZXN0cy4KKworICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbFBvbGljaWVz
QWxsb3dIYXNoRnJvbUNvbnRlbnQpOiBGb3JtZXJseSBuYW1lIGlzQWxsb3dlZEJ5QWxsV2l0aEhh
c2guIE1hZGUgaXQKKyAgICAgICAgYSBtZW1iZXIgZnVuY3Rpb24gc28gdGhhdCB3ZSBxdWVyeSBm
b3IgdGhlIGRvY3VtZW50IGVuY29kaW5nIGluc3RlYWQgb2YgdGFraW5nIGl0IGFzIGFuIGFyZ3Vt
ZW50LiBNb2RpZmllZAorICAgICAgICBpdCB0byB0YWtlIGEgcHJlZGljYXRlIGZ1bmN0aW9uIHRv
IHBhc3MgaXQgdG8gYWxsUG9saWNpZXNBbGxvdygpLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5OjphbGxvd0phdmFTY3JpcHRVUkxzKTogTW9kaWZpZWQgdG8gdXNlIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxvdygpLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZUV2ZW50SGFuZGxlcnMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTY3JpcHRX
aXRoTm9uY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dTdHlsZVdpdGhOb25jZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVNjcmlwdCk6IE1vZGlmaWVkIHRvIHVzZSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFsbFBvbGljaWVzQWxsb3coKSBhbmQKKyAgICAgICAgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93SGFzaEZyb21Db250ZW50KCkuCisgICAg
ICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lU3R5bGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dFdmFs
KTogTW9kaWZpZWQgdG8gdXNlIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsUG9saWNpZXNBbGxv
dygpLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0ZyYW1l
QW5jZXN0b3JzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmFsbG93UGx1Z2luVHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxvd1NjcmlwdEZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291cmNlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q2hpbGRG
cmFtZUZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeTo6YWxsb3dDaGlsZENvbnRleHRGcm9tU291cmNlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW1hZ2VGcm9tU291cmNlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U3R5bGVG
cm9tU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmFsbG93Rm9udEZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeTo6YWxsb3dNZWRpYUZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDb25uZWN0VG9Tb3VyY2UpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dGb3Jt
QWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6
OmFsbG93QmFzZVVSSSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlBbGxX
aXRoRnJhbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlBbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlBbGxXaXRoU3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNBbGxvd2VkQnlBbGxXaXRoQ29udGV4dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbFdpdGhOb25jZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbFdpdGhIYXNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzQWxsb3dlZEJ5QWxsV2l0aEhhc2hGcm9tQ29udGVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0FsbG93ZWRCeUFsbFdpdGhVUkwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojpkb2N1bWVudEVuY29kaW5n
KTogRGVsZXRlZC4gSW5jb3Jwb3JhdGVkIGl0cyBmdW5jdGlvbmFsaXR5IGludG8gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93SGFzaEZyb21Db250ZW50KCkuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmlzQWN0aXZlKTogRGVsZXRlZC4gVGhp
cyBmdW5jdGlvbiBoYXMgYmVlbiB1bnVzZWQgc2luY2UgdGhlIHJlbW92YWwgb2YgdGhlIENTUCBz
Y3JpcHQKKyAgICAgICAgaW50ZXJmYWNlIGluIDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5n
ZXNldC8xOTcxNDI+LgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5o
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0Fs
bG93KTogQWRkZWQuIFJldHVybnMgd2hldGhlciB0aGUgcHJlZGljYXRlIGZ1bmN0aW9uIGV2YWx1
YXRlcyB0byB0cnVlCisgICAgICAgIGZvciBhbGwgQ1NQIHBvbGljaWVzLgorCiAyMDE2LTAzLTIy
ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBDU1A6IE1ha2Ug
dmlvbGF0aW9uIGNvbnNvbGUgbWVzc2FnZXMgY29uY2lzZSBhbmQgY29uc2lzdGVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKaW5kZXgg
ZjI5ODk5ODE0YTk1NDk5NDM2YzQ2ZTViOGRhNDNlMWJmOTUxNDNkNS4uMzVhYjI4MDMxYWEyNGE3
Zjk1NjVlYjE5NmM0MDA0NjkyNTBmYzA5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwCkBAIC0xNzQsNTYgKzE3NCw2IEBAIGJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5Ojpwcm90b2NvbE1hdGNoZXNTZWxmKGNvbnN0IFVSTCYgdXJs
KSBjb25zdAogICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHVybC5wcm90b2NvbCgp
LCBtX3NlbGZTb3VyY2VQcm90b2NvbCk7CiB9CiAKLXRlbXBsYXRlPGJvb2wgKENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShjb25zdCBGcmFtZSYsIGNvbnN0IFVS
TCYsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1cykg
Y29uc3Q+Ci1zdGF0aWMgYm9vbCBpc0FsbG93ZWRCeUFsbFdpdGhGcmFtZShjb25zdCBDU1BEaXJl
Y3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgY29uc3QgRnJhbWUmIGZyYW1lLCBjb25zdCBVUkwm
IHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVz
IHJlcG9ydGluZ1N0YXR1cykKLXsKLSAgICBmb3IgKGF1dG8mIHBvbGljeSA6IHBvbGljaWVzKSB7
Ci0gICAgICAgIGlmICghKHBvbGljeS5nZXQoKS0+KmFsbG93ZWQpKGZyYW1lLCB1cmwsIHJlcG9y
dGluZ1N0YXR1cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi10ZW1wbGF0ZTxib29sIChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjoqYWxsb3dlZCkoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVw
b3J0aW5nU3RhdHVzKSBjb25zdD4KLXN0YXRpYyBib29sIGlzQWxsb3dlZEJ5QWxsKGNvbnN0IENT
UERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBvbGljaWVzLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKQotewotICAgIGZvciAo
YXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKLSAgICAgICAgaWYgKCEocG9saWN5LmdldCgpLT4q
YWxsb3dlZCkocmVwb3J0aW5nU3RhdHVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPGJvb2wgKENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+
Ci1zdGF0aWMgYm9vbCBpc0FsbG93ZWRCeUFsbFdpdGhTdGF0ZShjb25zdCBDU1BEaXJlY3RpdmVM
aXN0VmVjdG9yJiBwb2xpY2llcywgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKQot
ewotICAgIGZvciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKLSAgICAgICAgaWYgKCEocG9s
aWN5LmdldCgpLT4qYWxsb3dlZCkoc3RhdGUsIHJlcG9ydGluZ1N0YXR1cykpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTxi
b29sIChDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCkoY29uc3Qg
U3RyaW5nJiwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KLXN0YXRpYyBib29sIGlzQWxs
b3dlZEJ5QWxsV2l0aENvbnRleHQoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNp
ZXMsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBj
b250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5n
U3RhdHVzIHJlcG9ydGluZ1N0YXR1cykKLXsKLSAgICBmb3IgKGF1dG8mIHBvbGljeSA6IHBvbGlj
aWVzKSB7Ci0gICAgICAgIGlmICghKHBvbGljeS5nZXQoKS0+KmFsbG93ZWQpKGNvbnRleHRVUkws
IGNvbnRleHRMaW5lLCByZXBvcnRpbmdTdGF0dXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8Ym9vbCAoQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6KmFsbG93ZWQpKGNvbnN0IFN0cmluZyYgbm9uY2Up
IGNvbnN0Pgotc3RhdGljIGJvb2wgaXNBbGxvd2VkQnlBbGxXaXRoTm9uY2UoY29uc3QgQ1NQRGly
ZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNvbnN0IFN0cmluZyYgbm9uY2UpCi17Ci0gICAg
Zm9yIChhdXRvJiBwb2xpY3kgOiBwb2xpY2llcykgewotICAgICAgICBpZiAoIShwb2xpY3kuZ2V0
KCktPiphbGxvd2VkKShub25jZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgQ3J5cHRvRGlnZXN0OjpBbGdvcml0aG0gdG9D
cnlwdG9EaWdlc3RBbGdvcml0aG0oQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobSBh
bGdvcml0aG0pCiB7CiAgICAgc3dpdGNoIChhbGdvcml0aG0pIHsKQEAgLTIzOCw2NCArMTg4LDQw
IEBAIHN0YXRpYyBDcnlwdG9EaWdlc3Q6OkFsZ29yaXRobSB0b0NyeXB0b0RpZ2VzdEFsZ29yaXRo
bShDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoCiAgICAgcmV0dXJuIENyeXB0b0RpZ2VzdDo6QWxn
b3JpdGhtOjpTSEFfNTEyOwogfQogCi10ZW1wbGF0ZTxib29sIChDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCkoY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5SGFz
aCYpIGNvbnN0Pgotc3RhdGljIGJvb2wgaXNBbGxvd2VkQnlBbGxXaXRoSGFzaChjb25zdCBDU1BE
aXJlY3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5
SGFzaCYgaGFzaCkKK3RlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4KK2Jvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxQb2xpY2llc0FsbG93SGFzaEZyb21Db250ZW50KFByZWRpY2F0ZSYm
IHByZWRpY2F0ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBPcHRpb25TZXQ8Q29udGVudFNlY3Vy
aXR5UG9saWN5SGFzaEFsZ29yaXRobT4gYWxnb3JpdGhtcykgY29uc3QKIHsKLSAgICBmb3IgKGF1
dG8mIHBvbGljeSA6IHBvbGljaWVzKSB7Ci0gICAgICAgIGlmICghKHBvbGljeS5nZXQoKS0+KmFs
bG93ZWQpKGhhc2gpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbXB1dGUgdGhlIGRvY3VtZW50
IGVuY29kaW5nIG9uY2UgYW5kIGNhY2hlIGl0IGluc3RlYWQgb2YgY29tcHV0aW5nIGl0IG9uIGVh
Y2ggaW52b2NhdGlvbi4KKyAgICBUZXh0RW5jb2RpbmcgZG9jdW1lbnRFbmNvZGluZzsKKyAgICBp
ZiAoaXM8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCisgICAgICAgIGRvY3Vt
ZW50RW5jb2RpbmcgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCkudGV4dEVuY29kaW5nKCk7CisgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZ1RvVXNl
ID0gZG9jdW1lbnRFbmNvZGluZy5pc1ZhbGlkKCkgPyBkb2N1bWVudEVuY29kaW5nIDogVVRGOEVu
Y29kaW5nKCk7CiAKLXRlbXBsYXRlPGJvb2wgKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OiphbGxvd2VkKShjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoJikgY29uc3Q+
Ci1zdGF0aWMgYm9vbCBpc0FsbG93ZWRCeUFsbFdpdGhIYXNoRnJvbUNvbnRlbnQoY29uc3QgQ1NQ
RGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29u
c3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgT3B0aW9uU2V0PENvbnRlbnRTZWN1cml0eVBvbGlj
eUhhc2hBbGdvcml0aG0+IGFsZ29yaXRobXMpCi17CiAgICAgLy8gRklYTUU6IENvbXB1dGUgdGhl
IGRpZ2VzdCB3aXRoIHJlc3BlY3QgdG8gdGhlIHJhdyBieXRlcyByZWNlaXZlZCBmcm9tIHRoZSBw
YWdlLgogICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTE4ND4uCi0gICAgQ1N0cmluZyBjb250ZW50Q1N0cmluZyA9IGVuY29kaW5nLmVuY29kZShj
b250ZW50LCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgQ1N0cmluZyBjb250ZW50Q1N0
cmluZyA9IGVuY29kaW5nVG9Vc2UuZW5jb2RlKGNvbnRlbnQsIEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzKTsKICAgICBmb3IgKGF1dG8gYWxnb3JpdGhtIDogYWxnb3JpdGhtcykgewogICAgICAgICBh
dXRvIGNyeXB0b0RpZ2VzdCA9IENyeXB0b0RpZ2VzdDo6Y3JlYXRlKHRvQ3J5cHRvRGlnZXN0QWxn
b3JpdGhtKGFsZ29yaXRobSkpOwogICAgICAgICBjcnlwdG9EaWdlc3QtPmFkZEJ5dGVzKGNvbnRl
bnRDU3RyaW5nLmRhdGEoKSwgY29udGVudENTdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICBWZWN0
b3I8dWludDhfdD4gZGlnZXN0ID0gY3J5cHRvRGlnZXN0LT5jb21wdXRlSGFzaCgpOwotICAgICAg
ICBpZiAoaXNBbGxvd2VkQnlBbGxXaXRoSGFzaDxhbGxvd2VkPihwb2xpY2llcywgeyBhbGdvcml0
aG0sIGRpZ2VzdCB9KSkKKyAgICAgICAgaWYgKGFsbFBvbGljaWVzQWxsb3coc3RkOjpmb3J3YXJk
PFByZWRpY2F0ZT4ocHJlZGljYXRlKSwgc3RkOjptYWtlX3BhaXIoYWxnb3JpdGhtLCBkaWdlc3Qp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXRlbXBsYXRlPGJvb2wgKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6Oiph
bGxvd0Zyb21VUkwpKGNvbnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+Ci1zdGF0aWMgYm9vbCBpc0FsbG93ZWRCeUFsbFdp
dGhVUkwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNvbnN0IFVSTCYg
dXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXMg
cmVwb3J0aW5nU3RhdHVzKQotewotICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxk
QnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIHBvbGljeSA6IHBvbGljaWVzKSB7Ci0gICAgICAg
IGlmICghKHBvbGljeS5nZXQoKS0+KmFsbG93RnJvbVVSTCkodXJsLCByZXBvcnRpbmdTdGF0dXMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SmF2YVNjcmlwdFVSTHMoY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5l
LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdAogewotICAgIHJldHVy
biBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhDb250
ZXh0PCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0phdmFTY3JpcHRV
UkxzPihtX3BvbGljaWVzLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICBp
ZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphbGxvd0phdmFTY3JpcHRVUkxzLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVw
b3J0KTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lRXZlbnRI
YW5kbGVycyhjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJl
ciYgY29udGV4dExpbmUsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dl
ZEJ5QWxsV2l0aENvbnRleHQ8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFs
bG93SW5saW5lRXZlbnRIYW5kbGVycz4obV9wb2xpY2llcywgY29udGV4dFVSTCwgY29udGV4dExp
bmUsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6
U2VuZFJlcG9ydCk7Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgY29tcHV0ZSB0aGUgZG9jdW1l
bnQgZW5jb2Rpbmcgb25jZSBhbmQgY2FjaGUgaXQgaW5zdGVhZCBvZiBjb21wdXRpbmcgaXQgb24g
ZWFjaCBpbnZvY2F0aW9uLgotY29uc3QgVGV4dEVuY29kaW5nJiBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OmRvY3VtZW50RW5jb2RpbmcoKSBjb25zdAotewotICAgIGlmICghaXM8RG9jdW1lbnQ+KG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpCi0gICAgICAgIHJldHVybiBVVEY4RW5jb2RpbmcoKTsK
LSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCk7Ci0gICAgaWYgKFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSBk
b2N1bWVudC5kZWNvZGVyKCkpCi0gICAgICAgIHJldHVybiBkZWNvZGVyLT5lbmNvZGluZygpOwot
ICAgIHJldHVybiBVVEY4RW5jb2RpbmcoKTsKKyAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJp
dHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhbGxQb2xpY2llc0Fs
bG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0lubGluZUV2ZW50
SGFuZGxlcnMsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpOwogfQogCiBib29sIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTY3JpcHRXaXRoTm9uY2UoY29uc3QgU3RyaW5nJiBu
b25jZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QKQEAgLTMwNSw3
ICsyMzEsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTY3JpcHRXaXRoTm9u
Y2UoY29uc3QgU3RyaW5nJiBub25jZSwgYm9vbCBvdmVycgogICAgIFN0cmluZyBzdHJpcHBlZE5v
bmNlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKG5vbmNlKTsKICAgICBpZiAo
c3RyaXBwZWROb25jZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
aXNBbGxvd2VkQnlBbGxXaXRoTm9uY2U8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OmFsbG93U2NyaXB0V2l0aE5vbmNlPihtX3BvbGljaWVzLCBzdHJpcHBlZE5vbmNlKSkKKyAg
ICBpZiAoYWxsUG9saWNpZXNBbGxvdygmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YWxsb3dTY3JpcHRXaXRoTm9uY2UsIHN0cmlwcGVkTm9uY2UpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zMTcsNyArMjQzLDcgQEAgYm9vbCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93U3R5bGVXaXRoTm9uY2UoY29uc3QgU3RyaW5nJiBub25j
ZSwgYm9vbCBvdmVycmkKICAgICBTdHJpbmcgc3RyaXBwZWROb25jZSA9IHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyhub25jZSk7CiAgICAgaWYgKHN0cmlwcGVkTm9uY2UuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGlzQWxsb3dlZEJ5QWxsV2l0aE5v
bmNlPCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd1N0eWxlV2l0aE5v
bmNlPihtX3BvbGljaWVzLCBzdHJpcHBlZE5vbmNlKSkKKyAgICBpZiAoYWxsUG9saWNpZXNBbGxv
dygmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dTdHlsZVdpdGhOb25j
ZSwgc3RyaXBwZWROb25jZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KQEAgLTMyNyw5ICsyNTMsOSBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxs
b3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVAogICAgIGlm
IChvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgaWYgKCFtX2hhc2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cy5pc0VtcHR5KCkgJiYgIXNj
cmlwdENvbnRlbnQuaXNFbXB0eSgpCi0gICAgICAgICYmIGlzQWxsb3dlZEJ5QWxsV2l0aEhhc2hG
cm9tQ29udGVudDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxp
bmVTY3JpcHRXaXRoSGFzaD4obV9wb2xpY2llcywgc2NyaXB0Q29udGVudCwgZG9jdW1lbnRFbmNv
ZGluZygpLCBtX2hhc2hBbGdvcml0aG1zRm9ySW5saW5lU2NyaXB0cykpCisgICAgICAgICYmIGFs
bFBvbGljaWVzQWxsb3dIYXNoRnJvbUNvbnRlbnQoJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OmFsbG93SW5saW5lU2NyaXB0V2l0aEhhc2gsIHNjcmlwdENvbnRlbnQsIG1faGFz
aEFsZ29yaXRobXNGb3JJbmxpbmVTY3JpcHRzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
cmV0dXJuIGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRleHQ8JkNvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU2NyaXB0PihtX3BvbGljaWVzLCBjb250ZXh0VVJMLCBj
b250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5n
U3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdygmQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTY3JpcHQsIGNvbnRleHRV
UkwsIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBv
cnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6
T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGNvbnN0IFN0cmluZyYgc3R5bGVDb250ZW50LCBi
b29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdApAQCAtMzM5LDE0ICsyNjUs
MTYgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lU3R5bGUoY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEYKICAgICBpZiAobV9vdmVycmlkZUlubGluZVN0
eWxlQWxsb3dlZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFtX2hhc2hBbGdvcml0
aG1zRm9ySW5saW5lU3R5bGVzaGVldHMuaXNFbXB0eSgpICYmICFzdHlsZUNvbnRlbnQuaXNFbXB0
eSgpCi0gICAgICAgICYmIGlzQWxsb3dlZEJ5QWxsV2l0aEhhc2hGcm9tQ29udGVudDwmQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTdHlsZVdpdGhIYXNoPiht
X3BvbGljaWVzLCBzdHlsZUNvbnRlbnQsIGRvY3VtZW50RW5jb2RpbmcoKSwgbV9oYXNoQWxnb3Jp
dGhtc0ZvcklubGluZVN0eWxlc2hlZXRzKSkKKyAgICAgICAgJiYgYWxsUG9saWNpZXNBbGxvd0hh
c2hGcm9tQ29udGVudCgmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dJ
bmxpbmVTdHlsZVdpdGhIYXNoLCBzdHlsZUNvbnRlbnQsIG1faGFzaEFsZ29yaXRobXNGb3JJbmxp
bmVTdHlsZXNoZWV0cykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBpc0FsbG93
ZWRCeUFsbFdpdGhDb250ZXh0PCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojph
bGxvd0lubGluZVN0eWxlPihtX3BvbGljaWVzLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVw
b3J0KTsKKyAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdygmQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTdHlsZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUs
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0V2YWwoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBj
b25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0Fs
bG93ZWRCeUFsbFdpdGhTdGF0ZTwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
YWxsb3dFdmFsPihtX3BvbGljaWVzLCBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICBpZiAob3ZlcnJpZGVD
b250ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBh
bGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxv
d0V2YWwsIHN0YXRlLCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRp
bmdTdGF0dXM6OlNlbmRSZXBvcnQpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
YWxsb3dGcmFtZUFuY2VzdG9ycyhjb25zdCBGcmFtZSYgZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBi
b29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdApAQCAtMzU2LDc4ICsyODQs
MTEzIEBAIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0ZyYW1lQW5jZXN0b3JzKGNv
bnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgVVJMJiB1CiAgICAgRnJhbWUmIHRvcEZyYW1lID0gZnJh
bWUudHJlZSgpLnRvcCgpOwogICAgIGlmICgmZnJhbWUgPT0gJnRvcEZyYW1lKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gaXNBbGxvd2VkQnlBbGxXaXRoRnJhbWU8JkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93RnJhbWVBbmNlc3RvcnM+KG1fcG9saWNp
ZXMsIGZyYW1lLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9y
dGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7CisgICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coJkNv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93RnJhbWVBbmNlc3RvcnMsIGZy
YW1lLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0
YXR1czo6U2VuZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
d1BsdWdpblR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1
dGUsIGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBj
b25zdAogewogICAgIGlmIChvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKSB7Ci0gICAg
ICAgIGlmICghcG9saWN5LT5hbGxvd1BsdWdpblR5cGUodHlwZSwgdHlwZUF0dHJpYnV0ZSwgdXJs
LCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXM6OlNl
bmRSZXBvcnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxvdygmQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6YWxsb3dQbHVnaW5UeXBlLCB0eXBlLCB0eXBlQXR0cmlidXRlLCB1cmws
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd1NjcmlwdEZy
b21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xp
Y3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8
IGlzQWxsb3dlZEJ5QWxsV2l0aFVSTDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YWxsb3dTY3JpcHRGcm9tU291cmNlPihtX3BvbGljaWVzLCB1cmwsIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7CisgICAg
aWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0
eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojph
bGxvd1NjcmlwdEZyb21Tb3VyY2UsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKIH0KIAogYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmFsbG93T2JqZWN0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBv
dmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJp
ZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd09iamVjdEZyb21Tb3VyY2U+KG1fcG9s
aWNpZXMsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5n
U3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xp
Y3kpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1l
U2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFsbFBvbGljaWVzQWxsb3coJkNvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93T2JqZWN0RnJvbVNvdXJjZSwgdXJsLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBv
cnQpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDaGlsZEZyYW1lRnJv
bVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSkgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgfHwg
aXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlPihtX3BvbGljaWVzLCB1cmwsIENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7Cisg
ICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1
cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0NoaWxkQ29udGV4dEZyb21Tb3VyY2UoY29uc3QgVVJM
JiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0
aFVSTDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dDaGlsZENvbnRl
eHRGcm9tU291cmNlPihtX3BvbGljaWVzLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7CisgICAgaWYgKG92ZXJyaWRl
Q29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoU2No
ZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwu
cHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhbGxQb2xpY2ll
c0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0NoaWxkQ29u
dGV4dEZyb21Tb3VyY2UsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OmFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRl
Q29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNvbnRl
bnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93SW1hZ2VGcm9tU291cmNlPihtX3BvbGljaWVzLCB1
cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6
U2VuZFJlcG9ydCk7CisgICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5
cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVMaXN0OjphbGxvd0ltYWdlRnJvbVNvdXJjZSwgdXJsLCBDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpOwogfQog
CiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTdHlsZUZyb21Tb3VyY2UoY29uc3Qg
VVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxs
V2l0aFVSTDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dTdHlsZUZy
b21Tb3VyY2U+KG1fcG9saWNpZXMsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICBpZiAob3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChTY2hlbWVS
ZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5KHVybC5wcm90
b2NvbCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFsbFBvbGljaWVzQWxs
b3coJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93U3R5bGVGcm9tU291
cmNlLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0
YXR1czo6U2VuZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
d0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5KSBjb25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBv
bGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OmFsbG93Rm9udEZyb21Tb3VyY2U+KG1fcG9saWNpZXMsIHVybCwgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsK
KyAgICBpZiAob3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNl
Y3VyaXR5UG9saWN5KHVybC5wcm90b2NvbCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGFsbFBvbGljaWVzQWxsb3coJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OmFsbG93Rm9udEZyb21Tb3VyY2UsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKIH0KIAogYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmFsbG93TWVkaWFGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29s
IG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KSBjb25zdAogewotICAgIHJldHVybiBvdmVy
cmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93TWVkaWFGcm9tU291cmNlPihtX3Bv
bGljaWVzLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGlu
Z1N0YXR1czo6U2VuZFJlcG9ydCk7CisgICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9s
aWN5KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVt
ZVNob3VsZEJ5cGFzc0NvbnRlbnRTZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd01lZGlhRnJvbVNvdXJjZSwgdXJsLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBv
cnQpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dDb25uZWN0VG9Tb3Vy
Y2UoY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxs
b3dlZEJ5QWxsV2l0aFVSTDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxs
b3dDb25uZWN0VG9Tb3VyY2U+KG1fcG9saWNpZXMsIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKKyAgICBpZiAob3Zl
cnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChTY2hlbWVSZWdpc3RyeTo6c2NoZW1lU2hvdWxkQnlwYXNzQ29udGVudFNlY3VyaXR5UG9saWN5
KHVybC5wcm90b2NvbCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGFsbFBv
bGljaWVzQWxsb3coJkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93Q29u
bmVjdFRvU291cmNlLCB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJl
cG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjphbGxvd0Zvcm1BY3Rpb24oY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250ZW50
U2VjdXJpdHlQb2xpY3kpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3Vy
aXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aFVSTDwmQ29udGVudFNlY3VyaXR5UG9saWN5
RGlyZWN0aXZlTGlzdDo6YWxsb3dGb3JtQWN0aW9uPihtX3BvbGljaWVzLCB1cmwsIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCk7
CisgICAgaWYgKG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5KQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoU2NoZW1lUmVnaXN0cnk6OnNjaGVtZVNob3VsZEJ5cGFzc0NvbnRlbnRT
ZWN1cml0eVBvbGljeSh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBhbGxQb2xpY2llc0FsbG93KCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0OjphbGxvd0Zvcm1BY3Rpb24sIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KTsKIH0KIAogYm9vbCBDb250ZW50U2Vj
dXJpdHlQb2xpY3k6OmFsbG93QmFzZVVSSShjb25zdCBVUkwmIHVybCwgYm9vbCBvdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50
U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0Jhc2VVUkk+KG1fcG9saWNpZXMsIHVybCwgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0
KTsKLX0KLQotYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmlzQWN0aXZlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gIW1fcG9saWNpZXMuaXNFbXB0eSgpOworICAgIGlmIChvdmVycmlkZUNvbnRl
bnRTZWN1cml0eVBvbGljeSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKFNjaGVtZVJl
Z2lzdHJ5OjpzY2hlbWVTaG91bGRCeXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsLnByb3Rv
Y29sKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gYWxsUG9saWNpZXNBbGxv
dygmQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dCYXNlVVJJLCB1cmws
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCk7CiB9CiAKIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9z
aXRpb24gQ29udGVudFNlY3VyaXR5UG9saWN5OjpyZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbigpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3kuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5o
CmluZGV4IDI2MTc5YzI5ZGNjYzA0ODA5NzYwMWYxNmZkMTNiOTNmYjNkZTZhOGUuLmYzMmMzMGRl
N2ZiYjYzYzVlOGNjZTVmYWU3YzAwYjFhY2RmZWI1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCkBAIC0xMDcsOCArMTA3LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRPdmVycmlkZUFsbG93SW5saW5lU3R5bGUoYm9vbCk7CiAKLSAg
ICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0KICAgICB2b2lkIGdhdGhlclJlcG9ydFVSSXMoRE9N
U3RyaW5nTGlzdCYpIGNvbnN0OwogCiAgICAgYm9vbCBleHBlcmltZW50YWxGZWF0dXJlc0VuYWJs
ZWQoKSBjb25zdDsKQEAgLTE1Nyw3ICsxNTUsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkaWRS
ZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYsIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5
cGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UG9saWN5RnJvbSk7CiAKLSAgICBjb25zdCBUZXh0
RW5jb2RpbmcmIGRvY3VtZW50RW5jb2RpbmcoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBQcmVkaWNhdGUsIHR5cGVuYW1lLi4uIEFyZ3M+IGJvb2wgYWxsUG9saWNpZXNBbGxvdyhQcmVk
aWNhdGUmJiwgQXJncyYmLi4uKSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUHJlZGljYXRlPiBib29sIGFsbFBvbGljaWVzQWxsb3dIYXNoRnJvbUNvbnRl
bnQoUHJlZGljYXRlJiYsIGNvbnN0IFN0cmluZyYgY29udGVudCwgT3B0aW9uU2V0PENvbnRlbnRT
ZWN1cml0eVBvbGljeUhhc2hBbGdvcml0aG0+KSBjb25zdCBXQVJOX1VOVVNFRF9SRVRVUk47CiAK
ICAgICAvLyBXZSBjYW4gbmV2ZXIgaGF2ZSBib3RoIGEgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0
IGFuZCBhIGZyYW1lLgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCB7IG51bGxwdHIgfTsKQEAgLTE3Myw2ICsxNzIsMTYgQEAgcHJpdmF0ZToKICAg
ICBPcHRpb25TZXQ8Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaEFsZ29yaXRobT4gbV9oYXNoQWxn
b3JpdGhtc0ZvcklubGluZVN0eWxlc2hlZXRzOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgUHJl
ZGljYXRlLCB0eXBlbmFtZS4uLiBBcmdzPgoraW5saW5lIGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjphbGxQb2xpY2llc0FsbG93KFByZWRpY2F0ZSYmIHByZWRpY2F0ZSwgQXJncyYmLi4uIGFy
Z3MpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvJiBwb2xpY3kgOiBtX3BvbGljaWVzKSB7CisgICAg
ICAgIGlmICghKHBvbGljeS5nZXQoKS0+KnByZWRpY2F0ZSkoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0KIAogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>