<?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>50836</bug_id>
          
          <creation_ts>2010-12-10 12:08:41 -0800</creation_ts>
          <short_desc>Move open and showModalDialog implementations from bindings into DOM class DOMWindow</short_desc>
          <delta_ts>2010-12-10 18:20:25 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>320306</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-10 12:08:41 -0800</bug_when>
    <thetext>Move open and showModalDialog implementations from bindings into DOM class DOMWindow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320319</commentid>
    <comment_count>1</comment_count>
      <attachid>76234</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-10 12:20:55 -0800</bug_when>
    <thetext>Created attachment 76234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320323</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 12:24:42 -0800</bug_when>
    <thetext>Attachment 76234 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/bindings/js/JSDOMWindowCustom.cpp&apos;, u&apos;WebCore/page/DOMWindow.cpp&apos;, u&apos;WebCore/page/DOMWindow.h&apos;, u&apos;WebCore/page/WindowFeatures.cpp&apos;, u&apos;WebCore/page/WindowFeatures.h&apos;]&quot; exit_code: 1
WebCore/page/WindowFeatures.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/page/WindowFeatures.cpp:228:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320328</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 12:28:56 -0800</bug_when>
    <thetext>Attachment 76234 did not build on chromium:
Build output: http://queues.webkit.org/results/6926037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320354</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-12-10 13:19:27 -0800</bug_when>
    <thetext>Attachment 76234 did not build on win:
Build output: http://queues.webkit.org/results/6925046</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320407</commentid>
    <comment_count>5</comment_count>
      <attachid>76259</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-10 14:19:37 -0800</bug_when>
    <thetext>Created attachment 76259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320410</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-10 14:21:54 -0800</bug_when>
    <thetext>Attachment 76259 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/bindings/js/JSDOMWindowCustom.cpp&apos;, u&apos;WebCore/page/DOMWindow.cpp&apos;, u&apos;WebCore/page/DOMWindow.h&apos;, u&apos;WebCore/page/WindowFeatures.cpp&apos;, u&apos;WebCore/page/WindowFeatures.h&apos;]&quot; exit_code: 1
WebCore/page/WindowFeatures.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebCore/page/WindowFeatures.cpp:228:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320536</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-12-10 18:20:25 -0800</bug_when>
    <thetext>Committed r73829: &lt;http://trac.webkit.org/changeset/73829&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76234</attachid>
            <date>2010-12-10 12:20:55 -0800</date>
            <delta_ts>2010-12-10 14:19:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50836-20101210122053.patch</filename>
            <type>text/plain</type>
            <size>55839</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzc2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMTAtMTItMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
