<?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>168079</bug_id>
          
          <creation_ts>2017-02-09 14:26:40 -0800</creation_ts>
          <short_desc>SharedArrayBuffer does not need to be in the transfer list</short_desc>
          <delta_ts>2017-02-09 18:44:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>WebKit 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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jsbell</cc>
    
    <cc>kangil.han</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1275052</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-09 14:26:40 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275058</commentid>
    <comment_count>1</comment_count>
      <attachid>301087</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-09 14:32:54 -0800</bug_when>
    <thetext>Created attachment 301087
possible patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275078</commentid>
    <comment_count>2</comment_count>
      <attachid>301092</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-09 15:33:30 -0800</bug_when>
    <thetext>Created attachment 301092
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275130</commentid>
    <comment_count>3</comment_count>
      <attachid>301102</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-09 16:48:56 -0800</bug_when>
    <thetext>Created attachment 301102
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275136</commentid>
    <comment_count>4</comment_count>
      <attachid>301102</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-02-09 16:58:14 -0800</bug_when>
    <thetext>Comment on attachment 301102
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275138</commentid>
    <comment_count>5</comment_count>
      <attachid>301102</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-02-09 17:01:06 -0800</bug_when>
    <thetext>Comment on attachment 301102
the patch

r=me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1275187</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-09 18:44:19 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/212035</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301087</attachid>
            <date>2017-02-09 14:32:54 -0800</date>
            <delta_ts>2017-02-09 15:33:30 -0800</delta_ts>
            <desc>possible patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37807</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExOTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE3LTAyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2hhcmVkQXJyYXlCdWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0aGUgdHJhbnNmZXIgbGlz
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MDc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBFeHBvc2VzIGEgc2ltcGxlIHNoYXJlV2l0aCgpIEFQSSBmb3Igd2hlbiB5b3Uga25vdyB5b3Ug
d2FudCB0byBzaGFyZSB0aGUgY29udGVudHMgb2YKKyAgICAgICAgYSBzaGFyZWQgYnVmZmVyLiBB
bHNvIGEgdXNlZnVsIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wuCisKKyAgICAgICAgKiBydW50aW1l
L0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnNoYXJlV2l0aCk6
CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlckNvbnRlbnRzOjpvcGVyYXRvciBib29sKToKKwogMjAxNy0wMi0wOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBvcF9pbiBzaG91bGQg
aGF2ZSBBcnJheVByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4
NCwxNyBAQCB2b2lkIEFycmF5QnVmZmVyOjpzZXRTaGFyaW5nTW9kZShBcnJheUJ1CiAgICAgbWFr
ZVNoYXJlZCgpOwogfQogCitib29sIEFycmF5QnVmZmVyOjpzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYgcmVzdWx0KQoreworICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEgfHwgIWlzU2hh
cmVkKCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV9jb250ZW50cy5zaGFyZVdpdGgocmVzdWx0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXJUbyhWTSYg
dm0sIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWY8QXJyYXlCdWZmZXI+
IHByb3RlY3QoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CiAgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CisgICAgCiAg
ICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogICAgIApAQCAtMTMx
LDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBwaW5BbmRMb2NrKCk7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyVG8oVk0mLCBBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1f
ZGF0YTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEYXRhKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5QnVmZmVyLCBtX2NvbnRlbnRzKSArIE9CSkVDVF9PRkZT
RVRPRihBcnJheUJ1ZmZlckNvbnRlbnRzLCBtX2RhdGEpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1NyBAQAorMjAxNy0wMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFNoYXJlZEFycmF5QnVmZmVyIGRvZXMgbm90IG5lZWQgdG8gYmUgaW4g
dGhlIHRyYW5zZmVyIGxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzOiB3b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCisgICAgICAgICAg
ICAgICB3b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbAorICAgICAgICAgICAgICAg
d29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1sCisgICAgICAgICAg
ICAgICB3b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwKKyAgICAgICAg
CisgICAgICAgIFRoZSBTQUIgQVBJIHRoYXQgd2Ugb3JpZ2luYWxseSBpbXBsZW1lbnRlZCByZXF1
aXJlZCB0aGF0IFNBQnMgZ2V0IHB1dCBpbiB0cmFuc2ZlciBsaXN0cworICAgICAgICB3aGVuIHRo
ZXkgYXJlIHNlbnQgdG8gd29ya2Vycy4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgU0FCIEFQ
SSB0aGF0IGV2ZXJ5b25lIGlzIGNvbnZlcmdpbmcgdG93YXJkcyByZXF1aXJlcyB0aGF0IHlvdSBk
byBub3QgcHV0IHRoZQorICAgICAgICBTQUIgaW4gdGhlIHRyYW5zZmVyIGxpc3QuIFRoYXQncyBz
dXBwb3NlZCB0byBiZSBhbiBlcnJvci4gSW5zdGVhZCwgYW55dGltZSB0aGF0IGEgU0FCCisgICAg
ICAgIGlzIHBhcnQgb2YgYW55IG1lc3NhZ2UgdG8gb3IgZnJvbSBhIGRlZGljYXRlZCB3b3JrZXIg
dGhlbiBpdCBpcyBhdXRvbWF0aWNhbGx5IHNoYXJlZC4KKyAgICAgICAgCisgICAgICAgIFRoZSBu
ZXcgQVBJIHByb3ZpZGVzIGEgbG90IG1vcmUgY2xhcml0eSBhYm91dCB3aGF0IGlzIHN1cHBvc2Vk
IHRvIGhhcHBlbiBpbiBjb250ZXh0cworICAgICAgICB0aGF0IHN1cHBvcnQgdHJhbnNmZXJpbmcg
YnV0IGRvbid0IHN1cHBvcnQgc2hhcmluZy4KKyAgICAgICAgCisgICAgICAgIFJpZ2h0IG5vdyB0
aGlzIHBhdGNoIGFsbG93cyBib3RoIHN0eWxlcyB0byB3b3JrLCBidXQgSSBob3BlIHdlIGNhbiBk
aXNhYmxlIHRoZSB0cmFuc2ZlcgorICAgICAgICBsaXN0IGNhcGFiaWxpdHkgc29vbi4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdl
RXZlbnQ6OmRhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OkNsb25lU2VyaWFsaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1pbmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL0N1c3RvbUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUV2
ZW50Ojp0cnlTZXJpYWxpemVEZXRhaWwpOgorICAgICAgICAqIGRvbS9FcnJvckV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVycm9yRXZlbnQ6OnRyeVNlcmlhbGl6ZUVycm9yKToKKyAgICAg
ICAgKiBkb20vTWVzc2FnZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVu
dDo6dHJ5U2VyaWFsaXplRGF0YSk6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wU3RhdGVFdmVudDo6dHJ5U2VyaWFsaXplU3RhdGUpOgorICAg
ICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKToKKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnBvc3RN
ZXNzYWdlKToKKwogMjAxNy0wMi0wOSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBDb25maWd1cmUgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMgdG8gZ2VuZXJh
dGUgc3RlcmVvIGF1ZGlvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NSw3ICszNDUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9K
U1ZhCiAKICAgICBzdGF0ZS52bSgpLmFwaUxvY2soKS5sb2NrKCk7CiAgICAgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+IG1lc3NhZ2VQb3J0czsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlh
bGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0
cywgdmFsdWUuYmxvYlVSTHMoKSwgdmFsdWUuYmxvYkZpbGVQYXRocygpLCBOb25UaHJvd2luZyk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKHN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIHZhbHVlLmJsb2JVUkxzKCksIHZhbHVlLmJs
b2JGaWxlUGF0aHMoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAg
IHN0YXRlLnZtKCkuYXBpTG9jaygpLnVubG9jaygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBA
QCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAgICAgICAgIGlmIChS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC5kYXRh
QXNTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkgewogICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxN
ZXNzYWdlUG9ydD4+IHBvcnRzID0gd3JhcHBlZCgpLnBvcnRzKCk7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2h5IGRvZXMgdGhpcyBzdXBwcmVzcyBleGNlcHRpb25zPwotICAgICAgICAgICAgcmVz
dWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IHBvcnRzLCBOb25UaHJvd2luZyk7CisgICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFs
dWUtPmRlc2VyaWFsaXplKHN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcG9ydHMsIFNlcmlhbGl6YXRp
b25FcnJvck1vZGU6Ok5vblRocm93aW5nKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHQgPSBqc051bGwoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBlbnVtIFNlcmlhbGl6
YXRpb25UYWcgewogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogICAgIENyeXB0b0tleVRhZyA9
IDMzLAogI2VuZGlmCisgICAgU2hhcmVkQXJyYXlCdWZmZXJUYWcgPSAzNCwKICAgICBFcnJvclRh
ZyA9IDI1NQogfTsKIApAQCAtNDc2LDkgKzQ3Nyw5IEBAIHRlbXBsYXRlIDw+IGJvb2wgd3JpdGVM
aXR0bGVFbmRpYW48dWludDgKIAogY2xhc3MgQ2xvbmVTZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgU2VyaWFsaXphdGlvblJldHVybkNvZGUgc2VyaWFsaXplKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+
JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+JiBhcnJheUJ1
ZmZlcnMsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQpCisg
ICAgc3RhdGljIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIHNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBv
cnRzLCBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzLCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0LCBTZXJpYWxpemF0aW9u
Q29udGV4dCBjb250ZXh0LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkmIHNoYXJlZEJ1ZmZlcnMp
CiAgICAgewotICAgICAgICBDbG9uZVNlcmlhbGl6ZXIgc2VyaWFsaXplcihleGVjLCBtZXNzYWdl
UG9ydHMsIGFycmF5QnVmZmVycywgYmxvYlVSTHMsIG91dCk7CisgICAgICAgIENsb25lU2VyaWFs
aXplciBzZXJpYWxpemVyKGV4ZWMsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBibG9iVVJM
cywgb3V0LCBjb250ZXh0LCBzaGFyZWRCdWZmZXJzKTsKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6
ZXIuc2VyaWFsaXplKHZhbHVlKTsKICAgICB9CiAKQEAgLTUyNSwxMSArNTI2LDEzIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgdWludDMyX3Q+IE9i
amVjdFBvb2w7CiAKLSAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8
UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0
b3I8dWludDhfdD4mIG91dCkKKyAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxz
LCBWZWN0b3I8dWludDhfdD4mIG91dCwgU2VyaWFsaXphdGlvbkNvbnRleHQgY29udGV4dCwgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5JiBzaGFyZWRCdWZmZXJzKQogICAgICAgICA6IENsb25lQmFz
ZShleGVjKQogICAgICAgICAsIG1fYnVmZmVyKG91dCkKICAgICAgICAgLCBtX2Jsb2JVUkxzKGJs
b2JVUkxzKQogICAgICAgICAsIG1fZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgZW1wdHlTdHJpbmcoKSkpCisgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zaGFyZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCiAgICAgewogICAgICAgICB3
cml0ZShDdXJyZW50VmVyc2lvbik7CiAgICAgICAgIGZpbGxUcmFuc2Zlck1hcChtZXNzYWdlUG9y
dHMsIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMpOwpAQCAtODYxLDYgKzg2NCwxOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0
SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGFycmF5
QnVmZmVyLT5pc1NoYXJlZCgpCisgICAgICAgICAgICAgICAgICAgICYmIG1fY29udGV4dCA9PSBT
ZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgd3JpdGUoU2hhcmVkQXJyYXlCdWZmZXJUYWcpOworICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCBpbmRleCA9IG1fc2hhcmVkQnVmZmVycy5zaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgIEFycmF5QnVmZmVyQ29udGVudHMgY29udGVudHM7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhcnJheUJ1ZmZlci0+c2hhcmVXaXRoKGNvbnRlbnRzKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zaGFyZWRCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGNvbnRlbnRzKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZShpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB3cml0ZShBcnJheUJ1ZmZlclRhZyk7CiAg
ICAgICAgICAgICAgICAgd3JpdGUoYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAg
ICAgICAgICAgd3JpdGUoc3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFycmF5QnVmZmVyLT5k
YXRhKCkpLCBhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKQEAgLTg4MCw3ICs4OTYsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGR1bW15QmxvYlVSTHM7CiAg
ICAgICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+IGR1bW15TWVzc2FnZVBv
cnRzOwogICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+IGR1
bW15QXJyYXlCdWZmZXJzOwotICAgICAgICAgICAgICAgIENsb25lU2VyaWFsaXplciByYXdLZXlT
ZXJpYWxpemVyKG1fZXhlYywgZHVtbXlNZXNzYWdlUG9ydHMsIGR1bW15QXJyYXlCdWZmZXJzLCBk
dW1teUJsb2JVUkxzLCBzZXJpYWxpemVkS2V5KTsKKyAgICAgICAgICAgICAgICBBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXkgZHVtbXlTaGFyZWRCdWZmZXJzOworICAgICAgICAgICAgICAgIENsb25l
U2VyaWFsaXplciByYXdLZXlTZXJpYWxpemVyKG1fZXhlYywgZHVtbXlNZXNzYWdlUG9ydHMsIGR1
bW15QXJyYXlCdWZmZXJzLCBkdW1teUJsb2JVUkxzLCBzZXJpYWxpemVkS2V5LCBTZXJpYWxpemF0
aW9uQ29udGV4dDo6RGVmYXVsdCwgZHVtbXlTaGFyZWRCdWZmZXJzKTsKICAgICAgICAgICAgICAg
ICByYXdLZXlTZXJpYWxpemVyLndyaXRlKGtleSk7CiAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IHdyYXBwZWRLZXk7CiAgICAgICAgICAgICAgICAgaWYgKCF3cmFwQ3J5cHRvS2V5KG1f
ZXhlYywgc2VyaWFsaXplZEtleSwgd3JhcHBlZEtleSkpCkBAIC0xMjE4LDYgKzEyMzUsOCBAQCBw
cml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCB1
aW50MzJfdCwgSWRlbnRpZmllclJlcEhhc2g+IFN0cmluZ0NvbnN0YW50UG9vbDsKICAgICBTdHJp
bmdDb25zdGFudFBvb2wgbV9jb25zdGFudFBvb2w7CiAgICAgSWRlbnRpZmllciBtX2VtcHR5SWRl
bnRpZmllcjsKKyAgICBTZXJpYWxpemF0aW9uQ29udGV4dCBtX2NvbnRleHQ7CisgICAgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5JiBtX3NoYXJlZEJ1ZmZlcnM7CiB9OwogCiBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShKU1ZhbHVlIGluKQpAQCAtMTQ4
OSwxMSArMTUwOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogCi0g
ICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBv
cnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVy
Q29udGVudHNBcnJheSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocykK
KyAgICBzdGF0aWMgRGVzZXJpYWxpemF0aW9uUmVzdWx0IGRlc2VyaWFsaXplKEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdl
UG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhz
LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZlcnMpCiAgICAgewogICAgICAg
ICBpZiAoIWJ1ZmZlci5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
anNOdWxsKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpVbnNwZWNpZmllZEVycm9yKTsKLSAg
ICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxpemVyKGV4ZWMsIGdsb2JhbE9iamVjdCwg
bWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMs
IGJsb2JGaWxlUGF0aHMpOworICAgICAgICBDbG9uZURlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJh
eSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocywgc2hhcmVkQnVmZmVycyk7CiAgICAg
ICAgIGlmICghZGVzZXJpYWxpemVyLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihKU1ZhbHVlKCksIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9u
RXJyb3IpOwogICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCk7CkBAIC0x
NTUzLDcgKzE1NzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV92ZXJzaW9uID0gMHhGRkZG
RkZGRjsKICAgICB9CiAKLSAgICBDbG9uZURlc2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYg
bWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5QnVmZmVyQ29udGVu
dHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMpCisgICAgQ2xvbmVE
ZXNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJD
b250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiBibG9iRmlsZVBhdGhzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIHNoYXJlZEJ1ZmZl
cnMpCiAgICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCiAgICAgICAgICwgbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQogICAgICAgICAsIG1faXNET01HbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0
LT5pbmhlcml0cyhnbG9iYWxPYmplY3QtPnZtKCksIEpTRE9NR2xvYmFsT2JqZWN0OjppbmZvKCkp
KQpAQCAtMTU2NSw2ICsxNTg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLCBtX2FycmF5QnVmZmVy
cyhhcnJheUJ1ZmZlckNvbnRlbnRzID8gYXJyYXlCdWZmZXJDb250ZW50cy0+c2l6ZSgpIDogMCkK
ICAgICAgICAgLCBtX2Jsb2JVUkxzKGJsb2JVUkxzKQogICAgICAgICAsIG1fYmxvYkZpbGVQYXRo
cyhibG9iRmlsZVBhdGhzKQorICAgICAgICAsIG1fc2hhcmVkQnVmZmVycyhzaGFyZWRCdWZmZXJz
KQogICAgIHsKICAgICAgICAgaWYgKCFyZWFkKG1fdmVyc2lvbikpCiAgICAgICAgICAgICBtX3Zl
cnNpb24gPSAweEZGRkZGRkZGOwpAQCAtMjM4Nyw2ICsyNDA3LDE4IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKG1fYXJyYXlCdWZmZXJzW2luZGV4XS5nZXQoKSk7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFyZWRBcnJheUJ1ZmZlclRhZzogeworICAgICAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgICAgICBib29sIGluZGV4U3VjY2Vzc2Z1bGx5
UmVhZCA9IHJlYWQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbmRleFN1Y2Nlc3NmdWxseVJl
YWQgfHwgIW1fc2hhcmVkQnVmZmVycyB8fCBpbmRleCA+PSBtX3NoYXJlZEJ1ZmZlcnMtPnNpemUo
KSkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX3NoYXJlZEJ1ZmZlcnMtPmF0KGluZGV4KSk7CisgICAgICAgICAgICBSZWZQdHI8
QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUoV1RGTW92ZShtX3NoYXJl
ZEJ1ZmZlcnMtPmF0KGluZGV4KSkpOworICAgICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYnVm
ZmVyLmdldCgpKTsKKyAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzog
ewogICAgICAgICAgICAgSlNWYWx1ZSBhcnJheUJ1ZmZlclZpZXc7CiAgICAgICAgICAgICBpZiAo
IXJlYWRBcnJheUJ1ZmZlclZpZXcobV9leGVjLT52bSgpLCBhcnJheUJ1ZmZlclZpZXcpKSB7CkBA
IC0yNDQ1LDYgKzI0NzcsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlcj4+IG1fYXJyYXlCdWZmZXJzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7
CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9iRmlsZVBhdGhzOworICAgIEFycmF5QnVmZmVyQ29u
dGVudHNBcnJheSogbV9zaGFyZWRCdWZmZXJzOwogCiAgICAgU3RyaW5nIGJsb2JGaWxlUGF0aEZv
ckJsb2JVUkwoY29uc3QgU3RyaW5nJiBibG9iVVJMKQogICAgIHsKQEAgLTI2NTQsOSArMjY4Nywx
MCBAQCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWCiB7CiB9CiAKLVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90
PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9w
dHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiYmIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSkK
K1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50
OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1
ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXks
IHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNv
bnRlbnRzQXJyYXkpCiAgICAgOiBtX2RhdGEoV1RGTW92ZShidWZmZXIpKQogICAgICwgbV9hcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXkoV1RGTW92ZShhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpKQor
ICAgICwgbV9zaGFyZWRCdWZmZXJDb250ZW50c0FycmF5KFdURk1vdmUoc2hhcmVkQnVmZmVyQ29u
dGVudHNBcnJheSkpCiB7CiAgICAgLy8gU2luY2UgdGhpcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
aXMgbWVhbnQgdG8gYmUgcGFzc2VkIGJldHdlZW4gdGhyZWFkcywgaXRzIFN0cmluZyBkYXRhIG1l
bWJlcnMKICAgICAvLyBuZWVkIHRvIGJlIGlzb2xhdGVkQ29waWVzIHNvIHdlIGRvbid0IHJ1biBp
bnRvIHRocmVhZCBzYWZldHkgaXNzdWVzIGZvciB0aGUgU3RyaW5nSW1wbHMuCkBAIC0yNzQxLDE4
ICsyNzc1LDE5IEBAIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKICAg
ICBWZWN0b3I8U3RyaW5nPiBibG9iVVJMczsKICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4gZHVtbXlNZXNzYWdlUG9ydHM7CiAgICAgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
Pj4gZHVtbXlBcnJheUJ1ZmZlcnM7Ci0gICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpz
ZXJpYWxpemUoJmV4ZWMsIHZhbHVlLCBkdW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZl
cnMsIGJsb2JVUkxzLCBidWZmZXIpOworICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSBkdW1t
eVNoYXJlZEJ1ZmZlcnM7CisgICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxp
emUoJmV4ZWMsIHZhbHVlLCBkdW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIGJs
b2JVUkxzLCBidWZmZXIsIFNlcmlhbGl6YXRpb25Db250ZXh0OjpEZWZhdWx0LCBkdW1teVNoYXJl
ZEJ1ZmZlcnMpOwogCi0gICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBUaHJvd2luZykKKyAgICBp
ZiAodGhyb3dFeGNlcHRpb25zID09IFNlcmlhbGl6YXRpb25FcnJvck1vZGU6OlRocm93aW5nKQog
ICAgICAgICBtYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKGV4ZWMsIGNv
ZGUpOwogCiAgICAgaWYgKGNvZGUgIT0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN1Y2Nlc3Nm
dWxseUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZmZXIpLCBibG9iVVJM
cywgbnVsbHB0cikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBudWxscHRyLCBudWxscHRyKSk7CiB9CiAK
LUV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXJMaXN0LCBWZWN0b3I8UmVmUHRyPE1l
c3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cykKK0V4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJh
bnNmZXJMaXN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgU2Vy
aWFsaXphdGlvbkNvbnRleHQgY29udGV4dCkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwog
ICAgIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+IGFycmF5QnVmZmVyczsKQEAgLTI3
NjAsNiArMjc5NSw4IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiAK
ICAgICAgICAgaWYgKGF1dG8gYXJyYXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZm
ZXIodm0sIHRyYW5zZmVyYWJsZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZl
ci0+aXNOZXV0ZXJlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRB
X0NMT05FX0VSUiB9OworICAgICAgICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc1NoYXJlZCgpICYm
IGNvbnRleHQgIT0gU2VyaWFsaXphdGlvbkNvbnRleHQ6OldvcmtlclBvc3RNZXNzYWdlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9OwogICAgICAg
ICAgICAgYXJyYXlCdWZmZXJzLmFwcGVuZChXVEZNb3ZlKGFycmF5QnVmZmVyKSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMjc3NCw3ICsyODExLDggQEAgRXhjZXB0aW9u
T3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1
ZmZlcjsKICAgICBWZWN0b3I8U3RyaW5nPiBibG9iVVJMczsKLSAgICBhdXRvIGNvZGUgPSBDbG9u
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSgmc3RhdGUsIHZhbHVlLCBtZXNzYWdlUG9ydHMsIGFycmF5
QnVmZmVycywgYmxvYlVSTHMsIGJ1ZmZlcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVm
ZmVyQ29udGVudHNBcnJheT4gc2hhcmVkQnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlC
dWZmZXJDb250ZW50c0FycmF5PigpOworICAgIGF1dG8gY29kZSA9IENsb25lU2VyaWFsaXplcjo6
c2VyaWFsaXplKCZzdGF0ZSwgdmFsdWUsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBibG9i
VVJMcywgYnVmZmVyLCBjb250ZXh0LCAqc2hhcmVkQnVmZmVycyk7CiAKICAgICBpZiAoY29kZSAh
PSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6U3VjY2Vzc2Z1bGx5Q29tcGxldGVkKQogICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uRm9yU2VyaWFsaXphdGlvbkZhaWx1cmUoY29kZSk7CkBAIC0yNzgz
LDcgKzI4MjEsNyBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gCiAg
ICAgaWYgKGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZm
ZXIpLCBibG9iVVJMcywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFdU
Rk1vdmUoYnVmZmVyKSwgYmxvYlVSTHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSwgY29udGV4dCA9PSBTZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9z
dE1lc3NhZ2UgPyBXVEZNb3ZlKHNoYXJlZEJ1ZmZlcnMpIDogbnVsbHB0cikpOwogfQogCiBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShT
dHJpbmdWaWV3IHN0cmluZykKQEAgLTI4MzMsOCArMjg3MSw4IEBAIEpTVmFsdWUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGkKIAogSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmRlc2VyaWFsaXplKEV4ZWNTdGF0ZSYgZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMs
IFNlcmlhbGl6YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIERlc2VyaWFs
aXphdGlvblJlc3VsdCByZXN1bHQgPSBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoJmV4
ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJh
eS5nZXQoKSwgbV9kYXRhLCBibG9iVVJMcywgYmxvYkZpbGVQYXRocyk7Ci0gICAgaWYgKHRocm93
RXhjZXB0aW9ucyA9PSBUaHJvd2luZykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0
ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKCZleGVjLCBnbG9iYWxPYmplY3QsIG1l
c3NhZ2VQb3J0cywgbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkuZ2V0KCksIG1fZGF0YSwgYmxv
YlVSTHMsIGJsb2JGaWxlUGF0aHMsIG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSk7
CisgICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJv
d2luZykKICAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlvbklmU2VyaWFsaXphdGlvbkZhaWxlZChl
eGVjLCByZXN1bHQuc2Vjb25kKTsKICAgICByZXR1cm4gcmVzdWx0LmZpcnN0ID8gcmVzdWx0LmZp
cnN0IDoganNOdWxsKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDE1ICs0NSwxNiBAQCBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIGVudW0gY2xhc3MgU2VyaWFsaXphdGlvblJldHVybkNvZGU7CiAKLWVudW0gU2VyaWFs
aXphdGlvbkVycm9yTW9kZSB7IE5vblRocm93aW5nLCBUaHJvd2luZyB9OworZW51bSBjbGFzcyBT
ZXJpYWxpemF0aW9uRXJyb3JNb2RlIHsgTm9uVGhyb3dpbmcsIFRocm93aW5nIH07CitlbnVtIGNs
YXNzIFNlcmlhbGl6YXRpb25Db250ZXh0IHsgRGVmYXVsdCwgV29ya2VyUG9zdE1lc3NhZ2UgfTsK
IAogdXNpbmcgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5ID0gVmVjdG9yPEpTQzo6QXJyYXlCdWZm
ZXJDb250ZW50cz47CiAKIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHsKIHB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0g
VGhyb3dpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZyk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgVmVjdG9yPEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgVmVjdG9yPEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyLCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mLCBTZXJpYWxpemF0aW9uQ29udGV4dCA9IFNlcmlhbGl6YXRpb25Db250ZXh0OjpE
ZWZhdWx0KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUoU3RyaW5nVmlldyk7CiAgICAgc3RhdGljIFJlZjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGFkb3B0KFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKQEAgLTYzLDkgKzY0
LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG51
bGxWYWx1ZSgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXpl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFNlcmlhbGl6YXRpb25FcnJv
ck1vZGUgPSBUaHJvd2luZyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2Vy
aWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFZlY3RvcjxSZWZQ
dHI8TWVzc2FnZVBvcnQ+PiYsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7Ci0g
ICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlh
bGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpK
U1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2lu
Zyk7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+
PiYsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJv
d2luZyk7CisgICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0
aHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJv
d2luZyk7CiAKICAgICBzdGF0aWMgdWludDMyX3Qgd2lyZUZvcm1hdFZlcnNpb24oKTsKIApAQCAt
OTQsMTAgKzk1LDExIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYpOwotICAgIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mJiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5
PiYmKTsKKyAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVm
ZmVyQ29udGVudHNBcnJheT4sIHN0ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXk+IHNoYXJlZEJ1ZmZlcnMpOwogCiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YTsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX2FycmF5QnVm
ZmVyQ29udGVudHNBcnJheTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiBtX3NoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXk7CiAgICAgVmVjdG9yPFN0cmluZz4g
bV9ibG9iVVJMczsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkocmV2
aXNpb24gMjExOTYwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEN1c3RvbUV2ZW50Ojppbml0Q3VzdG9t
RXZlbnQoSlNDOjpFCiBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBDdXN0b21FdmVudDo6
dHJ5U2VyaWFsaXplRGV0YWlsKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoIW1f
dHJpZWRUb1NlcmlhbGl6ZSkgewotICAgICAgICBtX3NlcmlhbGl6ZWREZXRhaWwgPSBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbV9kZXRhaWwsIE5vblRocm93aW5nKTsKKyAg
ICAgICAgbV9zZXJpYWxpemVkRGV0YWlsID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
c3RhdGUsIG1fZGV0YWlsLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2luZyk7CiAg
ICAgICAgIG1fdHJpZWRUb1NlcmlhbGl6ZSA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBtX3Nl
cmlhbGl6ZWREZXRhaWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCShyZXZpc2lv
biAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkxLDcgKzkxLDcgQEAgSlNWYWx1ZSBFcnJvckV2ZW50OjplcnJvcihFeGVjU3Rh
dGUmIGV4ZQogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gRXJyb3JFdmVudDo6dHJ5U2Vy
aWFsaXplRXJyb3IoRXhlY1N0YXRlJiBleGVjKQogewogICAgIGlmICghbV90cmllZFRvU2VyaWFs
aXplKSB7Ci0gICAgICAgIG1fc2VyaWFsaXplZERldGFpbCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIG1fZXJyb3IuZ2V0KCksIE5vblRocm93aW5nKTsKKyAgICAgICAgbV9z
ZXJpYWxpemVkRGV0YWlsID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgbV9l
cnJvci5nZXQoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAgICAg
ICBtX3RyaWVkVG9TZXJpYWxpemUgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9zZXJpYWxp
emVkRGV0YWlsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9u
IDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
TWVzc2FnZUV2ZQogICAgIEFTU0VSVCghbV9kYXRhQXNTY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkp
OwogICAgIAogICAgIGlmICghbV9kYXRhQXNTZXJpYWxpemVkU2NyaXB0VmFsdWUgJiYgIW1fdHJp
ZWRUb1NlcmlhbGl6ZSkgewotICAgICAgICBtX2RhdGFBc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCpleGVjLCBtX2RhdGFBc1NjcmlwdFZhbHVl
LmpzVmFsdWUoKSwgTm9uVGhyb3dpbmcpOworICAgICAgICBtX2RhdGFBc1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCpleGVjLCBtX2RhdGFBc1Nj
cmlwdFZhbHVlLmpzVmFsdWUoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcp
OwogICAgICAgICBtX3RyaWVkVG9TZXJpYWxpemUgPSB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Qb3BTdGF0ZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NyArNzAsNyBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBQb3BTdGF0ZUV2CiAgICAg
QVNTRVJUKCFtX3N0YXRlLmhhc05vVmFsdWUoKSk7CiAgICAgCiAgICAgaWYgKCFtX3NlcmlhbGl6
ZWRTdGF0ZSAmJiAhbV90cmllZFRvU2VyaWFsaXplKSB7Ci0gICAgICAgIG1fc2VyaWFsaXplZFN0
YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlY3V0aW9uU3RhdGUsIG1fc3Rh
dGUuanNWYWx1ZSgpLCBOb25UaHJvd2luZyk7CisgICAgICAgIG1fc2VyaWFsaXplZFN0YXRlID0g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlY3V0aW9uU3RhdGUsIG1fc3RhdGUuanNW
YWx1ZSgpLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2luZyk7CiAgICAgICAgIG1f
dHJpZWRUb1NlcmlhbGl6ZSA9IHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNv
cmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJl
dmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIERlZGljYXRlZFdvcmtlckdsb2IKIEV4Y2VwdGlvbk9yPHZvaWQ+IERlZGlj
YXRlZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSBtZXNzYWdlVmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0Pj4mJiB0cmFuc2ZlcikKIHsKICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gcG9y
dHM7Ci0gICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3Rh
dGUsIG1lc3NhZ2VWYWx1ZSwgV1RGTW92ZSh0cmFuc2ZlciksIHBvcnRzKTsKKyAgICBhdXRvIG1l
c3NhZ2UgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVl
LCBXVEZNb3ZlKHRyYW5zZmVyKSwgcG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQ
b3N0TWVzc2FnZSk7CiAgICAgaWYgKG1lc3NhZ2UuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBtZXNzYWdlLnJlbGVhc2VFeGNlcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyLmNwcAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9X
b3JrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgV29ya2VyOjp+V29y
a2VyKCkKIEV4Y2VwdGlvbk9yPHZvaWQ+IFdvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgbWVzc2FnZVZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8
SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXIpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxNZXNzYWdl
UG9ydD4+IHBvcnRzOwotICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlKHN0YXRlLCBtZXNzYWdlVmFsdWUsIFdURk1vdmUodHJhbnNmZXIpLCBwb3J0cyk7Cisg
ICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1l
c3NhZ2VWYWx1ZSwgV1RGTW92ZSh0cmFuc2ZlciksIHBvcnRzLCBTZXJpYWxpemF0aW9uQ29udGV4
dDo6V29ya2VyUG9zdE1lc3NhZ2UpOwogICAgIGlmIChtZXNzYWdlLmhhc0V4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gbWVzc2FnZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMTk2MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE3LTAyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2hhcmVkQXJyYXlCdWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0
aGUgdHJhbnNmZXIgbGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY4MDc5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGVzdHMgdGhhdCBlbnN1cmUgdGhhdCBTQUJzIGJl
aGF2ZSBjb3JyZWN0bHkgKGFyZSBlaXRoZXIgY2xvbmVkIG9yIHNoYXJlZCkKKyAgICAgICAgZGVw
ZW5kaW5nIG9uIGNvbnRleHQsIGFuZCB0aGF0IHdlIGN1cnJlbnRseSBzaGFyZSBTQUJzIHdoZXRo
ZXIgdGhleSBhcmUgaW4gdGhlIHRyYW5zZmVyCisgICAgICAgIGxpc3Qgb3Igbm90LgorCisgICAg
ICAgICogd29ya2Vycy9zYWIvbm8tdHJhbnNmZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd29y
a2Vycy9zYWIvcG9zdE1lc3NhZ2UtY2xvbmVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdvcmtl
cnMvc2FiL3NhYi1jcmVhdG9yLW5vLXRyYW5zZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3b3Jr
ZXJzL3NhYi9zYWItY3JlYXRvci10cmFuc2Zlci5qczogQWRkZWQuCisgICAgICAgICogd29ya2Vy
cy9zYWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB3b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWw6IEFkZGVkLgorCiAy
MDE3LTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkIEdUSysgZ2FyZGVuaW5nLiBTa2lwIHRlc3RzIHRoYXQgcmVxdWly
ZSBVSVNjcmlwdENvbnRyb2xsZXI6Onpvb21Ub1NjYWxlLgpJbmRleDogTGF5b3V0VGVzdHMvd29y
a2Vycy9zYWIvbm8tdHJhbnNmZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3Jr
ZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dv
cmtlcnMvc2FiL25vLXRyYW5zZmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdldE9yQ3JlYXRl
KGlkLCB0YWdOYW1lKQoreworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoaWQpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAK
KyAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBlbGVt
ZW50LmlkID0gaWQ7CisgICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50OworICAgIHZhciByZWZOb2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7Cisg
ICAgCisgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCByZWZOb2RlKTsKKyAgICByZXR1
cm4gZWxlbWVudDsKK30KKworZnVuY3Rpb24gZGVidWcobXNnKQoreworICAgIHZhciBzcGFuID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIGdldE9yQ3JlYXRlKCJjb25zb2xl
IiwgImRpdiIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwg
a25vd3MgdGhlIG5hbWVzcGFjZQorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7
Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgdmVyYm9zZSA9
IGZhbHNlOworCit2YXIgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKDEwMCAqIDQpOworCit2
YXIgbWVtb3J5ID0gbmV3IEludDMyQXJyYXkoc2FiKTsKKwordmFyIG51bVdvcmtlcnMgPSAwOwor
ZnVuY3Rpb24gc3RhcnRXb3JrZXIoZmlsZSkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGVidWcoIlN0YXJ0aW5nIHdvcmtlcjogIiArIGZpbGUpOworICAgIG51bVdvcmtlcnMrKzsKKyAg
ICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihmaWxlKTsKKyAgICB3b3JrZXIub25tZXNzYWdlID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gImRvbmUiKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkZWJ1ZygiRmluaXNoZWQg
d29ya2VyOiAiICsgZmlsZSk7CisgICAgICAgICAgICBpZiAoLS1udW1Xb3JrZXJzKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRlYnVnKCJBbGwgd29ya2VycyBkb25lISIp
OworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoIkVycm9yIikgPT0gMCkgeworICAgICAgICAg
ICAgZGVidWcoIlRlc3QgZmFpbGVkOiAiKyBldmVudC5kYXRhKTsKKyAgICAgICAgICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkZWJ1ZygiRXZlbnQgZnJvbSAiICsgZmlsZSArICI6ICIgKyBldmVudC5kYXRhKTsKKyAgICB9
OworICAgIHdvcmtlci5wb3N0TWVzc2FnZShtZW1vcnkpOworfQorCitmdW5jdGlvbiBkb25lKCkK
K3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBpZiAobWVtb3J5
W2ldICE9IDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1ZSBhdCBtZW1vcnlb
IiArIGkgKyAiXTogIiArIG1lbW9yeVtpXTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDM7IGkg
PCBtZW1vcnkubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG1lbW9yeVtpXSAhPSAwKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgbWVtb3J5WyIgKyBpICsgIl06ICIg
KyBtZW1vcnlbaV07CisgICAgfQorICAgIGRlYnVnKCJUZXN0IHBhc3NlZCEiKTsKKworICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9
CisKK3N0YXJ0V29ya2VyKCJzaW1wbGUtd29ya2VyLTEuanMiKTsKK3N0YXJ0V29ya2VyKCJzaW1w
bGUtd29ya2VyLTIuanMiKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy93b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiQ2hlY2tzIHRoYXQgd2luZG93LnBvc3RNZXNzYWdl
IGNsb25lcyBTaGFyZWRBcnJheUJ1ZmZlcnMiKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCit2YXIgc2FiID0gbmV3IFNoYXJlZEFy
cmF5QnVmZmVyKDQpOwordmFyIG1lbW9yeSA9IG5ldyBJbnQzMkFycmF5KHNhYik7Cit2YXIgb3Ro
ZXJNZW1vcnk7CisKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24g
KGV2ZW50KSB7CisgICAgb3RoZXJNZW1vcnkgPSBldmVudC5kYXRhOworICAgIG1lbW9yeVswXSA9
IDQyOworICAgIHNob3VsZEJlKCJtZW1vcnlbMF0iLCAiNDIiKTsKKyAgICBzaG91bGRCZSgib3Ro
ZXJNZW1vcnlbMF0iLCAiMCIpOworICAgIG90aGVyTWVtb3J5WzBdID0gNDM7CisgICAgc2hvdWxk
QmUoIm1lbW9yeVswXSIsICI0MiIpOworICAgIHNob3VsZEJlKCJvdGhlck1lbW9yeVswXSIsICI0
MyIpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9KTsKKworcG9zdE1lc3NhZ2UobWVtb3J5LCAiKiIpOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zYWItY3JlYXRv
ci1uby10cmFuc2Zlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9z
YWItY3JlYXRvci1uby10cmFuc2Zlci5qcwkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
b3JrZXJzL3NhYi9zYWItY3JlYXRvci1uby10cmFuc2Zlci5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQgQEAKK3ZhciBzYWIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoMTAwICogNCk7Cit2
YXIgbWVtb3J5ID0gbmV3IEludDMyQXJyYXkoc2FiKTsKK3Bvc3RNZXNzYWdlKG1lbW9yeSk7CisK
SW5kZXg6IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NhYi1jcmVhdG9yLXRyYW5zZmVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NhYi1jcmVhdG9yLXRyYW5zZmVy
LmpzCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NhYi1jcmVhdG9y
LXRyYW5zZmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAordmFyIHNhYiA9IG5l
dyBTaGFyZWRBcnJheUJ1ZmZlcigxMDAgKiA0KTsKK3ZhciBtZW1vcnkgPSBuZXcgSW50MzJBcnJh
eShzYWIpOworcG9zdE1lc3NhZ2UobWVtb3J5LCBbc2FiXSk7CisKSW5kZXg6IExheW91dFRlc3Rz
L3dvcmtlcnMvc2FiL3NlbnQtZnJvbS13b3JrZXItbm8tdHJhbnNmZXIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5vLXRyYW5zZmVy
Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2VudC1mcm9t
LXdvcmtlci1uby10cmFuc2Zlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnZXRPckNyZWF0ZShp
ZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgCisg
ICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisgICAgZWxlbWVu
dC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRv
Y3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9kZSA9IHBhcmVudC5maXJzdENoaWxkOworICAg
IAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVmTm9kZSk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBnZXRPckNyZWF0ZSgiY29uc29sZSIs
ICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtu
b3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOwor
fQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQo
KTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIHZlcmJvc2UgPSBm
YWxzZTsKKwordmFyIG1lbW9yeTsKKwordmFyIG51bVdvcmtlcnMgPSAwOworZnVuY3Rpb24gc3Rh
cnRXb3JrZXIoZmlsZSkKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGVidWcoIlN0YXJ0
aW5nIHdvcmtlcjogIiArIGZpbGUpOworICAgIG51bVdvcmtlcnMrKzsKKyAgICB2YXIgd29ya2Vy
ID0gbmV3IFdvcmtlcihmaWxlKTsKKyAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT0gImRvbmUiKSB7CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkZWJ1ZygiRmluaXNoZWQgd29ya2VyOiAiICsg
ZmlsZSk7CisgICAgICAgICAgICBpZiAoLS1udW1Xb3JrZXJzKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGRlYnVnKCJBbGwgd29ya2VycyBkb25lISIpOworICAgICAgICAg
ICAgZG9uZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChl
dmVudC5kYXRhLmluZGV4T2YoIkVycm9yIikgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoIlRl
c3QgZmFpbGVkOiAiKyBldmVudC5kYXRhKTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkZWJ1ZygiRXZl
bnQgZnJvbSAiICsgZmlsZSArICI6ICIgKyBldmVudC5kYXRhKTsKKyAgICB9OworICAgIHdvcmtl
ci5wb3N0TWVzc2FnZShtZW1vcnkpOworfQorCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBpZiAobWVtb3J5W2ldICE9IDEpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1ZSBhdCBtZW1vcnlbIiArIGkgKyAiXTog
IiArIG1lbW9yeVtpXTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBtZW1vcnkubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG1lbW9yeVtpXSAhPSAwKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgbWVtb3J5WyIgKyBpICsgIl06ICIgKyBtZW1vcnlbaV07
CisgICAgfQorICAgIGRlYnVnKCJUZXN0IHBhc3NlZCEiKTsKKworICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3ZhciBzYWJD
cmVhdG9yID0gbmV3IFdvcmtlcigic2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMiKTsKK3NhYkNy
ZWF0b3Iub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBtZW1vcnkgPSBldmVudC5k
YXRhOworICAgIAorICAgIHN0YXJ0V29ya2VyKCJzaW1wbGUtd29ya2VyLTEuanMiKTsKKyAgICBz
dGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0yLmpzIik7Cit9OworCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NlbnQtZnJvbS13b3Jr
ZXItdHJhbnNmZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9z
ZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci10cmFuc2Zlci5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnTmFtZSk7CisgICAgZWxlbWVudC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVu
dC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9kZSA9IHBh
cmVudC5maXJzdENoaWxkOworICAgIAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwg
cmVmTm9kZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykK
K3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBn
ZXRPckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0
IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRN
TCA9IG1zZyArICc8YnIgLz4nOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
K30KKwordmFyIHZlcmJvc2UgPSBmYWxzZTsKKwordmFyIHNhYjsKK3ZhciBtZW1vcnk7CisKK3Zh
ciBudW1Xb3JrZXJzID0gMDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAg
ICBudW1Xb3JrZXJzKys7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAg
d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5k
YXRhID09ICJkb25lIikgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGVidWcoIkZpbmlzaGVkIHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0t
bnVtV29ya2VycykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1Zygi
QWxsIHdvcmtlcnMgZG9uZSEiKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIp
ID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7
CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsg
ZXZlbnQuZGF0YSk7CisgICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVtb3J5LCBbc2Fi
XSk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsg
KytpKSB7CisgICAgICAgIGlmIChtZW1vcnlbaV0gIT0gMSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogQmFkIHZhbHVlIGF0IG1lbW9yeVsiICsgaSArICJdOiAiICsgbWVtb3J5W2ldOworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMzsgaSA8IG1lbW9yeS5sZW5ndGg7ICsraSkgeworICAgICAg
ICBpZiAobWVtb3J5W2ldICE9IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1
ZSBhdCBtZW1vcnlbIiArIGkgKyAiXTogIiArIG1lbW9yeVtpXTsKKyAgICB9CisgICAgZGVidWco
IlRlc3QgcGFzc2VkISIpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKwordmFyIHNhYkNyZWF0b3IgPSBuZXcgV29ya2Vy
KCJzYWItY3JlYXRvci10cmFuc2Zlci5qcyIpOworc2FiQ3JlYXRvci5vbm1lc3NhZ2UgPSBmdW5j
dGlvbihldmVudCkgeworICAgIG1lbW9yeSA9IGV2ZW50LmRhdGE7CisgICAgc2FiID0gbWVtb3J5
LmJ1ZmZlcjsKKyAgICAKKyAgICBzdGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0xLmpzIik7Cisg
ICAgc3RhcnRXb3JrZXIoInNpbXBsZS13b3JrZXItMi5qcyIpOworfTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301092</attachid>
            <date>2017-02-09 15:33:30 -0800</date>
            <delta_ts>2017-02-09 16:48:56 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46180</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExOTkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE3LTAyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2hhcmVkQXJyYXlCdWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0aGUgdHJhbnNmZXIgbGlz
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MDc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBFeHBvc2VzIGEgc2ltcGxlIHNoYXJlV2l0aCgpIEFQSSBmb3Igd2hlbiB5b3Uga25vdyB5b3Ug
d2FudCB0byBzaGFyZSB0aGUgY29udGVudHMgb2YKKyAgICAgICAgYSBzaGFyZWQgYnVmZmVyLiBB
bHNvIGEgdXNlZnVsIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wuCisKKyAgICAgICAgKiBydW50aW1l
L0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnNoYXJlV2l0aCk6
CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlckNvbnRlbnRzOjpvcGVyYXRvciBib29sKToKKwogMjAxNy0wMi0wOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBvcF9pbiBzaG91bGQg
aGF2ZSBBcnJheVByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4
NCwxNyBAQCB2b2lkIEFycmF5QnVmZmVyOjpzZXRTaGFyaW5nTW9kZShBcnJheUJ1CiAgICAgbWFr
ZVNoYXJlZCgpOwogfQogCitib29sIEFycmF5QnVmZmVyOjpzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYgcmVzdWx0KQoreworICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEgfHwgIWlzU2hh
cmVkKCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV9jb250ZW50cy5zaGFyZVdpdGgocmVzdWx0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXJUbyhWTSYg
dm0sIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWY8QXJyYXlCdWZmZXI+
IHByb3RlY3QoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CiAgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CisgICAgCiAg
ICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogICAgIApAQCAtMTMx
LDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBwaW5BbmRMb2NrKCk7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyVG8oVk0mLCBBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1f
ZGF0YTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEYXRhKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5QnVmZmVyLCBtX2NvbnRlbnRzKSArIE9CSkVDVF9PRkZT
RVRPRihBcnJheUJ1ZmZlckNvbnRlbnRzLCBtX2RhdGEpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1NyBAQAorMjAxNy0wMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFNoYXJlZEFycmF5QnVmZmVyIGRvZXMgbm90IG5lZWQgdG8gYmUgaW4g
dGhlIHRyYW5zZmVyIGxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzOiB3b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCisgICAgICAgICAg
ICAgICB3b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbAorICAgICAgICAgICAgICAg
d29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1sCisgICAgICAgICAg
ICAgICB3b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwKKyAgICAgICAg
CisgICAgICAgIFRoZSBTQUIgQVBJIHRoYXQgd2Ugb3JpZ2luYWxseSBpbXBsZW1lbnRlZCByZXF1
aXJlZCB0aGF0IFNBQnMgZ2V0IHB1dCBpbiB0cmFuc2ZlciBsaXN0cworICAgICAgICB3aGVuIHRo
ZXkgYXJlIHNlbnQgdG8gd29ya2Vycy4KKyAgICAgICAgCisgICAgICAgIFRoZSBuZXcgU0FCIEFQ
SSB0aGF0IGV2ZXJ5b25lIGlzIGNvbnZlcmdpbmcgdG93YXJkcyByZXF1aXJlcyB0aGF0IHlvdSBk
byBub3QgcHV0IHRoZQorICAgICAgICBTQUIgaW4gdGhlIHRyYW5zZmVyIGxpc3QuIFRoYXQncyBz
dXBwb3NlZCB0byBiZSBhbiBlcnJvci4gSW5zdGVhZCwgYW55dGltZSB0aGF0IGEgU0FCCisgICAg
ICAgIGlzIHBhcnQgb2YgYW55IG1lc3NhZ2UgdG8gb3IgZnJvbSBhIGRlZGljYXRlZCB3b3JrZXIg
dGhlbiBpdCBpcyBhdXRvbWF0aWNhbGx5IHNoYXJlZC4KKyAgICAgICAgCisgICAgICAgIFRoZSBu
ZXcgQVBJIHByb3ZpZGVzIGEgbG90IG1vcmUgY2xhcml0eSBhYm91dCB3aGF0IGlzIHN1cHBvc2Vk
IHRvIGhhcHBlbiBpbiBjb250ZXh0cworICAgICAgICB0aGF0IHN1cHBvcnQgdHJhbnNmZXJpbmcg
YnV0IGRvbid0IHN1cHBvcnQgc2hhcmluZy4KKyAgICAgICAgCisgICAgICAgIFJpZ2h0IG5vdyB0
aGlzIHBhdGNoIGFsbG93cyBib3RoIHN0eWxlcyB0byB3b3JrLCBidXQgSSBob3BlIHdlIGNhbiBk
aXNhYmxlIHRoZSB0cmFuc2ZlcgorICAgICAgICBsaXN0IGNhcGFiaWxpdHkgc29vbi4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNZXNzYWdl
RXZlbnQ6OmRhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OkNsb25lU2VyaWFsaXplcik6CisgICAg
ICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJZlRlcm1pbmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDbG9uZURlc2VyaWFsaXplcjo6Q2xvbmVEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogZG9tL0N1c3RvbUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUV2
ZW50Ojp0cnlTZXJpYWxpemVEZXRhaWwpOgorICAgICAgICAqIGRvbS9FcnJvckV2ZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkVycm9yRXZlbnQ6OnRyeVNlcmlhbGl6ZUVycm9yKToKKyAgICAg
ICAgKiBkb20vTWVzc2FnZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVu
dDo6dHJ5U2VyaWFsaXplRGF0YSk6CisgICAgICAgICogZG9tL1BvcFN0YXRlRXZlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wU3RhdGVFdmVudDo6dHJ5U2VyaWFsaXplU3RhdGUpOgorICAg
ICAgICAqIHdvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6OnBvc3RNZXNzYWdlKToKKyAgICAg
ICAgKiB3b3JrZXJzL1dvcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXI6OnBvc3RN
ZXNzYWdlKToKKwogMjAxNy0wMi0wOSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBDb25maWd1cmUgTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMgdG8gZ2VuZXJh
dGUgc3RlcmVvIGF1ZGlvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0NSw3ICszNDUsNyBAQCBzdGF0aWMgSlNWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9K
U1ZhCiAKICAgICBzdGF0ZS52bSgpLmFwaUxvY2soKS5sb2NrKCk7CiAgICAgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+IG1lc3NhZ2VQb3J0czsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHNlcmlh
bGl6ZWRWYWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0
cywgdmFsdWUuYmxvYlVSTHMoKSwgdmFsdWUuYmxvYkZpbGVQYXRocygpLCBOb25UaHJvd2luZyk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKHN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIHZhbHVlLmJsb2JVUkxzKCksIHZhbHVlLmJs
b2JGaWxlUGF0aHMoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAg
IHN0YXRlLnZtKCkuYXBpTG9jaygpLnVubG9jaygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBA
QCBKU1ZhbHVlIEpTTWVzc2FnZUV2ZW50OjpkYXRhKEV4ZWNTdGF0ZSYgCiAgICAgICAgIGlmIChS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBldmVudC5kYXRh
QXNTZXJpYWxpemVkU2NyaXB0VmFsdWUoKSkgewogICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxN
ZXNzYWdlUG9ydD4+IHBvcnRzID0gd3JhcHBlZCgpLnBvcnRzKCk7CiAgICAgICAgICAgICAvLyBG
SVhNRTogV2h5IGRvZXMgdGhpcyBzdXBwcmVzcyBleGNlcHRpb25zPwotICAgICAgICAgICAgcmVz
dWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0KCks
IHBvcnRzLCBOb25UaHJvd2luZyk7CisgICAgICAgICAgICByZXN1bHQgPSBzZXJpYWxpemVkVmFs
dWUtPmRlc2VyaWFsaXplKHN0YXRlLCBnbG9iYWxPYmplY3QoKSwgcG9ydHMsIFNlcmlhbGl6YXRp
b25FcnJvck1vZGU6Ok5vblRocm93aW5nKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBy
ZXN1bHQgPSBqc051bGwoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBlbnVtIFNlcmlhbGl6
YXRpb25UYWcgewogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogICAgIENyeXB0b0tleVRhZyA9
IDMzLAogI2VuZGlmCisgICAgU2hhcmVkQXJyYXlCdWZmZXJUYWcgPSAzNCwKICAgICBFcnJvclRh
ZyA9IDI1NQogfTsKIApAQCAtNDc2LDkgKzQ3Nyw5IEBAIHRlbXBsYXRlIDw+IGJvb2wgd3JpdGVM
aXR0bGVFbmRpYW48dWludDgKIAogY2xhc3MgQ2xvbmVTZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgU2VyaWFsaXphdGlvblJldHVybkNvZGUgc2VyaWFsaXplKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+
JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+JiBhcnJheUJ1
ZmZlcnMsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQpCisg
ICAgc3RhdGljIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIHNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBv
cnRzLCBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzLCBWZWN0
b3I8U3RyaW5nPiYgYmxvYlVSTHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0LCBTZXJpYWxpemF0aW9u
Q29udGV4dCBjb250ZXh0LCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkmIHNoYXJlZEJ1ZmZlcnMp
CiAgICAgewotICAgICAgICBDbG9uZVNlcmlhbGl6ZXIgc2VyaWFsaXplcihleGVjLCBtZXNzYWdl
UG9ydHMsIGFycmF5QnVmZmVycywgYmxvYlVSTHMsIG91dCk7CisgICAgICAgIENsb25lU2VyaWFs
aXplciBzZXJpYWxpemVyKGV4ZWMsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBibG9iVVJM
cywgb3V0LCBjb250ZXh0LCBzaGFyZWRCdWZmZXJzKTsKICAgICAgICAgcmV0dXJuIHNlcmlhbGl6
ZXIuc2VyaWFsaXplKHZhbHVlKTsKICAgICB9CiAKQEAgLTUyNSwxMSArNTI2LDEzIEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPEpTT2JqZWN0KiwgdWludDMyX3Q+IE9i
amVjdFBvb2w7CiAKLSAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBWZWN0b3I8
UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBWZWN0
b3I8dWludDhfdD4mIG91dCkKKyAgICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBW
ZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxz
LCBWZWN0b3I8dWludDhfdD4mIG91dCwgU2VyaWFsaXphdGlvbkNvbnRleHQgY29udGV4dCwgQXJy
YXlCdWZmZXJDb250ZW50c0FycmF5JiBzaGFyZWRCdWZmZXJzKQogICAgICAgICA6IENsb25lQmFz
ZShleGVjKQogICAgICAgICAsIG1fYnVmZmVyKG91dCkKICAgICAgICAgLCBtX2Jsb2JVUkxzKGJs
b2JVUkxzKQogICAgICAgICAsIG1fZW1wdHlJZGVudGlmaWVyKElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgZW1wdHlTdHJpbmcoKSkpCisgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgICAgICwgbV9zaGFyZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCiAgICAgewogICAgICAgICB3
cml0ZShDdXJyZW50VmVyc2lvbik7CiAgICAgICAgIGZpbGxUcmFuc2Zlck1hcChtZXNzYWdlUG9y
dHMsIG1fdHJhbnNmZXJyZWRNZXNzYWdlUG9ydHMpOwpAQCAtODYxLDYgKzg2NCwxOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0T2JqZWN0
SW50ZXJuYWwob2JqKSkgLy8gaGFuZGxlIGR1cGxpY2F0ZXMKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGFycmF5
QnVmZmVyLT5pc1NoYXJlZCgpCisgICAgICAgICAgICAgICAgICAgICYmIG1fY29udGV4dCA9PSBT
ZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBtX3NoYXJlZEJ1ZmZlcnMuc2l6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBBcnJheUJ1ZmZlckNvbnRlbnRzIGNvbnRlbnRzOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJyYXlCdWZmZXItPnNoYXJlV2l0aChjb250ZW50cykpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlKFNoYXJlZEFycmF5QnVmZmVyVGFnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc2hhcmVkQnVmZmVycy5hcHBlbmQoV1RGTW92ZShjb250ZW50cykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGUoaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgd3JpdGUoQXJyYXlCdWZmZXJUYWcp
OwogICAgICAgICAgICAgICAgIHdyaXRlKGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwogICAg
ICAgICAgICAgICAgIHdyaXRlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihhcnJheUJ1ZmZl
ci0+ZGF0YSgpKSwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CkBAIC04ODAsNyArODk2LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBkdW1teUJsb2JVUkxz
OwogICAgICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBkdW1teU1lc3Nh
Z2VQb3J0czsKICAgICAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+
PiBkdW1teUFycmF5QnVmZmVyczsKLSAgICAgICAgICAgICAgICBDbG9uZVNlcmlhbGl6ZXIgcmF3
S2V5U2VyaWFsaXplcihtX2V4ZWMsIGR1bW15TWVzc2FnZVBvcnRzLCBkdW1teUFycmF5QnVmZmVy
cywgZHVtbXlCbG9iVVJMcywgc2VyaWFsaXplZEtleSk7CisgICAgICAgICAgICAgICAgQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5IGR1bW15U2hhcmVkQnVmZmVyczsKKyAgICAgICAgICAgICAgICBD
bG9uZVNlcmlhbGl6ZXIgcmF3S2V5U2VyaWFsaXplcihtX2V4ZWMsIGR1bW15TWVzc2FnZVBvcnRz
LCBkdW1teUFycmF5QnVmZmVycywgZHVtbXlCbG9iVVJMcywgc2VyaWFsaXplZEtleSwgU2VyaWFs
aXphdGlvbkNvbnRleHQ6OkRlZmF1bHQsIGR1bW15U2hhcmVkQnVmZmVycyk7CiAgICAgICAgICAg
ICAgICAgcmF3S2V5U2VyaWFsaXplci53cml0ZShrZXkpOwogICAgICAgICAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiB3cmFwcGVkS2V5OwogICAgICAgICAgICAgICAgIGlmICghd3JhcENyeXB0b0tl
eShtX2V4ZWMsIHNlcmlhbGl6ZWRLZXksIHdyYXBwZWRLZXkpKQpAQCAtMTIxOCw2ICsxMjM1LDgg
QEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFVuaXF1ZWRTdHJpbmdJbXBs
PiwgdWludDMyX3QsIElkZW50aWZpZXJSZXBIYXNoPiBTdHJpbmdDb25zdGFudFBvb2w7CiAgICAg
U3RyaW5nQ29uc3RhbnRQb29sIG1fY29uc3RhbnRQb29sOwogICAgIElkZW50aWZpZXIgbV9lbXB0
eUlkZW50aWZpZXI7CisgICAgU2VyaWFsaXphdGlvbkNvbnRleHQgbV9jb250ZXh0OworICAgIEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheSYgbV9zaGFyZWRCdWZmZXJzOwogfTsKIAogU2VyaWFsaXph
dGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoSlNWYWx1ZSBpbikKQEAg
LTE0ODksMTEgKzE1MDgsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc3RyOwogICAgIH0K
IAotICAgIHN0YXRpYyBEZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoRXhlY1N0YXRl
KiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0
aHMpCisgICAgc3RhdGljIERlc2VyaWFsaXphdGlvblJlc3VsdCBkZXNlcmlhbGl6ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQdHI8TWVz
c2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIGFycmF5
QnVmZmVyQ29udGVudHNBcnJheSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQ
YXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRCdWZmZXJzKQogICAgIHsKICAg
ICAgICAgaWYgKCFidWZmZXIuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGpzTnVsbCgpLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VW5zcGVjaWZpZWRFcnJvcik7
Ci0gICAgICAgIENsb25lRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplcihleGVjLCBnbG9iYWxPYmpl
Y3QsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LCBidWZmZXIsIGJsb2JV
UkxzLCBibG9iRmlsZVBhdGhzKTsKKyAgICAgICAgQ2xvbmVEZXNlcmlhbGl6ZXIgZGVzZXJpYWxp
emVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXksIGJ1ZmZlciwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMsIHNoYXJlZEJ1ZmZlcnMpOwog
ICAgICAgICBpZiAoIWRlc2VyaWFsaXplci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRh
dGlvbkVycm9yKTsKICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplci5kZXNlcmlhbGl6ZSgpOwpA
QCAtMTU1Myw3ICsxNTcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDB4
RkZGRkZGRkY7CiAgICAgfQogCi0gICAgQ2xvbmVEZXNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
Pj4mIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNv
bnRlbnRzLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzKQorICAgIENs
b25lRGVzZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIEFycmF5QnVm
ZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9y
PFN0cmluZz4gYmxvYkZpbGVQYXRocywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBzaGFyZWRC
dWZmZXJzKQogICAgICAgICA6IENsb25lQmFzZShleGVjKQogICAgICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KGdsb2JhbE9iamVjdCkKICAgICAgICAgLCBtX2lzRE9NR2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdC0+aW5oZXJpdHMoZ2xvYmFsT2JqZWN0LT52bSgpLCBKU0RPTUdsb2JhbE9iamVjdDo6aW5m
bygpKSkKQEAgLTE1NjUsNiArMTU4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9hcnJheUJ1
ZmZlcnMoYXJyYXlCdWZmZXJDb250ZW50cyA/IGFycmF5QnVmZmVyQ29udGVudHMtPnNpemUoKSA6
IDApCiAgICAgICAgICwgbV9ibG9iVVJMcyhibG9iVVJMcykKICAgICAgICAgLCBtX2Jsb2JGaWxl
UGF0aHMoYmxvYkZpbGVQYXRocykKKyAgICAgICAgLCBtX3NoYXJlZEJ1ZmZlcnMoc2hhcmVkQnVm
ZmVycykKICAgICB7CiAgICAgICAgIGlmICghcmVhZChtX3ZlcnNpb24pKQogICAgICAgICAgICAg
bV92ZXJzaW9uID0gMHhGRkZGRkZGRjsKQEAgLTIzODcsNiArMjQwNywyMCBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShtX2FycmF5QnVmZmVyc1tpbmRleF0uZ2V0
KCkpOwogICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhcmVkQXJyYXlCdWZmZXJUYWc6IHsKKyAg
ICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gVUlOVF9NQVg7CisgICAgICAgICAgICBib29sIGlu
ZGV4U3VjY2Vzc2Z1bGx5UmVhZCA9IHJlYWQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpbmRl
eFN1Y2Nlc3NmdWxseVJlYWQgfHwgIW1fc2hhcmVkQnVmZmVycyB8fCBpbmRleCA+PSBtX3NoYXJl
ZEJ1ZmZlcnMtPnNpemUoKSkgeworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NoYXJlZEJ1ZmZlcnMtPmF0KGluZGV4KSk7CisgICAg
ICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
V1RGTW92ZShtX3NoYXJlZEJ1ZmZlcnMtPmF0KGluZGV4KSkpOworICAgICAgICAgICAgSlNWYWx1
ZSByZXN1bHQgPSBnZXRKU1ZhbHVlKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICBtX2djQnVm
ZmVyLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQogICAgICAgICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzogewogICAgICAgICAgICAgSlNWYWx1
ZSBhcnJheUJ1ZmZlclZpZXc7CiAgICAgICAgICAgICBpZiAoIXJlYWRBcnJheUJ1ZmZlclZpZXco
bV9leGVjLT52bSgpLCBhcnJheUJ1ZmZlclZpZXcpKSB7CkBAIC0yNDQ1LDYgKzI0NzksNyBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+IG1fYXJyYXlCdWZm
ZXJzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7CiAgICAgVmVjdG9yPFN0cmluZz4g
bV9ibG9iRmlsZVBhdGhzOworICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogbV9zaGFyZWRC
dWZmZXJzOwogCiAgICAgU3RyaW5nIGJsb2JGaWxlUGF0aEZvckJsb2JVUkwoY29uc3QgU3RyaW5n
JiBibG9iVVJMKQogICAgIHsKQEAgLTI2NTQsOSArMjY4OSwxMCBAQCBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWCiB7CiB9CiAKLVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50
c0FycmF5PiYmIGFycmF5QnVmZmVyQ29udGVudHNBcnJheSkKK1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYmIGJ1ZmZlciwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250
ZW50c0FycmF5PiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXksIHN0ZDo6dW5pcXVlX3B0cjxBcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXkpCiAgICAgOiBt
X2RhdGEoV1RGTW92ZShidWZmZXIpKQogICAgICwgbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXko
V1RGTW92ZShhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkpKQorICAgICwgbV9zaGFyZWRCdWZmZXJD
b250ZW50c0FycmF5KFdURk1vdmUoc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheSkpCiB7CiAgICAg
Ly8gU2luY2UgdGhpcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUgaXMgbWVhbnQgdG8gYmUgcGFzc2Vk
IGJldHdlZW4gdGhyZWFkcywgaXRzIFN0cmluZyBkYXRhIG1lbWJlcnMKICAgICAvLyBuZWVkIHRv
IGJlIGlzb2xhdGVkQ29waWVzIHNvIHdlIGRvbid0IHJ1biBpbnRvIHRocmVhZCBzYWZldHkgaXNz
dWVzIGZvciB0aGUgU3RyaW5nSW1wbHMuCkBAIC0yNzQxLDE4ICsyNzc3LDE5IEBAIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWQKICAgICBWZWN0b3I8U3RyaW5nPiBibG9i
VVJMczsKICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gZHVtbXlNZXNzYWdlUG9ydHM7
CiAgICAgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4gZHVtbXlBcnJheUJ1ZmZlcnM7
Ci0gICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoJmV4ZWMsIHZhbHVl
LCBkdW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIGJsb2JVUkxzLCBidWZmZXIp
OworICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSBkdW1teVNoYXJlZEJ1ZmZlcnM7CisgICAg
YXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoJmV4ZWMsIHZhbHVlLCBkdW1t
eU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIGJsb2JVUkxzLCBidWZmZXIsIFNlcmlh
bGl6YXRpb25Db250ZXh0OjpEZWZhdWx0LCBkdW1teVNoYXJlZEJ1ZmZlcnMpOwogCi0gICAgaWYg
KHRocm93RXhjZXB0aW9ucyA9PSBUaHJvd2luZykKKyAgICBpZiAodGhyb3dFeGNlcHRpb25zID09
IFNlcmlhbGl6YXRpb25FcnJvck1vZGU6OlRocm93aW5nKQogICAgICAgICBtYXliZVRocm93RXhj
ZXB0aW9uSWZTZXJpYWxpemF0aW9uRmFpbGVkKGV4ZWMsIGNvZGUpOwogCiAgICAgaWYgKGNvZGUg
IT0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN1Y2Nlc3NmdWxseUNvbXBsZXRlZCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXJpYWxpemVk
U2NyaXB0VmFsdWUoV1RGTW92ZShidWZmZXIpLCBibG9iVVJMcywgbnVsbHB0cikpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKGJ1ZmZlciks
IGJsb2JVUkxzLCBudWxscHRyLCBudWxscHRyKSk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4+JiYgdHJhbnNmZXJMaXN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQ
b3J0cykKK0V4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBWZWN0
b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXJMaXN0LCBWZWN0b3I8UmVm
UHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlvbkNvbnRleHQgY29u
dGV4dCkKIHsKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIFZlY3RvcjxSZWZQdHI8SlND
OjpBcnJheUJ1ZmZlcj4+IGFycmF5QnVmZmVyczsKQEAgLTI3NjAsNiArMjc5Nyw4IEBAIEV4Y2Vw
dGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiAKICAgICAgICAgaWYgKGF1dG8gYXJy
YXlCdWZmZXIgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXIodm0sIHRyYW5zZmVyYWJsZS5n
ZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZlci0+aXNOZXV0ZXJlZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9OworICAgICAg
ICAgICAgaWYgKGFycmF5QnVmZmVyLT5pc1NoYXJlZCgpICYmIGNvbnRleHQgIT0gU2VyaWFsaXph
dGlvbkNvbnRleHQ6OldvcmtlclBvc3RNZXNzYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBEQVRBX0NMT05FX0VSUiB9OwogICAgICAgICAgICAgYXJyYXlCdWZmZXJzLmFw
cGVuZChXVEZNb3ZlKGFycmF5QnVmZmVyKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQpAQCAtMjc3NCw3ICsyODEzLDggQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4+IAogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKICAgICBWZWN0b3I8U3Ry
aW5nPiBibG9iVVJMczsKLSAgICBhdXRvIGNvZGUgPSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZSgmc3RhdGUsIHZhbHVlLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgYmxvYlVSTHMsIGJ1
ZmZlcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gc2hh
cmVkQnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5Pigp
OworICAgIGF1dG8gY29kZSA9IENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKCZzdGF0ZSwgdmFs
dWUsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJzLCBibG9iVVJMcywgYnVmZmVyLCBjb250ZXh0
LCAqc2hhcmVkQnVmZmVycyk7CiAKICAgICBpZiAoY29kZSAhPSBTZXJpYWxpemF0aW9uUmV0dXJu
Q29kZTo6U3VjY2Vzc2Z1bGx5Q29tcGxldGVkKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uRm9y
U2VyaWFsaXphdGlvbkZhaWx1cmUoY29kZSk7CkBAIC0yNzgzLDcgKzI4MjMsNyBAQCBFeGNlcHRp
b25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gCiAgICAgaWYgKGFycmF5QnVmZmVyQ29u
dGVudHNBcnJheS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGFycmF5QnVmZmVyQ29u
dGVudHNBcnJheS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZmZXIpLCBibG9iVVJMcywgYXJyYXlC
dWZmZXJDb250ZW50c0FycmF5LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFdURk1vdmUoYnVmZmVyKSwgYmxvYlVS
THMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJheS5yZWxlYXNlUmV0dXJuVmFsdWUoKSwgY29udGV4
dCA9PSBTZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UgPyBXVEZNb3ZlKHNo
YXJlZEJ1ZmZlcnMpIDogbnVsbHB0cikpOwogfQogCiBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShTdHJpbmdWaWV3IHN0cmluZykKQEAg
LTI4MzMsOCArMjg3Myw4IEBAIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlh
bGkKIAogSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEV4ZWNTdGF0
ZSYgZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlhbGl6YXRpb25FcnJvck1v
ZGUgdGhyb3dFeGNlcHRpb25zKQogewotICAgIERlc2VyaWFsaXphdGlvblJlc3VsdCByZXN1bHQg
PSBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUoJmV4ZWMsIGdsb2JhbE9iamVjdCwgbWVz
c2FnZVBvcnRzLCBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSwgbV9kYXRhLCBibG9i
VVJMcywgYmxvYkZpbGVQYXRocyk7Ci0gICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBUaHJvd2lu
ZykKKyAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6ZXI6
OmRlc2VyaWFsaXplKCZleGVjLCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgbV9hcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXkuZ2V0KCksIG1fZGF0YSwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMs
IG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheS5nZXQoKSk7CisgICAgaWYgKHRocm93RXhjZXB0
aW9ucyA9PSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZykKICAgICAgICAgbWF5YmVU
aHJvd0V4Y2VwdGlvbklmU2VyaWFsaXphdGlvbkZhaWxlZChleGVjLCByZXN1bHQuc2Vjb25kKTsK
ICAgICByZXR1cm4gcmVzdWx0LmZpcnN0ID8gcmVzdWx0LmZpcnN0IDoganNOdWxsKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwxNiBA
QCBjbGFzcyBNZXNzYWdlUG9ydDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGVudW0gY2xhc3MgU2Vy
aWFsaXphdGlvblJldHVybkNvZGU7CiAKLWVudW0gU2VyaWFsaXphdGlvbkVycm9yTW9kZSB7IE5v
blRocm93aW5nLCBUaHJvd2luZyB9OworZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uRXJyb3JNb2Rl
IHsgTm9uVGhyb3dpbmcsIFRocm93aW5nIH07CitlbnVtIGNsYXNzIFNlcmlhbGl6YXRpb25Db250
ZXh0IHsgRGVmYXVsdCwgV29ya2VyUG9zdE1lc3NhZ2UgfTsKIAogdXNpbmcgQXJyYXlCdWZmZXJD
b250ZW50c0FycmF5ID0gVmVjdG9yPEpTQzo6QXJyYXlCdWZmZXJDb250ZW50cz47CiAKIGNsYXNz
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBTZXJp
YWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZyk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IGNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+
PiYmLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4+IGNyZWF0ZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+PiYmIHRyYW5zZmVyLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBTZXJpYWxpemF0
aW9uQ29udGV4dCA9IFNlcmlhbGl6YXRpb25Db250ZXh0OjpEZWZhdWx0KTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoU3Ry
aW5nVmlldyk7CiAgICAgc3RhdGljIFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGFkb3B0KFZl
Y3Rvcjx1aW50OF90PiYmIGJ1ZmZlcikKQEAgLTYzLDkgKzY0LDkgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG51bGxWYWx1ZSgpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYsIFNl
cmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7Ci0gICAgSlNDOjpKU1ZhbHVlIGRlc2Vy
aWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFZlY3RvcjxSZWZQ
dHI8TWVzc2FnZVBvcnQ+PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBU
aHJvd2luZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFNlcmlhbGl6YXRpb25FcnJvck1v
ZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZyk7CisgICAgV0VCQ09SRV9FWFBP
UlQgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYsIFNlcmlhbGl6YXRpb25FcnJv
ck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZyk7CisgICAgSlNDOjpKU1Zh
bHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIFZl
Y3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJM
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMsIFNlcmlhbGl6YXRpb25FcnJv
ck1vZGUgPSBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpUaHJvd2luZyk7CiAKICAgICBzdGF0aWMg
dWludDMyX3Qgd2lyZUZvcm1hdFZlcnNpb24oKTsKIApAQCAtOTQsMTAgKzk1LDExIEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VYUE9SVCBTZXJpYWxpemVkU2NyaXB0VmFsdWUo
VmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYpOwotICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShWZWN0
b3I8dW5zaWduZWQgY2hhcj4mJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBzdGQ6
OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiYmKTsKKyAgICBTZXJpYWxpemVk
U2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4sIHN0
ZDo6dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMpOwog
CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0YTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX2FycmF5QnVmZmVyQ29udGVudHNBcnJheTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0FycmF5PiBtX3NoYXJlZEJ1ZmZl
ckNvbnRlbnRzQXJyYXk7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9ibG9iVVJMczsKIH07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DdXN0b21FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkocmV2aXNpb24gMjExOTYwKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0N1c3RvbUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyAr
NjAsNyBAQCB2b2lkIEN1c3RvbUV2ZW50Ojppbml0Q3VzdG9tRXZlbnQoSlNDOjpFCiBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBDdXN0b21FdmVudDo6dHJ5U2VyaWFsaXplRGV0YWlsKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoIW1fdHJpZWRUb1NlcmlhbGl6ZSkgewot
ICAgICAgICBtX3NlcmlhbGl6ZWREZXRhaWwgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShzdGF0ZSwgbV9kZXRhaWwsIE5vblRocm93aW5nKTsKKyAgICAgICAgbV9zZXJpYWxpemVkRGV0
YWlsID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1fZGV0YWlsLCBTZXJp
YWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2luZyk7CiAgICAgICAgIG1fdHJpZWRUb1Nlcmlh
bGl6ZSA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiBtX3NlcmlhbGl6ZWREZXRhaWw7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0Vycm9yRXZlbnQuY3BwCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXJyb3JFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcg
QEAgSlNWYWx1ZSBFcnJvckV2ZW50OjplcnJvcihFeGVjU3RhdGUmIGV4ZQogUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gRXJyb3JFdmVudDo6dHJ5U2VyaWFsaXplRXJyb3IoRXhlY1N0YXRl
JiBleGVjKQogewogICAgIGlmICghbV90cmllZFRvU2VyaWFsaXplKSB7Ci0gICAgICAgIG1fc2Vy
aWFsaXplZERldGFpbCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIG1fZXJy
b3IuZ2V0KCksIE5vblRocm93aW5nKTsKKyAgICAgICAgbV9zZXJpYWxpemVkRGV0YWlsID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoZXhlYywgbV9lcnJvci5nZXQoKSwgU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAgICAgICBtX3RyaWVkVG9TZXJpYWxpemUg
PSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gbV9zZXJpYWxpemVkRGV0YWlsOwpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4
LDcgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gTWVzc2FnZUV2ZQogICAgIEFTU0VS
VCghbV9kYXRhQXNTY3JpcHRWYWx1ZS5oYXNOb1ZhbHVlKCkpOwogICAgIAogICAgIGlmICghbV9k
YXRhQXNTZXJpYWxpemVkU2NyaXB0VmFsdWUgJiYgIW1fdHJpZWRUb1NlcmlhbGl6ZSkgewotICAg
ICAgICBtX2RhdGFBc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKCpleGVjLCBtX2RhdGFBc1NjcmlwdFZhbHVlLmpzVmFsdWUoKSwgTm9uVGhyb3dp
bmcpOworICAgICAgICBtX2RhdGFBc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKCpleGVjLCBtX2RhdGFBc1NjcmlwdFZhbHVlLmpzVmFsdWUoKSwg
U2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcpOwogICAgICAgICBtX3RyaWVkVG9T
ZXJpYWxpemUgPSB0cnVlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Q
b3BTdGF0ZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3Rh
dGVFdmVudC5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qb3BT
dGF0ZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBQb3BTdGF0ZUV2CiAgICAgQVNTRVJUKCFtX3N0YXRlLmhhc05v
VmFsdWUoKSk7CiAgICAgCiAgICAgaWYgKCFtX3NlcmlhbGl6ZWRTdGF0ZSAmJiAhbV90cmllZFRv
U2VyaWFsaXplKSB7Ci0gICAgICAgIG1fc2VyaWFsaXplZFN0YXRlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoZXhlY3V0aW9uU3RhdGUsIG1fc3RhdGUuanNWYWx1ZSgpLCBOb25UaHJv
d2luZyk7CisgICAgICAgIG1fc2VyaWFsaXplZFN0YXRlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGUoZXhlY3V0aW9uU3RhdGUsIG1fc3RhdGUuanNWYWx1ZSgpLCBTZXJpYWxpemF0aW9u
RXJyb3JNb2RlOjpOb25UaHJvd2luZyk7CiAgICAgICAgIG1fdHJpZWRUb1NlcmlhbGl6ZSA9IHRy
dWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWRpY2F0ZWRX
b3JrZXJHbG9iYWxTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vy
cy9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZS5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIERlZGljYXRl
ZFdvcmtlckdsb2IKIEV4Y2VwdGlvbk9yPHZvaWQ+IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3Bl
Ojpwb3N0TWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSBtZXNzYWdl
VmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJiB0cmFuc2ZlcikKIHsK
ICAgICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gcG9ydHM7Ci0gICAgYXV0byBtZXNzYWdl
ID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1lc3NhZ2VWYWx1ZSwgV1RG
TW92ZSh0cmFuc2ZlciksIHBvcnRzKTsKKyAgICBhdXRvIG1lc3NhZ2UgPSBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVlLCBXVEZNb3ZlKHRyYW5zZmVyKSwg
cG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3JrZXJQb3N0TWVzc2FnZSk7CiAgICAgaWYg
KG1lc3NhZ2UuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBtZXNzYWdlLnJlbGVhc2VF
eGNlcHRpb24oKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkocmV2aXNpb24g
MjExOTYwKQorKysgU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgV29ya2VyOjp+V29ya2VyKCkKIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdvcmtlcjo6cG9zdE1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgbWVzc2FnZVZhbHVlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJh
bnNmZXIpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+IHBvcnRzOwotICAgIGF1
dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCBtZXNzYWdl
VmFsdWUsIFdURk1vdmUodHJhbnNmZXIpLCBwb3J0cyk7CisgICAgYXV0byBtZXNzYWdlID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1lc3NhZ2VWYWx1ZSwgV1RGTW92ZSh0
cmFuc2ZlciksIHBvcnRzLCBTZXJpYWxpemF0aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2Up
OwogICAgIGlmIChtZXNzYWdlLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gbWVzc2Fn
ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTk2MCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDE3
LTAyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmVk
QXJyYXlCdWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0aGUgdHJhbnNmZXIgbGlzdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MDc5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IGFkZHMgdGVzdHMgdGhhdCBlbnN1cmUgdGhhdCBTQUJzIGJlaGF2ZSBjb3JyZWN0bHkgKGFyZSBl
aXRoZXIgY2xvbmVkIG9yIHNoYXJlZCkKKyAgICAgICAgZGVwZW5kaW5nIG9uIGNvbnRleHQsIGFu
ZCB0aGF0IHdlIGN1cnJlbnRseSBzaGFyZSBTQUJzIHdoZXRoZXIgdGhleSBhcmUgaW4gdGhlIHRy
YW5zZmVyCisgICAgICAgIGxpc3Qgb3Igbm90LgorCisgICAgICAgICogd29ya2Vycy9zYWIvbm8t
dHJhbnNmZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd29ya2Vycy9zYWIvcG9zdE1lc3NhZ2Ut
Y2xvbmVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMvc2FiL3NhYi1jcmVhdG9yLW5v
LXRyYW5zZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NhYi9zYWItY3JlYXRvci10
cmFuc2Zlci5qczogQWRkZWQuCisgICAgICAgICogd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtl
ci1uby10cmFuc2Zlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NhYi9zZW50LWZy
b20td29ya2VyLXRyYW5zZmVyLmh0bWw6IEFkZGVkLgorCiAyMDE3LTAyLTA5ICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdU
SysgZ2FyZGVuaW5nLiBTa2lwIHRlc3RzIHRoYXQgcmVxdWlyZSBVSVNjcmlwdENvbnRyb2xsZXI6
Onpvb21Ub1NjYWxlLgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5
LW11bHRpLWJ1ZmZlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2Fi
L211bHRpLW1lbW9yeS1tdWx0aS1idWZmZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktbXVsdGktYnVmZmVyLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4OCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4K
K2Z1bmN0aW9uIGdldE9yQ3JlYXRlKGlkLCB0YWdOYW1lKQoreworICAgIHZhciBlbGVtZW50ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKKyAgICAKKyAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCh0YWdOYW1lKTsKKyAgICBlbGVtZW50LmlkID0gaWQ7CisgICAgdmFyIHBhcmVudCA9IGRvY3Vt
ZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OworICAgIHZhciByZWZOb2RlID0g
cGFyZW50LmZpcnN0Q2hpbGQ7CisgICAgCisgICAgcGFyZW50Lmluc2VydEJlZm9yZShlbGVtZW50
LCByZWZOb2RlKTsKKyAgICByZXR1cm4gZWxlbWVudDsKK30KKworZnVuY3Rpb24gZGVidWcobXNn
KQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
IGdldE9yQ3JlYXRlKCJjb25zb2xlIiwgImRpdiIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNl
cnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZQorICAgIHNwYW4uaW5uZXJI
VE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgp
OworfQorCit2YXIgdmVyYm9zZSA9IGZhbHNlOworCit2YXIgZGlkU3RhcnQgPSBuZXcgSW50MzJB
cnJheShuZXcgU2hhcmVkQXJyYXlCdWZmZXIoNCksIDAsIDEpOwordmFyIHNob3VsZEdvID0gbmV3
IEludDMyQXJyYXkobmV3IFNoYXJlZEFycmF5QnVmZmVyKDQpLCAwLCAxKTsKK3ZhciBkaWRFbmQg
PSBuZXcgSW50MzJBcnJheShuZXcgU2hhcmVkQXJyYXlCdWZmZXIoNCksIDAsIDEpOworCit2YXIg
bnVtV29ya2VycyA9IDA7CitmdW5jdGlvbiBzdGFydFdvcmtlcihmaWxlKQoreworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkZWJ1ZygiU3RhcnRpbmcgd29ya2VyOiAiICsgZmlsZSk7CisgICAg
bnVtV29ya2VycysrOworICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGZpbGUpOworICAgIHdv
cmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgICAgICBpZiAoZXZlbnQuZGF0
YSA9PSAiZG9uZSIpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRlYnVnKCJGaW5pc2hlZCB3b3JrZXI6ICIgKyBmaWxlKTsKKyAgICAgICAgICAgIGlmICgtLW51
bVdvcmtlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgZGVidWcoIkFs
bCB3b3JrZXJzIGRvbmUhIik7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV2ZW50LmRhdGEuaW5kZXhPZigiRXJyb3IiKSA9
PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZygiVGVzdCBmYWlsZWQ6ICIrIGV2ZW50LmRhdGEpOwor
ICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICAgICAgICAgIHRlc3RS
dW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRlYnVnKCJFdmVudCBmcm9tICIgKyBmaWxlICsgIjogIiArIGV2
ZW50LmRhdGEpOworICAgIH07CisgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtkaWRTdGFydDogZGlk
U3RhcnQsIHNob3VsZEdvOiBzaG91bGRHbywgZGlkRW5kOiBkaWRFbmQsIHNob3VsZFNoYXJlQnVm
ZmVyOiBmYWxzZX0pOworfQorCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBpZiAoZGlkU3RhcnRb
MF0gIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgZGlkU3RhcnRbMF06
ICIgKyBkaWRTdGFydFswXTsKKyAgICBpZiAoc2hvdWxkR29bMF0gIT0gMSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgc2hvdWxkR29bMF06ICIgKyBzaG91bGRHb1swXTsKKyAg
ICBpZiAoZGlkRW5kWzBdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0
IGRpZEVuZFswXTogIiArIGRpZEVuZFswXTsKKyAgICBkZWJ1ZygiVGVzdCBwYXNzZWQhIik7CisK
KyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9u
ZSgpOworfQorCitzdGFydFdvcmtlcigibXVsdGktbWVtb3J5LXdvcmtlci0xLmpzIik7CitzdGFy
dFdvcmtlcigibXVsdGktbWVtb3J5LXdvcmtlci0yLmpzIik7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LXdv
cmtlci0xLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1l
bW9yeS13b3JrZXItMS5qcwkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJzL3Nh
Yi9tdWx0aS1tZW1vcnktd29ya2VyLTEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBA
QAoraW1wb3J0U2NyaXB0cygid29ya2VyLXJlc291cmNlcy5qcyIpOworCitvbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZlbnQpIHsKKyAgICB2YXIgZGlkU3RhcnQgPSBldmVudC5kYXRhLmRpZFN0YXJ0
OworICAgIHZhciBzaG91bGRHbyA9IGV2ZW50LmRhdGEuc2hvdWxkR287CisgICAgdmFyIGRpZEVu
ZCA9IGV2ZW50LmRhdGEuZGlkRW5kOworCisgICAgY2hlY2tCdWZmZXJTaGFyaW5nKGV2ZW50LmRh
dGEuc2hvdWxkU2hhcmVCdWZmZXIsIGRpZFN0YXJ0LCBzaG91bGRHbywgZGlkRW5kKTsKKyAgICAK
KyAgICBwb3N0TWVzc2FnZSgiU3RhcnRlZCEiKTsKKyAgICBwb3N0TWVzc2FnZSgiZGlkU3RhcnQ6
ICIgKyBkaWRTdGFydCk7CisgICAgcG9zdE1lc3NhZ2UoInNob3VsZEdvOiAiICsgc2hvdWxkR28p
OworICAgIHBvc3RNZXNzYWdlKCJkaWRFbmQ6ICIgKyBkaWRFbmQpOworICAgIAorICAgIHdhaXQo
ZGlkU3RhcnQsIDAsIDAsIDEpOworICAgIAorICAgIHBvc3RNZXNzYWdlKCJJdCBzdGFydGVkISIp
OworICAgIAorICAgIHNob3VsZEdvWzBdID0gMTsKKyAgICB3YWtlKHNob3VsZEdvLCAwKTsKKyAg
ICAKKyAgICB3YWl0KGRpZEVuZCwgMCwgMCwgMSk7CisgICAgCisgICAgcG9zdE1lc3NhZ2UoIkFs
bCBkb25lISIpOworICAgIHBvc3RNZXNzYWdlKCJkaWRTdGFydDogIiArIGRpZFN0YXJ0KTsKKyAg
ICBwb3N0TWVzc2FnZSgic2hvdWxkR286ICIgKyBzaG91bGRHbyk7CisgICAgcG9zdE1lc3NhZ2Uo
ImRpZEVuZDogIiArIGRpZEVuZCk7CisgICAgcG9zdE1lc3NhZ2UoImRvbmUiKTsKK30KSW5kZXg6
IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS13b3JrZXItMi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktd29ya2VyLTIuanMJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LXdv
cmtlci0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKK2ltcG9ydFNjcmlwdHMo
Indvcmtlci1yZXNvdXJjZXMuanMiKTsKKworb25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICB2YXIgZGlkU3RhcnQgPSBldmVudC5kYXRhLmRpZFN0YXJ0OworICAgIHZhciBzaG91bGRH
byA9IGV2ZW50LmRhdGEuc2hvdWxkR287CisgICAgdmFyIGRpZEVuZCA9IGV2ZW50LmRhdGEuZGlk
RW5kOworCisgICAgY2hlY2tCdWZmZXJTaGFyaW5nKGV2ZW50LmRhdGEuc2hvdWxkU2hhcmVCdWZm
ZXIsIGRpZFN0YXJ0LCBzaG91bGRHbywgZGlkRW5kKTsKKyAgICAKKyAgICBwb3N0TWVzc2FnZSgi
U3RhcnRlZCEiKTsKKyAgICBwb3N0TWVzc2FnZSgiZGlkU3RhcnQ6ICIgKyBkaWRTdGFydCk7Cisg
ICAgcG9zdE1lc3NhZ2UoInNob3VsZEdvOiAiICsgc2hvdWxkR28pOworICAgIHBvc3RNZXNzYWdl
KCJkaWRFbmQ6ICIgKyBkaWRFbmQpOworICAgIAorICAgIEF0b21pY3Muc3RvcmUoZGlkU3RhcnQs
IDAsIDEpOworICAgIHdha2UoZGlkU3RhcnQsIDApOworCisgICAgd2FpdChzaG91bGRHbywgMCwg
MCwgMSk7CisgICAgCisgICAgQXRvbWljcy5zdG9yZShkaWRFbmQsIDAsIDEpOworICAgIHdha2Uo
ZGlkRW5kLCAwLCAxKTsKKworICAgIHBvc3RNZXNzYWdlKCJkaWRTdGFydDogIiArIGRpZFN0YXJ0
KTsKKyAgICBwb3N0TWVzc2FnZSgic2hvdWxkR286ICIgKyBzaG91bGRHbyk7CisgICAgcG9zdE1l
c3NhZ2UoImRpZEVuZDogIiArIGRpZEVuZCk7CisgICAgcG9zdE1lc3NhZ2UoImRvbmUiKTsKK30K
SW5kZXg6IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS5odG1sCShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQodGFnTmFtZSk7CisgICAgZWxlbWVudC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBk
b2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9k
ZSA9IHBhcmVudC5maXJzdENoaWxkOworICAgIAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxl
bWVudCwgcmVmTm9kZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVn
KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICBnZXRPckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8g
aW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlu
bmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
KyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERv
bmUoKTsKK30KKwordmFyIHZlcmJvc2UgPSBmYWxzZTsKKwordmFyIHNhYiA9IG5ldyBTaGFyZWRB
cnJheUJ1ZmZlcigzICogNCk7CisKK3ZhciBkaWRTdGFydCA9IG5ldyBJbnQzMkFycmF5KHNhYiwg
MCwgMSk7Cit2YXIgc2hvdWxkR28gPSBuZXcgSW50MzJBcnJheShzYWIsIDQsIDEpOwordmFyIGRp
ZEVuZCA9IG5ldyBJbnQzMkFycmF5KHNhYiwgOCwgMSk7CisKK3ZhciBudW1Xb3JrZXJzID0gMDsK
K2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAgICBudW1Xb3JrZXJzKys7Cisg
ICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikgewor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGVidWcoIkZpbmlzaGVk
IHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0tbnVtV29ya2VycykKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1ZygiQWxsIHdvcmtlcnMgZG9uZSEi
KTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIpID09IDApIHsKKyAgICAgICAg
ICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7CisgICAgICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsgZXZlbnQuZGF0YSk7CisgICAg
fTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2RpZFN0YXJ0OiBkaWRTdGFydCwgc2hvdWxkR286
IHNob3VsZEdvLCBkaWRFbmQ6IGRpZEVuZCwgc2hvdWxkU2hhcmVCdWZmZXI6IHRydWV9KTsKK30K
KworZnVuY3Rpb24gZG9uZSgpCit7CisgICAgaWYgKGRpZFN0YXJ0WzBdICE9IDEpCisgICAgICAg
IHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0IGRpZFN0YXJ0WzBdOiAiICsgZGlkU3RhcnRbMF07
CisgICAgaWYgKHNob3VsZEdvWzBdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZh
bHVlIGF0IHNob3VsZEdvWzBdOiAiICsgc2hvdWxkR29bMF07CisgICAgaWYgKGRpZEVuZFswXSAh
PSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1ZSBhdCBkaWRFbmRbMF06ICIgKyBk
aWRFbmRbMF07CisgICAgZGVidWcoIlRlc3QgcGFzc2VkISIpOworCisgICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKworc3RhcnRX
b3JrZXIoIm11bHRpLW1lbW9yeS13b3JrZXItMS5qcyIpOworc3RhcnRXb3JrZXIoIm11bHRpLW1l
bW9yeS13b3JrZXItMi5qcyIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL25vLXRyYW5zZmVyLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbm8tdHJhbnNmZXIuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CisgICAgCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFn
TmFtZSk7CisgICAgZWxlbWVudC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5i
b2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9kZSA9IHBhcmVu
dC5maXJzdENoaWxkOworICAgIAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVm
Tm9kZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykKK3sK
KyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBnZXRP
ckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0
IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRNTCA9
IG1zZyArICc8YnIgLz4nOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30K
KwordmFyIHZlcmJvc2UgPSBmYWxzZTsKKwordmFyIHNhYiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZl
cigxMDAgKiA0KTsKKwordmFyIG1lbW9yeSA9IG5ldyBJbnQzMkFycmF5KHNhYik7CisKK3ZhciBu
dW1Xb3JrZXJzID0gMDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAgICBu
dW1Xb3JrZXJzKys7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAgd29y
a2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5kYXRh
ID09ICJkb25lIikgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ZGVidWcoIkZpbmlzaGVkIHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0tbnVt
V29ya2VycykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1ZygiQWxs
IHdvcmtlcnMgZG9uZSEiKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIpID09
IDApIHsKKyAgICAgICAgICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7Cisg
ICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsgZXZl
bnQuZGF0YSk7CisgICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVtb3J5KTsKK30KKwor
ZnVuY3Rpb24gZG9uZSgpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAg
ICAgICAgaWYgKG1lbW9yeVtpXSAhPSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQg
dmFsdWUgYXQgbWVtb3J5WyIgKyBpICsgIl06ICIgKyBtZW1vcnlbaV07CisgICAgfQorICAgIGZv
ciAodmFyIGkgPSAzOyBpIDwgbWVtb3J5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChtZW1v
cnlbaV0gIT0gMCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0IG1lbW9y
eVsiICsgaSArICJdOiAiICsgbWVtb3J5W2ldOworICAgIH0KKyAgICBkZWJ1ZygiVGVzdCBwYXNz
ZWQhIik7CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIu
bm90aWZ5RG9uZSgpOworfQorCitzdGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0xLmpzIik7Citz
dGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0yLmpzIik7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvcG9zdE1lc3NhZ2UtY2xvbmVz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvcG9zdE1lc3NhZ2Ut
Y2xvbmVzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvcG9z
dE1lc3NhZ2UtY2xvbmVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNrcyB0aGF0IHdp
bmRvdy5wb3N0TWVzc2FnZSBjbG9uZXMgU2hhcmVkQXJyYXlCdWZmZXJzIik7CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKwordmFyIHNh
YiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcig0KTsKK3ZhciBtZW1vcnkgPSBuZXcgSW50MzJBcnJh
eShzYWIpOwordmFyIG90aGVyTWVtb3J5OworCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVz
c2FnZSIsIGZ1bmN0aW9uIChldmVudCkgeworICAgIG90aGVyTWVtb3J5ID0gZXZlbnQuZGF0YTsK
KyAgICBtZW1vcnlbMF0gPSA0MjsKKyAgICBzaG91bGRCZSgibWVtb3J5WzBdIiwgIjQyIik7Cisg
ICAgc2hvdWxkQmUoIm90aGVyTWVtb3J5WzBdIiwgIjAiKTsKKyAgICBvdGhlck1lbW9yeVswXSA9
IDQzOworICAgIHNob3VsZEJlKCJtZW1vcnlbMF0iLCAiNDIiKTsKKyAgICBzaG91bGRCZSgib3Ro
ZXJNZW1vcnlbMF0iLCAiNDMiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7CisKK3Bvc3RNZXNzYWdlKG1lbW9yeSwgIioi
KTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vy
cy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvd29ya2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACit2YXIgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVm
ZmVyKDEwMCAqIDQpOwordmFyIG1lbW9yeSA9IG5ldyBJbnQzMkFycmF5KHNhYik7Citwb3N0TWVz
c2FnZShtZW1vcnkpOworCkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zYWItY3JlYXRv
ci10cmFuc2Zlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zYWIt
Y3JlYXRvci10cmFuc2Zlci5qcwkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJz
L3NhYi9zYWItY3JlYXRvci10cmFuc2Zlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQg
QEAKK3ZhciBzYWIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoMTAwICogNCk7Cit2YXIgbWVtb3J5
ID0gbmV3IEludDMyQXJyYXkoc2FiKTsKK3Bvc3RNZXNzYWdlKG1lbW9yeSwgW3NhYl0pOworCklu
ZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5vLXRyYW5zZmVy
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdv
cmtlci1uby10cmFuc2Zlci5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtl
cnMvc2FiL3NlbnQtZnJvbS13b3JrZXItbm8tdHJhbnNmZXIuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rp
b24gZ2V0T3JDcmVhdGUoaWQsIHRhZ05hbWUpCit7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIHJldHVybiBl
bGVtZW50OworICAgIAorICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOworICAgIGVsZW1lbnQuaWQgPSBpZDsKKyAgICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuYm9k
eSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAgdmFyIHJlZk5vZGUgPSBwYXJlbnQu
Zmlyc3RDaGlsZDsKKyAgICAKKyAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHJlZk5v
ZGUpOworICAgIHJldHVybiBlbGVtZW50OworfQorCitmdW5jdGlvbiBkZWJ1Zyhtc2cpCit7Cisg
ICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgZ2V0T3JD
cmVhdGUoImNvbnNvbGUiLCAiZGl2IikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBm
aXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlCisgICAgc3Bhbi5pbm5lckhUTUwgPSBt
c2cgKyAnPGJyIC8+JzsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisK
K3ZhciB2ZXJib3NlID0gZmFsc2U7CisKK3ZhciBtZW1vcnk7CisKK3ZhciBudW1Xb3JrZXJzID0g
MDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAgICBudW1Xb3JrZXJzKys7
CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAgd29ya2VyLm9ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGVidWcoIkZpbmlz
aGVkIHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0tbnVtV29ya2VycykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1ZygiQWxsIHdvcmtlcnMgZG9u
ZSEiKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIpID09IDApIHsKKyAgICAg
ICAgICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7CisgICAgICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsgZXZlbnQuZGF0YSk7Cisg
ICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVtb3J5KTsKK30KKworZnVuY3Rpb24gZG9u
ZSgpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgaWYgKG1l
bW9yeVtpXSAhPSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgbWVt
b3J5WyIgKyBpICsgIl06ICIgKyBtZW1vcnlbaV07CisgICAgfQorICAgIGZvciAodmFyIGkgPSAz
OyBpIDwgbWVtb3J5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChtZW1vcnlbaV0gIT0gMCkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0IG1lbW9yeVsiICsgaSArICJd
OiAiICsgbWVtb3J5W2ldOworICAgIH0KKyAgICBkZWJ1ZygiVGVzdCBwYXNzZWQhIik7CisKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfQorCit2YXIgc2FiQ3JlYXRvciA9IG5ldyBXb3JrZXIoInNhYi1jcmVhdG9yLW5vLXRyYW5z
ZmVyLmpzIik7CitzYWJDcmVhdG9yLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
bWVtb3J5ID0gZXZlbnQuZGF0YTsKKyAgICAKKyAgICBzdGFydFdvcmtlcigic2ltcGxlLXdvcmtl
ci0xLmpzIik7CisgICAgc3RhcnRXb3JrZXIoInNpbXBsZS13b3JrZXItMi5qcyIpOworfTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3Nh
Yi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci10cmFuc2Zlci5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NlbnQtZnJvbS13b3JrZXItdHJhbnNmZXIu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gZ2V0T3JDcmVhdGUoaWQsIHRhZ05hbWUpCit7CisgICAg
dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgaWYgKGVsZW1l
bnQpCisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIAorICAgIGVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGVsZW1lbnQuaWQgPSBpZDsKKyAgICB2YXIg
cGFyZW50ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CisgICAg
dmFyIHJlZk5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsKKyAgICAKKyAgICBwYXJlbnQuaW5zZXJ0
QmVmb3JlKGVsZW1lbnQsIHJlZk5vZGUpOworICAgIHJldHVybiBlbGVtZW50OworfQorCitmdW5j
dGlvbiBkZWJ1Zyhtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisgICAgZ2V0T3JDcmVhdGUoImNvbnNvbGUiLCAiZGl2IikuYXBwZW5kQ2hpbGQo
c3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNlCisg
ICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1bm5lci53
YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciB2ZXJib3NlID0gZmFsc2U7CisKK3ZhciBzYWI7Cit2
YXIgbWVtb3J5OworCit2YXIgbnVtV29ya2VycyA9IDA7CitmdW5jdGlvbiBzdGFydFdvcmtlcihm
aWxlKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkZWJ1ZygiU3RhcnRpbmcgd29ya2Vy
OiAiICsgZmlsZSk7CisgICAgbnVtV29ya2VycysrOworICAgIHZhciB3b3JrZXIgPSBuZXcgV29y
a2VyKGZpbGUpOworICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICBpZiAoZXZlbnQuZGF0YSA9PSAiZG9uZSIpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRlYnVnKCJGaW5pc2hlZCB3b3JrZXI6ICIgKyBmaWxlKTsKKyAg
ICAgICAgICAgIGlmICgtLW51bVdvcmtlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZGVidWcoIkFsbCB3b3JrZXJzIGRvbmUhIik7CisgICAgICAgICAgICBkb25lKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV2ZW50LmRhdGEu
aW5kZXhPZigiRXJyb3IiKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZygiVGVzdCBmYWlsZWQ6
ICIrIGV2ZW50LmRhdGEpOworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRlYnVnKCJFdmVudCBmcm9tICIg
KyBmaWxlICsgIjogIiArIGV2ZW50LmRhdGEpOworICAgIH07CisgICAgd29ya2VyLnBvc3RNZXNz
YWdlKG1lbW9yeSwgW3NhYl0pOworfQorCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICBpZiAobWVtb3J5W2ldICE9IDEpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1ZSBhdCBtZW1vcnlbIiArIGkgKyAiXTogIiAr
IG1lbW9yeVtpXTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBtZW1vcnkubGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgaWYgKG1lbW9yeVtpXSAhPSAwKQorICAgICAgICAgICAgdGhyb3cg
IkVycm9yOiBCYWQgdmFsdWUgYXQgbWVtb3J5WyIgKyBpICsgIl06ICIgKyBtZW1vcnlbaV07Cisg
ICAgfQorICAgIGRlYnVnKCJUZXN0IHBhc3NlZCEiKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3ZhciBzYWJDcmVh
dG9yID0gbmV3IFdvcmtlcigic2FiLWNyZWF0b3ItdHJhbnNmZXIuanMiKTsKK3NhYkNyZWF0b3Iu
b25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBtZW1vcnkgPSBldmVudC5kYXRhOwor
ICAgIHNhYiA9IG1lbW9yeS5idWZmZXI7CisgICAgCisgICAgc3RhcnRXb3JrZXIoInNpbXBsZS13
b3JrZXItMS5qcyIpOworICAgIHN0YXJ0V29ya2VyKCJzaW1wbGUtd29ya2VyLTIuanMiKTsKK307
CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vy
cy9zYWIvd29ya2VyLXJlc291cmNlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3Jr
ZXJzL3NhYi93b3JrZXItcmVzb3VyY2VzLmpzCShyZXZpc2lvbiAyMTE5NjApCisrKyBMYXlvdXRU
ZXN0cy93b3JrZXJzL3NhYi93b3JrZXItcmVzb3VyY2VzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
MywzICszMywyMSBAQCBmdW5jdGlvbiB3YWtlKG1lbW9yeSwgaW5kZXgpCiAgICAgfQogfQogCitm
dW5jdGlvbiBjaGVja0J1ZmZlclNoYXJpbmcoc2hvdWxkU2hhcmVCdWZmZXIpCit7CisgICAgdmFy
IHNldCA9IG5ldyBTZXQoKTsKKyAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5n
dGg7ICsraSkKKyAgICAgICAgc2V0LmFkZChhcmd1bWVudHNbaV0uYnVmZmVyKTsKKyAgICBpZiAo
c2hvdWxkU2hhcmVCdWZmZXIpIHsKKyAgICAgICAgaWYgKHNldC5zaXplICE9IDEpIHsKKyAgICAg
ICAgICAgIHBvc3RNZXNzYWdlKCJFcnJvcjogYnVmZmVycyBzaG91bGQgYmUgc2hhcmVkIGJ1dCBh
cmUgbm90IHNoYXJlZCAoc2V0LnNpemUgPT0gIiArIHNldC5zaXplICsgIikiKTsKKyAgICAgICAg
ICAgIHBvc3RNZXNzYWdlKCJlcnJvciIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHNldC5zaXplICE9IGFyZ3VtZW50cy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICBw
b3N0TWVzc2FnZSgiRXJyb3I6IGJ1ZmZlcnMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgYnV0IGFyZSBz
aGFyZWQiKTsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJlcnJvciIpOworICAgICAgICB9Cisg
ICAgfQorfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301102</attachid>
            <date>2017-02-09 16:48:56 -0800</date>
            <delta_ts>2017-02-09 16:58:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49356</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE3LTAyLTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2hhcmVkQXJyYXlCdWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0aGUgdHJhbnNmZXIgbGlz
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MDc5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBFeHBvc2VzIGEgc2ltcGxlIHNoYXJlV2l0aCgpIEFQSSBmb3Igd2hlbiB5b3Uga25vdyB5b3Ug
d2FudCB0byBzaGFyZSB0aGUgY29udGVudHMgb2YKKyAgICAgICAgYSBzaGFyZWQgYnVmZmVyLiBB
bHNvIGEgdXNlZnVsIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wuCisKKyAgICAgICAgKiBydW50aW1l
L0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlCdWZmZXI6OnNoYXJlV2l0aCk6
CisgICAgICAgICogcnVudGltZS9BcnJheUJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBcnJheUJ1
ZmZlckNvbnRlbnRzOjpvcGVyYXRvciBib29sKToKKwogMjAxNy0wMi0wOCAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBvcF9pbiBzaG91bGQg
aGF2ZSBBcnJheVByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDYgKzI4
NCwxNyBAQCB2b2lkIEFycmF5QnVmZmVyOjpzZXRTaGFyaW5nTW9kZShBcnJheUJ1CiAgICAgbWFr
ZVNoYXJlZCgpOwogfQogCitib29sIEFycmF5QnVmZmVyOjpzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYgcmVzdWx0KQoreworICAgIGlmICghbV9jb250ZW50cy5tX2RhdGEgfHwgIWlzU2hh
cmVkKCkpIHsKKyAgICAgICAgcmVzdWx0Lm1fZGF0YSA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV9jb250ZW50cy5zaGFyZVdpdGgocmVzdWx0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBBcnJheUJ1ZmZlcjo6dHJhbnNmZXJUbyhWTSYg
dm0sIEFycmF5QnVmZmVyQ29udGVudHMmIHJlc3VsdCkKIHsKICAgICBSZWY8QXJyYXlCdWZmZXI+
IHByb3RlY3QoKnRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUJ1ZmZlci5oCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw4IEBAIHB1
YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyKCk7CiAgICAgCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhbV9kYXRhOyB9CisgICAgCiAg
ICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIHVuc2lnbmVkIHNp
emVJbkJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9zaXplSW5CeXRlczsgfQogICAgIApAQCAtMTMx
LDYgKzEzMyw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgdm9pZCBwaW5BbmRMb2NrKCk7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBib29sIHRyYW5zZmVyVG8oVk0mLCBBcnJheUJ1ZmZlckNvbnRl
bnRzJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaGFyZVdpdGgoQXJyYXlCdWZmZXJD
b250ZW50cyYpOwogICAgIGJvb2wgaXNOZXV0ZXJlZCgpIHsgcmV0dXJuICFtX2NvbnRlbnRzLm1f
ZGF0YTsgfQogICAgIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZEYXRhKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEFycmF5QnVmZmVyLCBtX2NvbnRlbnRzKSArIE9CSkVDVF9PRkZT
RVRPRihBcnJheUJ1ZmZlckNvbnRlbnRzLCBtX2RhdGEpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1OSBAQAorMjAxNy0wMi0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFNoYXJlZEFycmF5QnVmZmVyIGRvZXMgbm90IG5lZWQgdG8gYmUgaW4g
dGhlIHRyYW5zZmVyIGxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzOiB3b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktbXVsdGktYnVmZmVyLmh0
bWwKKyAgICAgICAgICAgICAgIHdvcmtlcnMvc2FiL211bHRpLW1lbW9yeS5odG1sCisgICAgICAg
ICAgICAgICB3b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCisgICAgICAgICAgICAgICB3b3Jr
ZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbAorICAgICAgICAgICAgICAgd29ya2Vycy9z
YWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1sCisgICAgICAgICAgICAgICB3b3Jr
ZXJzL3NhYi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwKKworICAgICAgICBUaGUgU0FC
IEFQSSB0aGF0IHdlIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgcmVxdWlyZWQgdGhhdCBTQUJzIGdl
dCBwdXQgaW4gdHJhbnNmZXIgbGlzdHMKKyAgICAgICAgd2hlbiB0aGV5IGFyZSBzZW50IHRvIHdv
cmtlcnMuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IFNBQiBBUEkgdGhhdCBldmVyeW9uZSBp
cyBjb252ZXJnaW5nIHRvd2FyZHMgcmVxdWlyZXMgdGhhdCB5b3UgZG8gbm90IHB1dCB0aGUKKyAg
ICAgICAgU0FCIGluIHRoZSB0cmFuc2ZlciBsaXN0LiBUaGF0J3Mgc3VwcG9zZWQgdG8gYmUgYW4g
ZXJyb3IuIEluc3RlYWQsIGFueXRpbWUgdGhhdCBhIFNBQgorICAgICAgICBpcyBwYXJ0IG9mIGFu
eSBtZXNzYWdlIHRvIG9yIGZyb20gYSBkZWRpY2F0ZWQgd29ya2VyIHRoZW4gaXQgaXMgYXV0b21h
dGljYWxseSBzaGFyZWQuCisgICAgICAgIAorICAgICAgICBUaGUgbmV3IEFQSSBwcm92aWRlcyBh
IGxvdCBtb3JlIGNsYXJpdHkgYWJvdXQgd2hhdCBpcyBzdXBwb3NlZCB0byBoYXBwZW4gaW4gY29u
dGV4dHMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRyYW5zZmVyaW5nIGJ1dCBkb24ndCBzdXBwb3J0
IHNoYXJpbmcuCisgICAgICAgIAorICAgICAgICBSaWdodCBub3cgdGhpcyBwYXRjaCBhbGxvd3Mg
Ym90aCBzdHlsZXMgdG8gd29yaywgYnV0IEkgaG9wZSB3ZSBjYW4gZGlzYWJsZSB0aGUgdHJhbnNm
ZXIKKyAgICAgICAgbGlzdCBjYXBhYmlsaXR5IHNvb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlc2VyaWFsaXpl
SURCVmFsdWVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTTWVzc2FnZUV2ZW50OjpkYXRhKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVTZXJpYWxpemVyOjpDbG9uZVNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlh
bGl6ZXI6OkNsb25lRGVzZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkVGVybWluYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9DdXN0
b21FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21FdmVudDo6dHJ5U2VyaWFsaXpl
RGV0YWlsKToKKyAgICAgICAgKiBkb20vRXJyb3JFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFcnJvckV2ZW50Ojp0cnlTZXJpYWxpemVFcnJvcik6CisgICAgICAgICogZG9tL01lc3NhZ2VF
dmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OnRyeVNlcmlhbGl6ZURh
dGEpOgorICAgICAgICAqIGRvbS9Qb3BTdGF0ZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBvcFN0YXRlRXZlbnQ6OnRyeVNlcmlhbGl6ZVN0YXRlKToKKyAgICAgICAgKiB3b3JrZXJzL0Rl
ZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRl
ZFdvcmtlckdsb2JhbFNjb3BlOjpwb3N0TWVzc2FnZSk6CisgICAgICAgICogd29ya2Vycy9Xb3Jr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyOjpwb3N0TWVzc2FnZSk6CisKIDIwMTct
MDItMDkgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29uZmln
dXJlIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjIHRvIGdlbmVyYXRlIHN0ZXJlbyBhdWRpbwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNyArMzQ1LDcg
QEAgc3RhdGljIEpTVmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYQogCiAgICAgc3RhdGUu
dm0oKS5hcGlMb2NrKCkubG9jaygpOwogICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBt
ZXNzYWdlUG9ydHM7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJpYWxpemVkVmFsdWUtPmRlc2Vy
aWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIHZhbHVlLmJsb2JVUkxz
KCksIHZhbHVlLmJsb2JGaWxlUGF0aHMoKSwgTm9uVGhyb3dpbmcpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
bWVzc2FnZVBvcnRzLCB2YWx1ZS5ibG9iVVJMcygpLCB2YWx1ZS5ibG9iRmlsZVBhdGhzKCksIFNl
cmlhbGl6YXRpb25FcnJvck1vZGU6Ok5vblRocm93aW5nKTsKICAgICBzdGF0ZS52bSgpLmFwaUxv
Y2soKS51bmxvY2soKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNZXNzYWdlRXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VFdmVudEN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgSlNWYWx1ZSBKU01lc3Nh
Z2VFdmVudDo6ZGF0YShFeGVjU3RhdGUmIAogICAgICAgICBpZiAoUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gZXZlbnQuZGF0YUFzU2VyaWFsaXplZFNjcmlw
dFZhbHVlKCkpIHsKICAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0
cyA9IHdyYXBwZWQoKS5wb3J0cygpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBkb2VzIHRo
aXMgc3VwcHJlc3MgZXhjZXB0aW9ucz8KLSAgICAgICAgICAgIHJlc3VsdCA9IHNlcmlhbGl6ZWRW
YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsIGdsb2JhbE9iamVjdCgpLCBwb3J0cywgTm9uVGhyb3dp
bmcpOworICAgICAgICAgICAgcmVzdWx0ID0gc2VyaWFsaXplZFZhbHVlLT5kZXNlcmlhbGl6ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0KCksIHBvcnRzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpOb25U
aHJvd2luZyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsNiArMTQ0LDcgQEAgZW51bSBTZXJpYWxpemF0aW9uVGFnIHsKICNpZiBF
TkFCTEUoU1VCVExFX0NSWVBUTykKICAgICBDcnlwdG9LZXlUYWcgPSAzMywKICNlbmRpZgorICAg
IFNoYXJlZEFycmF5QnVmZmVyVGFnID0gMzQsCiAgICAgRXJyb3JUYWcgPSAyNTUKIH07CiAKQEAg
LTQ3Niw5ICs0NzcsOSBAQCB0ZW1wbGF0ZSA8PiBib29sIHdyaXRlTGl0dGxlRW5kaWFuPHVpbnQ4
CiAKIGNsYXNzIENsb25lU2VyaWFsaXplciA6IENsb25lQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIHNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBW
ZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiYgYXJyYXlCdWZmZXJzLCBWZWN0b3I8U3Ry
aW5nPiYgYmxvYlVSTHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0KQorICAgIHN0YXRpYyBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSBzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3NhZ2VQb3J0cywgVmVjdG9yPFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyPj4mIGFycmF5QnVmZmVycywgVmVjdG9yPFN0cmluZz4mIGJsb2JV
UkxzLCBWZWN0b3I8dWludDhfdD4mIG91dCwgU2VyaWFsaXphdGlvbkNvbnRleHQgY29udGV4dCwg
QXJyYXlCdWZmZXJDb250ZW50c0FycmF5JiBzaGFyZWRCdWZmZXJzKQogICAgIHsKLSAgICAgICAg
Q2xvbmVTZXJpYWxpemVyIHNlcmlhbGl6ZXIoZXhlYywgbWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZl
cnMsIGJsb2JVUkxzLCBvdXQpOworICAgICAgICBDbG9uZVNlcmlhbGl6ZXIgc2VyaWFsaXplcihl
eGVjLCBtZXNzYWdlUG9ydHMsIGFycmF5QnVmZmVycywgYmxvYlVSTHMsIG91dCwgY29udGV4dCwg
c2hhcmVkQnVmZmVycyk7CiAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1
ZSk7CiAgICAgfQogCkBAIC01MjUsMTEgKzUyNiwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxKU09iamVjdCosIHVpbnQzMl90PiBPYmplY3RQb29sOwogCi0gICAg
Q2xvbmVTZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9y
dD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+JiBhcnJh
eUJ1ZmZlcnMsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQp
CisgICAgQ2xvbmVTZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgVmVjdG9yPFJlZlB0cjxNZXNz
YWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMsIFZlY3RvcjxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+
JiBhcnJheUJ1ZmZlcnMsIFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgVmVjdG9yPHVpbnQ4X3Q+
JiBvdXQsIFNlcmlhbGl6YXRpb25Db250ZXh0IGNvbnRleHQsIEFycmF5QnVmZmVyQ29udGVudHNB
cnJheSYgc2hhcmVkQnVmZmVycykKICAgICAgICAgOiBDbG9uZUJhc2UoZXhlYykKICAgICAgICAg
LCBtX2J1ZmZlcihvdXQpCiAgICAgICAgICwgbV9ibG9iVVJMcyhibG9iVVJMcykKICAgICAgICAg
LCBtX2VtcHR5SWRlbnRpZmllcihJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsIGVtcHR5U3Ry
aW5nKCkpKQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2hhcmVk
QnVmZmVycyhzaGFyZWRCdWZmZXJzKQogICAgIHsKICAgICAgICAgd3JpdGUoQ3VycmVudFZlcnNp
b24pOwogICAgICAgICBmaWxsVHJhbnNmZXJNYXAobWVzc2FnZVBvcnRzLCBtX3RyYW5zZmVycmVk
TWVzc2FnZVBvcnRzKTsKQEAgLTg2MSw2ICs4NjQsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydE9iamVjdEludGVybmFsKG9iaikpIC8v
IGhhbmRsZSBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChhcnJheUJ1ZmZlci0+aXNTaGFyZWQo
KQorICAgICAgICAgICAgICAgICAgICAmJiBtX2NvbnRleHQgPT0gU2VyaWFsaXphdGlvbkNvbnRl
eHQ6OldvcmtlclBvc3RNZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGlu
ZGV4ID0gbV9zaGFyZWRCdWZmZXJzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlC
dWZmZXJDb250ZW50cyBjb250ZW50czsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5QnVm
ZmVyLT5zaGFyZVdpdGgoY29udGVudHMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZShTaGFyZWRBcnJheUJ1ZmZlclRhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NoYXJl
ZEJ1ZmZlcnMuYXBwZW5kKFdURk1vdmUoY29udGVudHMpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlKGluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHdyaXRlKEFycmF5QnVmZmVyVGFnKTsKICAgICAgICAgICAgICAg
ICB3cml0ZShhcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICB3cml0
ZShzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYXJyYXlCdWZmZXItPmRhdGEoKSksIGFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwpAQCAtODgwLDcgKzg5Niw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgVmVjdG9yPFN0cmluZz4gZHVtbXlCbG9iVVJMczsKICAgICAgICAgICAgICAg
ICBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4gZHVtbXlNZXNzYWdlUG9ydHM7CiAgICAgICAg
ICAgICAgICAgVmVjdG9yPFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4gZHVtbXlBcnJheUJ1ZmZl
cnM7Ci0gICAgICAgICAgICAgICAgQ2xvbmVTZXJpYWxpemVyIHJhd0tleVNlcmlhbGl6ZXIobV9l
eGVjLCBkdW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZlcnMsIGR1bW15QmxvYlVSTHMs
IHNlcmlhbGl6ZWRLZXkpOworICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyQ29udGVudHNBcnJh
eSBkdW1teVNoYXJlZEJ1ZmZlcnM7CisgICAgICAgICAgICAgICAgQ2xvbmVTZXJpYWxpemVyIHJh
d0tleVNlcmlhbGl6ZXIobV9leGVjLCBkdW1teU1lc3NhZ2VQb3J0cywgZHVtbXlBcnJheUJ1ZmZl
cnMsIGR1bW15QmxvYlVSTHMsIHNlcmlhbGl6ZWRLZXksIFNlcmlhbGl6YXRpb25Db250ZXh0OjpE
ZWZhdWx0LCBkdW1teVNoYXJlZEJ1ZmZlcnMpOwogICAgICAgICAgICAgICAgIHJhd0tleVNlcmlh
bGl6ZXIud3JpdGUoa2V5KTsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gd3JhcHBl
ZEtleTsKICAgICAgICAgICAgICAgICBpZiAoIXdyYXBDcnlwdG9LZXkobV9leGVjLCBzZXJpYWxp
emVkS2V5LCB3cmFwcGVkS2V5KSkKQEAgLTEyMTgsNiArMTIzNSw4IEBAIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxVbmlxdWVkU3RyaW5nSW1wbD4sIHVpbnQzMl90LCBJZGVu
dGlmaWVyUmVwSGFzaD4gU3RyaW5nQ29uc3RhbnRQb29sOwogICAgIFN0cmluZ0NvbnN0YW50UG9v
bCBtX2NvbnN0YW50UG9vbDsKICAgICBJZGVudGlmaWVyIG1fZW1wdHlJZGVudGlmaWVyOworICAg
IFNlcmlhbGl6YXRpb25Db250ZXh0IG1fY29udGV4dDsKKyAgICBBcnJheUJ1ZmZlckNvbnRlbnRz
QXJyYXkmIG1fc2hhcmVkQnVmZmVyczsKIH07CiAKIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENs
b25lU2VyaWFsaXplcjo6c2VyaWFsaXplKEpTVmFsdWUgaW4pCkBAIC0xNDg5LDExICsxNTA4LDEx
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9CiAKLSAgICBzdGF0aWMgRGVz
ZXJpYWxpemF0aW9uUmVzdWx0IGRlc2VyaWFsaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdl
UG9ydHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJs
b2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiBibG9iRmlsZVBhdGhzKQorICAgIHN0YXRpYyBE
ZXNlcmlhbGl6YXRpb25SZXN1bHQgZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mIG1lc3Nh
Z2VQb3J0cywgQXJyYXlCdWZmZXJDb250ZW50c0FycmF5KiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJy
YXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxlUGF0aHMsIEFycmF5QnVmZmVy
Q29udGVudHNBcnJheSogc2hhcmVkQnVmZmVycykKICAgICB7CiAgICAgICAgIGlmICghYnVmZmVy
LnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihqc051bGwoKSwgU2Vy
aWFsaXphdGlvblJldHVybkNvZGU6OlVuc3BlY2lmaWVkRXJyb3IpOwotICAgICAgICBDbG9uZURl
c2VyaWFsaXplciBkZXNlcmlhbGl6ZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVyQ29udGVudHNBcnJheSwgYnVmZmVyLCBibG9iVVJMcywgYmxvYkZpbGVQYXRo
cyk7CisgICAgICAgIENsb25lRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplcihleGVjLCBnbG9iYWxP
YmplY3QsIG1lc3NhZ2VQb3J0cywgYXJyYXlCdWZmZXJDb250ZW50c0FycmF5LCBidWZmZXIsIGJs
b2JVUkxzLCBibG9iRmlsZVBhdGhzLCBzaGFyZWRCdWZmZXJzKTsKICAgICAgICAgaWYgKCFkZXNl
cmlhbGl6ZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpT
VmFsdWUoKSwgU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcik7CiAgICAg
ICAgIHJldHVybiBkZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoKTsKQEAgLTE1NTMsNyArMTU3Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3ZlcnNpb24gPSAweEZGRkZGRkZGOwogICAgIH0K
IAotICAgIENsb25lRGVzZXJpYWxpemVyKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMs
IEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogYXJyYXlCdWZmZXJDb250ZW50cywgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29u
c3QgVmVjdG9yPFN0cmluZz4gYmxvYkZpbGVQYXRocykKKyAgICBDbG9uZURlc2VyaWFsaXplcihF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQ
dHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkq
IGFycmF5QnVmZmVyQ29udGVudHMsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGJsb2JGaWxl
UGF0aHMsIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSogc2hhcmVkQnVmZmVycykKICAgICAgICAg
OiBDbG9uZUJhc2UoZXhlYykKICAgICAgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3Qp
CiAgICAgICAgICwgbV9pc0RPTUdsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmluaGVyaXRzKGds
b2JhbE9iamVjdC0+dm0oKSwgSlNET01HbG9iYWxPYmplY3Q6OmluZm8oKSkpCkBAIC0xNTY1LDYg
KzE1ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAsIG1fYXJyYXlCdWZmZXJzKGFycmF5QnVmZmVy
Q29udGVudHMgPyBhcnJheUJ1ZmZlckNvbnRlbnRzLT5zaXplKCkgOiAwKQogICAgICAgICAsIG1f
YmxvYlVSTHMoYmxvYlVSTHMpCiAgICAgICAgICwgbV9ibG9iRmlsZVBhdGhzKGJsb2JGaWxlUGF0
aHMpCisgICAgICAgICwgbV9zaGFyZWRCdWZmZXJzKHNoYXJlZEJ1ZmZlcnMpCiAgICAgewogICAg
ICAgICBpZiAoIXJlYWQobV92ZXJzaW9uKSkKICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDB4RkZG
RkZGRkY7CkBAIC0yMzg3LDYgKzI0MDcsMjAgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgcmV0
dXJuIGdldEpTVmFsdWUobV9hcnJheUJ1ZmZlcnNbaW5kZXhdLmdldCgpKTsKICAgICAgICAgfQor
ICAgICAgICBjYXNlIFNoYXJlZEFycmF5QnVmZmVyVGFnOiB7CisgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IFVJTlRfTUFYOworICAgICAgICAgICAgYm9vbCBpbmRleFN1Y2Nlc3NmdWxseVJl
YWQgPSByZWFkKGluZGV4KTsKKyAgICAgICAgICAgIGlmICghaW5kZXhTdWNjZXNzZnVsbHlSZWFk
IHx8ICFtX3NoYXJlZEJ1ZmZlcnMgfHwgaW5kZXggPj0gbV9zaGFyZWRCdWZmZXJzLT5zaXplKCkp
IHsKKyAgICAgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9zaGFyZWRCdWZmZXJzLT5hdChpbmRleCkpOworICAgICAgICAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUobV9zaGFyZWRC
dWZmZXJzLT5hdChpbmRleCkpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gZ2V0SlNW
YWx1ZShidWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQocmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBB
cnJheUJ1ZmZlclZpZXdUYWc6IHsKICAgICAgICAgICAgIEpTVmFsdWUgYXJyYXlCdWZmZXJWaWV3
OwogICAgICAgICAgICAgaWYgKCFyZWFkQXJyYXlCdWZmZXJWaWV3KG1fZXhlYy0+dm0oKSwgYXJy
YXlCdWZmZXJWaWV3KSkgewpAQCAtMjQ0NSw2ICsyNDc5LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiBtX2FycmF5QnVmZmVyczsKICAgICBWZWN0b3I8
U3RyaW5nPiBtX2Jsb2JVUkxzOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYkZpbGVQYXRoczsK
KyAgICBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkqIG1fc2hhcmVkQnVmZmVyczsKIAogICAgIFN0
cmluZyBibG9iRmlsZVBhdGhGb3JCbG9iVVJMKGNvbnN0IFN0cmluZyYgYmxvYlVSTCkKICAgICB7
CkBAIC0yNjU0LDkgKzI2ODksMTAgQEAgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpTZXJpYWxpemVk
U2NyaXB0VgogewogfQogCi1TZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9i
VVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4mJiBhcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXkpCitTZXJpYWxpemVkU2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZShWZWN0b3I8dWludDhfdD4mJiBidWZmZXIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBi
bG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gYXJyYXlC
dWZmZXJDb250ZW50c0FycmF5LCBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXlCdWZmZXJDb250ZW50c0Fy
cmF5PiBzaGFyZWRCdWZmZXJDb250ZW50c0FycmF5KQogICAgIDogbV9kYXRhKFdURk1vdmUoYnVm
ZmVyKSkKICAgICAsIG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5KFdURk1vdmUoYXJyYXlCdWZm
ZXJDb250ZW50c0FycmF5KSkKKyAgICAsIG1fc2hhcmVkQnVmZmVyQ29udGVudHNBcnJheShXVEZN
b3ZlKHNoYXJlZEJ1ZmZlckNvbnRlbnRzQXJyYXkpKQogewogICAgIC8vIFNpbmNlIHRoaXMgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlIGlzIG1lYW50IHRvIGJlIHBhc3NlZCBiZXR3ZWVuIHRocmVhZHMs
IGl0cyBTdHJpbmcgZGF0YSBtZW1iZXJzCiAgICAgLy8gbmVlZCB0byBiZSBpc29sYXRlZENvcGll
cyBzbyB3ZSBkb24ndCBydW4gaW50byB0aHJlYWQgc2FmZXR5IGlzc3VlcyBmb3IgdGhlIFN0cmlu
Z0ltcGxzLgpAQCAtMjc0MSwxOCArMjc3NywxOSBAQCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkCiAgICAgVmVjdG9yPFN0cmluZz4gYmxvYlVSTHM7CiAgICAgVmVjdG9y
PFJlZlB0cjxNZXNzYWdlUG9ydD4+IGR1bW15TWVzc2FnZVBvcnRzOwogICAgIFZlY3RvcjxSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlcj4+IGR1bW15QXJyYXlCdWZmZXJzOwotICAgIGF1dG8gY29kZSA9
IENsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKCZleGVjLCB2YWx1ZSwgZHVtbXlNZXNzYWdlUG9y
dHMsIGR1bW15QXJyYXlCdWZmZXJzLCBibG9iVVJMcywgYnVmZmVyKTsKKyAgICBBcnJheUJ1ZmZl
ckNvbnRlbnRzQXJyYXkgZHVtbXlTaGFyZWRCdWZmZXJzOworICAgIGF1dG8gY29kZSA9IENsb25l
U2VyaWFsaXplcjo6c2VyaWFsaXplKCZleGVjLCB2YWx1ZSwgZHVtbXlNZXNzYWdlUG9ydHMsIGR1
bW15QXJyYXlCdWZmZXJzLCBibG9iVVJMcywgYnVmZmVyLCBTZXJpYWxpemF0aW9uQ29udGV4dDo6
RGVmYXVsdCwgZHVtbXlTaGFyZWRCdWZmZXJzKTsKIAotICAgIGlmICh0aHJvd0V4Y2VwdGlvbnMg
PT0gVGhyb3dpbmcpCisgICAgaWYgKHRocm93RXhjZXB0aW9ucyA9PSBTZXJpYWxpemF0aW9uRXJy
b3JNb2RlOjpUaHJvd2luZykKICAgICAgICAgbWF5YmVUaHJvd0V4Y2VwdGlvbklmU2VyaWFsaXph
dGlvbkZhaWxlZChleGVjLCBjb2RlKTsKIAogICAgIGlmIChjb2RlICE9IFNlcmlhbGl6YXRpb25S
ZXR1cm5Db2RlOjpTdWNjZXNzZnVsbHlDb21wbGV0ZWQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFdURk1v
dmUoYnVmZmVyKSwgYmxvYlVSTHMsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoV1RGTW92ZShidWZmZXIpLCBibG9iVVJMcywgbnVsbHB0
ciwgbnVsbHB0cikpOwogfQogCi1FeGNlcHRpb25PcjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVl
Pj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyTGlz
dCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiBtZXNzYWdlUG9ydHMpCitFeGNlcHRpb25P
cjxSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPj4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyTGlzdCwgVmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+
JiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6YXRpb25Db250ZXh0IGNvbnRleHQpCiB7CiAgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKICAgICBWZWN0b3I8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PiBh
cnJheUJ1ZmZlcnM7CkBAIC0yNzYwLDYgKzI3OTcsOCBAQCBFeGNlcHRpb25PcjxSZWY8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPj4gCiAgICAgICAgIGlmIChhdXRvIGFycmF5QnVmZmVyID0gdG9Qb3Nz
aWJseVNoYXJlZEFycmF5QnVmZmVyKHZtLCB0cmFuc2ZlcmFibGUuZ2V0KCkpKSB7CiAgICAgICAg
ICAgICBpZiAoYXJyYXlCdWZmZXItPmlzTmV1dGVyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgREFUQV9DTE9ORV9FUlIgfTsKKyAgICAgICAgICAgIGlmIChhcnJheUJ1
ZmZlci0+aXNTaGFyZWQoKSAmJiBjb250ZXh0ICE9IFNlcmlhbGl6YXRpb25Db250ZXh0OjpXb3Jr
ZXJQb3N0TWVzc2FnZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgREFUQV9D
TE9ORV9FUlIgfTsKICAgICAgICAgICAgIGFycmF5QnVmZmVycy5hcHBlbmQoV1RGTW92ZShhcnJh
eUJ1ZmZlcikpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTI3NzQsNyAr
MjgxMyw4IEBAIEV4Y2VwdGlvbk9yPFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiAKIAogICAg
IFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CiAgICAgVmVjdG9yPFN0cmluZz4gYmxvYlVSTHM7Ci0g
ICAgYXV0byBjb2RlID0gQ2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUoJnN0YXRlLCB2YWx1ZSwg
bWVzc2FnZVBvcnRzLCBhcnJheUJ1ZmZlcnMsIGJsb2JVUkxzLCBidWZmZXIpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+IHNoYXJlZEJ1ZmZlcnMgPSBzdGQ6
Om1ha2VfdW5pcXVlPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4oKTsKKyAgICBhdXRvIGNvZGUg
PSBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSgmc3RhdGUsIHZhbHVlLCBtZXNzYWdlUG9ydHMs
IGFycmF5QnVmZmVycywgYmxvYlVSTHMsIGJ1ZmZlciwgY29udGV4dCwgKnNoYXJlZEJ1ZmZlcnMp
OwogCiAgICAgaWYgKGNvZGUgIT0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlN1Y2Nlc3NmdWxs
eUNvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkZvclNlcmlhbGl6YXRpb25GYWls
dXJlKGNvZGUpOwpAQCAtMjc4Myw3ICsyODIzLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4+IAogICAgIGlmIChhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkuaGFzRXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBhcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXkucmVsZWFz
ZUV4Y2VwdGlvbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKFdURk1vdmUoYnVmZmVyKSwgYmxvYlVSTHMsIGFycmF5QnVmZmVyQ29udGVudHNBcnJh
eS5yZWxlYXNlUmV0dXJuVmFsdWUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShXVEZNb3ZlKGJ1ZmZlciksIGJsb2JVUkxzLCBhcnJheUJ1ZmZlckNv
bnRlbnRzQXJyYXkucmVsZWFzZVJldHVyblZhbHVlKCksIGNvbnRleHQgPT0gU2VyaWFsaXphdGlv
bkNvbnRleHQ6OldvcmtlclBvc3RNZXNzYWdlID8gV1RGTW92ZShzaGFyZWRCdWZmZXJzKSA6IG51
bGxwdHIpKTsKIH0KIAogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoU3RyaW5nVmlldyBzdHJpbmcpCkBAIC0yODMzLDggKzI4NzMsOCBA
QCBKU1ZhbHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpCiAKIEpTVmFsdWUgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUmIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFZlY3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiYgbWVzc2Fn
ZVBvcnRzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlIHRocm93RXhjZXB0aW9u
cykKIHsKLSAgICBEZXNlcmlhbGl6YXRpb25SZXN1bHQgcmVzdWx0ID0gQ2xvbmVEZXNlcmlhbGl6
ZXI6OmRlc2VyaWFsaXplKCZleGVjLCBnbG9iYWxPYmplY3QsIG1lc3NhZ2VQb3J0cywgbV9hcnJh
eUJ1ZmZlckNvbnRlbnRzQXJyYXkuZ2V0KCksIG1fZGF0YSwgYmxvYlVSTHMsIGJsb2JGaWxlUGF0
aHMpOwotICAgIGlmICh0aHJvd0V4Y2VwdGlvbnMgPT0gVGhyb3dpbmcpCisgICAgRGVzZXJpYWxp
emF0aW9uUmVzdWx0IHJlc3VsdCA9IENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSgmZXhl
YywgZ2xvYmFsT2JqZWN0LCBtZXNzYWdlUG9ydHMsIG1fYXJyYXlCdWZmZXJDb250ZW50c0FycmF5
LmdldCgpLCBtX2RhdGEsIGJsb2JVUkxzLCBibG9iRmlsZVBhdGhzLCBtX3NoYXJlZEJ1ZmZlckNv
bnRlbnRzQXJyYXkuZ2V0KCkpOworICAgIGlmICh0aHJvd0V4Y2VwdGlvbnMgPT0gU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpCiAgICAgICAgIG1heWJlVGhyb3dFeGNlcHRpb25JZlNl
cmlhbGl6YXRpb25GYWlsZWQoZXhlYywgcmVzdWx0LnNlY29uZCk7CiAgICAgcmV0dXJuIHJlc3Vs
dC5maXJzdCA/IHJlc3VsdC5maXJzdCA6IGpzTnVsbCgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHJldmlzaW9u
IDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMTYgQEAgY2xhc3MgTWVzc2FnZVBv
cnQ7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBlbnVtIGNsYXNzIFNlcmlhbGl6YXRpb25SZXR1cm5D
b2RlOwogCi1lbnVtIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgeyBOb25UaHJvd2luZywgVGhyb3dp
bmcgfTsKK2VudW0gY2xhc3MgU2VyaWFsaXphdGlvbkVycm9yTW9kZSB7IE5vblRocm93aW5nLCBU
aHJvd2luZyB9OworZW51bSBjbGFzcyBTZXJpYWxpemF0aW9uQ29udGV4dCB7IERlZmF1bHQsIFdv
cmtlclBvc3RNZXNzYWdlIH07CiAKIHVzaW5nIEFycmF5QnVmZmVyQ29udGVudHNBcnJheSA9IFZl
Y3RvcjxKU0M6OkFycmF5QnVmZmVyQ29udGVudHM+OwogCiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0
VmFsdWUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB7CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU2VyaWFs
aXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXphdGlvbkVycm9yTW9k
ZTo6VGhyb3dpbmcpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEV4Y2VwdGlvbk9yPFJl
ZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJiwgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEV4Y2VwdGlvbk9y
PFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+PiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4mJiB0cmFuc2Zlciwg
VmVjdG9yPFJlZlB0cjxNZXNzYWdlUG9ydD4+JiwgU2VyaWFsaXphdGlvbkNvbnRleHQgPSBTZXJp
YWxpemF0aW9uQ29udGV4dDo6RGVmYXVsdCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKFN0cmluZ1ZpZXcpOwogICAgIHN0
YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBhZG9wdChWZWN0b3I8dWludDhfdD4mJiBi
dWZmZXIpCkBAIC02Myw5ICs2NCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWY8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBudWxsVmFsdWUoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEpTQzo6
SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOwotICAgIFdFQkNPUkVfRVhQT1JU
IEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlID0gVGhyb3dpbmcpOwotICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0Pj4m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBi
bG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOworICAgIFdF
QkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXphdGlv
bkVycm9yTW9kZTo6VGhyb3dpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIEpTQzo6SlNWYWx1ZSBk
ZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBWZWN0b3I8
UmVmUHRyPE1lc3NhZ2VQb3J0Pj4mLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpOworICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBWZWN0b3I8UmVmUHRyPE1lc3Nh
Z2VQb3J0Pj4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBibG9iRmlsZVBhdGhzLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gU2VyaWFsaXph
dGlvbkVycm9yTW9kZTo6VGhyb3dpbmcpOwogCiAgICAgc3RhdGljIHVpbnQzMl90IHdpcmVGb3Jt
YXRWZXJzaW9uKCk7CiAKQEAgLTk0LDEwICs5NSwxMSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiYmKTsKLSAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+
JiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgc3RkOjp1bmlxdWVfcHRyPEFycmF5
QnVmZmVyQ29udGVudHNBcnJheT4mJik7CisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiYmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIHN0ZDo6
dW5pcXVlX3B0cjxBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk+LCBzdGQ6OnVuaXF1ZV9wdHI8QXJy
YXlCdWZmZXJDb250ZW50c0FycmF5PiBzaGFyZWRCdWZmZXJzKTsKIAogICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBtX2RhdGE7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFycmF5QnVmZmVyQ29udGVu
dHNBcnJheT4gbV9hcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4gbV9zaGFyZWRCdWZmZXJDb250ZW50c0FycmF5Owog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fYmxvYlVSTHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vQ3VzdG9tRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FdmVudC5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9D
dXN0b21FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBDdXN0
b21FdmVudDo6aW5pdEN1c3RvbUV2ZW50KEpTQzo6RQogUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gQ3VzdG9tRXZlbnQ6OnRyeVNlcmlhbGl6ZURldGFpbChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpCiB7CiAgICAgaWYgKCFtX3RyaWVkVG9TZXJpYWxpemUpIHsKLSAgICAgICAgbV9zZXJpYWxp
emVkRGV0YWlsID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoc3RhdGUsIG1fZGV0YWls
LCBOb25UaHJvd2luZyk7CisgICAgICAgIG1fc2VyaWFsaXplZERldGFpbCA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCBtX2RldGFpbCwgU2VyaWFsaXphdGlvbkVycm9yTW9k
ZTo6Tm9uVGhyb3dpbmcpOwogICAgICAgICBtX3RyaWVkVG9TZXJpYWxpemUgPSB0cnVlOwogICAg
IH0KICAgICByZXR1cm4gbV9zZXJpYWxpemVkRGV0YWlsOwpJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0Vycm9yRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FcnJv
ckV2ZW50LmNwcAkocmV2aXNpb24gMjExOTYwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Vycm9y
RXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIEpTVmFsdWUgRXJyb3JF
dmVudDo6ZXJyb3IoRXhlY1N0YXRlJiBleGUKIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IEVycm9yRXZlbnQ6OnRyeVNlcmlhbGl6ZUVycm9yKEV4ZWNTdGF0ZSYgZXhlYykKIHsKICAgICBp
ZiAoIW1fdHJpZWRUb1NlcmlhbGl6ZSkgewotICAgICAgICBtX3NlcmlhbGl6ZWREZXRhaWwgPSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBtX2Vycm9yLmdldCgpLCBOb25UaHJv
d2luZyk7CisgICAgICAgIG1fc2VyaWFsaXplZERldGFpbCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKGV4ZWMsIG1fZXJyb3IuZ2V0KCksIFNlcmlhbGl6YXRpb25FcnJvck1vZGU6Ok5v
blRocm93aW5nKTsKICAgICAgICAgbV90cmllZFRvU2VyaWFsaXplID0gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fc2VyaWFsaXplZERldGFpbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9N
ZXNzYWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuY3BwCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IE1lc3NhZ2VFdmUKICAgICBBU1NFUlQoIW1fZGF0YUFzU2NyaXB0
VmFsdWUuaGFzTm9WYWx1ZSgpKTsKICAgICAKICAgICBpZiAoIW1fZGF0YUFzU2VyaWFsaXplZFNj
cmlwdFZhbHVlICYmICFtX3RyaWVkVG9TZXJpYWxpemUpIHsKLSAgICAgICAgbV9kYXRhQXNTZXJp
YWxpemVkU2NyaXB0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgqZXhlYywg
bV9kYXRhQXNTY3JpcHRWYWx1ZS5qc1ZhbHVlKCksIE5vblRocm93aW5nKTsKKyAgICAgICAgbV9k
YXRhQXNTZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZSgqZXhlYywgbV9kYXRhQXNTY3JpcHRWYWx1ZS5qc1ZhbHVlKCksIFNlcmlhbGl6YXRpb25FcnJv
ck1vZGU6Ok5vblRocm93aW5nKTsKICAgICAgICAgbV90cmllZFRvU2VyaWFsaXplID0gdHJ1ZTsK
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BvcFN0YXRlRXZlbnQuY3BwCShyZXZp
c2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUG9wU3RhdGVFdmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gUG9wU3RhdGVFdgogICAgIEFTU0VSVCghbV9zdGF0ZS5oYXNOb1ZhbHVlKCkpOwogICAgIAog
ICAgIGlmICghbV9zZXJpYWxpemVkU3RhdGUgJiYgIW1fdHJpZWRUb1NlcmlhbGl6ZSkgewotICAg
ICAgICBtX3NlcmlhbGl6ZWRTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4
ZWN1dGlvblN0YXRlLCBtX3N0YXRlLmpzVmFsdWUoKSwgTm9uVGhyb3dpbmcpOworICAgICAgICBt
X3NlcmlhbGl6ZWRTdGF0ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWN1dGlv
blN0YXRlLCBtX3N0YXRlLmpzVmFsdWUoKSwgU2VyaWFsaXphdGlvbkVycm9yTW9kZTo6Tm9uVGhy
b3dpbmcpOwogICAgICAgICBtX3RyaWVkVG9TZXJpYWxpemUgPSB0cnVlOwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvRGVkaWNhdGVkV29ya2Vy
R2xvYmFsU2NvcGUuY3BwCShyZXZpc2lvbiAyMTE5NjApCisrKyBTb3VyY2UvV2ViQ29yZS93b3Jr
ZXJzL0RlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NyArNjYsNyBAQCBFdmVudFRhcmdldEludGVyZmFjZSBEZWRpY2F0ZWRXb3JrZXJHbG9iCiBFeGNl
cHRpb25Pcjx2b2lkPiBEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTo6cG9zdE1lc3NhZ2UoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgbWVzc2FnZVZhbHVlLCBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4+JiYgdHJhbnNmZXIpCiB7CiAgICAgVmVjdG9yPFJlZlB0
cjxNZXNzYWdlUG9ydD4+IHBvcnRzOwotICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKHN0YXRlLCBtZXNzYWdlVmFsdWUsIFdURk1vdmUodHJhbnNmZXIpLCBw
b3J0cyk7CisgICAgYXV0byBtZXNzYWdlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUo
c3RhdGUsIG1lc3NhZ2VWYWx1ZSwgV1RGTW92ZSh0cmFuc2ZlciksIHBvcnRzLCBTZXJpYWxpemF0
aW9uQ29udGV4dDo6V29ya2VyUG9zdE1lc3NhZ2UpOwogICAgIGlmIChtZXNzYWdlLmhhc0V4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gbWVzc2FnZS5yZWxlYXNlRXhjZXB0aW9uKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlci5jcHAJKHJldmlzaW9uIDIxMTk2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEw
Nyw3IEBAIFdvcmtlcjo6fldvcmtlcigpCiBFeGNlcHRpb25Pcjx2b2lkPiBXb3JrZXI6OnBvc3RN
ZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIG1lc3NhZ2VWYWx1ZSwg
VmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PiYmIHRyYW5zZmVyKQogewogICAgIFZl
Y3RvcjxSZWZQdHI8TWVzc2FnZVBvcnQ+PiBwb3J0czsKLSAgICBhdXRvIG1lc3NhZ2UgPSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShzdGF0ZSwgbWVzc2FnZVZhbHVlLCBXVEZNb3ZlKHRy
YW5zZmVyKSwgcG9ydHMpOworICAgIGF1dG8gbWVzc2FnZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKHN0YXRlLCBtZXNzYWdlVmFsdWUsIFdURk1vdmUodHJhbnNmZXIpLCBwb3J0cywg
U2VyaWFsaXphdGlvbkNvbnRleHQ6OldvcmtlclBvc3RNZXNzYWdlKTsKICAgICBpZiAobWVzc2Fn
ZS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIG1lc3NhZ2UucmVsZWFzZUV4Y2VwdGlv
bigpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTE5NjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxNy0wMi0wOSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFNoYXJlZEFycmF5QnVmZmVyIGRvZXMg
bm90IG5lZWQgdG8gYmUgaW4gdGhlIHRyYW5zZmVyIGxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODA3OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRlc3RzIHRoYXQg
ZW5zdXJlIHRoYXQgU0FCcyBiZWhhdmUgY29ycmVjdGx5IChhcmUgZWl0aGVyIGNsb25lZCBvciBz
aGFyZWQpCisgICAgICAgIGRlcGVuZGluZyBvbiBjb250ZXh0LCBhbmQgdGhhdCB3ZSBjdXJyZW50
bHkgc2hhcmUgU0FCcyB3aGV0aGVyIHRoZXkgYXJlIGluIHRoZSB0cmFuc2ZlcgorICAgICAgICBs
aXN0IG9yIG5vdC4gVGhpcyBhbHNvIGFkZHMgdGVzdHMgZm9yIFNBQnMgYmVpbmcgcGFzc2VkIGFy
b3VuZCB2aWEgbW9yZSBjb21wbGljYXRlZAorICAgICAgICBkYXRhIHN0cnVjdHVyZXMuCisKKyAg
ICAgICAgKiB3b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktbXVsdGktYnVmZmVyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LW11bHRpLWJ1ZmZl
ci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktd29ya2Vy
LTEuanM6IEFkZGVkLgorICAgICAgICAob25tZXNzYWdlKToKKyAgICAgICAgKiB3b3JrZXJzL3Nh
Yi9tdWx0aS1tZW1vcnktd29ya2VyLTIuanM6IEFkZGVkLgorICAgICAgICAob25tZXNzYWdlKToK
KyAgICAgICAgKiB3b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnkuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd29ya2Vycy9zYWIvbm8tdHJhbnNmZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiB3b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJz
L3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9uZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogd29y
a2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanM6IEFkZGVkLgorICAgICAgICAqIHdv
cmtlcnMvc2FiL3NhYi1jcmVhdG9yLXRyYW5zZmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3b3Jr
ZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5vLXRyYW5zZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLXRyYW5zZmVy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd29ya2Vycy9zYWIvc2VudC1mcm9tLXdv
cmtlci10cmFuc2Zlci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL3NhYi93b3JrZXIt
cmVzb3VyY2VzLmpzOgorCiAyMDE3LTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEdUSysgZ2FyZGVuaW5nLiBTa2lw
IHRlc3RzIHRoYXQgcmVxdWlyZSBVSVNjcmlwdENvbnRyb2xsZXI6Onpvb21Ub1NjYWxlLgpJbmRl
eDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9tdWx0aS1tZW1vcnktZXhwZWN0ZWQu
dHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9y
eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACitBbGwgd29ya2Vy
cyBkb25lIQorVGVzdCBwYXNzZWQhCisKSW5kZXg6IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211
bHRpLW1lbW9yeS1tdWx0aS1idWZmZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS1tdWx0aS1idWZmZXItZXhwZWN0ZWQudHh0
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS1t
dWx0aS1idWZmZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAor
QWxsIHdvcmtlcnMgZG9uZSEKK1Rlc3QgcGFzc2VkIQorCkluZGV4OiBMYXlvdXRUZXN0cy93b3Jr
ZXJzL3NhYi9tdWx0aS1tZW1vcnktbXVsdGktYnVmZmVyLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LW11bHRpLWJ1ZmZlci5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS1tdWx0aS1i
dWZmZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0PgorZnVuY3Rpb24gZ2V0T3JDcmVhdGUoaWQsIHRhZ05hbWUpCit7
CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgaWYg
KGVsZW1lbnQpCisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIAorICAgIGVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGVsZW1lbnQuaWQgPSBpZDsKKyAg
ICB2YXIgcGFyZW50ID0gZG9jdW1lbnQuYm9keSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7
CisgICAgdmFyIHJlZk5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsKKyAgICAKKyAgICBwYXJlbnQu
aW5zZXJ0QmVmb3JlKGVsZW1lbnQsIHJlZk5vZGUpOworICAgIHJldHVybiBlbGVtZW50OworfQor
CitmdW5jdGlvbiBkZWJ1Zyhtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisgICAgZ2V0T3JDcmVhdGUoImNvbnNvbGUiLCAiZGl2IikuYXBwZW5k
Q2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNw
YWNlCisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciB2ZXJib3NlID0gZmFsc2U7CisKK3ZhciBk
aWRTdGFydCA9IG5ldyBJbnQzMkFycmF5KG5ldyBTaGFyZWRBcnJheUJ1ZmZlcig0KSwgMCwgMSk7
Cit2YXIgc2hvdWxkR28gPSBuZXcgSW50MzJBcnJheShuZXcgU2hhcmVkQXJyYXlCdWZmZXIoNCks
IDAsIDEpOwordmFyIGRpZEVuZCA9IG5ldyBJbnQzMkFycmF5KG5ldyBTaGFyZWRBcnJheUJ1ZmZl
cig0KSwgMCwgMSk7CisKK3ZhciBudW1Xb3JrZXJzID0gMDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2Vy
KGZpbGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRlYnVnKCJTdGFydGluZyB3b3Jr
ZXI6ICIgKyBmaWxlKTsKKyAgICBudW1Xb3JrZXJzKys7CisgICAgdmFyIHdvcmtlciA9IG5ldyBX
b3JrZXIoZmlsZSk7CisgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7Cisg
ICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGVidWcoIkZpbmlzaGVkIHdvcmtlcjogIiArIGZpbGUpOwor
ICAgICAgICAgICAgaWYgKC0tbnVtV29ya2VycykKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBkZWJ1ZygiQWxsIHdvcmtlcnMgZG9uZSEiKTsKKyAgICAgICAgICAgIGRvbmUo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQuZGF0
YS5pbmRleE9mKCJFcnJvciIpID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKCJUZXN0IGZhaWxl
ZDogIisgZXZlbnQuZGF0YSk7CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisg
ICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGVidWcoIkV2ZW50IGZyb20g
IiArIGZpbGUgKyAiOiAiICsgZXZlbnQuZGF0YSk7CisgICAgfTsKKyAgICB3b3JrZXIucG9zdE1l
c3NhZ2Uoe2RpZFN0YXJ0OiBkaWRTdGFydCwgc2hvdWxkR286IHNob3VsZEdvLCBkaWRFbmQ6IGRp
ZEVuZCwgc2hvdWxkU2hhcmVCdWZmZXI6IGZhbHNlfSk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQor
eworICAgIGlmIChkaWRTdGFydFswXSAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2
YWx1ZSBhdCBkaWRTdGFydFswXTogIiArIGRpZFN0YXJ0WzBdOworICAgIGlmIChzaG91bGRHb1sw
XSAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1ZSBhdCBzaG91bGRHb1swXTog
IiArIHNob3VsZEdvWzBdOworICAgIGlmIChkaWRFbmRbMF0gIT0gMSkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBCYWQgdmFsdWUgYXQgZGlkRW5kWzBdOiAiICsgZGlkRW5kWzBdOworICAgIGRlYnVn
KCJUZXN0IHBhc3NlZCEiKTsKKworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAg
dGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK3N0YXJ0V29ya2VyKCJtdWx0aS1tZW1vcnkt
d29ya2VyLTEuanMiKTsKK3N0YXJ0V29ya2VyKCJtdWx0aS1tZW1vcnktd29ya2VyLTIuanMiKTsK
KworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJz
L3NhYi9tdWx0aS1tZW1vcnktd29ya2VyLTEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d29ya2Vycy9zYWIvbXVsdGktbWVtb3J5LXdvcmtlci0xLmpzCShub25leGlzdGVudCkKKysrIExh
eW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRpLW1lbW9yeS13b3JrZXItMS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI5IEBACitpbXBvcnRTY3JpcHRzKCJ3b3JrZXItcmVzb3VyY2VzLmpz
Iik7CisKK29ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkgeworICAgIHZhciBkaWRTdGFydCA9
IGV2ZW50LmRhdGEuZGlkU3RhcnQ7CisgICAgdmFyIHNob3VsZEdvID0gZXZlbnQuZGF0YS5zaG91
bGRHbzsKKyAgICB2YXIgZGlkRW5kID0gZXZlbnQuZGF0YS5kaWRFbmQ7CisKKyAgICBjaGVja0J1
ZmZlclNoYXJpbmcoZXZlbnQuZGF0YS5zaG91bGRTaGFyZUJ1ZmZlciwgZGlkU3RhcnQsIHNob3Vs
ZEdvLCBkaWRFbmQpOworICAgIAorICAgIHBvc3RNZXNzYWdlKCJTdGFydGVkISIpOworICAgIHBv
c3RNZXNzYWdlKCJkaWRTdGFydDogIiArIGRpZFN0YXJ0KTsKKyAgICBwb3N0TWVzc2FnZSgic2hv
dWxkR286ICIgKyBzaG91bGRHbyk7CisgICAgcG9zdE1lc3NhZ2UoImRpZEVuZDogIiArIGRpZEVu
ZCk7CisgICAgCisgICAgd2FpdChkaWRTdGFydCwgMCwgMCwgMSk7CisgICAgCisgICAgcG9zdE1l
c3NhZ2UoIkl0IHN0YXJ0ZWQhIik7CisgICAgCisgICAgc2hvdWxkR29bMF0gPSAxOworICAgIHdh
a2Uoc2hvdWxkR28sIDApOworICAgIAorICAgIHdhaXQoZGlkRW5kLCAwLCAwLCAxKTsKKyAgICAK
KyAgICBwb3N0TWVzc2FnZSgiQWxsIGRvbmUhIik7CisgICAgcG9zdE1lc3NhZ2UoImRpZFN0YXJ0
OiAiICsgZGlkU3RhcnQpOworICAgIHBvc3RNZXNzYWdlKCJzaG91bGRHbzogIiArIHNob3VsZEdv
KTsKKyAgICBwb3N0TWVzc2FnZSgiZGlkRW5kOiAiICsgZGlkRW5kKTsKKyAgICBwb3N0TWVzc2Fn
ZSgiZG9uZSIpOworfQpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGktbWVtb3J5
LXdvcmtlci0yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL211bHRp
LW1lbW9yeS13b3JrZXItMi5qcwkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJz
L3NhYi9tdWx0aS1tZW1vcnktd29ya2VyLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NyBAQAoraW1wb3J0U2NyaXB0cygid29ya2VyLXJlc291cmNlcy5qcyIpOworCitvbm1lc3NhZ2Ug
PSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciBkaWRTdGFydCA9IGV2ZW50LmRhdGEuZGlkU3Rh
cnQ7CisgICAgdmFyIHNob3VsZEdvID0gZXZlbnQuZGF0YS5zaG91bGRHbzsKKyAgICB2YXIgZGlk
RW5kID0gZXZlbnQuZGF0YS5kaWRFbmQ7CisKKyAgICBjaGVja0J1ZmZlclNoYXJpbmcoZXZlbnQu
ZGF0YS5zaG91bGRTaGFyZUJ1ZmZlciwgZGlkU3RhcnQsIHNob3VsZEdvLCBkaWRFbmQpOworICAg
IAorICAgIHBvc3RNZXNzYWdlKCJTdGFydGVkISIpOworICAgIHBvc3RNZXNzYWdlKCJkaWRTdGFy
dDogIiArIGRpZFN0YXJ0KTsKKyAgICBwb3N0TWVzc2FnZSgic2hvdWxkR286ICIgKyBzaG91bGRH
byk7CisgICAgcG9zdE1lc3NhZ2UoImRpZEVuZDogIiArIGRpZEVuZCk7CisgICAgCisgICAgQXRv
bWljcy5zdG9yZShkaWRTdGFydCwgMCwgMSk7CisgICAgd2FrZShkaWRTdGFydCwgMCk7CisKKyAg
ICB3YWl0KHNob3VsZEdvLCAwLCAwLCAxKTsKKyAgICAKKyAgICBBdG9taWNzLnN0b3JlKGRpZEVu
ZCwgMCwgMSk7CisgICAgd2FrZShkaWRFbmQsIDAsIDEpOworCisgICAgcG9zdE1lc3NhZ2UoImRp
ZFN0YXJ0OiAiICsgZGlkU3RhcnQpOworICAgIHBvc3RNZXNzYWdlKCJzaG91bGRHbzogIiArIHNo
b3VsZEdvKTsKKyAgICBwb3N0TWVzc2FnZSgiZGlkRW5kOiAiICsgZGlkRW5kKTsKKyAgICBwb3N0
TWVzc2FnZSgiZG9uZSIpOworfQpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGkt
bWVtb3J5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVsdGkt
bWVtb3J5Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbXVs
dGktbWVtb3J5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdldE9yQ3JlYXRlKGlkLCB0YWdOYW1l
KQoreworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
IGlmIChlbGVtZW50KQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAKKyAgICBlbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBlbGVtZW50LmlkID0gaWQ7
CisgICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50OworICAgIHZhciByZWZOb2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7CisgICAgCisgICAgcGFy
ZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCByZWZOb2RlKTsKKyAgICByZXR1cm4gZWxlbWVudDsK
K30KKworZnVuY3Rpb24gZGVidWcobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgIGdldE9yQ3JlYXRlKCJjb25zb2xlIiwgImRpdiIpLmFw
cGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5h
bWVzcGFjZQorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgdmVyYm9zZSA9IGZhbHNlOworCit2
YXIgc2FiID0gbmV3IFNoYXJlZEFycmF5QnVmZmVyKDMgKiA0KTsKKwordmFyIGRpZFN0YXJ0ID0g
bmV3IEludDMyQXJyYXkoc2FiLCAwLCAxKTsKK3ZhciBzaG91bGRHbyA9IG5ldyBJbnQzMkFycmF5
KHNhYiwgNCwgMSk7Cit2YXIgZGlkRW5kID0gbmV3IEludDMyQXJyYXkoc2FiLCA4LCAxKTsKKwor
dmFyIG51bVdvcmtlcnMgPSAwOworZnVuY3Rpb24gc3RhcnRXb3JrZXIoZmlsZSkKK3sKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgZGVidWcoIlN0YXJ0aW5nIHdvcmtlcjogIiArIGZpbGUpOwor
ICAgIG51bVdvcmtlcnMrKzsKKyAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcihmaWxlKTsKKyAg
ICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgaWYgKGV2ZW50
LmRhdGEgPT0gImRvbmUiKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkZWJ1ZygiRmluaXNoZWQgd29ya2VyOiAiICsgZmlsZSk7CisgICAgICAgICAgICBpZiAo
LS1udW1Xb3JrZXJzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRlYnVn
KCJBbGwgd29ya2VycyBkb25lISIpOworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoIkVycm9y
IikgPT0gMCkgeworICAgICAgICAgICAgZGVidWcoIlRlc3QgZmFpbGVkOiAiKyBldmVudC5kYXRh
KTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkZWJ1ZygiRXZlbnQgZnJvbSAiICsgZmlsZSArICI6ICIg
KyBldmVudC5kYXRhKTsKKyAgICB9OworICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7ZGlkU3RhcnQ6
IGRpZFN0YXJ0LCBzaG91bGRHbzogc2hvdWxkR28sIGRpZEVuZDogZGlkRW5kLCBzaG91bGRTaGFy
ZUJ1ZmZlcjogdHJ1ZX0pOworfQorCitmdW5jdGlvbiBkb25lKCkKK3sKKyAgICBpZiAoZGlkU3Rh
cnRbMF0gIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgZGlkU3RhcnRb
MF06ICIgKyBkaWRTdGFydFswXTsKKyAgICBpZiAoc2hvdWxkR29bMF0gIT0gMSkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgc2hvdWxkR29bMF06ICIgKyBzaG91bGRHb1swXTsK
KyAgICBpZiAoZGlkRW5kWzBdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZhbHVl
IGF0IGRpZEVuZFswXTogIiArIGRpZEVuZFswXTsKKyAgICBkZWJ1ZygiVGVzdCBwYXNzZWQhIik7
CisKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5
RG9uZSgpOworfQorCitzdGFydFdvcmtlcigibXVsdGktbWVtb3J5LXdvcmtlci0xLmpzIik7Citz
dGFydFdvcmtlcigibXVsdGktbWVtb3J5LXdvcmtlci0yLmpzIik7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvbm8tdHJhbnNmZXIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL25vLXRy
YW5zZmVyLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJz
L3NhYi9uby10cmFuc2Zlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
IEBACitBbGwgd29ya2VycyBkb25lIQorVGVzdCBwYXNzZWQhCisKSW5kZXg6IExheW91dFRlc3Rz
L3dvcmtlcnMvc2FiL25vLXRyYW5zZmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d29ya2Vycy9zYWIvbm8tdHJhbnNmZXIuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy93b3JrZXJzL3NhYi9uby10cmFuc2Zlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+CitmdW5jdGlvbiBnZXRPckNy
ZWF0ZShpZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Cisg
ICAgCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CisgICAg
ZWxlbWVudC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5ib2R5IHx8IGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9kZSA9IHBhcmVudC5maXJzdENoaWxk
OworICAgIAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgcmVmTm9kZSk7CisgICAg
cmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykKK3sKKyAgICB2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBnZXRPckNyZWF0ZSgiY29u
c29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhI
VE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIg
Lz4nOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIHZlcmJv
c2UgPSBmYWxzZTsKKwordmFyIHNhYiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcigxMDAgKiA0KTsK
KwordmFyIG1lbW9yeSA9IG5ldyBJbnQzMkFycmF5KHNhYik7CisKK3ZhciBudW1Xb3JrZXJzID0g
MDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgIGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAgICBudW1Xb3JrZXJzKys7
CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAgd29ya2VyLm9ubWVzc2Fn
ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5kYXRhID09ICJkb25lIikg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGVidWcoIkZpbmlz
aGVkIHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0tbnVtV29ya2VycykKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1ZygiQWxsIHdvcmtlcnMgZG9u
ZSEiKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIpID09IDApIHsKKyAgICAg
ICAgICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7CisgICAgICAgICAgICBp
ZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsgZXZlbnQuZGF0YSk7Cisg
ICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVtb3J5KTsKK30KKworZnVuY3Rpb24gZG9u
ZSgpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAgaWYgKG1l
bW9yeVtpXSAhPSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBCYWQgdmFsdWUgYXQgbWVt
b3J5WyIgKyBpICsgIl06ICIgKyBtZW1vcnlbaV07CisgICAgfQorICAgIGZvciAodmFyIGkgPSAz
OyBpIDwgbWVtb3J5Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChtZW1vcnlbaV0gIT0gMCkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0IG1lbW9yeVsiICsgaSArICJd
OiAiICsgbWVtb3J5W2ldOworICAgIH0KKyAgICBkZWJ1ZygiVGVzdCBwYXNzZWQhIik7CisKKyAg
ICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworfQorCitzdGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0xLmpzIik7CitzdGFydFdvcmtlcigi
c2ltcGxlLXdvcmtlci0yLmpzIik7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvcG9zdE1lc3NhZ2UtY2xvbmVzLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9wb3N0TWVzc2FnZS1jbG9u
ZXMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2Fi
L3Bvc3RNZXNzYWdlLWNsb25lcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMyBAQAorQ2hlY2tzIHRoYXQgd2luZG93LnBvc3RNZXNzYWdlIGNsb25lcyBTaGFyZWRBcnJh
eUJ1ZmZlcnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyBtZW1vcnlbMF0gaXMgNDIK
K1BBU1Mgb3RoZXJNZW1vcnlbMF0gaXMgMAorUEFTUyBtZW1vcnlbMF0gaXMgNDIKK1BBU1Mgb3Ro
ZXJNZW1vcnlbMF0gaXMgNDMKKwpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvcG9zdE1l
c3NhZ2UtY2xvbmVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIv
cG9zdE1lc3NhZ2UtY2xvbmVzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29y
a2Vycy9zYWIvcG9zdE1lc3NhZ2UtY2xvbmVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNo
ZWNrcyB0aGF0IHdpbmRvdy5wb3N0TWVzc2FnZSBjbG9uZXMgU2hhcmVkQXJyYXlCdWZmZXJzIik7
CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUo
KTsKKwordmFyIHNhYiA9IG5ldyBTaGFyZWRBcnJheUJ1ZmZlcig0KTsKK3ZhciBtZW1vcnkgPSBu
ZXcgSW50MzJBcnJheShzYWIpOwordmFyIG90aGVyTWVtb3J5OworCit3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIChldmVudCkgeworICAgIG90aGVyTWVtb3J5ID0g
ZXZlbnQuZGF0YTsKKyAgICBtZW1vcnlbMF0gPSA0MjsKKyAgICBzaG91bGRCZSgibWVtb3J5WzBd
IiwgIjQyIik7CisgICAgc2hvdWxkQmUoIm90aGVyTWVtb3J5WzBdIiwgIjAiKTsKKyAgICBvdGhl
ck1lbW9yeVswXSA9IDQzOworICAgIHNob3VsZEJlKCJtZW1vcnlbMF0iLCAiNDIiKTsKKyAgICBz
aG91bGRCZSgib3RoZXJNZW1vcnlbMF0iLCAiNDMiKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5u
ZXIpCisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfSk7CisKK3Bvc3RNZXNzYWdl
KG1lbW9yeSwgIioiKTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvd29ya2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJhbnNmZXIuanMJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2FiLWNyZWF0b3Itbm8tdHJh
bnNmZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACit2YXIgc2FiID0gbmV3IFNo
YXJlZEFycmF5QnVmZmVyKDEwMCAqIDQpOwordmFyIG1lbW9yeSA9IG5ldyBJbnQzMkFycmF5KHNh
Yik7Citwb3N0TWVzc2FnZShtZW1vcnkpOworCkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3Nh
Yi9zYWItY3JlYXRvci10cmFuc2Zlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3Jr
ZXJzL3NhYi9zYWItY3JlYXRvci10cmFuc2Zlci5qcwkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93b3JrZXJzL3NhYi9zYWItY3JlYXRvci10cmFuc2Zlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQgQEAKK3ZhciBzYWIgPSBuZXcgU2hhcmVkQXJyYXlCdWZmZXIoMTAwICogNCk7
Cit2YXIgbWVtb3J5ID0gbmV3IEludDMyQXJyYXkoc2FiKTsKK3Bvc3RNZXNzYWdlKG1lbW9yeSwg
W3NhYl0pOworCkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2Vy
LW5vLXRyYW5zZmVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3Jr
ZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5vLXRyYW5zZmVyLWV4cGVjdGVkLnR4dAkobm9uZXhp
c3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5vLXRy
YW5zZmVyLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKK0FsbCB3
b3JrZXJzIGRvbmUhCitUZXN0IHBhc3NlZCEKKwpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9z
YWIvc2VudC1mcm9tLXdvcmtlci1uby10cmFuc2Zlci5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3dvcmtlcnMvc2FiL3NlbnQtZnJvbS13b3JrZXItbm8tdHJhbnNmZXIuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9zZW50LWZyb20td29ya2VyLW5v
LXRyYW5zZmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGdldE9yQ3JlYXRlKGlkLCB0YWdOYW1l
KQoreworICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
IGlmIChlbGVtZW50KQorICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAKKyAgICBlbGVtZW50
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKKyAgICBlbGVtZW50LmlkID0gaWQ7
CisgICAgdmFyIHBhcmVudCA9IGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVt
ZW50OworICAgIHZhciByZWZOb2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7CisgICAgCisgICAgcGFy
ZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCByZWZOb2RlKTsKKyAgICByZXR1cm4gZWxlbWVudDsK
K30KKworZnVuY3Rpb24gZGVidWcobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgIGdldE9yQ3JlYXRlKCJjb25zb2xlIiwgImRpdiIpLmFw
cGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5h
bWVzcGFjZQorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2lmICh3
aW5kb3cudGVzdFJ1bm5lcikgeworICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgIHRl
c3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgdmVyYm9zZSA9IGZhbHNlOworCit2
YXIgbWVtb3J5OworCit2YXIgbnVtV29ya2VycyA9IDA7CitmdW5jdGlvbiBzdGFydFdvcmtlcihm
aWxlKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkZWJ1ZygiU3RhcnRpbmcgd29ya2Vy
OiAiICsgZmlsZSk7CisgICAgbnVtV29ya2VycysrOworICAgIHZhciB3b3JrZXIgPSBuZXcgV29y
a2VyKGZpbGUpOworICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAg
ICAgICBpZiAoZXZlbnQuZGF0YSA9PSAiZG9uZSIpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRlYnVnKCJGaW5pc2hlZCB3b3JrZXI6ICIgKyBmaWxlKTsKKyAg
ICAgICAgICAgIGlmICgtLW51bVdvcmtlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgZGVidWcoIkFsbCB3b3JrZXJzIGRvbmUhIik7CisgICAgICAgICAgICBkb25lKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGV2ZW50LmRhdGEu
aW5kZXhPZigiRXJyb3IiKSA9PSAwKSB7CisgICAgICAgICAgICBkZWJ1ZygiVGVzdCBmYWlsZWQ6
ICIrIGV2ZW50LmRhdGEpOworICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRlYnVnKCJFdmVudCBmcm9tICIg
KyBmaWxlICsgIjogIiArIGV2ZW50LmRhdGEpOworICAgIH07CisgICAgd29ya2VyLnBvc3RNZXNz
YWdlKG1lbW9yeSk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMzsgKytpKSB7CisgICAgICAgIGlmIChtZW1vcnlbaV0gIT0gMSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogQmFkIHZhbHVlIGF0IG1lbW9yeVsiICsgaSArICJdOiAiICsgbWVtb3J5
W2ldOworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMzsgaSA8IG1lbW9yeS5sZW5ndGg7ICsraSkg
eworICAgICAgICBpZiAobWVtb3J5W2ldICE9IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IEJhZCB2YWx1ZSBhdCBtZW1vcnlbIiArIGkgKyAiXTogIiArIG1lbW9yeVtpXTsKKyAgICB9Cisg
ICAgZGVidWcoIlRlc3QgcGFzc2VkISIpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKwordmFyIHNhYkNyZWF0b3IgPSBu
ZXcgV29ya2VyKCJzYWItY3JlYXRvci1uby10cmFuc2Zlci5qcyIpOworc2FiQ3JlYXRvci5vbm1l
c3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgIG1lbW9yeSA9IGV2ZW50LmRhdGE7CisgICAg
CisgICAgc3RhcnRXb3JrZXIoInNpbXBsZS13b3JrZXItMS5qcyIpOworICAgIHN0YXJ0V29ya2Vy
KCJzaW1wbGUtd29ya2VyLTIuanMiKTsKK307CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci10cmFuc2Zl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd29ya2Vycy9zYWIvc2Vu
dC1mcm9tLXdvcmtlci10cmFuc2Zlci1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci10cmFuc2Zlci1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACitBbGwgd29ya2VycyBkb25lIQorVGVz
dCBwYXNzZWQhCisKSW5kZXg6IExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3NlbnQtZnJvbS13b3Jr
ZXItdHJhbnNmZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi9z
ZW50LWZyb20td29ya2VyLXRyYW5zZmVyLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvd29ya2Vycy9zYWIvc2VudC1mcm9tLXdvcmtlci10cmFuc2Zlci5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBnZXRPckNyZWF0ZShpZCwgdGFnTmFtZSkKK3sKKyAgICB2YXIgZWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICBpZiAoZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgCisgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
dGFnTmFtZSk7CisgICAgZWxlbWVudC5pZCA9IGlkOworICAgIHZhciBwYXJlbnQgPSBkb2N1bWVu
dC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKKyAgICB2YXIgcmVmTm9kZSA9IHBh
cmVudC5maXJzdENoaWxkOworICAgIAorICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwg
cmVmTm9kZSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1bmN0aW9uIGRlYnVnKG1zZykK
K3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBn
ZXRPckNyZWF0ZSgiY29uc29sZSIsICJkaXYiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0
IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UKKyAgICBzcGFuLmlubmVySFRN
TCA9IG1zZyArICc8YnIgLz4nOworfQorCitpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
K30KKwordmFyIHZlcmJvc2UgPSBmYWxzZTsKKwordmFyIHNhYjsKK3ZhciBtZW1vcnk7CisKK3Zh
ciBudW1Xb3JrZXJzID0gMDsKK2Z1bmN0aW9uIHN0YXJ0V29ya2VyKGZpbGUpCit7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRlYnVnKCJTdGFydGluZyB3b3JrZXI6ICIgKyBmaWxlKTsKKyAg
ICBudW1Xb3JrZXJzKys7CisgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoZmlsZSk7CisgICAg
d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlmIChldmVudC5k
YXRhID09ICJkb25lIikgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGVidWcoIkZpbmlzaGVkIHdvcmtlcjogIiArIGZpbGUpOworICAgICAgICAgICAgaWYgKC0t
bnVtV29ya2VycykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBkZWJ1Zygi
QWxsIHdvcmtlcnMgZG9uZSEiKTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJFcnJvciIp
ID09IDApIHsKKyAgICAgICAgICAgIGRlYnVnKCJUZXN0IGZhaWxlZDogIisgZXZlbnQuZGF0YSk7
CisgICAgICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGVidWcoIkV2ZW50IGZyb20gIiArIGZpbGUgKyAiOiAiICsg
ZXZlbnQuZGF0YSk7CisgICAgfTsKKyAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVtb3J5LCBbc2Fi
XSk7Cit9CisKK2Z1bmN0aW9uIGRvbmUoKQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsg
KytpKSB7CisgICAgICAgIGlmIChtZW1vcnlbaV0gIT0gMSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogQmFkIHZhbHVlIGF0IG1lbW9yeVsiICsgaSArICJdOiAiICsgbWVtb3J5W2ldOworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMzsgaSA8IG1lbW9yeS5sZW5ndGg7ICsraSkgeworICAgICAg
ICBpZiAobWVtb3J5W2ldICE9IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEJhZCB2YWx1
ZSBhdCBtZW1vcnlbIiArIGkgKyAiXTogIiArIG1lbW9yeVtpXTsKKyAgICB9CisgICAgZGVidWco
IlRlc3QgcGFzc2VkISIpOworCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKwordmFyIHNhYkNyZWF0b3IgPSBuZXcgV29ya2Vy
KCJzYWItY3JlYXRvci10cmFuc2Zlci5qcyIpOworc2FiQ3JlYXRvci5vbm1lc3NhZ2UgPSBmdW5j
dGlvbihldmVudCkgeworICAgIG1lbW9yeSA9IGV2ZW50LmRhdGE7CisgICAgc2FiID0gbWVtb3J5
LmJ1ZmZlcjsKKyAgICAKKyAgICBzdGFydFdvcmtlcigic2ltcGxlLXdvcmtlci0xLmpzIik7Cisg
ICAgc3RhcnRXb3JrZXIoInNpbXBsZS13b3JrZXItMi5qcyIpOworfTsKKworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy93b3JrZXJzL3NhYi93b3JrZXItcmVz
b3VyY2VzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dvcmtlcnMvc2FiL3dvcmtlci1y
ZXNvdXJjZXMuanMJKHJldmlzaW9uIDIxMTk2MCkKKysrIExheW91dFRlc3RzL3dvcmtlcnMvc2Fi
L3dvcmtlci1yZXNvdXJjZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMgKzMzLDIxIEBAIGZ1
bmN0aW9uIHdha2UobWVtb3J5LCBpbmRleCkKICAgICB9CiB9CiAKK2Z1bmN0aW9uIGNoZWNrQnVm
ZmVyU2hhcmluZyhzaG91bGRTaGFyZUJ1ZmZlcikKK3sKKyAgICB2YXIgc2V0ID0gbmV3IFNldCgp
OworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKQorICAgICAg
ICBzZXQuYWRkKGFyZ3VtZW50c1tpXS5idWZmZXIpOworICAgIGlmIChzaG91bGRTaGFyZUJ1ZmZl
cikgeworICAgICAgICBpZiAoc2V0LnNpemUgIT0gMSkgeworICAgICAgICAgICAgcG9zdE1lc3Nh
Z2UoIkVycm9yOiBidWZmZXJzIHNob3VsZCBiZSBzaGFyZWQgYnV0IGFyZSBub3Qgc2hhcmVkIChz
ZXQuc2l6ZSA9PSAiICsgc2V0LnNpemUgKyAiKSIpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
ImVycm9yIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc2V0LnNpemUg
IT0gYXJndW1lbnRzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJFcnJv
cjogYnVmZmVycyBzaG91bGQgbm90IGJlIHNoYXJlZCBidXQgYXJlIHNoYXJlZCIpOworICAgICAg
ICAgICAgcG9zdE1lc3NhZ2UoImVycm9yIik7CisgICAgICAgIH0KKyAgICB9Cit9CisK
</data>
<flag name="review"
          id="322952"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>