<?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>22203</bug_id>
          
          <creation_ts>2008-11-12 05:29:14 -0800</creation_ts>
          <short_desc>Implement Worker messaging</short_desc>
          <delta_ts>2008-11-12 23:27:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98464</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-12 05:29:14 -0800</bug_when>
    <thetext>We need MessagePorts to work across threads. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98468</commentid>
    <comment_count>1</comment_count>
      <attachid>25096</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-12 06:38:50 -0800</bug_when>
    <thetext>Created attachment 25096
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98471</commentid>
    <comment_count>2</comment_count>
      <attachid>25096</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-12 07:42:30 -0800</bug_when>
    <thetext>Comment on attachment 25096
proposed patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98593</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-12 23:27:37 -0800</bug_when>
    <thetext>Committed revision 38365.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25096</attachid>
            <date>2008-11-12 06:38:50 -0800</date>
            <delta_ts>2008-11-12 07:42:30 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>CrossThreadMessaging.txt</filename>
            <type>text/plain</type>
            <size>72854</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODMzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM3IEBACisyMDA4LTExLTEyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIyMDMKKyAgICAgICAg
SW1wbGVtZW50IFdvcmtlciBtZXNzYWdpbmcKKworICAgICAgICBObyB0ZXN0IGNhc2VzIGluY2x1
ZGVkLCBiZWNhdXNlIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0Lgor
CisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBrbm93biB0byBzdGlsbCBoYXZlIG1hbnkg
cmFjZSBjb25kaXRpb24sIGJ1dCB3b3JrcyBxdWl0ZSB3ZWxsIGZvcgorICAgICAgICB0ZXN0aW5n
LgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBX
b3JrZXJUYXNrLntoLGNwcH0uCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KTogUmUt
d29yZGVkIGNvbW1lbnRzIGEgbGl0dGxlLgorICAgICAgICAoV2ViQ29yZTo6bWFya0Nyb3NzSGVh
cERlcGVuZGVudE9iamVjdHNGb3JDb250ZXh0KTogRXhpc3RpbmcgY3Jvc3MtaGVhcCBHQyBwcm90
b2NvbCB3YXMKKyAgICAgICAgaW5jb3JyZWN0LCBjaGFuZ2VkIGl0IHRvIGEgbXVjaCBzaW1wbGVy
IChidXQgc3RpbGwgaW5jb3JyZWN0KSB2ZXJzaW9uLgorCisgICAgICAgICogZG9tL1dvcmtlclRh
c2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRhc2s6On5Xb3JrZXJUYXNr
KToKKyAgICAgICAgKiBkb20vV29ya2VyVGFzay5oOiBBZGRlZC4KKyAgICAgICAgVGFza3MgcG9z
dGVkIHRvIHdvcmtlcnMgaW1wbGVtZW50IHRoaXMgbmV3IGludGVyZmFjZS4KKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRGVkaWNhdGVkV29ya2VyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTRGVkaWNhdGVkV29ya2VyOjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRGVkaWNh
dGVkV29ya2VyOjpjb25uZWN0KToKKyAgICAgICAgKiBkb20vRGVkaWNhdGVkV29ya2VyLmg6Cisg
ICAgICAgICogZG9tL0RlZGljYXRlZFdvcmtlci5pZGw6CisgICAgICAgIEF1dG8tZ2VuZXJhdGUg
ZXZlbnQgbGlzdGVuZXIgYXR0cmlidXRlcy4gUmVuYW1lZCBzdGFydENvbnZlcnNhdGlvbigpIHRv
IGNvbm5lY3QoKSwgdHJhY2tpbmcKKyAgICAgICAgV0hBVFdHIGRpc2N1c3Npb25zLgorCisgICAg
ICAgICogZG9tL0RlZGljYXRlZFdvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJD
b25uZWN0VGFzazo6V29ya2VyQ29ubmVjdFRhc2spOiBBIHRhc2sgdGhhdCBwZXJmb3JtcyB3b3Jr
ZXItc2lkZSBjb25uZWN0KCkKKyAgICAgICAgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OkRlZGljYXRlZFdvcmtlcjo6RGVkaWNhdGVkV29ya2VyKTogSW5pdGlhbGl6ZSBXb3JrZXJUaHJl
YWQgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtlcjo6Y29ubmVjdCk6
IENvbm5lY3QoKSBjcmVhdGVzIGEgcGFpciBvZiBlbnRhbmdsZWQgcG9ydHMsIGFuZCBwb3N0cwor
ICAgICAgICBvbmUgdG8gd29ya2VyLiBTaW5jZSBtZXNzYWdlIHBvcnQgcmVnaXN0cmF0aW9uIGlu
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaXMgbm90IHRocmVhZCBzYWZlLAorICAgICAgICB0aGlz
IHBvcnQgc3RhcnRzIHdpdGggYSBudWxsIGNvbnRleHQgcG9pbnRlci4KKyAgICAgICAgKFdlYkNv
cmU6OkRlZGljYXRlZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQpOiBTaW5jZSBXb3JrZXIgbWV0aG9k
cyBzaG91bGQgd29yayBpbW1lZGlhdGVseQorICAgICAgICBhZnRlciBjcmVhdGlvbiwgd2UgaGF2
ZSB0byBxdWV1ZSB0YXNrcyB1bnRpbCBhZnRlciBhIFdvcmtlclRocmVhZCBvYmplY3QgaXMgY3Jl
YXRlZC4gVGhlbiB3ZQorICAgICAgICBmb3J3YXJkIGFsbCBxdWV1ZWQgdGFza3MgdG8gaXRzIHF1
ZXVlLgorCisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDogKFdlYkNvcmU6OkV2ZW50VGFy
Z2V0Ojp0b1dvcmtlckNvbnRleHQpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwOiAoV2ViQ29yZTo6dG9KUyk6Cisg
ICAgICAgIEFkZGVkIGNhc2VzIGZvciBXb3JrZXJDb250ZXh0LCB3aGljaCBpcyBub3cgYW4gRXZl
bnRUYXJnZXQsIHRvby4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5o
OiBBZGRlZCBKU1dvcmtlckNvbnRleHQ6OnB1dCgpIHRvIG1ha2Ugb25jb25uZWN0IHNldHRhYmxl
LgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6Om1hcmspOiBNYXJrIGV2ZW50IGxpc3RlbmVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6Y3JlYXRlUHJvdG90eXBlKTogRml4ZWQg
YSB0eXBvLCB1c2UgdGhlIHJpZ2h0IFN0cnVjdHVyZUlELgorICAgICAgICAoV2ViQ29yZTo6SlNX
b3JrZXJDb250ZXh0OjpwdXQpOiBJbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmpzV29y
a2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcik6IEFkZGVkIGFuIEV2
ZW50VGFyZ2V0IGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6anNXb3JrZXJDb250
ZXh0UHJvdG90eXBlRnVuY3Rpb25SZW1vdmVFdmVudExpc3RlbmVyKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlvbkRpc3BhdGNoRXZlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmpzV29ya2VyQ29udGV4dE9uY29ubmVjdCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNXb3JrZXJDb250ZXh0T25jb25uZWN0KTogQWRk
ZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcDog
KFdlYkNvcmU6OldvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKToKKyAgICAgICAgTWFk
ZSBpdCBhY3R1YWxseSB3b3JrIGJ5IGFkZGluZyBuZWNlc3Nhcnkgc2V0dXAuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmg6IChXZWJDb3JlOjpXb3JrZXJT
Y3JpcHRDb250cm9sbGVyOjppbml0U2NyaXB0SWZOZWVkZWQpOgorICAgICAgICBDaGVjayB0aGUg
cmlnaHQgdmFyaWFibGUgLSBpdCBpcyB0aGUgd3JhcHBlciB0aGF0IG1heSBub3QgYmUgaW5pdGlh
bGl6ZWQgeWV0LgorCisgICAgICAgICogZG9tL0FjdGl2ZURPTU9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6OkFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY3RpdmVET01PYmplY3Q6On5BY3RpdmVET01PYmplY3QpOgorICAgICAgICBBc3Nl
cnQgYmVpbmcgY2FsbGVkIGZyb20gdGhlIGNvcnJlY3QgdGhyZWFkLCBhcyBhY3RpdmUgRE9NIG9i
amVjdCB0cmFja2luZyBpcyBub3QgdGhyZWFkIHNhZmUuCisKKyAgICAgICAgKiBkb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oOiBBZGRlZCBhIFRhc2sgaW50ZXJmYWNlIGFuZCBhIHBvc3RUYXNr
KCkgbWV0aG9kLCB0byBiZSB1c2VkCisgICAgICAgIGZvciBhc3luY2hyb25vdXNseSBleGVjdXRp
bmcgdGFza3MgaW4gY29udGV4dCdzIHRocmVhZC4KKworICAgICAgICAqIGRvbS9TY3JpcHRFeGVj
dXRpb25Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NNZXNzYWdlc1Nvb25U
YXNrKTogQ2hhbmdlZCBmcm9tIGEgVGltZXIgdG8gYSBUYXNrCisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpTY3JpcHRFeGVjdXRpb25Db250ZXh0KTogUmVtb3ZlZCBt
X2ZpcmVkTWVzc2FnZVBvcnRUaW1lci4KKyAgICAgICAgSXQgd2FzIGFuIG9wdGltaXphdGlvbiB0
aGF0IGNvdWxkbid0IGJlIGVhc2lseSBwcmVzZXJ2ZWQgd2l0aG91dCBpbnRyb2R1Y2luZyByYWNl
IGNvbmRpdGlvbnMKKyAgICAgICAgaW4gbXVsdGl0aHJlYWRpbmcgY2FzZS4KKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2Vz
U29vbik6IFVzZSBwb3N0VGFzaygpLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlUG9ydEV2ZW50cyk6IEFkZGVkIGEgY29tbWVudCBleHBs
YWluaW5nCisgICAgICAgIHdoeSBpdCdzIE9LIHRvIG5vdCByZWYoKSBwb3J0cyBpbiBhIGZyb3pl
biBjb3B5LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6Y3JlYXRl
ZE1lc3NhZ2VQb3J0KTogQXNzZXJ0IHRoYXQgd2UncmUgbm90IGJlaW5nIGNhbGxlZAorICAgICAg
ICBmcm9tIGEgd3JvbmcgdGhyZWFkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6ZGVzdHJveWVkTWVzc2FnZVBvcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHRUYXNrVGltZXIpOiBQYXJ0IG9mCisgICAgICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgaW1wbGVtZW50YXRpb24gLSB1c2UgVGltZXIgaWYgcG9z
dGluZyBmcm9tIG1haW4gdGhyZWFkIHRvIG1haW4KKyAgICAgICAgdGhyZWFkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dFRhc2tXb3JrZXJUYXNrKTogQW5vdGhlciBw
YXJ0IC0gdXNlIFdvcmtlclRhc2sgaWYgcG9zdGluZworICAgICAgICB0byBhIHdvcmtlci4KKyAg
ICAgICAgKFdlYkNvcmU6OlBlcmZvcm1UYXNrQ29udGV4dDo6UGVyZm9ybVRhc2tDb250ZXh0KTog
RmluYWxseSwgdXNlIGNhbGxPbk1haW5UaHJlYWQoKSBpZiBwb3N0aW5nCisgICAgICAgIHRvIG1h
aW4gdGhyZWFkIGZyb20gYSBzZWNvbmRhcnkgb25lLgorICAgICAgICAoV2ViQ29yZTo6cGVyZm9y
bVRhc2spOiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgY2FsbE9uTWFpblRocmVhZCgpLgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cG9zdFRhc2spOiBVc2Ugb25lIG9m
IHRoZSBhYm92ZSBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiBkb20vTWVzc2FnZVBvcnQu
aDogRml4ZWQgbWVzc2FnZSBxdWV1ZSB0byBrZWVwIEV2ZW50RGF0YSBwb2ludGVycyAtIG90aGVy
d2lzZSwgd2Ugd291bGQKKyAgICAgICAgcmVmL2RlcmVmIEV2ZW50RGF0YTo6bWVzc2FnZSBmcm9t
IGRpZmZlcmVudCB0aHJlYWRzLCB3aGljaCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAqIGRv
bS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydENsb3NlRXZl
bnRUYXNrKTogVXNlIGEgdGFzayBpbnN0ZWFkIG9mIGEgdGltZXIgdG8gd29yayBhY3Jvc3MgdGhy
ZWFkcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpFdmVudERhdGE6OmNyZWF0ZSk6
IFVwZGF0ZWQgZm9yIEV2ZW50RGF0YSBiZWluZyByZWZjb3VudGFibGUgbm93LgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZVBvcnQ6OkV2ZW50RGF0YTo6RXZlbnREYXRhKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQpOiBTY3JpcHRFeGVjdXRpb25D
b250ZXh0IGlzIG5vdyBhbGxvd2VkIHRvIGJlIG51bGwgYXQKKyAgICAgICAgZmlyc3QsIGJlY2F1
c2Ugd2UgbmVlZCB0byBjcmVhdGUgcG9ydHMgZm9yIHBvc3RpbmcgdG8gb3RoZXIgdGhyZWFkcywg
YW5kIGl0IGlzIG5vdCBwb3NzaWJsZQorICAgICAgICB0byByZWdpc3RlciBpbiBhIGNvbnRleHQg
ZnJvbSBhbm90aGVyIHRocmVhZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpjbG9u
ZSk6IEFsd2F5cyBjcmVhdGUgcG9ydHMgd2l0aCBudWxsIGNvbnRleHRzIC0gaXQgaXMgbm93IG1l
c3NhZ2UKKyAgICAgICAgcmVjZWl2ZXIncyBqb2IgdG8gc2V0IHRoZSBjb250ZXh0LgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnBvc3RNZXNzYWdlKTogRW5hYmxlIHBvc3RpbmcgdG8g
cG9ydHMgdGhhdCBhcmUgbm90IGF0dGFjaGVkIHRvIGFueQorICAgICAgICBjb250ZXh0IHlldC4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0OjpzdGFydENvbnZlcnNhdGlvbik6IERpdHRv
LiBEYXRhIHBvcnQgaXMgYWx3YXlzIHBvc3RlZCB1bmF0dGFjaGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQpOiBBc3NlcnQgdGhhdCB3ZSBoYWQgYSBj
b250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmF0dGFjaFRvQ29udGV4dCk6
IENhbGxlZCB3aGVuIHJlY2VpdmluZyBhIGRhdGEgcG9ydCB0byByZWdpc3RlciBpbgorICAgICAg
ICBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOiBNb3ZlZCBmcm9tIGhlYWRlciwgYXMgdGhlIGZ1bmN0aW9uIGlzIHZpcnR1YWwu
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcyk6IEF0dGFj
aCBkYXRhIHBvcnQgdG8gcmVjZWl2aW5nIGNvbnRleHQuIFVzZSBwb3N0VGFzaygpLgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OnF1ZXVlQ2xvc2VFdmVudCk6IFVzZSBwb3N0VGFzaygp
LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6IFJl
d29yZGVkIGNvbW1lbnQgYSBsaXR0bGUuIEFzIG1lbnRpb25lZCBhYm92ZSwKKyAgICAgICAgTWVz
c2FnZVBvcnQgY3Jvc3MtaGVhcCBHQyBpcyBzdGlsbCBxdWl0ZSB3cm9uZy4KKworICAgICAgICAq
IGRvbS9Xb3JrZXJDb250ZXh0Lmg6IE1hZGUgV29ya2VyQ29udGV4dCBhbiBldmVudCB0YXJnZXQs
IGFkZGVkIG9uY29ubmVjdCBhdHRyaWJ1dGUuCisgICAgICAgICogZG9tL1dvcmtlckNvbnRleHQu
Y3BwOiBLZWVwIGEgcG9pbnRlciB0byBXb3JrZXJUaHJlYWQuIEl0IGlzIG9ubHkgdXNlZCBmb3Ig
ZGVidWcgYXNzZXJ0aW9ucworICAgICAgICBub3csIGJ1dCB0aGVyZSBpcyBubyBoYXJtIGluIHRy
YWNraW5nIGl0IGluIHJlbGVhc2UgYnVpbGRzLCB0b28uCisKKyAgICAgICAgKiBkb20vV29ya2Vy
VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKTogV29y
a2VyVGhyZWFkIGlzIHJlZmNvdW50YWJsZSwgY29uc3RydWN0IHdpdGggY3JlYXRlKCkuCisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6IEltcGxlbWVudGVkIGEg
bWVzc2FnZSBsb29wLgorICAgICAgICAqIGRvbS9Xb3JrZXJUaHJlYWQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclRocmVhZDo6dGhyZWFkSUQpOiBBbHNvIG9ubHkgdXNlZCBmb3IgYXNzZXJ0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6bWVzc2FnZVF1ZXVlKTogUmV0
dXJuIGEgcmVmZXJlbmNlIHRvIHF1ZXVlLCBzbyBjbGllbnRzIGNhbiBwb3N0IHRvIGl0LgorCisg
ICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93
Ojpwb3N0TWVzc2FnZSk6IE1lc3NhZ2VQb3J0OjpjbG9uZSgpIG5vIGxvbmdlciB0YWtlcyBhIGNv
bnRleHQsIGFzIGl0CisgICAgICAgIGFsd2F5cyBzZXRzIGl0IHRvIG51bGwuCisgICAgICAgIChX
ZWJDb3JlOjpET01XaW5kb3c6OnBvc3RNZXNzYWdlVGltZXJGaXJlZCk6IEF0dGFjaCBkYXRhIHBv
cnQgdG8gcmVjZWl2aW5nIGNvbnRleHQuCisKIDIwMDgtMTEtMTAgIFRvciBBcm5lIFZlc3Riw7gg
IDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhh
dXNtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQxMzYsNiArNDEzNiw4IEBACiAJCUUxMDc0MDBFMEU3
N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbC5oICovOyB9OwogCQlFMTA3NDMyNDBFNzgzNTgzMDAzM0FGMjQgLyogSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDc0MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBKU01lc3NhZ2VD
aGFubmVsQ29uc3RydWN0b3IuY3BwICovOyB9OwogCQlFMTA3NDMyNzBFNzgzNUE1MDAzM0FGMjQg
LyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3NDMyNjBFNzgzNUE1MDAzM0FGMjQgLyogSlNNZXNz
YWdlQ2hhbm5lbENvbnN0cnVjdG9yLmggKi87IH07CisJCUUxMDgyMjRCMEVDMzE1M0EwMEU5Mzk1
MyAvKiBXb3JrZXJUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTA4MjI0QTBFQzMxNTNBMDBFOTM5NTMgLyogV29ya2VyVGFzay5oICovOyB9Owor
CQlFMTA4MjI0RjBFQzMxNTY3MDBFOTM5NTMgLyogV29ya2VyVGFzay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA4MjI0RTBFQzMxNTY3MDBFOTM5
NTMgLyogV29ya2VyVGFzay5jcHAgKi87IH07CiAJCUUxMEI5MzdDMEI3M0MwMEEwMDNFRDg5MCAv
KiBKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEwQjkzN0IwQjczQzAwQTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBh
dGhOU1Jlc29sdmVyLmggKi87IH07CiAJCUUxMEI5M0MzMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMTBCOTNDMjBCNzNDMjkxMDAzRUQ4OTAgLyogSlNDdXN0b21YUGF0aE5T
UmVzb2x2ZXIuY3BwICovOyB9OwogCQlFMTBCOUI2QzBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZl
WFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTBCOUI2QTBCNzQ3NTk5MDAzRUQ4OTAgLyogTmF0aXZlWFBhdGhOU1Jlc29sdmVy
LmggKi87IH07CkBAIC04NzYxLDYgKzg3NjMsOCBAQAogCQlFMTA3NDAwQzBFNzdCREMwMDAzM0FG
MjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU01lc3NhZ2VDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0
MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlQ2hhbm5lbENvbnN0
cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwNzQzMjYwRTc4MzVB
NTAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTEwODIyNEEwRUMzMTUzQTAwRTkzOTUzIC8qIFdvcmtl
clRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyVGFzay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMTA4MjI0RTBFQzMxNTY3MDBFOTM5NTMgLyog
V29ya2VyVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3Jr
ZXJUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEwQjkzN0IwQjczQzAw
QTAwM0VEODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUxMEI5M0MyMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0N1
c3RvbVhQYXRoTlNSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
MEI5QjZBMEI3NDc1OTkwMDNFRDg5MCAvKiBOYXRpdmVYUGF0aE5TUmVzb2x2ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0aXZlWFBhdGhOU1Jlc29sdmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDA1Nyw2ICsxNDA2MSw4IEBACiAJCQkJRTFDMzYz
MDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLywKIAkJCQlFMUMzNjMw
MDBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCAqLywKIAkJCQlFMUMzNjJCQjBF
QUYyOUZCMDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaWRsICovLAorCQkJCUUxMDgyMjRFMEVD
MzE1NjcwMEU5Mzk1MyAvKiBXb3JrZXJUYXNrLmNwcCAqLywKKwkJCQlFMTA4MjI0QTBFQzMxNTNB
MDBFOTM5NTMgLyogV29ya2VyVGFzay5oICovLAogCQkJCUUxQzJDNDI4MEVBQ0UwRTAwMDdFNjFG
QiAvKiBXb3JrZXJUaHJlYWQuY3BwICovLAogCQkJCUUxQzJDNDIzMEVBQ0UwQkMwMDdFNjFGQiAv
KiBXb3JrZXJUaHJlYWQuaCAqLywKIAkJCQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0EgLyogWE1M
VG9rZW5pemVyLmNwcCAqLywKQEAgLTE2MjA2LDYgKzE2MjEyLDcgQEAKIAkJCQkwRkM3MDUyMTBF
QjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTA4MjI0QjBFQzMxNTNBMDBFOTM5NTMg
LyogV29ya2VyVGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODExNCw2ICsxODEyMSw3IEBACiAJ
CQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQTY0M0ZEMEVDMDk3QTAwMDc3OTY2
OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxMDgy
MjRGMEVDMzE1NjcwMEU5Mzk1MyAvKiBXb3JrZXJUYXNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzgzMjkpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
OSw4ICsyODksOCBAQCB2b2lkIG1hcmtET01Ob2Rlc0ZvckRvY3VtZW50KERvY3VtZW50KiBkCiAK
IHZvaWQgbWFya0FjdGl2ZU9iamVjdHNGb3JDb250ZXh0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKIHsKLSAg
ICAvLyBJZiBhbiBlbGVtZW50IGhhcyBwZW5kaW5nIGFjdGl2aXR5IHRoYXQgbWF5IHJlc3VsdCBp
biBsaXN0ZW5lcnMgYmVpbmcgY2FsbGVkCi0gICAgLy8gKGUuZy4gYW4gWE1MSHR0cFJlcXVlc3Qp
LCB3ZSBuZWVkIHRvIGtlZXAgYWxsIEpTIHdyYXBwZXJzIGFsaXZlLgorICAgIC8vIElmIGFuIGVs
ZW1lbnQgaGFzIHBlbmRpbmcgYWN0aXZpdHkgdGhhdCBtYXkgcmVzdWx0IGluIGV2ZW50IGxpc3Rl
bmVycyBiZWluZyBjYWxsZWQKKyAgICAvLyAoZS5nLiBhbiBYTUxIdHRwUmVxdWVzdCksIHdlIG5l
ZWQgdG8ga2VlcCBKUyB3cmFwcGVycyBhbGl2ZS4KIAogICAgIGNvbnN0IEhhc2hNYXA8QWN0aXZl
RE9NT2JqZWN0Kiwgdm9pZCo+JiBhY3RpdmVPYmplY3RzID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+YWN0aXZlRE9NT2JqZWN0cygpOwogICAgIEhhc2hNYXA8QWN0aXZlRE9NT2JqZWN0Kiwgdm9p
ZCo+Ojpjb25zdF9pdGVyYXRvciBhY3RpdmVPYmplY3RzRW5kID0gYWN0aXZlT2JqZWN0cy5lbmQo
KTsKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dChK
U0dsb2JhCiAgICAgZm9yIChIYXNoU2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBtZXNzYWdlUG9ydHMuYmVnaW4oKTsgaXRlciAhPSBwb3J0c0VuZDsgKytpdGVyKSB7CiAg
ICAgICAgIGlmICgoKml0ZXIpLT5oYXNQZW5kaW5nQWN0aXZpdHkoKSkgewogICAgICAgICAgICAg
RE9NT2JqZWN0KiB3cmFwcGVyID0gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihnbG9iYWxEYXRh
LCAqaXRlcik7Ci0gICAgICAgICAgICAvLyBBbiBvYmplY3Qgd2l0aCBwZW5kaW5nIGFjdGl2aXR5
IG11c3QgaGF2ZSBhIHdyYXBwZXIgdG8gbWFyayBpdHMgbGlzdGVuZXJzLCBzbyBubyBudWxsIGNo
ZWNrLgorICAgICAgICAgICAgLy8gQSBwb3J0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBtdXN0IGhh
dmUgYSB3cmFwcGVyIHRvIG1hcmsgaXRzIGxpc3RlbmVycywgc28gbm8gbnVsbCBjaGVjay4KICAg
ICAgICAgICAgIGlmICghd3JhcHBlci0+bWFya2VkKCkpCiAgICAgICAgICAgICAgICAgd3JhcHBl
ci0+bWFyaygpOwogICAgICAgICB9CkBAIC0zMjEsNiArMzIxLDcgQEAgdm9pZCBtYXJrQ3Jvc3NI
ZWFwRGVwZW5kZW50T2JqZWN0c0ZvckNvbgogICAgIEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29u
c3RfaXRlcmF0b3IgcG9ydHNFbmQgPSBtZXNzYWdlUG9ydHMuZW5kKCk7CiAgICAgZm9yIChIYXNo
U2V0PE1lc3NhZ2VQb3J0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlUG9ydHMuYmVn
aW4oKTsgaXRlciAhPSBwb3J0c0VuZDsgKytpdGVyKSB7CiAgICAgICAgIE1lc3NhZ2VQb3J0KiBw
b3J0ID0gKml0ZXI7CisgICAgICAgIEFTU0VSVChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgPT0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9y
dD4gZW50YW5nbGVkUG9ydCA9IHBvcnQtPmVudGFuZ2xlZFBvcnQoKTsKICAgICAgICAgaWYgKGVu
dGFuZ2xlZFBvcnQpIHsKICAgICAgICAgICAgIC8vIE5vIHdyYXBwZXIsIG9yIHdyYXBwZXIgaXMg
YWxyZWFkeSBtYXJrZWQgLSBubyBuZWVkIHRvIGV4YW1pbmUgY3Jvc3MtaGVhcCBkZXBlbmRlbmNp
ZXMuCkBAIC0zMzAsMTggKzMzMSwxNCBAQCB2b2lkIG1hcmtDcm9zc0hlYXBEZXBlbmRlbnRPYmpl
Y3RzRm9yQ29uCiAKICAgICAgICAgICAgIC8vIERvbid0IHVzZSBjcm9zcy1oZWFwIG1vZGVsIG9m
IG1hcmtpbmcgb24gc2FtZS1oZWFwIHBhaXJzLiBPdGhlcndpc2UsIHRoZXkgd2lsbCBuZXZlciBi
ZSBkZXN0cm95ZWQsIGJlY2F1c2UgYSBwb3J0IHdpbGwgbWFyayBpdHMgZW50YW5nbGVkIG9uZSwK
ICAgICAgICAgICAgIC8vIGFuZCBpdCB3aWxsIG5ldmVyIGdldCBhIGNoYW5jZSB0byBiZSBtYXJr
ZWQgYXMgaW5hY2Nlc3NpYmxlLiBTbywgdGhlIHBvcnQgd2lsbCBrZWVwIGdldHRpbmcgbWFya2Vk
IGluIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICBpZiAoKHBvcnQtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSA9PSBlbnRhbmdsZWRQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHx8
IChwb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSAmJiBlbnRhbmds
ZWRQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSkpCisgICAgICAg
ICAgICBpZiAoKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPT0gZW50YW5nbGVkUG9ydC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICB8fCAoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+aXNEb2N1bWVudCgpICYmIGVudGFuZ2xlZFBvcnQtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSAmJiBlbnRhbmdsZWRQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9j
dW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8vIElm
IHRoZSB3cmFwcGVyIGhhc24ndCBiZWVuIG1hcmtlZCBkdXJpbmcgdGhlIG1hcmsgcGhhc2Ugb2Yg
R0MsIHRoZW4gdGhlIHBvcnQgc2hvdWxkbid0IHByb3RlY3QgaXRzIGVudGFuZ2xlZCBvbmUuCi0g
ICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCBub3QgdG8gY2FsbCB0aGlzIHdoZW4gdGhlcmUg
aXMgbm8gd3JhcHBlci4gRS5nLiwgaWYgR0MgaXMgdHJpZ2dlcmVkIGFmdGVyIGEgTWVzc2FnZUNo
YW5uZWwgaXMgY3JlYXRlZCwgYnV0IGJlZm9yZSBpdHMgcG9ydHMgYXJlIHVzZWQgZnJvbSBKUywK
LSAgICAgICAgICAgIC8vIGlycmV2ZXJzaWJseSB0ZWxsaW5nIHRoZSBvYmplY3QgdGhhdCBpdHMg
KG5vdCB5ZXQgZXhpc3RpbmcpIHdyYXBwZXIgaXMgaW5hY2Nlc3NpYmxlIHdvdWxkIGJlIHdyb25n
LiBTaW1pbGFybHksIHBvcnRzIHBvc3RlZCB2aWEgcG9zdE1lc3NhZ2UoKSBtYXkgbm90Ci0gICAg
ICAgICAgICAvLyBoYXZlIHdyYXBwZXJzIHVudGlsIGRlbGl2ZXJlZC4KLSAgICAgICAgICAgIHBv
cnQtPnNldEpTV3JhcHBlcklzSW5hY2Nlc3NpYmxlKCk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRo
ZSBwb3J0IGlzIHByb3RlY3RlZCBieSBpdHMgZW50YW5nbGVkIG9uZSwgbWFyayBpdC4KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYW4gYXRvbWljIHJlYWQgb2YgYSBib29sZWFuIHZhbHVlLCBubyBz
eW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aHJlYWRzIGlzIHJlcXVpcmVkIChhdCBsZWFzdCBvbiBw
bGF0Zm9ybXMgdGhhdCBndWFyYW50ZWUgY2FjaGUgY29oZXJlbmN5KS4KLSAgICAgICAgICAgIGlm
ICghZW50YW5nbGVkUG9ydC0+anNXcmFwcGVySXNJbmFjY2Vzc2libGUoKSkKKyAgICAgICAgICAg
IC8vIElmIHRoZSBwb3J0IGlzIGFjdGl2ZSwgbWFyayBpdC4KKyAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBxdWl0ZSBjb3JyZWN0LCBiZWNhdXNlIGEgcGFpciBvZiBpbmFjY2Vzc2li
bGUgcG9ydHMgd2lsbCBub3QgYmUgY29sbGVjdGVkIHVudGlsIG1hbnVhbGx5IGNsb3NlZCwgb3Ig
dW50aWwgZWl0aGVyIHNjcmlwdCBleGVjdXRpb24gY29udGV4dCBpcyBkZXN0cm95ZWQuCisgICAg
ICAgICAgICAvLyBBbHNvLCB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uOiBpZiBhIG1lc3NhZ2Ug
aXMgcG9zdGVkIGFmdGVyIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCwgYW5kIHRoZW4gcG9y
dHMgZ2V0IHVuZW50YW5nbGVkLCB3ZSB3aWxsIG5vdCBtYXJrIHJlY2VpdmluZyBwb3J0LCB3aGlj
aCB3aWxsIHJlc3VsdCBpbiBhIGNyYXNoLgorICAgICAgICAgICAgaWYgKGVudGFuZ2xlZFBvcnQp
CiAgICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtlckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RlZGljYXRlZFdvcmtl
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDc5ICs0NCwyMiBAQCB2b2lkIEpTRGVk
aWNhdGVkV29ya2VyOjptYXJrKCkKIHsKICAgICBET01PYmplY3Q6Om1hcmsoKTsKIAotICAgIGlm
IChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25NZXNzYWdlTGlzdGVuZXIoKSkpCisg
ICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0
PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vbm1lc3NhZ2UoKSkpCiAgICAg
ICAgIGxpc3RlbmVyLT5tYXJrKCk7CiAKLSAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPiht
X2ltcGwtPm9uQ2xvc2VMaXN0ZW5lcigpKSkKKyAgICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIq
PihtX2ltcGwtPm9uY2xvc2UoKSkpCiAgICAgICAgIGxpc3RlbmVyLT5tYXJrKCk7CiAKLSAgICBp
ZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SlNV
bnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uRXJyb3JMaXN0ZW5lcigpKSkKKyAg
ICBpZiAoSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPihtX2ltcGwtPm9uZXJyb3IoKSkpCiAgICAgICAg
IGxpc3RlbmVyLT5tYXJrKCk7CiB9CiAKLUpTVmFsdWUqIEpTRGVkaWNhdGVkV29ya2VyOjpzdGFy
dENvbnZlcnNhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1Zh
bHVlKiBKU0RlZGljYXRlZFdvcmtlcjo6Y29ubmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7CiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBhc0pTRE9NV2luZG93KGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICBjb25zdCBVU3RyaW5nJiBt
ZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyk7CiAKLSAgICByZXR1cm4g
dG9KUyhleGVjLCBpbXBsKCktPnN0YXJ0Q29udmVyc2F0aW9uKHdpbmRvdy0+ZG9jdW1lbnQoKSwg
bWVzc2FnZSkuZ2V0KCkpOwotfQotCi12b2lkIEpTRGVkaWNhdGVkV29ya2VyOjpzZXRPbm1lc3Nh
Z2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBpbXBsKCktPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAg
cmV0dXJuOwotICAgIEpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KGRvY3VtZW50
LT5mcmFtZSgpKTsKLSAgICBpZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotICAgIGltcGwo
KS0+c2V0T25NZXNzYWdlTGlzdGVuZXIod2luZG93LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVk
RXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOwotfQotCi1KU1ZhbHVlKiBKU0RlZGlj
YXRlZFdvcmtlcjo6b25tZXNzYWdlKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgaWYgKEpTVW5w
cm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0
ZWRFdmVudExpc3RlbmVyKj4oaW1wbCgpLT5vbk1lc3NhZ2VMaXN0ZW5lcigpKSkKLSAgICAgICAg
aWYgKEpTT2JqZWN0KiBsaXN0ZW5lck9iaiA9IGxpc3RlbmVyLT5saXN0ZW5lck9iaigpKQotICAg
ICAgICAgICAgcmV0dXJuIGxpc3RlbmVyT2JqOwotICAgIHJldHVybiBqc051bGwoKTsKLX0KLQot
dm9pZCBKU0RlZGljYXRlZFdvcmtlcjo6c2V0T25jbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUqIHZhbHVlKQotewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS0+ZG9jdW1lbnQo
KTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3coZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghd2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0gICAgaW1wbCgpLT5zZXRPbkNsb3NlTGlzdGVuZXIod2lu
ZG93LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcihleGVjLCB2YWx1ZSwg
dHJ1ZSkpOwotfQotCi1KU1ZhbHVlKiBKU0RlZGljYXRlZFdvcmtlcjo6b25jbG9zZShFeGVjU3Rh
dGUqKSBjb25zdAotewotICAgIGlmIChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVu
ZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KGltcGwoKS0+b25D
bG9zZUxpc3RlbmVyKCkpKQotICAgICAgICBpZiAoSlNPYmplY3QqIGxpc3RlbmVyT2JqID0gbGlz
dGVuZXItPmxpc3RlbmVyT2JqKCkpCi0gICAgICAgICAgICByZXR1cm4gbGlzdGVuZXJPYmo7Ci0g
ICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi12b2lkIEpTRGVkaWNhdGVkV29ya2VyOjpzZXRPbmVy
cm9yKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdmFsdWUpCi17Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gaW1wbCgpLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICBKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhkb2N1bWVu
dC0+ZnJhbWUoKSk7Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICBpbXBs
KCktPnNldE9uRXJyb3JMaXN0ZW5lcih3aW5kb3ctPmZpbmRPckNyZWF0ZUpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKGV4ZWMsIHZhbHVlLCB0cnVlKSk7Ci19Ci0KLUpTVmFsdWUqIEpTRGVkaWNh
dGVkV29ya2VyOjpvbmVycm9yKEV4ZWNTdGF0ZSopIGNvbnN0Ci17Ci0gICAgaWYgKEpTVW5wcm90
ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRF
dmVudExpc3RlbmVyKj4oaW1wbCgpLT5vbkVycm9yTGlzdGVuZXIoKSkpCi0gICAgICAgIGlmIChK
U09iamVjdCogbGlzdGVuZXJPYmogPSBsaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkKLSAgICAgICAg
ICAgIHJldHVybiBsaXN0ZW5lck9iajsKLSAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgaW1wbCgpLT5jb25uZWN0KHdpbmRvdy0+ZG9jdW1lbnQoKSwgbWVzc2FnZSku
Z2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAog
I2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTRXZlbnRUYXJnZXROb2Rl
LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4
dC5oIgogI2luY2x1ZGUgIkpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKKyNpbmNsdWRlICJXb3Jr
ZXJDb250ZXh0LmgiCiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0
YW5jZS5oIgpAQCAtNzAsNyArNzIsMTIgQEAgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMs
IEV2ZW50VGFyZwogCiAgICAgaWYgKE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IHRhcmdldC0+
dG9NZXNzYWdlUG9ydCgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBtZXNzYWdlUG9ydCk7
Ci0gICAgCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICBpZiAoV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IHRhcmdldC0+dG9Xb3JrZXJDb250ZXh0KCkpCisgICAgICAgIHJldHVybiB0
b0pTRE9NR2xvYmFsT2JqZWN0KHdvcmtlckNvbnRleHQpOworI2VuZGlmCisKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4ganNOdWxsKCk7CiB9CkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiAzODMyOSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsOSBAQAogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJFdmVu
dC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5l
ci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkpTTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgpAQCAtNDIsNyAr
NDQsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitz
dGF0aWMgSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVuY3Rpb25BZGRFdmVudExp
c3RlbmVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsK
K3N0YXRpYyBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2
ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpOworc3RhdGljIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uRGlz
cGF0Y2hFdmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0
Jik7CiBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRMb2NhdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJ
ZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitKU1ZhbHVlKiBqc1dvcmtlckNvbnRl
eHRPbmNvbm5lY3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpOwordm9pZCBzZXRKU1dvcmtlckNvbnRleHRPbmNvbm5lY3QoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKik7CiBKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRNZXNzYWdlQ2hhbm5l
bChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CiB2
b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZSopOwogSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0TWVzc2FnZVBvcnQoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwpAQCAtNTYsNiAr
NjMsOSBAQCB2b2lkIHNldEpTV29ya2VyQ29udGV4dFdvcmtlckxvY2F0aW9uKEV4CiAKIC8qCiBA
YmVnaW4gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlVGFibGUKKyAgYWRkRXZlbnRMaXN0ZW5lciAg
ICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0
ZW5lciAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAzCisgIHJlbW92ZUV2ZW50TGlz
dGVuZXIgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRQcm90b3R5cGVGdW5jdGlvblJlbW92ZUV2
ZW50TGlzdGVuZXIgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMworICBkaXNwYXRjaEV2
ZW50ICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVuY3Rpb25EaXNw
YXRjaEV2ZW50ICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMgogIyAgY2xvc2Ug
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9u
Q2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAwCiAjICBN
ZXNzYWdlUG9ydCBtZXRob2RzPwogQGVuZApAQCAtNjUsOCArNzUsOSBAQCB2b2lkIHNldEpTV29y
a2VyQ29udGV4dFdvcmtlckxvY2F0aW9uKEV4CiBAYmVnaW4gSlNXb3JrZXJDb250ZXh0VGFibGUK
ICAgbG9jYXRpb24gICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0TG9jYXRpb24g
ICAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAjICBvbmNsb3NlICAgICAgICAgICAgICAg
ICAgICAgICBqc1dvcmtlckNvbnRleHRPbmNsb3NlICAgICAgICAgICAgIERvbnREZWxldGUKLSMg
IG9uY29ubmVjdCAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dE9uY29ubmVjdCAg
ICAgICAgICAgRG9udERlbGV0ZQorICBvbmNvbm5lY3QgICAgICAgICAgICAgICAgICAgICBqc1dv
cmtlckNvbnRleHRPbmNvbm5lY3QgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCiAjICBv
bm1lc3NhZ2UgYW5kIG90aGVyIE1lc3NhZ2VQb3J0IGF0dHJpYnV0ZXM/CisjICBuYXZpZ2F0b3It
bGlrZSBvYmplY3QgZm9yIGJyb3dzZXIgc25pZmZpbmc/CiAgIE1lc3NhZ2VDaGFubmVsICAgICAg
ICAgICAgICAgIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsICAgICAgICAgICAgICAgIERv
bnREZWxldGUKICAgTWVzc2FnZUV2ZW50ICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0
TWVzc2FnZUV2ZW50ICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBNZXNzYWdlUG9ydCAg
ICAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRNZXNzYWdlUG9ydCAgICAgICAgICAgICAg
ICAgICBEb250RGVsZXRlCkBAIC0xMTMsNiArMTI0LDE5IEBAIHZvaWQgSlNXb3JrZXJDb250ZXh0
OjptYXJrKCkKICAgICBCYXNlOjptYXJrKCk7CiAKICAgICBtYXJrQWN0aXZlT2JqZWN0c0ZvckNv
bnRleHQoKmdsb2JhbERhdGEoKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGlm
IChKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1Vu
cHJvdGVjdGVkRXZlbnRMaXN0ZW5lcio+KG1faW1wbC0+b25jb25uZWN0KCkpKQorICAgICAgICBs
aXN0ZW5lci0+bWFyaygpOworCisgICAgdHlwZWRlZiBXb3JrZXJDb250ZXh0OjpFdmVudExpc3Rl
bmVyc01hcCBFdmVudExpc3RlbmVyc01hcDsKKyAgICB0eXBlZGVmIFdvcmtlckNvbnRleHQ6Okxp
c3RlbmVyVmVjdG9yIExpc3RlbmVyVmVjdG9yOworICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVu
dExpc3RlbmVycyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBmb3IgKEV2ZW50TGlz
dGVuZXJzTWFwOjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFw
SXRlciAhPSBldmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CisgICAgICAgIGZvciAo
TGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4o
KTsgdmVjSXRlciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikgeworICAgICAg
ICAgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
SlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqPih2ZWNJdGVyLT5nZXQoKSk7CisgICAgICAgICAg
ICBsaXN0ZW5lci0+bWFyaygpOworICAgICAgICB9CisgICAgfQogfQogCiBzdGF0aWMgY29uc3Qg
SGFzaFRhYmxlKiBnZXRKU1dvcmtlckNvbnRleHRUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCkBAIC0x
MjQsNyArMTQ4LDEyIEBAIGNvbnN0IENsYXNzSW5mbyBKU1dvcmtlckNvbnRleHQ6OnNfaW5mbyAK
IAogSlNPYmplY3QqIEpTV29ya2VyQ29udGV4dDo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gbmV3IChleGVjKSBKU1dvcmtlckNvbnRleHRQcm90b3R5cGUo
SlNXb3JrZXJMb2NhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpOworICAgIHJldHVybiBuZXcgKGV4
ZWMpIEpTV29ya2VyQ29udGV4dFByb3RvdHlwZShKU1dvcmtlckNvbnRleHRQcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZUlEKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90
eXBlKCkpKTsKK30KKwordm9pZCBKU1dvcmtlckNvbnRleHQ6OnB1dChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKK3sKKyAgICBsb29rdXBQdXQ8SlNXb3JrZXJDb250ZXh0LCBCYXNlPihl
eGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBnZXRKU1dvcmtlckNvbnRleHRUYWJsZShleGVjKSwg
dGhpcywgc2xvdCk7CiB9CiAKIGJvb2wgSlNXb3JrZXJDb250ZXh0OjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYgc2xvdCkKQEAgLTEzMiwxMiArMTYxLDY5IEBAIGJvb2wgSlNXb3JrZXJDb250ZXh0
OjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAgICByZXR1cm4gZ2V0U3RhdGljVmFsdWVTbG90PEpTV29y
a2VyQ29udGV4dCwgQmFzZT4oZXhlYywgZ2V0SlNXb3JrZXJDb250ZXh0VGFibGUoZXhlYyksIHRo
aXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKK0pTVmFsdWUqIGpzV29ya2VyQ29udGV4dFBy
b3RvdHlwZUZ1bmN0aW9uQWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmICgh
dGhpc1ZhbHVlLT5pc09iamVjdCgmSlNXb3JrZXJDb250ZXh0OjpzX2luZm8pKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTV29ya2VyQ29udGV4dCog
d29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTV29ya2VyQ29udGV4dCo+KGFzT2JqZWN0KHRo
aXNWYWx1ZSkpOworICAgIFJlZlB0cjxKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSB3b3JrZXJDb250ZXh0LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5l
cihleGVjLCBhcmdzLmF0KGV4ZWMsIDEpKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB3b3JrZXJDb250ZXh0LT5pbXBsKCktPmFkZEV2ZW50
TGlzdGVuZXIoYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVh
c2UoKSwgYXJncy5hdChleGVjLCAyKS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVuY3Rp
b25SZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzVmFsdWUt
PmlzT2JqZWN0KCZKU1dvcmtlckNvbnRleHQ6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgSlNXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250
ZXh0ID0gc3RhdGljX2Nhc3Q8SlNXb3JrZXJDb250ZXh0Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CisgICAgSlNVbnByb3RlY3RlZEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gd29ya2VyQ29udGV4
dC0+ZmluZEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMSkp
OworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IHdvcmtlckNvbnRleHQtPmltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMs
IDApLT50b1N0cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQoZXhlYywgMiktPnRvQm9vbGVh
bihleGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUqIGpzV29y
a2VyQ29udGV4dFByb3RvdHlwZUZ1bmN0aW9uRGlzcGF0Y2hFdmVudChFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiwgSlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorewor
ICAgIGlmICghdGhpc1ZhbHVlLT5pc09iamVjdCgmSlNXb3JrZXJDb250ZXh0OjpzX2luZm8pKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIEpTV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0YXRpY19jYXN0PEpTV29ya2VyQ29udGV4dCo+KGFz
T2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIEV2ZW50KiBldnQgPSB0b0V2ZW50KGFyZ3MuYXQoZXhl
YywgMCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKHdvcmtlckNvbnRleHQtPmltcGwoKS0+ZGlzcGF0Y2hFdmVudChldnQsIGVj
KSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIEpTVmFsdWUqIGpzV29ya2VyQ29udGV4dExvY2F0aW9uKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90KQogewogICAg
IFdvcmtlckNvbnRleHQqIGltcCA9IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihzdGF0aWNf
Y2FzdDxKU1dvcmtlckNvbnRleHQqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKS0+aW1wbCgp
KTsKICAgICByZXR1cm4gdG9KUyhleGVjLCBpbXAtPmxvY2F0aW9uKCkpOwogfQogCitKU1ZhbHVl
KiBqc1dvcmtlckNvbnRleHRPbmNvbm5lY3QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgV29ya2VyQ29udGV4
dCogaW1wID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHN0YXRpY19jYXN0PEpTV29ya2Vy
Q29udGV4dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpOworICAgIGlmIChK
U1VucHJvdGVjdGVkRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxKU1VucHJv
dGVjdGVkRXZlbnRMaXN0ZW5lcio+KGltcC0+b25jb25uZWN0KCkpKSB7CisgICAgICAgIGlmIChK
U09iamVjdCogbGlzdGVuZXJPYmogPSBsaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkKKyAgICAgICAg
ICAgIHJldHVybiBsaXN0ZW5lck9iajsKKyAgICB9CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQor
Cit2b2lkIHNldEpTV29ya2VyQ29udGV4dE9uY29ubmVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBXb3JrZXJDb250ZXh0KiBp
bXAgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc3RhdGljX2Nhc3Q8SlNXb3JrZXJDb250
ZXh0Kj4odGhpc09iamVjdCktPmltcGwoKSk7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm47CisgICAgaW1wLT5z
ZXRPbmNvbm5lY3QoZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVhdGVKU1VucHJvdGVjdGVkRXZlbnRM
aXN0ZW5lcihleGVjLCB2YWx1ZSwgdHJ1ZSkpOworfQorCiBKU1ZhbHVlKiBqc1dvcmtlckNvbnRl
eHRNZXNzYWdlQ2hhbm5lbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpT
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcj4oZXhlYywgc3RhdGljX2Nhc3Q8SlNXb3JrZXJDb250
ZXh0Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiAzODMyOSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5KU1dvcmtlckNvbnRleHQoKTsKIAog
ICAgICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0
YXRlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9w
ZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKU0M6OlBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CiAgICAgICAgIHN0YXRpYyBjb25zdCBK
U0M6OkNsYXNzSW5mbyBzX2luZm87CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NiArNjcsOSBAQCB2b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoCiAKIEpT
VmFsdWUqIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc291
cmNlVVJMLCBpbnQgYmFzZUxpbmUsIGNvbnN0IFN0cmluZyYgY29kZSkKIHsKKyAgICBpbml0U2Ny
aXB0SWZOZWVkZWQoKTsKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBtX3dvcmtlckNvbnRleHRXcmFwcGVyLT5nbG9iYWxFeGVjKCk7CiAgICAgbV93b3Jr
ZXJDb250ZXh0V3JhcHBlci0+c3RhcnRUaW1lb3V0Q2hlY2soKTsKICAgICBDb21wbGV0aW9uIGNv
bXAgPSBJbnRlcnByZXRlcjo6ZXZhbHVhdGUoZXhlYywgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpLT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2UoY29kZSwgc291cmNlVVJMLCBiYXNl
TGluZSksIG1fd29ya2VyQ29udGV4dFdyYXBwZXIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgaW5pdFNjcmlwdElmTmVlZGVkKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFt
X3dvcmtlckNvbnRleHQpCisgICAgICAgICAgICBpZiAoIW1fd29ya2VyQ29udGV4dFdyYXBwZXIp
CiAgICAgICAgICAgICAgICAgaW5pdFNjcmlwdCgpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQg
aW5pdFNjcmlwdCgpOwpJbmRleDogV2ViQ29yZS9kb20vQWN0aXZlRE9NT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAzODMy
OSkKKysrIFdlYkNvcmUvZG9tL0FjdGl2ZURPTU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKIAogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzUs
MTMgKzM3LDI0IEBAIEFjdGl2ZURPTU9iamVjdDo6QWN0aXZlRE9NT2JqZWN0KFNjcmlwdEUKICAg
ICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAg
ICwgbV9wZW5kaW5nQWN0aXZpdHlDb3VudCgwKQogeworI2lmIEVOQUJMRShXT1JLRVJTKQorICAg
IEFTU0VSVCgobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgaXNNYWlu
VGhyZWFkKCkpCisgICAgICAgIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2Vy
Q29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0
Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKKyNl
bmRpZgorCiAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5jcmVhdGVkQWN0aXZlRE9NT2Jq
ZWN0KHRoaXMsIHVwY2FzdFBvaW50ZXIpOwogfQogCiBBY3RpdmVET01PYmplY3Q6On5BY3RpdmVE
T01PYmplY3QoKQogewotICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgaWYg
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgeworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgICAg
ICBBU1NFUlQoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpICYmIGlzTWFp
blRocmVhZCgpKQorICAgICAgICAgICAgfHwgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNX
b3JrZXJDb250ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT50aHJlYWQoKS0+dGhyZWFkSUQoKSkp
OworI2VuZGlmCisKICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5kZXN0cm95ZWRB
Y3RpdmVET01PYmplY3QodGhpcyk7CisgICAgfQogfQogCiB2b2lkIEFjdGl2ZURPTU9iamVjdDo6
Y29udGV4dERlc3Ryb3llZCgpCkluZGV4OiBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5jcHAJKHJldmlzaW9u
IDM4MzI5KQorKysgV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsMTAgKzQwLDEyIEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiU2VjdXJp
dHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2Vy
VGFzay5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CiAKQEAgLTY3LDggKzY5LDM5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERlZGljYXRl
ZFdvcmtlcj4gbV93b3JrZXI7CiB9OwogCitjbGFzcyBXb3JrZXJDb25uZWN0VGFzayA6IHB1Ymxp
YyBXb3JrZXJUYXNrIHsKK3B1YmxpYzoKKyAgICBXb3JrZXJDb25uZWN0VGFzayhjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCisgICAgICAgIDogbV9t
ZXNzYWdlKG1lc3NhZ2UuY29weSgpKQorICAgICAgICAsIG1fcG9ydChwb3J0KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soV29ya2VyQ29udGV4dCogY29udGV4
dCkKKyAgICB7CisgICAgICAgIG1fcG9ydC0+YXR0YWNoVG9Db250ZXh0KGNvbnRleHQpOworCisg
ICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUobV9tZXNzYWdl
LCAiIiwgIiIsIDAsIG1fcG9ydCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm9uY29ubmVjdCgp
KSB7CisgICAgICAgICAgICBldnQtPnNldFRhcmdldChjb250ZXh0KTsKKyAgICAgICAgICAgIGV2
dC0+c2V0Q3VycmVudFRhcmdldChjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnRleHQtPm9uY29u
bmVjdCgpLT5oYW5kbGVFdmVudChldnQuZ2V0KCksIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBjb250ZXh0LT5kaXNwYXRjaEV2ZW50
KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICAgICAgQVNTRVJUKCFlYyk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFN0cmluZyBtX21lc3NhZ2U7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBtX3Bv
cnQ7Cit9OworCiBEZWRpY2F0ZWRXb3JrZXI6OkRlZGljYXRlZFdvcmtlcihjb25zdCBTdHJpbmcm
IHVybCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICA6IEFjdGl2
ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykKKyAgICAsIG1fdGhyZWFkKDApCiB7CiAgICAgbV9z
Y3JpcHRVUkwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwodXJsKTsKICAgICBpZiAoIW1fc2NyaXB0
VVJMLmlzVmFsaWQoKSkgewpAQCAtOTYsMTAgKzEyOSwxNyBAQCBEb2N1bWVudCogRGVkaWNhdGVk
V29ya2VyOjpkb2N1bWVudCgpIGNvCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAotUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4g
RGVkaWNhdGVkV29ya2VyOjpzdGFydENvbnZlcnNhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiAvKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLywgY29uc3QgU3RyaW5nJiAvKm1lc3NhZ2UqLykK
K1Bhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IERlZGljYXRlZFdvcmtlcjo6Y29ubmVjdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCiB7Ci0gICAgLy8gTm90IGltcGxlbWVudGVkLgotICAgIHJldHVybiAwOworICAgIFJl
ZlB0cjxNZXNzYWdlUG9ydD4gcG9ydCA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7CisgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBvdGhlclBvcnQgPSBNZXNzYWdl
UG9ydDo6Y3JlYXRlKDApOworICAgIE1lc3NhZ2VQb3J0OjplbnRhbmdsZShwb3J0LmdldCgpLCBv
dGhlclBvcnQuZ2V0KCkpOworICAgIGlmIChtX3RocmVhZCkKKyAgICAgICAgbV90aHJlYWQtPm1l
c3NhZ2VRdWV1ZSgpLmFwcGVuZChuZXcgV29ya2VyQ29ubmVjdFRhc2sobWVzc2FnZSwgb3RoZXJQ
b3J0KSk7CisgICAgZWxzZQorICAgICAgICBtX3F1ZXVlZEVhcmx5VGFza3MuYXBwZW5kKG5ldyBX
b3JrZXJDb25uZWN0VGFzayhtZXNzYWdlLCBvdGhlclBvcnQpKTsKKworICAgIHJldHVybiBwb3J0
OwogfQogCiB2b2lkIERlZGljYXRlZFdvcmtlcjo6Y2xvc2UoKQpAQCAtMTM3LDkgKzE3NywyMCBA
QCB2b2lkIERlZGljYXRlZFdvcmtlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAgICAgICAgIGRpc3Bh
dGNoRXJyb3JFdmVudCgpOwogICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKICAg
ICB9IGVsc2UgIHsKLSAgICAgICAgV29ya2VyVGhyZWFkOjpjcmVhdGUobV9zY3JpcHRVUkwsIG1f
Y2FjaGVkU2NyaXB0LT5zY3JpcHQoKSwgdGhpcyktPnN0YXJ0KCk7CisgICAgICAgIC8vIEZJWE1F
OiBXaGVuIGNhbiB3ZSB1bnNldFBlbmRpbmdBY3Rpdml0eSgpPyBDdXJyZW50bHksIHdvcmtlciBv
YmplY3RzIGFyZSBuZXZlciBjb2xsZWN0ZWQsIGFuZCB0aHJlYWRzIG5ldmVyIGV4aXQuCisKKyAg
ICAgICAgUmVmUHRyPFdvcmtlclRocmVhZD4gdGhyZWFkID0gV29ya2VyVGhyZWFkOjpjcmVhdGUo
bV9zY3JpcHRVUkwsIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHQoKSwgdGhpcyk7CisgICAgICAgIG1f
dGhyZWFkID0gdGhyZWFkLmdldCgpOworCisgICAgICAgIHVuc2lnbmVkIHRhc2tDb3VudCA9IG1f
cXVldWVkRWFybHlUYXNrcy5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0YXNrQ291bnQ7ICsraSkKKyAgICAgICAgICAgIG1fdGhyZWFkLT5tZXNzYWdlUXVldWUoKS5h
cHBlbmQobV9xdWV1ZWRFYXJseVRhc2tzW2ldKTsKKworICAgICAgICBtX3RocmVhZC0+c3RhcnQo
KTsKICAgICB9CiAKKyAgICBtX3F1ZXVlZEVhcmx5VGFza3MuY2xlYXIoKTsKKwogICAgIG1fY2Fj
aGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7CiAgICAgbV9jYWNoZWRTY3JpcHQgPSAwOwog
fQpJbmRleDogV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmgJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9k
b20vRGVkaWNhdGVkV29ya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAg
Y2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgU3RyaW5nOworICAgIGNsYXNzIFdvcmtlclRh
c2s7CisgICAgY2xhc3MgV29ya2VyVGhyZWFkOwogCiAgICAgdHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKIApAQCAtNTUsMTggKzU3LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKIAotICAgICAgICBQYXNzUmVmUHRyPE1lc3Nh
Z2VQb3J0PiBzdGFydENvbnZlcnNhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY29ubmVj
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICAg
ICAgdm9pZCBjbG9zZSgpOwogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgTWVzc2FnZVBvcnQqIHBvcnQgPSAwKTsKIAotICAgICAgICB2b2lkIHNldE9uTWVz
c2FnZUxpc3RlbmVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBt
X29uTWVzc2FnZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQotICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbk1lc3NhZ2VMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fb25NZXNzYWdlTGlzdGVu
ZXIuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25NZXNzYWdlTGlzdGVuZXIgPSBldmVudExpc3Rl
bmVyOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb25NZXNzYWdlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAgICAgICB2b2lkIHNldE9uQ2xvc2VM
aXN0ZW5lcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9vbkNs
b3NlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9Ci0gICAgICAgIEV2ZW50TGlzdGVuZXIqIG9u
Q2xvc2VMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fb25DbG9zZUxpc3RlbmVyLmdldCgpOyB9
CisgICAgICAgIHZvaWQgc2V0T25jbG9zZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIpIHsgbV9vbkNsb3NlTGlzdGVuZXIgPSBldmVudExpc3RlbmVyOyB9CisgICAgICAg
IEV2ZW50TGlzdGVuZXIqIG9uY2xvc2UoKSBjb25zdCB7IHJldHVybiBtX29uQ2xvc2VMaXN0ZW5l
ci5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgc2V0T25FcnJvckxpc3RlbmVyKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJyb3JMaXN0ZW5lciA9IGV2ZW50
TGlzdGVuZXI7IH0KLSAgICAgICAgRXZlbnRMaXN0ZW5lciogb25FcnJvckxpc3RlbmVyKCkgY29u
c3QgeyByZXR1cm4gbV9vbkVycm9yTGlzdGVuZXIuZ2V0KCk7IH0KKyAgICAgICAgdm9pZCBzZXRP
bmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uRXJy
b3JMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25l
cnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fb25FcnJvckxpc3RlbmVyLmdldCgpOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgV29ya2VyVGhyZWFkU2NyaXB0TG9hZFRpbWVy
OwpAQCAtODEsOSArODMsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBLVVJMIG1f
c2NyaXB0VVJMOwogICAgICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1f
Y2FjaGVkU2NyaXB0OwogCisgICAgICAgIFdvcmtlclRocmVhZCogbV90aHJlYWQ7CisKICAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IG1fb25NZXNzYWdlTGlzdGVuZXI7CiAgICAgICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBtX29uQ2xvc2VMaXN0ZW5lcjsKICAgICAgICAgUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IG1fb25FcnJvckxpc3RlbmVyOworCisgICAgICAgIFZlY3RvcjxSZWZQdHI8
V29ya2VyVGFzaz4gPiBtX3F1ZXVlZEVhcmx5VGFza3M7IC8vIFRhc2tzIGFyZSBxdWV1ZWQgaGVy
ZSB1bnRpbCB0aGVyZSdzIGEgdGhyZWFkIG9iamVjdCBjcmVhdGVkLgogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmlkbAkocmV2aXNpb24g
MzgzMjkpCisrKyBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSwxMiArMjksMTIgQEAgbW9kdWxlIHRocmVhZHMgewogICAgIGludGVyZmFjZSBbQ3Vz
dG9tTWFya0Z1bmN0aW9uLCBDb25kaXRpb25hbD1XT1JLRVJTXSBEZWRpY2F0ZWRXb3JrZXIgewog
CiAgICAgICAgIC8vIFRoZXNlIGFsc28gdXNlZCBmb3Igc2hhcmVkIHdvcmtlcnMuCi0gICAgICAg
IGF0dHJpYnV0ZSBbQ3VzdG9tXSBFdmVudExpc3RlbmVyIG9uY2xvc2U7Ci0gICAgICAgIGF0dHJp
YnV0ZSBbQ3VzdG9tXSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgICAgIGF0dHJpYnV0ZSBF
dmVudExpc3RlbmVyIG9uY2xvc2U7CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9u
ZXJyb3I7CiAKICAgICAgICAgLy8gVGhlc2UgYXJlIG9ubHkgZm9yIGRlZGljYXRlZCB3b3JrZXJz
LgotICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0gRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7Ci0g
ICAgICAgIFtDdXN0b21dIE1lc3NhZ2VQb3J0IHN0YXJ0Q29udmVyc2F0aW9uKGluIERPTVN0cmlu
ZyBtZXNzYWdlKTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOwor
ICAgICAgICBbQ3VzdG9tXSBNZXNzYWdlUG9ydCBjb25uZWN0KGluIERPTVN0cmluZyBtZXNzYWdl
KTsKICAgICAgICAgdm9pZCBjbG9zZSgpOwogICAgICAgICB2b2lkIHBvc3RNZXNzYWdlKGluIERP
TVN0cmluZyBtZXNzYWdlLCBpbiBbT3B0aW9uYWxdIE1lc3NhZ2VQb3J0IHBvcnQpOwogCkluZGV4
OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAzODMyOSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsMTMgQEAgTWVzc2FnZVBvcnQqIEV2
ZW50VGFyZ2V0Ojp0b01lc3NhZ2VQb3J0KAogICAgIHJldHVybiAwOwogfQogCisjaWYgRU5BQkxF
KFdPUktFUlMpCitXb3JrZXJDb250ZXh0KiBFdmVudFRhcmdldDo6dG9Xb3JrZXJDb250ZXh0KCkK
K3sKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogdm9pZCBmb3Ji
aWRFdmVudERpc3BhdGNoKCkKIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMzgzMjkpCisr
KyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
cjsKICAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIGNsYXNzIFNWR0VsZW1l
bnRJbnN0YW5jZTsKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0OwogICAgIGNsYXNzIFhNTEh0dHBS
ZXF1ZXN0OwogICAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0VXBsb2FkOwogCkBAIC02NSw2ICs2Niw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICB2aXJ0dWFs
IFNWR0VsZW1lbnRJbnN0YW5jZSogdG9TVkdFbGVtZW50SW5zdGFuY2UoKTsKICNlbmRpZgorI2lm
IEVOQUJMRShXT1JLRVJTKQorICAgICAgICB2aXJ0dWFsIFdvcmtlckNvbnRleHQqIHRvV29ya2Vy
Q29udGV4dCgpOworI2VuZGlmCiAKICAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgPSAwOwogCkluZGV4OiBXZWJDb3Jl
L2RvbS9NZXNzYWdlUG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZVBv
cnQuY3BwCShyZXZpc2lvbiAzODMyOSkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsNDAgKzM4LDQ0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyIDogcHVibGljIFRpbWVyQmFzZSB7CitjbGFz
cyBNZXNzYWdlUG9ydENsb3NlRXZlbnRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQ6OlRhc2sgewogcHVibGljOgotICAgIENsb3NlTWVzc2FnZVBvcnRUaW1lcihQYXNzUmVmUHRy
PE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Q2xv
c2VFdmVudFRhc2s+IGNyZWF0ZShQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXNzYWdlUG9ydENsb3NlRXZlbnRUYXNrKHBv
cnQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWVzc2FnZVBvcnRDbG9zZUV2ZW50VGFzayhQ
YXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0KQogICAgICAgICA6IG1fcG9ydChwb3J0KQogICAg
IHsKICAgICAgICAgQVNTRVJUKG1fcG9ydCk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewogICAgICAgICBBU1NFUlQoIW1fcG9ydC0+YWN0
aXZlKCkpOworICAgICAgICBBU1NFUlQoY29udGV4dCA9PSBtX3BvcnQtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSk7CiAKICAgICAgICAgLy8gQ2xvc2luZyBtYXkgZGVzdHJveSB0aGUgcG9ydCwg
ZGlzcGF0Y2ggYW55IHJlbWFpbmluZyBtZXNzYWdlcyBub3cuCiAgICAgICAgIGlmIChtX3BvcnQt
PnF1ZXVlSXNPcGVuKCkpCiAgICAgICAgICAgICBtX3BvcnQtPmRpc3BhdGNoTWVzc2FnZXMoKTsK
IAogICAgICAgICBtX3BvcnQtPmRpc3BhdGNoQ2xvc2VFdmVudCgpOwotICAgICAgICBkZWxldGUg
dGhpczsKICAgICB9CiAKICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG1fcG9ydDsKIH07CiAKLU1l
c3NhZ2VQb3J0OjpFdmVudERhdGE6OkV2ZW50RGF0YSgpCitQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0
OjpFdmVudERhdGE+IE1lc3NhZ2VQb3J0OjpFdmVudERhdGE6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IHBvcnQpCiB7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBFdmVudERhdGEobWVzc2FnZSwgcG9ydCkpOwogfQogCi1NZXNzYWdlUG9ydDo6
RXZlbnREYXRhOjpFdmVudERhdGEoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBQYXNzUmVmUHRyPERP
TVdpbmRvdz4gd2luZG93LCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBtZXNzYWdlUG9ydCkKK01l
c3NhZ2VQb3J0OjpFdmVudERhdGE6OkV2ZW50RGF0YShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFBh
c3NSZWZQdHI8TWVzc2FnZVBvcnQ+IG1lc3NhZ2VQb3J0KQogICAgIDogbWVzc2FnZShtZXNzYWdl
LmNvcHkoKSkKLSAgICAsIHdpbmRvdyh3aW5kb3cpCiAgICAgLCBtZXNzYWdlUG9ydChtZXNzYWdl
UG9ydCkKIHsKLSAgICBBU1NFUlQoIXRoaXMtPndpbmRvdyB8fCBpc01haW5UaHJlYWQoKSk7CiB9
CiAKIE1lc3NhZ2VQb3J0OjpFdmVudERhdGE6On5FdmVudERhdGEoKQpAQCAtODMsOSArODcsOSBA
QCBNZXNzYWdlUG9ydDo6TWVzc2FnZVBvcnQoU2NyaXB0RXhlY3V0aW9uCiAgICAgLCBtX3F1ZXVl
SXNPcGVuKGZhbHNlKQogICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpCiAgICAgLCBtX3BlbmRpbmdDbG9zZUV2ZW50KGZhbHNlKQotICAgICwgbV9q
c1dyYXBwZXJJc0luYWNjZXNzaWJsZShmYWxzZSkKIHsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5jcmVhdGVkTWVzc2FnZVBvcnQodGhpcyk7CisgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9y
dCh0aGlzKTsKIH0KIAogTWVzc2FnZVBvcnQ6On5NZXNzYWdlUG9ydCgpCkBAIC05Nyw3ICsxMDEs
NyBAQCBNZXNzYWdlUG9ydDo6fk1lc3NhZ2VQb3J0KCkKICAgICAgICAgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5kZXN0cm95ZWRNZXNzYWdlUG9ydCh0aGlzKTsKIH0KIAotUGFzc1JlZlB0cjxN
ZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OmNsb25lKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG5l
d093bmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IE1lc3Nh
Z2VQb3J0OjpjbG9uZShFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZW50YW5nbGVk
UG9ydCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwpAQCAtMTA1LDExICsxMDks
MTEgQEAgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gTWVzc2FnZVBvcnQ6OmNsbwogICAgIH0KIAog
ICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcmVtb3RlUG9ydCA9IG1fZW50YW5nbGVkUG9ydDsKLSAg
ICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG5ld1BvcnQgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKG5ld093
bmVyKTsKKyAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG5ld1BvcnQgPSBNZXNzYWdlUG9ydDo6Y3Jl
YXRlKDApOwogCiAgICAgLy8gTW92ZSBhbGwgdGhlIGV2ZW50cyBpbiB0aGUgcG9ydCBtZXNzYWdl
IHF1ZXVlIG9mIG9yaWdpbmFsIHBvcnQgdG8gdGhlIHBvcnQgbWVzc2FnZSBxdWV1ZSBvZiBuZXcg
cG9ydCwgaWYgYW55LCBsZWF2aW5nIHRoZSBuZXcgcG9ydCdzIHBvcnQgbWVzc2FnZSBxdWV1ZSBp
biBpdHMgaW5pdGlhbCBjbG9zZWQgc3RhdGUuCiAgICAgLy8gSWYgZXZlbnRzIGFyZSBwb3N0ZWQg
KGUuZy4gZnJvbSBhIHdvcmtlciB0aHJlYWQpIHdoaWxlIHRoaXMgY29kZSBpcyBleGVjdXRpbmcs
IHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB3aGV0aGVyIHRoZXkgZW5kIHVwIGluIHRoZSBvcmlnaW5h
bCBvciBuZXcgcG9ydCdzIG1lc3NhZ2UgcXVldWUuCi0gICAgRXZlbnREYXRhIGV2ZW50RGF0YTsK
KyAgICBSZWZQdHI8RXZlbnREYXRhPiBldmVudERhdGE7CiAgICAgd2hpbGUgKG1fbWVzc2FnZVF1
ZXVlLnRyeUdldE1lc3NhZ2UoZXZlbnREYXRhKSkKICAgICAgICAgbmV3UG9ydC0+bV9tZXNzYWdl
UXVldWUuYXBwZW5kKGV2ZW50RGF0YSk7CiAKQEAgLTEyNCw3ICsxMjgsNyBAQCB2b2lkIE1lc3Nh
Z2VQb3J0Ojpwb3N0TWVzc2FnZShjb25zdCBTdHJpCiAKIHZvaWQgTWVzc2FnZVBvcnQ6OnBvc3RN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgTWVzc2FnZVBvcnQqIGRhdGFQb3J0LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0IHx8ICFtX2VudGFuZ2xlZFBvcnQtPm1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKKyAgICBpZiAoIW1fZW50YW5nbGVkUG9ydCB8fCAhbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8TWVzc2FnZVBvcnQ+IG5ld01lc3Nh
Z2VQb3J0OwpAQCAtMTMzLDMxICsxMzcsMjcgQEAgdm9pZCBNZXNzYWdlUG9ydDo6cG9zdE1lc3Nh
Z2UoY29uc3QgU3RyaQogICAgICAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbmV3TWVzc2FnZVBvcnQgPSBkYXRh
UG9ydC0+Y2xvbmUobV9lbnRhbmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGVj
KTsKKyAgICAgICAgbmV3TWVzc2FnZVBvcnQgPSBkYXRhUG9ydC0+Y2xvbmUoZWMpOwogICAgICAg
ICBpZiAoZWMpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRE9NV2luZG93KiB3
aW5kb3cgPSAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkgJiYgbV9lbnRh
bmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSkgPwotICAg
ICAgICBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCktPmRv
bVdpbmRvdygpIDogMDsKLSAgICBtX2VudGFuZ2xlZFBvcnQtPm1fbWVzc2FnZVF1ZXVlLmFwcGVu
ZChFdmVudERhdGEobWVzc2FnZSwgd2luZG93LCBuZXdNZXNzYWdlUG9ydCkpOwotICAgIGlmICht
X2VudGFuZ2xlZFBvcnQtPm1fcXVldWVJc09wZW4pCisgICAgbV9lbnRhbmdsZWRQb3J0LT5tX21l
c3NhZ2VRdWV1ZS5hcHBlbmQoRXZlbnREYXRhOjpjcmVhdGUobWVzc2FnZSwgbmV3TWVzc2FnZVBv
cnQpKTsKKyAgICBpZiAobV9lbnRhbmdsZWRQb3J0LT5tX3F1ZXVlSXNPcGVuICYmIG1fZW50YW5n
bGVkUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KQogICAgICAgICBtX2VudGFuZ2xlZFBv
cnQtPm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cHJvY2Vzc01lc3NhZ2VQb3J0TWVzc2FnZXNT
b29uKCk7CiB9CiAKIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+IE1lc3NhZ2VQb3J0OjpzdGFydENv
bnZlcnNhdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBwb3J0
MSA9IE1lc3NhZ2VQb3J0OjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAgaWYg
KCFtX2VudGFuZ2xlZFBvcnQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCB8fCAhbV9lbnRh
bmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgaWYgKCFtX2VudGFuZ2xl
ZFBvcnQgfHwgIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHBvcnQx
OwotICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gcG9ydDIgPSBNZXNzYWdlUG9ydDo6Y3JlYXRlKG1f
ZW50YW5nbGVkUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICBSZWZQdHI8TWVz
c2FnZVBvcnQ+IHBvcnQyID0gTWVzc2FnZVBvcnQ6OmNyZWF0ZSgwKTsKIAogICAgIGVudGFuZ2xl
KHBvcnQxLmdldCgpLCBwb3J0Mi5nZXQoKSk7CiAKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9ICht
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1lbnQoKSAmJiBtX2VudGFuZ2xlZFBvcnQt
Pm1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSA/Ci0gICAgICAgIHN0YXRp
Y19jYXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+ZG9tV2luZG93KCkg
OiAwOwotICAgIG1fZW50YW5nbGVkUG9ydC0+bV9tZXNzYWdlUXVldWUuYXBwZW5kKEV2ZW50RGF0
YShtZXNzYWdlLCB3aW5kb3csIHBvcnQyKSk7Ci0gICAgaWYgKG1fZW50YW5nbGVkUG9ydC0+bV9x
dWV1ZUlzT3BlbikKKyAgICBtX2VudGFuZ2xlZFBvcnQtPm1fbWVzc2FnZVF1ZXVlLmFwcGVuZChF
dmVudERhdGE6OmNyZWF0ZShtZXNzYWdlLCBwb3J0MikpOworICAgIGlmIChtX2VudGFuZ2xlZFBv
cnQtPm1fcXVldWVJc09wZW4gJiYgbV9lbnRhbmdsZWRQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCiAgICAgICAgIG1fZW50YW5nbGVkUG9ydC0+bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LT5wcm9jZXNzTWVzc2FnZVBvcnRNZXNzYWdlc1Nvb24oKTsKICAgICByZXR1cm4gcG9ydDE7CiB9
CkBAIC0yMDksNiArMjA5LDggQEAgdm9pZCBNZXNzYWdlUG9ydDo6dW5lbnRhbmdsZSgpCiAKIHZv
aWQgTWVzc2FnZVBvcnQ6OmNvbnRleHREZXN0cm95ZWQoKQogeworICAgIEFTU0VSVChtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOworCiAgICAgaWYgKG1fZW50YW5nbGVkUG9ydCkgewogICAgICAg
ICBSZWZQdHI8TWVzc2FnZVBvcnQ+IHN1cnZpdmluZ1BvcnQgPSBtX2VudGFuZ2xlZFBvcnQ7CiAg
ICAgICAgIHVuZW50YW5nbGUoKTsKQEAgLTIxOCwxNyArMjIwLDM2IEBAIHZvaWQgTWVzc2FnZVBv
cnQ6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7
CiB9CiAKK3ZvaWQgTWVzc2FnZVBvcnQ6OmF0dGFjaFRvQ29udGV4dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQoreworICAgIEFTU0VSVCghbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0KTsKKyAgICBBU1NFUlQoIW1fcXVldWVJc09wZW4pOworCisgICAgbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPmNyZWF0ZWRNZXNzYWdlUG9ydCh0aGlzKTsKKyAgICAKKyAg
ICAvLyBGSVhNRTogTmVlZCB0byBjYWxsIHByb2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigp
PworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBNZXNzYWdlUG9ydDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dDsKK30KKwogdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0Y2hNZXNzYWdlcygpCiB7CiAgICAgLy8g
TWVzc2FnZXMgZm9yIGNvbnRleHRzIHRoYXQgYXJlIG5vdCBmdWxseSBhY3RpdmUgZ2V0IGRpc3Bh
dGNoZWQgdG9vLCBidXQgSlNBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KCkgZG9l
c24ndCBjYWxsIGhhbmRsZXJzIGZvciB0aGVzZS4KKyAgICAvLyBGSVhNRTogU3VjaCBtZXNzYWdl
cyBzaG91bGQgYmUgZGlzcGF0Y2hlZCBpZiB0aGUgZG9jdW1lbnQgcmV0dXJucyBmcm9tIHBhZ2Ug
Y2FjaGUuIFRoZXkgYXJlIG9ubHkgYWxsb3dlZCB0byBiZSBsb3N0IGlmIHRoZSBkb2N1bWVudCBp
cyBkaXNjYXJkZWQuCiAgICAgQVNTRVJUKHF1ZXVlSXNPcGVuKCkpOwogCi0gICAgRXZlbnREYXRh
IGV2ZW50RGF0YTsKKyAgICBSZWZQdHI8RXZlbnREYXRhPiBldmVudERhdGE7CiAgICAgd2hpbGUg
KG1fbWVzc2FnZVF1ZXVlLnRyeUdldE1lc3NhZ2UoZXZlbnREYXRhKSkgewotICAgICAgICBBU1NF
UlQoIWV2ZW50RGF0YS53aW5kb3cgfHwgaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBBU1NFUlQo
IWV2ZW50RGF0YS53aW5kb3cgfHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50
KCkpOwogCi0gICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUo
ZXZlbnREYXRhLm1lc3NhZ2UsICIiLCAiIiwgZXZlbnREYXRhLndpbmRvdywgZXZlbnREYXRhLm1l
c3NhZ2VQb3J0KTsKKyAgICAgICAgQVNTRVJUKCFldmVudERhdGEtPm1lc3NhZ2VQb3J0IHx8ICFl
dmVudERhdGEtPm1lc3NhZ2VQb3J0LT5tX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAg
ICBpZiAoZXZlbnREYXRhLT5tZXNzYWdlUG9ydCkKKyAgICAgICAgICAgIGV2ZW50RGF0YS0+bWVz
c2FnZVBvcnQtPmF0dGFjaFRvQ29udGV4dChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworCisg
ICAgICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoZXZlbnREYXRh
LT5tZXNzYWdlLCAiIiwgIiIsIDAsIGV2ZW50RGF0YS0+bWVzc2FnZVBvcnQpOwogCiAgICAgICAg
IGlmIChtX29uTWVzc2FnZUxpc3RlbmVyKSB7CiAgICAgICAgICAgICBldnQtPnNldFRhcmdldCh0
aGlzKTsKQEAgLTI0Nyw4ICsyNjgsNyBAQCB2b2lkIE1lc3NhZ2VQb3J0OjpxdWV1ZUNsb3NlRXZl
bnQoKQogICAgIEFTU0VSVCghbV9wZW5kaW5nQ2xvc2VFdmVudCk7CiAgICAgbV9wZW5kaW5nQ2xv
c2VFdmVudCA9IHRydWU7CiAKLSAgICBDbG9zZU1lc3NhZ2VQb3J0VGltZXIqIHRpbWVyID0gbmV3
IENsb3NlTWVzc2FnZVBvcnRUaW1lcih0aGlzKTsKLSAgICB0aW1lci0+c3RhcnRPbmVTaG90KDAp
OworICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soTWVzc2FnZVBvcnRDbG9z
ZUV2ZW50VGFzazo6Y3JlYXRlKHRoaXMpKTsKIH0KIAogdm9pZCBNZXNzYWdlUG9ydDo6ZGlzcGF0
Y2hDbG9zZUV2ZW50KCkKQEAgLTMyMSw4ICszNDEsOCBAQCBib29sIE1lc3NhZ2VQb3J0OjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQCiAKIGJvb2wgTWVzc2FnZVBvcnQ6Omhhc1BlbmRpbmdBY3Rpdml0
eSgpCiB7Ci0gICAgLy8gV2Ugb25seSBjYXJlIGFib3V0IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5j
dGlvbiB3aGVuIHRoZXJlIGlzIG5vIGVudGFuZ2xlZCBwb3J0LCBvciBpdCBpcyBpbmFjY2Vzc2li
bGUsIHNvIG5vIG1vcmUgbWVzc2FnZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZS4KLSAgICAv
LyBUaHVzLCB1c2luZyBNZXNzYWdlUXVldWU6OmlzRW1wdHkoKSBkb2VzIG5vdCBjYXVzZSBhIHJh
Y2UgY29uZGl0aW9uIGhlcmUuCisgICAgLy8gSW4gbXVsdGktdGhyZWFkZWQgY2FzZSwgbWVzc2Fn
ZXMgY2FuIGJlIGFkZGVkIHRvIHRoZSBxdWV1ZSBhc3luY2hyb25vdXNseSwgYnV0IHRoaXMgY2Fu
IG9ubHkgaGFwcGVuIGlmIHRoZXJlIGlzIGFuIGFjY2Vzc2libGUKKyAgICAvLyBlbnRhbmdsZWQg
cG9ydCwgaW4gd2hpY2ggY2FzZSBtYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0c0ZvckNvbnRl
eHQgd2lsbCBwcmV2ZW50IGNvbGxlY3RpbmcgdGhlIHBvcnQuCiAgICAgcmV0dXJuIG1fcGVuZGlu
Z0Nsb3NlRXZlbnQgfHwgKG1fcXVldWVJc09wZW4gJiYgIW1fbWVzc2FnZVF1ZXVlLmlzRW1wdHko
KSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAkocmV2aXNpb24gMzgzMjkpCisrKyBXZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBBdG9taWNTdHJpbmdJbXBsOwotICAgIGNsYXNzIERP
TVdpbmRvdzsKICAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OwpAQCAtNTMsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgeyByZXR1cm4gYWRvcHRS
ZWYobmV3IE1lc3NhZ2VQb3J0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpKTsgfQogICAgICAgICB+
TWVzc2FnZVBvcnQoKTsKIAotICAgICAgICBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0PiBjbG9uZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBQYXNzUmVm
UHRyPE1lc3NhZ2VQb3J0PiBjbG9uZShFeGNlcHRpb25Db2RlJik7IC8vIFJldHVybnMgYSBwb3J0
IHRoYXQgaXNuJ3QgYXR0YWNoZWQgdG8gYW55IGNvbnRleHQuCiAKICAgICAgICAgYm9vbCBhY3Rp
dmUoKSBjb25zdCB7IHJldHVybiBtX2VudGFuZ2xlZFBvcnQ7IH0KICAgICAgICAgdm9pZCBwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTY5LDcg
KzY4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVuZW50YW5nbGUoKTsK
IAogICAgICAgICB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OyB9CisgICAgICAgIHZvaWQgYXR0YWNoVG9Db250
ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAgICAg
dmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpIHsgcmV0dXJuIHRoaXM7IH0KIApA
QCAtOTUsMTEgKzk1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldE9u
Y2xvc2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25DbG9z
ZUxpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsgfQogICAgICAgICBFdmVudExpc3RlbmVyKiBvbmNs
b3NlKCkgY29uc3QgeyByZXR1cm4gbV9vbkNsb3NlTGlzdGVuZXIuZ2V0KCk7IH0KIAotICAgICAg
ICB2b2lkIHNldEpTV3JhcHBlcklzSW5hY2Nlc3NpYmxlKCkgeyBtX2pzV3JhcHBlcklzSW5hY2Nl
c3NpYmxlID0gdHJ1ZTsgfQotICAgICAgICBib29sIGpzV3JhcHBlcklzSW5hY2Nlc3NpYmxlKCkg
Y29uc3QgeyByZXR1cm4gbV9qc1dyYXBwZXJJc0luYWNjZXNzaWJsZTsgfQotCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgZnJpZW5kIGNsYXNzIENsb3NlTWVzc2FnZVBvcnRUaW1lcjsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIE1lc3NhZ2VQb3J0Q2xvc2VFdmVudFRhc2s7CiAKICAgICAgICAgTWVzc2Fn
ZVBvcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCkBAIC0xMTAsMTYgKzEwNywxNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgTWVzc2FnZVBvcnQqIG1fZW50YW5nbGVkUG9y
dDsKICAgICAgICAgCi0gICAgICAgIHN0cnVjdCBFdmVudERhdGEgewotICAgICAgICAgICAgRXZl
bnREYXRhKCk7Ci0gICAgICAgICAgICBFdmVudERhdGEoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0
cjxET01XaW5kb3c+LCBQYXNzUmVmUHRyPE1lc3NhZ2VQb3J0Pik7CisgICAgICAgIHN0cnVjdCBF
dmVudERhdGEgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxFdmVudERhdGE+IHsKKyAgICAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50RGF0YT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4pOwogICAgICAgICAgICAgfkV2ZW50RGF0YSgp
OwogCiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIFJlZlB0cjxET01X
aW5kb3c+IHdpbmRvdzsKICAgICAgICAgICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbWVzc2FnZVBv
cnQ7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEV2ZW50RGF0YShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZVBvcnQ+KTsKICAgICAgICAgfTsKLSAgICAg
ICAgTWVzc2FnZVF1ZXVlPEV2ZW50RGF0YT4gbV9tZXNzYWdlUXVldWU7CisgICAgICAgIE1lc3Nh
Z2VRdWV1ZTxSZWZQdHI8RXZlbnREYXRhPiA+IG1fbWVzc2FnZVF1ZXVlOwogICAgICAgICBib29s
IG1fcXVldWVJc09wZW47CiAKICAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwpAQCAtMTI5LDggKzEyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBFdmVudExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOwogCi0gICAg
ICAgIGJvb2wgbV9wZW5kaW5nQ2xvc2VFdmVudDsKLSAgICAgICAgYm9vbCBtX2pzV3JhcHBlcklz
SW5hY2Nlc3NpYmxlOworICAgICAgICBib29sIG1fcGVuZGluZ0Nsb3NlRXZlbnQ7IC8vIFRoZSBw
b3J0IGlzIEdDIHByb3RlY3RlZCB3aGlsZSB3YWl0aW5nIGZvciBhIGNsb3NlIGV2ZW50IHRvIGJl
IGRpc3BhdGNoZWQuCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHJldmlzaW9uIDM4MzI5KQorKysgV2Vi
Q29yZS9kb20vU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDMxICsyOCwzMSBAQAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiTWVzc2FnZVBvcnQuaCIKICNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldvcmtlckNv
bnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFk
LmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE1lc3NhZ2VQb3J0VGltZXIgOiBw
dWJsaWMgVGltZXJCYXNlIHsKK2NsYXNzIFByb2Nlc3NNZXNzYWdlc1Nvb25UYXNrIDogcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGljOgotICAgIE1lc3NhZ2VQb3J0
VGltZXIoUGFzc1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBjb250ZXh0KQotICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2Nlc3NNZXNz
YWdlc1Nvb25UYXNrPiBjcmVhdGUoKQogICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBQcm9jZXNzTWVzc2FnZXNTb29uVGFzayk7CiAgICAgfQogCi1wcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCBmaXJlZCgpCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgewotICAgICAgICBtX2NvbnRleHQtPmRpc3BhdGNo
TWVzc2FnZVBvcnRFdmVudHMoKTsKLSAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIGNvbnRl
eHQtPmRpc3BhdGNoTWVzc2FnZVBvcnRFdmVudHMoKTsKICAgICB9Ci0KLSAgICBSZWZQdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250ZXh0OwogfTsKIAogU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpCi0gICAgOiBtX2ZpcmVkTWVzc2FnZVBvcnRU
aW1lcihmYWxzZSkKIHsKIH0KIApAQCAtNzMsMTMgKzczLDcgQEAgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDo6flNjcmlwdEV4ZWN1dGlvbgogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnBy
b2Nlc3NNZXNzYWdlUG9ydE1lc3NhZ2VzU29vbigpCiB7Ci0gICAgaWYgKG1fZmlyZWRNZXNzYWdl
UG9ydFRpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNZXNzYWdlUG9ydFRpbWVyKiB0aW1l
ciA9IG5ldyBNZXNzYWdlUG9ydFRpbWVyKHRoaXMpOwotICAgIHRpbWVyLT5zdGFydE9uZVNob3Qo
MCk7Ci0KLSAgICBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IHRydWU7CisgICAgcG9zdFRhc2so
UHJvY2Vzc01lc3NhZ2VzU29vblRhc2s6OmNyZWF0ZSgpKTsKIH0KIAogdm9pZCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpkaXNwYXRjaE1lc3NhZ2VQb3J0RXZlbnRzKCkKQEAgLTkwLDExICs4NCwx
MSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRpc3BhdGNoTWVzCiAgICAgVmVjdG9y
PE1lc3NhZ2VQb3J0Kj4gcG9ydHM7CiAgICAgY29weVRvVmVjdG9yKG1fbWVzc2FnZVBvcnRzLCBw
b3J0cyk7CiAKLSAgICBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lciA9IGZhbHNlOwotCiAgICAgdW5z
aWduZWQgcG9ydENvdW50ID0gcG9ydHMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBwb3J0Q291bnQ7ICsraSkgewogICAgICAgICBNZXNzYWdlUG9ydCogcG9ydCA9IHBvcnRz
W2ldOworICAgICAgICAvLyBUaGUgcG9ydCBtYXkgYmUgZGVzdHJveWVkLCBhbmQgYW5vdGhlciBv
bmUgY3JlYXRlZCBhdCB0aGUgc2FtZSBhZGRyZXNzLCBidXQgdGhpcyBpcyBzYWZlLCBhcyB0aGUg
d29yc3QgdGhhdCBjYW4gaGFwcGVuCisgICAgICAgIC8vIGFzIGEgcmVzdWx0IGlzIHRoYXQgZGlz
cGF0Y2hNZXNzYWdlcygpIHdpbGwgYmUgY2FsbGVkIG5lZWRsZXNzbHkuCiAgICAgICAgIGlmICht
X21lc3NhZ2VQb3J0cy5jb250YWlucyhwb3J0KSAmJiBwb3J0LT5xdWV1ZUlzT3BlbigpKQogICAg
ICAgICAgICAgcG9ydC0+ZGlzcGF0Y2hNZXNzYWdlcygpOwogICAgIH0KQEAgLTEwMywxMiArOTcs
MjIgQEAgdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRjaE1lcwogdm9pZCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OjpjcmVhdGVkTWVzc2FnZVBvcnQoTWVzc2FnZVBvcnQqIHBvcnQp
CiB7CiAgICAgQVNTRVJUKHBvcnQpOworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIEFTU0VSVCgo
aXNEb2N1bWVudCgpICYmIGlzTWFpblRocmVhZCgpKQorICAgICAgICB8fCAoaXNXb3JrZXJDb250
ZXh0KCkgJiYgY3VycmVudFRocmVhZCgpID09IHN0YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPih0
aGlzKS0+dGhyZWFkKCktPnRocmVhZElEKCkpKTsKKyNlbmRpZgorCiAgICAgbV9tZXNzYWdlUG9y
dHMuYWRkKHBvcnQpOwogfQogCiB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRlc3Ryb3ll
ZE1lc3NhZ2VQb3J0KE1lc3NhZ2VQb3J0KiBwb3J0KQogewogICAgIEFTU0VSVChwb3J0KTsKKyNp
ZiBFTkFCTEUoV09SS0VSUykKKyAgICBBU1NFUlQoKGlzRG9jdW1lbnQoKSAmJiBpc01haW5UaHJl
YWQoKSkKKyAgICAgICAgfHwgKGlzV29ya2VyQ29udGV4dCgpICYmIGN1cnJlbnRUaHJlYWQoKSA9
PSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4odGhpcyktPnRocmVhZCgpLT50aHJlYWRJRCgp
KSk7CisjZW5kaWYKKwogICAgIG1fbWVzc2FnZVBvcnRzLnJlbW92ZShwb3J0KTsKIH0KIApAQCAt
MTM0LDUgKzEzOCw4NSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OmRlc3Ryb3llZEFj
CiAgICAgbV9hY3RpdmVET01PYmplY3RzLnJlbW92ZShvYmplY3QpOwogfQogCitTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrOjp+VGFzaygpCit7Cit9CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRUYXNrVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0VGFza1RpbWVyKFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNvbnRleHQs
IFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaykKKyAgICAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3Rhc2sodGFzaykKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmaXJlZCgpCisgICAgeworICAgICAgICBt
X3Rhc2stPnBlcmZvcm1UYXNrKG1fY29udGV4dC5nZXQoKSk7CisgICAgICAgIGRlbGV0ZSB0aGlz
OworICAgIH0KKworICAgIFJlZlB0cjxEb2N1bWVudD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBtX3Rhc2s7Cit9OworCisjaWYgRU5BQkxFKFdP
UktFUlMpCitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1dvcmtlclRhc2sgOiBwdWJs
aWMgV29ya2VyVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dFRhc2tXb3JrZXJUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxTY3JpcHRFeGVj
dXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1dvcmtlclRhc2sodGFzaykpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0VGFza1dvcmtlclRhc2soUGFz
c1JlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKQorICAgICAgICA6IG1f
dGFzayh0YXNrKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
V29ya2VyQ29udGV4dCogY29udGV4dCkKKyAgICB7CisgICAgICAgIG1fdGFzay0+cGVyZm9ybVRh
c2soY29udGV4dCk7CisgICAgfQorCisgICAgUmVmUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IG1fdGFzazsKK307CisjZW5kaWYKKworc3RydWN0IFBlcmZvcm1UYXNrQ29udGV4dCB7
CisgICAgUGVyZm9ybVRhc2tDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIFBhc3NSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4g
dGFzaykKKyAgICAgICAgOiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpCisgICAgICAgICwgdGFzayh0YXNrKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8
U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBSZWZQ
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzazsKK307CisKK3N0YXRpYyB2b2lk
IHBlcmZvcm1UYXNrKHZvaWQqIGN0eCkKK3sKKyAgICBQZXJmb3JtVGFza0NvbnRleHQqIHB0Y3R4
ID0gcmVpbnRlcnByZXRfY2FzdDxQZXJmb3JtVGFza0NvbnRleHQqPihjdHgpOworICAgIHB0Y3R4
LT50YXNrLT5wZXJmb3JtVGFzayhwdGN0eC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSk7
CisgICAgZGVsZXRlIHB0Y3R4OworfQorCit2b2lkIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnBv
c3RUYXNrKFBhc3NSZWZQdHI8VGFzaz4gdGFzaykKK3sKKyAgICBpZiAoaXNEb2N1bWVudCgpKSB7
CisgICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICAgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dFRhc2tUaW1lciogdGltZXIgPSBuZXcgU2NyaXB0RXhlY3V0aW9uQ29udGV4dFRh
c2tUaW1lcihzdGF0aWNfY2FzdDxEb2N1bWVudCo+KHRoaXMpLCB0YXNrKTsKKyAgICAgICAgICAg
IHRpbWVyLT5zdGFydE9uZVNob3QoMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBj
YWxsT25NYWluVGhyZWFkKHBlcmZvcm1UYXNrLCBuZXcgUGVyZm9ybVRhc2tDb250ZXh0KHRoaXMs
IHRhc2spKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChpc1dvcmtl
ckNvbnRleHQoKSk7CisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgICAgIHN0YXRpY19jYXN0PFdv
cmtlckNvbnRleHQqPih0aGlzKS0+dGhyZWFkKCktPm1lc3NhZ2VRdWV1ZSgpLmFwcGVuZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0VGFza1dvcmtlclRhc2s6OmNyZWF0ZSh0YXNrKSk7CisjZW5kaWYK
KyAgICB9Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL1Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9kb20vU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNjQsMTAgKzY2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdm9pZCByZWYoKSB7IHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogICAg
ICAgICB2b2lkIGRlcmVmKCkgeyBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCisg
ICAgICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxUYXNrPiB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHZpcnR1YWwgflRhc2soKTsKKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOworICAg
ICAgICB9OworCisgICAgICAgIHZvaWQgcG9zdFRhc2soUGFzc1JlZlB0cjxUYXNrPik7IC8vIEV4
ZWN1dGVzIHRoZSB0YXNrIG9uIGNvbnRleHQncyB0aHJlYWQgYXN5bmNocm9ub3VzbHkuCisKICAg
ICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZpcnR1YWxVUkwoKSBjb25z
dCA9IDA7CiAKLSAgICAgICAgYm9vbCBtX2ZpcmVkTWVzc2FnZVBvcnRUaW1lcjsKICAgICAgICAg
SGFzaFNldDxNZXNzYWdlUG9ydCo+IG1fbWVzc2FnZVBvcnRzOwogCiAgICAgICAgIEhhc2hNYXA8
QWN0aXZlRE9NT2JqZWN0Kiwgdm9pZCo+IG1fYWN0aXZlRE9NT2JqZWN0czsKSW5kZXg6IFdlYkNv
cmUvZG9tL1dvcmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtl
ckNvbnRleHQuY3BwCShyZXZpc2lvbiAzODMyOSkKKysrIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgsMjIgQEAKIAogI2lmIEVOQUJMRShX
T1JLRVJTKQogCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJMb2NhdGlv
bi5oIgorI2luY2x1ZGUgIldvcmtlclRhc2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1X
b3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0IEtVUkwmIHVybCkKK1dvcmtlckNvbnRl
eHQ6OldvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsLCBXb3JrZXJUaHJlYWQqIHRocmVhZCkK
ICAgICA6IG1fdXJsKHVybCkKICAgICAsIG1fbG9jYXRpb24oV29ya2VyTG9jYXRpb246OmNyZWF0
ZSh1cmwpKQogICAgICwgbV9zZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHVy
bCkpCiAgICAgLCBtX3NjcmlwdCh0aGlzKQorICAgICwgbV90aHJlYWQodGhyZWFkKQogewogfQog
CkBAIC00Niw2ICs1MSwxMiBAQCBXb3JrZXJDb250ZXh0Ojp+V29ya2VyQ29udGV4dCgpCiB7CiB9
CiAKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlckNvbnRleHQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdvcmtlckNvbnRleHQq
Pih0aGlzKTsKK30KKworCiBjb25zdCBLVVJMJiBXb3JrZXJDb250ZXh0Ojp2aXJ0dWFsVVJMKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV91cmw7CkBAIC02MSw2ICs3Miw1NyBAQCBLVVJMIFdvcmtl
ckNvbnRleHQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0CiAgICAgcmV0dXJuIEtVUkwobV9sb2NhdGlv
bi0+dXJsKCksIHVybCk7CiB9CiAKK3ZvaWQgV29ya2VyQ29udGV4dDo6YWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIg
PT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgeworICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0
ZW5lcnM7CisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAg
IG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAg
ICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0
ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsaXN0
ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFk
ZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfSAgICAKK30KKwordm9pZCBXb3JrZXJDb250
ZXh0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgRXZl
bnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZl
bnRUeXBlKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNl
Y29uZDsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0
ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsg
KytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0
ZW5lcikgeworICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0
ZW5lcnMuYmVnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgV29ya2VyQ29udGV4dDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkuaXNFbXB0
eSgpKSB7CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZ
UEVfRVJSOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgTGlzdGVuZXJW
ZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkp
OworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9
IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5k
KCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Cisg
ICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lckl0
ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9k
b20vV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRl
eHQuaAkocmV2aXNpb24gMzgzMjkpCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAKIAogI2lmIEVOQUJMRShXT1JLRVJTKQogCisj
aW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
KyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyU2NyaXB0Q29udHJvbGxl
ci5oIgpAQCAtMzksMTggKzQyLDIyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBXb3JrZXJMb2NhdGlvbjsKKyAgICBjbGFzcyBXb3JrZXJUYXNrOworICAgIGNsYXNzIFdvcmtl
clRocmVhZDsKIAotICAgIGNsYXNzIFdvcmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxX
b3JrZXJDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgeworICAgIGNsYXNz
IFdvcmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0PiwgcHVibGlj
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHB1YmxpYyBFdmVudFRhcmdldCB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVhdGUoY29uc3Qg
S1VSTCYgdXJsKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiBjcmVh
dGUoY29uc3QgS1VSTCYgdXJsLCBXb3JrZXJUaHJlYWQqIHRocmVhZCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJDb250ZXh0KHVybCkpOworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJDb250ZXh0KHVybCwgdGhyZWFkKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIH5Xb3JrZXJDb250ZXh0KCk7CiAKICAgICAgICAg
dmlydHVhbCBib29sIGlzV29ya2VyQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAor
ICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKKwogICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQogICAgICAgICB2aXJ0dWFsIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQpAQCAtNTgsNiArNjUs
MjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBXb3JrZXJMb2NhdGlvbiogbG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLmdldCgpOyB9CiAKICAgICAgICAgV29ya2Vy
U2NyaXB0Q29udHJvbGxlciogc2NyaXB0KCkgeyByZXR1cm4gJm1fc2NyaXB0OyB9CisgICAgICAg
IFdvcmtlclRocmVhZCogdGhyZWFkKCkgeyByZXR1cm4gbV90aHJlYWQ7IH0KKworICAgICAgICB2
aXJ0dWFsIFdvcmtlckNvbnRleHQqIHRvV29ya2VyQ29udGV4dCgpIHsgcmV0dXJuIHRoaXM7IH0K
KworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJl
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgICAgIHZvaWQgc2V0T25jb25uZWN0KFBhc3NSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX29uY29ubmVjdExpc3RlbmVyID0gZXZlbnRMaXN0
ZW5lcjsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbmNvbm5lY3QoKSBjb25zdCB7IHJldHVy
biBtX29uY29ubmVjdExpc3RlbmVyLmdldCgpOyB9CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8
UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7CisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsK
KyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9l
dmVudExpc3RlbmVyczsgfQogCiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4
dD46OnJlZjsKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0Pjo6ZGVyZWY7
CkBAIC02NSw4ICs4NiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IHJlZigpOyB9
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB7IGRl
cmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsg
fQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQog
Ci0gICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VSTCYgdXJsKTsKKyAgICAgICAgV29ya2Vy
Q29udGV4dChjb25zdCBLVVJMJiwgV29ya2VyVGhyZWFkKik7CiAKICAgICAgICAgdmlydHVhbCBj
b25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkgY29uc3Q7CiAKQEAgLTc1LDYgKzk4LDEwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5
T3JpZ2luOwogCiAgICAgICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIgbV9zY3JpcHQ7CisgICAg
ICAgIFdvcmtlclRocmVhZCogbV90aHJlYWQ7CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IG1fb25jb25uZWN0TGlzdGVuZXI7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZl
bnRMaXN0ZW5lcnM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9kb20vV29ya2VyVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2Vy
VGFzay5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJUYXNrLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclRhc2suaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXJUYXNrOjp+V29ya2VyVGFzaygpCit7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vV29ya2VyVGFzay5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpO
YW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vV29ya2Vy
VGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlclRhc2suaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvZG9tL1dvcmtlclRhc2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtlclRhc2tfaAorI2RlZmluZSBXb3JrZXJU
YXNrX2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0OworCisg
ICAgY2xhc3MgV29ya2VyVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFdvcmtlclRhc2s+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfldvcmtlclRhc2soKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKFdvcmtlckNvbnRleHQqKSA9IDA7CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNl
bmRpZiAvLyBXb3JrZXJUYXNrX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL1dv
cmtlclRhc2suaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL1dvcmtlclRocmVhZC5jcHAJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9kb20vV29y
a2VyVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTcgQEAKICNpbmNsdWRl
ICJEZWRpY2F0ZWRXb3JrZXIuaCIKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyVGFzay5oIgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1Bhc3NSZWZQdHI8V29ya2Vy
VGhyZWFkPiBXb3JrZXJUaHJlYWQ6OmNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0
IFN0cmluZyYgc291cmNlQ29kZSwgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlck9i
amVjdCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkws
IHNvdXJjZUNvZGUsIHdvcmtlck9iamVjdCkpOworfQorCiBXb3JrZXJUaHJlYWQ6OldvcmtlclRo
cmVhZChjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgUGFz
c1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IHdvcmtlck9iamVjdCkKICAgICA6IG1fdGhyZWFkSUQo
MCkKICAgICAsIG1fc2NyaXB0VVJMKHNjcmlwdFVSTC5zdHJpbmcoKS5jb3B5KCkpCkBAIC02Miwx
MyArNzAsMjEgQEAgdm9pZCogV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCh2bwogCiB2
b2lkKiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiB7Ci0gICAgUmVmUHRyPFdvcmtlckNv
bnRleHQ+IHdvcmtlckNvbnRleHQgPSBXb3JrZXJDb250ZXh0OjpjcmVhdGUoS1VSTChtX3Njcmlw
dFVSTCkpOworICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiB3b3JrZXJDb250ZXh0ID0gV29ya2Vy
Q29udGV4dDo6Y3JlYXRlKEtVUkwobV9zY3JpcHRVUkwpLCB0aGlzKTsKICAgICBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyKiBzY3JpcHQgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKTsKIAotICAgIC8v
IFRoaXMgaXMgdGVtcG9yYXJ5IGNvZGUgZm9yIHRlc3RpbmcuIFRoZSB0aHJlYWQgd2lsbCBydW4g
YSBtZXNzYWdlIGxvb3AuCiAgICAgc2NyaXB0LT5ldmFsdWF0ZShtX3NjcmlwdFVSTCwgMSwgbV9z
b3VyY2VDb2RlKTsKIAorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIFJlZlB0cjxXb3JrZXJU
YXNrPiB0YXNrOworICAgICAgICBpZiAoIW1fbWVzc2FnZVF1ZXVlLndhaXRGb3JNZXNzYWdlKHRh
c2spKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2sod29y
a2VyQ29udGV4dC5nZXQoKSk7CisgICAgfQorCiAgICAgd29ya2VyQ29udGV4dCA9IDA7CisgICAg
bV90aHJlYWRJRCA9IDA7CiAKICAgICBkZXJlZigpOwogICAgIHJldHVybiAwOwpJbmRleDogV2Vi
Q29yZS9kb20vV29ya2VyVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV29ya2Vy
VGhyZWFkLmgJKHJldmlzaW9uIDM4MzI5KQorKysgV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDkgQEAKICNpZiBFTkFCTEUoV09SS0VSUykKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiV29ya2VyVGFzay5oIgorI2lu
Y2x1ZGUgPHd0Zi9NZXNzYWdlUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MCwxMyArNDEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgV29ya2VyVGhy
ZWFkIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8V29ya2VyVGhyZWFkPiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJlYWQ+IGNyZWF0ZShjb25zdCBL
VVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgc291cmNlQ29kZSwgUGFzc1JlZlB0cjxEZWRp
Y2F0ZWRXb3JrZXI+IHdvcmtlck9iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWQoc2NyaXB0VVJMLCBzb3VyY2VDb2RlLCB3b3JrZXJP
YmplY3QpKTsKLSAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXb3JrZXJUaHJl
YWQ+IGNyZWF0ZShjb25zdCBLVVJMJiBzY3JpcHRVUkwsIGNvbnN0IFN0cmluZyYgc291cmNlQ29k
ZSwgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+KTsKIAogICAgICAgICBib29sIHN0YXJ0KCk7
CiAKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGhyZWFkSUQ7IH0KKyAgICAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxXb3JrZXJUYXNrPiA+JiBt
ZXNzYWdlUXVldWUoKSB7IHJldHVybiBtX21lc3NhZ2VRdWV1ZTsgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNv
ZGUsIFBhc3NSZWZQdHI8RGVkaWNhdGVkV29ya2VyPik7CiAKQEAgLTU4LDYgKzU5LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV9zY3JpcHRVUkw7CiAgICAgICAgIFN0
cmluZyBtX3NvdXJjZUNvZGU7CiAgICAgICAgIFJlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+IG1fd29y
a2VyT2JqZWN0OworCisgICAgICAgIE1lc3NhZ2VRdWV1ZTxSZWZQdHI8V29ya2VyVGFzaz4gPiBt
X21lc3NhZ2VRdWV1ZTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcAkocmV2aXNpb24gMzgzMjkpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDcgKzM3Miw3IEBAIHZvaWQgRE9NV2luZG93Ojpwb3N0
TWVzc2FnZShjb25zdCBTdHJpbmcKIAogICAgIFJlZlB0cjxNZXNzYWdlUG9ydD4gbmV3TWVzc2Fn
ZVBvcnQ7CiAgICAgaWYgKG1lc3NhZ2VQb3J0KQotICAgICAgICBuZXdNZXNzYWdlUG9ydCA9IG1l
c3NhZ2VQb3J0LT5jbG9uZShkb2N1bWVudCgpLCBlYyk7CisgICAgICAgIG5ld01lc3NhZ2VQb3J0
ID0gbWVzc2FnZVBvcnQtPmNsb25lKGVjKTsKICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsK
IApAQCAtNDA1LDYgKzQwNSwxMSBAQCB2b2lkIERPTVdpbmRvdzo6cG9zdE1lc3NhZ2VUaW1lckZp
cmVkKFBvCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQg
PSB0aW1lci0+ZXZlbnQoKS0+bWVzc2FnZVBvcnQoKTsKKyAgICBBU1NFUlQoIW1lc3NhZ2VQb3J0
IHx8ICFtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAobWVz
c2FnZVBvcnQpCisgICAgICAgIG1lc3NhZ2VQb3J0LT5hdHRhY2hUb0NvbnRleHQoZG9jdW1lbnQo
KSk7CisKICAgICBkb2N1bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KHRpbWVyLT5ldmVudCgp
KTsKIH0KIAo=
</data>
<flag name="review"
          id="11550"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>