b3BlbiBhbmQgc2hvd01vZGFsRGlhbG9nIGltcGxlbWVudGF0aW9ucyBmcm9tIGJpbmRpbmdzIGlu
dG8gRE9NIGNsYXNzIERPTVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA4MzYKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKTogUmVtb3Zl
ZCBtb3N0IG9mIHRoZSBjb2RlIGFuZCBjaGFuZ2VkIHRvIGNhbGwKKyAgICAgICAgRE9NV2luZG93
OjpvcGVuLgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6RGlhbG9nSGFuZGxlcik6
IEFkZGVkLiBPYmplY3QgaXMgdXNlZCB0byBoYW5kbGUgdGhlCisgICAgICAgIGFyZ3VtZW50cyBh
bmQgcmV0dXJuIHZhbHVlIGluIHNob3dNb2RhbERpYWxvZy4KKyAgICAgICAgKFdlYkNvcmU6OkRp
YWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRp
YWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzZXRV
cERpYWxvZyk6IEFkZGVkLiBGdW5jdGlvbiBwYXNzZWQgdG8gc2hvd01vZGFsRGlhbG9nIHRoYXQg
anVzdAorICAgICAgICBjYXN0cyBwb2ludGVyIHRvIERpYWxvZ0hhbmRsZXIgY2FuIGNhbGxzIGRp
YWxvZ0NyZWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlh
bG9nKTogUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIGFuZCBjaGFuZ2VkCisgICAgICAgIHRvIGNh
bGwgRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UpOiBNYWRlIHN0eWxlIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBmaWxl
IGJ5CisgICAgICAgIHJlbmFtaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgZ2V0dGluZyByaWQgb2Yg
YSBuZWVkbGVzcyBvbmVzLgorCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMpOiBNb3ZlZCBi
b2R5IG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgdG8gdGhlIFdpbmRvd0ZlYXR1cmVzIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphbGxvd1BvcFVwKTogUmVuYW1lZCBhcmd1
bWVudCBmcm9tIGFjdGl2ZUZyYW1lIHRvIGZpcnN0RnJhbWUsCisgICAgICAgIGJlY2F1c2UgdGhh
dCdzIHRoZSBmcmFtZSB3ZSBwYXNzIGluIGhlcmUuIEFsc28gYWRkZWQgYW4gb3ZlcmxvYWQgc28g
dGhpcyBjYW4gYmUKKyAgICAgICAgY2FsbGVkIG9uIGEgd2luZG93IHJhdGhlciB0aGFuIGEgZnJh
bWUuCisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNldExvY2F0aW9uKTogUmVuYW1lZCBh
IGNvdXBsZSB2YXJpYWJsZXMgc28gdGhlIG5hbWVzIGFyZQorICAgICAgICB0aGUgc2FtZSBhcyBp
biBvcGVuIGFuZCBzaG93TW9kYWxEaWFsb2cuIEZhY3RvcmVkIHRoZSBKYXZhU2NyaXB0IHNlY3Vy
aXR5IGNoZWNrCisgICAgICAgIGludG8gYSBuZXcgZnVuY3Rpb24gbmFtZWQgaXNJbnNlY3VyZVNj
cmlwdEFjY2Vzcy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6aXNJbnNlY3VyZVNjcmlw
dEFjY2Vzcyk6IEhlcmUgaXMgdGhlIG5ldyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdpbmRvdzo6Y3JlYXRlV2luZG93KTogQWRkZWQuIENvbnRhaW5zIGxvZ2ljIHNoYXJlZCBieSBv
cGVuIGFuZAorICAgICAgICBzaG93TW9kYWxEaWFsb2cganVzdCBhcyB0aGUgZnVuY3Rpb24gbmFt
ZWQgY3JlYXRlV2luZG93IGluIEpTRE9NV2luZG93Q3VzdG9tLmNwcAorICAgICAgICB1c2VkIHRv
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuKTogQWRkZWQuIENvZGUgZnJvbSBK
U0RPTVdpbmRvd0N1c3RvbSB3aXRob3V0IHRoZQorICAgICAgICBKYXZhU2NyaXB0IGxhbmd1YWdl
IGJpbmRpbmcgcGFydCwgYW5kIHdpdGggYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gc2hhcmUgY29k
ZQorICAgICAgICB3aXRoIHRoZSByZXN0IG9mIHRoZSBET01XaW5kb3cgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6IERpdHRvLgorCisgICAgICAg
ICogcGFnZS9ET01XaW5kb3cuaDogTW92ZWQgY29uZGl0aW9uYWwgcGFydHMgb2YgdGhlIGZpbGUg
aW50byBzZXBhcmF0ZSBwYXJhZ3JhcGhzCisgICAgICAgIGluIGFscGhhYmV0aWNhbCBvcmRlciBz
byB0aGV5IGFyZSBub3Qgc2NhdHRlcmVkIHRob3J1Z2ggdGhlIGZpbGUuIFJlbW92ZWQgcmVkdW5k
YW50CisgICAgICAgIGluY2x1ZGVzLiBBZGRlZCBzb21lIGJsYW5rIGxpbmVzIGZvciBjbGFyaXR5
LiBBZGRlZCBhbiBvcGVuIGZ1bmN0aW9uIGFuZCBhCisgICAgICAgIHNob3dNb2RhbERpYWxvZyBm
dW5jdGlvbi4gQWRkZWQgcHJpdmF0ZSBjcmVhdGVXaW5kb3cgYW5kIGlzSW5zZWN1cmVTY3JpcHRB
Y2Nlc3MKKyAgICAgICAgZnVuY3Rpb25zLgorCisgICAgICAgICogcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1dpbmRvd0ZlYXR1cmVzU2VwYXJhdG9yKTogUmVu
YW1lZCBmcm9tIGlzU2VwYXJhdG9yIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6V2lu
ZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuIFVz
ZWQgaXNFbXB0eQorICAgICAgICBpbnN0ZWFkIG9mIGNoZWNraW5nIGxlbmd0aC4gQWRkZWQgYSBu
ZXcgY29uc3RydWN0b3IgZm9yIHVzZSB3aGVuIG1ha2luZyBkaWFsb2dzLAorICAgICAgICB3aXRo
IGNvZGUgZnJvbSB0aGUgc2hvd01vZGFsRGlhbG9nIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKTogVXNlIERpYWxvZ0ZlYXR1cmVzTWFwIHR5
cGVkZWYuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKTog
VXNlIERpYWxvZ0ZlYXR1cmVzTWFwIHR5cGVkZWYuCisgICAgICAgIFJlbmFtZWQgYSBsb2NhbCB2
YXJpYWJsZSBhbmQgdHdlYWtlZCB0aGUgY29tbWVudHMgYSBiaXQuCisgICAgICAgIChXZWJDb3Jl
OjpXaW5kb3dGZWF0dXJlczo6cGFyc2VEaWFsb2dGZWF0dXJlcyk6IEFkZGVkLiBDb2RlIG1vdmVk
IGhlcmUgZnJvbQorICAgICAgICBET01XaW5kb3c6OnBhcnNlRGlhbG9nRmVhdHVyZXMgYW5kIHJl
ZmFjdG9yZWQgYSBiaXQuCisKKyAgICAgICAgKiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmg6IEFkZGVk
IG5ldyBjb25zdHJ1Y3RvciwgbmV3IHBhcnNlRGlhbG9nRmVhdHVyZXMKKyAgICAgICAgZnVuY3Rp
b24sIERpYWxvZ0ZlYXR1cmVzTWFwIHR5cGVkZWYsIGFuZCBtYWRlIHNldFdpbmRvd0ZlYXR1cmUg
ZnVuY3Rpb24gcHJpdmF0ZS4KKwogMjAxMC0xMi0wOSAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5i
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDczNjYw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTY2NywyMjQgKzY2Nyw4OSBAQCBKU1ZhbHVlIEpTRE9NV2luZG93
Ojp3ZWJTb2NrZXQoRXhlY1N0YXRlCiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMKIAotLy8gSGVscGVy
IGZvciB3aW5kb3cub3BlbigpIGFuZCB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCkKLXN0YXRpYyBG
cmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGxleGljYWxGcmFtZSwg
RnJhbWUqIGR5bmFtaWNGcmFtZSwgRnJhbWUqIG9wZW5lckZyYW1lLAotICAgIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdp
bmRvd0ZlYXR1cmVzLCBKU1ZhbHVlIGRpYWxvZ0FyZ3MpCi17Ci0gICAgQVNTRVJUKGxleGljYWxG
cmFtZSk7Ci0gICAgQVNTRVJUKGR5bmFtaWNGcmFtZSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdDsKLQotICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUg
ZHluYW1pY0dsb2JhbE9iamVjdCB0byBkZXRlcm1pbmUKLSAgICAvLyB0aGUgb3V0Z29pbmdSZWZl
cnJlci4gV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KLSAgICBTdHJpbmcgcmVmZXJy
ZXIgPSBkeW5hbWljRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7Ci0gICAgcmVx
dWVzdC5zZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwotICAgIEZyYW1lTG9hZGVyOjphZGRIVFRQ
T3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgZHluYW1pY0ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdP
cmlnaW4oKSk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QobGV4aWNhbEZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCByZXF1ZXN0LCBmcmFtZU5hbWUpOwotCi0g
ICAgLy8gRklYTUU6IEl0J3MgbXVjaCBiZXR0ZXIgZm9yIGNsaWVudCBBUEkgaWYgYSBuZXcgd2lu
ZG93IHN0YXJ0cyB3aXRoIGEgVVJMLCBoZXJlIHdoZXJlIHdlCi0gICAgLy8ga25vdyB3aGF0IFVS
TCB3ZSBhcmUgZ29pbmcgdG8gb3Blbi4gVW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhc3NlcyB0
aGUgZW1wdHkgc3RyaW5nCi0gICAgLy8gZm9yIHRoZSBVUkwsIGJ1dCB0aGVyZSdzIGEgcmVhc29u
IGZvciB0aGF0LiBCZWZvcmUgbG9hZGluZyB3ZSBoYXZlIHRvIHNldCB1cCB0aGUgb3BlbmVyLAot
ICAgIC8vIG9wZW5lZEJ5RE9NLCBhbmQgZGlhbG9nQXJndW1lbnRzIHZhbHVlcy4gQWxzbywgdG8g
ZGVjaWRlIHdoZXRoZXIgdG8gdXNlIHRoZSBVUkwgd2UgY3VycmVudGx5Ci0gICAgLy8gZG8gYW4g
YWxsb3dzQWNjZXNzRnJvbSBjYWxsIHVzaW5nIHRoZSB3aW5kb3cgd2UgY3JlYXRlLCB3aGljaCBj
YW4ndCBiZSBkb25lIGJlZm9yZSBjcmVhdGluZyBpdC4KLSAgICAvLyBXZSdkIGhhdmUgdG8gcmVz
b2x2ZSBhbGwgdGhvc2UgaXNzdWVzIHRvIHBhc3MgdGhlIFVSTCBpbnN0ZWFkIG9mICIiLgotCi0g
ICAgYm9vbCBjcmVhdGVkOwotICAgIC8vIFdlIHBhc3MgdGhlIG9wZW5lciBmcmFtZSBmb3IgdGhl
IGxvb2t1cEZyYW1lIGluIGNhc2UgdGhlIGFjdGl2ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbQot
ICAgIC8vIHRoZSBvcGVuZXIgZnJhbWUsIGFuZCB0aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUg
cmVsYXRpdmUgdG8gdGhlIG9wZW5lciBmcmFtZS4KLSAgICBGcmFtZSogbmV3RnJhbWUgPSBjcmVh
dGVXaW5kb3cobGV4aWNhbEZyYW1lLCBvcGVuZXJGcmFtZSwgZnJhbWVSZXF1ZXN0LCB3aW5kb3dG
ZWF0dXJlcywgY3JlYXRlZCk7Ci0gICAgaWYgKCFuZXdGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcihvcGVuZXJGcmFtZSk7Ci0gICAg
bmV3RnJhbWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKLQotICAgIC8vIEZJWE1FOiBJZiBh
IHdpbmRvdyBpcyBjcmVhdGVkIGZyb20gYW4gaXNvbGF0ZWQgd29ybGQsIHdoYXQgYXJlIHRoZSBj
b25zZXF1ZW5jZXMgb2YgdGhpcz8gJ2RpYWxvZ0FyZ3VtZW50cycgb25seSBhcHBlYXJzIGJhY2sg
aW4gdGhlIG5vcm1hbCB3b3JsZD8KLSAgICBKU0RPTVdpbmRvdyogbmV3V2luZG93ID0gdG9KU0RP
TVdpbmRvdyhuZXdGcmFtZSwgbm9ybWFsV29ybGQoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Ci0KLSAg
ICBpZiAoZGlhbG9nQXJncykKLSAgICAgICAgbmV3V2luZG93LT5wdXREaXJlY3QoSWRlbnRpZmll
cihleGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3MpOwotCi0gICAgaWYgKCFwcm90
b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IG5ld1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVj
KSkgewotICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTCA9IHVybC5pc0VtcHR5KCkgPyBLVVJMKFBh
cnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoZXhlYywgdXJsKTsKLSAgICAgICAgaWYg
KGNyZWF0ZWQpCi0gICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9u
KGxleGljYWxGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJM
LCByZWZlcnJlciwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoIXVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBuZXdGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVs
ZUxvY2F0aW9uQ2hhbmdlKGxleGljYWxGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSwgY29tcGxldGVkVVJMLnN0cmluZygpLCByZWZlcnJlciwgIWxleGljYWxGcmFtZS0+c2NyaXB0
KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5ld0ZyYW1lOwotfQotCi1zdGF0aWMgYm9vbCBkb21XaW5kb3dBbGxvd1BvcFVw
KEZyYW1lKiBhY3RpdmVGcmFtZSkKLXsKLSAgICBBU1NFUlQoYWN0aXZlRnJhbWUpOwotICAgIGlm
IChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIERPTVdpbmRvdzo6YWxsb3dQb3BVcChhY3RpdmVGcmFtZSk7
Ci19Ci0KIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmlu
Z1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBX
aW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmlt
cGwoKTsKKyAgICBET01XaW5kb3cqIGZpcnN0V2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBs
KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBGcmFtZSogbGV4aWNhbEZyYW1lID0gdG9MZXhpY2FsRnJhbWUoZXhlYyk7
Ci0gICAgaWYgKCFsZXhpY2FsRnJhbWUpCisgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGV4
ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IHVzdHJpbmdU
b0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7Ci0gICAgaWYgKCFk
eW5hbWljRnJhbWUpCisgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotCi0gICAgLy8gQmVjYXVzZSBG
cmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZ3MsIHdlIG11c3Qg
Y2hlY2sgZm9yIGVtcHR5IGZyYW1lbmFtZXMuCi0gICAgLy8gT3RoZXJ3aXNlLCBpbGxlZ2l0aW1h
dGUgd2luZG93Lm9wZW4oKSBjYWxscyB3aXRoIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91
Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFkb21XaW5kb3dBbGxvd1BvcFVwKGR5bmFt
aWNGcmFtZSkgJiYgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQo
ZnJhbWVOYW1lKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gR2V0
IHRoZSB0YXJnZXQgZnJhbWUgZm9yIHRoZSBzcGVjaWFsIGNhc2VzIG9mIF90b3AgYW5kIF9wYXJl
bnQuICBJbiB0aG9zZQotICAgIC8vIGNhc2VzLCB3ZSBjYW4gc2NoZWR1bGUgYSBsb2NhdGlvbiBj
aGFuZ2UgcmlnaHQgbm93IGFuZCByZXR1cm4gZWFybHkuCi0gICAgYm9vbCB0b3BPclBhcmVudCA9
IGZhbHNlOwotICAgIGlmIChmcmFtZU5hbWUgPT0gIl90b3AiKSB7Ci0gICAgICAgIGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dG9wKCk7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKGZyYW1lTmFtZSA9PSAiX3BhcmVudCIpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBw
YXJlbnQgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIGZyYW1lID0gcGFy
ZW50OwotICAgICAgICB0b3BPclBhcmVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh0b3BPclBh
cmVudCkgewotICAgICAgICBTdHJpbmcgY29tcGxldGVkVVJMOwotICAgICAgICBpZiAoIXVybFN0
cmluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTChl
eGVjLCB1cmxTdHJpbmcpLnN0cmluZygpOwotCi0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZp
Z2F0aW9uKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
Ci0gICAgICAgIGNvbnN0IEpTRE9NV2luZG93KiB0YXJnZXRlZFdpbmRvdyA9IHRvSlNET01XaW5k
b3coZnJhbWUsIGN1cnJlbnRXb3JsZChleGVjKSk7Ci0gICAgICAgIGlmICghY29tcGxldGVkVVJM
LmlzRW1wdHkoKSAmJiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KGNvbXBsZXRlZFVSTCkgfHwgKHRh
cmdldGVkV2luZG93ICYmIHRhcmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkp
IHsKLSAgICAgICAgICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUg
ZHluYW1pY0dsb2JhbE9iamVjdCB0bwotICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvdXRn
b2luZyByZWZlcnJlci4gV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KLSAgICAgICAg
ICAgIFN0cmluZyByZWZlcnJlciA9IGR5bmFtaWNGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKTsKKyAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBsKCktPm9w
ZW4odXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVXaW5k
b3csIGZpcnN0V2luZG93KTsKKyAgICBpZiAoIW9wZW5lZFdpbmRvdykKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgb3BlbmVkV2luZG93LmdldCgp
KTsKK30KIAotICAgICAgICAgICAgZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShsZXhpY2FsRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgY29tcGxldGVkVVJMLCByZWZlcnJlciwgIWxleGljYWxGcmFt
ZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygpKTsK
K2NsYXNzIERpYWxvZ0hhbmRsZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IERpYWxvZ0hhbmRs
ZXIoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICA6IG1fZXhlYyhleGVjKQorICAgICAgICAsIG1f
Z2xvYmFsT2JqZWN0KDApCisgICAgewogICAgIH0KIAotICAgIC8vIEluIHRoZSBjYXNlIG9mIGEg
bmFtZWQgZnJhbWUgb3IgYSBuZXcgd2luZG93LCB3ZSdsbCB1c2UgdGhlIGNyZWF0ZVdpbmRvdygp
IGhlbHBlcgotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KHdpbmRvd0ZlYXR1cmVzLnhTZXQgPyB3
aW5kb3dGZWF0dXJlcy54IDogMCwgd2luZG93RmVhdHVyZXMueVNldCA/IHdpbmRvd0ZlYXR1cmVz
LnkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0
ID8gd2luZG93RmVhdHVyZXMud2lkdGggOiAwLCB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPyB3
aW5kb3dGZWF0dXJlcy5oZWlnaHQgOiAwKTsKLSAgICBET01XaW5kb3c6OmFkanVzdFdpbmRvd1Jl
Y3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlID8gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSA6
IDApLCB3aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKKyAgICB2b2lkIGRpYWxvZ0NyZWF0ZWQoRE9N
V2luZG93Kik7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCi0gICAgd2luZG93
RmVhdHVyZXMueCA9IHdpbmRvd1JlY3QueCgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5k
b3dSZWN0LnkoKTsKLSAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdo
dCgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworcHJp
dmF0ZToKKyAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0RPTVdpbmRvdyogbV9nbG9iYWxP
YmplY3Q7Cit9OwogCi0gICAgZnJhbWUgPSBjcmVhdGVXaW5kb3coZXhlYywgbGV4aWNhbEZyYW1l
LCBkeW5hbWljRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVy
ZXMsIEpTVmFsdWUoKSk7CitpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVk
KERPTVdpbmRvdyogZGlhbG9nKQoreworICAgIG1fZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRv
dyhkaWFsb2ctPmZyYW1lKCksIG5vcm1hbFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Cisg
ICAgaWYgKEpTVmFsdWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLT5hcmd1bWVudCgxKSkKKyAg
ICAgICAgbV9nbG9iYWxPYmplY3QtPnB1dERpcmVjdChJZGVudGlmaWVyKG1fZXhlYywgImRpYWxv
Z0FyZ3VtZW50cyIpLCBkaWFsb2dBcmd1bWVudHMpOworfQogCi0gICAgaWYgKCFmcmFtZSkKK2lu
bGluZSBKU1ZhbHVlIERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIobV9leGVjLCAicmV0dXJuVmFsdWUiKTsKKyAgICBQcm9wZXJ0
eVNsb3Qgc2xvdDsKKyAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0LT5KU0dsb2JhbE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRp
Zmllcik7Cit9CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBmcmFtZS0+ZG9tV2luZG93KCkpOwor
c3RhdGljIHZvaWQgc2V0VXBEaWFsb2coRE9NV2luZG93KiBkaWFsb2csIHZvaWQqIGNvbnRleHQp
Cit7CisgICAgc3RhdGljX2Nhc3Q8RGlhbG9nSGFuZGxlcio+KGNvbnRleHQpLT5kaWFsb2dDcmVh
dGVkKGRpYWxvZyk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgU3RyaW5nIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIEpTVmFsdWUg
ZGlhbG9nQXJncyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIFN0cmluZyBmZWF0dXJlQXJncyA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1l
bnQoMikpOworICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CisgICAgRE9NV2luZG93KiBmaXJzdFdp
bmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgp
OwogCi0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEZyYW1lKiBsZXhpY2FsRnJhbWUg
PSB0b0xleGljYWxGcmFtZShleGVjKTsKLSAgICBpZiAoIWxleGljYWxGcmFtZSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1p
Y0ZyYW1lKGV4ZWMpOwotICAgIGlmICghZHluYW1pY0ZyYW1lKQorICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKCFET01XaW5kb3c6OmNhblNob3dNb2RhbERpYWxv
Z05vdyhmcmFtZSkgfHwgIWRvbVdpbmRvd0FsbG93UG9wVXAoZHluYW1pY0ZyYW1lKSkKKyAgICBT
dHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gZmVhdHVyZXM7Ci0gICAgRE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9n
RmVhdHVyZXMoZmVhdHVyZUFyZ3MsIGZlYXR1cmVzKTsKKyAgICBEaWFsb2dIYW5kbGVyIGhhbmRs
ZXIoZXhlYyk7CiAKLSAgICBjb25zdCBib29sIHRydXN0ZWQgPSBmYWxzZTsKKyAgICBpbXBsKCkt
PnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVX
aW5kb3csIGZpcnN0V2luZG93LCBzZXRVcERpYWxvZywgJmhhbmRsZXIpOwogCi0gICAgLy8gVGhl
IGZvbGxvd2luZyBmZWF0dXJlcyBmcm9tIE1pY3Jvc29mdCdzIGRvY3VtZW50YXRpb24gYXJlIG5v
dCBpbXBsZW1lbnRlZDoKLSAgICAvLyAtIGRlZmF1bHQgZm9udCBzZXR0aW5ncwotICAgIC8vIC0g
d2lkdGgsIGhlaWdodCwgbGVmdCwgYW5kIHRvcCBzcGVjaWZpZWQgaW4gdW5pdHMgb3RoZXIgdGhh
biAicHgiCi0gICAgLy8gLSBlZGdlIChzdW5rZW4gb3IgcmFpc2VkLCBkZWZhdWx0IGlzIHJhaXNl
ZCkKLSAgICAvLyAtIGRpYWxvZ0hpZGU6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMs
ICJkaWFsb2doaWRlIiksIG1ha2VzIGRpYWxvZyBoaWRlIHdoZW4geW91IHByaW50Ci0gICAgLy8g
LSBoZWxwOiBib29sRmVhdHVyZShmZWF0dXJlcywgImhlbHAiLCB0cnVlKSwgbWFrZXMgaGVscCBp
Y29uIGFwcGVhciBpbiBkaWFsb2cgKHdoYXQgZG9lcyBpdCBkbyBvbiBXaW5kb3dzPykKLSAgICAv
LyAtIHVuYWRvcm5lZDogdHJ1c3RlZCAmJiBib29sRmVhdHVyZShmZWF0dXJlcywgInVuYWRvcm5l
ZCIpOwotCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KGZy
YW1lLT52aWV3KCkpOwotCi0gICAgV2luZG93RmVhdHVyZXMgd2FyZ3M7Ci0gICAgd2FyZ3Mud2lk
dGggPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nd2lkdGgi
LCAxMDAsIHNjcmVlblJlY3Qud2lkdGgoKSwgNjIwKTsgLy8gZGVmYXVsdCBoZXJlIGNhbWUgZnJv
bSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQotICAgIHdhcmdzLndpZHRoU2V0ID0gdHJ1
ZTsKLSAgICB3YXJncy5oZWlnaHQgPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1
cmVzLCAiZGlhbG9naGVpZ2h0IiwgMTAwLCBzY3JlZW5SZWN0LmhlaWdodCgpLCA0NTApOyAvLyBk
ZWZhdWx0IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFCi0gICAg
d2FyZ3MuaGVpZ2h0U2V0ID0gdHJ1ZTsKLQotICAgIHdhcmdzLnggPSBXaW5kb3dGZWF0dXJlczo6
ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nbGVmdCIsIHNjcmVlblJlY3QueCgpLCBzY3Jl
ZW5SZWN0LnJpZ2h0KCkgLSB3YXJncy53aWR0aCwgLTEpOwotICAgIHdhcmdzLnhTZXQgPSB3YXJn
cy54ID4gMDsKLSAgICB3YXJncy55ID0gV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShmZWF0
dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlblJlY3QueSgpLCBzY3JlZW5SZWN0LmJvdHRvbSgpIC0g
d2FyZ3MuaGVpZ2h0LCAtMSk7Ci0gICAgd2FyZ3MueVNldCA9IHdhcmdzLnkgPiAwOwotCi0gICAg
aWYgKFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShmZWF0dXJlcywgImNlbnRlciIsIHRydWUp
KSB7Ci0gICAgICAgIGlmICghd2FyZ3MueFNldCkgewotICAgICAgICAgICAgd2FyZ3MueCA9IHNj
cmVlblJlY3QueCgpICsgKHNjcmVlblJlY3Qud2lkdGgoKSAtIHdhcmdzLndpZHRoKSAvIDI7Ci0g
ICAgICAgICAgICB3YXJncy54U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXdh
cmdzLnlTZXQpIHsKLSAgICAgICAgICAgIHdhcmdzLnkgPSBzY3JlZW5SZWN0LnkoKSArIChzY3Jl
ZW5SZWN0LmhlaWdodCgpIC0gd2FyZ3MuaGVpZ2h0KSAvIDI7Ci0gICAgICAgICAgICB3YXJncy55
U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdhcmdzLmRpYWxvZyA9IHRydWU7
Ci0gICAgd2FyZ3MucmVzaXphYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1
cmVzLCAicmVzaXphYmxlIik7Ci0gICAgd2FyZ3Muc2Nyb2xsYmFyc1Zpc2libGUgPSBXaW5kb3dG
ZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJzY3JvbGwiLCB0cnVlKTsKLSAgICB3YXJn
cy5zdGF0dXNCYXJWaXNpYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1cmVz
LCAic3RhdHVzIiwgIXRydXN0ZWQpOwotICAgIHdhcmdzLm1lbnVCYXJWaXNpYmxlID0gZmFsc2U7
Ci0gICAgd2FyZ3MudG9vbEJhclZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5sb2NhdGlvbkJh
clZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5mdWxsc2NyZWVuID0gZmFsc2U7Ci0KLSAgICBG
cmFtZSogZGlhbG9nRnJhbWUgPSBjcmVhdGVXaW5kb3coZXhlYywgbGV4aWNhbEZyYW1lLCBkeW5h
bWljRnJhbWUsIGZyYW1lLCB1cmwsICIiLCB3YXJncywgZGlhbG9nQXJncyk7Ci0gICAgaWYgKCFk
aWFsb2dGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBKU0RPTVdp
bmRvdyogZGlhbG9nV2luZG93ID0gdG9KU0RPTVdpbmRvdyhkaWFsb2dGcmFtZSwgY3VycmVudFdv
cmxkKGV4ZWMpKTsKLSAgICBkaWFsb2dGcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+cnVuTW9kYWwo
KTsKLQotICAgIElkZW50aWZpZXIgcmV0dXJuVmFsdWUoZXhlYywgInJldHVyblZhbHVlIik7Ci0g
ICAgaWYgKGRpYWxvZ1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbU5vRXJyb3JNZXNzYWdlKGV4ZWMp
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAvLyBUaGlzIGlzIHNhZmUs
IHdlIGhhdmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlIG9yaWdpbiBzZWN1cml0eSBjaGVjayBhbmQg
d2UgYXJlCi0gICAgICAgIC8vIG5vdCBpbnRlcmVzdGVkIGluIGFueSBvZiB0aGUgRE9NIHByb3Bl
cnRpZXMgb2YgdGhlIHdpbmRvdy4KLSAgICAgICAgaWYgKGRpYWxvZ1dpbmRvdy0+SlNHbG9iYWxP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCByZXR1cm5WYWx1ZSwgc2xvdCkpCi0gICAg
ICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCByZXR1cm5WYWx1ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBoYW5kbGVyLnJldHVyblZhbHVl
KCk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IGltcGwoKTsKKyAgICBET01XaW5kb3cqIGFj
dGl2ZVdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
aW1wbCgpOwogCi0gICAgRE9NV2luZG93KiBzb3VyY2UgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAg
LTkwMSw3ICs3NjYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVjU3Rh
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgd2luZG93LT5wb3N0TWVzc2FnZShtZXNzYWdlLCAmbWVzc2FnZVBvcnRzLCB0YXJn
ZXRPcmlnaW4sIHNvdXJjZSwgZWMpOworICAgIGltcGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSwg
Jm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3RpdmVXaW5kb3csIGVjKTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkocmV2aXNpb24gNzM2NjApCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDE1ICsyOSwxNCBA
QAogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJk
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJhckluZm8uaCIK
KyNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2lu
Y2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1J1bGVM
aXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIK
ICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgpAQCAtNDgsOCArNDcsOCBAQAogI2lu
Y2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEZXZpY2VNb3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC01Nyw2ICs1Niw3
IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uQ2VudGVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTg4
LDYgKzg5LDcgQEAKICNpbmNsdWRlICJTdHlsZU1lZGlhLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVy
bWluYXRpb24uaCIKICNpbmNsdWRlICJXZWJLaXRQb2ludC5oIgorI2luY2x1ZGUgIldpbmRvd0Zl
YXR1cmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0zNDAsNDAgKzM0MiwyOCBAQCB2
b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldFko
bWF4KHNjcmVlbi55KCksIG1pbih3aW5kb3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cu
aGVpZ2h0KCkpKSk7CiB9CiAKLXZvaWQgRE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9nRmVhdHVy
ZXMoY29uc3QgU3RyaW5nJiBmZWF0dXJlc0FyZywgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIG1h
cCkKKy8vIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSBWOCBzaG93TW9k
YWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9NV2luZG93Lgordm9pZCBET01XaW5kb3c6OnBh
cnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIG1hcCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBmZWF0dXJlczsKLSAgICBm
ZWF0dXJlc0FyZy5zcGxpdCgnOycsIGZlYXR1cmVzKTsKLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgU3RyaW5nIHMgPSAqaXQ7Ci0gICAgICAgIHNpemVfdCBwb3MgPSBzLmZpbmQo
Jz0nKTsKLSAgICAgICAgc2l6ZV90IGNvbG9uUG9zID0gcy5maW5kKCc6Jyk7Ci0gICAgICAgIGlm
IChwb3MgIT0gbm90Rm91bmQgJiYgY29sb25Qb3MgIT0gbm90Rm91bmQpCi0gICAgICAgICAgICBj
b250aW51ZTsgLy8gaWdub3JlIGFueSBzdHJpbmdzIHRoYXQgaGF2ZSBib3RoID0gYW5kIDoKLSAg
ICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIHBvcyA9IGNvbG9uUG9zOwot
ICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAvLyBudWxsIHN0cmlu
ZyBmb3IgdmFsdWUgbWVhbnMga2V5IHdpdGhvdXQgdmFsdWUKLSAgICAgICAgICAgIG1hcC5zZXQo
cy5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpLCBTdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gcy5sZWZ0KHBvcykuc3RyaXBXaGl0ZVNwYWNlKCku
bG93ZXIoKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWwgPSBzLnN1YnN0cmluZyhwb3MgKyAxKS5z
dHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwotICAgICAgICAgICAgc2l6ZV90IHNwYWNlUG9zID0g
dmFsLmZpbmQoJyAnKTsKLSAgICAgICAgICAgIGlmIChzcGFjZVBvcyAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgICAgICB2YWwgPSB2YWwubGVmdChzcGFjZVBvcyk7Ci0gICAgICAgICAgICBtYXAu
c2V0KGtleSwgdmFsKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBXaW5kb3dGZWF0dXJlczo6cGFy
c2VEaWFsb2dGZWF0dXJlcyhzdHJpbmcsIG1hcCk7CiB9CiAKLWJvb2wgRE9NV2luZG93OjphbGxv
d1BvcFVwKEZyYW1lKiBhY3RpdmVGcmFtZSkKK2Jvb2wgRE9NV2luZG93OjphbGxvd1BvcFVwKEZy
YW1lKiBmaXJzdEZyYW1lKQogewotICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7Ci0gICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gYWN0aXZlRnJhbWUtPnNldHRpbmdzKCk7CisgICAgQVNTRVJUKGZpcnN0
RnJhbWUpOworCisgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZp
cnN0RnJhbWUtPnNldHRpbmdzKCk7CiAgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzLT5q
YXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7CiB9CiAKK2Jvb2wgRE9NV2lu
ZG93OjphbGxvd1BvcFVwKCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZSAmJiBhbGxvd1BvcFVwKG1f
ZnJhbWUpOworfQorCiBib29sIERPTVdpbmRvdzo6Y2FuU2hvd01vZGFsRGlhbG9nKGNvbnN0IEZy
YW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtMTYxOCwzNCArMTYwOCwyOSBAQCB2
b2lkIERPTVdpbmRvdzo6cmV2b2tlT2JqZWN0VVJMKGNvbnN0IFN0CiB9CiAjZW5kaWYKIAotdm9p
ZCBET01XaW5kb3c6OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgbG9jYXRpb24sIERPTVdpbmRv
dyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQordm9pZCBET01XaW5kb3c6
OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBET01XaW5kb3cqIGFjdGl2ZVdp
bmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdykKIHsKICAgICBGcmFtZSogYWN0aXZlRnJhbWUg
PSBhY3RpdmVXaW5kb3ctPmZyYW1lKCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKICAgICAgICAg
cmV0dXJuOworCiAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2
aWdhdGlvbihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZpcnN0RnJh
bWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZpcnN0RnJhbWUpCiAgICAgICAg
IHJldHVybjsKLSAgICBLVVJMIGxvY2F0aW9uVVJMID0gZmlyc3RGcmFtZS0+bG9hZGVyKCktPmNv
bXBsZXRlVVJMKGxvY2F0aW9uKTsKLSAgICBpZiAobG9jYXRpb25VUkwuaXNOdWxsKCkpCisKKyAg
ICBLVVJMIGNvbXBsZXRlZFVSTCA9IGZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybFN0cmluZyk7CisgICAgaWYgKGNvbXBsZXRlZFVSTC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGxvY2F0aW9uVVJMKSkgewotICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlcmUgc29tZSB3YXkgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZv
ciBhIHNlcGFyYXRlICJhY3RpdmVXaW5kb3cgIT0gdGhpcyIgY2hlY2s/Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGUgbmFtZSBjYW5BY2Nlc3Mgc2VlbXMgdG8gYmUgYSByb3VuZGFib3V0IHdheSB0byBh
c2sgImNhbiBleGVjdXRlIHNjcmlwdCIuCi0gICAgICAgIC8vIENhbiB3ZSBuYW1lIHRoZSBTZWN1
cml0eU9yaWdpbiBmdW5jdGlvbiBiZXR0ZXIgdG8gbWFrZSB0aGlzIG1vcmUgY2xlYXI/Ci0gICAg
ICAgIGlmIChhY3RpdmVXaW5kb3cgIT0gdGhpcyAmJiAhYWN0aXZlV2luZG93LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5BY2Nlc3Moc2VjdXJpdHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIHByaW50
RXJyb3JNZXNzYWdlKGNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZVdpbmRvdykp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChpc0luc2Vj
dXJlU2NyaXB0QWNjZXNzKGFjdGl2ZVdpbmRvdywgdXJsU3RyaW5nKSkKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgd2UgYXJlIHByb2Nlc3Np
bmcgYSB1c2VyIGdlc3R1cmUuCiAgICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLAotICAgICAgICBsb2NhdGlvblVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCksCisgICAgICAgIGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCksCiAgICAgICAgICFhY3RpdmVGcmFtZS0+c2NyaXB0KCkt
PmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CiB9CiAKQEAgLTE2Nzcs
NCArMTY2MiwxNjAgQEAgU3RyaW5nIERPTVdpbmRvdzo6Y3Jvc3NEb21haW5BY2Nlc3NFcnJvcgog
ICAgICAgICAiIGZyb20gZnJhbWUgd2l0aCBVUkwgIiwgYWN0aXZlV2luZG93VVJMLnN0cmluZygp
LCAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0Y2guXG4iKTsKIH0KIAor
Ym9vbCBET01XaW5kb3c6OmlzSW5zZWN1cmVTY3JpcHRBY2Nlc3MoRE9NV2luZG93KiBhY3RpdmVX
aW5kb3csIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIGlmICghcHJvdG9jb2xJc0ph
dmFTY3JpcHQodXJsU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklY
TUU6IElzIHRoZXJlIHNvbWUgd2F5IHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgYSBzZXBhcmF0
ZSAiYWN0aXZlV2luZG93ID09IHRoaXMiIGNoZWNrPworICAgIGlmIChhY3RpdmVXaW5kb3cgPT0g
dGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoZSBuYW1lIGNh
bkFjY2VzcyBzZWVtcyB0byBiZSBhIHJvdW5kYWJvdXQgd2F5IHRvIGFzayAiY2FuIGV4ZWN1dGUg
c2NyaXB0Ii4KKyAgICAvLyBDYW4gd2UgbmFtZSB0aGUgU2VjdXJpdHlPcmlnaW4gZnVuY3Rpb24g
YmV0dGVyIHRvIG1ha2UgdGhpcyBtb3JlIGNsZWFyPworICAgIGlmIChhY3RpdmVXaW5kb3ctPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcHJpbnRFcnJvck1lc3NhZ2UoY3Jvc3NEb21haW5BY2Nlc3NFcnJv
ck1lc3NhZ2UoYWN0aXZlV2luZG93KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZyYW1lKiBE
T01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRv
bWljU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJl
cywKKyAgICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRnJhbWUqIGZpcnN0RnJhbWUsIEZyYW1l
KiBvcGVuZXJGcmFtZSwgUHJlcGFyZURpYWxvZ0Z1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBmdW5j
dGlvbkNvbnRleHQpCit7CisgICAgQVNTRVJUKGZpcnN0RnJhbWUpOworCisgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVz
ZXMgdGhlIGR5bmFtaWNHbG9iYWxPYmplY3QgdG8gZGV0ZXJtaW5lCisgICAgLy8gdGhlIG91dGdv
aW5nUmVmZXJyZXIuIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCisgICAgU3RyaW5n
IHJlZmVycmVyID0gZmlyc3RGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CisgICAgRnJhbWVMb2FkZXI6OmFk
ZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBmaXJzdEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29p
bmdPcmlnaW4oKSk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QoYWN0aXZlV2lu
ZG93LT5zZWN1cml0eU9yaWdpbigpLCByZXF1ZXN0LCBmcmFtZU5hbWUpOworCisgICAgLy8gRklY
TUU6IEl0J3MgbXVjaCBiZXR0ZXIgZm9yIGNsaWVudCBBUEkgaWYgYSBuZXcgd2luZG93IHN0YXJ0
cyB3aXRoIGEgVVJMLCBoZXJlIHdoZXJlIHdlCisgICAgLy8ga25vdyB3aGF0IFVSTCB3ZSBhcmUg
Z29pbmcgdG8gb3Blbi4gVW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhc3NlcyB0aGUgZW1wdHkg
c3RyaW5nCisgICAgLy8gZm9yIHRoZSBVUkwsIGJ1dCB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGF0
LiBCZWZvcmUgbG9hZGluZyB3ZSBoYXZlIHRvIHNldCB1cCB0aGUgb3BlbmVyLAorICAgIC8vIG9w
ZW5lZEJ5RE9NLCBhbmQgZGlhbG9nQXJndW1lbnRzIHZhbHVlcy4gQWxzbywgdG8gZGVjaWRlIHdo
ZXRoZXIgdG8gdXNlIHRoZSBVUkwgd2UgY3VycmVudGx5CisgICAgLy8gZG8gYW4gYWxsb3dzQWNj
ZXNzRnJvbSBjYWxsIHVzaW5nIHRoZSB3aW5kb3cgd2UgY3JlYXRlLCB3aGljaCBjYW4ndCBiZSBk
b25lIGJlZm9yZSBjcmVhdGluZyBpdC4KKyAgICAvLyBXZSdkIGhhdmUgdG8gcmVzb2x2ZSBhbGwg
dGhvc2UgaXNzdWVzIHRvIHBhc3MgdGhlIFVSTCBpbnN0ZWFkIG9mICIiLgorCisgICAgRnJhbWUq
IGFjdGl2ZUZyYW1lID0gYWN0aXZlV2luZG93LT5mcmFtZSgpOworCisgICAgYm9vbCBjcmVhdGVk
OworICAgIC8vIFdlIHBhc3MgdGhlIG9wZW5lciBmcmFtZSBmb3IgdGhlIGxvb2t1cEZyYW1lIGlu
IGNhc2UgdGhlIGFjdGl2ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbQorICAgIC8vIHRoZSBvcGVu
ZXIgZnJhbWUsIGFuZCB0aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUgcmVsYXRpdmUgdG8gdGhl
IG9wZW5lciBmcmFtZS4KKyAgICBGcmFtZSogbmV3RnJhbWUgPSBXZWJDb3JlOjpjcmVhdGVXaW5k
b3coYWN0aXZlRnJhbWUsIG9wZW5lckZyYW1lLCBmcmFtZVJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVz
LCBjcmVhdGVkKTsKKyAgICBpZiAoIW5ld0ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKG9wZW5lckZyYW1lKTsKKyAgICBuZXdGcmFt
ZS0+cGFnZSgpLT5zZXRPcGVuZWRCeURPTSgpOworCisgICAgaWYgKG5ld0ZyYW1lLT5kb21XaW5k
b3coKS0+aXNJbnNlY3VyZVNjcmlwdEFjY2VzcyhhY3RpdmVXaW5kb3csIHVybFN0cmluZykpCisg
ICAgICAgIHJldHVybiBuZXdGcmFtZTsKKworICAgIGlmIChmdW5jdGlvbikKKyAgICAgICAgZnVu
Y3Rpb24obmV3RnJhbWUtPmRvbVdpbmRvdygpLCBmdW5jdGlvbkNvbnRleHQpOworCisgICAgS1VS
TCBjb21wbGV0ZWRVUkwgPSB1cmxTdHJpbmcuaXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxTdHJp
bmcsICIiKSA6IGZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7
CisKKyAgICBpZiAoY3JlYXRlZCkKKyAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VM
b2NhdGlvbihhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTCwgcmVm
ZXJyZXIsIGZhbHNlLCBmYWxzZSk7CisgICAgZWxzZSBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbmV3RnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2Nh
dGlvbkNoYW5nZShhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTC5z
dHJpbmcoKSwgcmVmZXJyZXIsCisgICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5h
bnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgIH0KKworICAgIHJl
dHVybiBuZXdGcmFtZTsKK30KKworUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3Bl
bihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUs
IGNvbnN0IFN0cmluZyYgd2luZG93RmVhdHVyZXNTdHJpbmcsCisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBhY3RpdmVXaW5kb3ct
PmZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
RnJhbWUqIGZpcnN0RnJhbWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZpcnN0
RnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFmaXJzdFdpbmRvdy0+YWxsb3dQ
b3BVcCgpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVlOjpmaW5kKCkgcmV0dXJucyB0
cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrIGZvciBlbXB0eSBmcmFtZSBuYW1l
cy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbGxlZ2l0aW1hdGUgd2luZG93Lm9wZW4oKSBjYWxs
cyB3aXRoIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIu
CisgICAgICAgIGlmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFtX2ZyYW1lLT50cmVlKCktPmZp
bmQoZnJhbWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEdl
dCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBfdG9wIGFuZCBfcGFy
ZW50LgorICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBzY2hlZHVsZSBhIGxvY2F0aW9uIGNoYW5n
ZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSAw
OworICAgIGlmIChmcmFtZU5hbWUgPT0gIl90b3AiKQorICAgICAgICB0YXJnZXRGcmFtZSA9IG1f
ZnJhbWUtPnRyZWUoKS0+dG9wKCk7CisgICAgZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50
IikgeworICAgICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpCisgICAgICAgICAgICB0YXJnZXRGcmFtZSA9IHBhcmVudDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGFyZ2V0RnJhbWUgPSBtX2ZyYW1lOworICAgIH0KKyAgICBpZiAodGFyZ2V0RnJh
bWUpIHsKKyAgICAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2
aWdhdGlvbih0YXJnZXRGcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBp
ZiAoaXNJbnNlY3VyZVNjcmlwdEFjY2VzcyhhY3RpdmVXaW5kb3csIHVybFN0cmluZykpCisgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0RnJhbWUtPmRvbVdpbmRvdygpOworCisgICAgICAgIGlmICh1
cmxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZyYW1lLT5kb21X
aW5kb3coKTsKKworICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMg
dGhlIGZpcnN0IHdpbmRvdyByYXRoZXIgdGhhbiB0aGUgYWN0aXZlIHdpbmRvdyB0bworICAgICAg
ICAvLyBkZXRlcm1pbmUgdGhlIG91dGdvaW5nIHJlZmVycmVyLiBXZSByZXBsaWNhdGUgdGhhdCBi
ZWhhdmlvciBoZXJlLgorICAgICAgICB0YXJnZXRGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigp
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLAorICAgICAgICAgICAgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsU3RyaW5nKS5zdHJpbmcoKSwKKyAgICAgICAgICAgIGZpcnN0RnJhbWUtPmxvYWRlcigp
LT5vdXRnb2luZ1JlZmVycmVyKCksCisgICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgp
LT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworCisgICAgICAgIHJl
dHVybiB0YXJnZXRGcmFtZS0+ZG9tV2luZG93KCk7CisgICAgfQorCisgICAgV2luZG93RmVhdHVy
ZXMgd2luZG93RmVhdHVyZXMod2luZG93RmVhdHVyZXNTdHJpbmcpOworICAgIEZsb2F0UmVjdCB3
aW5kb3dSZWN0KHdpbmRvd0ZlYXR1cmVzLnhTZXQgPyB3aW5kb3dGZWF0dXJlcy54IDogMCwgd2lu
ZG93RmVhdHVyZXMueVNldCA/IHdpbmRvd0ZlYXR1cmVzLnkgOiAwLAorICAgICAgICB3aW5kb3dG
ZWF0dXJlcy53aWR0aFNldCA/IHdpbmRvd0ZlYXR1cmVzLndpZHRoIDogMCwgd2luZG93RmVhdHVy
ZXMuaGVpZ2h0U2V0ID8gd2luZG93RmVhdHVyZXMuaGVpZ2h0IDogMCk7CisgICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2Ny
ZWVuQXZhaWxhYmxlUmVjdChwYWdlID8gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSA6IDApLCB3
aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKKyAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVj
dC54KCk7CisgICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOworICAgIHdpbmRv
d0ZlYXR1cmVzLmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgd2luZG93RmVhdHVy
ZXMud2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7CisKKyAgICBGcmFtZSogcmVzdWx0ID0gY3Jl
YXRlV2luZG93KHVybFN0cmluZywgZnJhbWVOYW1lLCB3aW5kb3dGZWF0dXJlcywgYWN0aXZlV2lu
ZG93LCBmaXJzdEZyYW1lLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LT5k
b21XaW5kb3coKSA6IDA7Cit9CisKK3ZvaWQgRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcs
CisgICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3csIFBy
ZXBhcmVEaWFsb2dGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZnVuY3Rpb25Db250ZXh0KQorewor
ICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lKiBhY3RpdmVGcmFt
ZSA9IGFjdGl2ZVdpbmRvdy0+ZnJhbWUoKTsKKyAgICBpZiAoIWFjdGl2ZUZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZpcnN0RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY2FuU2hv
d01vZGFsRGlhbG9nTm93KG1fZnJhbWUpIHx8ICFmaXJzdFdpbmRvdy0+YWxsb3dQb3BVcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZGlhbG9nRnJhbWUgPSBjcmVhdGVXaW5kb3co
dXJsU3RyaW5nLCBlbXB0eUF0b20sIFdpbmRvd0ZlYXR1cmVzKGRpYWxvZ0ZlYXR1cmVzU3RyaW5n
LCBzY3JlZW5BdmFpbGFibGVSZWN0KG1fZnJhbWUtPnZpZXcoKSkpLAorICAgICAgICBhY3RpdmVX
aW5kb3csIGZpcnN0RnJhbWUsIG1fZnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkNvbnRleHQpOwor
ICAgIGlmICghZGlhbG9nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGRpYWxvZ0ZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5ydW5Nb2RhbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCShyZXZpc2lvbiA3MzY2MCkKKysrIFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywzNSArMjcs
MjYgQEAKICNpZm5kZWYgRE9NV2luZG93X2gKICNkZWZpbmUgRE9NV2luZG93X2gKIAotI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQmFySW5mbzsK
LSAgICBjbGFzcyBCZWZvcmVVbmxvYWRFdmVudDsKICAgICBjbGFzcyBCbG9iOwogICAgIGNsYXNz
IENTU1J1bGVMaXN0OwogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAgICAgY2xhc3Mg
Q29uc29sZTsKKyAgICBjbGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwogICAgIGNsYXNzIERPTVNl
bGVjdGlvbjsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFzcyBEYXRhYmFzZUNhbGxiYWNr
OwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRXJy
b3JDYWxsYmFjazsKLSAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwog
ICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKICAgICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAg
Y2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeTsKICAgICBjbGFzcyBJREJGYWN0b3J5Owog
ICAgIGNsYXNzIExvY2F0aW9uOwpAQCAtNjMsMjUgKzU0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBOYXZpZ2F0b3I7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBOb3Rp
ZmljYXRpb25DZW50ZXI7Ci0gICAgY2xhc3MgU3R5bGVNZWRpYTsKLQotI2lmIEVOQUJMRShXRUJf
VElNSU5HKQogICAgIGNsYXNzIFBlcmZvcm1hbmNlOwotI2VuZGlmCi0KICAgICBjbGFzcyBQb3N0
TWVzc2FnZVRpbWVyOwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKLSAgICBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CiAgICAgY2xhc3MgU2NyZWVuOwotICAgIGNsYXNzIFdlYktpdFBv
aW50OwotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKICAgICBjbGFzcyBTdG9yYWdlOwotI2VuZGlmCisgICAgY2xhc3MgU3R5bGVNZWRp
YTsKKyAgICBjbGFzcyBXZWJLaXRQb2ludDsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCi0gICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKLSNlbmRpZgorICAgIHN0
cnVjdCBXaW5kb3dGZWF0dXJlczsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
QEAgLTEwMCwxMyArODIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gbWF0Y2hNZWRpYShjb25zdCBTdHJpbmcmKTsKIAotI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGludGVyZmFj
ZSBvcmllbnRhdGlvbiBpbiBkZWdyZWVzLiBTb21lIGV4YW1wbGVzIGFyZToKLSAgICAgICAgLy8g
IDAgaXMgc3RyYWlnaHQgdXA7IC05MCBpcyB3aGVuIHRoZSBkZXZpY2UgaXMgcm90YXRlZCA5MCBj
bG9ja3dpc2U7Ci0gICAgICAgIC8vICA5MCBpcyB3aGVuIHJvdGF0ZWQgY291bnRlciBjbG9ja3dp
c2UuCi0gICAgICAgIGludCBvcmllbnRhdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KICAgICAgICAg
dm9pZCBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pIHsg
bV9zZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOyB9CiAgICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0
KCk7IH0KIApAQCAtMTE5LDEzICs5NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cygpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGFkanVzdFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW4sIEZs
b2F0UmVjdCYgd2luZG93LCBjb25zdCBGbG9hdFJlY3QmIHBlbmRpbmdDaGFuZ2VzKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVh
dHVyZXNBcmcsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBtYXApOwogCi0gICAgICAgIHN0YXRp
YyBib29sIGFsbG93UG9wVXAoRnJhbWUqIGFjdGl2ZUZyYW1lKTsKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNhbiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBj
aGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCisgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlTW9kYWxE
aWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOwor
CisgICAgICAgIGJvb2wgYWxsb3dQb3BVcCgpOyAvLyBDYWxsIG9uIGZpcnN0IHdpbmRvdywgbm90
IHRhcmdldCB3aW5kb3cuCisgICAgICAgIHN0YXRpYyBib29sIGFsbG93UG9wVXAoRnJhbWUqIGZp
cnN0RnJhbWUpOwogICAgICAgICBzdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2coY29uc3Qg
RnJhbWUqKTsKICAgICAgICAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0
IEZyYW1lKik7CiAKICAgICAgICAgLy8gRE9NIExldmVsIDAKKwogICAgICAgICBTY3JlZW4qIHNj
cmVlbigpIGNvbnN0OwogICAgICAgICBIaXN0b3J5KiBoaXN0b3J5KCkgY29uc3Q7CiAgICAgICAg
IEJhckluZm8qIGxvY2F0aW9uYmFyKCkgY29uc3Q7CkBAIC0xMzYsMTEgKzExNSw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogdG9vbGJhcigpIGNvbnN0OwogICAgICAg
ICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OwogICAgICAgICBOYXZpZ2F0b3IqIGNsaWVu
dEluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF2aWdhdG9yKCk7IH0KLSNpZiBFTkFCTEUo
V0VCX1RJTUlORykKLSAgICAgICAgUGVyZm9ybWFuY2UqIHdlYmtpdFBlcmZvcm1hbmNlKCkgY29u
c3Q7Ci0jZW5kaWYKLSAgICAgICAgTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CiAKKyAgICAg
ICAgTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0TG9jYXRpb24o
Y29uc3QgU3RyaW5nJiBsb2NhdGlvbiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRv
dyogZmlyc3RXaW5kb3cpOwogCiAgICAgICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCk7
CkBAIC0xNTMsNiArMTI5LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBw
cmludCgpOwogICAgICAgICB2b2lkIHN0b3AoKTsKIAorICAgICAgICBQYXNzUmVmUHRyPERPTVdp
bmRvdz4gb3Blbihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBm
cmFtZU5hbWUsIGNvbnN0IFN0cmluZyYgd2luZG93RmVhdHVyZXNTdHJpbmcsCisgICAgICAgICAg
ICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdyk7CisKKyAg
ICAgICAgdHlwZWRlZiB2b2lkIFByZXBhcmVEaWFsb2dGdW5jdGlvbihET01XaW5kb3cqLCB2b2lk
KiBjb250ZXh0KTsKKyAgICAgICAgdm9pZCBzaG93TW9kYWxEaWFsb2coY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcsCisgICAgICAgICAg
ICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdywgUHJlcGFy
ZURpYWxvZ0Z1bmN0aW9uLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOworCiAgICAgICAgIHZvaWQg
YWxlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICAgICAgYm9vbCBjb25maXJtKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgICAgIFN0cmluZyBwcm9tcHQoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSk7CkBAIC0xODcsMTEgKzE3MCwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0cmlu
ZyYpOwogICAgICAgICBTdHJpbmcgZGVmYXVsdFN0YXR1cygpIGNvbnN0OwogICAgICAgICB2b2lk
IHNldERlZmF1bHRTdGF0dXMoY29uc3QgU3RyaW5nJik7CisKICAgICAgICAgLy8gVGhpcyBhdHRy
aWJ1dGUgaXMgYW4gYWxpYXMgb2YgZGVmYXVsdFN0YXR1cyBhbmQgaXMgbmVjZXNzYXJ5IGZvciBs
ZWdhY3kgdXNlcy4KICAgICAgICAgU3RyaW5nIGRlZmF1bHRzdGF0dXMoKSBjb25zdCB7IHJldHVy
biBkZWZhdWx0U3RhdHVzKCk7IH0KICAgICAgICAgdm9pZCBzZXREZWZhdWx0c3RhdHVzKGNvbnN0
IFN0cmluZyYgc3RhdHVzKSB7IHNldERlZmF1bHRTdGF0dXMoc3RhdHVzKTsgfQogCi0gICAgICAg
IC8vIFNlbGYgcmVmZXJlbnRpYWwgYXR0cmlidXRlcworICAgICAgICAvLyBTZWxmLXJlZmVyZW50
aWFsIGF0dHJpYnV0ZXMKKwogICAgICAgICBET01XaW5kb3cqIHNlbGYoKSBjb25zdDsKICAgICAg
ICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBzZWxmKCk7IH0KICAgICAgICAg
RE9NV2luZG93KiBmcmFtZXMoKSBjb25zdCB7IHJldHVybiBzZWxmKCk7IH0KQEAgLTIwMSw1OSAr
MTg2LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRE9NV2luZG93KiB0b3AoKSBj
b25zdDsKIAogICAgICAgICAvLyBET00gTGV2ZWwgMiBBYnN0cmFjdFZpZXcgSW50ZXJmYWNlCisK
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKICAgICAgICAgLy8gQ1NTT00g
VmlldyBNb2R1bGUKKwogICAgICAgICBQYXNzUmVmUHRyPFN0eWxlTWVkaWE+IHN0eWxlTWVkaWEo
KSBjb25zdDsKIAogICAgICAgICAvLyBET00gTGV2ZWwgMiBTdHlsZSBJbnRlcmZhY2UKKwogICAg
ICAgICBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IGdldENvbXB1dGVkU3R5bGUoRWxl
bWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KSBjb25zdDsKIAogICAgICAgICAvLyBXZWJL
aXQgZXh0ZW5zaW9ucworCiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1hdGNo
ZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0aG9y
T25seSA9IHRydWUpIGNvbnN0OwogICAgICAgICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygpIGNv
bnN0OwogCi0gICAgICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IHdlYmtpdENvbnZlcnRQb2lu
dEZyb21QYWdlVG9Ob2RlKE5vZGUqIG5vZGUsIGNvbnN0IFdlYktpdFBvaW50KiBwKSBjb25zdDsK
LSAgICAgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gd2Via2l0Q29udmVydFBvaW50RnJvbU5v
ZGVUb1BhZ2UoTm9kZSogbm9kZSwgY29uc3QgV2ViS2l0UG9pbnQqIHApIGNvbnN0OyAgICAgICAg
Ci0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIC8vIEhUTUwgNSBjbGllbnQtc2lkZSBk
YXRhYmFzZQotICAgICAgICBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgLy8gSFRNTCA1IGtleS92YWx1ZSBzdG9yYWdl
Ci0gICAgICAgIFN0b3JhZ2UqIHNlc3Npb25TdG9yYWdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
LSAgICAgICAgU3RvcmFnZSogbG9jYWxTdG9yYWdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSNl
bmRpZgorICAgICAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB3ZWJraXRDb252ZXJ0UG9pbnRG
cm9tUGFnZVRvTm9kZShOb2RlKiwgY29uc3QgV2ViS2l0UG9pbnQqKSBjb25zdDsKKyAgICAgICAg
UGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1BhZ2Uo
Tm9kZSosIGNvbnN0IFdlYktpdFBvaW50KikgY29uc3Q7ICAgICAgICAKIAogICAgICAgICBDb25z
b2xlKiBjb25zb2xlKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZShj
b25zdCBTdHJpbmcmKTsKICAgICAgICAgU3RyaW5nIGNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNz
YWdlKERPTVdpbmRvdyogYWN0aXZlV2luZG93KTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpCi0gICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uQ2Fj
aGUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgICAg
IE5vdGlmaWNhdGlvbkNlbnRlciogd2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OwotI2VuZGlm
Ci0KICAgICAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCk7CiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLSAgICAgICAgSURCRmFjdG9yeSogd2Via2l0SW5kZXhlZERCKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICAgICAgLy8gVGhleSBhcmUgcGxh
Y2VkIGhlcmUgYW5kIGluIGFsbCBjYXBpdGFsIGxldHRlcnMgdG8gZW5mb3JjZSBjb21waWxlLXRp
bWUgZW51bSBjaGVja2luZy4KLSAgICAgICAgZW51bSBGaWxlU3lzdGVtVHlwZSB7Ci0gICAgICAg
ICAgICBURU1QT1JBUlksCi0gICAgICAgICAgICBQRVJTSVNURU5ULAotICAgICAgICB9OwotICAg
ICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwgUGFz
c1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsK
LSNlbmRpZgotCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IG1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBjb25zdCBTdHJp
bmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBPYmpDIGJpbmRp
bmdzIChidWcgIzI4Nzc0KS4KICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBjb25zdCBTdHJpbmcm
IHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTM1
MiwzMyArMzEwLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRiZWdpbmZ1bGxzY3JlZW4pOwogICAgICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGVuZGZ1bGxzY3JlZW4pOwogCi0jaWYg
RU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihvcmllbnRhdGlvbmNoYW5nZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShERVZJ
Q0VfT1JJRU5UQVRJT04pCi0gICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIo
ZGV2aWNlbW90aW9uKTsKLSAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihk
ZXZpY2VvcmllbnRhdGlvbik7Ci0jZW5kaWYKLQogICAgICAgICBERUZJTkVfTUFQUEVEX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRhbmltYXRpb25zdGFydCwgd2Via2l0QW5pbWF0aW9u
U3RhcnQpOwogICAgICAgICBERUZJTkVfTUFQUEVEX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3
ZWJraXRhbmltYXRpb25pdGVyYXRpb24sIHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbik7CiAgICAg
ICAgIERFRklORV9NQVBQRURfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGFuaW1hdGlv
bmVuZCwgd2Via2l0QW5pbWF0aW9uRW5kKTsKICAgICAgICAgREVGSU5FX01BUFBFRF9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIod2Via2l0dHJhbnNpdGlvbmVuZCwgd2Via2l0VHJhbnNpdGlvbkVu
ZCk7CiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHRvdWNoc3RhcnQpOwotICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VW
RU5UX0xJU1RFTkVSKHRvdWNobW92ZSk7Ci0gICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIodG91Y2hlbmQpOwotICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RF
TkVSKHRvdWNoY2FuY2VsKTsKLSNlbmRpZgogICAgICAgICB2b2lkIGNhcHR1cmVFdmVudHMoKTsK
ICAgICAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKICAgICAgICAgdm9pZCBmaW5pc2hlZExv
YWRpbmcoKTsKIAotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBHQyBtYXJr
aW5nLiBTZWUgSlNET01XaW5kb3c6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpbgotICAgICAg
ICAvLyBKU0RPTVdpbmRvd0N1c3RvbS5jcHAuCisgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgdXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTRE9NV2luZG93OjptYXJrQ2hpbGRyZW4oTWFy
a1N0YWNrJikgaW4gSlNET01XaW5kb3dDdXN0b20uY3BwLgogICAgICAgICBTY3JlZW4qIG9wdGlv
bmFsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW4uZ2V0KCk7IH0KICAgICAgICAgRE9N
U2VsZWN0aW9uKiBvcHRpb25hbFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9u
LmdldCgpOyB9CiAgICAgICAgIEhpc3RvcnkqIG9wdGlvbmFsSGlzdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1faGlzdG9yeS5nZXQoKTsgfQpAQCAtMzkwLDI1ICszMzIsNzggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBCYXJJbmZvKiBvcHRpb25hbFRvb2xiYXIoKSBjb25zdCB7IHJldHVy
biBtX3Rvb2xiYXIuZ2V0KCk7IH0KICAgICAgICAgQ29uc29sZSogb3B0aW9uYWxDb25zb2xlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zb2xlLmdldCgpOyB9CiAgICAgICAgIE5hdmlnYXRvciogb3B0
aW9uYWxOYXZpZ2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQotI2lm
IEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBQZXJmb3JtYW5jZSogb3B0aW9uYWxXZWJraXRQ
ZXJmb3JtYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyZm9ybWFuY2UuZ2V0KCk7IH0KLSNlbmRp
ZgogICAgICAgICBMb2NhdGlvbiogb3B0aW9uYWxMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
bG9jYXRpb24uZ2V0KCk7IH0KICAgICAgICAgU3R5bGVNZWRpYSogb3B0aW9uYWxNZWRpYSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWEuZ2V0KCk7IH0KKworICAgICAgICB1c2luZyBSZWZDb3VudGVk
PERPTVdpbmRvdz46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxET01XaW5kb3c+Ojpk
ZXJlZjsKKworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBTdHJpbmcgY3JlYXRlT2JqZWN0VVJM
KEJsb2IqKTsKKyAgICAgICAgdm9pZCByZXZva2VPYmplY3RVUkwoY29uc3QgU3RyaW5nJik7Cisj
ZW5kaWYKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgLy8gSFRNTCA1IGNsaWVudC1z
aWRlIGRhdGFiYXNlCisgICAgICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBk
aXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgor
CisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKKyAgICAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihkZXZpY2Vtb3Rpb24pOworICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKGRldmljZW9yaWVudGF0aW9uKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KERPTV9TVE9SQUdFKQorICAgICAgICAvLyBIVE1MIDUga2V5L3ZhbHVlIHN0b3JhZ2UKKyAgICAg
ICAgU3RvcmFnZSogc2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAg
ICBTdG9yYWdlKiBsb2NhbFN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgICAgICBT
dG9yYWdlKiBvcHRpb25hbFNlc3Npb25TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9u
U3RvcmFnZS5nZXQoKTsgfQogICAgICAgICBTdG9yYWdlKiBvcHRpb25hbExvY2FsU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOyB9CiAjZW5kaWYKKworI2lmIEVO
QUJMRShGSUxFX1NZU1RFTSkKKyAgICAgICAgLy8gVGhleSBhcmUgcGxhY2VkIGhlcmUgYW5kIGlu
IGFsbCBjYXBpdGFsIGxldHRlcnMgc28gdGhleSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBj
b25zdGFudHMgaW4gdGhlCisgICAgICAgIC8vIElETCBhdCBjb21waWxlIHRpbWUuCisgICAgICAg
IGVudW0gRmlsZVN5c3RlbVR5cGUgeworICAgICAgICAgICAgVEVNUE9SQVJZLAorICAgICAgICAg
ICAgUEVSU0lTVEVOVCwKKyAgICAgICAgfTsKKyAgICAgICAgdm9pZCByZXF1ZXN0RmlsZVN5c3Rl
bShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxiYWNr
PiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisjZW5kaWYKKworI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQorICAgICAgICBJREJGYWN0b3J5KiB3ZWJraXRJbmRleGVkREIoKSBjb25z
dDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgICAgIE5vdGlmaWNh
dGlvbkNlbnRlciogd2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OworI2VuZGlmCisKICNpZiBF
TkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBET01BcHBsaWNhdGlvbkNh
Y2hlKiBhcHBsaWNhdGlvbkNhY2hlKCkgY29uc3Q7CiAgICAgICAgIERPTUFwcGxpY2F0aW9uQ2Fj
aGUqIG9wdGlvbmFsQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRp
b25DYWNoZS5nZXQoKTsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKEJMT0IpCi0gICAgICAgIFN0cmlu
ZyBjcmVhdGVPYmplY3RVUkwoQmxvYiopOwotICAgICAgICB2b2lkIHJldm9rZU9iamVjdFVSTChj
b25zdCBTdHJpbmcmKTsKKworI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbiBpbiBkZWdyZWVzLiBTb21lIGV4
YW1wbGVzIGFyZToKKyAgICAgICAgLy8gIDAgaXMgc3RyYWlnaHQgdXA7IC05MCBpcyB3aGVuIHRo
ZSBkZXZpY2UgaXMgcm90YXRlZCA5MCBjbG9ja3dpc2U7CisgICAgICAgIC8vICA5MCBpcyB3aGVu
IHJvdGF0ZWQgY291bnRlciBjbG9ja3dpc2UuCisgICAgICAgIGludCBvcmllbnRhdGlvbigpIGNv
bnN0OworCisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob3JpZW50YXRp
b25jaGFuZ2UpOwogI2VuZGlmCiAKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxET01XaW5kb3c+
OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NV2luZG93Pjo6ZGVyZWY7CisjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUih0b3VjaHN0YXJ0KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uih0b3VjaG1vdmUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHRv
dWNoZW5kKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih0b3VjaGNh
bmNlbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgICAgICBQZXJmb3Jt
YW5jZSogd2Via2l0UGVyZm9ybWFuY2UoKSBjb25zdDsKKyAgICAgICAgUGVyZm9ybWFuY2UqIG9w
dGlvbmFsV2Via2l0UGVyZm9ybWFuY2UoKSBjb25zdCB7IHJldHVybiBtX3BlcmZvcm1hbmNlLmdl
dCgpOyB9CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIERPTVdpbmRvdyhGcmFtZSop
OwpAQCAtNDE4LDYgKzQxMywxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCisgICAgICAgIHN0YXRp
YyBGcmFtZSogY3JlYXRlV2luZG93KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmLAorICAgICAgICAgICAg
RE9NV2luZG93KiBhY3RpdmVXaW5kb3csIEZyYW1lKiBmaXJzdEZyYW1lLCBGcmFtZSogb3BlbmVy
RnJhbWUsCisgICAgICAgICAgICBQcmVwYXJlRGlhbG9nRnVuY3Rpb24gPSAwLCB2b2lkKiBmdW5j
dGlvbkNvbnRleHQgPSAwKTsKKyAgICAgICAgYm9vbCBpc0luc2VjdXJlU2NyaXB0QWNjZXNzKERP
TVdpbmRvdyogYWN0aXZlV2luZG93LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisKICAgICAg
ICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBLVVJM
IG1fdXJsOwogCkBAIC00MzQsMjkgKzQzNCwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIG11dGFibGUgUmVmUHRyPEJhckluZm8+IG1fdG9vbGJhcjsKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8Q29uc29sZT4gbV9jb25zb2xlOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0
b3I+IG1fbmF2aWdhdG9yOwotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxQZXJmb3JtYW5jZT4gbV9wZXJmb3JtYW5jZTsKLSNlbmRpZgogICAgICAgICBtdXRh
YmxlIFJlZlB0cjxMb2NhdGlvbj4gbV9sb2NhdGlvbjsKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U3R5bGVNZWRpYT4gbV9tZWRpYTsKKworICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CisKKyAgICAgICAgU3RyaW5nIG1fc3RhdHVzOworICAgICAgICBTdHJpbmcgbV9k
ZWZhdWx0U3RhdHVzOworCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTdG9yYWdlPiBtX3Nlc3Npb25TdG9yYWdlOwogICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTdG9yYWdlPiBtX2xvY2FsU3RvcmFnZTsKICNlbmRpZgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisgICAgICAgIG11dGFibGUgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFjdG9y
eTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNoZT4gbV9hcHBsaWNhdGlvbkNhY2hl
OwogI2VuZGlmCisKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8Tm90aWZpY2F0aW9uQ2VudGVyPiBtX25vdGlmaWNhdGlvbnM7CiAjZW5kaWYKLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8SURCRmFjdG9y
eT4gbV9pZGJGYWN0b3J5OwotI2VuZGlmCi0KLSAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwogCi0gICAgICAgIFN0cmluZyBtX3N0YXR1czsKLSAgICAgICAgU3RyaW5n
IG1fZGVmYXVsdFN0YXR1czsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8UGVyZm9ybWFuY2U+IG1fcGVyZm9ybWFuY2U7CisjZW5kaWYKICAgICB9OwogCiAg
ICAgaW5saW5lIFN0cmluZyBET01XaW5kb3c6OnN0YXR1cygpIGNvbnN0CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9XaW5k
b3dGZWF0dXJlcy5jcHAJKHJldmlzaW9uIDczNjYwKQorKysgV2ViQ29yZS9wYWdlL1dpbmRvd0Zl
YXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0
IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1KQotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIz
LDE2ICsyMywxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1
cmVzLmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUaG91Z2ggaXNzcGFjZSgpIGNv
bnNpZGVycyBcdCBhbmQgXHYgdG8gYmUgd2hpdGVzcGFjZSwgV2luIElFIGRvZXNuJ3QuCi1zdGF0
aWMgYm9vbCBpc1NlcGFyYXRvcihVQ2hhciBjKQorLy8gVGhvdWdoIGlzc3BhY2UoKSBjb25zaWRl
cnMgXHQgYW5kIFx2IHRvIGJlIHdoaXRlc3BhY2UsIFdpbiBJRSBkb2Vzbid0IHdoZW4gcGFyc2lu
ZyB3aW5kb3cgZmVhdHVyZXMuCitzdGF0aWMgYm9vbCBpc1dpbmRvd0ZlYXR1cmVzU2VwYXJhdG9y
KFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdc
bicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJz0nIHx8IGMgPT0gJywnIHx8IGMgPT0gJ1wwJzsKIH0K
QEAgLTgwLDcgKzgwLDcgQEAgV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0IFN0
cgogICAgIFN0cmluZyBidWZmZXIgPSBmZWF0dXJlcy5sb3dlcigpOwogICAgIHdoaWxlIChpIDwg
bGVuZ3RoKSB7CiAgICAgICAgIC8vIHNraXAgdG8gZmlyc3Qgbm9uLXNlcGFyYXRvciwgYnV0IGRv
bid0IHNraXAgcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKLSAgICAgICAgd2hpbGUgKGlzU2Vw
YXJhdG9yKGJ1ZmZlcltpXSkpIHsKKyAgICAgICAgd2hpbGUgKGlzV2luZG93RmVhdHVyZXNTZXBh
cmF0b3IoYnVmZmVyW2ldKSkgewogICAgICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwpAQCAtODgsNyArODgsNyBAQCBXaW5k
b3dGZWF0dXJlczo6V2luZG93RmVhdHVyZXMoY29uc3QgU3RyCiAgICAgICAgIGtleUJlZ2luID0g
aTsKIAogICAgICAgICAvLyBza2lwIHRvIGZpcnN0IHNlcGFyYXRvcgotICAgICAgICB3aGlsZSAo
IWlzU2VwYXJhdG9yKGJ1ZmZlcltpXSkpCisgICAgICAgIHdoaWxlICghaXNXaW5kb3dGZWF0dXJl
c1NlcGFyYXRvcihidWZmZXJbaV0pKQogICAgICAgICAgICAgaSsrOwogICAgICAgICBrZXlFbmQg
PSBpOwogCkBAIC0xMDAsNyArMTAwLDcgQEAgV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVz
KGNvbnN0IFN0cgogICAgICAgICB9CiAKICAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBub24tc2Vw
YXJhdG9yLCBidXQgZG9uJ3Qgc2tpcCBwYXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZwotICAgICAgICB3aGlsZSAoaXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkgeworICAgICAgICB3aGls
ZSAoaXNXaW5kb3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7CiAgICAgICAgICAgICBp
ZiAoYnVmZmVyW2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGkrKzsKQEAgLTEwOCw3ICsxMDgsNyBAQCBXaW5kb3dGZWF0dXJlczo6
V2luZG93RmVhdHVyZXMoY29uc3QgU3RyCiAgICAgICAgIHZhbHVlQmVnaW4gPSBpOwogCiAgICAg
ICAgIC8vIHNraXAgdG8gZmlyc3Qgc2VwYXJhdG9yCi0gICAgICAgIHdoaWxlICghaXNTZXBhcmF0
b3IoYnVmZmVyW2ldKSkKKyAgICAgICAgd2hpbGUgKCFpc1dpbmRvd0ZlYXR1cmVzU2VwYXJhdG9y
KGJ1ZmZlcltpXSkpCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIHZhbHVlRW5kID0gaTsKIApA
QCAtMTI1LDEyICsxMjUsMTQgQEAgdm9pZCBXaW5kb3dGZWF0dXJlczo6c2V0V2luZG93RmVhdHVy
ZShjbwogICAgIGludCB2YWx1ZTsKIAogICAgIC8vIExpc3RpbmcgYSBrZXkgd2l0aCBubyB2YWx1
ZSBpcyBzaG9ydGhhbmQgZm9yIGtleT15ZXMKLSAgICBpZiAodmFsdWVTdHJpbmcubGVuZ3RoKCkg
PT0gMCB8fCB2YWx1ZVN0cmluZyA9PSAieWVzIikKKyAgICBpZiAodmFsdWVTdHJpbmcuaXNFbXB0
eSgpIHx8IHZhbHVlU3RyaW5nID09ICJ5ZXMiKQogICAgICAgICB2YWx1ZSA9IDE7CiAgICAgZWxz
ZQogICAgICAgICB2YWx1ZSA9IHZhbHVlU3RyaW5nLnRvSW50KCk7CiAKLSAgICAvLyBXZSBpZ25v
cmUgYSBrZXlTdHJpbmcgb2YgInJlc2l6YWJsZSIsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0aCBG
aXJlZm94LgorICAgIC8vIFdlIHRyZWF0IGtleVN0cmluZyBvZiAicmVzaXphYmxlIiBoZXJlIGFz
IGFuIGFkZGl0aW9uYWwgZmVhdHVyZSByYXRoZXIgdGhhbiBzZXR0aW5nIHJlc2l6ZWFibGUgdG8g
dHJ1ZS4KKyAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBGaXJlZm94LCBidXQgY291bGQg
YWxzbyBiZSBoYW5kbGVkIGF0IGFub3RoZXIgbGV2ZWwuCisKICAgICBpZiAoa2V5U3RyaW5nID09
ICJsZWZ0IiB8fCBrZXlTdHJpbmcgPT0gInNjcmVlbngiKSB7CiAgICAgICAgIHhTZXQgPSB0cnVl
OwogICAgICAgICB4ID0gdmFsdWU7CkBAIC0xNTksMzIgKzE2MSwxMDYgQEAgdm9pZCBXaW5kb3dG
ZWF0dXJlczo6c2V0V2luZG93RmVhdHVyZShjbwogICAgICAgICBhZGRpdGlvbmFsRmVhdHVyZXMu
YXBwZW5kKGtleVN0cmluZyk7CiB9CiAKLWJvb2wgV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJl
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmZWF0dXJlcywgY29uc3QgY2hhcioga2V5
LCBib29sIGRlZmF1bHRWYWx1ZSkKK1dpbmRvd0ZlYXR1cmVzOjpXaW5kb3dGZWF0dXJlcyhjb25z
dCBTdHJpbmcmIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBjb25zdCBGbG9hdFJlY3QmIHNjcmVlbkF2
YWlsYWJsZVJlY3QpCisgICAgOiB3aWR0aFNldCh0cnVlKQorICAgICwgaGVpZ2h0U2V0KHRydWUp
CisgICAgLCBtZW51QmFyVmlzaWJsZShmYWxzZSkKKyAgICAsIHRvb2xCYXJWaXNpYmxlKGZhbHNl
KQorICAgICwgbG9jYXRpb25CYXJWaXNpYmxlKGZhbHNlKQorICAgICwgZnVsbHNjcmVlbihmYWxz
ZSkKKyAgICAsIGRpYWxvZyh0cnVlKQogewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKKyAgICBEaWFsb2dGZWF0dXJl
c01hcCBmZWF0dXJlczsKKyAgICBwYXJzZURpYWxvZ0ZlYXR1cmVzKGRpYWxvZ0ZlYXR1cmVzU3Ry
aW5nLCBmZWF0dXJlcyk7CisKKyAgICBjb25zdCBib29sIHRydXN0ZWQgPSBmYWxzZTsKKworICAg
IC8vIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBNaWNyb3NvZnQncyBkb2N1bWVudGF0aW9u
IGFyZSBub3QgaW1wbGVtZW50ZWQ6CisgICAgLy8gLSBkZWZhdWx0IGZvbnQgc2V0dGluZ3MKKyAg
ICAvLyAtIHdpZHRoLCBoZWlnaHQsIGxlZnQsIGFuZCB0b3Agc3BlY2lmaWVkIGluIHVuaXRzIG90
aGVyIHRoYW4gInB4IgorICAgIC8vIC0gZWRnZSAoc3Vua2VuIG9yIHJhaXNlZCwgZGVmYXVsdCBp
cyByYWlzZWQpCisgICAgLy8gLSBkaWFsb2dIaWRlOiB0cnVzdGVkICYmIGJvb2xGZWF0dXJlKGZl
YXR1cmVzLCAiZGlhbG9naGlkZSIpLCBtYWtlcyBkaWFsb2cgaGlkZSB3aGVuIHlvdSBwcmludAor
ICAgIC8vIC0gaGVscDogYm9vbEZlYXR1cmUoZmVhdHVyZXMsICJoZWxwIiwgdHJ1ZSksIG1ha2Vz
IGhlbHAgaWNvbiBhcHBlYXIgaW4gZGlhbG9nICh3aGF0IGRvZXMgaXQgZG8gb24gV2luZG93cz8p
CisgICAgLy8gLSB1bmFkb3JuZWQ6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMsICJ1
bmFkb3JuZWQiKTsKKworICAgIHdpZHRoID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9n
d2lkdGgiLCAxMDAsIHNjcmVlbkF2YWlsYWJsZVJlY3Qud2lkdGgoKSwgNjIwKTsgLy8gZGVmYXVs
dCBoZXJlIGNhbWUgZnJvbSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQorICAgIGhlaWdo
dCA9IGZsb2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ2hlaWdodCIsIDEwMCwgc2NyZWVuQXZh
aWxhYmxlUmVjdC5oZWlnaHQoKSwgNDUwKTsgLy8gZGVmYXVsdCBoZXJlIGNhbWUgZnJvbSBmcmFt
ZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQorCisgICAgeCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVuQXZhaWxhYmxl
UmVjdC5yaWdodCgpIC0gd2lkdGgsIC0xKTsKKyAgICB4U2V0ID0geCA+IDA7CisgICAgeSA9IGZs
b2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlbkF2YWlsYWJsZVJlY3QueSgp
LCBzY3JlZW5BdmFpbGFibGVSZWN0LmJvdHRvbSgpIC0gaGVpZ2h0LCAtMSk7CisgICAgeVNldCA9
IHkgPiAwOworCisgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwgdHJ1ZSkp
IHsKKyAgICAgICAgaWYgKCF4U2V0KSB7CisgICAgICAgICAgICB4ID0gc2NyZWVuQXZhaWxhYmxl
UmVjdC54KCkgKyAoc2NyZWVuQXZhaWxhYmxlUmVjdC53aWR0aCgpIC0gd2lkdGgpIC8gMjsKKyAg
ICAgICAgICAgIHhTZXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICgheVNldCkgewor
ICAgICAgICAgICAgeSA9IHNjcmVlbkF2YWlsYWJsZVJlY3QueSgpICsgKHNjcmVlbkF2YWlsYWJs
ZVJlY3QuaGVpZ2h0KCkgLSBoZWlnaHQpIC8gMjsKKyAgICAgICAgICAgIHlTZXQgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmVzaXphYmxlID0gYm9vbEZlYXR1cmUoZmVhdHVyZXMs
ICJyZXNpemFibGUiKTsKKyAgICBzY3JvbGxiYXJzVmlzaWJsZSA9IGJvb2xGZWF0dXJlKGZlYXR1
cmVzLCAic2Nyb2xsIiwgdHJ1ZSk7CisgICAgc3RhdHVzQmFyVmlzaWJsZSA9IGJvb2xGZWF0dXJl
KGZlYXR1cmVzLCAic3RhdHVzIiwgIXRydXN0ZWQpOworfQorCitib29sIFdpbmRvd0ZlYXR1cmVz
Ojpib29sRmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0IGNo
YXIqIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAgRGlhbG9nRmVhdHVyZXNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBmZWF0
dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gaXQtPnNlY29uZDsKICAgICByZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwgdmFs
dWUgPT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09ICJvbiI7CiB9CiAKLWZsb2F0
IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGZlYXR1cmVzLCBjb25zdCBjaGFyKiBrZXksIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBmbG9h
dCBkZWZhdWx0VmFsdWUpCitmbG9hdCBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGNvbnN0
IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcioga2V5LCBmbG9hdCBtaW4s
IGZsb2F0IG1heCwgZmxvYXQgZGVmYXVsdFZhbHVlKQogewotICAgIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKKyAgICBEaWFs
b2dGZWF0dXJlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5maW5kKGtleSk7CiAg
ICAgaWYgKGl0ID09IGZlYXR1cmVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVl
OwotICAgIC8vIEZJWE1FOiBDYW4ndCBkaXN0aW5ndWlzaCAiMHEiIGZyb20gc3RyaW5nIHdpdGgg
bm8gZGlnaXRzIGluIGl0IC0tIGJvdGggcmV0dXJuIGQgPT0gMCBhbmQgb2sgPT0gZmFsc2UuCi0g
ICAgLy8gV291bGQgYmUgZ29vZCB0byB0ZWxsIHRoZW0gYXBhcnQgc29tZWhvdyBzaW5jZSBzdHJp
bmcgd2l0aCBubyBkaWdpdHMgc2hvdWxkIGJlIGRlZmF1bHQgdmFsdWUgYW5kCi0gICAgLy8gIjBx
IiBzaG91bGQgYmUgbWluaW11bSB2YWx1ZS4KKyAgICAvLyBGSVhNRTogVGhlIHRvRG91YmxlIGZ1
bmN0aW9uIGRvZXMgbm90IG9mZmVyIGEgd2F5IHRvIHRlbGwgIjBxIiBmcm9tIHN0cmluZyB3aXRo
IG5vIGRpZ2l0cyBpbiBpdDogQm90aAorICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIDAgYW5kIGZh
bHNlIGZvciBvay4gQnV0ICIwcSIgc2hvdWxkIHlpZWxkIHRoZSBtaW5pbXVtIHJhdGhlciB0aGFu
IHRoZSBkZWZhdWx0LgogICAgIGJvb2wgb2s7Ci0gICAgZG91YmxlIGQgPSBpdC0+c2Vjb25kLnRv
RG91YmxlKCZvayk7Ci0gICAgaWYgKChkID09IDAgJiYgIW9rKSB8fCBpc25hbihkKSkKKyAgICBk
b3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgmb2spOworICAgIGlmICgo
cGFyc2VkTnVtYmVyID09IDAgJiYgIW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAgICAg
ICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIGlmIChkIDwgbWluIHx8IG1heCA8PSBtaW4pCisg
ICAgaWYgKHBhcnNlZE51bWJlciA8IG1pbiB8fCBtYXggPD0gbWluKQogICAgICAgICByZXR1cm4g
bWluOwotICAgIGlmIChkID4gbWF4KQorICAgIGlmIChwYXJzZWROdW1iZXIgPiBtYXgpCiAgICAg
ICAgIHJldHVybiBtYXg7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZCk7CisgICAgLy8g
RklYTUU6IFNlZW1zIHN0cmFuZ2UgdG8gY2FzdCBhIGRvdWJsZSB0byBpbnQgYW5kIHRoZW4gY29u
dmVydCBiYWNrIHRvIGEgZmxvYXQuIFdoeSBpcyB0aGlzIGEgZ29vZCBpZGVhPworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZE51bWJlcik7Cit9CisKK3ZvaWQgV2luZG93RmVhdHVy
ZXM6OnBhcnNlRGlhbG9nRmVhdHVyZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERpYWxvZ0ZlYXR1
cmVzTWFwJiBtYXApCit7CisgICAgVmVjdG9yPFN0cmluZz4gdmVjdG9yOworICAgIHN0cmluZy5z
cGxpdCgnOycsIHZlY3Rvcik7CisgICAgc2l6ZV90IHNpemUgPSB2ZWN0b3Iuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZmVhdHVyZVN0cmluZyA9IHZlY3RvcltpXTsKKworICAgICAgICBzaXplX3Qgc2VwYXJhdG9y
UG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJz0nKTsKKyAgICAgICAgc2l6ZV90IGNvbG9u
UG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJzonKTsKKyAgICAgICAgaWYgKHNlcGFyYXRv
clBvc2l0aW9uICE9IG5vdEZvdW5kICYmIGNvbG9uUG9zaXRpb24gIT0gbm90Rm91bmQpCisgICAg
ICAgICAgICBjb250aW51ZTsgLy8gaWdub3JlIHN0cmluZ3MgdGhhdCBoYXZlIGJvdGggPSBhbmQg
OgorICAgICAgICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAgICAg
ICBzZXBhcmF0b3JQb3NpdGlvbiA9IGNvbG9uUG9zaXRpb247CisKKyAgICAgICAgU3RyaW5nIGtl
eSA9IGZlYXR1cmVTdHJpbmcubGVmdChzZXBhcmF0b3JQb3NpdGlvbikuc3RyaXBXaGl0ZVNwYWNl
KCkubG93ZXIoKTsKKworICAgICAgICAvLyBOdWxsIHN0cmluZyBmb3IgdmFsdWUgaW5kaWNhdGVz
IGtleSB3aXRob3V0IHZhbHVlLgorICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlmIChz
ZXBhcmF0b3JQb3NpdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgdmFsdWUgPSBmZWF0
dXJlU3RyaW5nLnN1YnN0cmluZyhzZXBhcmF0b3JQb3NpdGlvbiArIDEpLnN0cmlwV2hpdGVTcGFj
ZSgpLmxvd2VyKCk7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlZnQodmFsdWUuZmluZCgn
ICcpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgfQog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvV2luZG93RmVh
dHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkocmV2
aXNpb24gNzM2NjApCisrKyBXZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CisgICAgY2xhc3MgRmxvYXRSZWN0OworCiAgICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZWxldGUgdGhpcyBjb25zdHJ1Y3RvciBvbmNlIFY4IHNo
b3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCiAgICAgICAgIFdpbmRv
d0ZlYXR1cmVzKCkKICAgICAgICAgICAgIDogeFNldChmYWxzZSkKICAgICAgICAgICAgICwgeVNl
dChmYWxzZSkKQEAgLTUxLDEyICs1NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ewogICAgICAgICB9CiAKLSAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBmZWF0
dXJlcyk7Ci0KLSAgICAgICAgdm9pZCBzZXRXaW5kb3dGZWF0dXJlKGNvbnN0IFN0cmluZyYga2V5
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5nKTsKLQotICAgICAgICBzdGF0aWMgYm9v
bCBib29sRmVhdHVyZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZmVhdHVyZXMsIGNv
bnN0IGNoYXIqIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Ci0gICAgICAgIHN0YXRp
YyBmbG9hdCBmbG9hdEZlYXR1cmUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZlYXR1
cmVzLCBjb25zdCBjaGFyKiBrZXksIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBmbG9hdCBkZWZhdWx0
VmFsdWUpOworICAgICAgICBXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHdpbmRvd0ZlYXR1
cmVzU3RyaW5nKTsKKyAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBkaWFsb2dG
ZWF0dXJlc1N0cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5BdmFpbGFibGVSZWN0KTsKIAog
ICAgICAgICBmbG9hdCB4OwogICAgICAgICBib29sIHhTZXQ7CkBAIC03OCw2ICs3NywxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZGlhbG9nOwogCiAgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGFkZGl0aW9uYWxGZWF0dXJlczsKKworICAgICAgICAvLyBGSVhNRTogV2UgY2Fu
IG1ha2UgdGhlc2UgZnVuY3Rpb25zIHByaXZhdGUgbm9uLW1lbWJlciBmdW5jdGlvbnMgb25jZSBW
OCBzaG93TW9kYWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9NV2luZG93LgorICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IERpYWxvZ0ZlYXR1cmVzTWFwOworICAgICAg
ICBzdGF0aWMgdm9pZCBwYXJzZURpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYsIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+Jik7CisgICAgICAgIHN0YXRpYyBib29sIGJvb2xGZWF0dXJlKGNvbnN0
IERpYWxvZ0ZlYXR1cmVzTWFwJiwgY29uc3QgY2hhcioga2V5LCBib29sIGRlZmF1bHRWYWx1ZSA9
IGZhbHNlKTsKKyAgICAgICAgc3RhdGljIGZsb2F0IGZsb2F0RmVhdHVyZShjb25zdCBEaWFsb2dG
ZWF0dXJlc01hcCYsIGNvbnN0IGNoYXIqIGtleSwgZmxvYXQgbWluLCBmbG9hdCBtYXgsIGZsb2F0
IGRlZmF1bHRWYWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFdpbmRvd0Zl
YXR1cmUoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJpbmcp
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76259</attachid>
            <date>2010-12-10 14:19:37 -0800</date>
            <delta_ts>2010-12-10 15:50:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-50836-20101210141936.patch</filename>
            <type>text/plain</type>
            <size>55842</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mzc2MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjIgQEAKKzIwMTAtMTItMTAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUg
b3BlbiBhbmQgc2hvd01vZGFsRGlhbG9nIGltcGxlbWVudGF0aW9ucyBmcm9tIGJpbmRpbmdzIGlu
dG8gRE9NIGNsYXNzIERPTVdpbmRvdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTA4MzYKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpvcGVuKTogUmVtb3Zl
ZCBtb3N0IG9mIHRoZSBjb2RlIGFuZCBjaGFuZ2VkIHRvIGNhbGwKKyAgICAgICAgRE9NV2luZG93
OjpvcGVuLgorICAgICAgICAoV2ViQ29yZTo6RGlhbG9nSGFuZGxlcjo6RGlhbG9nSGFuZGxlcik6
IEFkZGVkLiBPYmplY3QgaXMgdXNlZCB0byBoYW5kbGUgdGhlCisgICAgICAgIGFyZ3VtZW50cyBh
bmQgcmV0dXJuIHZhbHVlIGluIHNob3dNb2RhbERpYWxvZy4KKyAgICAgICAgKFdlYkNvcmU6OkRp
YWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRp
YWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzZXRV
cERpYWxvZyk6IEFkZGVkLiBGdW5jdGlvbiBwYXNzZWQgdG8gc2hvd01vZGFsRGlhbG9nIHRoYXQg
anVzdAorICAgICAgICBjYXN0cyBwb2ludGVyIHRvIERpYWxvZ0hhbmRsZXIgY2FuIGNhbGxzIGRp
YWxvZ0NyZWF0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6c2hvd01vZGFsRGlh
bG9nKTogUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIGFuZCBjaGFuZ2VkCisgICAgICAgIHRvIGNh
bGwgRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2cuCisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdp
bmRvdzo6cG9zdE1lc3NhZ2UpOiBNYWRlIHN0eWxlIG1hdGNoIHRoZSByZXN0IG9mIHRoZSBmaWxl
IGJ5CisgICAgICAgIHJlbmFtaW5nIGxvY2FsIHZhcmlhYmxlcyBhbmQgZ2V0dGluZyByaWQgb2Yg
YSBuZWVkbGVzcyBvbmVzLgorCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9nRmVhdHVyZXMpOiBNb3ZlZCBi
b2R5IG9mIHRoaXMgZnVuY3Rpb24KKyAgICAgICAgdG8gdGhlIFdpbmRvd0ZlYXR1cmVzIGNsYXNz
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjphbGxvd1BvcFVwKTogUmVuYW1lZCBhcmd1
bWVudCBmcm9tIGFjdGl2ZUZyYW1lIHRvIGZpcnN0RnJhbWUsCisgICAgICAgIGJlY2F1c2UgdGhh
dCdzIHRoZSBmcmFtZSB3ZSBwYXNzIGluIGhlcmUuIEFsc28gYWRkZWQgYW4gb3ZlcmxvYWQgc28g
dGhpcyBjYW4gYmUKKyAgICAgICAgY2FsbGVkIG9uIGEgd2luZG93IHJhdGhlciB0aGFuIGEgZnJh
bWUuCisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNldExvY2F0aW9uKTogUmVuYW1lZCBh
IGNvdXBsZSB2YXJpYWJsZXMgc28gdGhlIG5hbWVzIGFyZQorICAgICAgICB0aGUgc2FtZSBhcyBp
biBvcGVuIGFuZCBzaG93TW9kYWxEaWFsb2cuIEZhY3RvcmVkIHRoZSBKYXZhU2NyaXB0IHNlY3Vy
aXR5IGNoZWNrCisgICAgICAgIGludG8gYSBuZXcgZnVuY3Rpb24gbmFtZWQgaXNJbnNlY3VyZVNj
cmlwdEFjY2Vzcy4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6aXNJbnNlY3VyZVNjcmlw
dEFjY2Vzcyk6IEhlcmUgaXMgdGhlIG5ldyBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRP
TVdpbmRvdzo6Y3JlYXRlV2luZG93KTogQWRkZWQuIENvbnRhaW5zIGxvZ2ljIHNoYXJlZCBieSBv
cGVuIGFuZAorICAgICAgICBzaG93TW9kYWxEaWFsb2cganVzdCBhcyB0aGUgZnVuY3Rpb24gbmFt
ZWQgY3JlYXRlV2luZG93IGluIEpTRE9NV2luZG93Q3VzdG9tLmNwcAorICAgICAgICB1c2VkIHRv
LgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93OjpvcGVuKTogQWRkZWQuIENvZGUgZnJvbSBK
U0RPTVdpbmRvd0N1c3RvbSB3aXRob3V0IHRoZQorICAgICAgICBKYXZhU2NyaXB0IGxhbmd1YWdl
IGJpbmRpbmcgcGFydCwgYW5kIHdpdGggYSBiaXQgb2YgcmVmYWN0b3JpbmcgdG8gc2hhcmUgY29k
ZQorICAgICAgICB3aXRoIHRoZSByZXN0IG9mIHRoZSBET01XaW5kb3cgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyk6IERpdHRvLgorCisgICAgICAg
ICogcGFnZS9ET01XaW5kb3cuaDogTW92ZWQgY29uZGl0aW9uYWwgcGFydHMgb2YgdGhlIGZpbGUg
aW50byBzZXBhcmF0ZSBwYXJhZ3JhcGhzCisgICAgICAgIGluIGFscGhhYmV0aWNhbCBvcmRlciBz
byB0aGV5IGFyZSBub3Qgc2NhdHRlcmVkIHRob3J1Z2ggdGhlIGZpbGUuIFJlbW92ZWQgcmVkdW5k
YW50CisgICAgICAgIGluY2x1ZGVzLiBBZGRlZCBzb21lIGJsYW5rIGxpbmVzIGZvciBjbGFyaXR5
LiBBZGRlZCBhbiBvcGVuIGZ1bmN0aW9uIGFuZCBhCisgICAgICAgIHNob3dNb2RhbERpYWxvZyBm
dW5jdGlvbi4gQWRkZWQgcHJpdmF0ZSBjcmVhdGVXaW5kb3cgYW5kIGlzSW5zZWN1cmVTY3JpcHRB
Y2Nlc3MKKyAgICAgICAgZnVuY3Rpb25zLgorCisgICAgICAgICogcGFnZS9XaW5kb3dGZWF0dXJl
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1dpbmRvd0ZlYXR1cmVzU2VwYXJhdG9yKTogUmVu
YW1lZCBmcm9tIGlzU2VwYXJhdG9yIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6V2lu
ZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UuIFVz
ZWQgaXNFbXB0eQorICAgICAgICBpbnN0ZWFkIG9mIGNoZWNraW5nIGxlbmd0aC4gQWRkZWQgYSBu
ZXcgY29uc3RydWN0b3IgZm9yIHVzZSB3aGVuIG1ha2luZyBkaWFsb2dzLAorICAgICAgICB3aXRo
IGNvZGUgZnJvbSB0aGUgc2hvd01vZGFsRGlhbG9nIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKTogVXNlIERpYWxvZ0ZlYXR1cmVzTWFwIHR5
cGVkZWYuCisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKTog
VXNlIERpYWxvZ0ZlYXR1cmVzTWFwIHR5cGVkZWYuCisgICAgICAgIFJlbmFtZWQgYSBsb2NhbCB2
YXJpYWJsZSBhbmQgdHdlYWtlZCB0aGUgY29tbWVudHMgYSBiaXQuCisgICAgICAgIChXZWJDb3Jl
OjpXaW5kb3dGZWF0dXJlczo6cGFyc2VEaWFsb2dGZWF0dXJlcyk6IEFkZGVkLiBDb2RlIG1vdmVk
IGhlcmUgZnJvbQorICAgICAgICBET01XaW5kb3c6OnBhcnNlRGlhbG9nRmVhdHVyZXMgYW5kIHJl
ZmFjdG9yZWQgYSBiaXQuCisKKyAgICAgICAgKiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmg6IEFkZGVk
IG5ldyBjb25zdHJ1Y3RvciwgbmV3IHBhcnNlRGlhbG9nRmVhdHVyZXMKKyAgICAgICAgZnVuY3Rp
b24sIERpYWxvZ0ZlYXR1cmVzTWFwIHR5cGVkZWYsIGFuZCBtYWRlIHNldFdpbmRvd0ZlYXR1cmUg
ZnVuY3Rpb24gcHJpdmF0ZS4KKwogMjAxMC0xMi0wOSAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5i
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDczNjYw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTY2NywyMjQgKzY2Nyw4OSBAQCBKU1ZhbHVlIEpTRE9NV2luZG93
Ojp3ZWJTb2NrZXQoRXhlY1N0YXRlCiAKIC8vIEN1c3RvbSBmdW5jdGlvbnMKIAotLy8gSGVscGVy
IGZvciB3aW5kb3cub3BlbigpIGFuZCB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKCkKLXN0YXRpYyBG
cmFtZSogY3JlYXRlV2luZG93KEV4ZWNTdGF0ZSogZXhlYywgRnJhbWUqIGxleGljYWxGcmFtZSwg
RnJhbWUqIGR5bmFtaWNGcmFtZSwgRnJhbWUqIG9wZW5lckZyYW1lLAotICAgIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdp
bmRvd0ZlYXR1cmVzLCBKU1ZhbHVlIGRpYWxvZ0FyZ3MpCi17Ci0gICAgQVNTRVJUKGxleGljYWxG
cmFtZSk7Ci0gICAgQVNTRVJUKGR5bmFtaWNGcmFtZSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdDsKLQotICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUg
ZHluYW1pY0dsb2JhbE9iamVjdCB0byBkZXRlcm1pbmUKLSAgICAvLyB0aGUgb3V0Z29pbmdSZWZl
cnJlci4gV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KLSAgICBTdHJpbmcgcmVmZXJy
ZXIgPSBkeW5hbWljRnJhbWUtPmxvYWRlcigpLT5vdXRnb2luZ1JlZmVycmVyKCk7Ci0gICAgcmVx
dWVzdC5zZXRIVFRQUmVmZXJyZXIocmVmZXJyZXIpOwotICAgIEZyYW1lTG9hZGVyOjphZGRIVFRQ
T3JpZ2luSWZOZWVkZWQocmVxdWVzdCwgZHluYW1pY0ZyYW1lLT5sb2FkZXIoKS0+b3V0Z29pbmdP
cmlnaW4oKSk7Ci0gICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QobGV4aWNhbEZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCByZXF1ZXN0LCBmcmFtZU5hbWUpOwotCi0g
ICAgLy8gRklYTUU6IEl0J3MgbXVjaCBiZXR0ZXIgZm9yIGNsaWVudCBBUEkgaWYgYSBuZXcgd2lu
ZG93IHN0YXJ0cyB3aXRoIGEgVVJMLCBoZXJlIHdoZXJlIHdlCi0gICAgLy8ga25vdyB3aGF0IFVS
TCB3ZSBhcmUgZ29pbmcgdG8gb3Blbi4gVW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhc3NlcyB0
aGUgZW1wdHkgc3RyaW5nCi0gICAgLy8gZm9yIHRoZSBVUkwsIGJ1dCB0aGVyZSdzIGEgcmVhc29u
IGZvciB0aGF0LiBCZWZvcmUgbG9hZGluZyB3ZSBoYXZlIHRvIHNldCB1cCB0aGUgb3BlbmVyLAot
ICAgIC8vIG9wZW5lZEJ5RE9NLCBhbmQgZGlhbG9nQXJndW1lbnRzIHZhbHVlcy4gQWxzbywgdG8g
ZGVjaWRlIHdoZXRoZXIgdG8gdXNlIHRoZSBVUkwgd2UgY3VycmVudGx5Ci0gICAgLy8gZG8gYW4g
YWxsb3dzQWNjZXNzRnJvbSBjYWxsIHVzaW5nIHRoZSB3aW5kb3cgd2UgY3JlYXRlLCB3aGljaCBj
YW4ndCBiZSBkb25lIGJlZm9yZSBjcmVhdGluZyBpdC4KLSAgICAvLyBXZSdkIGhhdmUgdG8gcmVz
b2x2ZSBhbGwgdGhvc2UgaXNzdWVzIHRvIHBhc3MgdGhlIFVSTCBpbnN0ZWFkIG9mICIiLgotCi0g
ICAgYm9vbCBjcmVhdGVkOwotICAgIC8vIFdlIHBhc3MgdGhlIG9wZW5lciBmcmFtZSBmb3IgdGhl
IGxvb2t1cEZyYW1lIGluIGNhc2UgdGhlIGFjdGl2ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbQot
ICAgIC8vIHRoZSBvcGVuZXIgZnJhbWUsIGFuZCB0aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUg
cmVsYXRpdmUgdG8gdGhlIG9wZW5lciBmcmFtZS4KLSAgICBGcmFtZSogbmV3RnJhbWUgPSBjcmVh
dGVXaW5kb3cobGV4aWNhbEZyYW1lLCBvcGVuZXJGcmFtZSwgZnJhbWVSZXF1ZXN0LCB3aW5kb3dG
ZWF0dXJlcywgY3JlYXRlZCk7Ci0gICAgaWYgKCFuZXdGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBuZXdGcmFtZS0+bG9hZGVyKCktPnNldE9wZW5lcihvcGVuZXJGcmFtZSk7Ci0gICAg
bmV3RnJhbWUtPnBhZ2UoKS0+c2V0T3BlbmVkQnlET00oKTsKLQotICAgIC8vIEZJWE1FOiBJZiBh
IHdpbmRvdyBpcyBjcmVhdGVkIGZyb20gYW4gaXNvbGF0ZWQgd29ybGQsIHdoYXQgYXJlIHRoZSBj
b25zZXF1ZW5jZXMgb2YgdGhpcz8gJ2RpYWxvZ0FyZ3VtZW50cycgb25seSBhcHBlYXJzIGJhY2sg
aW4gdGhlIG5vcm1hbCB3b3JsZD8KLSAgICBKU0RPTVdpbmRvdyogbmV3V2luZG93ID0gdG9KU0RP
TVdpbmRvdyhuZXdGcmFtZSwgbm9ybWFsV29ybGQoZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Ci0KLSAg
ICBpZiAoZGlhbG9nQXJncykKLSAgICAgICAgbmV3V2luZG93LT5wdXREaXJlY3QoSWRlbnRpZmll
cihleGVjLCAiZGlhbG9nQXJndW1lbnRzIiksIGRpYWxvZ0FyZ3MpOwotCi0gICAgaWYgKCFwcm90
b2NvbElzSmF2YVNjcmlwdCh1cmwpIHx8IG5ld1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbShleGVj
KSkgewotICAgICAgICBLVVJMIGNvbXBsZXRlZFVSTCA9IHVybC5pc0VtcHR5KCkgPyBLVVJMKFBh
cnNlZFVSTFN0cmluZywgIiIpIDogY29tcGxldGVVUkwoZXhlYywgdXJsKTsKLSAgICAgICAgaWYg
KGNyZWF0ZWQpCi0gICAgICAgICAgICBuZXdGcmFtZS0+bG9hZGVyKCktPmNoYW5nZUxvY2F0aW9u
KGxleGljYWxGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgY29tcGxldGVkVVJM
LCByZWZlcnJlciwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAoIXVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBuZXdGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5zY2hlZHVs
ZUxvY2F0aW9uQ2hhbmdlKGxleGljYWxGcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4o
KSwgY29tcGxldGVkVVJMLnN0cmluZygpLCByZWZlcnJlciwgIWxleGljYWxGcmFtZS0+c2NyaXB0
KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG5ld0ZyYW1lOwotfQotCi1zdGF0aWMgYm9vbCBkb21XaW5kb3dBbGxvd1BvcFVw
KEZyYW1lKiBhY3RpdmVGcmFtZSkKLXsKLSAgICBBU1NFUlQoYWN0aXZlRnJhbWUpOwotICAgIGlm
IChTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIERPTVdpbmRvdzo6YWxsb3dQb3BVcChhY3RpdmVGcmFtZSk7
Ci19Ci0KIEpTVmFsdWUgSlNET01XaW5kb3c6Om9wZW4oRXhlY1N0YXRlKiBleGVjKQogewotICAg
IFN0cmluZyB1cmxTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNr
KGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsKLSAgICBBdG9taWNTdHJpbmcgZnJhbWVOYW1lID0g
ZXhlYy0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSA/ICJfYmxhbmsiIDogdXN0cmlu
Z1RvQXRvbWljU3RyaW5nKGV4ZWMtPmFyZ3VtZW50KDEpLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBX
aW5kb3dGZWF0dXJlcyB3aW5kb3dGZWF0dXJlcyh2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKSk7CisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3cgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPmlt
cGwoKTsKKyAgICBET01XaW5kb3cqIGZpcnN0V2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBpbXBs
KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKKyAgICBTdHJpbmcgdXJsU3RyaW5nID0gdmFs
dWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgw
KSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICBGcmFtZSogbGV4aWNhbEZyYW1lID0gdG9MZXhpY2FsRnJhbWUoZXhlYyk7
Ci0gICAgaWYgKCFsZXhpY2FsRnJhbWUpCisgICAgQXRvbWljU3RyaW5nIGZyYW1lTmFtZSA9IGV4
ZWMtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyAiX2JsYW5rIiA6IHVzdHJpbmdU
b0F0b21pY1N0cmluZyhleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICBGcmFtZSogZHluYW1pY0ZyYW1lID0gdG9EeW5hbWljRnJhbWUoZXhlYyk7Ci0gICAgaWYgKCFk
eW5hbWljRnJhbWUpCisgICAgU3RyaW5nIHdpbmRvd0ZlYXR1cmVzU3RyaW5nID0gdmFsdWVUb1N0
cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBleGVjLT5hcmd1bWVudCgyKSk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIAotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotCi0gICAgLy8gQmVjYXVzZSBG
cmFtZVRyZWU6OmZpbmQoKSByZXR1cm5zIHRydWUgZm9yIGVtcHR5IHN0cmluZ3MsIHdlIG11c3Qg
Y2hlY2sgZm9yIGVtcHR5IGZyYW1lbmFtZXMuCi0gICAgLy8gT3RoZXJ3aXNlLCBpbGxlZ2l0aW1h
dGUgd2luZG93Lm9wZW4oKSBjYWxscyB3aXRoIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91
Z2ggdGhlIHBvcHVwIGJsb2NrZXIuCi0gICAgaWYgKCFkb21XaW5kb3dBbGxvd1BvcFVwKGR5bmFt
aWNGcmFtZSkgJiYgKGZyYW1lTmFtZS5pc0VtcHR5KCkgfHwgIWZyYW1lLT50cmVlKCktPmZpbmQo
ZnJhbWVOYW1lKSkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gR2V0
IHRoZSB0YXJnZXQgZnJhbWUgZm9yIHRoZSBzcGVjaWFsIGNhc2VzIG9mIF90b3AgYW5kIF9wYXJl
bnQuICBJbiB0aG9zZQotICAgIC8vIGNhc2VzLCB3ZSBjYW4gc2NoZWR1bGUgYSBsb2NhdGlvbiBj
aGFuZ2UgcmlnaHQgbm93IGFuZCByZXR1cm4gZWFybHkuCi0gICAgYm9vbCB0b3BPclBhcmVudCA9
IGZhbHNlOwotICAgIGlmIChmcmFtZU5hbWUgPT0gIl90b3AiKSB7Ci0gICAgICAgIGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS0+dG9wKCk7Ci0gICAgICAgIHRvcE9yUGFyZW50ID0gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKGZyYW1lTmFtZSA9PSAiX3BhcmVudCIpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBw
YXJlbnQgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKLSAgICAgICAgICAgIGZyYW1lID0gcGFy
ZW50OwotICAgICAgICB0b3BPclBhcmVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh0b3BPclBh
cmVudCkgewotICAgICAgICBTdHJpbmcgY29tcGxldGVkVVJMOwotICAgICAgICBpZiAoIXVybFN0
cmluZy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb21wbGV0ZWRVUkwgPSBjb21wbGV0ZVVSTChl
eGVjLCB1cmxTdHJpbmcpLnN0cmluZygpOwotCi0gICAgICAgIGlmICghc2hvdWxkQWxsb3dOYXZp
Z2F0aW9uKGV4ZWMsIGZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
Ci0gICAgICAgIGNvbnN0IEpTRE9NV2luZG93KiB0YXJnZXRlZFdpbmRvdyA9IHRvSlNET01XaW5k
b3coZnJhbWUsIGN1cnJlbnRXb3JsZChleGVjKSk7Ci0gICAgICAgIGlmICghY29tcGxldGVkVVJM
LmlzRW1wdHkoKSAmJiAoIXByb3RvY29sSXNKYXZhU2NyaXB0KGNvbXBsZXRlZFVSTCkgfHwgKHRh
cmdldGVkV2luZG93ICYmIHRhcmdldGVkV2luZG93LT5hbGxvd3NBY2Nlc3NGcm9tKGV4ZWMpKSkp
IHsKLSAgICAgICAgICAgIC8vIEZvciB3aGF0ZXZlciByZWFzb24sIEZpcmVmb3ggdXNlcyB0aGUg
ZHluYW1pY0dsb2JhbE9iamVjdCB0bwotICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvdXRn
b2luZyByZWZlcnJlci4gV2UgcmVwbGljYXRlIHRoYXQgYmVoYXZpb3IgaGVyZS4KLSAgICAgICAg
ICAgIFN0cmluZyByZWZlcnJlciA9IGR5bmFtaWNGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVm
ZXJyZXIoKTsKKyAgICBSZWZQdHI8RE9NV2luZG93PiBvcGVuZWRXaW5kb3cgPSBpbXBsKCktPm9w
ZW4odXJsU3RyaW5nLCBmcmFtZU5hbWUsIHdpbmRvd0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVXaW5k
b3csIGZpcnN0V2luZG93KTsKKyAgICBpZiAoIW9wZW5lZFdpbmRvdykKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgb3BlbmVkV2luZG93LmdldCgp
KTsKK30KIAotICAgICAgICAgICAgZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1
bGVMb2NhdGlvbkNoYW5nZShsZXhpY2FsRnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCksCi0gICAgICAgICAgICAgICAgY29tcGxldGVkVVJMLCByZWZlcnJlciwgIWxleGljYWxGcmFt
ZS0+c2NyaXB0KCktPmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZnJhbWUtPmRvbVdpbmRvdygpKTsK
K2NsYXNzIERpYWxvZ0hhbmRsZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IERpYWxvZ0hhbmRs
ZXIoRXhlY1N0YXRlKiBleGVjKQorICAgICAgICA6IG1fZXhlYyhleGVjKQorICAgICAgICAsIG1f
Z2xvYmFsT2JqZWN0KDApCisgICAgewogICAgIH0KIAotICAgIC8vIEluIHRoZSBjYXNlIG9mIGEg
bmFtZWQgZnJhbWUgb3IgYSBuZXcgd2luZG93LCB3ZSdsbCB1c2UgdGhlIGNyZWF0ZVdpbmRvdygp
IGhlbHBlcgotICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KHdpbmRvd0ZlYXR1cmVzLnhTZXQgPyB3
aW5kb3dGZWF0dXJlcy54IDogMCwgd2luZG93RmVhdHVyZXMueVNldCA/IHdpbmRvd0ZlYXR1cmVz
LnkgOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoU2V0
ID8gd2luZG93RmVhdHVyZXMud2lkdGggOiAwLCB3aW5kb3dGZWF0dXJlcy5oZWlnaHRTZXQgPyB3
aW5kb3dGZWF0dXJlcy5oZWlnaHQgOiAwKTsKLSAgICBET01XaW5kb3c6OmFkanVzdFdpbmRvd1Jl
Y3Qoc2NyZWVuQXZhaWxhYmxlUmVjdChwYWdlID8gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSA6
IDApLCB3aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKKyAgICB2b2lkIGRpYWxvZ0NyZWF0ZWQoRE9N
V2luZG93Kik7CisgICAgSlNWYWx1ZSByZXR1cm5WYWx1ZSgpIGNvbnN0OwogCi0gICAgd2luZG93
RmVhdHVyZXMueCA9IHdpbmRvd1JlY3QueCgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLnkgPSB3aW5k
b3dSZWN0LnkoKTsKLSAgICB3aW5kb3dGZWF0dXJlcy5oZWlnaHQgPSB3aW5kb3dSZWN0LmhlaWdo
dCgpOwotICAgIHdpbmRvd0ZlYXR1cmVzLndpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworcHJp
dmF0ZToKKyAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0RPTVdpbmRvdyogbV9nbG9iYWxP
YmplY3Q7Cit9OwogCi0gICAgZnJhbWUgPSBjcmVhdGVXaW5kb3coZXhlYywgbGV4aWNhbEZyYW1l
LCBkeW5hbWljRnJhbWUsIGZyYW1lLCB1cmxTdHJpbmcsIGZyYW1lTmFtZSwgd2luZG93RmVhdHVy
ZXMsIEpTVmFsdWUoKSk7CitpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVk
KERPTVdpbmRvdyogZGlhbG9nKQoreworICAgIG1fZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTVdpbmRv
dyhkaWFsb2ctPmZyYW1lKCksIG5vcm1hbFdvcmxkKG1fZXhlYy0+Z2xvYmFsRGF0YSgpKSk7Cisg
ICAgaWYgKEpTVmFsdWUgZGlhbG9nQXJndW1lbnRzID0gbV9leGVjLT5hcmd1bWVudCgxKSkKKyAg
ICAgICAgbV9nbG9iYWxPYmplY3QtPnB1dERpcmVjdChJZGVudGlmaWVyKG1fZXhlYywgImRpYWxv
Z0FyZ3VtZW50cyIpLCBkaWFsb2dBcmd1bWVudHMpOworfQogCi0gICAgaWYgKCFmcmFtZSkKK2lu
bGluZSBKU1ZhbHVlIERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIobV9leGVjLCAicmV0dXJuVmFsdWUiKTsKKyAgICBQcm9wZXJ0
eVNsb3Qgc2xvdDsKKyAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0LT5KU0dsb2JhbE9iamVjdDo6Z2V0
T3duUHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRp
Zmllcik7Cit9CiAKLSAgICByZXR1cm4gdG9KUyhleGVjLCBmcmFtZS0+ZG9tV2luZG93KCkpOwor
c3RhdGljIHZvaWQgc2V0VXBEaWFsb2coRE9NV2luZG93KiBkaWFsb2csIHZvaWQqIGNvbnRleHQp
Cit7CisgICAgc3RhdGljX2Nhc3Q8RGlhbG9nSGFuZGxlcio+KGNvbnRleHQpLT5kaWFsb2dDcmVh
dGVkKGRpYWxvZyk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnNob3dNb2RhbERpYWxvZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgU3RyaW5nIHVybCA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIEpTVmFsdWUg
ZGlhbG9nQXJncyA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgIFN0cmluZyBmZWF0dXJlQXJncyA9
IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgZXhlYy0+YXJndW1l
bnQoMikpOworICAgIERPTVdpbmRvdyogYWN0aXZlV2luZG93ID0gYXNKU0RPTVdpbmRvdyhleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5pbXBsKCk7CisgICAgRE9NV2luZG93KiBmaXJzdFdp
bmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKS0+aW1wbCgp
OwogCi0gICAgRnJhbWUqIGZyYW1lID0gaW1wbCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEZyYW1lKiBsZXhpY2FsRnJhbWUg
PSB0b0xleGljYWxGcmFtZShleGVjKTsKLSAgICBpZiAoIWxleGljYWxGcmFtZSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgRnJhbWUqIGR5bmFtaWNGcmFtZSA9IHRvRHluYW1p
Y0ZyYW1lKGV4ZWMpOwotICAgIGlmICghZHluYW1pY0ZyYW1lKQorICAgIFN0cmluZyB1cmxTdHJp
bmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFy
Z3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgaWYgKCFET01XaW5kb3c6OmNhblNob3dNb2RhbERpYWxv
Z05vdyhmcmFtZSkgfHwgIWRvbVdpbmRvd0FsbG93UG9wVXAoZHluYW1pY0ZyYW1lKSkKKyAgICBT
dHJpbmcgZGlhbG9nRmVhdHVyZXNTdHJpbmcgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9y
TnVsbENoZWNrKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDIpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gZmVhdHVyZXM7Ci0gICAgRE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9n
RmVhdHVyZXMoZmVhdHVyZUFyZ3MsIGZlYXR1cmVzKTsKKyAgICBEaWFsb2dIYW5kbGVyIGhhbmRs
ZXIoZXhlYyk7CiAKLSAgICBjb25zdCBib29sIHRydXN0ZWQgPSBmYWxzZTsKKyAgICBpbXBsKCkt
PnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVX
aW5kb3csIGZpcnN0V2luZG93LCBzZXRVcERpYWxvZywgJmhhbmRsZXIpOwogCi0gICAgLy8gVGhl
IGZvbGxvd2luZyBmZWF0dXJlcyBmcm9tIE1pY3Jvc29mdCdzIGRvY3VtZW50YXRpb24gYXJlIG5v
dCBpbXBsZW1lbnRlZDoKLSAgICAvLyAtIGRlZmF1bHQgZm9udCBzZXR0aW5ncwotICAgIC8vIC0g
d2lkdGgsIGhlaWdodCwgbGVmdCwgYW5kIHRvcCBzcGVjaWZpZWQgaW4gdW5pdHMgb3RoZXIgdGhh
biAicHgiCi0gICAgLy8gLSBlZGdlIChzdW5rZW4gb3IgcmFpc2VkLCBkZWZhdWx0IGlzIHJhaXNl
ZCkKLSAgICAvLyAtIGRpYWxvZ0hpZGU6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMs
ICJkaWFsb2doaWRlIiksIG1ha2VzIGRpYWxvZyBoaWRlIHdoZW4geW91IHByaW50Ci0gICAgLy8g
LSBoZWxwOiBib29sRmVhdHVyZShmZWF0dXJlcywgImhlbHAiLCB0cnVlKSwgbWFrZXMgaGVscCBp
Y29uIGFwcGVhciBpbiBkaWFsb2cgKHdoYXQgZG9lcyBpdCBkbyBvbiBXaW5kb3dzPykKLSAgICAv
LyAtIHVuYWRvcm5lZDogdHJ1c3RlZCAmJiBib29sRmVhdHVyZShmZWF0dXJlcywgInVuYWRvcm5l
ZCIpOwotCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QgPSBzY3JlZW5BdmFpbGFibGVSZWN0KGZy
YW1lLT52aWV3KCkpOwotCi0gICAgV2luZG93RmVhdHVyZXMgd2FyZ3M7Ci0gICAgd2FyZ3Mud2lk
dGggPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nd2lkdGgi
LCAxMDAsIHNjcmVlblJlY3Qud2lkdGgoKSwgNjIwKTsgLy8gZGVmYXVsdCBoZXJlIGNhbWUgZnJv
bSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQotICAgIHdhcmdzLndpZHRoU2V0ID0gdHJ1
ZTsKLSAgICB3YXJncy5oZWlnaHQgPSBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGZlYXR1
cmVzLCAiZGlhbG9naGVpZ2h0IiwgMTAwLCBzY3JlZW5SZWN0LmhlaWdodCgpLCA0NTApOyAvLyBk
ZWZhdWx0IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFCi0gICAg
d2FyZ3MuaGVpZ2h0U2V0ID0gdHJ1ZTsKLQotICAgIHdhcmdzLnggPSBXaW5kb3dGZWF0dXJlczo6
ZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9nbGVmdCIsIHNjcmVlblJlY3QueCgpLCBzY3Jl
ZW5SZWN0LnJpZ2h0KCkgLSB3YXJncy53aWR0aCwgLTEpOwotICAgIHdhcmdzLnhTZXQgPSB3YXJn
cy54ID4gMDsKLSAgICB3YXJncy55ID0gV2luZG93RmVhdHVyZXM6OmZsb2F0RmVhdHVyZShmZWF0
dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlblJlY3QueSgpLCBzY3JlZW5SZWN0LmJvdHRvbSgpIC0g
d2FyZ3MuaGVpZ2h0LCAtMSk7Ci0gICAgd2FyZ3MueVNldCA9IHdhcmdzLnkgPiAwOwotCi0gICAg
aWYgKFdpbmRvd0ZlYXR1cmVzOjpib29sRmVhdHVyZShmZWF0dXJlcywgImNlbnRlciIsIHRydWUp
KSB7Ci0gICAgICAgIGlmICghd2FyZ3MueFNldCkgewotICAgICAgICAgICAgd2FyZ3MueCA9IHNj
cmVlblJlY3QueCgpICsgKHNjcmVlblJlY3Qud2lkdGgoKSAtIHdhcmdzLndpZHRoKSAvIDI7Ci0g
ICAgICAgICAgICB3YXJncy54U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXdh
cmdzLnlTZXQpIHsKLSAgICAgICAgICAgIHdhcmdzLnkgPSBzY3JlZW5SZWN0LnkoKSArIChzY3Jl
ZW5SZWN0LmhlaWdodCgpIC0gd2FyZ3MuaGVpZ2h0KSAvIDI7Ci0gICAgICAgICAgICB3YXJncy55
U2V0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdhcmdzLmRpYWxvZyA9IHRydWU7
Ci0gICAgd2FyZ3MucmVzaXphYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1
cmVzLCAicmVzaXphYmxlIik7Ci0gICAgd2FyZ3Muc2Nyb2xsYmFyc1Zpc2libGUgPSBXaW5kb3dG
ZWF0dXJlczo6Ym9vbEZlYXR1cmUoZmVhdHVyZXMsICJzY3JvbGwiLCB0cnVlKTsKLSAgICB3YXJn
cy5zdGF0dXNCYXJWaXNpYmxlID0gV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0dXJlKGZlYXR1cmVz
LCAic3RhdHVzIiwgIXRydXN0ZWQpOwotICAgIHdhcmdzLm1lbnVCYXJWaXNpYmxlID0gZmFsc2U7
Ci0gICAgd2FyZ3MudG9vbEJhclZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5sb2NhdGlvbkJh
clZpc2libGUgPSBmYWxzZTsKLSAgICB3YXJncy5mdWxsc2NyZWVuID0gZmFsc2U7Ci0KLSAgICBG
cmFtZSogZGlhbG9nRnJhbWUgPSBjcmVhdGVXaW5kb3coZXhlYywgbGV4aWNhbEZyYW1lLCBkeW5h
bWljRnJhbWUsIGZyYW1lLCB1cmwsICIiLCB3YXJncywgZGlhbG9nQXJncyk7Ci0gICAgaWYgKCFk
aWFsb2dGcmFtZSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBKU0RPTVdp
bmRvdyogZGlhbG9nV2luZG93ID0gdG9KU0RPTVdpbmRvdyhkaWFsb2dGcmFtZSwgY3VycmVudFdv
cmxkKGV4ZWMpKTsKLSAgICBkaWFsb2dGcmFtZS0+cGFnZSgpLT5jaHJvbWUoKS0+cnVuTW9kYWwo
KTsKLQotICAgIElkZW50aWZpZXIgcmV0dXJuVmFsdWUoZXhlYywgInJldHVyblZhbHVlIik7Ci0g
ICAgaWYgKGRpYWxvZ1dpbmRvdy0+YWxsb3dzQWNjZXNzRnJvbU5vRXJyb3JNZXNzYWdlKGV4ZWMp
KSB7Ci0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwotICAgICAgICAvLyBUaGlzIGlzIHNhZmUs
IHdlIGhhdmUgYWxyZWFkeSBwZXJmb3JtZWQgdGhlIG9yaWdpbiBzZWN1cml0eSBjaGVjayBhbmQg
d2UgYXJlCi0gICAgICAgIC8vIG5vdCBpbnRlcmVzdGVkIGluIGFueSBvZiB0aGUgRE9NIHByb3Bl
cnRpZXMgb2YgdGhlIHdpbmRvdy4KLSAgICAgICAgaWYgKGRpYWxvZ1dpbmRvdy0+SlNHbG9iYWxP
YmplY3Q6OmdldE93blByb3BlcnR5U2xvdChleGVjLCByZXR1cm5WYWx1ZSwgc2xvdCkpCi0gICAg
ICAgICAgICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCByZXR1cm5WYWx1ZSk7Ci0gICAgfQot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBoYW5kbGVyLnJldHVyblZhbHVl
KCk7CiB9CiAKIEpTVmFsdWUgSlNET01XaW5kb3c6OnBvc3RNZXNzYWdlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IGltcGwoKTsKKyAgICBET01XaW5kb3cqIGFj
dGl2ZVdpbmRvdyA9IGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
aW1wbCgpOwogCi0gICAgRE9NV2luZG93KiBzb3VyY2UgPSBhc0pTRE9NV2luZG93KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPmltcGwoKTsKICAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMs
IGV4ZWMtPmFyZ3VtZW50KDApKTsKIAogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKQEAg
LTkwMSw3ICs3NjYsNyBAQCBKU1ZhbHVlIEpTRE9NV2luZG93Ojpwb3N0TWVzc2FnZShFeGVjU3Rh
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgd2luZG93LT5wb3N0TWVzc2FnZShtZXNzYWdlLCAmbWVzc2FnZVBvcnRzLCB0YXJn
ZXRPcmlnaW4sIHNvdXJjZSwgZWMpOworICAgIGltcGwoKS0+cG9zdE1lc3NhZ2UobWVzc2FnZSwg
Jm1lc3NhZ2VQb3J0cywgdGFyZ2V0T3JpZ2luLCBhY3RpdmVXaW5kb3csIGVjKTsKICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4
OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAkocmV2aXNpb24gNzM2NjApCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5LDE1ICsyOSwxNCBA
QAogCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJk
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJhckluZm8uaCIK
KyNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCZWZvcmVVbmxvYWRFdmVudC5oIgogI2lu
Y2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1J1bGVM
aXN0LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNocm9tZS5o
IgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJET01TZWxlY3Rpb24uaCIK
ICNpbmNsdWRlICJET01TZXR0YWJsZVRva2VuTGlzdC5oIgpAQCAtNDgsOCArNDcsOCBAQAogI2lu
Y2x1ZGUgIkRhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJEZXZpY2VNb3Rpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnRFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCkBAIC01Nyw2ICs1Niw3
IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCkBAIC03NSw2ICs3NSw3IEBACiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uQ2VudGVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUg
IlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTg4
LDYgKzg5LDcgQEAKICNpbmNsdWRlICJTdHlsZU1lZGlhLmgiCiAjaW5jbHVkZSAiU3VkZGVuVGVy
bWluYXRpb24uaCIKICNpbmNsdWRlICJXZWJLaXRQb2ludC5oIgorI2luY2x1ZGUgIldpbmRvd0Zl
YXR1cmVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0zNDAsNDAgKzM0MiwyOCBAQCB2
b2lkIERPTVdpbmRvdzo6YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldFko
bWF4KHNjcmVlbi55KCksIG1pbih3aW5kb3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cu
aGVpZ2h0KCkpKSk7CiB9CiAKLXZvaWQgRE9NV2luZG93OjpwYXJzZU1vZGFsRGlhbG9nRmVhdHVy
ZXMoY29uc3QgU3RyaW5nJiBmZWF0dXJlc0FyZywgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIG1h
cCkKKy8vIEZJWE1FOiBXZSBjYW4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24gb25jZSBWOCBzaG93TW9k
YWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9NV2luZG93Lgordm9pZCBET01XaW5kb3c6OnBh
cnNlTW9kYWxEaWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHN0cmluZywgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIG1hcCkKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBmZWF0dXJlczsKLSAgICBm
ZWF0dXJlc0FyZy5zcGxpdCgnOycsIGZlYXR1cmVzKTsKLSAgICBWZWN0b3I8U3RyaW5nPjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gZmVhdHVyZXMuZW5kKCk7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgU3RyaW5nIHMgPSAqaXQ7Ci0gICAgICAgIHNpemVfdCBwb3MgPSBzLmZpbmQo
Jz0nKTsKLSAgICAgICAgc2l6ZV90IGNvbG9uUG9zID0gcy5maW5kKCc6Jyk7Ci0gICAgICAgIGlm
IChwb3MgIT0gbm90Rm91bmQgJiYgY29sb25Qb3MgIT0gbm90Rm91bmQpCi0gICAgICAgICAgICBj
b250aW51ZTsgLy8gaWdub3JlIGFueSBzdHJpbmdzIHRoYXQgaGF2ZSBib3RoID0gYW5kIDoKLSAg
ICAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIHBvcyA9IGNvbG9uUG9zOwot
ICAgICAgICBpZiAocG9zID09IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAvLyBudWxsIHN0cmlu
ZyBmb3IgdmFsdWUgbWVhbnMga2V5IHdpdGhvdXQgdmFsdWUKLSAgICAgICAgICAgIG1hcC5zZXQo
cy5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpLCBTdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gcy5sZWZ0KHBvcykuc3RyaXBXaGl0ZVNwYWNlKCku
bG93ZXIoKTsKLSAgICAgICAgICAgIFN0cmluZyB2YWwgPSBzLnN1YnN0cmluZyhwb3MgKyAxKS5z
dHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOwotICAgICAgICAgICAgc2l6ZV90IHNwYWNlUG9zID0g
dmFsLmZpbmQoJyAnKTsKLSAgICAgICAgICAgIGlmIChzcGFjZVBvcyAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgICAgICB2YWwgPSB2YWwubGVmdChzcGFjZVBvcyk7Ci0gICAgICAgICAgICBtYXAu
c2V0KGtleSwgdmFsKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBXaW5kb3dGZWF0dXJlczo6cGFy
c2VEaWFsb2dGZWF0dXJlcyhzdHJpbmcsIG1hcCk7CiB9CiAKLWJvb2wgRE9NV2luZG93OjphbGxv
d1BvcFVwKEZyYW1lKiBhY3RpdmVGcmFtZSkKK2Jvb2wgRE9NV2luZG93OjphbGxvd1BvcFVwKEZy
YW1lKiBmaXJzdEZyYW1lKQogewotICAgIEFTU0VSVChhY3RpdmVGcmFtZSk7Ci0gICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gYWN0aXZlRnJhbWUtPnNldHRpbmdzKCk7CisgICAgQVNTRVJUKGZpcnN0
RnJhbWUpOworCisgICAgaWYgKFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZp
cnN0RnJhbWUtPnNldHRpbmdzKCk7CiAgICAgcmV0dXJuIHNldHRpbmdzICYmIHNldHRpbmdzLT5q
YXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7CiB9CiAKK2Jvb2wgRE9NV2lu
ZG93OjphbGxvd1BvcFVwKCkKK3sKKyAgICByZXR1cm4gbV9mcmFtZSAmJiBhbGxvd1BvcFVwKG1f
ZnJhbWUpOworfQorCiBib29sIERPTVdpbmRvdzo6Y2FuU2hvd01vZGFsRGlhbG9nKGNvbnN0IEZy
YW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lKQpAQCAtMTYxOCwzNCArMTYwOCwyOSBAQCB2
b2lkIERPTVdpbmRvdzo6cmV2b2tlT2JqZWN0VVJMKGNvbnN0IFN0CiB9CiAjZW5kaWYKIAotdm9p
ZCBET01XaW5kb3c6OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgbG9jYXRpb24sIERPTVdpbmRv
dyogYWN0aXZlV2luZG93LCBET01XaW5kb3cqIGZpcnN0V2luZG93KQordm9pZCBET01XaW5kb3c6
OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBET01XaW5kb3cqIGFjdGl2ZVdp
bmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdykKIHsKICAgICBGcmFtZSogYWN0aXZlRnJhbWUg
PSBhY3RpdmVXaW5kb3ctPmZyYW1lKCk7CiAgICAgaWYgKCFhY3RpdmVGcmFtZSkKICAgICAgICAg
cmV0dXJuOworCiAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2
aWdhdGlvbihtX2ZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRnJhbWUqIGZpcnN0RnJh
bWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsKICAgICBpZiAoIWZpcnN0RnJhbWUpCiAgICAgICAg
IHJldHVybjsKLSAgICBLVVJMIGxvY2F0aW9uVVJMID0gZmlyc3RGcmFtZS0+bG9hZGVyKCktPmNv
bXBsZXRlVVJMKGxvY2F0aW9uKTsKLSAgICBpZiAobG9jYXRpb25VUkwuaXNOdWxsKCkpCisKKyAg
ICBLVVJMIGNvbXBsZXRlZFVSTCA9IGZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KHVybFN0cmluZyk7CisgICAgaWYgKGNvbXBsZXRlZFVSTC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKHByb3RvY29sSXNKYXZhU2NyaXB0KGxvY2F0aW9uVVJMKSkgewotICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlcmUgc29tZSB3YXkgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZv
ciBhIHNlcGFyYXRlICJhY3RpdmVXaW5kb3cgIT0gdGhpcyIgY2hlY2s/Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGUgbmFtZSBjYW5BY2Nlc3Mgc2VlbXMgdG8gYmUgYSByb3VuZGFib3V0IHdheSB0byBh
c2sgImNhbiBleGVjdXRlIHNjcmlwdCIuCi0gICAgICAgIC8vIENhbiB3ZSBuYW1lIHRoZSBTZWN1
cml0eU9yaWdpbiBmdW5jdGlvbiBiZXR0ZXIgdG8gbWFrZSB0aGlzIG1vcmUgY2xlYXI/Ci0gICAg
ICAgIGlmIChhY3RpdmVXaW5kb3cgIT0gdGhpcyAmJiAhYWN0aXZlV2luZG93LT5zZWN1cml0eU9y
aWdpbigpLT5jYW5BY2Nlc3Moc2VjdXJpdHlPcmlnaW4oKSkpIHsKLSAgICAgICAgICAgIHByaW50
RXJyb3JNZXNzYWdlKGNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZVdpbmRvdykp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQorICAgIGlmIChpc0luc2Vj
dXJlU2NyaXB0QWNjZXNzKGFjdGl2ZVdpbmRvdywgdXJsU3RyaW5nKSkKKyAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gV2Ugd2FudCBhIG5ldyBoaXN0b3J5IGl0ZW0gaWYgd2UgYXJlIHByb2Nlc3Np
bmcgYSB1c2VyIGdlc3R1cmUuCiAgICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigpLT5z
Y2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLAotICAgICAgICBsb2NhdGlvblVSTCwgYWN0aXZlRnJhbWUtPmxvYWRlcigpLT5vdXRn
b2luZ1JlZmVycmVyKCksCisgICAgICAgIGNvbXBsZXRlZFVSTCwgYWN0aXZlRnJhbWUtPmxvYWRl
cigpLT5vdXRnb2luZ1JlZmVycmVyKCksCiAgICAgICAgICFhY3RpdmVGcmFtZS0+c2NyaXB0KCkt
PmFueVBhZ2VJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpLCBmYWxzZSk7CiB9CiAKQEAgLTE2Nzcs
NCArMTY2MiwxNjAgQEAgU3RyaW5nIERPTVdpbmRvdzo6Y3Jvc3NEb21haW5BY2Nlc3NFcnJvcgog
ICAgICAgICAiIGZyb20gZnJhbWUgd2l0aCBVUkwgIiwgYWN0aXZlV2luZG93VVJMLnN0cmluZygp
LCAiLiBEb21haW5zLCBwcm90b2NvbHMgYW5kIHBvcnRzIG11c3QgbWF0Y2guXG4iKTsKIH0KIAor
Ym9vbCBET01XaW5kb3c6OmlzSW5zZWN1cmVTY3JpcHRBY2Nlc3MoRE9NV2luZG93KiBhY3RpdmVX
aW5kb3csIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQoreworICAgIGlmICghcHJvdG9jb2xJc0ph
dmFTY3JpcHQodXJsU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklY
TUU6IElzIHRoZXJlIHNvbWUgd2F5IHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgYSBzZXBhcmF0
ZSAiYWN0aXZlV2luZG93ID09IHRoaXMiIGNoZWNrPworICAgIGlmIChhY3RpdmVXaW5kb3cgPT0g
dGhpcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoZSBuYW1lIGNh
bkFjY2VzcyBzZWVtcyB0byBiZSBhIHJvdW5kYWJvdXQgd2F5IHRvIGFzayAiY2FuIGV4ZWN1dGUg
c2NyaXB0Ii4KKyAgICAvLyBDYW4gd2UgbmFtZSB0aGUgU2VjdXJpdHlPcmlnaW4gZnVuY3Rpb24g
YmV0dGVyIHRvIG1ha2UgdGhpcyBtb3JlIGNsZWFyPworICAgIGlmIChhY3RpdmVXaW5kb3ctPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkFjY2VzcyhzZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcHJpbnRFcnJvck1lc3NhZ2UoY3Jvc3NEb21haW5BY2Nlc3NFcnJv
ck1lc3NhZ2UoYWN0aXZlV2luZG93KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZyYW1lKiBE
T01XaW5kb3c6OmNyZWF0ZVdpbmRvdyhjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRv
bWljU3RyaW5nJiBmcmFtZU5hbWUsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0dXJl
cywKKyAgICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRnJhbWUqIGZpcnN0RnJhbWUsIEZyYW1l
KiBvcGVuZXJGcmFtZSwgUHJlcGFyZURpYWxvZ0Z1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBmdW5j
dGlvbkNvbnRleHQpCit7CisgICAgQVNTRVJUKGZpcnN0RnJhbWUpOworCisgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVz
ZXMgdGhlIGR5bmFtaWNHbG9iYWxPYmplY3QgdG8gZGV0ZXJtaW5lCisgICAgLy8gdGhlIG91dGdv
aW5nUmVmZXJyZXIuIFdlIHJlcGxpY2F0ZSB0aGF0IGJlaGF2aW9yIGhlcmUuCisgICAgU3RyaW5n
IHJlZmVycmVyID0gZmlyc3RGcmFtZS0+bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBSZWZlcnJlcihyZWZlcnJlcik7CisgICAgRnJhbWVMb2FkZXI6OmFk
ZEhUVFBPcmlnaW5JZk5lZWRlZChyZXF1ZXN0LCBmaXJzdEZyYW1lLT5sb2FkZXIoKS0+b3V0Z29p
bmdPcmlnaW4oKSk7CisgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QoYWN0aXZlV2lu
ZG93LT5zZWN1cml0eU9yaWdpbigpLCByZXF1ZXN0LCBmcmFtZU5hbWUpOworCisgICAgLy8gRklY
TUU6IEl0J3MgbXVjaCBiZXR0ZXIgZm9yIGNsaWVudCBBUEkgaWYgYSBuZXcgd2luZG93IHN0YXJ0
cyB3aXRoIGEgVVJMLCBoZXJlIHdoZXJlIHdlCisgICAgLy8ga25vdyB3aGF0IFVSTCB3ZSBhcmUg
Z29pbmcgdG8gb3Blbi4gVW5mb3J0dW5hdGVseSwgdGhpcyBjb2RlIHBhc3NlcyB0aGUgZW1wdHkg
c3RyaW5nCisgICAgLy8gZm9yIHRoZSBVUkwsIGJ1dCB0aGVyZSdzIGEgcmVhc29uIGZvciB0aGF0
LiBCZWZvcmUgbG9hZGluZyB3ZSBoYXZlIHRvIHNldCB1cCB0aGUgb3BlbmVyLAorICAgIC8vIG9w
ZW5lZEJ5RE9NLCBhbmQgZGlhbG9nQXJndW1lbnRzIHZhbHVlcy4gQWxzbywgdG8gZGVjaWRlIHdo
ZXRoZXIgdG8gdXNlIHRoZSBVUkwgd2UgY3VycmVudGx5CisgICAgLy8gZG8gYW4gYWxsb3dzQWNj
ZXNzRnJvbSBjYWxsIHVzaW5nIHRoZSB3aW5kb3cgd2UgY3JlYXRlLCB3aGljaCBjYW4ndCBiZSBk
b25lIGJlZm9yZSBjcmVhdGluZyBpdC4KKyAgICAvLyBXZSdkIGhhdmUgdG8gcmVzb2x2ZSBhbGwg
dGhvc2UgaXNzdWVzIHRvIHBhc3MgdGhlIFVSTCBpbnN0ZWFkIG9mICIiLgorCisgICAgRnJhbWUq
IGFjdGl2ZUZyYW1lID0gYWN0aXZlV2luZG93LT5mcmFtZSgpOworCisgICAgYm9vbCBjcmVhdGVk
OworICAgIC8vIFdlIHBhc3MgdGhlIG9wZW5lciBmcmFtZSBmb3IgdGhlIGxvb2t1cEZyYW1lIGlu
IGNhc2UgdGhlIGFjdGl2ZSBmcmFtZSBpcyBkaWZmZXJlbnQgZnJvbQorICAgIC8vIHRoZSBvcGVu
ZXIgZnJhbWUsIGFuZCB0aGUgbmFtZSByZWZlcmVuY2VzIGEgZnJhbWUgcmVsYXRpdmUgdG8gdGhl
IG9wZW5lciBmcmFtZS4KKyAgICBGcmFtZSogbmV3RnJhbWUgPSBXZWJDb3JlOjpjcmVhdGVXaW5k
b3coYWN0aXZlRnJhbWUsIG9wZW5lckZyYW1lLCBmcmFtZVJlcXVlc3QsIHdpbmRvd0ZlYXR1cmVz
LCBjcmVhdGVkKTsKKyAgICBpZiAoIW5ld0ZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IG5ld0ZyYW1lLT5sb2FkZXIoKS0+c2V0T3BlbmVyKG9wZW5lckZyYW1lKTsKKyAgICBuZXdGcmFt
ZS0+cGFnZSgpLT5zZXRPcGVuZWRCeURPTSgpOworCisgICAgaWYgKG5ld0ZyYW1lLT5kb21XaW5k
b3coKS0+aXNJbnNlY3VyZVNjcmlwdEFjY2VzcyhhY3RpdmVXaW5kb3csIHVybFN0cmluZykpCisg
ICAgICAgIHJldHVybiBuZXdGcmFtZTsKKworICAgIGlmIChmdW5jdGlvbikKKyAgICAgICAgZnVu
Y3Rpb24obmV3RnJhbWUtPmRvbVdpbmRvdygpLCBmdW5jdGlvbkNvbnRleHQpOworCisgICAgS1VS
TCBjb21wbGV0ZWRVUkwgPSB1cmxTdHJpbmcuaXNFbXB0eSgpID8gS1VSTChQYXJzZWRVUkxTdHJp
bmcsICIiKSA6IGZpcnN0RnJhbWUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybFN0cmluZyk7
CisKKyAgICBpZiAoY3JlYXRlZCkKKyAgICAgICAgbmV3RnJhbWUtPmxvYWRlcigpLT5jaGFuZ2VM
b2NhdGlvbihhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTCwgcmVm
ZXJyZXIsIGZhbHNlLCBmYWxzZSk7CisgICAgZWxzZSBpZiAoIXVybFN0cmluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgbmV3RnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS0+c2NoZWR1bGVMb2Nh
dGlvbkNoYW5nZShhY3RpdmVXaW5kb3ctPnNlY3VyaXR5T3JpZ2luKCksIGNvbXBsZXRlZFVSTC5z
dHJpbmcoKSwgcmVmZXJyZXIsCisgICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgpLT5h
bnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworICAgIH0KKworICAgIHJl
dHVybiBuZXdGcmFtZTsKK30KKworUGFzc1JlZlB0cjxET01XaW5kb3c+IERPTVdpbmRvdzo6b3Bl
bihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBmcmFtZU5hbWUs
IGNvbnN0IFN0cmluZyYgd2luZG93RmVhdHVyZXNTdHJpbmcsCisgICAgRE9NV2luZG93KiBhY3Rp
dmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3cpCit7CisgICAgaWYgKCFtX2ZyYW1lKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBhY3RpdmVXaW5kb3ct
PmZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
RnJhbWUqIGZpcnN0RnJhbWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZpcnN0
RnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFmaXJzdFdpbmRvdy0+YWxsb3dQ
b3BVcCgpKSB7CisgICAgICAgIC8vIEJlY2F1c2UgRnJhbWVUcmVlOjpmaW5kKCkgcmV0dXJucyB0
cnVlIGZvciBlbXB0eSBzdHJpbmdzLCB3ZSBtdXN0IGNoZWNrIGZvciBlbXB0eSBmcmFtZSBuYW1l
cy4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbGxlZ2l0aW1hdGUgd2luZG93Lm9wZW4oKSBjYWxs
cyB3aXRoIG5vIG5hbWUgd2lsbCBwYXNzIHJpZ2h0IHRocm91Z2ggdGhlIHBvcHVwIGJsb2NrZXIu
CisgICAgICAgIGlmIChmcmFtZU5hbWUuaXNFbXB0eSgpIHx8ICFtX2ZyYW1lLT50cmVlKCktPmZp
bmQoZnJhbWVOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIEdl
dCB0aGUgdGFyZ2V0IGZyYW1lIGZvciB0aGUgc3BlY2lhbCBjYXNlcyBvZiBfdG9wIGFuZCBfcGFy
ZW50LgorICAgIC8vIEluIHRob3NlIGNhc2VzLCB3ZSBzY2hlZHVsZSBhIGxvY2F0aW9uIGNoYW5n
ZSByaWdodCBub3cgYW5kIHJldHVybiBlYXJseS4KKyAgICBGcmFtZSogdGFyZ2V0RnJhbWUgPSAw
OworICAgIGlmIChmcmFtZU5hbWUgPT0gIl90b3AiKQorICAgICAgICB0YXJnZXRGcmFtZSA9IG1f
ZnJhbWUtPnRyZWUoKS0+dG9wKCk7CisgICAgZWxzZSBpZiAoZnJhbWVOYW1lID09ICJfcGFyZW50
IikgeworICAgICAgICBpZiAoRnJhbWUqIHBhcmVudCA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50
KCkpCisgICAgICAgICAgICB0YXJnZXRGcmFtZSA9IHBhcmVudDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGFyZ2V0RnJhbWUgPSBtX2ZyYW1lOworICAgIH0KKyAgICBpZiAodGFyZ2V0RnJh
bWUpIHsKKyAgICAgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2
aWdhdGlvbih0YXJnZXRGcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBp
ZiAoaXNJbnNlY3VyZVNjcmlwdEFjY2VzcyhhY3RpdmVXaW5kb3csIHVybFN0cmluZykpCisgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0RnJhbWUtPmRvbVdpbmRvdygpOworCisgICAgICAgIGlmICh1
cmxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRhcmdldEZyYW1lLT5kb21X
aW5kb3coKTsKKworICAgICAgICAvLyBGb3Igd2hhdGV2ZXIgcmVhc29uLCBGaXJlZm94IHVzZXMg
dGhlIGZpcnN0IHdpbmRvdyByYXRoZXIgdGhhbiB0aGUgYWN0aXZlIHdpbmRvdyB0bworICAgICAg
ICAvLyBkZXRlcm1pbmUgdGhlIG91dGdvaW5nIHJlZmVycmVyLiBXZSByZXBsaWNhdGUgdGhhdCBi
ZWhhdmlvciBoZXJlLgorICAgICAgICB0YXJnZXRGcmFtZS0+bmF2aWdhdGlvblNjaGVkdWxlcigp
LT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGFjdGl2ZUZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0
eU9yaWdpbigpLAorICAgICAgICAgICAgZmlyc3RGcmFtZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsU3RyaW5nKS5zdHJpbmcoKSwKKyAgICAgICAgICAgIGZpcnN0RnJhbWUtPmxvYWRlcigp
LT5vdXRnb2luZ1JlZmVycmVyKCksCisgICAgICAgICAgICAhYWN0aXZlRnJhbWUtPnNjcmlwdCgp
LT5hbnlQYWdlSXNQcm9jZXNzaW5nVXNlckdlc3R1cmUoKSwgZmFsc2UpOworCisgICAgICAgIHJl
dHVybiB0YXJnZXRGcmFtZS0+ZG9tV2luZG93KCk7CisgICAgfQorCisgICAgV2luZG93RmVhdHVy
ZXMgd2luZG93RmVhdHVyZXMod2luZG93RmVhdHVyZXNTdHJpbmcpOworICAgIEZsb2F0UmVjdCB3
aW5kb3dSZWN0KHdpbmRvd0ZlYXR1cmVzLnhTZXQgPyB3aW5kb3dGZWF0dXJlcy54IDogMCwgd2lu
ZG93RmVhdHVyZXMueVNldCA/IHdpbmRvd0ZlYXR1cmVzLnkgOiAwLAorICAgICAgICB3aW5kb3dG
ZWF0dXJlcy53aWR0aFNldCA/IHdpbmRvd0ZlYXR1cmVzLndpZHRoIDogMCwgd2luZG93RmVhdHVy
ZXMuaGVpZ2h0U2V0ID8gd2luZG93RmVhdHVyZXMuaGVpZ2h0IDogMCk7CisgICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBET01XaW5kb3c6OmFkanVzdFdpbmRvd1JlY3Qoc2Ny
ZWVuQXZhaWxhYmxlUmVjdChwYWdlID8gcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKSA6IDApLCB3
aW5kb3dSZWN0LCB3aW5kb3dSZWN0KTsKKyAgICB3aW5kb3dGZWF0dXJlcy54ID0gd2luZG93UmVj
dC54KCk7CisgICAgd2luZG93RmVhdHVyZXMueSA9IHdpbmRvd1JlY3QueSgpOworICAgIHdpbmRv
d0ZlYXR1cmVzLmhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisgICAgd2luZG93RmVhdHVy
ZXMud2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7CisKKyAgICBGcmFtZSogcmVzdWx0ID0gY3Jl
YXRlV2luZG93KHVybFN0cmluZywgZnJhbWVOYW1lLCB3aW5kb3dGZWF0dXJlcywgYWN0aXZlV2lu
ZG93LCBmaXJzdEZyYW1lLCBtX2ZyYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0LT5k
b21XaW5kb3coKSA6IDA7Cit9CisKK3ZvaWQgRE9NV2luZG93OjpzaG93TW9kYWxEaWFsb2coY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcs
CisgICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRvdyogZmlyc3RXaW5kb3csIFBy
ZXBhcmVEaWFsb2dGdW5jdGlvbiBmdW5jdGlvbiwgdm9pZCogZnVuY3Rpb25Db250ZXh0KQorewor
ICAgIGlmICghbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lKiBhY3RpdmVGcmFt
ZSA9IGFjdGl2ZVdpbmRvdy0+ZnJhbWUoKTsKKyAgICBpZiAoIWFjdGl2ZUZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgRnJhbWUqIGZpcnN0RnJhbWUgPSBmaXJzdFdpbmRvdy0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZpcnN0RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY2FuU2hv
d01vZGFsRGlhbG9nTm93KG1fZnJhbWUpIHx8ICFmaXJzdFdpbmRvdy0+YWxsb3dQb3BVcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZGlhbG9nRnJhbWUgPSBjcmVhdGVXaW5kb3co
dXJsU3RyaW5nLCBlbXB0eUF0b20sIFdpbmRvd0ZlYXR1cmVzKGRpYWxvZ0ZlYXR1cmVzU3RyaW5n
LCBzY3JlZW5BdmFpbGFibGVSZWN0KG1fZnJhbWUtPnZpZXcoKSkpLAorICAgICAgICBhY3RpdmVX
aW5kb3csIGZpcnN0RnJhbWUsIG1fZnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkNvbnRleHQpOwor
ICAgIGlmICghZGlhbG9nRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGRpYWxvZ0ZyYW1l
LT5wYWdlKCktPmNocm9tZSgpLT5ydW5Nb2RhbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5oCShyZXZpc2lvbiA3MzY2MCkKKysrIFdlYkNvcmUvcGFnZS9ET01X
aW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywzNSArMjcs
MjcgQEAKICNpZm5kZWYgRE9NV2luZG93X2gKICNkZWZpbmUgRE9NV2luZG93X2gKIAotI2luY2x1
ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgQmFySW5mbzsK
LSAgICBjbGFzcyBCZWZvcmVVbmxvYWRFdmVudDsKICAgICBjbGFzcyBCbG9iOwogICAgIGNsYXNz
IENTU1J1bGVMaXN0OwogICAgIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CiAgICAgY2xhc3Mg
Q29uc29sZTsKKyAgICBjbGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwogICAgIGNsYXNzIERPTVNl
bGVjdGlvbjsKICAgICBjbGFzcyBEYXRhYmFzZTsKICAgICBjbGFzcyBEYXRhYmFzZUNhbGxiYWNr
OwogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRXJy
b3JDYWxsYmFjazsKLSAgICBjbGFzcyBFdmVudDsKICAgICBjbGFzcyBFdmVudExpc3RlbmVyOwog
ICAgIGNsYXNzIEZpbGVTeXN0ZW1DYWxsYmFjazsKICAgICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAg
Y2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgSGlzdG9yeTsKICAgICBjbGFzcyBJREJGYWN0b3J5Owog
ICAgIGNsYXNzIExvY2F0aW9uOwpAQCAtNjMsMjUgKzU1LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBjbGFzcyBOYXZpZ2F0b3I7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBOb3Rp
ZmljYXRpb25DZW50ZXI7Ci0gICAgY2xhc3MgU3R5bGVNZWRpYTsKLQotI2lmIEVOQUJMRShXRUJf
VElNSU5HKQogICAgIGNsYXNzIFBlcmZvcm1hbmNlOwotI2VuZGlmCi0KICAgICBjbGFzcyBQb3N0
TWVzc2FnZVRpbWVyOwogICAgIGNsYXNzIFNjaGVkdWxlZEFjdGlvbjsKLSAgICBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CiAgICAgY2xhc3MgU2NyZWVuOwotICAgIGNsYXNzIFdlYktpdFBv
aW50OwotCi0jaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKICAgICBjbGFzcyBTdG9yYWdlOwotI2VuZGlmCisgICAgY2xhc3MgU3R5bGVNZWRp
YTsKKyAgICBjbGFzcyBXZWJLaXRQb2ludDsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlMpCi0gICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNoZTsKLSNlbmRpZgorICAgIHN0
cnVjdCBXaW5kb3dGZWF0dXJlczsKIAogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
QEAgLTEwMCwxMyArODMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gbWF0Y2hNZWRpYShjb25zdCBTdHJpbmcmKTsKIAotI2lmIEVO
QUJMRShPUklFTlRBVElPTl9FVkVOVFMpCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGludGVyZmFj
ZSBvcmllbnRhdGlvbiBpbiBkZWdyZWVzLiBTb21lIGV4YW1wbGVzIGFyZToKLSAgICAgICAgLy8g
IDAgaXMgc3RyYWlnaHQgdXA7IC05MCBpcyB3aGVuIHRoZSBkZXZpY2UgaXMgcm90YXRlZCA5MCBj
bG9ja3dpc2U7Ci0gICAgICAgIC8vICA5MCBpcyB3aGVuIHJvdGF0ZWQgY291bnRlciBjbG9ja3dp
c2UuCi0gICAgICAgIGludCBvcmllbnRhdGlvbigpIGNvbnN0OwotI2VuZGlmCi0KICAgICAgICAg
dm9pZCBzZXRTZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pIHsg
bV9zZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOyB9CiAgICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VjdXJpdHlPcmlnaW4uZ2V0
KCk7IH0KIApAQCAtMTE5LDEzICs5NSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQWxsUGVuZGluZ1VubG9hZEV2ZW50cygpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGFkanVzdFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBzY3JlZW4sIEZs
b2F0UmVjdCYgd2luZG93LCBjb25zdCBGbG9hdFJlY3QmIHBlbmRpbmdDaGFuZ2VzKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgcGFyc2VNb2RhbERpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYgZmVh
dHVyZXNBcmcsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBtYXApOwogCi0gICAgICAgIHN0YXRp
YyBib29sIGFsbG93UG9wVXAoRnJhbWUqIGFjdGl2ZUZyYW1lKTsKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNhbiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBj
aGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCisgICAgICAgIHN0YXRpYyB2b2lkIHBhcnNlTW9kYWxE
aWFsb2dGZWF0dXJlcyhjb25zdCBTdHJpbmcmLCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpOwor
CisgICAgICAgIGJvb2wgYWxsb3dQb3BVcCgpOyAvLyBDYWxsIG9uIGZpcnN0IHdpbmRvdywgbm90
IHRhcmdldCB3aW5kb3cuCisgICAgICAgIHN0YXRpYyBib29sIGFsbG93UG9wVXAoRnJhbWUqIGZp
cnN0RnJhbWUpOwogICAgICAgICBzdGF0aWMgYm9vbCBjYW5TaG93TW9kYWxEaWFsb2coY29uc3Qg
RnJhbWUqKTsKICAgICAgICAgc3RhdGljIGJvb2wgY2FuU2hvd01vZGFsRGlhbG9nTm93KGNvbnN0
IEZyYW1lKik7CiAKICAgICAgICAgLy8gRE9NIExldmVsIDAKKwogICAgICAgICBTY3JlZW4qIHNj
cmVlbigpIGNvbnN0OwogICAgICAgICBIaXN0b3J5KiBoaXN0b3J5KCkgY29uc3Q7CiAgICAgICAg
IEJhckluZm8qIGxvY2F0aW9uYmFyKCkgY29uc3Q7CkBAIC0xMzYsMTEgKzExNiw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgQmFySW5mbyogdG9vbGJhcigpIGNvbnN0OwogICAgICAg
ICBOYXZpZ2F0b3IqIG5hdmlnYXRvcigpIGNvbnN0OwogICAgICAgICBOYXZpZ2F0b3IqIGNsaWVu
dEluZm9ybWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbmF2aWdhdG9yKCk7IH0KLSNpZiBFTkFCTEUo
V0VCX1RJTUlORykKLSAgICAgICAgUGVyZm9ybWFuY2UqIHdlYmtpdFBlcmZvcm1hbmNlKCkgY29u
c3Q7Ci0jZW5kaWYKLSAgICAgICAgTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CiAKKyAgICAg
ICAgTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0TG9jYXRpb24o
Y29uc3QgU3RyaW5nJiBsb2NhdGlvbiwgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIERPTVdpbmRv
dyogZmlyc3RXaW5kb3cpOwogCiAgICAgICAgIERPTVNlbGVjdGlvbiogZ2V0U2VsZWN0aW9uKCk7
CkBAIC0xNTMsNiArMTMwLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBw
cmludCgpOwogICAgICAgICB2b2lkIHN0b3AoKTsKIAorICAgICAgICBQYXNzUmVmUHRyPERPTVdp
bmRvdz4gb3Blbihjb25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgQXRvbWljU3RyaW5nJiBm
cmFtZU5hbWUsIGNvbnN0IFN0cmluZyYgd2luZG93RmVhdHVyZXNTdHJpbmcsCisgICAgICAgICAg
ICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdyk7CisKKyAg
ICAgICAgdHlwZWRlZiB2b2lkICgqUHJlcGFyZURpYWxvZ0Z1bmN0aW9uKShET01XaW5kb3cqLCB2
b2lkKiBjb250ZXh0KTsKKyAgICAgICAgdm9pZCBzaG93TW9kYWxEaWFsb2coY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGlhbG9nRmVhdHVyZXNTdHJpbmcsCisgICAgICAg
ICAgICBET01XaW5kb3cqIGFjdGl2ZVdpbmRvdywgRE9NV2luZG93KiBmaXJzdFdpbmRvdywgUHJl
cGFyZURpYWxvZ0Z1bmN0aW9uLCB2b2lkKiBmdW5jdGlvbkNvbnRleHQpOworCiAgICAgICAgIHZv
aWQgYWxlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICAgICAgYm9vbCBjb25maXJtKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAgICAgIFN0cmluZyBwcm9tcHQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSk7CkBAIC0xODcsMTEgKzE3MSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKGNvbnN0IFN0
cmluZyYpOwogICAgICAgICBTdHJpbmcgZGVmYXVsdFN0YXR1cygpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldERlZmF1bHRTdGF0dXMoY29uc3QgU3RyaW5nJik7CisKICAgICAgICAgLy8gVGhpcyBh
dHRyaWJ1dGUgaXMgYW4gYWxpYXMgb2YgZGVmYXVsdFN0YXR1cyBhbmQgaXMgbmVjZXNzYXJ5IGZv
ciBsZWdhY3kgdXNlcy4KICAgICAgICAgU3RyaW5nIGRlZmF1bHRzdGF0dXMoKSBjb25zdCB7IHJl
dHVybiBkZWZhdWx0U3RhdHVzKCk7IH0KICAgICAgICAgdm9pZCBzZXREZWZhdWx0c3RhdHVzKGNv
bnN0IFN0cmluZyYgc3RhdHVzKSB7IHNldERlZmF1bHRTdGF0dXMoc3RhdHVzKTsgfQogCi0gICAg
ICAgIC8vIFNlbGYgcmVmZXJlbnRpYWwgYXR0cmlidXRlcworICAgICAgICAvLyBTZWxmLXJlZmVy
ZW50aWFsIGF0dHJpYnV0ZXMKKwogICAgICAgICBET01XaW5kb3cqIHNlbGYoKSBjb25zdDsKICAg
ICAgICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiBzZWxmKCk7IH0KICAgICAg
ICAgRE9NV2luZG93KiBmcmFtZXMoKSBjb25zdCB7IHJldHVybiBzZWxmKCk7IH0KQEAgLTIwMSw1
OSArMTg3LDMyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRE9NV2luZG93KiB0b3Ao
KSBjb25zdDsKIAogICAgICAgICAvLyBET00gTGV2ZWwgMiBBYnN0cmFjdFZpZXcgSW50ZXJmYWNl
CisKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKICAgICAgICAgLy8gQ1NT
T00gVmlldyBNb2R1bGUKKwogICAgICAgICBQYXNzUmVmUHRyPFN0eWxlTWVkaWE+IHN0eWxlTWVk
aWEoKSBjb25zdDsKIAogICAgICAgICAvLyBET00gTGV2ZWwgMiBTdHlsZSBJbnRlcmZhY2UKKwog
ICAgICAgICBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IGdldENvbXB1dGVkU3R5bGUo
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgcHNldWRvRWx0KSBjb25zdDsKIAogICAgICAgICAvLyBX
ZWJLaXQgZXh0ZW5zaW9ucworCiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGdldE1h
dGNoZWRDU1NSdWxlcyhFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9FbHQsIGJvb2wgYXV0
aG9yT25seSA9IHRydWUpIGNvbnN0OwogICAgICAgICBkb3VibGUgZGV2aWNlUGl4ZWxSYXRpbygp
IGNvbnN0OwogCi0gICAgICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IHdlYmtpdENvbnZlcnRQ
b2ludEZyb21QYWdlVG9Ob2RlKE5vZGUqIG5vZGUsIGNvbnN0IFdlYktpdFBvaW50KiBwKSBjb25z
dDsKLSAgICAgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gd2Via2l0Q29udmVydFBvaW50RnJv
bU5vZGVUb1BhZ2UoTm9kZSogbm9kZSwgY29uc3QgV2ViS2l0UG9pbnQqIHApIGNvbnN0OyAgICAg
ICAgCi0KLSNpZiBFTkFCTEUoREFUQUJBU0UpCi0gICAgICAgIC8vIEhUTUwgNSBjbGllbnQtc2lk
ZSBkYXRhYmFzZQotICAgICAgICBQYXNzUmVmUHRyPERhdGFiYXNlPiBvcGVuRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlz
cGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFz
ZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQot
I2lmIEVOQUJMRShET01fU1RPUkFHRSkKLSAgICAgICAgLy8gSFRNTCA1IGtleS92YWx1ZSBzdG9y
YWdlCi0gICAgICAgIFN0b3JhZ2UqIHNlc3Npb25TdG9yYWdlKEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLSAgICAgICAgU3RvcmFnZSogbG9jYWxTdG9yYWdlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
LSNlbmRpZgorICAgICAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB3ZWJraXRDb252ZXJ0UG9p
bnRGcm9tUGFnZVRvTm9kZShOb2RlKiwgY29uc3QgV2ViS2l0UG9pbnQqKSBjb25zdDsKKyAgICAg
ICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gd2Via2l0Q29udmVydFBvaW50RnJvbU5vZGVUb1Bh
Z2UoTm9kZSosIGNvbnN0IFdlYktpdFBvaW50KikgY29uc3Q7ICAgICAgICAKIAogICAgICAgICBD
b25zb2xlKiBjb25zb2xlKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBwcmludEVycm9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgU3RyaW5nIGNyb3NzRG9tYWluQWNjZXNzRXJyb3JN
ZXNzYWdlKERPTVdpbmRvdyogYWN0aXZlV2luZG93KTsKIAotI2lmIEVOQUJMRShPRkZMSU5FX1dF
Ql9BUFBMSUNBVElPTlMpCi0gICAgICAgIERPTUFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9u
Q2FjaGUoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAg
ICAgIE5vdGlmaWNhdGlvbkNlbnRlciogd2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OwotI2Vu
ZGlmCi0KICAgICAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCk7CiAKLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSAgICAgICAgSURCRmFjdG9yeSogd2Via2l0SW5kZXhlZERCKCkgY29uc3Q7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShGSUxFX1NZU1RFTSkKLSAgICAgICAgLy8gVGhleSBhcmUg
cGxhY2VkIGhlcmUgYW5kIGluIGFsbCBjYXBpdGFsIGxldHRlcnMgdG8gZW5mb3JjZSBjb21waWxl
LXRpbWUgZW51bSBjaGVja2luZy4KLSAgICAgICAgZW51bSBGaWxlU3lzdGVtVHlwZSB7Ci0gICAg
ICAgICAgICBURU1QT1JBUlksCi0gICAgICAgICAgICBQRVJTSVNURU5ULAotICAgICAgICB9Owot
ICAgICAgICB2b2lkIHJlcXVlc3RGaWxlU3lzdGVtKGludCB0eXBlLCBsb25nIGxvbmcgc2l6ZSwg
UGFzc1JlZlB0cjxGaWxlU3lzdGVtQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+
KTsKLSNlbmRpZgotCiAgICAgICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IG1lc3NhZ2UsIGNvbnN0IE1lc3NhZ2VQb3J0QXJyYXkqLCBjb25zdCBT
dHJpbmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICAgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHdoZW4gd2UgdXBkYXRlIHRoZSBPYmpDIGJp
bmRpbmdzIChidWcgIzI4Nzc0KS4KICAgICAgICAgdm9pZCBwb3N0TWVzc2FnZShQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbWVzc2FnZSwgTWVzc2FnZVBvcnQqLCBjb25zdCBTdHJp
bmcmIHRhcmdldE9yaWdpbiwgRE9NV2luZG93KiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmKTsKQEAg
LTM1MiwzMyArMzExLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVGSU5FX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRiZWdpbmZ1bGxzY3JlZW4pOwogICAgICAgICBE
RUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGVuZGZ1bGxzY3JlZW4pOwogCi0j
aWYgRU5BQkxFKE9SSUVOVEFUSU9OX0VWRU5UUykKLSAgICAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihvcmllbnRhdGlvbmNoYW5nZSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShE
RVZJQ0VfT1JJRU5UQVRJT04pCi0gICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoZGV2aWNlbW90aW9uKTsKLSAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihkZXZpY2VvcmllbnRhdGlvbik7Ci0jZW5kaWYKLQogICAgICAgICBERUZJTkVfTUFQUEVEX0FU
VFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRhbmltYXRpb25zdGFydCwgd2Via2l0QW5pbWF0
aW9uU3RhcnQpOwogICAgICAgICBERUZJTkVfTUFQUEVEX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
Uih3ZWJraXRhbmltYXRpb25pdGVyYXRpb24sIHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbik7CiAg
ICAgICAgIERFRklORV9NQVBQRURfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdGFuaW1h
dGlvbmVuZCwgd2Via2l0QW5pbWF0aW9uRW5kKTsKICAgICAgICAgREVGSU5FX01BUFBFRF9BVFRS
SUJVVEVfRVZFTlRfTElTVEVORVIod2Via2l0dHJhbnNpdGlvbmVuZCwgd2Via2l0VHJhbnNpdGlv
bkVuZCk7CiAKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKHRvdWNoc3RhcnQpOwotICAgICAgICBERUZJTkVfQVRUUklCVVRF
X0VWRU5UX0xJU1RFTkVSKHRvdWNobW92ZSk7Ci0gICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIodG91Y2hlbmQpOwotICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJ
U1RFTkVSKHRvdWNoY2FuY2VsKTsKLSNlbmRpZgogICAgICAgICB2b2lkIGNhcHR1cmVFdmVudHMo
KTsKICAgICAgICAgdm9pZCByZWxlYXNlRXZlbnRzKCk7CiAKICAgICAgICAgdm9pZCBmaW5pc2hl
ZExvYWRpbmcoKTsKIAotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBHQyBt
YXJraW5nLiBTZWUgSlNET01XaW5kb3c6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smKSBpbgotICAg
ICAgICAvLyBKU0RPTVdpbmRvd0N1c3RvbS5jcHAuCisgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9u
cyBhcmUgdXNlZCBmb3IgR0MgbWFya2luZy4gU2VlIEpTRE9NV2luZG93OjptYXJrQ2hpbGRyZW4o
TWFya1N0YWNrJikgaW4gSlNET01XaW5kb3dDdXN0b20uY3BwLgogICAgICAgICBTY3JlZW4qIG9w
dGlvbmFsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW4uZ2V0KCk7IH0KICAgICAgICAg
RE9NU2VsZWN0aW9uKiBvcHRpb25hbFNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmdldCgpOyB9CiAgICAgICAgIEhpc3RvcnkqIG9wdGlvbmFsSGlzdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1faGlzdG9yeS5nZXQoKTsgfQpAQCAtMzkwLDI1ICszMzMsNzggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBCYXJJbmZvKiBvcHRpb25hbFRvb2xiYXIoKSBjb25zdCB7IHJl
dHVybiBtX3Rvb2xiYXIuZ2V0KCk7IH0KICAgICAgICAgQ29uc29sZSogb3B0aW9uYWxDb25zb2xl
KCkgY29uc3QgeyByZXR1cm4gbV9jb25zb2xlLmdldCgpOyB9CiAgICAgICAgIE5hdmlnYXRvciog
b3B0aW9uYWxOYXZpZ2F0b3IoKSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRvci5nZXQoKTsgfQot
I2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBQZXJmb3JtYW5jZSogb3B0aW9uYWxXZWJr
aXRQZXJmb3JtYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyZm9ybWFuY2UuZ2V0KCk7IH0KLSNl
bmRpZgogICAgICAgICBMb2NhdGlvbiogb3B0aW9uYWxMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYXRpb24uZ2V0KCk7IH0KICAgICAgICAgU3R5bGVNZWRpYSogb3B0aW9uYWxNZWRpYSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWVkaWEuZ2V0KCk7IH0KKworICAgICAgICB1c2luZyBSZWZDb3Vu
dGVkPERPTVdpbmRvdz46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxET01XaW5kb3c+
OjpkZXJlZjsKKworI2lmIEVOQUJMRShCTE9CKQorICAgICAgICBTdHJpbmcgY3JlYXRlT2JqZWN0
VVJMKEJsb2IqKTsKKyAgICAgICAgdm9pZCByZXZva2VPYmplY3RVUkwoY29uc3QgU3RyaW5nJik7
CisjZW5kaWYKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKyAgICAgICAgLy8gSFRNTCA1IGNsaWVu
dC1zaWRlIGRhdGFiYXNlCisgICAgICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKKyAgICAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihkZXZpY2Vtb3Rpb24pOworICAgICAgICBERUZJTkVfQVRUUklC
VVRFX0VWRU5UX0xJU1RFTkVSKGRldmljZW9yaWVudGF0aW9uKTsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQorICAgICAgICAvLyBIVE1MIDUga2V5L3ZhbHVlIHN0b3JhZ2UKKyAg
ICAgICAgU3RvcmFnZSogc2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAg
ICAgICBTdG9yYWdlKiBsb2NhbFN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgICAg
ICBTdG9yYWdlKiBvcHRpb25hbFNlc3Npb25TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9zZXNz
aW9uU3RvcmFnZS5nZXQoKTsgfQogICAgICAgICBTdG9yYWdlKiBvcHRpb25hbExvY2FsU3RvcmFn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOyB9CiAjZW5kaWYKKworI2lm
IEVOQUJMRShGSUxFX1NZU1RFTSkKKyAgICAgICAgLy8gVGhleSBhcmUgcGxhY2VkIGhlcmUgYW5k
IGluIGFsbCBjYXBpdGFsIGxldHRlcnMgc28gdGhleSBjYW4gYmUgY2hlY2tlZCBhZ2FpbnN0IHRo
ZSBjb25zdGFudHMgaW4gdGhlCisgICAgICAgIC8vIElETCBhdCBjb21waWxlIHRpbWUuCisgICAg
ICAgIGVudW0gRmlsZVN5c3RlbVR5cGUgeworICAgICAgICAgICAgVEVNUE9SQVJZLAorICAgICAg
ICAgICAgUEVSU0lTVEVOVCwKKyAgICAgICAgfTsKKyAgICAgICAgdm9pZCByZXF1ZXN0RmlsZVN5
c3RlbShpbnQgdHlwZSwgbG9uZyBsb25nIHNpemUsIFBhc3NSZWZQdHI8RmlsZVN5c3RlbUNhbGxi
YWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisjZW5kaWYKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorICAgICAgICBJREJGYWN0b3J5KiB3ZWJraXRJbmRleGVkREIoKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCisgICAgICAgIE5vdGlm
aWNhdGlvbkNlbnRlciogd2Via2l0Tm90aWZpY2F0aW9ucygpIGNvbnN0OworI2VuZGlmCisKICNp
ZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQorICAgICAgICBET01BcHBsaWNhdGlv
bkNhY2hlKiBhcHBsaWNhdGlvbkNhY2hlKCkgY29uc3Q7CiAgICAgICAgIERPTUFwcGxpY2F0aW9u
Q2FjaGUqIG9wdGlvbmFsQXBwbGljYXRpb25DYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbGlj
YXRpb25DYWNoZS5nZXQoKTsgfQogI2VuZGlmCi0jaWYgRU5BQkxFKEJMT0IpCi0gICAgICAgIFN0
cmluZyBjcmVhdGVPYmplY3RVUkwoQmxvYiopOwotICAgICAgICB2b2lkIHJldm9rZU9iamVjdFVS
TChjb25zdCBTdHJpbmcmKTsKKworI2lmIEVOQUJMRShPUklFTlRBVElPTl9FVkVOVFMpCisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGludGVyZmFjZSBvcmllbnRhdGlvbiBpbiBkZWdyZWVzLiBTb21l
IGV4YW1wbGVzIGFyZToKKyAgICAgICAgLy8gIDAgaXMgc3RyYWlnaHQgdXA7IC05MCBpcyB3aGVu
IHRoZSBkZXZpY2UgaXMgcm90YXRlZCA5MCBjbG9ja3dpc2U7CisgICAgICAgIC8vICA5MCBpcyB3
aGVuIHJvdGF0ZWQgY291bnRlciBjbG9ja3dpc2UuCisgICAgICAgIGludCBvcmllbnRhdGlvbigp
IGNvbnN0OworCisgICAgICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIob3JpZW50
YXRpb25jaGFuZ2UpOwogI2VuZGlmCiAKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxET01XaW5k
b3c+OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RE9NV2luZG93Pjo6ZGVyZWY7Cisj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9M
SVNURU5FUih0b3VjaHN0YXJ0KTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUih0b3VjaG1vdmUpOworICAgICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHRvdWNoZW5kKTsKKyAgICAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih0b3Vj
aGNhbmNlbCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfVElNSU5HKQorICAgICAgICBQZXJm
b3JtYW5jZSogd2Via2l0UGVyZm9ybWFuY2UoKSBjb25zdDsKKyAgICAgICAgUGVyZm9ybWFuY2Uq
IG9wdGlvbmFsV2Via2l0UGVyZm9ybWFuY2UoKSBjb25zdCB7IHJldHVybiBtX3BlcmZvcm1hbmNl
LmdldCgpOyB9CisjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIERPTVdpbmRvdyhGcmFt
ZSopOwpAQCAtNDE4LDYgKzQxNCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsKICAgICAgICAgdmlydHVh
bCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCisgICAgICAgIHN0
YXRpYyBGcmFtZSogY3JlYXRlV2luZG93KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBB
dG9taWNTdHJpbmcmIGZyYW1lTmFtZSwgY29uc3QgV2luZG93RmVhdHVyZXMmLAorICAgICAgICAg
ICAgRE9NV2luZG93KiBhY3RpdmVXaW5kb3csIEZyYW1lKiBmaXJzdEZyYW1lLCBGcmFtZSogb3Bl
bmVyRnJhbWUsCisgICAgICAgICAgICBQcmVwYXJlRGlhbG9nRnVuY3Rpb24gPSAwLCB2b2lkKiBm
dW5jdGlvbkNvbnRleHQgPSAwKTsKKyAgICAgICAgYm9vbCBpc0luc2VjdXJlU2NyaXB0QWNjZXNz
KERPTVdpbmRvdyogYWN0aXZlV2luZG93LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CisKICAg
ICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwogICAgICAgICBL
VVJMIG1fdXJsOwogCkBAIC00MzQsMjkgKzQzNSwzNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIG11dGFibGUgUmVmUHRyPEJhckluZm8+IG1fdG9vbGJhcjsKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8Q29uc29sZT4gbV9jb25zb2xlOwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxOYXZp
Z2F0b3I+IG1fbmF2aWdhdG9yOwotI2lmIEVOQUJMRShXRUJfVElNSU5HKQotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxQZXJmb3JtYW5jZT4gbV9wZXJmb3JtYW5jZTsKLSNlbmRpZgogICAgICAgICBt
dXRhYmxlIFJlZlB0cjxMb2NhdGlvbj4gbV9sb2NhdGlvbjsKICAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U3R5bGVNZWRpYT4gbV9tZWRpYTsKKworICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVu
dFRhcmdldERhdGE7CisKKyAgICAgICAgU3RyaW5nIG1fc3RhdHVzOworICAgICAgICBTdHJpbmcg
bV9kZWZhdWx0U3RhdHVzOworCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTdG9yYWdlPiBtX3Nlc3Npb25TdG9yYWdlOwogICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTdG9yYWdlPiBtX2xvY2FsU3RvcmFnZTsKICNlbmRpZgorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisgICAgICAgIG11dGFibGUgUmVmUHRyPElEQkZhY3Rvcnk+IG1faWRiRmFj
dG9yeTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8RE9NQXBwbGljYXRpb25DYWNoZT4gbV9hcHBsaWNhdGlvbkNh
Y2hlOwogI2VuZGlmCisKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8Tm90aWZpY2F0aW9uQ2VudGVyPiBtX25vdGlmaWNhdGlvbnM7CiAjZW5kaWYKLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8SURCRmFj
dG9yeT4gbV9pZGJGYWN0b3J5OwotI2VuZGlmCi0KLSAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1f
ZXZlbnRUYXJnZXREYXRhOwogCi0gICAgICAgIFN0cmluZyBtX3N0YXR1czsKLSAgICAgICAgU3Ry
aW5nIG1fZGVmYXVsdFN0YXR1czsKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICAgICAgbXV0
YWJsZSBSZWZQdHI8UGVyZm9ybWFuY2U+IG1fcGVyZm9ybWFuY2U7CisjZW5kaWYKICAgICB9Owog
CiAgICAgaW5saW5lIFN0cmluZyBET01XaW5kb3c6OnN0YXR1cygpIGNvbnN0CkluZGV4OiBXZWJD
b3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAJKHJldmlzaW9uIDczNjYwKQorKysgV2ViQ29yZS9wYWdlL1dpbmRv
d0ZlYXR1cmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1KQotICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2V2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTIzLDE2ICsyMywxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldpbmRvd0Zl
YXR1cmVzLmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUaG91Z2ggaXNzcGFjZSgp
IGNvbnNpZGVycyBcdCBhbmQgXHYgdG8gYmUgd2hpdGVzcGFjZSwgV2luIElFIGRvZXNuJ3QuCi1z
dGF0aWMgYm9vbCBpc1NlcGFyYXRvcihVQ2hhciBjKQorLy8gVGhvdWdoIGlzc3BhY2UoKSBjb25z
aWRlcnMgXHQgYW5kIFx2IHRvIGJlIHdoaXRlc3BhY2UsIFdpbiBJRSBkb2Vzbid0IHdoZW4gcGFy
c2luZyB3aW5kb3cgZmVhdHVyZXMuCitzdGF0aWMgYm9vbCBpc1dpbmRvd0ZlYXR1cmVzU2VwYXJh
dG9yKFVDaGFyIGMpCiB7CiAgICAgcmV0dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09
ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJz0nIHx8IGMgPT0gJywnIHx8IGMgPT0gJ1wwJzsK
IH0KQEAgLTgwLDcgKzgwLDcgQEAgV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1cmVzKGNvbnN0
IFN0cgogICAgIFN0cmluZyBidWZmZXIgPSBmZWF0dXJlcy5sb3dlcigpOwogICAgIHdoaWxlIChp
IDwgbGVuZ3RoKSB7CiAgICAgICAgIC8vIHNraXAgdG8gZmlyc3Qgbm9uLXNlcGFyYXRvciwgYnV0
IGRvbid0IHNraXAgcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKLSAgICAgICAgd2hpbGUgKGlz
U2VwYXJhdG9yKGJ1ZmZlcltpXSkpIHsKKyAgICAgICAgd2hpbGUgKGlzV2luZG93RmVhdHVyZXNT
ZXBhcmF0b3IoYnVmZmVyW2ldKSkgewogICAgICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwpAQCAtODgsNyArODgsNyBAQCBX
aW5kb3dGZWF0dXJlczo6V2luZG93RmVhdHVyZXMoY29uc3QgU3RyCiAgICAgICAgIGtleUJlZ2lu
ID0gaTsKIAogICAgICAgICAvLyBza2lwIHRvIGZpcnN0IHNlcGFyYXRvcgotICAgICAgICB3aGls
ZSAoIWlzU2VwYXJhdG9yKGJ1ZmZlcltpXSkpCisgICAgICAgIHdoaWxlICghaXNXaW5kb3dGZWF0
dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKQogICAgICAgICAgICAgaSsrOwogICAgICAgICBrZXlF
bmQgPSBpOwogCkBAIC0xMDAsNyArMTAwLDcgQEAgV2luZG93RmVhdHVyZXM6OldpbmRvd0ZlYXR1
cmVzKGNvbnN0IFN0cgogICAgICAgICB9CiAKICAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBub24t
c2VwYXJhdG9yLCBidXQgZG9uJ3Qgc2tpcCBwYXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0
cmluZwotICAgICAgICB3aGlsZSAoaXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkgeworICAgICAgICB3
aGlsZSAoaXNXaW5kb3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7CiAgICAgICAgICAg
ICBpZiAoYnVmZmVyW2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGkrKzsKQEAgLTEwOCw3ICsxMDgsNyBAQCBXaW5kb3dGZWF0dXJl
czo6V2luZG93RmVhdHVyZXMoY29uc3QgU3RyCiAgICAgICAgIHZhbHVlQmVnaW4gPSBpOwogCiAg
ICAgICAgIC8vIHNraXAgdG8gZmlyc3Qgc2VwYXJhdG9yCi0gICAgICAgIHdoaWxlICghaXNTZXBh
cmF0b3IoYnVmZmVyW2ldKSkKKyAgICAgICAgd2hpbGUgKCFpc1dpbmRvd0ZlYXR1cmVzU2VwYXJh
dG9yKGJ1ZmZlcltpXSkpCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIHZhbHVlRW5kID0gaTsK
IApAQCAtMTI1LDEyICsxMjUsMTQgQEAgdm9pZCBXaW5kb3dGZWF0dXJlczo6c2V0V2luZG93RmVh
dHVyZShjbwogICAgIGludCB2YWx1ZTsKIAogICAgIC8vIExpc3RpbmcgYSBrZXkgd2l0aCBubyB2
YWx1ZSBpcyBzaG9ydGhhbmQgZm9yIGtleT15ZXMKLSAgICBpZiAodmFsdWVTdHJpbmcubGVuZ3Ro
KCkgPT0gMCB8fCB2YWx1ZVN0cmluZyA9PSAieWVzIikKKyAgICBpZiAodmFsdWVTdHJpbmcuaXNF
bXB0eSgpIHx8IHZhbHVlU3RyaW5nID09ICJ5ZXMiKQogICAgICAgICB2YWx1ZSA9IDE7CiAgICAg
ZWxzZQogICAgICAgICB2YWx1ZSA9IHZhbHVlU3RyaW5nLnRvSW50KCk7CiAKLSAgICAvLyBXZSBp
Z25vcmUgYSBrZXlTdHJpbmcgb2YgInJlc2l6YWJsZSIsIHdoaWNoIGlzIGNvbnNpc3RlbnQgd2l0
aCBGaXJlZm94LgorICAgIC8vIFdlIHRyZWF0IGtleVN0cmluZyBvZiAicmVzaXphYmxlIiBoZXJl
IGFzIGFuIGFkZGl0aW9uYWwgZmVhdHVyZSByYXRoZXIgdGhhbiBzZXR0aW5nIHJlc2l6ZWFibGUg
dG8gdHJ1ZS4KKyAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBGaXJlZm94LCBidXQgY291
bGQgYWxzbyBiZSBoYW5kbGVkIGF0IGFub3RoZXIgbGV2ZWwuCisKICAgICBpZiAoa2V5U3RyaW5n
ID09ICJsZWZ0IiB8fCBrZXlTdHJpbmcgPT0gInNjcmVlbngiKSB7CiAgICAgICAgIHhTZXQgPSB0
cnVlOwogICAgICAgICB4ID0gdmFsdWU7CkBAIC0xNTksMzIgKzE2MSwxMDYgQEAgdm9pZCBXaW5k
b3dGZWF0dXJlczo6c2V0V2luZG93RmVhdHVyZShjbwogICAgICAgICBhZGRpdGlvbmFsRmVhdHVy
ZXMuYXBwZW5kKGtleVN0cmluZyk7CiB9CiAKLWJvb2wgV2luZG93RmVhdHVyZXM6OmJvb2xGZWF0
dXJlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmZWF0dXJlcywgY29uc3QgY2hhciog
a2V5LCBib29sIGRlZmF1bHRWYWx1ZSkKK1dpbmRvd0ZlYXR1cmVzOjpXaW5kb3dGZWF0dXJlcyhj
b25zdCBTdHJpbmcmIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBjb25zdCBGbG9hdFJlY3QmIHNjcmVl
bkF2YWlsYWJsZVJlY3QpCisgICAgOiB3aWR0aFNldCh0cnVlKQorICAgICwgaGVpZ2h0U2V0KHRy
dWUpCisgICAgLCBtZW51QmFyVmlzaWJsZShmYWxzZSkKKyAgICAsIHRvb2xCYXJWaXNpYmxlKGZh
bHNlKQorICAgICwgbG9jYXRpb25CYXJWaXNpYmxlKGZhbHNlKQorICAgICwgZnVsbHNjcmVlbihm
YWxzZSkKKyAgICAsIGRpYWxvZyh0cnVlKQogewotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKKyAgICBEaWFsb2dGZWF0
dXJlc01hcCBmZWF0dXJlczsKKyAgICBwYXJzZURpYWxvZ0ZlYXR1cmVzKGRpYWxvZ0ZlYXR1cmVz
U3RyaW5nLCBmZWF0dXJlcyk7CisKKyAgICBjb25zdCBib29sIHRydXN0ZWQgPSBmYWxzZTsKKwor
ICAgIC8vIFRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgZnJvbSBNaWNyb3NvZnQncyBkb2N1bWVudGF0
aW9uIGFyZSBub3QgaW1wbGVtZW50ZWQ6CisgICAgLy8gLSBkZWZhdWx0IGZvbnQgc2V0dGluZ3MK
KyAgICAvLyAtIHdpZHRoLCBoZWlnaHQsIGxlZnQsIGFuZCB0b3Agc3BlY2lmaWVkIGluIHVuaXRz
IG90aGVyIHRoYW4gInB4IgorICAgIC8vIC0gZWRnZSAoc3Vua2VuIG9yIHJhaXNlZCwgZGVmYXVs
dCBpcyByYWlzZWQpCisgICAgLy8gLSBkaWFsb2dIaWRlOiB0cnVzdGVkICYmIGJvb2xGZWF0dXJl
KGZlYXR1cmVzLCAiZGlhbG9naGlkZSIpLCBtYWtlcyBkaWFsb2cgaGlkZSB3aGVuIHlvdSBwcmlu
dAorICAgIC8vIC0gaGVscDogYm9vbEZlYXR1cmUoZmVhdHVyZXMsICJoZWxwIiwgdHJ1ZSksIG1h
a2VzIGhlbHAgaWNvbiBhcHBlYXIgaW4gZGlhbG9nICh3aGF0IGRvZXMgaXQgZG8gb24gV2luZG93
cz8pCisgICAgLy8gLSB1bmFkb3JuZWQ6IHRydXN0ZWQgJiYgYm9vbEZlYXR1cmUoZmVhdHVyZXMs
ICJ1bmFkb3JuZWQiKTsKKworICAgIHdpZHRoID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlh
bG9nd2lkdGgiLCAxMDAsIHNjcmVlbkF2YWlsYWJsZVJlY3Qud2lkdGgoKSwgNjIwKTsgLy8gZGVm
YXVsdCBoZXJlIGNhbWUgZnJvbSBmcmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQorICAgIGhl
aWdodCA9IGZsb2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ2hlaWdodCIsIDEwMCwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5oZWlnaHQoKSwgNDUwKTsgLy8gZGVmYXVsdCBoZXJlIGNhbWUgZnJvbSBm
cmFtZSBzaXplIG9mIGRpYWxvZyBpbiBNYWNJRQorCisgICAgeCA9IGZsb2F0RmVhdHVyZShmZWF0
dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVuQXZhaWxh
YmxlUmVjdC5yaWdodCgpIC0gd2lkdGgsIC0xKTsKKyAgICB4U2V0ID0geCA+IDA7CisgICAgeSA9
IGZsb2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlbkF2YWlsYWJsZVJlY3Qu
eSgpLCBzY3JlZW5BdmFpbGFibGVSZWN0LmJvdHRvbSgpIC0gaGVpZ2h0LCAtMSk7CisgICAgeVNl
dCA9IHkgPiAwOworCisgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwgdHJ1
ZSkpIHsKKyAgICAgICAgaWYgKCF4U2V0KSB7CisgICAgICAgICAgICB4ID0gc2NyZWVuQXZhaWxh
YmxlUmVjdC54KCkgKyAoc2NyZWVuQXZhaWxhYmxlUmVjdC53aWR0aCgpIC0gd2lkdGgpIC8gMjsK
KyAgICAgICAgICAgIHhTZXQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICgheVNldCkg
eworICAgICAgICAgICAgeSA9IHNjcmVlbkF2YWlsYWJsZVJlY3QueSgpICsgKHNjcmVlbkF2YWls
YWJsZVJlY3QuaGVpZ2h0KCkgLSBoZWlnaHQpIC8gMjsKKyAgICAgICAgICAgIHlTZXQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmVzaXphYmxlID0gYm9vbEZlYXR1cmUoZmVhdHVy
ZXMsICJyZXNpemFibGUiKTsKKyAgICBzY3JvbGxiYXJzVmlzaWJsZSA9IGJvb2xGZWF0dXJlKGZl
YXR1cmVzLCAic2Nyb2xsIiwgdHJ1ZSk7CisgICAgc3RhdHVzQmFyVmlzaWJsZSA9IGJvb2xGZWF0
dXJlKGZlYXR1cmVzLCAic3RhdHVzIiwgIXRydXN0ZWQpOworfQorCitib29sIFdpbmRvd0ZlYXR1
cmVzOjpib29sRmVhdHVyZShjb25zdCBEaWFsb2dGZWF0dXJlc01hcCYgZmVhdHVyZXMsIGNvbnN0
IGNoYXIqIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUpCit7CisgICAgRGlhbG9nRmVhdHVyZXNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZmVhdHVyZXMuZmluZChrZXkpOwogICAgIGlmIChpdCA9PSBm
ZWF0dXJlcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICAgICBjb25zdCBT
dHJpbmcmIHZhbHVlID0gaXQtPnNlY29uZDsKICAgICByZXR1cm4gdmFsdWUuaXNOdWxsKCkgfHwg
dmFsdWUgPT0gIjEiIHx8IHZhbHVlID09ICJ5ZXMiIHx8IHZhbHVlID09ICJvbiI7CiB9CiAKLWZs
b2F0IFdpbmRvd0ZlYXR1cmVzOjpmbG9hdEZlYXR1cmUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mIGZlYXR1cmVzLCBjb25zdCBjaGFyKiBrZXksIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBm
bG9hdCBkZWZhdWx0VmFsdWUpCitmbG9hdCBXaW5kb3dGZWF0dXJlczo6ZmxvYXRGZWF0dXJlKGNv
bnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiBmZWF0dXJlcywgY29uc3QgY2hhcioga2V5LCBmbG9hdCBt
aW4sIGZsb2F0IG1heCwgZmxvYXQgZGVmYXVsdFZhbHVlKQogewotICAgIEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZlYXR1cmVzLmZpbmQoa2V5KTsKKyAgICBE
aWFsb2dGZWF0dXJlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmZWF0dXJlcy5maW5kKGtleSk7
CiAgICAgaWYgKGl0ID09IGZlYXR1cmVzLmVuZCgpKQogICAgICAgICByZXR1cm4gZGVmYXVsdFZh
bHVlOwotICAgIC8vIEZJWE1FOiBDYW4ndCBkaXN0aW5ndWlzaCAiMHEiIGZyb20gc3RyaW5nIHdp
dGggbm8gZGlnaXRzIGluIGl0IC0tIGJvdGggcmV0dXJuIGQgPT0gMCBhbmQgb2sgPT0gZmFsc2Uu
Ci0gICAgLy8gV291bGQgYmUgZ29vZCB0byB0ZWxsIHRoZW0gYXBhcnQgc29tZWhvdyBzaW5jZSBz
dHJpbmcgd2l0aCBubyBkaWdpdHMgc2hvdWxkIGJlIGRlZmF1bHQgdmFsdWUgYW5kCi0gICAgLy8g
IjBxIiBzaG91bGQgYmUgbWluaW11bSB2YWx1ZS4KKyAgICAvLyBGSVhNRTogVGhlIHRvRG91Ymxl
IGZ1bmN0aW9uIGRvZXMgbm90IG9mZmVyIGEgd2F5IHRvIHRlbGwgIjBxIiBmcm9tIHN0cmluZyB3
aXRoIG5vIGRpZ2l0cyBpbiBpdDogQm90aAorICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIDAgYW5k
IGZhbHNlIGZvciBvay4gQnV0ICIwcSIgc2hvdWxkIHlpZWxkIHRoZSBtaW5pbXVtIHJhdGhlciB0
aGFuIHRoZSBkZWZhdWx0LgogICAgIGJvb2wgb2s7Ci0gICAgZG91YmxlIGQgPSBpdC0+c2Vjb25k
LnRvRG91YmxlKCZvayk7Ci0gICAgaWYgKChkID09IDAgJiYgIW9rKSB8fCBpc25hbihkKSkKKyAg
ICBkb3VibGUgcGFyc2VkTnVtYmVyID0gaXQtPnNlY29uZC50b0RvdWJsZSgmb2spOworICAgIGlm
ICgocGFyc2VkTnVtYmVyID09IDAgJiYgIW9rKSB8fCBpc25hbihwYXJzZWROdW1iZXIpKQogICAg
ICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIGlmIChkIDwgbWluIHx8IG1heCA8PSBtaW4p
CisgICAgaWYgKHBhcnNlZE51bWJlciA8IG1pbiB8fCBtYXggPD0gbWluKQogICAgICAgICByZXR1
cm4gbWluOwotICAgIGlmIChkID4gbWF4KQorICAgIGlmIChwYXJzZWROdW1iZXIgPiBtYXgpCiAg
ICAgICAgIHJldHVybiBtYXg7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZCk7CisgICAg
Ly8gRklYTUU6IFNlZW1zIHN0cmFuZ2UgdG8gY2FzdCBhIGRvdWJsZSB0byBpbnQgYW5kIHRoZW4g
Y29udmVydCBiYWNrIHRvIGEgZmxvYXQuIFdoeSBpcyB0aGlzIGEgZ29vZCBpZGVhPworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcnNlZE51bWJlcik7Cit9CisKK3ZvaWQgV2luZG93RmVh
dHVyZXM6OnBhcnNlRGlhbG9nRmVhdHVyZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERpYWxvZ0Zl
YXR1cmVzTWFwJiBtYXApCit7CisgICAgVmVjdG9yPFN0cmluZz4gdmVjdG9yOworICAgIHN0cmlu
Zy5zcGxpdCgnOycsIHZlY3Rvcik7CisgICAgc2l6ZV90IHNpemUgPSB2ZWN0b3Iuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgZmVhdHVyZVN0cmluZyA9IHZlY3RvcltpXTsKKworICAgICAgICBzaXplX3Qgc2VwYXJh
dG9yUG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJz0nKTsKKyAgICAgICAgc2l6ZV90IGNv
bG9uUG9zaXRpb24gPSBmZWF0dXJlU3RyaW5nLmZpbmQoJzonKTsKKyAgICAgICAgaWYgKHNlcGFy
YXRvclBvc2l0aW9uICE9IG5vdEZvdW5kICYmIGNvbG9uUG9zaXRpb24gIT0gbm90Rm91bmQpCisg
ICAgICAgICAgICBjb250aW51ZTsgLy8gaWdub3JlIHN0cmluZ3MgdGhhdCBoYXZlIGJvdGggPSBh
bmQgOgorICAgICAgICBpZiAoc2VwYXJhdG9yUG9zaXRpb24gPT0gbm90Rm91bmQpCisgICAgICAg
ICAgICBzZXBhcmF0b3JQb3NpdGlvbiA9IGNvbG9uUG9zaXRpb247CisKKyAgICAgICAgU3RyaW5n
IGtleSA9IGZlYXR1cmVTdHJpbmcubGVmdChzZXBhcmF0b3JQb3NpdGlvbikuc3RyaXBXaGl0ZVNw
YWNlKCkubG93ZXIoKTsKKworICAgICAgICAvLyBOdWxsIHN0cmluZyBmb3IgdmFsdWUgaW5kaWNh
dGVzIGtleSB3aXRob3V0IHZhbHVlLgorICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlm
IChzZXBhcmF0b3JQb3NpdGlvbiAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgdmFsdWUgPSBm
ZWF0dXJlU3RyaW5nLnN1YnN0cmluZyhzZXBhcmF0b3JQb3NpdGlvbiArIDEpLnN0cmlwV2hpdGVT
cGFjZSgpLmxvd2VyKCk7CisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmxlZnQodmFsdWUuZmlu
ZCgnICcpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAg
fQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvV2luZG93
RmVhdHVyZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAko
cmV2aXNpb24gNzM2NjApCisrKyBXZWJDb3JlL3BhZ2UvV2luZG93RmVhdHVyZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNyArMzQsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisgICAgY2xhc3MgRmxvYXRSZWN0OworCiAgICAgc3RydWN0IFdpbmRvd0ZlYXR1cmVzIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZWxldGUgdGhpcyBjb25zdHJ1Y3RvciBvbmNlIFY4
IHNob3dNb2RhbERpYWxvZyBpcyBjaGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCiAgICAgICAgIFdp
bmRvd0ZlYXR1cmVzKCkKICAgICAgICAgICAgIDogeFNldChmYWxzZSkKICAgICAgICAgICAgICwg
eVNldChmYWxzZSkKQEAgLTUxLDEyICs1NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgewogICAgICAgICB9CiAKLSAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBm
ZWF0dXJlcyk7Ci0KLSAgICAgICAgdm9pZCBzZXRXaW5kb3dGZWF0dXJlKGNvbnN0IFN0cmluZyYg
a2V5U3RyaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5nKTsKLQotICAgICAgICBzdGF0aWMg
Ym9vbCBib29sRmVhdHVyZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgZmVhdHVyZXMs
IGNvbnN0IGNoYXIqIGtleSwgYm9vbCBkZWZhdWx0VmFsdWUgPSBmYWxzZSk7Ci0gICAgICAgIHN0
YXRpYyBmbG9hdCBmbG9hdEZlYXR1cmUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGZl
YXR1cmVzLCBjb25zdCBjaGFyKiBrZXksIGZsb2F0IG1pbiwgZmxvYXQgbWF4LCBmbG9hdCBkZWZh
dWx0VmFsdWUpOworICAgICAgICBXaW5kb3dGZWF0dXJlcyhjb25zdCBTdHJpbmcmIHdpbmRvd0Zl
YXR1cmVzU3RyaW5nKTsKKyAgICAgICAgV2luZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBkaWFs
b2dGZWF0dXJlc1N0cmluZywgY29uc3QgRmxvYXRSZWN0JiBzY3JlZW5BdmFpbGFibGVSZWN0KTsK
IAogICAgICAgICBmbG9hdCB4OwogICAgICAgICBib29sIHhTZXQ7CkBAIC03OCw2ICs3NywxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgZGlhbG9nOwogCiAgICAgICAgIFZl
Y3RvcjxTdHJpbmc+IGFkZGl0aW9uYWxGZWF0dXJlczsKKworICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuIG1ha2UgdGhlc2UgZnVuY3Rpb25zIHByaXZhdGUgbm9uLW1lbWJlciBmdW5jdGlvbnMgb25j
ZSBWOCBzaG93TW9kYWxEaWFsb2cgaXMgY2hhbmdlZCB0byB1c2UgRE9NV2luZG93LgorICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IERpYWxvZ0ZlYXR1cmVzTWFwOworICAg
ICAgICBzdGF0aWMgdm9pZCBwYXJzZURpYWxvZ0ZlYXR1cmVzKGNvbnN0IFN0cmluZyYsIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+Jik7CisgICAgICAgIHN0YXRpYyBib29sIGJvb2xGZWF0dXJlKGNv
bnN0IERpYWxvZ0ZlYXR1cmVzTWFwJiwgY29uc3QgY2hhcioga2V5LCBib29sIGRlZmF1bHRWYWx1
ZSA9IGZhbHNlKTsKKyAgICAgICAgc3RhdGljIGZsb2F0IGZsb2F0RmVhdHVyZShjb25zdCBEaWFs
b2dGZWF0dXJlc01hcCYsIGNvbnN0IGNoYXIqIGtleSwgZmxvYXQgbWluLCBmbG9hdCBtYXgsIGZs
b2F0IGRlZmF1bHRWYWx1ZSk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFdpbmRv
d0ZlYXR1cmUoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJp
bmcpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="67175"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>