<?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>15748</bug_id>
          
          <creation_ts>2007-10-28 23:55:33 -0700</creation_ts>
          <short_desc>avoid creating and then breaking circular lists in the parser</short_desc>
          <delta_ts>2007-10-29 00:02:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59777</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-28 23:55:33 -0700</bug_when>
    <thetext>The parser creates circular lists for some node types and then breaks them. It would be simpler to just keep head and tail pointers in the parser for the appropriate productions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59778</commentid>
    <comment_count>1</comment_count>
      <attachid>16934</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-10-28 23:56:17 -0700</bug_when>
    <thetext>Created attachment 16934
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59779</commentid>
    <comment_count>2</comment_count>
      <attachid>16934</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-10-29 00:00:36 -0700</bug_when>
    <thetext>Comment on attachment 16934
patch

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16934</attachid>
            <date>2007-10-28 23:56:17 -0700</date>
            <delta_ts>2007-10-29 00:00:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>parser-decycle.patch.txt</filename>
            <type>text/plain</type>
            <size>35198</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI3MjEw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMDctMTAt
MjggIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gYXZvaWQgY3JlYXRpbmcg
YW5kIHRoZW4gYnJlYWtpbmcgY2lyY3VsYXIgbGlzdHMgaW4gdGhlIHBhcnNlciwgaW5zdGVhZCB0
cmFjayBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIGF0IHBhcnNlIHRpbWUKKyAgICAgICAgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDgKKyAgICAgICAgCisgICAgICAg
IE5vdCBhIHNpZ25pZmljYW50IHNwZWVkdXAgb3Igc2xvd2Rvd24gb24gU3VuU3BpZGVyLgorCisg
ICAgICAgICoga2pzL1BhcnNlci5jcHA6CisgICAgICAgIChLSlM6OmNsZWFyTmV3Tm9kZXMpOgor
ICAgICAgICAqIGtqcy9QYXJzZXIuaDoKKyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAg
ICAqIGtqcy9ub2Rlcy5jcHA6CisgICAgICAgIChLSlM6OkJsb2NrTm9kZTo6QmxvY2tOb2RlKToK
KyAgICAgICAgKEtKUzo6Q2FzZUJsb2NrTm9kZTo6Q2FzZUJsb2NrTm9kZSk6CisgICAgICAgIChL
SlM6OkZ1bmN0aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUpOgorICAgICAgICAoS0pTOjpT
b3VyY2VFbGVtZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZSk6CisgICAgICAgIChLSlM6OlBy
b2dyYW1Ob2RlOjpQcm9ncmFtTm9kZSk6CisgICAgICAgICoga2pzL25vZGVzLmg6CisgICAgICAg
IChLSlM6OkVsZW1lbnROb2RlOjopOgorICAgICAgICAoS0pTOjpBcnJheU5vZGU6Oik6CisgICAg
ICAgIChLSlM6OlByb3BlcnR5TGlzdE5vZGU6Oik6CisgICAgICAgIChLSlM6Ok9iamVjdExpdGVy
YWxOb2RlOjopOgorICAgICAgICAoS0pTOjpBcmd1bWVudExpc3ROb2RlOjopOgorICAgICAgICAo
S0pTOjpBcmd1bWVudHNOb2RlOjopOgorICAgICAgICAoS0pTOjpWYXJEZWNsTGlzdE5vZGU6Oik6
CisgICAgICAgIChLSlM6OlZhclN0YXRlbWVudE5vZGU6Oik6CisgICAgICAgIChLSlM6OkZvck5v
ZGU6Oik6CisgICAgICAgIChLSlM6OlBhcmFtZXRlck5vZGU6Oik6CisgICAgICAgIChLSlM6OkZ1
bmNFeHByTm9kZTo6KToKKyAgICAgICAgKEtKUzo6RnVuY0RlY2xOb2RlOjopOgorICAgICAgICAo
S0pTOjpTb3VyY2VFbGVtZW50c05vZGU6Oik6CisgICAgICAgIChLSlM6OkNhc2VDbGF1c2VOb2Rl
OjopOgorICAgICAgICAoS0pTOjpDbGF1c2VMaXN0Tm9kZTo6KToKKwogMjAwNy0xMC0yOCAgR2Vv
ZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpJbmRleDoga2pzL1BhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1BhcnNl
ci5jcHAJKHJldmlzaW9uIDI3MjEwKQorKysga2pzL1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDI5ICszNyw5IEBAIG5hbWVzcGFjZSBLSlMgewogaW50IFBhcnNlcjo6c2lkID0gMDsK
IAogc3RhdGljIFJlZlB0cjxQcm9ncmFtTm9kZT4qIHByb2dOb2RlOwotc3RhdGljIEhhc2hTZXQ8
Tm9kZSo+KiBub2RlQ3ljbGVzOwotCi12b2lkIFBhcnNlcjo6bm90ZU5vZGVDeWNsZShOb2RlICpu
b2RlKQotewotICAgIGlmICghbm9kZUN5Y2xlcykKLSAgICAgICAgbm9kZUN5Y2xlcyA9IG5ldyBI
YXNoU2V0PE5vZGUqPjsKLSAgICBub2RlQ3ljbGVzLT5hZGQobm9kZSk7Ci19Ci0KLXZvaWQgUGFy
c2VyOjpyZW1vdmVOb2RlQ3ljbGUoTm9kZSAqbm9kZSkKLXsKLSAgICBBU1NFUlQobm9kZUN5Y2xl
cyk7Ci0gICAgbm9kZUN5Y2xlcy0+cmVtb3ZlKG5vZGUpOwotfQogCiBzdGF0aWMgdm9pZCBjbGVh
ck5ld05vZGVzKCkKIHsKLSAgICBpZiAobm9kZUN5Y2xlcykgewotICAgICAgICBmb3IgKEhhc2hT
ZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IG5vZGVDeWNsZXMtPmJlZ2luKCk7IGl0ICE9IG5vZGVD
eWNsZXMtPmVuZCgpOyArK2l0KQotICAgICAgICAgICAgKCppdCktPmJyZWFrQ3ljbGUoKTsKLSAg
ICAgICAgZGVsZXRlIG5vZGVDeWNsZXM7Ci0gICAgICAgIG5vZGVDeWNsZXMgPSAwOwotICAgIH0K
ICAgICBOb2RlOjpjbGVhck5ld05vZGVzKCk7CiB9CiAKSW5kZXg6IGtqcy9QYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvUGFyc2VyLmgJKHJldmlzaW9uIDI3MjEwKQorKysga2pzL1BhcnNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICBzdGF0aWMgdm9pZCBhY2NlcHQoUGFzc1JlZlB0cjxQcm9ncmFtTm9kZT4pOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIHNhdmVOZXdOb2RlKE5vZGUqKTsKLSAgICAgICAgc3RhdGljIHZvaWQgbm90
ZU5vZGVDeWNsZShOb2RlKik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlbW92ZU5vZGVDeWNsZShO
b2RlKik7CiAKICAgICAgICAgc3RhdGljIGludCBzaWQ7CiAgICAgfTsKSW5kZXg6IGtqcy9ncmFt
bWFyLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2pzL2dyYW1tYXIueQkocmV2aXNpb24gMjcyMTApCisrKyBr
anMvZ3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw0MSBAQCBzdGF0aWMgTm9k
ZSogbWFrZU51bWJlck5vZGUoZG91YmxlKTsKIAogI2VuZGlmCiAKK3N0cnVjdCBFbGVtZW50TGlz
dCB7CisgICAgRWxlbWVudE5vZGUqIGhlYWQ7CisgICAgRWxlbWVudE5vZGUqIHRhaWw7Cit9Owor
CitzdHJ1Y3QgUHJvcGVydHlMaXN0IHsKKyAgICBQcm9wZXJ0eUxpc3ROb2RlKiBoZWFkOworICAg
IFByb3BlcnR5TGlzdE5vZGUqIHRhaWw7Cit9OworCitzdHJ1Y3QgQXJndW1lbnRMaXN0IHsKKyAg
ICBBcmd1bWVudExpc3ROb2RlKiBoZWFkOworICAgIEFyZ3VtZW50TGlzdE5vZGUqIHRhaWw7Cit9
OworCitzdHJ1Y3QgVmFyRGVjbExpc3QgeworICAgIFZhckRlY2xMaXN0Tm9kZSogaGVhZDsKKyAg
ICBWYXJEZWNsTGlzdE5vZGUqIHRhaWw7Cit9OworCitzdHJ1Y3QgUGFyYW1ldGVyTGlzdCB7Cisg
ICAgUGFyYW1ldGVyTm9kZSogaGVhZDsKKyAgICBQYXJhbWV0ZXJOb2RlKiB0YWlsOworfTsKKwor
c3RydWN0IFNvdXJjZUVsZW1lbnRMaXN0IHsKKyAgICBTb3VyY2VFbGVtZW50c05vZGUqIGhlYWQ7
CisgICAgU291cmNlRWxlbWVudHNOb2RlKiB0YWlsOworfTsKKworc3RydWN0IENsYXVzZUxpc3Qg
eworICAgIENsYXVzZUxpc3ROb2RlKiBoZWFkOworICAgIENsYXVzZUxpc3ROb2RlKiB0YWlsOwor
fTsKKwogJX0KIAogJXVuaW9uIHsKQEAgLTg5LDIzICsxMjQsMjMgQEAgc3RhdGljIE5vZGUqIG1h
a2VOdW1iZXJOb2RlKGRvdWJsZSk7CiAgIElkZW50aWZpZXIgICAgICAgICAgKmlkZW50OwogICBO
b2RlICAgICAgICAgICAgICAgICpub2RlOwogICBTdGF0ZW1lbnROb2RlICAgICAgICpzdGF0Owot
ICBQYXJhbWV0ZXJOb2RlICAgICAgICpwYXJhbTsKKyAgUGFyYW1ldGVyTGlzdCAgICAgICBwYXJh
bTsKICAgRnVuY3Rpb25Cb2R5Tm9kZSAgICAqYm9keTsKICAgRnVuY0RlY2xOb2RlICAgICAgICAq
ZnVuYzsKICAgRnVuY0V4cHJOb2RlICAgICAgICAqZnVuY0V4cHI7CiAgIFByb2dyYW1Ob2RlICAg
ICAgICAgKnByb2c7CiAgIEFzc2lnbkV4cHJOb2RlICAgICAgKmluaXQ7Ci0gIFNvdXJjZUVsZW1l
bnRzTm9kZSAgKnNyY3M7CisgIFNvdXJjZUVsZW1lbnRMaXN0ICAgc3JjczsKICAgQXJndW1lbnRz
Tm9kZSAgICAgICAqYXJnczsKLSAgQXJndW1lbnRMaXN0Tm9kZSAgICAqYWxpc3Q7CisgIEFyZ3Vt
ZW50TGlzdCAgICAgICAgYWxpc3Q7CiAgIFZhckRlY2xOb2RlICAgICAgICAgKmRlY2w7Ci0gIFZh
ckRlY2xMaXN0Tm9kZSAgICAgKnZsaXN0OworICBWYXJEZWNsTGlzdCAgICAgICAgIHZsaXN0Owog
ICBDYXNlQmxvY2tOb2RlICAgICAgICpjYmxrOwotICBDbGF1c2VMaXN0Tm9kZSAgICAgICpjbGlz
dDsKKyAgQ2xhdXNlTGlzdCAgICAgICAgICBjbGlzdDsKICAgQ2FzZUNsYXVzZU5vZGUgICAgICAq
Y2NsOwotICBFbGVtZW50Tm9kZSAgICAgICAgICplbG07CisgIEVsZW1lbnRMaXN0ICAgICAgICAg
ZWxtOwogICBPcGVyYXRvciAgICAgICAgICAgIG9wOwotICBQcm9wZXJ0eUxpc3ROb2RlICAgKnBs
aXN0OworICBQcm9wZXJ0eUxpc3QgICAgICAgIHBsaXN0OwogICBQcm9wZXJ0eU5vZGUgICAgICAg
KnBub2RlOwogfQogCkBAIC0xOTcsNyArMjMyLDcgQEAgc3RhdGljIE5vZGUqIG1ha2VOdW1iZXJO
b2RlKGRvdWJsZSk7CiAldHlwZSA8ZGVjbD4gIFZhcmlhYmxlRGVjbGFyYXRpb24gVmFyaWFibGVE
ZWNsYXJhdGlvbk5vSW4gQ29uc3REZWNsYXJhdGlvbgogJXR5cGUgPGNibGs+ICBDYXNlQmxvY2sK
ICV0eXBlIDxjY2w+ICAgQ2FzZUNsYXVzZSBEZWZhdWx0Q2xhdXNlCi0ldHlwZSA8Y2xpc3Q+IENh
c2VDbGF1c2VzICBDYXNlQ2xhdXNlc09wdAorJXR5cGUgPGNsaXN0PiBDYXNlQ2xhdXNlcyBDYXNl
Q2xhdXNlc09wdAogJXR5cGUgPGl2YWw+ICBFbGlzaW9uIEVsaXNpb25PcHQKICV0eXBlIDxlbG0+
ICAgRWxlbWVudExpc3QKICV0eXBlIDxwbm9kZT4gUHJvcGVydHkKQEAgLTIyOCwyMCArMjYzLDIy
IEBAIFByb3BlcnR5OgogICB8IE5VTUJFUiAnOicgQXNzaWdubWVudEV4cHIgICAgICAgICAgIHsg
JCQgPSBuZXcgUHJvcGVydHlOb2RlKElkZW50aWZpZXIoVVN0cmluZzo6ZnJvbSgkMSkpLCAkMywg
UHJvcGVydHlOb2RlOjpDb25zdGFudCk7IH0KICAgfCBJREVOVCBJREVOVCAnKCcgJyknIEZ1bmN0
aW9uQm9keSAgICB7ICQkID0gbWFrZUdldHRlck9yU2V0dGVyUHJvcGVydHlOb2RlKCokMSwgKiQy
LCAwLCAkNSk7IGlmICghJCQpIFlZQUJPUlQ7IH0KICAgfCBJREVOVCBJREVOVCAnKCcgRm9ybWFs
UGFyYW1ldGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IG1ha2VHZXR0ZXJPclNldHRlclByb3BlcnR5Tm9kZSgqJDEs
ICokMiwgJDQsICQ2KTsgaWYgKCEkJCkgWVlBQk9SVDsgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQgPSBtYWtlR2V0dGVyT3JTZXR0ZXJQcm9wZXJ0eU5vZGUo
KiQxLCAqJDIsICQ0LmhlYWQsICQ2KTsgaWYgKCEkJCkgWVlBQk9SVDsgfQogOwogCiBQcm9wZXJ0
eUxpc3Q6Ci0gICAgUHJvcGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5l
dyBQcm9wZXJ0eUxpc3ROb2RlKCQxKTsgfQotICB8IFByb3BlcnR5TGlzdCAnLCcgUHJvcGVydHkg
ICAgICAgICAgIHsgJCQgPSBuZXcgUHJvcGVydHlMaXN0Tm9kZSgkMywgJDEpOyB9CisgICAgUHJv
cGVydHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5oZWFkID0gbmV3IFByb3BlcnR5
TGlzdE5vZGUoJDEpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICQkLnRhaWwgPSAkJC5oZWFkOyB9CisgIHwgUHJvcGVydHlMaXN0ICcsJyBQcm9wZXJ0eSAgICAg
ICAgICAgeyAkJC5oZWFkID0gJDEuaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLnRhaWwgPSBuZXcgUHJvcGVydHlMaXN0Tm9kZSgkMywgJDEudGFpbCk7
IH0KIDsKIAogUHJpbWFyeUV4cHI6CiAgICAgUHJpbWFyeUV4cHJOb0JyYWNlCiAgIHwgJ3snICd9
JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBPYmplY3RMaXRlcmFsTm9k
ZSgpOyB9Ci0gIHwgJ3snIFByb3BlcnR5TGlzdCAnfScgICAgICAgICAgICAgICAgeyAkJCA9IG5l
dyBPYmplY3RMaXRlcmFsTm9kZSgkMik7IH0KKyAgfCAneycgUHJvcGVydHlMaXN0ICd9JyAgICAg
ICAgICAgICAgICB7ICQkID0gbmV3IE9iamVjdExpdGVyYWxOb2RlKCQyLmhlYWQpOyB9CiAgIC8q
IGFsbG93IGV4dHJhIGNvbW1hLCBzZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTkzOSAqLwotICB8ICd7JyBQcm9wZXJ0eUxpc3QgJywnICd9JyAgICAgICAgICAgIHsg
JCQgPSBuZXcgT2JqZWN0TGl0ZXJhbE5vZGUoJDIpOyB9CisgIHwgJ3snIFByb3BlcnR5TGlzdCAn
LCcgJ30nICAgICAgICAgICAgeyAkJCA9IG5ldyBPYmplY3RMaXRlcmFsTm9kZSgkMi5oZWFkKTsg
fQogOwogCiBQcmltYXJ5RXhwck5vQnJhY2U6CkBAIC0yNTQsMTQgKzI5MSwxNiBAQCBQcmltYXJ5
RXhwck5vQnJhY2U6CiAKIEFycmF5TGl0ZXJhbDoKICAgICAnWycgRWxpc2lvbk9wdCAnXScgICAg
ICAgICAgICAgICAgICB7ICQkID0gbmV3IEFycmF5Tm9kZSgkMik7IH0KLSAgfCAnWycgRWxlbWVu
dExpc3QgJ10nICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEFycmF5Tm9kZSgkMik7IH0KLSAg
fCAnWycgRWxlbWVudExpc3QgJywnIEVsaXNpb25PcHQgJ10nICB7ICQkID0gbmV3IEFycmF5Tm9k
ZSgkNCwgJDIpOyB9CisgIHwgJ1snIEVsZW1lbnRMaXN0ICddJyAgICAgICAgICAgICAgICAgeyAk
JCA9IG5ldyBBcnJheU5vZGUoJDIuaGVhZCk7IH0KKyAgfCAnWycgRWxlbWVudExpc3QgJywnIEVs
aXNpb25PcHQgJ10nICB7ICQkID0gbmV3IEFycmF5Tm9kZSgkNCwgJDIuaGVhZCk7IH0KIDsKIAog
RWxlbWVudExpc3Q6Ci0gICAgRWxpc2lvbk9wdCBBc3NpZ25tZW50RXhwciAgICAgICAgICAgeyAk
JCA9IG5ldyBFbGVtZW50Tm9kZSgkMSwgJDIpOyB9CisgICAgRWxpc2lvbk9wdCBBc3NpZ25tZW50
RXhwciAgICAgICAgICAgeyAkJC5oZWFkID0gbmV3IEVsZW1lbnROb2RlKCQxLCAkMik7IAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudGFpbCA9ICQkLmhlYWQ7
IH0KICAgfCBFbGVtZW50TGlzdCAnLCcgRWxpc2lvbk9wdCBBc3NpZ25tZW50RXhwcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgRWxlbWVudE5vZGUo
JDEsICQzLCAkNCk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkLmhlYWQgPSAkMS5oZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJCQudGFpbCA9IG5ldyBFbGVtZW50Tm9kZSgkMS50YWlsLCAkMywgJDQpOyB9CiA7CiAK
IEVsaXNpb25PcHQ6CkBAIC0zMTUsMTIgKzM1NCwxNCBAQCBDYWxsRXhwck5vQkY6CiAKIEFyZ3Vt
ZW50czoKICAgICAnKCcgJyknICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3
IEFyZ3VtZW50c05vZGUoKTsgfQotICB8ICcoJyBBcmd1bWVudExpc3QgJyknICAgICAgICAgICAg
ICAgIHsgJCQgPSBuZXcgQXJndW1lbnRzTm9kZSgkMik7IH0KKyAgfCAnKCcgQXJndW1lbnRMaXN0
ICcpJyAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEFyZ3VtZW50c05vZGUoJDIuaGVhZCk7IH0K
IDsKIAogQXJndW1lbnRMaXN0OgotICAgIEFzc2lnbm1lbnRFeHByICAgICAgICAgICAgICAgICAg
ICAgIHsgJCQgPSBuZXcgQXJndW1lbnRMaXN0Tm9kZSgkMSk7IH0KLSAgfCBBcmd1bWVudExpc3Qg
JywnIEFzc2lnbm1lbnRFeHByICAgICB7ICQkID0gbmV3IEFyZ3VtZW50TGlzdE5vZGUoJDEsICQz
KTsgfQorICAgIEFzc2lnbm1lbnRFeHByICAgICAgICAgICAgICAgICAgICAgIHsgJCQuaGVhZCA9
IG5ldyBBcmd1bWVudExpc3ROb2RlKCQxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLnRhaWwgPSAkJC5oZWFkOyB9CisgIHwgQXJndW1lbnRMaXN0ICcsJyBB
c3NpZ25tZW50RXhwciAgICAgeyAkJC5oZWFkID0gJDEuaGVhZDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLnRhaWwgPSBuZXcgQXJndW1lbnRMaXN0Tm9kZSgk
MS50YWlsLCAkMyk7IH0KIDsKIAogTGVmdEhhbmRTaWRlRXhwcjoKQEAgLTY0NSwyNCArNjg2LDI4
IEBAIFN0YXRlbWVudDoKIAogQmxvY2s6CiAgICAgJ3snICd9JyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAkJCA9IG5ldyBCbG9ja05vZGUoMCk7IERCRygkJCwgQDIsIEAyKTsgfQotICB8
ICd7JyBTb3VyY2VFbGVtZW50cyAnfScgICAgICAgICAgICAgIHsgJCQgPSBuZXcgQmxvY2tOb2Rl
KCQyKTsgREJHKCQkLCBAMywgQDMpOyB9CisgIHwgJ3snIFNvdXJjZUVsZW1lbnRzICd9JyAgICAg
ICAgICAgICAgeyAkJCA9IG5ldyBCbG9ja05vZGUoJDIuaGVhZCk7IERCRygkJCwgQDMsIEAzKTsg
fQogOwogCiBWYXJpYWJsZVN0YXRlbWVudDoKLSAgICBWQVIgVmFyaWFibGVEZWNsYXJhdGlvbkxp
c3QgJzsnICAgICB7ICQkID0gbmV3IFZhclN0YXRlbWVudE5vZGUoJDIpOyBEQkcoJCQsIEAxLCBA
Myk7IH0KLSAgfCBWQVIgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgZXJyb3IgICB7ICQkID0gbmV3
IFZhclN0YXRlbWVudE5vZGUoJDIpOyBEQkcoJCQsIEAxLCBAMik7IEFVVE9fU0VNSUNPTE9OOyB9
CisgICAgVkFSIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0ICc7JyAgICAgeyAkJCA9IG5ldyBWYXJT
dGF0ZW1lbnROb2RlKCQyLmhlYWQpOyBEQkcoJCQsIEAxLCBAMyk7IH0KKyAgfCBWQVIgVmFyaWFi
bGVEZWNsYXJhdGlvbkxpc3QgZXJyb3IgICB7ICQkID0gbmV3IFZhclN0YXRlbWVudE5vZGUoJDIu
aGVhZCk7IERCRygkJCwgQDEsIEAyKTsgQVVUT19TRU1JQ09MT047IH0KIDsKIAogVmFyaWFibGVE
ZWNsYXJhdGlvbkxpc3Q6Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAg
eyAkJCA9IG5ldyBWYXJEZWNsTGlzdE5vZGUoJDEpOyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlv
biAgICAgICAgICAgICAgICAgeyAkJC5oZWFkID0gbmV3IFZhckRlY2xMaXN0Tm9kZSgkMSk7IAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudGFpbCA9ICQkLmhl
YWQ7IH0KICAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCAnLCcgVmFyaWFibGVEZWNsYXJhdGlv
bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgVmFy
RGVjbExpc3ROb2RlKCQxLCAkMyk7IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkLmhlYWQgPSAkMS5oZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQudGFpbCA9IG5ldyBWYXJEZWNsTGlzdE5vZGUoJDEudGFpbCwgJDMp
OyB9CiA7CiAKIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbjoKLSAgICBWYXJpYWJsZURlY2xh
cmF0aW9uTm9JbiAgICAgICAgICAgICB7ICQkID0gbmV3IFZhckRlY2xMaXN0Tm9kZSgkMSk7IH0K
LSAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW4gJywnIFZhcmlhYmxlRGVjbGFyYXRpb25O
b0luCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBW
YXJEZWNsTGlzdE5vZGUoJDEsICQzKTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25Ob0luICAg
ICAgICAgICAgIHsgJCQuaGVhZCA9IG5ldyBWYXJEZWNsTGlzdE5vZGUoJDEpOyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnRhaWwgPSAkJC5oZWFkOyB9Cisg
IHwgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3ROb0luICcsJyBWYXJpYWJsZURlY2xhcmF0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5oZWFkID0gJDEuaGVh
ZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLnRhaWwgPSBu
ZXcgVmFyRGVjbExpc3ROb2RlKCQxLnRhaWwsICQzKTsgfQogOwogCiBWYXJpYWJsZURlY2xhcmF0
aW9uOgpAQCAtNjc2LDE1ICs3MjEsMTcgQEAgVmFyaWFibGVEZWNsYXJhdGlvbk5vSW46CiA7CiAK
IENvbnN0U3RhdGVtZW50OgotICAgIENPTlNUVE9LRU4gQ29uc3REZWNsYXJhdGlvbkxpc3QgJzsn
IHsgJCQgPSBuZXcgVmFyU3RhdGVtZW50Tm9kZSgkMik7IERCRygkJCwgQDEsIEAzKTsgfQorICAg
IENPTlNUVE9LRU4gQ29uc3REZWNsYXJhdGlvbkxpc3QgJzsnIHsgJCQgPSBuZXcgVmFyU3RhdGVt
ZW50Tm9kZSgkMi5oZWFkKTsgREJHKCQkLCBAMSwgQDMpOyB9CiAgIHwgQ09OU1RUT0tFTiBDb25z
dERlY2xhcmF0aW9uTGlzdCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgJCQgPSBuZXcgVmFyU3RhdGVtZW50Tm9kZSgkMik7IERCRygkJCwgQDEsIEAyKTsg
QVVUT19TRU1JQ09MT047IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ICQkID0gbmV3IFZhclN0YXRlbWVudE5vZGUoJDIuaGVhZCk7IERCRygkJCwgQDEsIEAyKTsg
QVVUT19TRU1JQ09MT047IH0KIDsKIAogQ29uc3REZWNsYXJhdGlvbkxpc3Q6Ci0gICAgQ29uc3RE
ZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBWYXJEZWNsTGlzdE5vZGUo
JDEpOyB9CisgICAgQ29uc3REZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgICAgeyAkJC5oZWFk
ID0gbmV3IFZhckRlY2xMaXN0Tm9kZSgkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkJC50YWlsID0gJCQuaGVhZDsgfQogICB8IENvbnN0RGVjbGFyYXRpb25M
aXN0ICcsJyBDb25zdERlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAkJCA9IG5ldyBWYXJEZWNsTGlzdE5vZGUoJDEsICQzKTsgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQuaGVhZCA9ICQxLmhlYWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC50YWlsID0gbmV3IFZhckRl
Y2xMaXN0Tm9kZSgkMS50YWlsLCAkMyk7IH0KIDsKIAogQ29uc3REZWNsYXJhdGlvbjoKQEAgLTcy
Myw3ICs3NzAsNyBAQCBJdGVyYXRpb25TdGF0ZW1lbnQ6CiAgIHwgRk9SICcoJyBFeHByTm9Jbk9w
dCAnOycgRXhwck9wdCAnOycgRXhwck9wdCAnKScgU3RhdGVtZW50CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGb3JOb2RlKCQzLCAkNSwgJDcsICQ5
KTsgREJHKCQkLCBAMSwgQDgpOyB9CiAgIHwgRk9SICcoJyBWQVIgVmFyaWFibGVEZWNsYXJhdGlv
bkxpc3ROb0luICc7JyBFeHByT3B0ICc7JyBFeHByT3B0ICcpJyBTdGF0ZW1lbnQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEZvck5vZGUoJDQsICQ2
LCAkOCwgJDEwKTsgREJHKCQkLCBAMSwgQDkpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGb3JOb2RlKCQ0LmhlYWQsICQ2LCAkOCwgJDEwKTsg
REJHKCQkLCBAMSwgQDkpOyB9CiAgIHwgRk9SICcoJyBMZWZ0SGFuZFNpZGVFeHByIElOVE9LRU4g
RXhwciAnKScgU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlICpu
ID0gJDM7CkBAIC03NzgsMjkgKzgyNSwzMSBAQCBTd2l0Y2hTdGF0ZW1lbnQ6CiA7CiAKIENhc2VC
bG9jazoKLSAgICAneycgQ2FzZUNsYXVzZXNPcHQgJ30nICAgICAgICAgICAgICB7ICQkID0gbmV3
IENhc2VCbG9ja05vZGUoJDIsIDAsIDApOyB9CisgICAgJ3snIENhc2VDbGF1c2VzT3B0ICd9JyAg
ICAgICAgICAgICAgeyAkJCA9IG5ldyBDYXNlQmxvY2tOb2RlKCQyLmhlYWQsIDAsIDApOyB9CiAg
IHwgJ3snIENhc2VDbGF1c2VzT3B0IERlZmF1bHRDbGF1c2UgQ2FzZUNsYXVzZXNPcHQgJ30nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBDYXNlQmxv
Y2tOb2RlKCQyLCAkMywgJDQpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyAkJCA9IG5ldyBDYXNlQmxvY2tOb2RlKCQyLmhlYWQsICQzLCAkNC5oZWFkKTsgfQog
OwogCiBDYXNlQ2xhdXNlc09wdDoKLSAgICAvKiBub3RoaW5nICovICAgICAgICAgICAgICAgICAg
ICAgICB7ICQkID0gMDsgfQorICAgIC8qIG5vdGhpbmcgKi8gICAgICAgICAgICAgICAgICAgICAg
IHsgJCQuaGVhZCA9IDA7ICQkLnRhaWwgPSAwOyB9CiAgIHwgQ2FzZUNsYXVzZXMKIDsKIAogQ2Fz
ZUNsYXVzZXM6Ci0gICAgQ2FzZUNsYXVzZSAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9
IG5ldyBDbGF1c2VMaXN0Tm9kZSgkMSk7IH0KLSAgfCBDYXNlQ2xhdXNlcyBDYXNlQ2xhdXNlICAg
ICAgICAgICAgICB7ICQkID0gbmV3IENsYXVzZUxpc3ROb2RlKCQxLCAkMik7IH0KKyAgICBDYXNl
Q2xhdXNlICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLmhlYWQgPSBuZXcgQ2xhdXNlTGlz
dE5vZGUoJDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQu
dGFpbCA9ICQkLmhlYWQ7IH0KKyAgfCBDYXNlQ2xhdXNlcyBDYXNlQ2xhdXNlICAgICAgICAgICAg
ICB7ICQkLmhlYWQgPSAkMS5oZWFkOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICQkLnRhaWwgPSBuZXcgQ2xhdXNlTGlzdE5vZGUoJDEudGFpbCwgJDIpOyB9CiA7
CiAKIENhc2VDbGF1c2U6CiAgICAgQ0FTRSBFeHByICc6JyAgICAgICAgICAgICAgICAgICAgICAg
eyAkJCA9IG5ldyBDYXNlQ2xhdXNlTm9kZSgkMik7IH0KLSAgfCBDQVNFIEV4cHIgJzonIFNvdXJj
ZUVsZW1lbnRzICAgICAgICB7ICQkID0gbmV3IENhc2VDbGF1c2VOb2RlKCQyLCAkNCk7IH0KKyAg
fCBDQVNFIEV4cHIgJzonIFNvdXJjZUVsZW1lbnRzICAgICAgICB7ICQkID0gbmV3IENhc2VDbGF1
c2VOb2RlKCQyLCAkNC5oZWFkKTsgfQogOwogCiBEZWZhdWx0Q2xhdXNlOgogICAgIERFRkFVTFQg
JzonICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgQ2FzZUNsYXVzZU5vZGUoMCk7
IH0KLSAgfCBERUZBVUxUICc6JyBTb3VyY2VFbGVtZW50cyAgICAgICAgICB7ICQkID0gbmV3IENh
c2VDbGF1c2VOb2RlKDAsICQzKTsgfQorICB8IERFRkFVTFQgJzonIFNvdXJjZUVsZW1lbnRzICAg
ICAgICAgIHsgJCQgPSBuZXcgQ2FzZUNsYXVzZU5vZGUoMCwgJDMuaGVhZCk7IH0KIDsKIAogTGFi
ZWxsZWRTdGF0ZW1lbnQ6CkBAIC04MjcsMzYgKzg3Niw0MCBAQCBEZWJ1Z2dlclN0YXRlbWVudDoK
IEZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgRlVOQ1RJT04gSURFTlQgJygnICcpJyBGdW5jdGlv
bkJvZHkgeyAkJCA9IG5ldyBGdW5jRGVjbE5vZGUoKiQyLCAkNSk7IH0KICAgfCBGVU5DVElPTiBJ
REVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGdW5jRGVjbE5vZGUoKiQy
LCAkNCwgJDYpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAk
JCA9IG5ldyBGdW5jRGVjbE5vZGUoKiQyLCAkNC5oZWFkLCAkNik7IH0KIDsKIAogRnVuY3Rpb25F
eHByOgogICAgIEZVTkNUSU9OICcoJyAnKScgRnVuY3Rpb25Cb2R5ICAgICAgIHsgJCQgPSBuZXcg
RnVuY0V4cHJOb2RlKENvbW1vbklkZW50aWZpZXJzOjpzaGFyZWQoKS0+bnVsbElkZW50aWZpZXIs
ICQ0KTsgfQogICB8IEZVTkNUSU9OICcoJyBGb3JtYWxQYXJhbWV0ZXJMaXN0ICcpJyBGdW5jdGlv
bkJvZHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3
IEZ1bmNFeHByTm9kZShDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPm51bGxJZGVudGlmaWVy
LCAkNSwgJDMpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAk
JCA9IG5ldyBGdW5jRXhwck5vZGUoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpLT5udWxsSWRl
bnRpZmllciwgJDUsICQzLmhlYWQpOyB9CiAgIHwgRlVOQ1RJT04gSURFTlQgJygnICcpJyBGdW5j
dGlvbkJvZHkgeyAkJCA9IG5ldyBGdW5jRXhwck5vZGUoKiQyLCAkNSk7IH0KICAgfCBGVU5DVElP
TiBJREVOVCAnKCcgRm9ybWFsUGFyYW1ldGVyTGlzdCAnKScgRnVuY3Rpb25Cb2R5Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGdW5jRXhwck5vZGUo
KiQyLCAkNiwgJDQpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyAkJCA9IG5ldyBGdW5jRXhwck5vZGUoKiQyLCAkNiwgJDQuaGVhZCk7IH0KIDsKIAogRm9ybWFs
UGFyYW1ldGVyTGlzdDoKLSAgICBJREVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gbmV3IFBhcmFtZXRlck5vZGUoKiQxKTsgfQotICB8IEZvcm1hbFBhcmFtZXRlckxpc3Qg
JywnIElERU5UICAgICAgIHsgJCQgPSBuZXcgUGFyYW1ldGVyTm9kZSgkMSwgKiQzKTsgfQorICAg
IElERU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQuaGVhZCA9IG5ldyBQYXJh
bWV0ZXJOb2RlKCokMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC50YWlsID0gJCQuaGVhZDsgfQorICB8IEZvcm1hbFBhcmFtZXRlckxpc3QgJywnIElERU5U
ICAgICAgIHsgJCQuaGVhZCA9ICQxLmhlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAkJC50YWlsID0gbmV3IFBhcmFtZXRlck5vZGUoJDEudGFpbCwgKiQzKTsg
fQogOwogCiBGdW5jdGlvbkJvZHk6CiAgICAgJ3snICd9JyAvKiBub3QgaW4gc3BlYyAqLyAgICAg
ICAgICAgeyAkJCA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKDApOyBEQkcoJCQsIEAxLCBAMik7IH0K
LSAgfCAneycgU291cmNlRWxlbWVudHMgJ30nICAgICAgICAgICAgICB7ICQkID0gbmV3IEZ1bmN0
aW9uQm9keU5vZGUoJDIpOyBEQkcoJCQsIEAxLCBAMyk7IH0KKyAgfCAneycgU291cmNlRWxlbWVu
dHMgJ30nICAgICAgICAgICAgICB7ICQkID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoJDIuaGVhZCk7
IERCRygkJCwgQDEsIEAzKTsgfQogOwogCiBQcm9ncmFtOgogICAgIC8qIG5vdCBpbiBzcGVjICov
ICAgICAgICAgICAgICAgICAgIHsgUGFyc2VyOjphY2NlcHQobmV3IFByb2dyYW1Ob2RlKDApKTsg
fQotICAgIHwgU291cmNlRWxlbWVudHMgICAgICAgICAgICAgICAgICAgIHsgUGFyc2VyOjphY2Nl
cHQobmV3IFByb2dyYW1Ob2RlKCQxKSk7IH0KKyAgICB8IFNvdXJjZUVsZW1lbnRzICAgICAgICAg
ICAgICAgICAgICB7IFBhcnNlcjo6YWNjZXB0KG5ldyBQcm9ncmFtTm9kZSgkMS5oZWFkKSk7IH0K
IDsKIAogU291cmNlRWxlbWVudHM6Ci0gICAgU291cmNlRWxlbWVudCAgICAgICAgICAgICAgICAg
ICAgICAgeyAkJCA9IG5ldyBTb3VyY2VFbGVtZW50c05vZGUoJDEpOyB9Ci0gIHwgU291cmNlRWxl
bWVudHMgU291cmNlRWxlbWVudCAgICAgICAgeyAkJCA9IG5ldyBTb3VyY2VFbGVtZW50c05vZGUo
JDEsICQyKTsgfQorICAgIFNvdXJjZUVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgIHsgJCQu
aGVhZCA9IG5ldyBTb3VyY2VFbGVtZW50c05vZGUoJDEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJCQudGFpbCA9ICQkLmhlYWQ7IH0KKyAgfCBTb3VyY2VFbGVt
ZW50cyBTb3VyY2VFbGVtZW50ICAgICAgICB7ICQkLmhlYWQgPSAkMS5oZWFkOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQudGFpbCA9IG5ldyBTb3VyY2VFbGVt
ZW50c05vZGUoJDEudGFpbCwgJDIpOyB9CiA7CiAKIFNvdXJjZUVsZW1lbnQ6CkluZGV4OiBranMv
bm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDI3MjEwKQor
Kysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDExICs0NTgsNiBAQCBKU1Zh
bHVlICpFbGVtZW50Tm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlCiAgIHJldHVybiBhcnJheTsKIH0K
IAotdm9pZCBFbGVtZW50Tm9kZTo6YnJlYWtDeWNsZSgpIAoteyAKLSAgICBuZXh0ID0gMDsKLX0K
LQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5Tm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogdm9pZCBBcnJheU5vZGU6Om9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smIG5vZGVTdGFjaykKQEAgLTU0NywxMSArNTQyLDYgQEAgSlNWYWx1ZSAqUHJvcGVydHlMaXN0
Tm9kZTo6ZXZhbHVhdGUoRXhlYwogICByZXR1cm4gb2JqOwogfQogCi12b2lkIFByb3BlcnR5TGlz
dE5vZGU6OmJyZWFrQ3ljbGUoKSAKLXsgCi0gICAgbmV4dCA9IDA7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9wZXJ0eU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogdm9pZCBQcm9wZXJ0eU5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVu
Y3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykK
QEAgLTYzNCwxMSArNjI0LDYgQEAgTGlzdCBBcmd1bWVudExpc3ROb2RlOjpldmFsdWF0ZUxpc3Qo
RXhlYwogICByZXR1cm4gbDsKIH0KIAotdm9pZCBBcmd1bWVudExpc3ROb2RlOjpicmVha0N5Y2xl
KCkgCi17IAotICAgIG5leHQgPSAwOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gQXJndW1lbnRzTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2
b2lkIEFyZ3VtZW50c05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTIyNzksMTEg
KzIyNjQsNiBAQCB2b2lkIFZhckRlY2xMaXN0Tm9kZTo6Z2V0RGVjbGFyYXRpb25zKERlCiAgICAg
c3RhY2tzLm5vZGVTdGFjay5hcHBlbmQodmFyLmdldCgpKTsKIH0KIAotdm9pZCBWYXJEZWNsTGlz
dE5vZGU6OmJyZWFrQ3ljbGUoKSAKLXsgCi0gICAgbmV4dCA9IDA7Ci19Ci0KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWYXJTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIHZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9k
ZVN0YWNrKQpAQCAtMjMxNywxMiArMjI5NywxMSBAQCB2b2lkIEJsb2NrTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhGCiAgICAgICAgIG5vZGVTdGFjay5hcHBlbmQoc291cmNlLmdldCgpKTsK
IH0KIAotQmxvY2tOb2RlOjpCbG9ja05vZGUoU291cmNlRWxlbWVudHNOb2RlICpzKQorQmxvY2tO
b2RlOjpCbG9ja05vZGUoU291cmNlRWxlbWVudHNOb2RlKiBzKQogewogICBpZiAocykgewogICAg
IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IAotICAgIHNvdXJjZSA9IHMtPm5leHQucmVs
ZWFzZSgpOwotICAgIFBhcnNlcjo6cmVtb3ZlTm9kZUN5Y2xlKHNvdXJjZS5nZXQoKSk7CisgICAg
c291cmNlID0gczsKICAgICBzZXRMb2Mocy0+Zmlyc3RMaW5lKCksIHMtPmxhc3RMaW5lKCkpOwog
ICB9IGVsc2UgewogICAgIHNvdXJjZSA9IDA7CkBAIC0yODUxLDMyICsyODMwLDE0IEBAIEpTVmFs
dWUgKkNsYXVzZUxpc3ROb2RlOjpldmFsdWF0ZShFeGVjU3QKICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgQ2xhdXNlTGlzdE5vZGU6OmJyZWFrQ3ljbGUoKSAKLXsgCi0gICAgbmV4dCA9IDA7Ci19Ci0K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXNlQmxvY2tOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNhc2VCbG9ja05vZGU6OkNhc2VCbG9ja05vZGUo
Q2xhdXNlTGlzdE5vZGUgKmwxLCBDYXNlQ2xhdXNlTm9kZSAqZCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ2xhdXNlTGlzdE5vZGUgKmwyKQorQ2FzZUJsb2NrTm9kZTo6Q2FzZUJsb2Nr
Tm9kZShDbGF1c2VMaXN0Tm9kZSogbDEsIENhc2VDbGF1c2VOb2RlKiBkLCBDbGF1c2VMaXN0Tm9k
ZSogbDIpCisgICAgOiBsaXN0MShsMSkKKyAgICAsIGRlZihkKQorICAgICwgbGlzdDIobDIpCiB7
Ci0gIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IAotICBpZiAobDEpIHsKLSAgICBsaXN0
MSA9IGwxLT5uZXh0LnJlbGVhc2UoKTsKLSAgICBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShsaXN0
MS5nZXQoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgbGlzdDEgPSAwOwotICB9Ci0KLSAgZGVmID0gZDsK
LQotICBpZiAobDIpIHsKLSAgICBsaXN0MiA9IGwyLT5uZXh0LnJlbGVhc2UoKTsKLSAgICBQYXJz
ZXI6OnJlbW92ZU5vZGVDeWNsZShsaXN0Mi5nZXQoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgbGlzdDIg
PSAwOwotICB9CisgICAgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCiB9CiAgCiB2b2lk
IENhc2VCbG9ja05vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSos
IERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKQEAgLTMxMDAsMTQgKzMw
NjEsOSBAQCBKU1ZhbHVlICpQYXJhbWV0ZXJOb2RlOjpldmFsdWF0ZShFeGVjU3RhCiAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogfQogCi12b2lkIFBhcmFtZXRlck5vZGU6OmJyZWFrQ3ljbGUoKSAK
LXsgCi0gICAgbmV4dCA9IDA7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBGdW5jdGlvbkJvZHlOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0
aW9uQm9keU5vZGU6OkZ1bmN0aW9uQm9keU5vZGUoU291cmNlRWxlbWVudHNOb2RlICpzKQorRnVu
Y3Rpb25Cb2R5Tm9kZTo6RnVuY3Rpb25Cb2R5Tm9kZShTb3VyY2VFbGVtZW50c05vZGUqIHMpCiAg
ICAgOiBCbG9ja05vZGUocykKICAgICAsIG1fc291cmNlVVJMKExleGVyOjpjdXJyKCktPnNvdXJj
ZVVSTCgpKQogICAgICwgbV9zb3VyY2VJZChQYXJzZXI6OnNpZCkKQEAgLTMzNDgsMTYgKzMzMDQs
MTUgQEAgSlNWYWx1ZSAqRnVuY0V4cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdAogCiBpbnQgU291
cmNlRWxlbWVudHNOb2RlOjpjb3VudCA9IDA7CiAKLVNvdXJjZUVsZW1lbnRzTm9kZTo6U291cmNl
RWxlbWVudHNOb2RlKFN0YXRlbWVudE5vZGUgKnMxKQotICA6IG5vZGUoczEpLCBuZXh0KHRoaXMp
CitTb3VyY2VFbGVtZW50c05vZGU6OlNvdXJjZUVsZW1lbnRzTm9kZShTdGF0ZW1lbnROb2RlKiBz
MSkKKyAgOiBub2RlKHMxKQogewogICAgIG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IAot
ICAgIFBhcnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsKICAgICBzZXRMb2MoczEtPmZpcnN0TGlu
ZSgpLCBzMS0+bGFzdExpbmUoKSk7CiB9CiAKLVNvdXJjZUVsZW1lbnRzTm9kZTo6U291cmNlRWxl
bWVudHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqczEsIFN0YXRlbWVudE5vZGUgKnMyKQotICA6
IG5vZGUoczIpLCBuZXh0KHMxLT5uZXh0KQorU291cmNlRWxlbWVudHNOb2RlOjpTb3VyY2VFbGVt
ZW50c05vZGUoU291cmNlRWxlbWVudHNOb2RlKiBzMSwgU3RhdGVtZW50Tm9kZSogczIpCisgIDog
bm9kZShzMikKIHsKICAgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgCiAgIHMxLT5uZXh0
ID0gdGhpczsKQEAgLTM0MDAsMTIgKzMzNTUsOCBAQCBDb21wbGV0aW9uIFNvdXJjZUVsZW1lbnRz
Tm9kZTo6ZXhlY3V0ZShFCiAgIH0KIH0KIAotdm9pZCBTb3VyY2VFbGVtZW50c05vZGU6OmJyZWFr
Q3ljbGUoKSAKLXsgCi0gICAgbmV4dCA9IDA7Ci19Ci0KLVByb2dyYW1Ob2RlOjpQcm9ncmFtTm9k
ZShTb3VyY2VFbGVtZW50c05vZGUgKnMpIDogRnVuY3Rpb25Cb2R5Tm9kZShzKQorUHJvZ3JhbU5v
ZGU6OlByb2dyYW1Ob2RlKFNvdXJjZUVsZW1lbnRzTm9kZSogcykKKyAgICA6IEZ1bmN0aW9uQm9k
eU5vZGUocykKIHsKIH0KIApJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25v
ZGVzLmgJKHJldmlzaW9uIDI3MjEwKQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0Miw4ICsxNDIsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAvLyBVc2VkIGZvciBpdGVyYXRp
dmUsIGRlcHRoLWZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgbm9kZSB0cmVlLiBEb2VzIG5vdCBjcm9z
cyBmdW5jdGlvbiBjYWxsIGJvdW5kYXJpZXMuCiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFy
aWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2smKSBLSlNfRkFTVF9DQUxMIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGJyZWFrQ3ljbGUoKSBL
SlNfRkFTVF9DQUxMIHsgfQotCiAgIHByb3RlY3RlZDoKICAgICBDb21wbGV0aW9uIGNyZWF0ZUVy
cm9yQ29tcGxldGlvbihFeGVjU3RhdGUgKiwgRXJyb3JUeXBlLCBjb25zdCBjaGFyICptc2cpIEtK
U19GQVNUX0NBTEw7CiAgICAgQ29tcGxldGlvbiBjcmVhdGVFcnJvckNvbXBsZXRpb24oRXhlY1N0
YXRlICosIEVycm9yVHlwZSwgY29uc3QgY2hhciAqbXNnLCBjb25zdCBJZGVudGlmaWVyICYpIEtK
U19GQVNUX0NBTEw7CkBAIC0zMDYsMTUgKzMwNCwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICBj
bGFzcyBFbGVtZW50Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAgIC8vIGxpc3Qg
cG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0aGUgQXJyYXlO
b2RlIGN0b3IKLSAgICBFbGVtZW50Tm9kZShpbnQgZSwgTm9kZSAqbikgS0pTX0ZBU1RfQ0FMTCA6
IG5leHQodGhpcyksIGVsaXNpb24oZSksIG5vZGUobikgeyBQYXJzZXI6Om5vdGVOb2RlQ3ljbGUo
dGhpcyk7IH0KLSAgICBFbGVtZW50Tm9kZShFbGVtZW50Tm9kZSAqbCwgaW50IGUsIE5vZGUgKm4p
IEtKU19GQVNUX0NBTEwKLSAgICAgIDogbmV4dChsLT5uZXh0KSwgZWxpc2lvbihlKSwgbm9kZShu
KSB7IGwtPm5leHQgPSB0aGlzOyB9CisgICAgRWxlbWVudE5vZGUoaW50IGUsIE5vZGUqIG4pIEtK
U19GQVNUX0NBTEwgOiBlbGlzaW9uKGUpLCBub2RlKG4pIHsgfQorICAgIEVsZW1lbnROb2RlKEVs
ZW1lbnROb2RlKiBsLCBpbnQgZSwgTm9kZSogbikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBlbGlz
aW9uKGUpLCBub2RlKG4pIHsgbC0+bmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6
Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0
YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBQYXNzUmVmUHRyPEVsZW1lbnROb2RlPiBy
ZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYnJlYWtDeWNsZSgpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1
cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQXJyYXlO
b2RlOwpAQCAtMzI2LDEwICszMjIsMTAgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFycmF5
Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgogICAgIEFycmF5Tm9kZShpbnQgZSkgS0pT
X0ZBU1RfQ0FMTCA6IGVsaXNpb24oZSksIG9wdCh0cnVlKSB7IH0KLSAgICBBcnJheU5vZGUoRWxl
bWVudE5vZGUgKmVsZSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBlbGVtZW50KGVsZS0+bmV4dC5y
ZWxlYXNlKCkpLCBlbGlzaW9uKDApLCBvcHQoZmFsc2UpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3lj
bGUoZWxlbWVudC5nZXQoKSk7IH0KLSAgICBBcnJheU5vZGUoaW50IGVsaSwgRWxlbWVudE5vZGUg
KmVsZSkgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBlbGVtZW50KGVsZS0+bmV4dC5yZWxlYXNlKCkp
LCBlbGlzaW9uKGVsaSksIG9wdCh0cnVlKSB7IFBhcnNlcjo6cmVtb3ZlTm9kZUN5Y2xlKGVsZW1l
bnQuZ2V0KCkpOyB9CisgICAgQXJyYXlOb2RlKEVsZW1lbnROb2RlKiBlbGUpIEtKU19GQVNUX0NB
TEwKKyAgICAgIDogZWxlbWVudChlbGUpLCBlbGlzaW9uKDApLCBvcHQoZmFsc2UpIHsgfQorICAg
IEFycmF5Tm9kZShpbnQgZWxpLCBFbGVtZW50Tm9kZSogZWxlKSBLSlNfRkFTVF9DQUxMCisgICAg
ICA6IGVsZW1lbnQoZWxlKSwgZWxpc2lvbihlbGkpLCBvcHQodHJ1ZSkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9kZSosIERlY2xhcmF0
aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIEpTVmFsdWUqIGV2YWx1
YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0zNTksMTYgKzM1NSwxNCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgCiAgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGUgOiBwdWJsaWMg
Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1
bGFyIGxpc3QsIGNyYWNrZWQgaW4gdGhlIE9iamVjdExpdGVyYWxOb2RlIGN0b3IKLSAgICBQcm9w
ZXJ0eUxpc3ROb2RlKFByb3BlcnR5Tm9kZSAqbikgS0pTX0ZBU1RfQ0FMTAotICAgICAgOiBub2Rl
KG4pLCBuZXh0KHRoaXMpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xlKHRoaXMpOyB9Ci0gICAgUHJv
cGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUgKm4sIFByb3BlcnR5TGlzdE5vZGUgKmwpIEtKU19G
QVNUX0NBTEwKLSAgICAgIDogbm9kZShuKSwgbmV4dChsLT5uZXh0KSB7IGwtPm5leHQgPSB0aGlz
OyB9CisgICAgUHJvcGVydHlMaXN0Tm9kZShQcm9wZXJ0eU5vZGUqIG4pIEtKU19GQVNUX0NBTEwK
KyAgICAgIDogbm9kZShuKSB7IH0KKyAgICBQcm9wZXJ0eUxpc3ROb2RlKFByb3BlcnR5Tm9kZSog
biwgUHJvcGVydHlMaXN0Tm9kZSogbCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBub2RlKG4pIHsg
bC0+bmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19G
QVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgICBQYXNzUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkg
S0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsgfQotICAgIHZpcnR1YWwgdm9p
ZCBicmVha0N5Y2xlKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVz
c2lvbjsgfQogICBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBPYmplY3RMaXRlcmFsTm9kZTsK
QEAgLTM3OSw3ICszNzMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgT2JqZWN0TGl0ZXJh
bE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBPYmplY3RMaXRlcmFsTm9kZSgp
IEtKU19GQVNUX0NBTEwgeyB9Ci0gICAgT2JqZWN0TGl0ZXJhbE5vZGUoUHJvcGVydHlMaXN0Tm9k
ZSAqbCkgS0pTX0ZBU1RfQ0FMTCA6IGxpc3QobC0+bmV4dC5yZWxlYXNlKCkpIHsgUGFyc2VyOjpy
ZW1vdmVOb2RlQ3ljbGUobGlzdC5nZXQoKSk7IH0KKyAgICBPYmplY3RMaXRlcmFsTm9kZShQcm9w
ZXJ0eUxpc3ROb2RlKiBsKSBLSlNfRkFTVF9DQUxMIDogbGlzdChsKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRp
b25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTQyNiwxNiArNDIwLDE0IEBA
IG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEFyZ3VtZW50TGlzdE5vZGUgOiBwdWJsaWMgTm9k
ZSB7CiAgIHB1YmxpYzoKLSAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1bGFy
IGxpc3QsIGNyYWNrZWQgaW4gdGhlIEFyZ3VtZW50c05vZGUgY3RvcgotICAgIEFyZ3VtZW50TGlz
dE5vZGUoTm9kZSAqZSkgS0pTX0ZBU1RfQ0FMTCA6IG5leHQodGhpcyksIGV4cHIoZSkgeyBQYXJz
ZXI6Om5vdGVOb2RlQ3ljbGUodGhpcyk7IH0KLSAgICBBcmd1bWVudExpc3ROb2RlKEFyZ3VtZW50
TGlzdE5vZGUgKmwsIE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgCi0gICAgICA6IG5leHQobC0+bmV4
dCksIGV4cHIoZSkgeyBsLT5uZXh0ID0gdGhpczsgfQorICAgIEFyZ3VtZW50TGlzdE5vZGUoTm9k
ZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9CisgICAgQXJndW1lbnRMaXN0Tm9kZShB
cmd1bWVudExpc3ROb2RlKiBsLCBOb2RlKiBlKSBLSlNfRkFTVF9DQUxMIAorICAgICAgOiBleHBy
KGUpIHsgbC0+bmV4dCA9IHRoaXM7IH0KICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJs
ZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYp
IEtKU19GQVNUX0NBTEw7CiAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKICAgICBMaXN0IGV2YWx1YXRlTGlzdChFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFT
VF9DQUxMOwogICAgIFBhc3NSZWZQdHI8QXJndW1lbnRMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lk
IGJyZWFrQ3ljbGUoKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNz
aW9uOyB9CiAgIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFyZ3VtZW50c05vZGU7CkBAIC00
NDYsOCArNDM4LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgIGNsYXNzIEFyZ3VtZW50c05vZGUgOiBw
dWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKICAgICBBcmd1bWVudHNOb2RlKCkgS0pTX0ZBU1RfQ0FM
TCB7IH0KLSAgICBBcmd1bWVudHNOb2RlKEFyZ3VtZW50TGlzdE5vZGUgKmwpIEtKU19GQVNUX0NB
TEwKLSAgICAgIDogbGlzdChsLT5uZXh0LnJlbGVhc2UoKSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVD
eWNsZShsaXN0LmdldCgpKTsgfQorICAgIEFyZ3VtZW50c05vZGUoQXJndW1lbnRMaXN0Tm9kZSog
bCkgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiBsaXN0KGwpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIExpc3QgZXZhbHVhdGVMaXN0KEV4ZWNTdGF0ZSAq
ZXhlYykgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBsaXN0ID8gbGlzdC0+ZXZhbHVhdGVMaXN0KGV4
ZWMpIDogTGlzdCgpOyB9CkBAIC0xMjE0LDE1ICsxMjA2LDEzIEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgIGNsYXNzIFZhckRlY2xMaXN0Tm9kZSA6IHB1YmxpYyBOb2RlIHsKICAgcHVibGljOgotICAg
IC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3JhY2tlZCBpbiB0
aGUgRm9yTm9kZS9WYXJTdGF0ZW1lbnROb2RlIGN0b3IKLSAgICBWYXJEZWNsTGlzdE5vZGUoVmFy
RGVjbE5vZGUgKnYpIEtKU19GQVNUX0NBTEwgOiBuZXh0KHRoaXMpLCB2YXIodikgeyBQYXJzZXI6
Om5vdGVOb2RlQ3ljbGUodGhpcyk7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KLSAg
ICBWYXJEZWNsTGlzdE5vZGUoVmFyRGVjbExpc3ROb2RlICpsLCBWYXJEZWNsTm9kZSAqdikgS0pT
X0ZBU1RfQ0FMTAotICAgICAgOiBuZXh0KGwtPm5leHQpLCB2YXIodikgeyBsLT5uZXh0ID0gdGhp
czsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQorICAgIFZhckRlY2xMaXN0Tm9kZShW
YXJEZWNsTm9kZSogdikgS0pTX0ZBU1RfQ0FMTCA6IHZhcih2KSB7IG1fbWF5SGF2ZURlY2xhcmF0
aW9ucyA9IHRydWU7IH0KKyAgICBWYXJEZWNsTGlzdE5vZGUoVmFyRGVjbExpc3ROb2RlKiBsLCBW
YXJEZWNsTm9kZSogdikgS0pTX0ZBU1RfQ0FMTAorICAgICAgOiB2YXIodikgeyBsLT5uZXh0ID0g
dGhpczsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBv
cHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVj
U3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIFBhc3NSZWZQdHI8VmFyRGVjbExpc3RO
b2RlPiByZWxlYXNlTmV4dCgpIEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbmV4dC5yZWxlYXNlKCk7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgYnJlYWtDeWNsZSgpIEtKU19GQVNUX0NBTEw7CiAgICAgdmly
dHVhbCB2b2lkIGdldERlY2xhcmF0aW9ucyhEZWNsYXJhdGlvblN0YWNrcyYpIEtKU19GQVNUX0NB
TEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAgcHJpdmF0ZToKQEAgLTEy
MzQsNyArMTIyNCw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIFZhclN0YXRlbWVudE5v
ZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBWYXJTdGF0ZW1lbnRO
b2RlKFZhckRlY2xMaXN0Tm9kZSAqbCkgS0pTX0ZBU1RfQ0FMTCA6IG5leHQobC0+bmV4dC5yZWxl
YXNlKCkpIHsgUGFyc2VyOjpyZW1vdmVOb2RlQ3ljbGUobmV4dC5nZXQoKSk7IG1fbWF5SGF2ZURl
Y2xhcmF0aW9ucyA9IHRydWU7IH0KKyAgICBWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xMaXN0Tm9k
ZSogbCkgS0pTX0ZBU1RfQ0FMTCA6IG5leHQobCkgeyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0
cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgIHZpcnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CkBAIC0xMzExLDEwICsxMzAxLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgY2xhc3Mg
Rm9yTm9kZSA6IHB1YmxpYyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIEZvck5vZGUo
Tm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3RhdGVtZW50Tm9kZSAqcykgS0pTX0ZBU1Rf
Q0FMTCA6CisgICAgRm9yTm9kZShOb2RlKiBlMSwgTm9kZSogZTIsIE5vZGUqIGUzLCBTdGF0ZW1l
bnROb2RlKiBzKSBLSlNfRkFTVF9DQUxMIDoKICAgICAgIGV4cHIxKGUxKSwgZXhwcjIoZTIpLCBl
eHByMyhlMyksIHN0YXRlbWVudChzKSB7IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0K
LSAgICBGb3JOb2RlKFZhckRlY2xMaXN0Tm9kZSAqZTEsIE5vZGUgKmUyLCBOb2RlICplMywgU3Rh
dGVtZW50Tm9kZSAqcykgS0pTX0ZBU1RfQ0FMTCA6Ci0gICAgICBleHByMShlMS0+bmV4dC5yZWxl
YXNlKCkpLCBleHByMihlMiksIGV4cHIzKGUzKSwgc3RhdGVtZW50KHMpIHsgUGFyc2VyOjpyZW1v
dmVOb2RlQ3ljbGUoZXhwcjEuZ2V0KCkpOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25Cb2R5Tm9k
ZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7
CkBAIC0xNDI0LDE2ICsxNDEyLDE0IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIFBhcmFt
ZXRlck5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAvLyBsaXN0IHBvaW50ZXIg
aXMgdGFpbCBvZiBhIGNpcmN1bGFyIGxpc3QsIGNyYWNrZWQgaW4gdGhlIEZ1bmNEZWNsTm9kZS9G
dW5jRXhwck5vZGUgY3RvcgotICAgIFBhcmFtZXRlck5vZGUoY29uc3QgSWRlbnRpZmllciAmaSkg
S0pTX0ZBU1RfQ0FMTCA6IGlkKGkpLCBuZXh0KHRoaXMpIHsgUGFyc2VyOjpub3RlTm9kZUN5Y2xl
KHRoaXMpOyB9Ci0gICAgUGFyYW1ldGVyTm9kZShQYXJhbWV0ZXJOb2RlICpuZXh0LCBjb25zdCBJ
ZGVudGlmaWVyICZpKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGlkKGkpLCBuZXh0KG5leHQtPm5l
eHQpIHsgbmV4dC0+bmV4dCA9IHRoaXM7IH0KKyAgICBQYXJhbWV0ZXJOb2RlKGNvbnN0IElkZW50
aWZpZXImIGkpIEtKU19GQVNUX0NBTEwgOiBpZChpKSB7IH0KKyAgICBQYXJhbWV0ZXJOb2RlKFBh
cmFtZXRlck5vZGUqIGwsIGNvbnN0IElkZW50aWZpZXImIGkpIEtKU19GQVNUX0NBTEwKKyAgICAg
IDogaWQoaSkgeyBsLT5uZXh0ID0gdGhpczsgfQogICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgSWRlbnRpZmllciBpZGVudCgpIEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gaWQ7IH0KICAgICBQYXJhbWV0ZXJOb2RlICpuZXh0UGFyYW0oKSBLSlNfRkFT
VF9DQUxMIHsgcmV0dXJuIG5leHQuZ2V0KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBQYXNzUmVmUHRyPFBhcmFt
ZXRlck5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVh
c2UoKTsgfQotICAgIHZpcnR1YWwgdm9pZCBicmVha0N5Y2xlKCkgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBGdW5jRGVjbE5vZGU7CkBAIC0xNDg1LDggKzE0NzEsOCBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICBjbGFzcyBGdW5jRXhwck5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBG
dW5jRXhwck5vZGUoY29uc3QgSWRlbnRpZmllciAmaSwgRnVuY3Rpb25Cb2R5Tm9kZSAqYiwgUGFy
YW1ldGVyTm9kZSAqcCA9IDApIEtKU19GQVNUX0NBTEwgCi0gICAgICA6IGlkZW50KGkpLCBwYXJh
bShwID8gcC0+bmV4dC5yZWxlYXNlKCkgOiAwKSwgYm9keShiKSB7IGlmIChwKSB7IFBhcnNlcjo6
cmVtb3ZlTm9kZUN5Y2xlKHBhcmFtLmdldCgpKTsgfSBhZGRQYXJhbXMoKTsgfQorICAgIEZ1bmNF
eHByTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBGdW5jdGlvbkJvZHlOb2RlKiBiLCBQYXJhbWV0
ZXJOb2RlKiBwID0gMCkgS0pTX0ZBU1RfQ0FMTCAKKyAgICAgIDogaWRlbnQoaSksIHBhcmFtKHAp
LCBib2R5KGIpIHsgYWRkUGFyYW1zKCk7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUgKmV2YWx1YXRl
KEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9CkBAIC0xNTAxLDEwICsx
NDg3LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogCiAgIGNsYXNzIEZ1bmNEZWNsTm9kZSA6IHB1Ymxp
YyBTdGF0ZW1lbnROb2RlIHsKICAgcHVibGljOgotICAgIEZ1bmNEZWNsTm9kZShjb25zdCBJZGVu
dGlmaWVyICZpLCBGdW5jdGlvbkJvZHlOb2RlICpiKSBLSlNfRkFTVF9DQUxMCisgICAgRnVuY0Rl
Y2xOb2RlKGNvbnN0IElkZW50aWZpZXImIGksIEZ1bmN0aW9uQm9keU5vZGUqIGIpIEtKU19GQVNU
X0NBTEwKICAgICAgIDogaWRlbnQoaSksIGJvZHkoYikgeyBhZGRQYXJhbXMoKTsgbV9tYXlIYXZl
RGVjbGFyYXRpb25zID0gdHJ1ZTsgfQotICAgIEZ1bmNEZWNsTm9kZShjb25zdCBJZGVudGlmaWVy
ICZpLCBQYXJhbWV0ZXJOb2RlICpwLCBGdW5jdGlvbkJvZHlOb2RlICpiKSBLSlNfRkFTVF9DQUxM
Ci0gICAgICA6IGlkZW50KGkpLCBwYXJhbShwLT5uZXh0LnJlbGVhc2UoKSksIGJvZHkoYikgeyBQ
YXJzZXI6OnJlbW92ZU5vZGVDeWNsZShwYXJhbS5nZXQoKSk7IGFkZFBhcmFtcygpOyBtX21heUhh
dmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAgRnVuY0RlY2xOb2RlKGNvbnN0IElkZW50aWZp
ZXImIGksIFBhcmFtZXRlck5vZGUqIHAsIEZ1bmN0aW9uQm9keU5vZGUqIGIpIEtKU19GQVNUX0NB
TEwKKyAgICAgIDogaWRlbnQoaSksIHBhcmFtKHApLCBib2R5KGIpIHsgYWRkUGFyYW1zKCk7IG1f
bWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICB2aXJ0dWFsIENvbXBsZXRpb24gZXhl
Y3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgIHZpcnR1YWwgdm9pZCBn
ZXREZWNsYXJhdGlvbnMoRGVjbGFyYXRpb25TdGFja3MmKSBLSlNfRkFTVF9DQUxMOwpAQCAtMTUy
MCwxNSArMTUwNiwxMyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgY2xhc3MgU291cmNlRWxlbWVudHNO
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgc3RhdGljIGludCBj
b3VudDsKLSAgICAvLyBsaXN0IHBvaW50ZXIgaXMgdGFpbCBvZiBhIGNpcmN1bGFyIGxpc3QsIGNy
YWNrZWQgaW4gdGhlIEJsb2NrTm9kZSAob3Igc3ViY2xhc3MpIGN0b3IKICAgICBTb3VyY2VFbGVt
ZW50c05vZGUoU3RhdGVtZW50Tm9kZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgU291cmNlRWxlbWVu
dHNOb2RlKFNvdXJjZUVsZW1lbnRzTm9kZSAqczEsIFN0YXRlbWVudE5vZGUgKnMyKSBLSlNfRkFT
VF9DQUxMOworICAgIFNvdXJjZUVsZW1lbnRzTm9kZShTb3VyY2VFbGVtZW50c05vZGUqLCBTdGF0
ZW1lbnROb2RlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1p
emVWYXJpYWJsZUFjY2VzcyhGdW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgQ29tcGxldGlvbiBleGVjdXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAgICAgUGFzc1JlZlB0cjxTb3VyY2VFbGVtZW50c05v
ZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVhc2UoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBicmVha0N5Y2xlKCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9uU3RhY2tzJikgS0pTX0ZBU1RfQ0FM
TDsKICAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQmxvY2tOb2RlOwpAQCAtMTU0MSw3ICsx
NTI1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgIHB1YmxpYzoKICAgICAgIENhc2VDbGF1c2VOb2Rl
KE5vZGUgKmUpIEtKU19GQVNUX0NBTEwgOiBleHByKGUpIHsgbV9tYXlIYXZlRGVjbGFyYXRpb25z
ID0gdHJ1ZTsgfQogICAgICAgQ2FzZUNsYXVzZU5vZGUoTm9kZSAqZSwgU291cmNlRWxlbWVudHNO
b2RlICpzKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGV4cHIoZSksIHNvdXJjZShzLT5uZXh0LnJl
bGVhc2UoKSkgeyBQYXJzZXI6OnJlbW92ZU5vZGVDeWNsZShzb3VyY2UuZ2V0KCkpOyBtX21heUhh
dmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAgICA6IGV4cHIoZSksIHNvdXJjZShzKSB7IG1f
bWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6
ZVZhcmlhYmxlQWNjZXNzKEZ1bmN0aW9uQm9keU5vZGUqLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICBDb21wbGV0aW9uIGV2YWxTdGF0ZW1lbnRzKEV4ZWNT
dGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0xNTU1LDE3ICsxNTM5LDE1IEBAIG5hbWVzcGFjZSBL
SlMgewogICAKICAgY2xhc3MgQ2xhdXNlTGlzdE5vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1Ymxp
YzoKLSAgICAgIC8vIGxpc3QgcG9pbnRlciBpcyB0YWlsIG9mIGEgY2lyY3VsYXIgbGlzdCwgY3Jh
Y2tlZCBpbiB0aGUgQ2FzZUJsb2NrTm9kZSBjdG9yCi0gICAgICBDbGF1c2VMaXN0Tm9kZShDYXNl
Q2xhdXNlTm9kZSAqYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVzZShjKSwgbmV4dCh0aGlzKSB7IFBh
cnNlcjo6bm90ZU5vZGVDeWNsZSh0aGlzKTsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1ZTsg
fQotICAgICAgQ2xhdXNlTGlzdE5vZGUoQ2xhdXNlTGlzdE5vZGUgKm4sIENhc2VDbGF1c2VOb2Rl
ICpjKSBLSlNfRkFTVF9DQUxMCi0gICAgICA6IGNsYXVzZShjKSwgbmV4dChuLT5uZXh0KSB7IG4t
Pm5leHQgPSB0aGlzOyBtX21heUhhdmVEZWNsYXJhdGlvbnMgPSB0cnVlOyB9CisgICAgICBDbGF1
c2VMaXN0Tm9kZShDYXNlQ2xhdXNlTm9kZSogYykgS0pTX0ZBU1RfQ0FMTCA6IGNsYXVzZShjKSB7
IG1fbWF5SGF2ZURlY2xhcmF0aW9ucyA9IHRydWU7IH0KKyAgICAgIENsYXVzZUxpc3ROb2RlKENs
YXVzZUxpc3ROb2RlKiBuLCBDYXNlQ2xhdXNlTm9kZSogYykgS0pTX0ZBU1RfQ0FMTAorICAgICAg
OiBjbGF1c2UoYykgeyBuLT5uZXh0ID0gdGhpczsgbV9tYXlIYXZlRGVjbGFyYXRpb25zID0gdHJ1
ZTsgfQogICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRnVuY3Rpb25C
b2R5Tm9kZSosIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwog
ICAgICAgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAg
IENhc2VDbGF1c2VOb2RlICpnZXRDbGF1c2UoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IGNsYXVzZS5nZXQoKTsgfQogICAgICAgQ2xhdXNlTGlzdE5vZGUgKmdldE5leHQoKSBjb25zdCBL
SlNfRkFTVF9DQUxMIHsgcmV0dXJuIG5leHQuZ2V0KCk7IH0KICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwogICAgICAgUGFzc1Jl
ZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBLSlNfRkFTVF9DQUxMIHsgcmV0dXJu
IG5leHQucmVsZWFzZSgpOyB9Ci0gICAgICB2aXJ0dWFsIHZvaWQgYnJlYWtDeWNsZSgpIEtKU19G
QVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGVjbGFyYXRpb25zKERlY2xhcmF0aW9u
U3RhY2tzJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9u
OyB9CiAgIHByaXZhdGU6CkBAIC0xNTc2LDcgKzE1NTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
CiAgIGNsYXNzIENhc2VCbG9ja05vZGUgOiBwdWJsaWMgTm9kZSB7CiAgIHB1YmxpYzoKLSAgICAg
IENhc2VCbG9ja05vZGUoQ2xhdXNlTGlzdE5vZGUgKmwxLCBDYXNlQ2xhdXNlTm9kZSAqZCwgQ2xh
dXNlTGlzdE5vZGUgKmwyKSBLSlNfRkFTVF9DQUxMOworICAgICAgQ2FzZUJsb2NrTm9kZShDbGF1
c2VMaXN0Tm9kZSogbDEsIENhc2VDbGF1c2VOb2RlKiBkLCBDbGF1c2VMaXN0Tm9kZSogbDIpIEtK
U19GQVNUX0NBTEw7CiAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhG
dW5jdGlvbkJvZHlOb2RlKiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYpIEtKU19GQVNU
X0NBTEw7CiAgICAgICBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgQ29tcGxldGlvbiBldmFsQmxvY2soRXhlY1N0YXRlICpleGVjLCBKU1ZhbHVlICpp
bnB1dCkgS0pTX0ZBU1RfQ0FMTDsKQEAgLTE2MDMsNyArMTU4NSw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAKICAgY2xhc3MgUHJvZ3JhbU5vZGUgOiBwdWJsaWMgRnVuY3Rpb25Cb2R5Tm9kZSB7CiAg
IHB1YmxpYzoKLSAgICBQcm9ncmFtTm9kZShTb3VyY2VFbGVtZW50c05vZGUgKnMpIEtKU19GQVNU
X0NBTEw7CisgICAgUHJvZ3JhbU5vZGUoU291cmNlRWxlbWVudHNOb2RlKiBzKSBLSlNfRkFTVF9D
QUxMOwogICB9OwogCiB9IC8vIG5hbWVzcGFjZQo=
</data>
<flag name="review"
          id="7188"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>