<?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>121279</bug_id>
          
          <creation_ts>2013-09-12 23:58:22 -0700</creation_ts>
          <short_desc>Finish removing layer-violating code from Pasteboard (just for Mac during this first step)</short_desc>
          <delta_ts>2013-09-13 08:24:12 -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>HTML Editing</component>
          <version>528+ (Nightly 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>928674</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-12 23:58:22 -0700</bug_when>
    <thetext>Finish removing layer-violating code from Pasteboard (just for Mac during this first step)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928678</commentid>
    <comment_count>1</comment_count>
      <attachid>211516</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-13 00:27:09 -0700</bug_when>
    <thetext>Created attachment 211516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928843</commentid>
    <comment_count>2</comment_count>
      <attachid>211516</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-09-13 07:58:32 -0700</bug_when>
    <thetext>Comment on attachment 211516
Patch

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

&gt; Source/WebCore/editing/mac/EditorMac.mm:538
&gt; +    String uniqueIDString = adoptCF(CFUUIDCreateString(nullptr, adoptCF(CFUUIDCreate(nullptr)).get())).get();

I think we have our own UUID implementation in WTF if you do&apos;t like all the .gets here.

I also think you should use kCFAllocatorDefault instead of nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>928857</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-13 08:24:12 -0700</bug_when>
    <thetext>Committed r155700: &lt;http://trac.webkit.org/changeset/155700&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>211516</attachid>
            <date>2013-09-13 00:27:09 -0700</date>
            <delta_ts>2013-09-13 07:59:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-121279-20130913002708.patch</filename>
            <type>text/plain</type>
            <size>38316</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU1Njc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTYzYTRmOTQ0YjI3N2Q2
ZDc0Yzk0OWE5MTEyNTMwNTEyNmQxNWNkYy4uZTZlMWJkMGE0NmE2MTBiMDU3YzBiZWEzMDEwNGI2
NGMyYTEwZmI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA5LTEyICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBGaW5pc2ggcmVtb3ZpbmcgbGF5
ZXItdmlvbGF0aW5nIGNvZGUgZnJvbSBQYXN0ZWJvYXJkIChqdXN0IGZvciBNYWMgZHVyaW5nIHRo
aXMgZmlyc3Qgc3RlcCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMTI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuaDogQWRkZWQgd2ViQ29udGVudEZyb21QYXN0ZWJvYXJk
IG1lbWJlciBmdW5jdGlvbiwgcHJpdmF0ZSBuZXN0ZWQgY2xhc3MKKyAgICAgICAgV2ViQ29udGVu
dFJlYWRlciwgcHJpdmF0ZSBjcmVhdGVGcmFnbWVudEZvckltYWdlUmVzb3VyY2VBbmRBZGRSZXNv
dXJjZSBhbmQKKyAgICAgICAgY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMgbWVtYmVyIGZ1
bmN0aW9ucy4KKworICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbTogUmUtc29ydGVk
IGluY2x1ZGVzIGFuZCBhZGRlZCBzb21lLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKTogQ2FsbCB0aGUgbmV3IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCBm
dW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KTogQ29tbWVudCB0d2Vhay4KKyAgICAgICAgKFdlYkNvcmU6OnN0
eWxlRm9yU2VsZWN0aW9uU3RhcnQpOiBSZW1vdmVkIGFuIHVubmVlZGVkIGNhbGwgdG8gU3RyaW5n
OjppbXBsLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkUGxhaW5UZXh0RnJvbVBhc3Rl
Ym9hcmQpOiBVcGRhdGVkIHRvIHVzZSBhbiBpc1VSTCBib29sZWFuIGluc3RlYWQKKyAgICAgICAg
b2YgYSBzZXBhcmF0ZSBzdHJpbmcgbmFtZWQgInVybCIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKTogQWRkZWQuIENvbnRhaW5zIHJl
d29ya2VkIGNvZGUgdGhhdAorICAgICAgICB3YXMgb3JpZ2luYWxseSBpbiBQYXN0ZWJvYXJkOjpk
b2N1bWVudEZyYWdtZW50LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpXZWJDb250ZW50UmVh
ZGVyOjpyZWFkRmlsZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Oldl
YkNvbnRlbnRSZWFkZXI6OnJlYWRIVE1MKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEZEKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEYpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRVUkwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQpOiBBZGRlZC4gVXNlcyBXZWJDb250ZW50UmVhZGVyIHRvIHJlYWQgdGhlCisgICAgICAg
IGNvbnRlbnQgZnJvbSB0aGUgcGFzdGVib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
Y3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UpOiBBZGRlZC4gSGVs
cGVyIHVzZWQKKyAgICAgICAgYnkgY29kZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMpOiBEaXR0by4KKworICAgICAgICAqIHBs
YXRmb3JtL1Bhc3RlYm9hcmQuaDogQWRkZWQgbmV3IFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVy
IGFic3RyYWN0IGNsYXNzIHNvCisgICAgICAgIGNsaWVudCBjYW4gZ2V0IHRoZSB2YXJpb3VzIHR5
cGVzIG9mIHBhc3RlYm9hcmQgY29udGVudCBhbmQgc3RvcCBvbiB0aGUga2luZCBpdAorICAgICAg
ICBjYW4gaGFuZGxlLiBJbXByb3ZlZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4gUmVt
b3ZlZCBkb2N1bWVudEZyYWdtZW50CisgICAgICAgIHdoZW4gY29tcGlsaW5nIGZvciBQTEFURk9S
TShNQUMpLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzRnJhZ21lbnQpOiBDaGFuZ2VkIHRvIHVzZSBFZGl0b3I6
OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0
ZWJvYXJkTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZCk6IFVwZGF0
ZWQgdGhlIHBsYWluIHRleHQgb3ZlcmxvYWQgb2YgdGhpcyBmb3IgY2hhbmdlcworICAgICAgICB0
byB0aGUgc3RydWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdC4gQWRkZWQgYSBuZXcgd2ViIGNvbnRl
bnQgb3ZlcmxvYWQgb2YgdGhpcywKKyAgICAgICAgd2hpY2ggcmV0YWlucyB0aGUgcGFzdGVib2Fy
ZC1yZWFkaW5nIHBhcnQgb2YgUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCwgYnV0CisgICAg
ICAgIG9taXRzIHRoZSBkb2N1bWVudCBmcmFnbWVudCBjb25zdHJ1Y3Rpb24gcGFydC4KKwogMjAx
My0wOS0xMiAgU2FudG9zaCBNYWh0byAgPHNhbnRvc2gubWFAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF1CYWNrZ3JvdW5kIFN0eWxlIG9mIGVsZW1lbnQgbm90IHZpc2libGUgYmVjYXVzZSBv
ZiAgZGVmYXVsdCB0aGVtZSBzdHlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMWE2NWJj
NmYyMzI5OGM5ZTRkOTM0OTAwMTk3NmIxZTZlNzhkNTJhYi4uNDBmZDA2YmYzZDcwYTI5YTJhMDhh
Y2I5ZDkwYjI1YThlZDc0N2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00MiwxMSAr
NDIsMTMgQEAKICNpbmNsdWRlICJXcml0aW5nRGlyZWN0aW9uLmgiCiAKICNpZiBQTEFURk9STShN
QUMpCitPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIE9CSkNfQ0xBU1MgTlNEaWN0aW9u
YXJ5OwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJjaGl2ZVJlc291
cmNlOwogY2xhc3MgQ2xpcGJvYXJkOwogY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFz
cyBEZWxldGVCdXR0b25Db250cm9sbGVyOwpAQCAtNDAxLDYgKzQwMyw3IEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJp
bmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKTsKKyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHdlYkNv
bnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxs
b3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShFRkwpCkBAIC00MTEsNiArNDE0LDggQEAgcHVibGljOgogI2Vu
ZGlmCiAKIHByaXZhdGU6CisgICAgY2xhc3MgV2ViQ29udGVudFJlYWRlcjsKKwogICAgIGV4cGxp
Y2l0IEVkaXRvcihGcmFtZSYpOwogCiAgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3Q7CkBA
IC00NDAsNiArNDQ1LDggQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShNQUMpCiAgICAgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogICAgIFBh
c3NSZWZQdHI8UmFuZ2U+IGFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKTsKKyAgICBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW1hZ2VSZXNvdXJjZUFuZEFkZFJl
c291cmNlKFBhc3NSZWZQdHI8QXJjaGl2ZVJlc291cmNlPik7CisgICAgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhOU0F0dHJpYnV0ZWRT
dHJpbmcgKik7CiAjZW5kaWYKIAogICAgIEZyYW1lJiBtX2ZyYW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDhmODFlNTdkNzIxZWE3NThkMDRkNjNkMDRlMjk0
OTE5YTBjNjUxNTMuLjM2ZWE2Y2Q3MmVmMzJjYzkzYzg1ZjllZTBmNzIyMjgwMzY0NDgxMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTI2LDIwICsyNiwyNSBA
QAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJFZGl0b3IuaCIKIAotI2ltcG9ydCAiQ29s
b3JNYWMuaCIKLSNpbXBvcnQgIkNsaXBib2FyZC5oIgogI2ltcG9ydCAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKLSNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbXBvcnQgIkNsaXBib2Fy
ZC5oIgorI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIK
KyNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgi
CiAjaW1wb3J0ICJFZGl0b3IuaCIKICNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgogI2ltcG9ydCAi
Rm9udC5oIgogI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50Lmgi
CiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKKyNpbXBv
cnQgIkhUTUxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkxlZ2Fj
eVdlYkFyY2hpdmUuaCIKKyNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbXBvcnQgIk5v
ZGVUcmF2ZXJzYWwuaCIKKyNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIK
ICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVn
aWVzLmgiCkBAIC01Miw4ICs1Nyw5IEBACiAjaW1wb3J0ICJTdHlsZVByb3BlcnR5U2V0LmgiCiAj
aW1wb3J0ICJUZXh0LmgiCiAjaW1wb3J0ICJUeXBpbmdDb21tYW5kLmgiCi0jaW1wb3J0ICJodG1s
ZWRpdGluZy5oIgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCisjaW1w
b3J0ICJodG1sZWRpdGluZy5oIgorI2ltcG9ydCAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNzcsMTggKzgzLDIyIEBAIHZvaWQgRWRpdG9yOjpzaG93Q29sb3JQYW5lbCgp
CiB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJk
LCBib29sIGFsbG93UGxhaW5UZXh0KQogewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxl
Y3RlZFJhbmdlKCk7Ci0gICAgYm9vbCBjaG9vc2VQbGFpblRleHQ7Ci0gICAgCisKKyAgICAvLyBG
SVhNRTogSG93IGNhbiB0aGlzIGhhcmQtY29kZWQgcGFzdGVib2FyZCBuYW1lIGJlIHJpZ2h0LCBn
aXZlbiB0aGF0IHRoZSBwYXNzZWQtaW4gcGFzdGVib2FyZCBoYXMgYSBuYW1lPwogICAgIGNsaWVu
dCgpLT5zZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TR2VuZXJhbFBib2FyZCk7Ci0gICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVu
dCgmbV9mcmFtZSwgcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9vc2VQbGFpblRleHQpOworCisg
ICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoKnBhc3RlYm9hcmQsICpyYW5nZSwgYWxs
b3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKKwogICAgIGlmIChmcmFnbWVudCAmJiBzaG91
bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0
aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGZhbHNlKTsKKwogICAgIGNsaWVudCgpLT5zZXRJbnNl
cnRpb25QYXN0ZWJvYXJkKFN0cmluZygpKTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCgpCiB7Ci0gICAgLy8gRklYTUU6IFdoeSBpcyB0
aGlzIG1pc3NpbmcgY2FsbHMgdG8gY2FuRWRpdCwgY2FuRWRpdFJpY2hseSwgZXRjLi4uCisgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIG1pc3NpbmcgY2FsbHMgdG8gY2FuRWRpdCwgY2FuRWRpdFJp
Y2hseSwgZXRjLj8KICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQobV9mcmFtZS5kb2N1bWVudCgpKTsKICAgICByZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMiw3ICsxMjIs
NyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqIGZy
YW1lLCBOb2RlICombm9kZVRvUmVtb3ZlKQogICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChzcGFuVGFnLCBmYWxzZSk7CiAK
ICAgICBTdHJpbmcgc3R5bGVUZXh0ID0gdHlwaW5nU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpICsg
IiBkaXNwbGF5OiBpbmxpbmUiOwotICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKHN0eWxl
QXR0ciwgc3R5bGVUZXh0LmltcGwoKSk7CisgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
c3R5bGVBdHRyLCBzdHlsZVRleHQpOwogCiAgICAgc3R5bGVFbGVtZW50LT5hcHBlbmRDaGlsZChm
cmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWRpdGluZ1RleHROb2RlKCIiKSwgQVNTRVJUX05PX0VY
Q0VQVElPTik7CiAKQEAgLTQwMSwxNSArNDExLDIyMCBAQCBTdHJpbmcgRWRpdG9yOjpyZWFkUGxh
aW5UZXh0RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKICAgICBQYXN0ZWJv
YXJkUGxhaW5UZXh0IHRleHQ7CiAgICAgcGFzdGVib2FyZC5yZWFkKHRleHQpOwogCi0gICAgU3Ry
aW5nIHN0cmluZyA9IHRleHQucGxhaW5UZXh0OworICAgIFN0cmluZyBzdHJpbmcgPSB0ZXh0LnRl
eHQ7CiAKICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgdGhpcyBpcyAxMDAlIGNvcnJlY3Qg
c2luY2Ugd2Uga25vdyAtW05TVVJMIFVSTFdpdGhTdHJpbmc6XSBkb2VzIG5vdCBoYW5kbGUKICAg
ICAvLyBhbGwgdGhlIHNhbWUgY2FzZXMgd2UgaGFuZGxlIHdlbGwgaW4gdGhlIEtVUkwgY29kZSBm
b3IgY3JlYXRpbmcgYW4gTlNVUkwuCi0gICAgaWYgKHN0cmluZy5pc051bGwoKSAmJiAhdGV4dC51
cmwuaXNOdWxsKCkpCi0gICAgICAgIHN0cmluZyA9IGNsaWVudCgpLT51c2VyVmlzaWJsZVN0cmlu
ZyhbTlNVUkwgVVJMV2l0aFN0cmluZzp0ZXh0LnVybF0pOworICAgIGlmICh0ZXh0LmlzVVJMKQor
ICAgICAgICBzdHJpbmcgPSBjbGllbnQoKS0+dXNlclZpc2libGVTdHJpbmcoW05TVVJMIFVSTFdp
dGhTdHJpbmc6c3RyaW5nXSk7CiAKICAgICAvLyBGSVhNRTogV1RGIHNob3VsZCBvZmZlciBhIG5v
bi1NYWMtc3BlY2lmaWMgd2F5IHRvIGNvbnZlcnQgc3RyaW5nIHRvIHByZWNvbXBvc2VkIGZvcm0g
c28gd2UgY2FuIGRvIGl0IGZvciBhbGwgcGxhdGZvcm1zLgogICAgIHJldHVybiBbKE5TU3RyaW5n
ICopc3RyaW5nIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwogfQogCitj
bGFzcyBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXIgRklOQUwgOiBwdWJsaWMgUGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXIgeworcHVibGljOgorICAgIEZyYW1lJiBmcmFtZTsKKyAgICBSYW5nZSYg
Y29udGV4dDsKKyAgICBjb25zdCBib29sIGFsbG93UGxhaW5UZXh0OworCisgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OworICAgIGJvb2wgbWFkZUZyYWdtZW50RnJvbVBsYWlu
VGV4dDsKKworICAgIFdlYkNvbnRlbnRSZWFkZXIoRnJhbWUmIGZyYW1lLCBSYW5nZSYgY29udGV4
dCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKKyAgICAgICAgOiBmcmFtZShmcmFtZSkKKyAgICAgICAg
LCBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgYWxsb3dQbGFpblRleHQoYWxsb3dQbGFpblRl
eHQpCisgICAgICAgICwgbWFkZUZyYWdtZW50RnJvbVBsYWluVGV4dChmYWxzZSkKKyAgICB7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCByZWFkV2ViQXJjaGl2ZShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCByZWFkRmlsZW5h
bWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJl
YWRIVE1MKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCByZWFkUlRG
RChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBy
ZWFkUlRGKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIHJlYWRJbWFnZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIGNvbnN0IFN0cmluZyYgdHlw
ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIHJlYWRVUkwoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgdGl0bGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCByZWFkUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworfTsKKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRXZWJBcmNoaXZlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7
CisgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNy
ZWF0ZShLVVJMKCksIGJ1ZmZlci5nZXQoKSk7CisgICAgaWYgKCFhcmNoaXZlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3VyY2Ug
PSBhcmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKKyAgICBpZiAoIW1haW5SZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU3RyaW5nJiB0eXBlID0gbWFpblJlc291cmNl
LT5taW1lVHlwZSgpOworCisgICAgaWYgKGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dN
SU1FVHlwZUFzSFRNTCh0eXBlKSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIGNvZGUgaW4gY3Jl
YXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMgY2FsbHMgc2V0RGVmZXJzTG9hZGluZyh0cnVlKS4g
RG9uJ3Qgd2UgbmVlZCB0aGF0IGhlcmU/CisgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogbG9h
ZGVyID0gZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgICAgIGxvYWRl
ci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhhcmNoaXZlLmdldCgpKTsKKworICAgICAgICBTdHJp
bmcgbWFya3VwU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChtYWluUmVzb3VyY2UtPmRhdGEoKS0+
ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICAgICAgZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5n
LCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKSB7CisgICAgICAgIGZyYWdtZW50ID0g
ZnJhbWUuZWRpdG9yKCkuY3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJlc291cmNlQW5kQWRkUmVzb3Vy
Y2UobWFpblJlc291cmNlLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6
OnJlYWRGaWxlbmFtZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIHNpemVf
dCBzaXplID0gcGF0aHMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZnJhZ21lbnQgPSBmcmFtZS5kb2N1bWVudCgpLT5jcmVhdGVEb2N1bWVudEZy
YWdtZW50KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg
ICAgICBTdHJpbmcgdGV4dCA9IHBhdGhzW2ldOworICAgICAgICB0ZXh0ID0gZnJhbWUuZWRpdG9y
KCkuY2xpZW50KCktPnVzZXJWaXNpYmxlU3RyaW5nKFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6dGV4
dF0pOworCisgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcGFyYWdyYXBoID0gY3JlYXRlRGVm
YXVsdFBhcmFncmFwaEVsZW1lbnQoZnJhbWUuZG9jdW1lbnQoKSk7CisgICAgICAgIHBhcmFncmFw
aC0+YXBwZW5kQ2hpbGQoZnJhbWUuZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodGV4dCkpOwor
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQocGFyYWdyYXBoLnJlbGVhc2UoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVy
OjpyZWFkSFRNTChjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBTdHJpbmcgc3RyaW5nT21p
dHRpbmdNaWNyb3NvZnRQcmVmaXggPSBzdHJpbmc7CisKKyAgICAvLyBUaGlzIGNvZGUgd2FzIGFk
ZGVkIHRvIG1ha2UgSFRNTCBwYXN0ZSBmcm9tIE1pY3Jvc29mdCBXb3JkIG9uIE1hYyB3b3JrLCBi
YWNrIGluIDIwMDQuCisgICAgaWYgKHN0cmluZy5zdGFydHNXaXRoKCJWZXJzaW9uOiIpKSB7Cisg
ICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IHN0cmluZy5maW5kSWdub3JpbmdDYXNlKCI8aHRtbCIp
OworICAgICAgICBpZiAobG9jYXRpb24gIT0gbm90Rm91bmQpCisgICAgICAgICAgICBzdHJpbmdP
bWl0dGluZ01pY3Jvc29mdFByZWZpeCA9IHN0cmluZy5zdWJzdHJpbmcobG9jYXRpb24pOworICAg
IH0KKworICAgIGlmIChzdHJpbmdPbWl0dGluZ01pY3Jvc29mdFByZWZpeC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKGZyYW1lLmRvY3VtZW50KCksIHN0cmluZ09taXR0aW5nTWljcm9zb2Z0UHJlZml4LCBl
bXB0eVN0cmluZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOworICAgIHJl
dHVybiBmcmFnbWVudDsKK30KKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRS
VEZEKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgZnJhZ21lbnQgPSBm
cmFtZS5lZGl0b3IoKS5jcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhhZG9wdE5TKFtbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLT5jcmVhdGVOU0RhdGEo
KS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0pLmdldCgpKTsKKyAgICByZXR1cm4gZnJh
Z21lbnQ7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgZnJhZ21lbnQgPSBmcmFtZS5lZGl0
b3IoKS5jcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpidWZmZXItPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRv
Y3VtZW50QXR0cmlidXRlczpOVUxMXSkuZ2V0KCkpOworICAgIHJldHVybiBmcmFnbWVudDsKK30K
KworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRJbWFnZShQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gYnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgU3RyaW5nIHVu
aXF1ZUlEU3RyaW5nID0gYWRvcHRDRihDRlVVSURDcmVhdGVTdHJpbmcobnVsbHB0ciwgYWRvcHRD
RihDRlVVSURDcmVhdGUobnVsbHB0cikpLmdldCgpKSkuZ2V0KCk7CisKKyAgICBBU1NFUlQodHlw
ZS5jb250YWlucygnLycpKTsKKyAgICBTdHJpbmcgdHlwZUFzRmlsZW5hbWVXaXRoRXh0ZW5zaW9u
ID0gdHlwZTsKKyAgICB0eXBlQXNGaWxlbmFtZVdpdGhFeHRlbnNpb24ucmVwbGFjZSgnLycsICcu
Jyk7CisgICAgS1VSTCBpbWFnZVVSTCA9IEtVUkwoS1VSTCgpLCAid2Via2l0LWZha2UtdXJsOi8v
IiArIHVuaXF1ZUlEU3RyaW5nICsgJy8nICsgdHlwZUFzRmlsZW5hbWVXaXRoRXh0ZW5zaW9uKTsK
KworICAgIGZyYWdtZW50ID0gZnJhbWUuZWRpdG9yKCkuY3JlYXRlRnJhZ21lbnRGb3JJbWFnZVJl
c291cmNlQW5kQWRkUmVzb3VyY2UoQXJjaGl2ZVJlc291cmNlOjpjcmVhdGUoYnVmZmVyLCBpbWFn
ZVVSTCwgdHlwZSwgZW1wdHlTdHJpbmcoKSwgZW1wdHlTdHJpbmcoKSkpOworICAgIHJldHVybiBm
cmFnbWVudDsKK30KKworYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRVUkwoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIGlmICh1cmwuc3RyaW5n
KCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8RWxlbWVu
dD4gYW5jaG9yID0gZnJhbWUuZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmFU
YWcsIGZhbHNlKTsKKyAgICBhbmNob3ItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRy
LCB1cmwuc3RyaW5nKCkpOworICAgIGFuY2hvci0+YXBwZW5kQ2hpbGQoZnJhbWUuZG9jdW1lbnQo
KS0+Y3JlYXRlVGV4dE5vZGUoW3RpdGxlIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddKSk7CisKKyAgICBmcmFnbWVudCA9IGZyYW1lLmRvY3VtZW50KCktPmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKKyAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYW5jaG9yLnJlbGVhc2Uo
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVy
OjpyZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWFsbG93UGxh
aW5UZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoJmNvbnRleHQsIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9u
aWNhbE1hcHBpbmddKTsKKyAgICBpZiAoIWZyYWdtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0ID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworLy8gRklYTUU6IFNob3VsZCBnaXZlIHRoaXMgZnVuY3Rpb24gYSBuYW1lIHRoYXQg
bWFrZXMgaXQgY2xlYXIgaXQgYWRkcyByZXNvdXJjZXMgdG8gdGhlIGRvY3VtZW50IGxvYWRlciBh
cyBhIHNpZGUgZWZmZWN0LgorLy8gT3IgcmVmYWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4K
K1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQ
bGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQoreworICAgIFdlYkNvbnRlbnRSZWFkZXIg
cmVhZGVyKG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKKyAgICBwYXN0ZWJvYXJk
LnJlYWQocmVhZGVyKTsKKyAgICBjaG9zZVBsYWluVGV4dCA9IHJlYWRlci5tYWRlRnJhZ21lbnRG
cm9tUGxhaW5UZXh0OworICAgIHJldHVybiByZWFkZXIuZnJhZ21lbnQucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6Y3JlYXRlRnJhZ21lbnRGb3JJ
bWFnZVJlc291cmNlQW5kQWRkUmVzb3VyY2UoUGFzc1JlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHJl
c291cmNlKQoreworICAgIGlmICghcmVzb3VyY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgUmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+
Y3JlYXRlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywgZmFsc2UpOworICAgIGltYWdlRWxlbWVu
dC0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgcmVzb3VyY2UtPnVybCgpLnN0cmlu
ZygpKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGZyYWdtZW50LT5hcHBl
bmRDaGlsZChpbWFnZUVsZW1lbnQucmVsZWFzZSgpKTsKKworICAgIC8vIEZJWE1FOiBUaGUgY29k
ZSBpbiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyBjYWxscyBzZXREZWZlcnNMb2FkaW5n
KHRydWUpLiBEb24ndCB3ZSBuZWVkIHRoYXQgaGVyZT8KKyAgICBpZiAoRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciA9IG1fZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKKyAgICAgICAgbG9h
ZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVzb3VyY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0
b3I6OmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKE5TQXR0cmlidXRlZFN0cmluZyAqc3Ry
aW5nKQoreworICAgIGlmICghbV9mcmFtZS5wYWdlKCkgfHwgIW1fZnJhbWUuZG9jdW1lbnQoKSB8
fCAhbV9mcmFtZS5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGJvb2wgd2FzRGVmZXJyaW5nQ2FsbGJhY2tzID0gbV9mcmFtZS5wYWdlKCktPmRlZmVyc0xv
YWRpbmcoKTsKKyAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgbV9mcmFt
ZS5wYWdlKCktPnNldERlZmVyc0xvYWRpbmcodHJ1ZSk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFy
Y2hpdmVSZXNvdXJjZT4+IHJlc291cmNlczsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjbGllbnQoKS0+ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KHN0cmluZywgcmVzb3VyY2VzKTsKKworICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0g
bV9mcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gcmVzb3VyY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAg
ICAgIGxvYWRlci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7CisgICAgfQorCisg
ICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCisgICAgICAgIG1fZnJhbWUucGFnZSgpLT5z
ZXREZWZlcnNMb2FkaW5nKGZhbHNlKTsKKworICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9h
cmQuaAppbmRleCA1ZGM0NDVkOGY1OWUzYzc0YTgyYTM5MGY1NjQwMGFiYTI3NGU4ZDNkLi44NGI2
ZTFhMzYyZDBjNTdlOTBiZjY3N2Q4NjI0Y2M1Zjc0OThiZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGFzdGVib2FyZC5oCkBAIC02NCw3ICs2NCw4IEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAog
ZW51bSBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgeyBEZWZhdWx0U2Vs
ZWN0ZWRUZXh0VHlwZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCB9OwogCi0vLyBG
b3Igd3JpdGluZyB3ZWIgY29udGVudCB0byB0aGUgcGFzdGVib2FyZC4gR2VuZXJhbGx5IHNvcnRl
ZCB3aXRoIHRoZSByaWNoZXN0IGZvcm1hdHMgb24gdG9wLgorLy8gRm9yIHdyaXRpbmcgdG8gdGhl
IHBhc3RlYm9hcmQuIEdlbmVyYWxseSBzb3J0ZWQgd2l0aCB0aGUgcmljaGVzdCBmb3JtYXRzIG9u
IHRvcC4KKwogc3RydWN0IFBhc3RlYm9hcmRXZWJDb250ZW50IHsKICNpZiAhKFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShXSU4pKQogICAgIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGU7CkBAIC04OCwxNiAr
ODksMzYgQEAgc3RydWN0IFBhc3RlYm9hcmRVUkwgewogc3RydWN0IFBhc3RlYm9hcmRJbWFnZSB7
CiAjaWYgIShQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oSU9TKSB8
fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKSkKICAgICBQYXN0ZWJvYXJkVVJMIHVybDsK
KyNlbmRpZgogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2U7CisjaWYgIShQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oV0lOKSkKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGE7CiAgICAgU3Ry
aW5nIHJlc291cmNlTUlNRVR5cGU7CiAjZW5kaWYKIH07CiAKLXN0cnVjdCBQYXN0ZWJvYXJkUGxh
aW5UZXh0IHsKKy8vIEZvciByZWFkaW5nIGZyb20gdGhlIHBhc3RlYm9hcmQuCisKK2NsYXNzIFBh
c3RlYm9hcmRXZWJDb250ZW50UmVhZGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QYXN0ZWJv
YXJkV2ViQ29udGVudFJlYWRlcigpIHsgfQorCiAjaWYgIShQTEFURk9STShFRkwpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oSU9TKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lO
KSkKLSAgICBTdHJpbmcgcGxhaW5UZXh0OwotICAgIFN0cmluZyB1cmw7CisgICAgdmlydHVhbCBi
b29sIHJlYWRXZWJBcmNoaXZlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCByZWFkRmlsZW5hbWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCByZWFkSFRNTChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHJlYWRSVEZEKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCByZWFkUlRGKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCByZWFkSW1hZ2UoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmIHR5
cGUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVhZFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSkgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCBib29sIHJlYWRQbGFpblRleHQo
Y29uc3QgU3RyaW5nJikgPSAwOworfTsKKworc3RydWN0IFBhc3RlYm9hcmRQbGFpblRleHQgewor
ICAgIFN0cmluZyB0ZXh0OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib29sIGlzVVJMOwogI2Vu
ZGlmCiB9OwogCkBAIC0xMDcsMzIgKzEyOCwzNCBAQCBwdWJsaWM6CiAgICAgflBhc3RlYm9hcmQo
KTsKIAogICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZUZvckNvcHlBbmRQ
YXN0ZSgpOwotICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZVByaXZhdGUo
KTsgLy8gQ29ycmVzcG9uZHMgdG8gdGhlICJ1bmlxdWUgcGFzdGVib2FyZCIgY29uY2VwdCBvbiBN
YWMuIFVzZWQgaW4gZWRpdGluZywgbm90IHN1cmUgZXhhY3RseSBmb3Igd2hhdCBwdXJwb3NlLgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZVByaXZhdGUoKTsgLy8gVGVt
cG9yYXJ5IHBhc3RlYm9hcmQuIENhbiBwdXQgZGF0YSBvbiB0aGlzIGFuZCB0aGVuIHdyaXRlIHRv
IGFub3RoZXIgcGFzdGVib2FyZCB3aXRoIHdyaXRlUGFzdGVib2FyZC4KIAogICAgIGJvb2wgaGFz
RGF0YSgpOwogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzKCk7CiAgICAgU3RyaW5nIHJlYWRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlKTsKKwogICAgIGJvb2wgd3JpdGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2
b2lkIGNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKICAgICB2b2lkIHJlYWQoUGFzdGVib2Fy
ZFBsYWluVGV4dCYpOworICAgIHZvaWQgcmVhZChQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlciYp
OwogCi0gICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpOwotICAgIGJvb2wgY2FuU21h
cnRSZXBsYWNlKCk7Ci0KLSAgICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50
Jik7CiAgICAgdm9pZCB3cml0ZShjb25zdCBQYXN0ZWJvYXJkVVJMJik7CiAgICAgdm9pZCB3cml0
ZShjb25zdCBQYXN0ZWJvYXJkSW1hZ2UmKTsKKyAgICB2b2lkIHdyaXRlKGNvbnN0IFBhc3RlYm9h
cmRXZWJDb250ZW50Jik7CiAKLSAgICAvLyBGSVhNRTogVGhlc2UgdHdvIGZ1bmN0aW9ucyB0b2dl
dGhlciBhcmUgdGhlIHNhbWUgYXMgY2FsbGluZyB3cml0ZS4gSXQgd291bGQgYmUgbmljZSBpZiB0
aGVzZSB0d28gc2VwYXJhdGUgZnVuY3Rpb25zCi0gICAgLy8gY291bGQgYmUgZWxpbWluYXRlZCwg
YnV0IE1hYyBzdXBwb3J0cyBhbiBlZGl0b3IgY2xpZW50IGNhbGwgdGhhdCBoYXBwZW5zIGFmdGVy
IHNldHRpbmcgdGhlIHR5cGVzIGJ1dCBiZWZvcmUgd3JpdGluZyB0byB0aGUgcGFzdGVib2FyZC4K
KyAgICAvLyBGSVhNRTogVGhlc2UgdHdvIGZ1bmN0aW9ucyBjYWxsZWQgb25lIGFmdGVyIHRoZSBv
dGhlciBhcmUgdGhlIHNhbWUgYXMgY2FsbGluZyB3cml0ZS4gSXQgd291bGQgYmUgbmljZSBpZiB0
aGVzZSB0d28gc2VwYXJhdGUgZnVuY3Rpb25zCisgICAgLy8gY291bGQgYmUgZWxpbWluYXRlZCwg
aG93ZXZlciBNYWMgc3VwcG9ydHMgYW4gZWRpdG9yIGNsaWVudCBjYWxsIHRoYXQgaGFwcGVucyBh
ZnRlciBzZXR0aW5nIHRoZSB0eXBlcyBidXQgYmVmb3JlIHdyaXRpbmcgdG8gdGhlIHBhc3RlYm9h
cmQuCiAgICAgdm9pZCBzZXRUeXBlcyhjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYpOwogICAg
IHZvaWQgd3JpdGVBZnRlclNldHRpbmdUeXBlcyhjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYp
OwogCisgICAgVmVjdG9yPFN0cmluZz4gcmVhZEZpbGVuYW1lcygpOworICAgIGJvb2wgY2FuU21h
cnRSZXBsYWNlKCk7CisKICAgICB2b2lkIHdyaXRlTWFya3VwKGNvbnN0IFN0cmluZyYgbWFya3Vw
KTsKICAgICBlbnVtIFNtYXJ0UmVwbGFjZU9wdGlvbiB7IENhblNtYXJ0UmVwbGFjZSwgQ2Fubm90
U21hcnRSZXBsYWNlIH07Ci0gICAgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmLCBT
bWFydFJlcGxhY2VPcHRpb24pOyAvLyBGSVhNRTogSXQgc2VlbXMgdGhhdCB0d28gc2VwYXJhdGUg
ZnVuY3Rpb25zIHdvdWxkIGJlIGJldHRlciB0aGFuIG9uZSBmdW5jdGlvbiB3aXRoIGFuIGFyZ3Vt
ZW50LgorICAgIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiwgU21hcnRSZXBsYWNl
T3B0aW9uKTsgLy8gRklYTUU6IFR3byBzZXBhcmF0ZSBmdW5jdGlvbnMgd291bGQgYmUgY2xlYXJl
ciB0aGFuIG9uZSBmdW5jdGlvbiB3aXRoIGFuIGFyZ3VtZW50LgogICAgIHZvaWQgd3JpdGVQYXN0
ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmIHNvdXJjZVBhc3RlYm9hcmQpOwogCiAjaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkKQEAgLTE0MiwxMSArMTY1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmIGhvdFNwb3QpOwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKQotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXllcmlu
ZyB2aW9sYXRpb24uCi0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oSU9T
KSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oV0lOKQorICAgIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXll
cmluZyB2aW9sYXRpb24uCiAgICAgU3RyaW5nIHBsYWluVGV4dChGcmFtZSogPSAwKTsgLy8gRklY
TUU6IExheWVyaW5nIHZpb2xhdGlvbi4KICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlKiwg
Ym9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqLCBTaG91bGRTZXJpYWxpemVTZWxlY3Rl
ZFRleHRGb3JDbGlwYm9hcmQgPSBEZWZhdWx0U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1FOiBM
YXllcmluZyB2aW9sYXRpb24uCiAjZW5kaWYKQEAgLTE3NiwxMyArMTk2LDE1IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQotICAgIHN0YXRp
YyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKTsKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFzdGVib2FyZE5hbWU7
IH0KICAgICBleHBsaWNpdCBQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
OworICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKTsKKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFzdGVib2FyZE5hbWU7IH0KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
c3RhdGljIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gY3JlYXRlKGNvbnN0IFFNaW1lRGF0YSogcmVh
ZGFibGVDbGlwYm9hcmQgPSAwLCBib29sIGlzRm9yRHJhZ0FuZERyb3AgPSBmYWxzZSk7CisKICAg
ICBRTWltZURhdGEqIGNsaXBib2FyZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3dyaXRhYmxlRGF0
YTsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVdyaXRhYmxlRGF0YSgpIGNvbnN0IHsgbV93cml0YWJs
ZURhdGEgPSAwOyB9CiAgICAgYm9vbCBpc0ZvckRyYWdBbmREcm9wKCkgY29uc3QgeyByZXR1cm4g
bV9pc0ZvckRyYWdBbmREcm9wOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvRHJhZ0RhdGFNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0Rh
dGFNYWMubW0KaW5kZXggNTBiNTBjMGM0N2YwZDVjYWQ2YWZkYWFmMTdkYmYzMjNlN2RkMDM5NS4u
ZDdlNmVlZWE2NmYxMGNiNTViYmQ5ZTIzZWQ5NjkwZGY0MmVhOTAxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQpAQCAtMTkxLDcgKzE5MSw4IEBAIFN0cmlu
ZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZyYW1lLCBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3ks
IFN0cmluZyogdGl0bGUpIGNvCiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0Rh
dGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSkuZG9jdW1lbnRGcmFnbWVudChmcmFtZSwg
cmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgUGFzdGVib2FyZCBw
YXN0ZWJvYXJkKG1fcGFzdGVib2FyZE5hbWUpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCku
d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQsICpyYW5nZSwgYWxsb3dQbGFpblRl
eHQsIGNob3NlUGxhaW5UZXh0KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggMDliMzI4
YjVkOWM1ZDhlMjgzYzE5OTczMjU3MjhlZjM5NzRkNjAwZS4uYjQyYmNjMzFiNGViZWQ4MWE2MmZj
MjE5Nzg0YTA2M2M4ZmI1ZDhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRNYWMubW0KQEAgLTI3MywyNyArMjczLDMyIEBAIGJvb2wgUGFzdGVib2FyZDo6Y2Fu
U21hcnRSZXBsYWNlKCkKIAogdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRQbGFpblRl
eHQmIHRleHQpCiB7CisgICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7CisKICAgICBWZWN0b3I8U3RyaW5n
PiB0eXBlczsKLSAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBzdHJhdGVneS5nZXRUeXBl
cyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CiAgICAgCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KFN0cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKSkgewotICAgICAgICB0ZXh0LnBsYWluVGV4dCA9
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c3RyaW5nRm9yVHlw
ZShOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgICAgICB0ZXh0LnRl
eHQgPSBzdHJhdGVneS5zdHJpbmdGb3JUeXBlKE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJv
YXJkTmFtZSk7CisgICAgICAgIHRleHQuaXNVUkwgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TUlRGRFBib2FyZFR5
cGUpKSkgewotICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShOU1JURkRQ
Ym9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkgeworICAgICAgICBpZiAoUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSA9IHN0cmF0ZWd5LmJ1ZmZlckZvclR5cGUoTlNSVEZEUGJvYXJkVHlwZSwg
bV9wYXN0ZWJvYXJkTmFtZSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvIGF0dHJpYnV0ZWRTdHJp
bmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6ZGF0
YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdKSkgewotICAg
ICAgICAgICAgICAgIHRleHQucGxhaW5UZXh0ID0gW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXTsK
KyAgICAgICAgICAgICAgICB0ZXh0LnRleHQgPSBbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddOwor
ICAgICAgICAgICAgICAgIHRleHQuaXNVUkwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAodHlwZXMuY29u
dGFpbnMoU3RyaW5nKE5TUlRGUGJvYXJkVHlwZSkpKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5idWZmZXJGb3JUeXBlKE5TUlRGUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsK
KyAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBzdHJhdGVneS5idWZmZXJG
b3JUeXBlKE5TUlRGUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKICAgICAgICAgICAg
IGlmIChhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFJURjpkYXRhLT5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0
dHJpYnV0ZXM6TlVMTF0pKSB7Ci0gICAgICAgICAgICAgICAgdGV4dC5wbGFpblRleHQgPSBbYXR0
cmlidXRlZFN0cmluZyBzdHJpbmddOworICAgICAgICAgICAgICAgIHRleHQudGV4dCA9IFthdHRy
aWJ1dGVkU3RyaW5nIHN0cmluZ107CisgICAgICAgICAgICAgICAgdGV4dC5pc1VSTCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MzAxLDIxNiArMzA2LDk3IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxhaW5U
ZXh0JiB0ZXh0KQogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGUpKSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXM7Ci0gICAgICAg
IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0UGF0aG5hbWVz
Rm9yVHlwZShwYXRobmFtZXMsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFt
ZSk7CisgICAgICAgIHN0cmF0ZWd5LmdldFBhdGhuYW1lc0ZvclR5cGUocGF0aG5hbWVzLCBOU0Zp
bGVuYW1lc1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGF0aG5hbWVz
LnNpemUoKTsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgaWYgKGkpCiAgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChw
YXRobmFtZXNbaV0pOwogICAgICAgICB9Ci0gICAgICAgIHRleHQucGxhaW5UZXh0ID0gYnVpbGRl
ci50b1N0cmluZygpOworICAgICAgICB0ZXh0LnRleHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgICAgIHRleHQuaXNVUkwgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZJWE1FOiBBbGwgdGhlIG90aGVyIGNhc2VzIGxvb2sgYXQgdGhlIHR5cGVzIHZlY3RvciBm
aXJzdCwgYnV0IHRoaXMganVzdCBnZXRzIHRoZSBzdHJpbmcgd2l0aG91dCBjaGVja2luZy4gV2h5
PwotICAgIHRleHQudXJsID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5zdHJpbmdGb3JUeXBlKE5TVVJMUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci19
Ci0gICAgCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdt
ZW50V2l0aEltYWdlUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPEFyY2hpdmVSZXNv
dXJjZT4gcmVzb3VyY2UpCi17Ci0gICAgaWYgKCFyZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgCi0gICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSkKLSAgICAgICAgbG9hZGVyLT5hZGRBcmNoaXZlUmVzb3VyY2UocmVz
b3VyY2UuZ2V0KCkpOwotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGltYWdlRWxlbWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBmYWxzZSk7Ci0g
ICAgaWYgKCFpbWFnZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTlNVUkwgKlVS
TCA9IHJlc291cmNlLT51cmwoKTsKLSAgICBpbWFnZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnNyY0F0dHIsIFtVUkwgaXNGaWxlVVJMXSA/IFtVUkwgYWJzb2x1dGVTdHJpbmddIDog
cmVzb3VyY2UtPnVybCgpKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgIGlmIChm
cmFnbWVudCkgewotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoaW1hZ2VFbGVtZW50LCBJ
R05PUkVfRVhDRVBUSU9OKTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIDA7CisgICAgLy8gRklYTUU6IFRoZSBjb2RlIGFib3ZlIGxvb2tzIGF0
IHRoZSB0eXBlcyB2ZWN0b3IgZmlyc3QsIGJ1dCB0aGlzIGp1c3QgZ2V0cyB0aGUgc3RyaW5nIHdp
dGhvdXQgY2hlY2tpbmcuIFdoeSB0aGUgZGlmZmVyZW5jZT8KKyAgICB0ZXh0LnRleHQgPSBzdHJh
dGVneS5zdHJpbmdGb3JUeXBlKE5TVVJMUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7Cisg
ICAgdGV4dC5pc1VSTCA9ICF0ZXh0LnRleHQuaXNOdWxsKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRXaXRoUlRGKEZyYW1lKiBmcmFt
ZSwgTlNTdHJpbmcgKnBhc3RlYm9hcmRUeXBlLGNvbnN0IFN0cmluZyYgcGFzdGVib3JkTmFtZSkK
K3ZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkV2ViQ29udGVudFJlYWRlciYgcmVhZGVy
KQogewotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0g
TlNSVEZEUGJvYXJkVHlwZSkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBl
KE5TUlRGRFBib2FyZFR5cGUsIHBhc3RlYm9yZE5hbWUpOwotICAgICAgICBpZiAoZGF0YSkKLSAg
ICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJU
RkQ6ZGF0YS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwot
ICAgIH0KLSAgICBpZiAoc3RyaW5nID09IG5pbCkgewotICAgICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5i
dWZmZXJGb3JUeXBlKE5TUlRGUGJvYXJkVHlwZSwgcGFzdGVib3JkTmFtZSk7Ci0gICAgICAgIGlm
IChkYXRhKQotICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoUlRGOmRhdGEtPmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRl
czpOVUxMXTsKLSAgICB9Ci0gICAgaWYgKHN0cmluZyA9PSBuaWwpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICBib29sIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9IGZyYW1lLT5wYWdlKCktPmRl
ZmVyc0xvYWRpbmcoKTsKLSAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAg
ZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKLQotICAgIFZlY3RvcjxSZWZQ
dHI8QXJjaGl2ZVJlc291cmNlPiA+IHJlc291cmNlczsKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPmRvY3VtZW50RnJhZ21l
bnRGcm9tQXR0cmlidXRlZFN0cmluZyhzdHJpbmcsIHJlc291cmNlcyk7Ci0KLSAgICBzaXplX3Qg
c2l6ZSA9IHJlc291cmNlcy5zaXplKCk7Ci0gICAgaWYgKHNpemUpIHsKLSAgICAgICAgRG9jdW1l
bnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIGxvYWRl
ci0+YWRkQXJjaGl2ZVJlc291cmNlKHJlc291cmNlc1tpXSk7ICAgIAotICAgIH0KLQotICAgIGlm
ICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQotICAgICAgICBmcmFtZS0+cGFnZSgpLT5zZXREZWZl
cnNMb2FkaW5nKGZhbHNlKTsKKyAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIAotICAgIFtzdHJpbmcg
cmVsZWFzZV07Ci0gICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLX0KLQotI2RlZmluZSBX
ZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCi0KLXN0YXRpYyBOU1VSTCog
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAg
IENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwot
ICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5n
KGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsK
LSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5n
LCByZWxhdGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1
cm4gVVJMOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dEZyb21XZWJBcmNoaXZlKEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZl
PiBjb3JlQXJjaGl2ZSkKLXsKLSAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBtYWluUmVzb3Vy
Y2UgPSBjb3JlQXJjaGl2ZS0+bWFpblJlc291cmNlKCk7Ci0gICAgaWYgKCFtYWluUmVzb3VyY2Up
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgY29uc3QgU3RyaW5nJiBNSU1FVHlwZSA9IG1haW5S
ZXNvdXJjZS0+bWltZVR5cGUoKTsKLSAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZG9jdW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoZnJhbWUtPmxvYWRlcigpLmNsaWVudCgp
LmNhblNob3dNSU1FVHlwZUFzSFRNTChNSU1FVHlwZSkpIHsKLSAgICAgICAgUmV0YWluUHRyPE5T
U3RyaW5nPiBtYXJrdXBTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
RGF0YTptYWluUmVzb3VyY2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkuZ2V0KCkgZW5jb2Rpbmc6
TlNVVEY4U3RyaW5nRW5jb2RpbmddKTsKLSAgICAgICAgLy8gRklYTUU6IHNlZW1zIHBvb3IgZm9y
bSB0byBkbyB0aGlzIGFzIGEgc2lkZSBlZmZlY3Qgb2YgZ2V0dGluZyBhIGRvY3VtZW50IGZyYWdt
ZW50Ci0gICAgICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCkpCi0gICAgICAgICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNv
dXJjZXMoY29yZUFyY2hpdmUuZ2V0KCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcuZ2V0KCksIG1haW5SZXNv
dXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7Ci0gICAgfQot
Ci0gICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShNSU1F
VHlwZSkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2Uo
ZnJhbWUsIG1haW5SZXNvdXJjZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFt
ZSwgUGFzc1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYg
Y2hvc2VQbGFpblRleHQpCi17CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9w
YXN0ZWJvYXJkTmFtZSk7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50Owot
ICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CisgICAgc3RyYXRlZ3kuZ2V0VHlwZXModHlwZXMs
IG1fcGFzdGVib2FyZE5hbWUpOwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYkFyY2hpdmVQ
Ym9hcmRUeXBlKSkgewotICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gd2ViQXJjaGl2
ZUJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVm
ZmVyRm9yVHlwZShXZWJBcmNoaXZlUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKLSAg
ICAgICAgICAgIGlmIChSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdh
Y3lXZWJBcmNoaXZlOjpjcmVhdGUoS1VSTCgpLCB3ZWJBcmNoaXZlQnVmZmVyLmdldCgpKSkgewot
ICAgICAgICAgICAgICAgIGlmICgoZnJhZ21lbnQgPSBmcmFnbWVudEZyb21XZWJBcmNoaXZlKGZy
YW1lLCBjb3JlQXJjaGl2ZSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gYnVmZmVyID0gc3RyYXRlZ3kuYnVmZmVyRm9yVHlwZShXZWJBcmNoaXZlUGJvYXJkVHlwZSwg
bV9wYXN0ZWJvYXJkTmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZFdlYkFyY2hp
dmUoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU0ZpbGVuYW1lc1Bib2Fy
ZFR5cGUpKSkgewogICAgICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRQYXRobmFtZXNGb3JUeXBl
KHBhdGhzLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwotICAgICAg
ICBWZWN0b3I8IFJlZlB0cjxOb2RlPiA+IHJlZk5vZGVzVmVjdG9yOwotICAgICAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVzVmVjdG9yOwotCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0
aHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBf
d2ViX3VzZXJWaXNpYmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdp
bGwKLSAgICAgICAgICAgIC8vIGJlIHBhc3RlZCBhcyB2aXNpYmxlIHRleHQuCi0gICAgICAgICAg
ICBOU1N0cmluZyAqdXJsID0gZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT51c2VyVmlzaWJsZVN0
cmluZyhbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhzW2ldXSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gdGV4dE5vZGUgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlVGV4dE5vZGUodXJs
KTsKLSAgICAgICAgICAgIHJlZk5vZGVzVmVjdG9yLmFwcGVuZCh0ZXh0Tm9kZS5nZXQoKSk7Ci0g
ICAgICAgICAgICBub2Rlc1ZlY3Rvci5hcHBlbmQodGV4dE5vZGUuZ2V0KCkpOwotICAgICAgICB9
Ci0gICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoZnJhbWUtPmRvY3Vt
ZW50KCksIG5vZGVzVmVjdG9yKTsKLSAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50LT5m
aXJzdENoaWxkKCkpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAg
ICAgICBzdHJhdGVneS5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhzLCBOU0ZpbGVuYW1lc1Bib2Fy
ZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgICAgICBpZiAocmVhZGVyLnJlYWRGaWxlbmFt
ZXMocGF0aHMpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh0eXBlcy5j
b250YWlucyhTdHJpbmcoTlNIVE1MUGJvYXJkVHlwZSkpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpI
VE1MU3RyaW5nID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5z
dHJpbmdGb3JUeXBlKE5TSFRNTFBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwotICAgICAg
ICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIE1pY3Jvc29mdCdzIEhUTUwgcGFzdGVib2FyZCBk
YXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgotICAgICAgICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJlZml4
OkAiVmVyc2lvbjoiXSkgewotICAgICAgICAgICAgTlNSYW5nZSByYW5nZSA9IFtIVE1MU3RyaW5n
IHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIgb3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF07
Ci0gICAgICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAg
ICAgICAgICAgIEhUTUxTdHJpbmcgPSBbSFRNTFN0cmluZyBzdWJzdHJpbmdGcm9tSW5kZXg6cmFu
Z2UubG9jYXRpb25dOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChbSFRN
TFN0cmluZyBsZW5ndGhdICE9IDAgJiYKLSAgICAgICAgICAgIChmcmFnbWVudCA9IGNyZWF0ZUZy
YWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgSFRNTFN0cmluZywgZW1wdHlTdHJp
bmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgICAgICBTdHJpbmcgc3RyaW5nID0gc3RyYXRl
Z3kuc3RyaW5nRm9yVHlwZShOU0hUTUxQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAg
ICAgICAgaWYgKCFzdHJpbmcuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRIVE1MKHN0cmluZykpCisg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmlu
ZyhOU1JURkRQYm9hcmRUeXBlKSkgJiYKLSAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFn
bWVudFdpdGhSVEYoZnJhbWUsIE5TUlRGRFBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpKSkK
LSAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotCi0gICAgaWYgKHR5cGVzLmNvbnRh
aW5zKFN0cmluZyhOU1JURlBib2FyZFR5cGUpKSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBkb2N1
bWVudEZyYWdtZW50V2l0aFJURihmcmFtZSwgTlNSVEZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmRO
YW1lKSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgaWYgKHR5cGVz
LmNvbnRhaW5zKFN0cmluZyhOU1JURkRQYm9hcmRUeXBlKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LmJ1ZmZlckZvclR5cGUoTlNSVEZEUGJv
YXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChyZWFkZXIucmVh
ZFJURkQoYnVmZmVyLnJlbGVhc2UoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhOU1RJRkZQYm9hcmRU
eXBlKSkgJiYKLSAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJl
c291cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNUSUZGUGJvYXJkVHlwZSwg
bV9wYXN0ZWJvYXJkTmFtZSksIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50aWZm
IiksIEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvdGlmZiIpLCBlbXB0eVN0cmluZygpLCBlbXB0eVN0cmlu
ZygpKSkpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIGlmICh0eXBl
cy5jb250YWlucyhTdHJpbmcoTlNSVEZQYm9hcmRUeXBlKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LmJ1ZmZlckZvclR5cGUoTlNSVEZQYm9h
cmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkgeworICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFk
UlRGKGJ1ZmZlci5yZWxlYXNlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KIAotICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNQREZQYm9hcmRUeXBl
KSkgJiYKLSAgICAgICAgKGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291
cmNlKGZyYW1lLCBBcmNoaXZlUmVzb3VyY2U6OmNyZWF0ZShwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoTlNQREZQYm9hcmRUeXBlLCBtX3Bh
c3RlYm9hcmROYW1lKS5nZXQoKSwgdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0
aW9uLnBkZiIpLCBBU0NJSUxpdGVyYWwoImFwcGxpY2F0aW9uL3BkZiIpLCBlbXB0eVN0cmluZygp
LCBlbXB0eVN0cmluZygpKSkpKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwor
ICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNUSUZGUGJvYXJkVHlwZSkpKSB7CisgICAg
ICAgIGlmIChSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBzdHJhdGVneS5idWZmZXJGb3JU
eXBlKE5TVElGRlBib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpKSB7CisgICAgICAgICAgICBp
ZiAocmVhZGVyLnJlYWRJbWFnZShidWZmZXIucmVsZWFzZSgpLCBBU0NJSUxpdGVyYWwoImltYWdl
L3RpZmYiKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCi0g
ICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhrVVRUeXBlUE5HKSkgJiYKLSAgICAgICAgKGZy
YWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlKGZyYW1lLCBBcmNoaXZl
UmVzb3VyY2U6OmNyZWF0ZShwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPmJ1ZmZlckZvclR5cGUoU3RyaW5nKGtVVFR5cGVQTkcpLCBtX3Bhc3RlYm9hcmROYW1lKSwg
dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpLCBBU0NJSUxpdGVyYWwoImlt
YWdlL3BuZyIpLCBlbXB0eVN0cmluZygpLCBlbXB0eVN0cmluZygpKSkpKQotICAgICAgICByZXR1
cm4gZnJhZ21lbnQucmVsZWFzZSgpOworICAgIGlmICh0eXBlcy5jb250YWlucyhTdHJpbmcoTlNQ
REZQYm9hcmRUeXBlKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZl
ciA9IHN0cmF0ZWd5LmJ1ZmZlckZvclR5cGUoTlNQREZQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmRO
YW1lKSkgeworICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFkSW1hZ2UoYnVmZmVyLnJlbGVhc2Uo
KSwgQVNDSUlMaXRlcmFsKCJhcHBsaWNhdGlvbi9wZGYiKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQogCi0gICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0cmluZyhO
U1VSTFBib2FyZFR5cGUpKSkgewotICAgICAgICBOU1VSTCAqVVJMID0gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT51cmwobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAg
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgICAgICBBU1NF
UlQoZG9jdW1lbnQpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3IgPSBkb2N1bWVudC0+Y3JlYXRlRWxl
bWVudChIVE1MTmFtZXM6OmFUYWcsIGZhbHNlKTsKLSAgICAgICAgTlNTdHJpbmcgKlVSTFN0cmlu
ZyA9IFtVUkwgYWJzb2x1dGVTdHJpbmddOyAvLyBPcmlnaW5hbCBkYXRhIGlzIEFTQ0lJLW9ubHks
IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlY29tcG9zZS4KLSAgICAgICAgaWYgKFtVUkxTdHJp
bmcgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNTdHJp
bmcgKlVSTFRpdGxlU3RyaW5nID0gW3BsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+c3RyaW5nRm9yVHlwZShXZWJVUkxOYW1lUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSkgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAgICAgIGFu
Y2hvci0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIsIFVSTFN0cmluZyk7Ci0gICAg
ICAgIGFuY2hvci0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKFVSTFRpdGxl
U3RyaW5nKSwgSUdOT1JFX0VYQ0VQVElPTik7Ci0gICAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLSAgICAgICAgaWYgKGZyYWdtZW50KSB7Ci0gICAg
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYW5jaG9yLCBJR05PUkVfRVhDRVBUSU9OKTsK
LSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKFN0cmluZyhrVVRUeXBlUE5HKSkpIHsKKyAgICAgICAgaWYgKFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IHN0cmF0ZWd5LmJ1ZmZlckZvclR5cGUoa1VUVHlwZVBORywgbV9wYXN0
ZWJvYXJkTmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChyZWFkZXIucmVhZEltYWdlKGJ1ZmZlci5y
ZWxlYXNlKCksIEFTQ0lJTGl0ZXJhbCgiaW1hZ2UvcG5nIikpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiB0eXBl
cy5jb250YWlucyhTdHJpbmcoTlNTdHJpbmdQYm9hcmRUeXBlKSkpIHsKLSAgICAgICAgY2hvc2VQ
bGFpblRleHQgPSB0cnVlOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoY29udGV4dC5nZXQoKSwgW3BsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+c3RyaW5nRm9yVHlwZShOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUp
IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKTsKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKKyAgICBpZiAodHlwZXMuY29udGFpbnMoU3RyaW5nKE5TVVJM
UGJvYXJkVHlwZSkpKSB7CisgICAgICAgIEtVUkwgdXJsID0gc3RyYXRlZ3kudXJsKG1fcGFzdGVi
b2FyZE5hbWUpOworICAgICAgICBTdHJpbmcgdGl0bGUgPSBzdHJhdGVneS5zdHJpbmdGb3JUeXBl
KFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICAgICAgaWYgKCF1
cmwuaXNOdWxsKCkgJiYgcmVhZGVyLnJlYWRVUkwodXJsLCB0aXRsZSkpCisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFN0
cmluZyhOU1N0cmluZ1Bib2FyZFR5cGUpKSkgeworICAgICAgICBTdHJpbmcgc3RyaW5nID0gc3Ry
YXRlZ3kuc3RyaW5nRm9yVHlwZShOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUp
OworICAgICAgICBpZiAoIXN0cmluZy5pc051bGwoKSAmJiByZWFkZXIucmVhZFBsYWluVGV4dChz
dHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIH0KIAogYm9vbCBQYXN0ZWJvYXJk
OjpoYXNEYXRhKCkK
</data>
<flag name="review"
          id="233623"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>