<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div style="" class="markdown-here-wrapper"
      data-md-url="Thunderbird">
      <p style="margin: 1.2em 0px ! important;">Arun,</p>
      <p style="margin: 1.2em 0px ! important;">I see, I hadn’t checked
        base::subset() documentation carefully, but I see it clearly
        now:</p>
      <pre style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;font-size: 1em; line-height: 1.2em; overflow: auto;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em;display: block; padding: 0.5em; color: rgb(51, 51, 51); background: none repeat scroll 0% 0% rgb(248, 248, 255);">subset(airquality, Temp > 80, select = c(Ozone, Temp))
subset(airquality, Day == 1, select = -Temp)
subset(airquality, select = Ozone:Wind)
</code></pre>
      <p style="margin: 1.2em 0px ! important;"><code style="font-size:
          0.85em; font-family:
          Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em;
          padding: 0px 0.3em; white-space: nowrap; border: 1px solid
          rgb(234, 234, 234); background-color: rgb(248, 248, 248);
          border-radius: 3px; display: inline;">:</code> is less
        ambiguous than STATA’s <code style="font-size: 0.85em;
          font-family: Consolas,Inconsolata,Courier,monospace;margin:
          0px 0.15em; padding: 0px 0.3em; white-space: nowrap; border:
          1px solid rgb(234, 234, 234); background-color: rgb(248, 248,
          248); border-radius: 3px; display: inline;">…</code> for sure.
        Yes, would be nice to replicate in data.table.</p>
      <p style="margin: 1.2em 0px ! important;">—Mel.</p>
      <p style="margin: 1.2em 0px ! important;">On 2/10/2015 4:59 PM,
        Eduard Antonyan wrote:</p>
      <blockquote style="margin: 1.2em 0px;border-left: 4px solid
        rgb(221, 221, 221); padding: 0px 1em; color: rgb(119, 119, 119);
        quotes: none;">
        <p style="margin: 1.2em 0px ! important;">Not having to type <code
            style="font-size: 0.85em; font-family:
            Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em;
            padding: 0px 0.3em; white-space: nowrap; border: 1px solid
            rgb(234, 234, 234); background-color: rgb(248, 248, 248);
            border-radius: 3px; display: inline;">DT</code> twice would
          increase readability/reduce errors, especially that real-life
          data.tables have much longer names. There was a related FR to
          this which suggested incorporating regex and wildcard syntax -
          not sure what happened to it.<br>
          On Tue, Feb 10, 2015 at 3:45 PM, Arunkumar Srinivasan <a
            href="http://mailto:aragorn168b@gmail.com">aragorn168b@gmail.com</a>
          wrote:</p>
        <pre style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;font-size: 1em; line-height: 1.2em; overflow: auto;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em;display: block; padding: 0.5em; color: rgb(51, 51, 51); background: none repeat scroll 0% 0% rgb(248, 248, 255);">Mel,

The usage would be something like:

DT[, from:to, with=FALSE]
# or
DT[, .SD, .SDcols = from:to]

where from and to are the start and end column names. I agree there’s no real advantage in terms of typing/prone to errors.

There might be some merit in readability, as people normally remember column names and not numbers… And this allows you to refer to the names directly without having to type DT and then look up the column or use a match() to find out the column programatically or do:

DT[, .SD, .SDcols = names(DT)[some_idx]]

-- 
Arun

On 10 Feb 2015 at 22:39:14, Bacou, Melanie (<a class="moz-txt-link-abbreviated" href="mailto:mel@mbacou.com">mel@mbacou.com</a>) wrote:
</code></pre>
        <p style="margin: 1.2em 0px ! important;">></p>
        <blockquote style="margin: 1.2em 0px;border-left: 4px solid
          rgb(221, 221, 221); padding: 0px 1em; color: rgb(119, 119,
          119); quotes: none;">
          <pre style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;font-size: 1em; line-height: 1.2em; overflow: auto;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em;display: block; padding: 0.5em; color: rgb(51, 51, 51); background: none repeat scroll 0% 0% rgb(248, 248, 255);">Everyone,

