<?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>31695</bug_id>
          
          <creation_ts>2009-11-19 16:36:15 -0800</creation_ts>
          <short_desc>Move MultiCommandTool and Command into a separate file and add some basic unit tests</short_desc>
          <delta_ts>2009-11-19 16:55:35 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165144</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-19 16:36:15 -0800</bug_when>
    <thetext>Move MultiCommandTool and Command into a separate file and add some basic unit tests

The unit tests I&apos;ve written are trivial, but at least they&apos;re better than nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165145</commentid>
    <comment_count>1</comment_count>
      <attachid>43532</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-19 16:37:00 -0800</bug_when>
    <thetext>Created attachment 43532
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165147</commentid>
    <comment_count>2</comment_count>
      <attachid>43532</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-19 16:40:14 -0800</bug_when>
    <thetext>Comment on attachment 43532
Patch

progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165152</commentid>
    <comment_count>3</comment_count>
      <attachid>43532</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 16:55:29 -0800</bug_when>
    <thetext>Comment on attachment 43532
Patch

Clearing flags on attachment: 43532

Committed r51223: &lt;http://trac.webkit.org/changeset/51223&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165153</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-19 16:55:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43532</attachid>
            <date>2009-11-19 16:37:00 -0800</date>
            <delta_ts>2009-11-19 16:55:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31695-20091119163659.patch</filename>
            <type>text/plain</type>
            <size>20311</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3N2ViM2MxLi5hYTA4MTIwIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTcgQEAKIDIwMDktMTEt
MTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTXVsdGlDb21tYW5kVG9vbCBhbmQgQ29t
bWFuZCBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgYWRkIHNvbWUgYmFzaWMgdW5pdCB0ZXN0cwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE2OTUKKwor
ICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDoKKyAgICAgICAgKiBTY3JpcHRzL21vZHVs
ZXMvbXVsdGljb21tYW5kdG9vbC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVz
L211bHRpY29tbWFuZHRvb2xfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMv
cnVuLXdlYmtpdC11bml0dGVzdHM6CisKKzIwMDktMTEtMTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgorCiAgICAgICAgIE5vIHJldmlldywganVzdCBhZGRpbmcgYSBGSVhNRS4KIAog
ICAgICAgICBTcGxpdCBvdXQgY29tbWFuZCBwYXJzaW5nIGFuZCBoZWxwIHByaW50aW5nIGZyb20g
QnVnemlsbGFUb29sCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRv
b2wgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggM2JiYmM5NS4uY2Uy
YTc4ZCAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtMzgsMTkgKzM4LDIxIEBAIGlt
cG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lLCB0
aW1lZGVsdGEKLWZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlciwgSW5kZW50ZWRIZWxw
Rm9ybWF0dGVyLCBTVVBQUkVTU19VU0FHRSwgbWFrZV9vcHRpb24KK2Zyb20gb3B0cGFyc2UgaW1w
b3J0IG1ha2Vfb3B0aW9uCiAKICMgSW1wb3J0IFdlYktpdC1zcGVjaWZpYyBtb2R1bGVzLgogZnJv
bSBtb2R1bGVzLmJ1Z3ppbGxhIGltcG9ydCBCdWd6aWxsYSwgcGFyc2VfYnVnX2lkCitmcm9tIG1v
ZHVsZXMuYnVpbGRib3QgaW1wb3J0IEJ1aWxkQm90CiBmcm9tIG1vZHVsZXMuY2hhbmdlbG9ncyBp
bXBvcnQgQ2hhbmdlTG9nCiBmcm9tIG1vZHVsZXMuY29tbWVudHMgaW1wb3J0IGJ1Z19jb21tZW50
X2Zyb21fY29tbWl0X3RleHQKIGZyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9n
LCB0ZWUKK2Zyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1hbmRU
b29sLCBDb21tYW5kCiBmcm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uIGltcG9ydCBQYXRjaENv
bGxlY3Rpb24KIGZyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVjdF9z
Y21fc3lzdGVtLCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQotZnJvbSBtb2R1bGVz
LmJ1aWxkYm90IGltcG9ydCBCdWlsZEJvdAogZnJvbSBtb2R1bGVzLnN0YXR1c2JvdCBpbXBvcnQg
U3RhdHVzQm90CiBmcm9tIG1vZHVsZXMud29ya3F1ZXVlIGltcG9ydCBXb3JrUXVldWUsIFdvcmtR
dWV1ZURlbGVnYXRlCiAKKwogZGVmIHBsdXJhbChub3VuKToKICAgICAjIFRoaXMgaXMgYSBkdW1i
IHBsdXJhbCgpIGltcGxlbWVudGF0aW9uIHdoaWNoIHdhcyBqdXN0IGVub3VnaCBmb3Igb3VyIHVz
ZXMuCiAgICAgaWYgcmUuc2VhcmNoKCJoJCIsIG5vdW4pOgpAQCAtODIsMjkgKzg0LDYgQEAgZGVm
IGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdChzY20pOgogICAgIHJldHVybiBDb21taXRN
ZXNzYWdlKCIiLmpvaW4oY2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxpdGxpbmVzKCkpCiAKIAotY2xh
c3MgQ29tbWFuZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaGVscF90ZXh0LCBhcmd1bWVudF9u
YW1lcz0iIiwgb3B0aW9ucz1bXSwgcmVxdWlyZXNfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0gICAg
ICAgIHNlbGYuaGVscF90ZXh0ID0gaGVscF90ZXh0Ci0gICAgICAgIHNlbGYuYXJndW1lbnRfbmFt
ZXMgPSBhcmd1bWVudF9uYW1lcwotICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zCi0gICAg
ICAgIHNlbGYub3B0aW9uX3BhcnNlciA9IEhlbHBQcmludGluZ09wdGlvblBhcnNlcih1c2FnZT1T
VVBQUkVTU19VU0FHRSwgYWRkX2hlbHBfb3B0aW9uPUZhbHNlLCBvcHRpb25fbGlzdD1zZWxmLm9w
dGlvbnMpCi0gICAgICAgIHNlbGYucmVxdWlyZXNfbG9jYWxfY29tbWl0cyA9IHJlcXVpcmVzX2xv
Y2FsX2NvbW1pdHMKLQotICAgIGRlZiBuYW1lX3dpdGhfYXJndW1lbnRzKHNlbGYsIGNvbW1hbmRf
bmFtZSk6Ci0gICAgICAgIHVzYWdlX3N0cmluZyA9IGNvbW1hbmRfbmFtZQotICAgICAgICBpZiBs
ZW4oc2VsZi5vcHRpb25zKSA+IDA6Ci0gICAgICAgICAgICB1c2FnZV9zdHJpbmcgKz0gIiBbb3B0
aW9uc10iCi0gICAgICAgIGlmIHNlbGYuYXJndW1lbnRfbmFtZXM6Ci0gICAgICAgICAgICB1c2Fn
ZV9zdHJpbmcgKz0gIiAiICsgc2VsZi5hcmd1bWVudF9uYW1lcwotICAgICAgICByZXR1cm4gdXNh
Z2Vfc3RyaW5nCi0KLSAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmdzKToKLSAgICAgICAgcmV0
dXJuIHNlbGYub3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCi0KLSAgICBkZWYgZXhlY3V0
ZShzZWxmLCBvcHRpb25zLCBhcmdzLCB0b29sKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCi0KLQogY2xhc3MgQnVnc1RvQ29t
bWl0KENvbW1hbmQpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgQ29tbWFuZC5f
X2luaXRfXyhzZWxmLCAiQnVncyBpbiB0aGUgY29tbWl0IHF1ZXVlIikKQEAgLTgzNCwxMTkgKzgx
Myw2IEBAIGNsYXNzIFN0eWxlUXVldWUoQWJzdHJhY3RRdWV1ZSk6CiAgICAgICAgIGxvZyhtZXNz
YWdlKQogCiAKLWNsYXNzIE5vbldyYXBwaW5nRXBpbG9nSW5kZW50ZWRIZWxwRm9ybWF0dGVyKElu
ZGVudGVkSGVscEZvcm1hdHRlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBJ
bmRlbnRlZEhlbHBGb3JtYXR0ZXIuX19pbml0X18oc2VsZikKLQotICAgICMgVGhlIHN0YW5kYXJk
IEluZGVudGVkSGVscEZvcm1hdHRlciBwYXJhZ3JhcGgtd3JhcHMgdGhlIGVwaWxvZywga2lsbGlu
ZyBvdXIgY3VzdG9tIGZvcm1hdHRpbmcuCi0gICAgZGVmIGZvcm1hdF9lcGlsb2coc2VsZiwgZXBp
bG9nKToKLSAgICAgICAgaWYgZXBpbG9nOgotICAgICAgICAgICAgcmV0dXJuICJcbiIgKyBlcGls
b2cgKyAiXG4iCi0gICAgICAgIHJldHVybiAiIgotCi0KLWNsYXNzIEhlbHBQcmludGluZ09wdGlv
blBhcnNlcihPcHRpb25QYXJzZXIpOgotICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgotICAgICAg
ICBzZWxmLnByaW50X3VzYWdlKHN5cy5zdGRlcnIpCi0gICAgICAgIGVycm9yX21lc3NhZ2UgPSAi
JXM6IGVycm9yOiAlc1xuIiAlIChzZWxmLmdldF9wcm9nX25hbWUoKSwgbXNnKQotICAgICAgICBl
cnJvcl9tZXNzYWdlICs9ICJcblR5cGUgXCIiICsgc2VsZi5nZXRfcHJvZ19uYW1lKCkgKyAiIC0t
aGVscFwiIHRvIHNlZSB1c2FnZS5cbiIKLSAgICAgICAgc2VsZi5leGl0KDIsIGVycm9yX21lc3Nh
Z2UpCi0KLQotY2xhc3MgTXVsdGlDb21tYW5kVG9vbDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
Y29tbWFuZHMpOgotICAgICAgICBzZWxmLmNvbW1hbmRzID0gY29tbWFuZHMKLSAgICAgICAgIyBG
SVhNRTogQ2FsbGluZyBzZWxmLl9jb21tYW5kc191c2FnZSgpIGluIHRoZSBjb25zdHJ1Y3RvciBp
cyBiYWQgYmVjYXVzZQotICAgICAgICAjIGl0IGNhbGxzIHNlbGYuc2hvdWxkX3Nob3dfY29tbWFu
ZF9oZWxwIHdoaWNoIGlzIHN1YmNsYXNzLWRlZmluZWQuCi0gICAgICAgICMgVGhlIHN1YmNsYXNz
IHdpbGwgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuCi0gICAgICAgIHNl
bGYuZ2xvYmFsX29wdGlvbl9wYXJzZXIgPSBIZWxwUHJpbnRpbmdPcHRpb25QYXJzZXIodXNhZ2U9
c2VsZi5fdXNhZ2VfbGluZSgpLCBmb3JtYXR0ZXI9Tm9uV3JhcHBpbmdFcGlsb2dJbmRlbnRlZEhl
bHBGb3JtYXR0ZXIoKSwgZXBpbG9nPXNlbGYuX2NvbW1hbmRzX3VzYWdlKCkpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIF91c2FnZV9saW5lKCk6Ci0gICAgICAgIHJldHVybiAiVXNhZ2U6
ICVwcm9nIFtvcHRpb25zXSBjb21tYW5kIFtjb21tYW5kLW9wdGlvbnNdIFtjb21tYW5kLWFyZ3Vt
ZW50c10iCi0KLSAgICAjIEZJWE1FOiBUaGlzIGNhbiBhbGwgYmUgc2ltcGxpZmllZCBvbmNlIENv
bW1hbmQgb2JqZWN0cyBrbm93IHRoZWlyIG93biBuYW1lcy4KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIF9uYW1lX2FuZF9hcmd1bWVudHMoY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiBjb21t
YW5kWydvYmplY3QnXS5uYW1lX3dpdGhfYXJndW1lbnRzKGNvbW1hbmRbIm5hbWUiXSkKLQotICAg
IGRlZiBfY29tbWFuZF9oZWxwX2Zvcm1hdHRlcihzZWxmKToKLSAgICAgICAgIyBVc2Ugb3VyIG93
biBoZWxwIGZvcm1hdHRlciBzbyBhcyB0byBpbmRlbnQgZW5vdWdoLgotICAgICAgICBmb3JtYXR0
ZXIgPSBJbmRlbnRlZEhlbHBGb3JtYXR0ZXIoKQotICAgICAgICBmb3JtYXR0ZXIuaW5kZW50KCkK
LSAgICAgICAgZm9ybWF0dGVyLmluZGVudCgpCi0gICAgICAgIHJldHVybiBmb3JtYXR0ZXIKLQot
ICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfaGVscF9mb3JfY29tbWFuZChjbHMsIGNvbW1hbmQs
IGZvcm1hdHRlciwgbG9uZ2VzdF9uYW1lX2xlbmd0aCk6Ci0gICAgICAgIGhlbHBfdGV4dCA9ICIg
ICIgKyBjbHMuX25hbWVfYW5kX2FyZ3VtZW50cyhjb21tYW5kKS5sanVzdChsb25nZXN0X25hbWVf
bGVuZ3RoICsgMykgKyBjb21tYW5kWydvYmplY3QnXS5oZWxwX3RleHQgKyAiXG4iCi0gICAgICAg
IGhlbHBfdGV4dCArPSBjb21tYW5kWydvYmplY3QnXS5vcHRpb25fcGFyc2VyLmZvcm1hdF9vcHRp
b25faGVscChmb3JtYXR0ZXIpCi0gICAgICAgIHJldHVybiBoZWxwX3RleHQKLQotICAgIGRlZiBf
Y29tbWFuZHNfdXNhZ2Uoc2VsZik6Ci0gICAgICAgICMgT25seSBzaG93IGNvbW1hbmRzIHdoaWNo
IGFyZSByZWxldmFudCB0byB0aGlzIGNoZWNrb3V0LiAgVGhpcyBtaWdodCBiZSBjb25mdXNpbmcg
dG8gc29tZSB1c2Vycz8KLSAgICAgICAgcmVsZXZhbnRfY29tbWFuZHMgPSBmaWx0ZXIoc2VsZi5z
aG91bGRfc2hvd19jb21tYW5kX2hlbHAsIHNlbGYuY29tbWFuZHMpCi0gICAgICAgIGxvbmdlc3Rf
bmFtZV9sZW5ndGggPSBtYXgobWFwKGxhbWJkYSBjb21tYW5kOiBsZW4oc2VsZi5fbmFtZV9hbmRf
YXJndW1lbnRzKGNvbW1hbmQpKSwgcmVsZXZhbnRfY29tbWFuZHMpKQotICAgICAgICBjb21tYW5k
X2hlbHBfdGV4dHMgPSBtYXAobGFtYmRhIGNvbW1hbmQ6IHNlbGYuX2hlbHBfZm9yX2NvbW1hbmQo
Y29tbWFuZCwgc2VsZi5fY29tbWFuZF9oZWxwX2Zvcm1hdHRlcigpLCBsb25nZXN0X25hbWVfbGVu
Z3RoKSwgcmVsZXZhbnRfY29tbWFuZHMpCi0gICAgICAgIHJldHVybiAiQ29tbWFuZHM6XG4iICsg
IiIuam9pbihjb21tYW5kX2hlbHBfdGV4dHMpCi0KLSAgICBkZWYgaGFuZGxlX2dsb2JhbF9hcmdz
KHNlbGYsIGFyZ3MpOgotICAgICAgICAob3B0aW9ucywgYXJncykgPSBzZWxmLmdsb2JhbF9vcHRp
b25fcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKLSAgICAgICAgaWYgbGVuKGFyZ3MpOgotICAgICAg
ICAgICAgIyBXZSdsbCBuZXZlciBoaXQgdGhpcyBiZWNhdXNlIF9zcGxpdF9hcmdzIHNwbGl0cyBh
dCB0aGUgZmlyc3QgYXJnIHdpdGhvdXQgYSBsZWFkaW5nICItIgotICAgICAgICAgICAgc2VsZi5n
bG9iYWxfb3B0aW9uX3BhcnNlci5lcnJvcigiRXh0cmEgYXJndW1lbnRzIGJlZm9yZSBjb21tYW5k
OiAiICsgYXJncykKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX3NwbGl0X2FyZ3MoYXJn
cyk6Ci0gICAgICAgICMgQXNzdW1lIHRoZSBmaXJzdCBhcmd1bWVudCB3aGljaCBkb2Vzbid0IHN0
YXJ0IHdpdGggIi0iIGlzIHRoZSBjb21tYW5kIG5hbWUuCi0gICAgICAgIGNvbW1hbmRfaW5kZXgg
PSAwCi0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIGFyZ1swXSAhPSAi
LSI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGNvbW1hbmRfaW5kZXggKz0g
MQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIChhcmdzWzpdLCBOb25lLCBbXSkK
LQotICAgICAgICBnbG9iYWxfYXJncyA9IGFyZ3NbOmNvbW1hbmRfaW5kZXhdCi0gICAgICAgIGNv
bW1hbmQgPSBhcmdzW2NvbW1hbmRfaW5kZXhdCi0gICAgICAgIGNvbW1hbmRfYXJncyA9IGFyZ3Nb
Y29tbWFuZF9pbmRleCArIDE6XQotICAgICAgICByZXR1cm4gKGdsb2JhbF9hcmdzLCBjb21tYW5k
LCBjb21tYW5kX2FyZ3MpCi0KLSAgICBkZWYgY29tbWFuZF9ieV9uYW1lKHNlbGYsIGNvbW1hbmRf
bmFtZSk6Ci0gICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFuZHM6Ci0gICAgICAgICAg
ICBpZiBjb21tYW5kX25hbWUgPT0gY29tbWFuZFsibmFtZSJdOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjb21tYW5kCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgc2hvdWxkX3Nob3df
Y29tbWFuZF9oZWxwKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBzaG91bGRfZXhl
Y3V0ZV9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRl
ZEVycm9yLCAic3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCIKLQotICAgIGRlZiBtYWluKHNlbGYp
OgotICAgICAgICAoZ2xvYmFsX2FyZ3MsIGNvbW1hbmRfbmFtZSwgYXJnc19hZnRlcl9jb21tYW5k
X25hbWUpID0gc2VsZi5fc3BsaXRfYXJncyhzeXMuYXJndlsxOl0pCi0KLSAgICAgICAgIyBIYW5k
bGUgLS1oZWxwLCBldGM6Ci0gICAgICAgIHNlbGYuaGFuZGxlX2dsb2JhbF9hcmdzKGdsb2JhbF9h
cmdzKQotCi0gICAgICAgIGlmIG5vdCBjb21tYW5kX25hbWU6Ci0gICAgICAgICAgICBzZWxmLmds
b2JhbF9vcHRpb25fcGFyc2VyLmVycm9yKCJObyBjb21tYW5kIHNwZWNpZmllZCIpCi0KLSAgICAg
ICAgY29tbWFuZCA9IHNlbGYuY29tbWFuZF9ieV9uYW1lKGNvbW1hbmRfbmFtZSkKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQ6Ci0gICAgICAgICAgICBzZWxmLmdsb2JhbF9vcHRpb25fcGFyc2VyLmVy
cm9yKGNvbW1hbmRfbmFtZSArICIgaXMgbm90IGEgcmVjb2duaXplZCBjb21tYW5kIikKLQotICAg
ICAgICBjb21tYW5kX29iamVjdCA9IGNvbW1hbmRbIm9iamVjdCJdCi0KLSAgICAgICAgKHNob3Vs
ZF9leGVjdXRlLCBmYWlsdXJlX3JlYXNvbikgPSBzZWxmLnNob3VsZF9leGVjdXRlX2NvbW1hbmQo
Y29tbWFuZCkKLSAgICAgICAgaWYgbm90IHNob3VsZF9leGVjdXRlOgotICAgICAgICAgICAgZXJy
b3IoZmFpbHVyZV9yZWFzb24pCi0KLSAgICAgICAgKGNvbW1hbmRfb3B0aW9ucywgY29tbWFuZF9h
cmdzKSA9IGNvbW1hbmRfb2JqZWN0LnBhcnNlX2FyZ3MoYXJnc19hZnRlcl9jb21tYW5kX25hbWUp
Ci0gICAgICAgIHJldHVybiBjb21tYW5kX29iamVjdC5leGVjdXRlKGNvbW1hbmRfb3B0aW9ucywg
Y29tbWFuZF9hcmdzLCBzZWxmKQotCi0KIGNsYXNzIEJ1Z3ppbGxhVG9vbChNdWx0aUNvbW1hbmRU
b29sKToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICMgSEFDSzogU2V0IHNlbGYu
Y2FjaGVkX3NjbSBiZWZvcmUgY2FsbGluZyBNdWx0aUNvbW1hbmRUb29sLl9faW5pdF9fIGJlY2F1
c2UKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9tdWx0aWNvbW1hbmR0
b29sLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL211bHRpY29tbWFuZHRvb2wucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxZDY2MQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9tdWx0aWNvbW1hbmR0b29sLnB5CkBA
IC0wLDAgKzEsMTY3IEBACisjIENvcHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAK
KyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMgTXVsdGlDb21tYW5kVG9vbCBw
cm92aWRlcyBhIGZyYW1ld29yayBmb3Igd3JpdGluZyBzdm4tbGlrZS9naXQtbGlrZSB0b29scwor
IyB3aGljaCBhcmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjIHRvb2wtbmFt
ZSBbZ2xvYmFsIG9wdGlvbnNdIGNvbW1hbmQtbmFtZSBbY29tbWFuZCBvcHRpb25zXQorCitpbXBv
cnQgc3lzCisKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlciwgSW5kZW50ZWRIZWxw
Rm9ybWF0dGVyLCBTVVBQUkVTU19VU0FHRSwgbWFrZV9vcHRpb24KKworY2xhc3MgQ29tbWFuZDoK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgaGVscF90ZXh0LCBhcmd1bWVudF9uYW1lcz1Ob25lLCBv
cHRpb25zPU5vbmUsIHJlcXVpcmVzX2xvY2FsX2NvbW1pdHM9RmFsc2UpOgorICAgICAgICBzZWxm
LmhlbHBfdGV4dCA9IGhlbHBfdGV4dAorICAgICAgICBzZWxmLmFyZ3VtZW50X25hbWVzID0gYXJn
dW1lbnRfbmFtZXMKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxm
Lm9wdGlvbl9wYXJzZXIgPSBIZWxwUHJpbnRpbmdPcHRpb25QYXJzZXIodXNhZ2U9U1VQUFJFU1Nf
VVNBR0UsIGFkZF9oZWxwX29wdGlvbj1GYWxzZSwgb3B0aW9uX2xpc3Q9c2VsZi5vcHRpb25zKQor
ICAgICAgICBzZWxmLnJlcXVpcmVzX2xvY2FsX2NvbW1pdHMgPSByZXF1aXJlc19sb2NhbF9jb21t
aXRzCisKKyAgICBkZWYgbmFtZV93aXRoX2FyZ3VtZW50cyhzZWxmLCBjb21tYW5kX25hbWUpOgor
ICAgICAgICB1c2FnZV9zdHJpbmcgPSBjb21tYW5kX25hbWUKKyAgICAgICAgaWYgc2VsZi5vcHRp
b25zOgorICAgICAgICAgICAgdXNhZ2Vfc3RyaW5nICs9ICIgW29wdGlvbnNdIgorICAgICAgICBp
ZiBzZWxmLmFyZ3VtZW50X25hbWVzOgorICAgICAgICAgICAgdXNhZ2Vfc3RyaW5nICs9ICIgIiAr
IHNlbGYuYXJndW1lbnRfbmFtZXMKKyAgICAgICAgcmV0dXJuIHVzYWdlX3N0cmluZworCisgICAg
ZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLm9wdGlvbl9w
YXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgZGVmIGV4ZWN1dGUoc2VsZiwgb3B0aW9ucywg
YXJncywgdG9vbCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IsICJzdWJjbGFz
c2VzIG11c3QgaW1wbGVtZW50IgorCisKK2NsYXNzIE5vbldyYXBwaW5nRXBpbG9nSW5kZW50ZWRI
ZWxwRm9ybWF0dGVyKEluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgIyBUaGUgc3RhbmRhcmQg
SW5kZW50ZWRIZWxwRm9ybWF0dGVyIHBhcmFncmFwaC13cmFwcyB0aGUgZXBpbG9nLCBraWxsaW5n
IG91ciBjdXN0b20gZm9ybWF0dGluZy4KKyAgICBkZWYgZm9ybWF0X2VwaWxvZyhzZWxmLCBlcGls
b2cpOgorICAgICAgICBpZiBlcGlsb2c6CisgICAgICAgICAgICByZXR1cm4gIlxuIiArIGVwaWxv
ZyArICJcbiIKKyAgICAgICAgcmV0dXJuICIiCisKKworY2xhc3MgSGVscFByaW50aW5nT3B0aW9u
UGFyc2VyKE9wdGlvblBhcnNlcik6CisgICAgZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAg
IHNlbGYucHJpbnRfdXNhZ2Uoc3lzLnN0ZGVycikKKyAgICAgICAgZXJyb3JfbWVzc2FnZSA9ICIl
czogZXJyb3I6ICVzXG4iICUgKHNlbGYuZ2V0X3Byb2dfbmFtZSgpLCBtc2cpCisgICAgICAgIGVy
cm9yX21lc3NhZ2UgKz0gIlxuVHlwZSBcIiIgKyBzZWxmLmdldF9wcm9nX25hbWUoKSArICIgLS1o
ZWxwXCIgdG8gc2VlIHVzYWdlLlxuIgorICAgICAgICBzZWxmLmV4aXQoMSwgZXJyb3JfbWVzc2Fn
ZSkKKworCitjbGFzcyBNdWx0aUNvbW1hbmRUb29sOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBj
b21tYW5kcyk6CisgICAgICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5kcworICAgICAgICAjIEZJ
WE1FOiBDYWxsaW5nIHNlbGYuX2NvbW1hbmRzX3VzYWdlKCkgaW4gdGhlIGNvbnN0cnVjdG9yIGlz
IGJhZCBiZWNhdXNlCisgICAgICAgICMgaXQgY2FsbHMgc2VsZi5zaG91bGRfc2hvd19jb21tYW5k
X2hlbHAgd2hpY2ggaXMgc3ViY2xhc3MtZGVmaW5lZC4KKyAgICAgICAgIyBUaGUgc3ViY2xhc3Mg
d2lsbCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgc2Vs
Zi5nbG9iYWxfb3B0aW9uX3BhcnNlciA9IEhlbHBQcmludGluZ09wdGlvblBhcnNlcih1c2FnZT1z
ZWxmLl91c2FnZV9saW5lKCksIGZvcm1hdHRlcj1Ob25XcmFwcGluZ0VwaWxvZ0luZGVudGVkSGVs
cEZvcm1hdHRlcigpLCBlcGlsb2c9c2VsZi5fY29tbWFuZHNfdXNhZ2UoKSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgX3VzYWdlX2xpbmUoKToKKyAgICAgICAgcmV0dXJuICJVc2FnZTog
JXByb2cgW29wdGlvbnNdIGNvbW1hbmQgW2NvbW1hbmQtb3B0aW9uc10gW2NvbW1hbmQtYXJndW1l
bnRzXSIKKworICAgICMgRklYTUU6IFRoaXMgY2FuIGFsbCBiZSBzaW1wbGlmaWVkIG9uY2UgQ29t
bWFuZCBvYmplY3RzIGtub3cgdGhlaXIgb3duIG5hbWVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgX25hbWVfYW5kX2FyZ3VtZW50cyhjb21tYW5kKToKKyAgICAgICAgcmV0dXJuIGNvbW1h
bmRbJ29iamVjdCddLm5hbWVfd2l0aF9hcmd1bWVudHMoY29tbWFuZFsibmFtZSJdKQorCisgICAg
ZGVmIF9jb21tYW5kX2hlbHBfZm9ybWF0dGVyKHNlbGYpOgorICAgICAgICAjIFVzZSBvdXIgb3du
IGhlbHAgZm9ybWF0dGVyIHNvIGFzIHRvIGluZGVudCBlbm91Z2guCisgICAgICAgIGZvcm1hdHRl
ciA9IEluZGVudGVkSGVscEZvcm1hdHRlcigpCisgICAgICAgIGZvcm1hdHRlci5pbmRlbnQoKQor
ICAgICAgICBmb3JtYXR0ZXIuaW5kZW50KCkKKyAgICAgICAgcmV0dXJuIGZvcm1hdHRlcgorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9oZWxwX2Zvcl9jb21tYW5kKGNscywgY29tbWFuZCwg
Zm9ybWF0dGVyLCBsb25nZXN0X25hbWVfbGVuZ3RoKToKKyAgICAgICAgaGVscF90ZXh0ID0gIiAg
IiArIGNscy5fbmFtZV9hbmRfYXJndW1lbnRzKGNvbW1hbmQpLmxqdXN0KGxvbmdlc3RfbmFtZV9s
ZW5ndGggKyAzKSArIGNvbW1hbmRbJ29iamVjdCddLmhlbHBfdGV4dCArICJcbiIKKyAgICAgICAg
aGVscF90ZXh0ICs9IGNvbW1hbmRbJ29iamVjdCddLm9wdGlvbl9wYXJzZXIuZm9ybWF0X29wdGlv
bl9oZWxwKGZvcm1hdHRlcikKKyAgICAgICAgcmV0dXJuIGhlbHBfdGV4dAorCisgICAgZGVmIF9j
b21tYW5kc191c2FnZShzZWxmKToKKyAgICAgICAgIyBPbmx5IHNob3cgY29tbWFuZHMgd2hpY2gg
YXJlIHJlbGV2YW50IHRvIHRoaXMgY2hlY2tvdXQuICBUaGlzIG1pZ2h0IGJlIGNvbmZ1c2luZyB0
byBzb21lIHVzZXJzPworICAgICAgICByZWxldmFudF9jb21tYW5kcyA9IGZpbHRlcihzZWxmLnNo
b3VsZF9zaG93X2NvbW1hbmRfaGVscCwgc2VsZi5jb21tYW5kcykKKyAgICAgICAgbG9uZ2VzdF9u
YW1lX2xlbmd0aCA9IG1heChtYXAobGFtYmRhIGNvbW1hbmQ6IGxlbihzZWxmLl9uYW1lX2FuZF9h
cmd1bWVudHMoY29tbWFuZCkpLCByZWxldmFudF9jb21tYW5kcykpCisgICAgICAgIGNvbW1hbmRf
aGVscF90ZXh0cyA9IG1hcChsYW1iZGEgY29tbWFuZDogc2VsZi5faGVscF9mb3JfY29tbWFuZChj
b21tYW5kLCBzZWxmLl9jb21tYW5kX2hlbHBfZm9ybWF0dGVyKCksIGxvbmdlc3RfbmFtZV9sZW5n
dGgpLCByZWxldmFudF9jb21tYW5kcykKKyAgICAgICAgcmV0dXJuICJDb21tYW5kczpcbiIgKyAi
Ii5qb2luKGNvbW1hbmRfaGVscF90ZXh0cykKKworICAgIGRlZiBoYW5kbGVfZ2xvYmFsX2FyZ3Mo
c2VsZiwgYXJncyk6CisgICAgICAgIChvcHRpb25zLCBhcmdzKSA9IHNlbGYuZ2xvYmFsX29wdGlv
bl9wYXJzZXIucGFyc2VfYXJncyhhcmdzKQorICAgICAgICAjIFdlIHNob3VsZCBuZXZlciBoaXQg
dGhpcyBiZWNhdXNlIF9zcGxpdF9hcmdzIHNwbGl0cyBhdCB0aGUgZmlyc3QgYXJnIHdpdGhvdXQg
YSBsZWFkaW5nICItIi4KKyAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgIHNlbGYuZ2xvYmFs
X29wdGlvbl9wYXJzZXIuZXJyb3IoIkV4dHJhIGFyZ3VtZW50cyBiZWZvcmUgY29tbWFuZDogIiAr
IGFyZ3MpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9zcGxpdF9hcmdzKGFyZ3MpOgor
ICAgICAgICAjIEFzc3VtZSB0aGUgZmlyc3QgYXJndW1lbnQgd2hpY2ggZG9lc24ndCBzdGFydCB3
aXRoICItIiBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgICAgICBjb21tYW5kX2luZGV4ID0gMAor
ICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBhcmdbMF0gIT0gIi0iOgor
ICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBjb21tYW5kX2luZGV4ICs9IDEKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoYXJnc1s6XSwgTm9uZSwgW10pCisKKyAg
ICAgICAgZ2xvYmFsX2FyZ3MgPSBhcmdzWzpjb21tYW5kX2luZGV4XQorICAgICAgICBjb21tYW5k
ID0gYXJnc1tjb21tYW5kX2luZGV4XQorICAgICAgICBjb21tYW5kX2FyZ3MgPSBhcmdzW2NvbW1h
bmRfaW5kZXggKyAxOl0KKyAgICAgICAgcmV0dXJuIChnbG9iYWxfYXJncywgY29tbWFuZCwgY29t
bWFuZF9hcmdzKQorCisgICAgZGVmIGNvbW1hbmRfYnlfbmFtZShzZWxmLCBjb21tYW5kX25hbWUp
OgorICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzOgorICAgICAgICAgICAgaWYg
Y29tbWFuZF9uYW1lID09IGNvbW1hbmRbIm5hbWUiXToKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y29tbWFuZAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNob3VsZF9zaG93X2NvbW1h
bmRfaGVscChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
ciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCisKKyAgICBkZWYgc2hvdWxkX2V4ZWN1dGVf
Y29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJv
ciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQiCisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAg
ICAgICAgKGdsb2JhbF9hcmdzLCBjb21tYW5kX25hbWUsIGFyZ3NfYWZ0ZXJfY29tbWFuZF9uYW1l
KSA9IHNlbGYuX3NwbGl0X2FyZ3Moc3lzLmFyZ3ZbMTpdKQorCisgICAgICAgICMgSGFuZGxlIC0t
aGVscCwgZXRjOgorICAgICAgICBzZWxmLmhhbmRsZV9nbG9iYWxfYXJncyhnbG9iYWxfYXJncykK
KworICAgICAgICBpZiBub3QgY29tbWFuZF9uYW1lOgorICAgICAgICAgICAgc2VsZi5nbG9iYWxf
b3B0aW9uX3BhcnNlci5lcnJvcigiTm8gY29tbWFuZCBzcGVjaWZpZWQiKQorCisgICAgICAgIGNv
bW1hbmQgPSBzZWxmLmNvbW1hbmRfYnlfbmFtZShjb21tYW5kX25hbWUpCisgICAgICAgIGlmIG5v
dCBjb21tYW5kOgorICAgICAgICAgICAgc2VsZi5nbG9iYWxfb3B0aW9uX3BhcnNlci5lcnJvcihj
b21tYW5kX25hbWUgKyAiIGlzIG5vdCBhIHJlY29nbml6ZWQgY29tbWFuZCIpCisKKyAgICAgICAg
KHNob3VsZF9leGVjdXRlLCBmYWlsdXJlX3JlYXNvbikgPSBzZWxmLnNob3VsZF9leGVjdXRlX2Nv
bW1hbmQoY29tbWFuZCkKKyAgICAgICAgaWYgbm90IHNob3VsZF9leGVjdXRlOgorICAgICAgICAg
ICAgZXJyb3IoZmFpbHVyZV9yZWFzb24pCisKKyAgICAgICAgY29tbWFuZF9vYmplY3QgPSBjb21t
YW5kWyJvYmplY3QiXQorICAgICAgICAoY29tbWFuZF9vcHRpb25zLCBjb21tYW5kX2FyZ3MpID0g
Y29tbWFuZF9vYmplY3QucGFyc2VfYXJncyhhcmdzX2FmdGVyX2NvbW1hbmRfbmFtZSkKKyAgICAg
ICAgcmV0dXJuIGNvbW1hbmRfb2JqZWN0LmV4ZWN1dGUoY29tbWFuZF9vcHRpb25zLCBjb21tYW5k
X2FyZ3MsIHNlbGYpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvbXVs
dGljb21tYW5kdG9vbF91bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9t
dWx0aWNvbW1hbmR0b29sX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk5N2UxMWEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21v
ZHVsZXMvbXVsdGljb21tYW5kdG9vbF91bml0dGVzdC5weQpAQCAtMCwwICsxLDg5IEBACisjIENv
cHlyaWdodCAoYykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG11bHRpY29tbWFuZHRvb2wg
aW1wb3J0IE11bHRpQ29tbWFuZFRvb2wsIENvbW1hbmQKKworZnJvbSBvcHRwYXJzZSBpbXBvcnQg
bWFrZV9vcHRpb24KKworY2xhc3MgVHJpdmlhbENvbW1hbmQoQ29tbWFuZCk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmLCAi
aGVscCB0ZXh0IiwgKiprd2FyZ3MpCisKKyAgICBkZWYgZXhlY3V0ZShzZWxmLCBvcHRpb25zLCBh
cmdzLCB0b29sKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIENvbW1hbmRUZXN0KHVuaXR0ZXN0
LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9uYW1lX3dpdGhfYXJndW1lbnRzKHNlbGYpOgorICAg
ICAgICBjb21tYW5kX3dpdGhfYXJncyA9IFRyaXZpYWxDb21tYW5kKGFyZ3VtZW50X25hbWVzPSJB
UkcxIEFSRzIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1hbmRfd2l0aF9hcmdzLm5h
bWVfd2l0aF9hcmd1bWVudHMoInNpbXBsZSIpLCAic2ltcGxlIEFSRzEgQVJHMiIpCisKKyAgICAg
ICAgY29tbWFuZF93aXRoX2FyZ3MgPSBUcml2aWFsQ29tbWFuZChvcHRpb25zPVttYWtlX29wdGlv
bigiLS1teV9vcHRpb24iKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWFuZF93aXRo
X2FyZ3MubmFtZV93aXRoX2FyZ3VtZW50cygic2ltcGxlIiksICJzaW1wbGUgW29wdGlvbnNdIikK
KworCitjbGFzcyBUcml2aWFsVG9vbChNdWx0aUNvbW1hbmRUb29sKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgY29tbWFuZHMpOgorICAgICAgICBNdWx0aUNvbW1hbmRUb29sLl9faW5pdF9fKHNl
bGYsIGNvbW1hbmRzKQorCisgICAgZGVmIHNob3VsZF9zaG93X2NvbW1hbmRfaGVscChzZWxmLCBj
b21tYW5kKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzaG91bGRfZXhlY3V0ZV9j
b21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIE11
bHRpQ29tbWFuZFRvb2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX2Fzc2VydF9z
cGxpdChzZWxmLCBhcmdzLCBleHBlY3RlZF9zcGxpdCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTXVsdGlDb21tYW5kVG9vbC5fc3BsaXRfYXJncyhhcmdzKSwgZXhwZWN0ZWRfc3BsaXQpCisK
KyAgICBkZWYgdGVzdF9zcGxpdF9hcmdzKHNlbGYpOgorICAgICAgICAjIE11bHRpQ29tbWFuZFRv
b2xUZXN0Ll9zcGxpdF9hcmdzIHJldHVybnM6IChnbG9iYWxfYXJncywgY29tbWFuZCwgY29tbWFu
ZF9hcmdzKQorICAgICAgICBmdWxsX2FyZ3MgPSBbIi0tZ2xvYmFsLW9wdGlvbiIsICJjb21tYW5k
IiwgIi0tb3B0aW9uIiwgImFyZyJdCisgICAgICAgIGZ1bGxfYXJnc19leHBlY3RlZCA9IChbIi0t
Z2xvYmFsLW9wdGlvbiJdLCAiY29tbWFuZCIsIFsiLS1vcHRpb24iLCAiYXJnIl0pCisgICAgICAg
IHNlbGYuX2Fzc2VydF9zcGxpdChmdWxsX2FyZ3MsIGZ1bGxfYXJnc19leHBlY3RlZCkKKworICAg
ICAgICBmdWxsX2FyZ3MgPSBbXQorICAgICAgICBmdWxsX2FyZ3NfZXhwZWN0ZWQgPSAoW10sIE5v
bmUsIFtdKQorICAgICAgICBzZWxmLl9hc3NlcnRfc3BsaXQoZnVsbF9hcmdzLCBmdWxsX2FyZ3Nf
ZXhwZWN0ZWQpCisKKyAgICAgICAgZnVsbF9hcmdzID0gWyJjb21tYW5kIiwgImFyZyJdCisgICAg
ICAgIGZ1bGxfYXJnc19leHBlY3RlZCA9IChbXSwgImNvbW1hbmQiLCBbImFyZyJdKQorICAgICAg
ICBzZWxmLl9hc3NlcnRfc3BsaXQoZnVsbF9hcmdzLCBmdWxsX2FyZ3NfZXhwZWN0ZWQpCisKKyAg
ICBkZWYgdGVzdF9jb21tYW5kX2J5X25hbWUoc2VsZik6CisgICAgICAgIGZvb19jb21tYW5kID0g
eyAibmFtZSIgOiAiZm9vX2NvbW1hbmQiLCAib2JqZWN0IiA6ICBUcml2aWFsQ29tbWFuZCgpIH0K
KyAgICAgICAgdG9vbCA9IFRyaXZpYWxUb29sKFtmb29fY29tbWFuZF0pCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCh0b29sLmNvbW1hbmRfYnlfbmFtZSgiZm9vX2NvbW1hbmQiKSwgZm9vX2Nv
bW1hbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9vbC5jb21tYW5kX2J5X25hbWUoImJh
ciIpLCBOb25lKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3Qu
bWFpbigpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdW5pdHRl
c3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9ydW4td2Via2l0LXVuaXR0ZXN0cwppbmRleCA4ZTUx
OGUyLi45OWUyZDA4IDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQt
dW5pdHRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC11bml0dGVzdHMK
QEAgLTM2LDYgKzM2LDcgQEAgZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnNfdW5pdHRlc3QgaW1wb3J0
ICoKIGZyb20gbW9kdWxlcy5jcHBfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKIGZyb20gbW9kdWxl
cy5kaWZmX3BhcnNlcl91bml0dGVzdCBpbXBvcnQgKgogZnJvbSBtb2R1bGVzLmxvZ2dpbmdfdW5p
dHRlc3QgaW1wb3J0ICoKK2Zyb20gbW9kdWxlcy5tdWx0aWNvbW1hbmR0b29sX3VuaXR0ZXN0IGlt
cG9ydCAqCiBmcm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uX3VuaXR0ZXN0IGltcG9ydCAqCiBm
cm9tIG1vZHVsZXMuc2NtX3VuaXR0ZXN0IGltcG9ydCAqCiBmcm9tIG1vZHVsZXMud29ya3F1ZXVl
X3VuaXR0ZXN0IGltcG9ydCAqCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>