From dev-return-17236-archive-asf-public=cust-asf.ponee.io@beam.apache.org Mon Jun 3 17:21:33 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id DF1E918062F for ; Mon, 3 Jun 2019 19:21:32 +0200 (CEST) Received: (qmail 85226 invoked by uid 500); 3 Jun 2019 17:21:31 -0000 Mailing-List: contact dev-help@beam.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@beam.apache.org Delivered-To: mailing list dev@beam.apache.org Received: (qmail 85201 invoked by uid 99); 3 Jun 2019 17:21:28 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Jun 2019 17:21:28 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id DAB06180C67 for ; Mon, 3 Jun 2019 17:21:27 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -13.71 X-Spam-Level: X-Spam-Status: No, score=-13.71 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, ENV_AND_HDR_SPF_MATCH=-0.5, HTML_MESSAGE=2, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_DKIMWL_WL_MED=-0.01, USER_IN_DEF_DKIM_WL=-7.5, USER_IN_DEF_SPF_WL=-7.5] autolearn=disabled Authentication-Results: spamd3-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=google.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id zPiGHEwYpG3T for ; Mon, 3 Jun 2019 17:21:25 +0000 (UTC) Received: from mail-oi1-f172.google.com (mail-oi1-f172.google.com [209.85.167.172]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id D319A5F470 for ; Mon, 3 Jun 2019 17:21:24 +0000 (UTC) Received: by mail-oi1-f172.google.com with SMTP id m202so2296912oig.6 for ; Mon, 03 Jun 2019 10:21:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=E+qsfzO6r0br28L+KqNvYsf2jb13GDp9SLJVzaQpaAM=; b=WH5GObz3Kn5V7rUVr7KheQD2Dpys9X888FCLPUZDzAJnQU/zqEthUvOxF1gSt2g8M1 ouMBRTizjS0oMsk1sLH/GiGVqi4PJd9rYy6g3r80iVMKymctVx45exx7QuylxeREDT72 tAXoxXWaSNT986Ukwu6lLF1Z3WByVdiRBqVZfUUAC/6TIEF4CfUbE6bkN+gthQ8qTnnp 22qtLPVyLC6jHHhRHEhhZjdfn8wZM8/iD2Uk/eJgVTiUQmDfc7Tr4T+mz9Y0VWwu7GCb o3tXgfEipJfwuPE8/MrW/ln8sr4pwjjogc1F++Gwzjfwm8+6K5vYstOCMrN5jgH4EQPP Jvwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=E+qsfzO6r0br28L+KqNvYsf2jb13GDp9SLJVzaQpaAM=; b=DPD/KOC3A7GKMCICxhEjIlTCUdqEYrEQehvSE/SKms/Q8iQsQRTWDVM/zA8r+xGZJw tMoJmzr5Ne7hnJR9cG1U86khC0a150S/g102wEYbFY+DUR4fL7xd/fi+MqUNSpTrlk3d h4KU1YrgElmktAX/LDizGEJqmfSpwsXvGNXL0Jh9uFZ+9OmJ3Jiw8hXe8V5HfoMu03EB KDR92mOUhC2IKqZSkwFNKf6jjayCEjYhwS2fcyg6oJkf9EnxMblJ+RmarVFT8QWhfnSZ 5T79kV3l8npKE1E9g/1h0pk80+TGR+t6lvoSjJ9GAsM5d4zL2qST8HnFMhv1CgoIGa6+ vzxg== X-Gm-Message-State: APjAAAXd87qdhvoptkszCBrfc1oGniuyqrefRWuzrl9kRFIN5P9IMcPa GIX5o6aIKyBMMWE3H0v5knNySJvSH8a1IkbVNvGHTfO5rW4= X-Google-Smtp-Source: APXvYqwrXQoc1L7eOLMbr1tuqYhVtL+uPQfTcdSaoCxJT6S6xr5wTp5CSSd761YLyWBjKPSd5FOmccpAXvCgfZlj9hA= X-Received: by 2002:aca:b2d6:: with SMTP id b205mr1714252oif.159.1559582477540; Mon, 03 Jun 2019 10:21:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Kyle Weaver Date: Mon, 3 Jun 2019 10:21:06 -0700 Message-ID: Subject: Re: 1 Million Lines of Code (1 MLOC) To: dev@beam.apache.org Content-Type: multipart/alternative; boundary="000000000000929fa0058a6e97e3" --000000000000929fa0058a6e97e3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable > time to delete the entire project and start over again Agreed, but this time using Rust. (Just think of all the good press we'll get on Hacker News! ) @ruoyun looks like the c++ is a basic `echo` program for an example pipeline? https://github.com/apache/beam/tree/master/examples/java/src/main/java/org/= apache/beam/examples/subprocess Kyle Weaver | Software Engineer | github.com/ibzib | kcweaver@google.com | +16502035555 On Mon, Jun 3, 2019 at 10:11 AM Ruoyun Huang wrote: > interesting stats. > > I am very curious in what we can benefit from merely *32* lines of c++ > code in a MLOC repository. > > On Mon, Jun 3, 2019 at 2:10 AM Maximilian Michels wrote: > >> Interesting stats :) This metric does not take into a account Beam's >> dependencies, e.g. libraries and execution backends. That would increase >> the LOCs to millions. >> >> On 01.06.19 01:46, Alex Amato wrote: >> > Interesting, so if we play with https://github.com/cgag/loc we could >> > break it down further? I.e. test files vs code files? Which folders, >> > etc. That could be interesting as well. >> > >> > On Fri, May 31, 2019 at 4:20 PM Brian Hulette > > > wrote: >> > >> > Dennis Nedry needed 2 million lines of code to control Jurassic >> > Park, and he only had to manage eight computers! I think we may >> > actually need to pick up the pace. >> > >> > On Fri, May 31, 2019 at 4:11 PM Anton Kedin > > > wrote: >> > >> > And to reduce the effort of future rewrites we should start >> > doing it on a schedule. I propose we start over once a week :) >> > >> > On Fri, May 31, 2019 at 4:02 PM Lukasz Cwik > > > wrote: >> > >> > 1 million lines is too much, time to delete the entire >> > project and start over again, :-) >> > >> > On Fri, May 31, 2019 at 3:12 PM Ankur Goenka >> > > wrote: >> > >> > Thanks for sharing. >> > This is really interesting metrics. >> > One use I can see is to track LOC vs Comments to make >> > sure that we keep up with the practice of writing >> > maintainable code. >> > >> > On Fri, May 31, 2019 at 3:04 PM Isma=C3=ABl Mej=C3=ADa >> > > wrote: >> > >> > I was checking some metrics in our codebase and >> > found by chance that >> > we have passed the 1 million lines of code (MLOC). >> > Of course lines of >> > code may not matter much but anyway it is >> > interesting to see the size >> > of our project at this moment. >> > >> > This is the detailed information returned by loc >> [1]: >> > >> > >> -----------------------------------------------------------------------= --------- >> > Language Files Lines >> > Blank Comment Code >> > >> -----------------------------------------------------------------------= --------- >> > Java 3681 673007 >> > 78265 140753 453989 >> > Python 497 131082 >> > 22560 13378 95144 >> > Go 333 105775 >> > 13681 11073 81021 >> > Markdown 205 31989 >> > 6526 0 25463 >> > Plain Text 11 21979 >> > 6359 0 15620 >> > Sass 92 9867 >> > 1434 1900 6533 >> > JavaScript 19 5157 >> > 1197 467 3493 >> > YAML 14 4601 >> > 454 1104 3043 >> > Bourne Shell 30 3874 >> > 470 1028 2376 >> > Protobuf 17 4258 >> > 677 1373 2208 >> > XML 17 2789 >> > 296 559 1934 >> > Kotlin 19 3501 >> > 347 1370 1784 >> > HTML 60 2447 >> > 148 914 1385 >> > Batch 3 249 >> > 57 0 192 >> > INI 1 206 >> > 21 16 169 >> > C++ 2 72 >> > 4 36 32 >> > Autoconf 1 21 >> > 1 16 4 >> > >> -----------------------------------------------------------------------= --------- >> > Total 5002 1000874 >> > 132497 173987 694390 >> > >> -----------------------------------------------------------------------= --------- >> > >> > [1] https://github.com/cgag/loc >> > >> > > > -- > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Ruoyun Huang > > --000000000000929fa0058a6e97e3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj4mZ3Q7IHRpbWUgdG8gZGVsZXRlIHRoZSBlbnRpcmUgcHJvamVj dCBhbmQgc3RhcnQgb3ZlciBhZ2Fpbjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkFncmVl ZCwgYnV0IHRoaXMgdGltZSB1c2luZyBSdXN0LiAoSnVzdCB0aGluayBvZiBhbGwgdGhlIGdvb2Qg cHJlc3Mgd2UmIzM5O2xsIGdldCBvbiBIYWNrZXIgTmV3cyEgJmx0Oy9zJmd0Oyk8L2Rpdj48ZGl2 Pjxicj48L2Rpdj5AcnVveXVuIGxvb2tzIGxpa2UgdGhlIGMrKyBpcyBhIGJhc2ljIGBlY2hvYCBw cm9ncmFtIGZvciBhbiBleGFtcGxlIHBpcGVsaW5lP8KgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIu Y29tL2FwYWNoZS9iZWFtL3RyZWUvbWFzdGVyL2V4YW1wbGVzL2phdmEvc3JjL21haW4vamF2YS9v cmcvYXBhY2hlL2JlYW0vZXhhbXBsZXMvc3VicHJvY2VzcyI+aHR0cHM6Ly9naXRodWIuY29tL2Fw YWNoZS9iZWFtL3RyZWUvbWFzdGVyL2V4YW1wbGVzL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlL2JlYW0vZXhhbXBsZXMvc3VicHJvY2VzczwvYT48ZGl2PjxkaXY+PGJyIGNsZWFyPSJhbGwi PjxkaXY+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX3NpZ25hdHVyZSIgZGF0YS1zbWFydG1h aWw9ImdtYWlsX3NpZ25hdHVyZSI+S3lsZSBXZWF2ZXIgfCBTb2Z0d2FyZSBFbmdpbmVlciB8IDxh IGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL2liemliIiB0YXJnZXQ9Il9ibGFuayI+Z2l0aHViLmNv bS9pYnppYjwvYT4gfCA8YSBocmVmPSJtYWlsdG86a2N3ZWF2ZXJAZ29vZ2xlLmNvbSIgdGFyZ2V0 PSJfYmxhbmsiPmtjd2VhdmVyQGdvb2dsZS5jb208L2E+IHwgKzE2NTAyMDM1NTU1PGJyPjwvZGl2 PjwvZGl2Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUi PjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBNb24sIEp1biAzLCAyMDE5IGF0 IDEwOjExIEFNIFJ1b3l1biBIdWFuZyAmbHQ7PGEgaHJlZj0ibWFpbHRvOnJ1b3l1bkBnb29nbGUu Y29tIj5ydW95dW5AZ29vZ2xlLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90 ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9y ZGVyLWxlZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRp diBkaXI9Imx0ciI+aW50ZXJlc3Rpbmcgc3RhdHMuwqDCoDxkaXY+PGJyPjwvZGl2PjxkaXY+SSBh bSB2ZXJ5IGN1cmlvdXMgaW4gd2hhdCB3ZSBjYW4gYmVuZWZpdCBmcm9tIG1lcmVseSAqMzIqIGxp bmVzIG9mIGMrKyBjb2RlIGluIGEgTUxPQyByZXBvc2l0b3J5LsKgPC9kaXY+PC9kaXY+PGJyPjxk aXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxfYXR0ciI+ T24gTW9uLCBKdW4gMywgMjAxOSBhdCAyOjEwIEFNIE1heGltaWxpYW4gTWljaGVscyAmbHQ7PGEg aHJlZj0ibWFpbHRvOm14bUBhcGFjaGUub3JnIiB0YXJnZXQ9Il9ibGFuayI+bXhtQGFwYWNoZS5v cmc8L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3Rl IiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCBy Z2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPkludGVyZXN0aW5nIHN0YXRzIDopIFRo aXMgbWV0cmljIGRvZXMgbm90IHRha2UgaW50byBhIGFjY291bnQgQmVhbSYjMzk7cyA8YnI+DQpk ZXBlbmRlbmNpZXMsIGUuZy4gbGlicmFyaWVzIGFuZCBleGVjdXRpb24gYmFja2VuZHMuIFRoYXQg d291bGQgaW5jcmVhc2UgPGJyPg0KdGhlIExPQ3MgdG8gbWlsbGlvbnMuPGJyPg0KPGJyPg0KT24g MDEuMDYuMTkgMDE6NDYsIEFsZXggQW1hdG8gd3JvdGU6PGJyPg0KJmd0OyBJbnRlcmVzdGluZywg c28gaWYgd2UgcGxheSB3aXRoIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jZ2FnL2xvYyIg cmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9naXRodWIuY29tL2NnYWcv bG9jPC9hPiB3ZSBjb3VsZCA8YnI+DQomZ3Q7IGJyZWFrIGl0IGRvd24gZnVydGhlcj8gSS5lLiB0 ZXN0IGZpbGVzIHZzIGNvZGUgZmlsZXM/IFdoaWNoIGZvbGRlcnMsIDxicj4NCiZndDsgZXRjLiBU aGF0IGNvdWxkIGJlIGludGVyZXN0aW5nIGFzIHdlbGwuPGJyPg0KJmd0OyA8YnI+DQomZ3Q7IE9u IEZyaSwgTWF5IDMxLCAyMDE5IGF0IDQ6MjAgUE0gQnJpYW4gSHVsZXR0ZSAmbHQ7PGEgaHJlZj0i bWFpbHRvOmJodWxldHRlQGdvb2dsZS5jb20iIHRhcmdldD0iX2JsYW5rIj5iaHVsZXR0ZUBnb29n bGUuY29tPC9hPiA8YnI+DQomZ3Q7ICZsdDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOmJodWxldHRl QGdvb2dsZS5jb20iIHRhcmdldD0iX2JsYW5rIj5iaHVsZXR0ZUBnb29nbGUuY29tPC9hPiZndDsm Z3Q7IHdyb3RlOjxicj4NCiZndDsgPGJyPg0KJmd0O8KgIMKgIMKgRGVubmlzIE5lZHJ5IG5lZWRl ZCAyIG1pbGxpb24gbGluZXMgb2YgY29kZSB0byBjb250cm9sIEp1cmFzc2ljPGJyPg0KJmd0O8Kg IMKgIMKgUGFyaywgYW5kIGhlIG9ubHkgaGFkIHRvIG1hbmFnZSBlaWdodCBjb21wdXRlcnMhIEkg dGhpbmsgd2UgbWF5PGJyPg0KJmd0O8KgIMKgIMKgYWN0dWFsbHkgbmVlZCB0byBwaWNrIHVwIHRo ZSBwYWNlLjxicj4NCiZndDsgPGJyPg0KJmd0O8KgIMKgIMKgT24gRnJpLCBNYXkgMzEsIDIwMTkg YXQgNDoxMSBQTSBBbnRvbiBLZWRpbiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmtlZGluQGdvb2dsZS5j b20iIHRhcmdldD0iX2JsYW5rIj5rZWRpbkBnb29nbGUuY29tPC9hPjxicj4NCiZndDvCoCDCoCDC oCZsdDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOmtlZGluQGdvb2dsZS5jb20iIHRhcmdldD0iX2Js YW5rIj5rZWRpbkBnb29nbGUuY29tPC9hPiZndDsmZ3Q7IHdyb3RlOjxicj4NCiZndDsgPGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgQW5kIHRvIHJlZHVjZSB0aGUgZWZmb3J0IG9mIGZ1dHVyZSByZXdy aXRlcyB3ZSBzaG91bGQgc3RhcnQ8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqBkb2luZyBpdCBvbiBh IHNjaGVkdWxlLiBJIHByb3Bvc2Ugd2Ugc3RhcnQgb3ZlciBvbmNlIGEgd2VlayA6KTxicj4NCiZn dDsgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgT24gRnJpLCBNYXkgMzEsIDIwMTkgYXQgNDowMiBQ TSBMdWthc3ogQ3dpayAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxjd2lrQGdvb2dsZS5jb20iIHRhcmdl dD0iX2JsYW5rIj5sY3dpa0Bnb29nbGUuY29tPC9hPjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCZs dDttYWlsdG86PGEgaHJlZj0ibWFpbHRvOmxjd2lrQGdvb2dsZS5jb20iIHRhcmdldD0iX2JsYW5r Ij5sY3dpa0Bnb29nbGUuY29tPC9hPiZndDsmZ3Q7IHdyb3RlOjxicj4NCiZndDsgPGJyPg0KJmd0 O8KgIMKgIMKgIMKgIMKgIMKgIMKgMSBtaWxsaW9uIGxpbmVzIGlzIHRvbyBtdWNoLCB0aW1lIHRv IGRlbGV0ZSB0aGUgZW50aXJlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgcHJvamVjdCBh bmQgc3RhcnQgb3ZlciBhZ2FpbiwgOi0pPGJyPg0KJmd0OyA8YnI+DQomZ3Q7wqAgwqAgwqAgwqAg wqAgwqAgwqBPbiBGcmksIE1heSAzMSwgMjAxOSBhdCAzOjEyIFBNIEFua3VyIEdvZW5rYTxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCZsdDs8YSBocmVmPSJtYWlsdG86Z29lbmthQGdvb2ds ZS5jb20iIHRhcmdldD0iX2JsYW5rIj5nb2Vua2FAZ29vZ2xlLmNvbTwvYT4gJmx0O21haWx0bzo8 YSBocmVmPSJtYWlsdG86Z29lbmthQGdvb2dsZS5jb20iIHRhcmdldD0iX2JsYW5rIj5nb2Vua2FA Z29vZ2xlLmNvbTwvYT4mZ3Q7Jmd0OyB3cm90ZTo8YnI+DQomZ3Q7IDxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoFRoYW5rcyBmb3Igc2hhcmluZy48YnI+DQomZ3Q7wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBUaGlzIGlzIHJlYWxseSBpbnRlcmVzdGluZyBtZXRyaWNzLjxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoE9uZSB1c2UgSSBjYW4gc2VlIGlzIHRvIHRy YWNrIExPQyB2cyBDb21tZW50cyB0byBtYWtlPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgc3VyZSB0aGF0IHdlIGtlZXAgdXAgd2l0aCB0aGUgcHJhY3RpY2Ugb2Ygd3JpdGluZzxi cj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoG1haW50YWluYWJsZcKgY29kZS48YnI+ DQomZ3Q7IDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoE9uIEZyaSwgTWF5IDMx LCAyMDE5IGF0IDM6MDQgUE0gSXNtYcOrbCBNZWrDrWE8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAmbHQ7PGEgaHJlZj0ibWFpbHRvOmllbWVqaWFAZ21haWwuY29tIiB0YXJnZXQ9 Il9ibGFuayI+aWVtZWppYUBnbWFpbC5jb208L2E+ICZsdDttYWlsdG86PGEgaHJlZj0ibWFpbHRv OmllbWVqaWFAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+aWVtZWppYUBnbWFpbC5jb208L2E+ Jmd0OyZndDsgd3JvdGU6PGJyPg0KJmd0OyA8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBJIHdhcyBjaGVja2luZyBzb21lIG1ldHJpY3MgaW4gb3VyIGNvZGViYXNlIGFu ZDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGZvdW5kIGJ5IGNoYW5j ZSB0aGF0PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd2UgaGF2ZSBw YXNzZWQgdGhlIDEgbWlsbGlvbiBsaW5lcyBvZiBjb2RlIChNTE9DKS48YnI+DQomZ3Q7wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBPZiBjb3Vyc2UgbGluZXMgb2Y8YnI+DQomZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjb2RlIG1heSBub3QgbWF0dGVyIG11Y2ggYnV0 IGFueXdheSBpdCBpczxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlu dGVyZXN0aW5nIHRvIHNlZSB0aGUgc2l6ZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoG9mIG91ciBwcm9qZWN0IGF0IHRoaXMgbW9tZW50Ljxicj4NCiZndDsgPGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgVGhpcyBpcyB0aGUgZGV0YWlsZWQg aW5mb3JtYXRpb24gcmV0dXJuZWQgYnkgbG9jIFsxXTo8YnI+DQomZ3Q7IDxicj4NCiZndDvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPGJyPg0K Jmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgTGFuZ3VhZ2XCoCDCoCDCoCDC oCDCoCDCoCDCoEZpbGVzwqAgwqAgwqAgwqAgTGluZXPCoCDCoCDCoCDCoDxicj4NCiZndDvCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJsYW5rwqAgwqAgwqAgQ29tbWVudMKgIMKgIMKg IMKgIMKgQ29kZTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgSmF2YcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDM2ODHCoCDCoCDCoCDCoDY3MzAw N8KgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNzgy NjXCoCDCoCDCoCDCoDE0MDc1M8KgIMKgIMKgIMKgNDUzOTg5PGJyPg0KJmd0O8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgUHl0aG9uwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA0 OTfCoCDCoCDCoCDCoDEzMTA4MsKgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgMjI1NjDCoCDCoCDCoCDCoCAxMzM3OMKgIMKgIMKgIMKgIDk1MTQ0PGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgR2/CoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoDMzM8KgIMKgIMKgIMKgMTA1Nzc1wqAgwqAgwqAgwqA8YnI+DQom Z3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAxMzY4McKgIMKgIMKgIMKgIDExMDcz wqAgwqAgwqAgwqAgODEwMjE8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBNYXJrZG93bsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMjA1wqAgwqAgwqAgwqAgMzE5ODnC oCDCoCDCoCDCoDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDY1 MjbCoCDCoCDCoCDCoCDCoCDCoCAwwqAgwqAgwqAgwqAgMjU0NjM8YnI+DQomZ3Q7wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBQbGFpbiBUZXh0wqAgwqAgwqAgwqAgwqAgwqAgwqAg MTHCoCDCoCDCoCDCoCAyMTk3OcKgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgNjM1OcKgIMKgIMKgIMKgIMKgIMKgIDDCoCDCoCDCoCDCoCAxNTYy MDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFNhc3PCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA5MsKgIMKgIMKgIMKgIMKgOTg2N8KgIMKgIMKgIMKgPGJy Pg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgMTQzNMKgIMKgIMKgIMKg IMKgMTkwMMKgIMKgIMKgIMKgIMKgNjUzMzxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoEphdmFTY3JpcHTCoCDCoCDCoCDCoCDCoCDCoCDCoCAxOcKgIMKgIMKgIMKg IMKgNTE1N8KgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgMTE5N8KgIMKgIMKgIMKgIMKgIDQ2N8KgIMKgIMKgIMKgIMKgMzQ5Mzxicj4NCiZndDvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFlBTUzCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCAxNMKgIMKgIMKgIMKgIMKgNDYwMcKgIMKgIMKgIMKgIMKgPGJyPg0KJmd0O8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNDU0wqAgwqAgwqAgwqAgwqAxMTA0wqAgwqAg wqAgwqAgwqAzMDQzPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg Qm91cm5lIFNoZWxswqAgwqAgwqAgwqAgwqAgwqAgMzDCoCDCoCDCoCDCoCDCoDM4NzTCoCDCoCDC oCDCoCDCoDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDQ3MMKgIMKg IMKgIMKgIMKgMTAyOMKgIMKgIMKgIMKgIMKgMjM3Njxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoFByb3RvYnVmwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMTfCoCDC oCDCoCDCoCDCoDQyNTjCoCDCoCDCoCDCoCDCoDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoDY3N8KgIMKgIMKgIMKgIMKgMTM3M8KgIMKgIMKgIMKgIMKgMjIwODxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFhNTMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgMTfCoCDCoCDCoCDCoCDCoDI3ODnCoCDCoCDCoCDCoCDCoDxicj4N CiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDI5NsKgIMKgIMKgIMKgIMKgIDU1 OcKgIMKgIMKgIMKgIMKgMTkzNDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoEtvdGxpbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDE5wqAgwqAgwqAgwqAgwqAz NTAxwqAgwqAgwqAgwqAgwqA8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAzNDfCoCDCoCDCoCDCoCDCoDEzNzDCoCDCoCDCoCDCoCDCoDE3ODQ8YnI+DQomZ3Q7wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBIVE1MwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgNjDCoCDCoCDCoCDCoCDCoDI0NDfCoCDCoCDCoCDCoCDCoDxicj4NCiZndDvCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDE0OMKgIMKgIMKgIMKgIMKgIDkxNMKgIMKgIMKgIMKg IMKgMTM4NTxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEJhdGNo wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgM8KgIMKgIMKgIMKgIMKgIDI0OcKgIMKgIMKg IMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNTfCoCDC oCDCoCDCoCDCoCDCoCAwwqAgwqAgwqAgwqAgwqAgMTkyPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgSU5JwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg McKgIMKgIMKgIMKgIMKgIDIwNsKgIMKgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgMjHCoCDCoCDCoCDCoCDCoCDCoDE2wqAgwqAgwqAgwqAgwqAg MTY5PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgQysrwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMsKgIMKgIMKgIMKgIMKgIMKgNzLCoCDCoCDCoCDC oCDCoCDCoDxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDTCoCDCoCDC oCDCoCDCoCDCoDM2wqAgwqAgwqAgwqAgwqAgwqAzMjxicj4NCiZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoEF1dG9jb25mwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAxwqAg wqAgwqAgwqAgwqAgwqAyMcKgIMKgIMKgIMKgIMKgIMKgPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgMcKgIMKgIMKgIMKgIMKgIMKgMTbCoCDCoCDCoCDCoCDCoCDCoCA0 PGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS08YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBUb3Rh bMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgNTAwMsKgIMKgIMKgIDEwMDA4NzTCoCDCoCDCoDxi cj4NCiZndDvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDEzMjQ5N8KgIMKgIMKg IMKgMTczOTg3wqAgwqAgwqAgwqA2OTQzOTA8YnI+DQomZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTxicj4NCiZndDsgPGJyPg0KJmd0O8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgWzFdIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHVi LmNvbS9jZ2FnL2xvYyIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9n aXRodWIuY29tL2NnYWcvbG9jPC9hPjxicj4NCiZndDsgPGJyPg0KPC9ibG9ja3F1b3RlPjwvZGl2 PjxiciBjbGVhcj0iYWxsIj48ZGl2Pjxicj48L2Rpdj4tLSA8YnI+PGRpdiBkaXI9Imx0ciIgY2xh c3M9ImdtYWlsLW1fNTcwODM1NzA4ODAxNDYzMzk5NmdtYWlsX3NpZ25hdHVyZSI+PT09PT09PT09 PT09PT09PTxkaXY+UnVveXVuIMKgSHVhbmc8L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj4NCjwv YmxvY2txdW90ZT48L2Rpdj4NCg== --000000000000929fa0058a6e97e3--