The varA...varZ construct is borrowed from STATA syntax. Probably a reason why it got into subset() in the first place, though definitely not very R-like. In fact I’ve never come across this construct in R before and had no idea it was actually working either!

I’m not sure dt[, .SD, .SDcols=list(varA...varZ)] is less typing, less prone to error, or more readable than dt[, .SD, .SDcols=names(dt)[1:24] and using indices is also more flexible (what about if we want more complex sequences). I can see one use case for this syntax though if dt might change over time but variables always come in known sequences.

Not sure we should really encourage it — but agreed with Arun, if it’s in base::subset() then no reason why not.

—Mel.

On 2/10/2015 1:50 PM, Arunkumar Srinivasan wrote:

    I had the same reaction when I found out ‘subset’ already did this :-).
    I’ve the same impression that it’s a bit odd, even though some people prefer it..

    Arun

    On 10 Feb 2015 at 19:39:29, Chris Neff (<a class="moz-txt-link-abbreviated" href="mailto:caneff@gmail.com">caneff@gmail.com</a>) wrote:

        Wow, didn’t realize that worked! So there is precedent then. It just looks funny to me, but you are right it is easily avoided. I just didn’t want to see more divergence from subset and data.frame logic, but since this already works with subset that’s fine.
        On Tue Feb 10 2015 at 1:34:03 PM Arunkumar Srinivasan <a class="moz-txt-link-abbreviated" href="mailto:aragorn168b@gmail.com">aragorn168b@gmail.com</a> wrote:

        Chris,
        But what’s the problem? You can simply not use it?
        It’s not that uncommon. `base::subset()` does this.
        --  
        Arun

        On 10 Feb 2015 at 19:31:43, Chris Neff (<a class="moz-txt-link-abbreviated" href="mailto:caneff@gmail.com">caneff@gmail.com</a>) wrote:

            I don't like this idea. It adds extra that it doesn't need to.  Doing it with column numbers is more straightforward, and if all you have is names you can get numbers by doing match() or whatever and then getting the sequence with seq(). Having a sequence of column names is odd.
            On Tue Feb 10 2015 at 1:28:25 PM Arunkumar Srinivasan <a class="moz-txt-link-rfc2396E" href="mailto:aragorn168b@gmail.com"><aragorn168b@gmail.com></a> wrote:

                Farrel,
                It could be useful. Please file an issue on the github project page. Thanks.
                --  
                Arun

                On 10 Feb 2015 at 01:08:46, Farrel Buchinsky (<a class="moz-txt-link-abbreviated" href="mailto:fjbuch@gmail.com">fjbuch@gmail.com</a>) wrote:

                    So lets say one has a data.table with the following columns
                    first.name, last.name, height, weight, shoe.size, eye.color, hair.length, appendage.size, ear.length
                    If one wanted to just include weight through hair.length one would have to go something such as this
                    dt[,list(weight, shoe.size, eye.color, hair.length)]
                    Is there a way to do something along the lines of
                    dt[,list(weight...hair.length)]
                    If so, can you direct me to the documentation? If not can you build it? Is it difficult? Some data.tables have many columns.
                    Thanking you in anticipation.
                    Farrel
                    _______________________________________________
                    datatable-help mailing list
                    <a class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
                    <a class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>
                    _______________________________________________
                    datatable-help mailing list
                    <a class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
                    <a class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>

            datatable-help mailing list
            <a class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
            <a class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>


--
Melanie BACOU
International Food Policy Research Institute
Snr. Program Manager, HarvestChoice
Work +1(202)862-5699
E-mail <a class="moz-txt-link-abbreviated" href="mailto:m.bacou@cgiar.org">m.bacou@cgiar.org</a>
Visit <a class="moz-txt-link-abbreviated" href="http://www.harvestchoice.org">www.harvestchoice.org</a> 
</code></pre>
        </blockquote>
        <pre style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;font-size: 1em; line-height: 1.2em; overflow: auto;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas,Inconsolata,Courier,monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: nowrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em;display: block; padding: 0.5em; color: rgb(51, 51, 51); background: none repeat scroll 0% 0% rgb(248, 248, 255);">_______________________________________________
datatable-help mailing list
<a class="moz-txt-link-abbreviated" href="mailto:datatable-help@lists.r-forge.r-project.org">datatable-help@lists.r-forge.r-project.org</a>
<a class="moz-txt-link-freetext" href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help</a>
</code></pre>
        <p style="margin: 1.2em 0px ! important;">​</p>
      </blockquote>
      <div
title="MDH:QXJ1biw8YnI+PGJyPkkgc2VlLCBJIGhhZG7igJl0IGNoZWNrZWQgYmFzZTo6c3Vic2V0KCkgZG9jdW1lbnRhdGlvbiBjYXJlZnVsbHksIGJ1dCBJIHNlZSBpdCBjbGVhcmx5IG5vdzo8YnI+PGJyPmBg
YDxicj5zdWJzZXQoYWlycXVhbGl0eSwgVGVtcCAmZ3Q7IDgwLCBzZWxlY3QgPSBjKE96b25lLCBU
ZW1wKSk8YnI+c3Vic2V0KGFpcnF1YWxpdHksIERheSA9PSAxLCBzZWxlY3QgPSAtVGVtcCk8YnI+
c3Vic2V0KGFpcnF1YWxpdHksIHNlbGVjdCA9IE96b25lOldpbmQpPGJyPmBgYDxicj48YnI+YDpg
IGlzIGxlc3MgYW1iaWd1b3VzIHRoYW4gU1RBVEEncyBg4oCmYCBmb3Igc3VyZS4gWWVzLCB3b3Vs
ZCBiZSBuaWNlIHRvIHJlcGxpY2F0ZSBpbiBkYXRhLnRhYmxlLjxicj48YnI+LS1NZWwuPGJyPjxi
cj48YnI+T24gMi8xMC8yMDE1IDQ6NTkgUE0sIEVkdWFyZCBBbnRvbnlhbiB3cm90ZTo8YnI+PGJy
PiZndDsgTm90IGhhdmluZyB0byB0eXBlIGBEVGAgdHdpY2Ugd291bGQgaW5jcmVhc2UgcmVhZGFi
aWxpdHkvcmVkdWNlIGVycm9ycywgZXNwZWNpYWxseSB0aGF0IHJlYWwtbGlmZSBkYXRhLnRhYmxl
cyBoYXZlIG11Y2ggbG9uZ2VyIG5hbWVzLiBUaGVyZSB3YXMgYSByZWxhdGVkIEZSIHRvIHRoaXMg
d2hpY2ggc3VnZ2VzdGVkIGluY29ycG9yYXRpbmcgcmVnZXggYW5kIHdpbGRjYXJkIHN5bnRheCAt
IG5vdCBzdXJlIHdoYXQgaGFwcGVuZWQgdG8gaXQuPGJyPiZndDsgT24gVHVlLCBGZWIgMTAsIDIw
MTUgYXQgMzo0NSBQTSwgQXJ1bmt1bWFyIFNyaW5pdmFzYW4gJmx0O2FyYWdvcm4xNjhiQGdtYWls
LmNvbSZndDsgd3JvdGU6PGJyPiZndDs8YnI+Jmd0O8KgwqDCoMKgIE1lbCw8YnI+Jmd0Ozxicj4m
Z3Q7wqDCoMKgwqAgVGhlIHVzYWdlIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlOjxicj4mZ3Q7PGJy
PiZndDvCoMKgwqDCoCBEVFssIGZyb206dG8sIHdpdGg9RkFMU0VdPGJyPiZndDvCoMKgwqDCoCAj
IG9yPGJyPiZndDvCoMKgwqDCoCBEVFssIC5TRCwgLlNEY29scyA9IGZyb206dG9dPGJyPiZndDs8
YnI+Jmd0O8KgwqDCoMKgIHdoZXJlIGZyb20gYW5kIHRvIGFyZSB0aGUgc3RhcnQgYW5kIGVuZCBj
b2x1bW4gbmFtZXMuIEkgYWdyZWUgdGhlcmXigJlzIG5vIHJlYWwgYWR2YW50YWdlIGluIHRlcm1z
IG9mIHR5cGluZy9wcm9uZSB0byBlcnJvcnMuPGJyPiZndDs8YnI+Jmd0O8KgwqDCoMKgIFRoZXJl
IG1pZ2h0IGJlIHNvbWUgbWVyaXQgaW4gcmVhZGFiaWxpdHksIGFzIHBlb3BsZSBub3JtYWxseSBy
ZW1lbWJlciBjb2x1bW4gbmFtZXMgYW5kIG5vdCBudW1iZXJz4oCmIEFuZCB0aGlzIGFsbG93cyB5
b3UgdG8gcmVmZXIgdG8gdGhlIG5hbWVzIGRpcmVjdGx5IHdpdGhvdXQgaGF2aW5nIHRvIHR5cGUg
RFQgYW5kIHRoZW4gbG9vayB1cCB0aGUgY29sdW1uIG9yIHVzZSBhIG1hdGNoKCkgdG8gZmluZCBv
dXQgdGhlIGNvbHVtbiBwcm9ncmFtYXRpY2FsbHkgb3IgZG86PGJyPiZndDs8YnI+Jmd0O8KgwqDC
oMKgIERUWywgLlNELCAuU0Rjb2xzID0gbmFtZXMoRFQpW3NvbWVfaWR4XV08YnI+Jmd0Ozxicj4m
Z3Q7wqDCoMKgwqAgLS0gPGJyPiZndDvCoMKgwqDCoCBBcnVuPGJyPiZndDs8YnI+Jmd0O8KgwqDC
oMKgIE9uIDEwIEZlYiAyMDE1IGF0IDIyOjM5OjE0LCBCYWNvdSwgTWVsYW5pZSAobWVsQG1iYWNv
dS5jb20pIHdyb3RlOjxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgIEV2ZXJ5b25lLDxi
cj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgIFRoZSB2YXJBLi4udmFyWiBjb25zdHJ1Y3Qg
aXMgYm9ycm93ZWQgZnJvbSBTVEFUQSBzeW50YXguIFByb2JhYmx5IGEgcmVhc29uIHdoeSBpdCBn
b3QgaW50byBzdWJzZXQoKSBpbiB0aGUgZmlyc3QgcGxhY2UsIHRob3VnaCBkZWZpbml0ZWx5IG5v
dCB2ZXJ5IFItbGlrZS4gSW4gZmFjdCBJ4oCZdmUgbmV2ZXIgY29tZSBhY3Jvc3MgdGhpcyBjb25z
dHJ1Y3QgaW4gUiBiZWZvcmUgYW5kIGhhZCBubyBpZGVhIGl0IHdhcyBhY3R1YWxseSB3b3JraW5n
IGVpdGhlciE8YnI+Jmd0OyZndDs8YnI+Jmd0OyZndDvCoMKgwqDCoCBJ4oCZbSBub3Qgc3VyZSBk
dFssIC5TRCwgLlNEY29scz1saXN0KHZhckEuLi52YXJaKV0gaXMgbGVzcyB0eXBpbmcsIGxlc3Mg
cHJvbmUgdG8gZXJyb3IsIG9yIG1vcmUgcmVhZGFibGUgdGhhbiBkdFssIC5TRCwgLlNEY29scz1u
YW1lcyhkdClbMToyNF0gYW5kIHVzaW5nIGluZGljZXMgaXMgYWxzbyBtb3JlIGZsZXhpYmxlICh3
aGF0IGFib3V0IGlmIHdlIHdhbnQgbW9yZSBjb21wbGV4IHNlcXVlbmNlcykuIEkgY2FuIHNlZSBv
bmUgdXNlIGNhc2UgZm9yIHRoaXMgc3ludGF4IHRob3VnaCBpZiBkdCBtaWdodCBjaGFuZ2Ugb3Zl
ciB0aW1lIGJ1dCB2YXJpYWJsZXMgYWx3YXlzIGNvbWUgaW4ga25vd24gc2VxdWVuY2VzLjxicj4m
Z3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgIE5vdCBzdXJlIHdlIHNob3VsZCByZWFsbHkgZW5j
b3VyYWdlIGl0IOKAlCBidXQgYWdyZWVkIHdpdGggQXJ1biwgaWYgaXTigJlzIGluIGJhc2U6OnN1
YnNldCgpIHRoZW4gbm8gcmVhc29uIHdoeSBub3QuPGJyPiZndDsmZ3Q7PGJyPiZndDsmZ3Q7wqDC
oMKgwqAg4oCUTWVsLjxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgIE9uIDIvMTAvMjAx
NSAxOjUwIFBNLCBBcnVua3VtYXIgU3Jpbml2YXNhbiB3cm90ZTo8YnI+Jmd0OyZndDs8YnI+Jmd0
OyZndDvCoMKgwqDCoMKgwqDCoMKgIEkgaGFkIHRoZSBzYW1lIHJlYWN0aW9uIHdoZW4gSSBmb3Vu
ZCBvdXQg4oCYc3Vic2V04oCZIGFscmVhZHkgZGlkIHRoaXMgOi0pLjxicj4mZ3Q7Jmd0O8KgwqDC
oMKgwqDCoMKgwqAgSeKAmXZlIHRoZSBzYW1lIGltcHJlc3Npb24gdGhhdCBpdOKAmXMgYSBiaXQg
b2RkLCBldmVuIHRob3VnaCBzb21lIHBlb3BsZSBwcmVmZXIgaXQuLjxicj4mZ3Q7Jmd0Ozxicj4m
Z3Q7Jmd0O8KgwqDCoMKgwqDCoMKgwqAgQXJ1bjxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDC
oMKgwqDCoMKgwqAgT24gMTAgRmViIDIwMTUgYXQgMTk6Mzk6MjksIENocmlzIE5lZmYgKGNhbmVm
ZkBnbWFpbC5jb20pIHdyb3RlOjxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCBXb3csIGRpZG7igJl0IHJlYWxpemUgdGhhdCB3b3JrZWQhIFNvIHRoZXJlIGlz
IHByZWNlZGVudCB0aGVuLiBJdCBqdXN0IGxvb2tzIGZ1bm55IHRvIG1lLCBidXQgeW91IGFyZSBy
aWdodCBpdCBpcyBlYXNpbHkgYXZvaWRlZC4gSSBqdXN0IGRpZG7igJl0IHdhbnQgdG8gc2VlIG1v
cmUgZGl2ZXJnZW5jZSBmcm9tIHN1YnNldCBhbmQgZGF0YS5mcmFtZSBsb2dpYywgYnV0IHNpbmNl
IHRoaXMgYWxyZWFkeSB3b3JrcyB3aXRoIHN1YnNldCB0aGF04oCZcyBmaW5lLjxicj4mZ3Q7Jmd0
O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPbiBUdWUgRmViIDEwIDIwMTUgYXQgMTozNDowMyBQ
TSBBcnVua3VtYXIgU3Jpbml2YXNhbiBhcmFnb3JuMTY4YkBnbWFpbC5jb20gd3JvdGU6PGJyPiZn
dDsmZ3Q7PGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENocmlzLDxicj4mZ3Q7
Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCdXQgd2hhdOKAmXMgdGhlIHByb2JsZW0/IFlv
dSBjYW4gc2ltcGx5IG5vdCB1c2UgaXQ/PGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgIEl04oCZcyBub3QgdGhhdCB1bmNvbW1vbi4gYGJhc2U6OnN1YnNldCgpYCBkb2VzIHRoaXMu
PGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC0twqAgPGJyPiZndDsmZ3Q7wqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFydW48YnI+Jmd0OyZndDs8YnI+Jmd0OyZndDvCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgT24gMTAgRmViIDIwMTUgYXQgMTk6MzE6NDMsIENocmlzIE5lZmYg
KGNhbmVmZkBnbWFpbC5jb20pIHdyb3RlOjxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEkgZG9uJ3QgbGlrZSB0aGlzIGlkZWEuIEl0IGFkZHMg
ZXh0cmEgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8uwqAgRG9pbmcgaXQgd2l0aCBjb2x1bW4gbnVt
YmVycyBpcyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZCwgYW5kIGlmIGFsbCB5b3UgaGF2ZSBpcyBuYW1l
cyB5b3UgY2FuIGdldCBudW1iZXJzIGJ5IGRvaW5nIG1hdGNoKCkgb3Igd2hhdGV2ZXIgYW5kIHRo
ZW4gZ2V0dGluZyB0aGUgc2VxdWVuY2Ugd2l0aCBzZXEoKS4gSGF2aW5nIGEgc2VxdWVuY2Ugb2Yg
Y29sdW1uIG5hbWVzIGlzIG9kZC48YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoCBPbiBUdWUgRmViIDEwIDIwMTUgYXQgMToyODoyNSBQTSBBcnVua3VtYXIgU3Jpbml2
YXNhbiAmbHQ7YXJhZ29ybjE2OGJAZ21haWwuY29tJmd0OyB3cm90ZTo8YnI+Jmd0OyZndDs8YnI+
Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZhcnJlbCw8
YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEl0IGNv
dWxkIGJlIHVzZWZ1bC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgb24gdGhlIGdpdGh1YiBwcm9qZWN0
IHBhZ2UuIFRoYW5rcy48YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIC0twqAgPGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCBBcnVuPGJyPiZndDsmZ3Q7PGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBPbiAxMCBGZWIgMjAxNSBhdCAwMTowODo0NiwgRmFycmVs
IEJ1Y2hpbnNreSAoZmpidWNoQGdtYWlsLmNvbSkgd3JvdGU6PGJyPiZndDsmZ3Q7PGJyPiZndDsm
Z3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNvIGxl
dHMgc2F5IG9uZSBoYXMgYSBkYXRhLnRhYmxlIHdpdGggdGhlIGZvbGxvd2luZyBjb2x1bW5zPGJy
PiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IGZpcnN0Lm5hbWUsIGxhc3QubmFtZSwgaGVpZ2h0LCB3ZWlnaHQsIHNob2Uuc2l6ZSwgZXllLmNv
bG9yLCBoYWlyLmxlbmd0aCwgYXBwZW5kYWdlLnNpemUsIGVhci5sZW5ndGg8YnI+Jmd0OyZndDvC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSWYgb25lIHdh
bnRlZCB0byBqdXN0IGluY2x1ZGUgd2VpZ2h0IHRocm91Z2ggaGFpci5sZW5ndGggb25lIHdvdWxk
IGhhdmUgdG8gZ28gc29tZXRoaW5nIHN1Y2ggYXMgdGhpczxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkdFssbGlzdCh3ZWlnaHQsIHNo
b2Uuc2l6ZSwgZXllLmNvbG9yLCBoYWlyLmxlbmd0aCldPGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIElzIHRoZXJlIGEgd2F5IHRvIGRv
IHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2Y8YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHRbLGxpc3Qod2VpZ2h0Li4uaGFpci5s
ZW5ndGgpXTxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCBJZiBzbywgY2FuIHlvdSBkaXJlY3QgbWUgdG8gdGhlIGRvY3VtZW50YXRpb24/
IElmIG5vdCBjYW4geW91IGJ1aWxkIGl0PyBJcyBpdCBkaWZmaWN1bHQ/IFNvbWUgZGF0YS50YWJs
ZXMgaGF2ZSBtYW55IGNvbHVtbnMuPGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFRoYW5raW5nIHlvdSBpbiBhbnRpY2lwYXRpb24uPGJy
PiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
IEZhcnJlbDxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoCBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xzxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoCBkYXRhdGFibGUtaGVscCBtYWlsaW5nIGxpc3Q8YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YXRhYmxlLWhlbHBAbGlzdHMu
ci1mb3JnZS5yLXByb2plY3Qub3JnPGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh0dHBzOi8vbGlzdHMuci1mb3JnZS5yLXByb2plY3Qu
b3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9kYXRhdGFibGUtaGVscDxicj4mZ3Q7Jmd0O8Kg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzxicj4mZ3Q7Jmd0O8KgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhdGFibGUtaGVscCBt
YWlsaW5nIGxpc3Q8YnI+Jmd0OyZndDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgZGF0YXRhYmxlLWhlbHBAbGlzdHMuci1mb3JnZS5yLXByb2plY3Qub3Jn
PGJyPiZndDsmZ3Q7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgIGh0dHBzOi8vbGlzdHMuci1mb3JnZS5yLXByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9s
aXN0aW5mby9kYXRhdGFibGUtaGVscDxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGF0YWJsZS1oZWxwIG1haWxpbmcgbGlzdDxicj4mZ3Q7
Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGF0YWJsZS1oZWxwQGxpc3Rz
LnItZm9yZ2Uuci1wcm9qZWN0Lm9yZzxicj4mZ3Q7Jmd0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgIGh0dHBzOi8vbGlzdHMuci1mb3JnZS5yLXByb2plY3Qub3JnL2NnaS1iaW4vbWFp
bG1hbi9saXN0aW5mby9kYXRhdGFibGUtaGVscDxicj4mZ3Q7Jmd0Ozxicj4mZ3Q7Jmd0O8KgwqDC
oMKgIOKAizxicj4mZ3Q7Jmd0O8KgwqDCoMKgIC0tPGJyPiZndDsmZ3Q7wqDCoMKgwqAgTWVsYW5p
ZSBCQUNPVTxicj4mZ3Q7Jmd0O8KgwqDCoMKgIEludGVybmF0aW9uYWwgRm9vZCBQb2xpY3kgUmVz
ZWFyY2ggSW5zdGl0dXRlPGJyPiZndDsmZ3Q7wqDCoMKgwqAgU25yLiBQcm9ncmFtIE1hbmFnZXIs
IEhhcnZlc3RDaG9pY2U8YnI+Jmd0OyZndDvCoMKgwqDCoCBXb3JrICsxKDIwMik4NjItNTY5OTxi
cj4mZ3Q7Jmd0O8KgwqDCoMKgIEUtbWFpbCBtLmJhY291QGNnaWFyLm9yZzxicj4mZ3Q7Jmd0O8Kg
wqDCoMKgIFZpc2l0IHd3dy5oYXJ2ZXN0Y2hvaWNlLm9yZyA8YnI+Jmd0Ozxicj4mZ3Q7wqDCoMKg
wqAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188YnI+Jmd0
O8KgwqDCoMKgIGRhdGF0YWJsZS1oZWxwIG1haWxpbmcgbGlzdDxicj4mZ3Q7wqDCoMKgwqAgZGF0
YXRhYmxlLWhlbHBAbGlzdHMuci1mb3JnZS5yLXByb2plY3Qub3JnPGJyPiZndDvCoMKgwqDCoCBo
dHRwczovL2xpc3RzLnItZm9yZ2Uuci1wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGlu
        Zm8vZGF0YXRhYmxlLWhlbHA8YnI+Jmd0Ozxicj7igIs8YnI+PGJyPg=="
style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>