Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aoQ9K-0005KO-1s for pgadmin-hackers@arkaria.postgresql.org; Fri, 08 Apr 2016 06:44:10 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1aoQ9J-0003wG-Kz for pgadmin-hackers@arkaria.postgresql.org; Fri, 08 Apr 2016 06:44:09 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1aoQ94-0003Nu-NM for pgadmin-hackers@postgresql.org; Fri, 08 Apr 2016 06:43:55 +0000 Received: from mail-oi0-x22d.google.com ([2607:f8b0:4003:c06::22d]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1aoQ8w-0006b8-IA for pgadmin-hackers@postgresql.org; Fri, 08 Apr 2016 06:43:53 +0000 Received: by mail-oi0-x22d.google.com with SMTP id y204so126498731oie.3 for ; Thu, 07 Apr 2016 23:43:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=xo3D7gJeMl8AMC7f0u4q30OHh7hRphAWLkPctsDmYms=; b=xomX5UehTogl/cr+1PLj5fi7gOXsqdM8CyhaxjAHw9p1SJRqkMPoBOZauCmU/k7+4f sehiuHZQMf3yYg5RKRp9bezoXj9GOKsXjDQi32lIf4gFff/KaikJxU9alYBPpl18D3eR 45qTdkXVrDZm5jR9ad5fCAVYUMOwXMZj6gsrF/scmdzbA/ojS7hqxVxbO9SA2RHopUwW AbS49WFfv+Ho2kD0EoobtkBS8/BCrGE8qD6/58/ZNsu6uBwsnz+NXbgwQMDlktYXUwCB uFTqzJnuFmJ9al+dTbTjt2dwvh8kmUSoEmxEerPYPI6sQ/b6GPsWP7HEn/pgD3e4D+Rt 1GiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=xo3D7gJeMl8AMC7f0u4q30OHh7hRphAWLkPctsDmYms=; b=dCr9+9jc+TLwDuF76FOzcOtA4RAZkfBQWckCEoOyJozHpc/FURBffbw1267QLsMt/V zu4PyDDCOf4Z9+MKkicrMMy+FMyvIWFl7tzc5rCHFmTNamFJ+rU3bEXGE6izl4p4RCIU 3KiSXHAIFBn+FExOo9XyR9ejlCrdHQ2hxLb9w8N49ok42MDxdy2x+vbdZIFBLVk3f0g9 olrGWhmcxurYdHYBkiYtdakVTxi3g+6bsNEstDuuLIE24CUkT3j+yPlRJ98xNgFuz7YU 31R5b1HlEzPqa8tPpluJS3Pl7jqn4EaNi0/bSpq+fUBFf6wQ/VR57Rd71O1xMIfcskkM 3PQw== X-Gm-Message-State: AD7BkJJkQ3Xwr/VBIYy6mp2R0zspGNI4e3kj46Ofa+dK1B1sLNrq+jmljpMty5NaZgNjHRDczowxr3vAAhmR60vX MIME-Version: 1.0 X-Received: by 10.157.9.165 with SMTP id q34mr3745946otd.52.1460097825495; Thu, 07 Apr 2016 23:43:45 -0700 (PDT) Received: by 10.202.49.194 with HTTP; Thu, 7 Apr 2016 23:43:45 -0700 (PDT) In-Reply-To: References: Date: Fri, 8 Apr 2016 12:13:45 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch] Implementation of the Data Grid and Query Tool From: Akshay Joshi To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/related; boundary=001a113dcdca3a15ad052ff384e6 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a113dcdca3a15ad052ff384e6 Content-Type: multipart/alternative; boundary=001a113dcdca3a15a6052ff384e5 --001a113dcdca3a15a6052ff384e5 Content-Type: text/plain; charset=UTF-8 Hi On Thu, Apr 7, 2016 at 6:38 PM, Dave Page wrote: > > > On Thu, Apr 7, 2016 at 2:03 PM, Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> Hi >> >> On Thu, Apr 7, 2016 at 6:01 PM, Dave Page wrote: >> >>> Hi >>> >>> On Thu, Apr 7, 2016 at 10:07 AM, Akshay Joshi < >>> akshay.joshi@enterprisedb.com> wrote: >>> >>>> >>>>> - The View Data menu option should be on the Object menu >>>>> >>>> >>>> OK. >>>> >>>> >>>>> , which should mirror the Context menu, except options should be >>>>> disabled when not applicable instead of hidden. >>>>> >>>> >>>> Context menu code is generic code, to do this we need to change >>>> that code and it impacts other menu items like (Connect/Disconnect server, >>>> Connect/Disconnect Database etc ...) >>>> >>> >>> I think you misunderstand. The Context menu is fine - but options that >>> are on it, should also be on the main "Object" menu. The difference is that >>> where options are hidden on the context menu, they should be disabled on >>> the object menu. >>> >> >> The same behaviour I have already added in "Tools" menu, so you want >> me to shift that menu from "Tools" to "Object"?? >> > > Just for the View/Edit options. The Query Tool is never shown on the > Context menu, so it should be on Tools. > > >> >>> >>>> >>>>> - The Query Tool menu icon should be a glyphicon, to match the others. >>>>> >>>> >>>> There is no glyphicon available which match the Query Tool icon. I >>>> have found one like below which is "database-search" or can you please >>>> suggest some other icon. >>>> [image: Inline image 1] >>>> >>> >>> That one looks perfect. >>> >> We can't use this icon because it's not come with Bootstrap , I have picked this from "http://glyphicons.com/" and I am not sure we can use it as per the Licence. > >>> >>>> >>>> - Please merge the functionality of the Refresh and Execute buttons >>>>> into one button. We shouldn't have two buttons that do essentially the same >>>>> thing. >>>>> >>>> >>>> I have modified the button toolbar, we will show buttons on the >>>> toolbar specific to the module (QueryTool/EditGrid). Please refer the >>>> attached screenshots (QueryTool and EditGrid). >>>> >>> >>> No - please leave all buttons visible in either mode, but disable them >>> as appropriate. Then, merge the execute/refresh buttons into one. >>> >> >> In that case we will have to use either refresh icon or execute icon >> (play button) or any other, as a user's perspective it's not good to have >> play button works as "Refresh" in EG mode or refresh button works as >> "Execute" in QT mode. >> > > MySQL Workbench uses something like glyphicon-flash. > > >> >>> The reason for doing it this way is that eventually we will add query >>> parsing support to the client so that we can start enabling some of the >>> Edit Grid features when running in Query Tool mode - e.g. if a Query Tool >>> authored query is determined to be updatable, we can enable buttons like >>> "Add Row", "Save" etc. >>> >> >> OK. >> >>> >>> >>>> >>>> >>>>> - In Edit Grid mode, the History panel should log all queries >>>>> (SELECTs, UPDATEs, DELETEs etc) as it would in the Query Tool. >>>>> >>>>> - In Edit Grid mode, the Messages panel should display any messages >>>>> from the most recent action as it would in the Query Tool. >>>>> >>>> >>>> OK. >>>> >>> >>> Thanks. >>> >>> >>>> >>>>> - Please add an SQL button. This should show/hide the SQL panel in >>>>> *both* Query Tool and Edit Grid modes. In Edit Grid mode, that textbox >>>>> should be read-only, but should display the SQL used (including any >>>>> LIMIT/FILTER clauses) >>>>> >>>> >>>> I think we don't need an SQL button, because I have added a >>>> Splitter to split SQL panel and Output Panel, so user can any time >>>> resize the SQL/Output panel. Please refer the attached screenshots ( >>>> QueryTool and EditGrid). >>>> >>> >>> Right, but I'd also like to be able to hide it entirely (which would be >>> the default in Edit Grid mode). >>> >> >> To achieve this we need to hide the top half of the splitter, that I >> am not sure how we can do that. We can't remove the splitter, because it >> provide's ease to user to expand the SQL panel for reading the long SQL >> queries/functions. >> > > You could put the small panel (discussed below) that displays the name of > the object in the splitter panel as well. Then, you wouldn't have to hide > the whole thing. It might look a little weird unless you force the splitter > to move when you hide the SQL box though. > > >> >>> >>>> >>>>> - Please remove the border from the SQL box, such that it fills all >>>>> available space. >>>>> >>>> >>>> Done. Please refer the attached screenshots (QueryTool and EditGrid >>>> ). >>>> >>>>> >>>>> - The Filter box should be in a modal overlay over the top of the SQL >>>>> box/Results tabs as required. Those elements should be grayed whilst it is >>>>> open. >>>>> >>>> >>>> Done. Please refer the attached screenshot (Filter). >>>> >>> >>> Cool. >>> >>> >>>> >>>>> - Please adjust the height of the Delete icon in the Edit Grid, such >>>>> that it doesn't force the row height to be higher than it should be. >>>>> >>>> >>>> OK. >>>> >>>>> >>>>> - If a field has been edited, but not saved, can we highlight it >>>>> somehow? Maybe make the text dark blue? >>>>> >>>> >>>> OK, not sure right now but will try. >>>> >>>>> >>>>> - I think the names of the tabs are far too long. Can we change them >>>>> to "Query 1", "Query 2" etc, then rename them to the filename if the user >>>>> saves/loads a file? >>>>> >>>> >>>> I personally feel it's been difficult for user to identify the tab >>>> if we will give names like "Query 1" . What we can do in case of edit grid >>>> we will only show the servername-objectname (remove database and >>>> schema) or only objectname, and in case of query tool we will show >>>> servername-databasename. What do you think? >>>> >>> >>> I think they're all ambiguous enough to not be useful for many users :-( >>> - plus the tabs are so long, they look awful. >>> >>> We should perhaps add a small panel (below the toolbar?) that shows >>> Server -> Database in QT mode, and Server -> Database -> Schema -> >>> Table/View in EG mode. >>> >> >> OK. >> >>> >>> >>>> >>>> >>>>> - Ashesh and I discussed changing the History tab to be a grid, >>>>> showing: Date/Time, Query (first line only), Rows affected, Runtime and >>>>> Status, in a row per query executed. Ashesh suggested using a sub-form that >>>>> can be expanded for each row, which could show the full query and error >>>>> details (SQL State etc). New rows should be added to the top of the list. >>>>> >>>>> - We should add an "Edit" button, which opens a drop-down menu. This >>>>> would eventually include options as found on the Edit menu in the pgAdmin3 >>>>> query tool, such as the "Clear SQL" option. >>>>> >>>>> - Errors should be highlighted in the SQL box - a marker in the margin >>>>> to note the line, and spellcheck-style underlining for the error word. >>>>> >>>> >>>> OK. >>>> >>>>> >>>>> - Query results should have spaces converted to " ", so that >>>>> proper indenting is maintained (for example, on EXPLAIN queries). >>>>> >>>> >>>> Instead of converting spaces to " " we can have css style >>>> "white-space: pre-wrap;". I have tested it and works fine. >>>> >>>>> >>>>> - The "Add Row" button only works if you're on the last page of the >>>>> resultset. >>>>> >>>> >>>> OK. >>>> >>>>> >>>>> - Can the "Copy Row" button also populate the clipboard with CSV data >>>>> for the row? >>>>> >>>> >>>> This required some research, not sure at the moment. >>>> >>>>> >>>>> - In Edit mode, we need to be able to represent/set values to NULL. >>>>> >>>> >>>> This will be taken care as part of multi-type rendering task. >>>> >>> >>> OK. >>> >>> >>>> >>>>> - If I shutdown my pgAdmin server, then execute a query, I get no >>>>> error, 0 rows displayed, and a message in the messages panel saying: >>>>> >>>>> Total query runtime: 46 msec >>>>> 3 rows retrieved. >>>>> >>>>> If I restart the server, the query will execute correctly, however I >>>>> should see appropriate messages when it's not running. >>>>> >>>>> - The layout of the result tabs should be maintained if new Query Tool >>>>> or Edit Grid tabs are opened. >>>>> >>>> >>>> OK. >>>> >>> >>> Cool - thanks! >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >> >> >> >> -- >> *Akshay Joshi* >> *Principal Software Engineer * >> >> >> >> *Phone: +91 20-3058-9517 <%2B91%2020-3058-9517>Mobile: +91 976-788-8246* >> > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- *Akshay Joshi* *Principal Software Engineer * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --001a113dcdca3a15a6052ff384e5 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

On Thu, Apr 7, 2016 at 6:38 PM, Dave Page <dpage@pgadmin.org> wrote:


On Thu, Apr 7, 2016 a= t 2:03 PM, Akshay Joshi <akshay.joshi@enterprisedb.com>= wrote:
Hi

On Thu, Apr 7, 2016 at 6:01 = PM, Dave Page <dpage@pgadmin.org> = wrote:
Hi

On Thu, Apr 7, 2016 at 10:07 AM, Aks= hay Joshi <akshay.joshi@enterprisedb.com> wrote:=

- The View Data= menu option should be on the Object menu =C2=A0
=C2=A0=C2=A0
=C2=A0 =C2=A0OK.
=C2=A0
, which should mirror the Context men= u, except options should be disabled when not applicable instead of hidden.=
=C2=A0
=C2=A0 = =C2=A0 =C2=A0Context menu code is generic code, to do this we need to chang= e that code and it impacts other menu items like (Connect/Disconnect server= , Connect/Disconnect Database etc ...) =C2=A0

I think you misunderstand. The Context me= nu is fine - but options that are on it, should also be on the main "O= bject" menu. The difference is that where options are hidden on the co= ntext menu, they should be disabled on the object menu.

=C2=A0 =C2=A0 The same behaviou= r I have already added in "Tools" menu, so you want me to shift t= hat menu from "Tools" to "Object"??=C2=A0

Just for the View/Edit op= tions. The Query Tool is never shown on the Context menu, so it should be o= n Tools.
=C2=A0
=C2=A0

- The Query Tool menu icon should be a glyphicon, to match the othe= rs.
=C2=A0
=C2=A0= =C2=A0There is no glyphicon available which match the Query T= ool icon. I have found one like below which is "database-search" = or can you please suggest some other icon.=C2=A0
=C2=A0 =C2=A0 = =C2=A0 =C2=A03D"Inline=C2=A0

That one looks perfect.

=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0We can't use this icon because it's not come w= ith Bootstrap , I have picked this from "http://glyphicons.com/" and I am not sure we can use it as p= er the Licence.
=C2=A0

- Please merge the functionality of the Refresh and Execute buttons= into one button. We shouldn't have two buttons that do essentially the= same thing.
=C2=A0 =C2=A0
=C2=A0 =C2=A0 I have modified the button toolbar, we will show bu= ttons on the toolbar specific to the module (QueryTool/E= ditGrid). Please refer the attached screenshots (QueryTool and EditGrid).
No - please leave all buttons visible in either mode, b= ut disable them as appropriate. Then, merge the execute/refresh buttons int= o one.

=C2= =A0 =C2=A0 In that case we will have to use either refresh icon or execute = icon (play button) or any other, as a user's perspective it's not g= ood to have play button works as "Refresh" in EG mod= e or refresh button works as "Execute" in QT mode.=C2=A0

MySQL Workbench uses= something like glyphicon-flash.
=C2=A0

The reason for doing it th= is way is that eventually we will add query parsing support to the client s= o that we can start enabling some of the Edit Grid features when running in= Query Tool mode - e.g. if a Query Tool authored query is determined to be = updatable, we can enable buttons like "Add Row", "Save"= etc.

=C2=A0= =C2=A0 OK.=C2=A0
=C2=A0


- In Edit Grid m= ode, the History panel should log all queries (SELECTs, UPDATEs, DELETEs et= c) as it would in the Query Tool.

- In Edit Grid m= ode, the Messages panel should display any messages from the most recent ac= tion =C2=A0as it would in the Query Tool.
=C2=A0
=C2=A0 =C2=A0OK.=C2=A0

Thanks.
=C2=A0

- Please add an SQL= button. This should show/hide the SQL panel in *both* Query Tool and Edit = Grid modes. In Edit Grid mode, that textbox should be read-only, but should= display the SQL used (including any LIMIT/FILTER clauses)

=C2=A0 =C2=A0 I think we don= 't need an SQL button, because I have added a Splitter to = split SQL panel and Output Panel, so user can any time r= esize the SQL/Output panel. Please refer the attached s= creenshots (QueryTool and EditGrid). =C2=A0 =C2= =A0=C2=A0

Ri= ght, but I'd also like to be able to hide it entirely (which would be t= he default in Edit Grid mode).
=C2=A0 =C2=A0 To achieve this we need to hide the top ha= lf of the splitter, that I am not sure how we can do that. We can't rem= ove the splitter, because it provide's ease to user to exp= and the SQL panel for reading the long SQL querie= s/functions. =C2=A0

You could put the small panel (discussed below) that displays the n= ame of the object in the splitter panel as well. Then, you wouldn't hav= e to hide the whole thing. It might look a little weird unless you force th= e splitter to move when you hide the SQL box though.
=C2=A0
=C2=A0<= /div>

- Please remove th= e border from the SQL box, such that it fills all available space.
=C2=A0
=C2=A0 =C2=A0Done.= =C2=A0Please refer the attached screenshots (QueryTool and EditGrid).

- The Filt= er box should be in a modal overlay over the top of the SQL box/Results tab= s as required. Those elements should be grayed whilst it is open.
=C2=A0=C2=A0
=C2=A0 =C2=A0= Done. Please refer the attached screenshot (Filter).=C2=A0

Cool.
=C2=A0=

- Please adjust t= he height of the Delete icon in the Edit Grid, such that it doesn't for= ce the row height to be higher than it should be.
=C2=A0
=C2=A0 =C2=A0OK.=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;pa= dding-left:1ex">

- If a field has been edited, but not saved= , can we highlight it somehow? Maybe make the text dark blue?
=C2=A0
=C2=A0 =C2=A0OK, not su= re right now but will try.=C2=A0

- I think the names of the tabs are far too long. Can we change them to &= quot;Query 1", "Query 2" etc, then rename them to the filena= me if the user saves/loads a file?
=C2=A0
=C2=A0 =C2=A0I personally feel it's been diffi= cult for user to identify the tab if we will give names like "Query 1&= quot; . What we can do in case of edit grid we will only show the ser= vername-objectname (remove database and schema) or only= objectname, and in case of query tool we will show serv= ername-databasename. What do you think?

I think they're all amb= iguous enough to not be useful for many users :-( - plus the tabs are so lo= ng, they look awful.=C2=A0

We should perhaps add a= small panel (below the toolbar?) that shows Server -> Database in QT mo= de, and Server -> Database -> Schema -> Table/View in EG mode.

=C2=A0 =C2=A0 O= K.=C2=A0
=C2=A0
=C2=A0
- Ashesh and I discussed = changing the History tab to be a grid, showing: Date/Time, Query (first lin= e only), Rows affected, Runtime and Status, in a row per query executed. As= hesh suggested using a sub-form that can be expanded for each row, which co= uld show the full query and error details (SQL State etc). New rows should = be added to the top of the list.

- We should add a= n "Edit" button, which opens a drop-down menu. This would eventua= lly include options as found on the Edit menu in the pgAdmin3 query tool, s= uch as the "Clear SQL" option.

- Errors = should be highlighted in the SQL box - a marker in the margin to note the l= ine, and spellcheck-style underlining for the error word.
=
=C2=A0=C2=A0
=C2=A0 =C2=A0 OK.=C2= =A0

- Query results should have= spaces converted to "&nbsp;", so that proper indenting is ma= intained (for example, on EXPLAIN queries).
=C2=A0=C2=A0
=C2=A0 =C2=A0 Instead of converting= spaces to "&nbsp;" we can have css= style "white-space: pre-wrap;". I have tested it an= d works fine.

- The "Add R= ow" button only works if you're on the last page of the resultset.=
=C2=A0
=C2=A0 = =C2=A0OK.=C2=A0

- Can the "= ;Copy Row" button also populate the clipboard with CSV data for the ro= w?
=C2=A0
=C2=A0 = =C2=A0This required some research, not sure at the moment. =C2=A0

- In Edit mode, we need to be able to = represent/set values to NULL.
=C2= =A0 =C2=A0
=C2=A0 =C2=A0This will be taken care as part of= multi-type rendering task.=C2=A0
=
OK.
=C2=A0

- If I shutdown my pgAdmin server, then exec= ute a query, I get no error, 0 rows displayed, and a message in the message= s panel saying:

Total query runtime: 46 msec<= /div>
3 rows retrieved.

If I restart the= server, the query will execute correctly, however I should see appropriate= messages when it's not running.

- The layout = of the result tabs should be maintained if new Query Tool or Edit Grid tabs= are opened.

=C2=A0 =C2=A0OK.=C2=A0

=
Cool - thanks!=C2=A0

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseD= B UK: http://www.= enterprisedb.com
The Enterprise PostgreSQL Company



-= -
Akshay Joshi
<= div>Principal Softwar= e Engineer=C2=A0

Phone: +91 20-3058-9517
Mobile: +91 976-788-8246



--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @= pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL= Company



--
Akshay Joshi
Principal Software Engineer=C2= =A0


=
Pho= ne: +91 20-3058-9517
Mobile: +91 976-788-8246
--001a113dcdca3a15a6052ff384e5-- --001a113dcdca3a15ad052ff384e6 Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_153efa7c0422527f iVBORw0KGgoAAAANSUhEUgAAAGYAAABkCAYAAAB0F0VpAAAJMUlEQVR4Ae2cR4gUTRTH3wZzzjnn nHNCPAgiHgwHFVFBUBEDCC6CyKfgQfGkBxEzhosHj6KgKKKIiGIOmDCnNee0H7+C6q+nd2d3Zqdm 5rlfPSi6p6b6dfX/3/XqvVc1k1NYWFgkXtQhkKuuR75DBgFPjNIXwRPjiVGKgNJu+RHjiVGKgNJu +RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHj iVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RGjlJh8pf0KuvXlyxd5 8OCBPHz4UD5+/CifPn0y5fPnz0KhjjZI9erVpWbNmqbUqFFDKLVq1TKldevW0rZtW9MmUK74JEfj zzCePHkiZ8+elfPnz8uzZ89KhA8S6tSpI9WqVTOFRl+/fjXl/fv3AVnRi5s1ayYDBw6UoUOHSosW LaJfq/msipi3b9/K/v37DSElIdS4cWOZNm2adO7cWZo0aSI5OTmmhNsWFRUJ5cWLF3L79m05ePCg vHz5MtwkOIegmTNnSr169YI6LSeq5pgtW7bEJQXAfv/+Lbm5uWaEQAry58+fmEId3zGSaMs18YQR yT01iqo5hje8NCksLJTNmzebJoDO/MGcgklDMGHMQcw7EJaIlHXPRHSko40qYpJ5QICHCApzUkUT VaasooGbyvN4YlJBL43XemLSCG4qqj0xqaCXxmtVEdOtW7c0PmrJqrNxz5J7Eluriphly5aZiDy2 i+n7RPTPPTWKqsi/atWqkpeXJ48ePZLTp0+btIxrV5g0DISMGDFCWrVqZQLQb9++qeNGFTGHDx82 oLVs2TIAikTl/fv3Tfnw4UOQyCSItElMgkrEJjA5EnySxKxdu7Yp7dq1Ewp1VghYT548KePHj7dV ao6qiJkzZ44Bpnfv3uaN7tmzp5Afcylv3ryRy5cvy7lz5+TSpUvy48cP2b17t8tbONGlMvIHOApC grFTp04madmoUSNp0KCB1K9f34wCMsxVqlQx5o+25MW+f/9uMsuMIpKiEEFC8+nTp2b54NWrV06A S7cSlcSEHxpwebv/b6KemFQJYf2FEUZhtFWqVEnevXsnr1+/lps3b5r1m1TvkY7rKyQxzZs3l1Gj Rsno0aNLnaN+/fplyEkHsKnqrFDE4IktWLBABg8eHOBCFtountmlANZrWDbANcfBwLvTJqqIwZ3F NS6P9OjRQxYvXmzMFQQwGpjo7927Z3SybwBh3d+6zjgWEKRRVLnLeFR79+6VM2fOJLzQBah9+/aV lStXmpVLdOCRsaR8/PjxUjEfN26cTJ06NdgzUGrjDH+pihi7HMzEfOTIERNnsDumtOVhVi83btxo AkpIuXbtmuzatcuMlkSwxAWfO3eudO/ePZHmGWujihjIYNIGLCsEgJi3O3fumHiE6B+viiOrl4sW LZI+ffoIaZXr16/Lhg0b7KXBkSC1Y8eOUrlyZXn+/LncunXLzDtBAxFZsWKFKnJUEUPkn5+fb7YX 9e/f35iosnawMLGzbYm9ZatXr44ZKWQQ5s+fX8wzY9fMnj17YuIjXoa1a9eqMWvqiAm/xXhPvO0k HinEJJguWwDz58+fxtQxNx07diy4fPr06TJ58mTzGWcg7JHhjWEeN23aZOYzexFzzqxZs+zHrB5V eWVRJOz+MFIqFy5ciH5tth4xL5EdCJPCSIEUm6JBT1ggHLO2ZMkS473ZzAI6Jk6cqGKfmU5fMYxi nHMieUhBoi425ou5iXknSgrtqcNR4Dh79uyYTYNRXXFun/bqv5aY8NKAjVFAC9NH6gUTV5ZADgR3 6dIlaBrWFVRm4aTCEYP3BeCJCiOradOmQXNPTADFfydE5IkK6X4rzBlWmDtKMl/2++iRtuH2WlYz VY2YgoICGTlyZEJpEuIRK+3bt7encX8dEDQo4SSsC89Pg6gihphl6dKlZn/ypEmTpEOHDnFJCoNJ OyvsRSZzkKjQNrx/OWzWEtWRjnaq3OVDhw7JsGHDhLS9jSeYL4j68ZZYo2dFkhI2OSQmrWCWDhw4 YDICxCulCe40ba0pwySyUUODqAswyfaSlBw+fLh07drVLCmXBBQBIxE/AgH79u0z+TXbltQ/bnM8 ciBl69atMdE/pJChTsSjs/dJ11HViOEhAZxg0gaUmDdMFT9UwhUm2ifyZ/cL6RtiGa7hB0gXL14M fqRE0Ejqf8aMGdKwYcMY/DBfjBR7D/tlmzZtzDX2czaP6kZMMmDgga1bt86QxTnJyTVr1sSowDzh QkMsQhYB02jNV0xjEZNpHjNmTLQ645//amJAq1evXrJ8+XIDHKOHDDO/Eov3875EEGYZINvkqPLK EgEt2ubKlStm1yb1OAosFbM+U9YmPkbSkCFDZMqUKVGVZj3nxIkTxeozWaFujinPw+/cuVPYXjtg wADjEBB8zps3zyQy7969K7bgyeEOU6z3x/3q1q0rO3bsiLk1mwAxd2PHjo2pz9QHVaZs/fr1cuPG jXI9O97XwoULzVoOCphz2KpUmuAc4DjQlkW67du3F2tOkjMb5OQVFBT8U6w3WaoYNGiQCQ4fP36c dA94u/HE8Lj4uTlEATxuMeAjtOGcesyeJYZ6Epl4e1FPjW206AuvqibduXJcoIoYNoOzCx8zw7nd RJ7Mc7FH4NSpU4YYMseYNUtGlCirl+/jkUO6Z8KECWWOPqvL1VGVKWNCxqwQn1hJdrc/+5nDf13S r18/sycgkW1K3Bcijx49Ktu2bTNu9qpVq0xayI462690H1URYx8WggCJkgig9jp75O0nnY8Z4zwZ seRcvXpVGC0QFU7/JKMrlbYqiYk+EOQwZ0AYwjFcwu0hIlwgh5KMWHK4Lhuk0Nf/bEYyPc9wW8xI Jk2JdQoyec8opH99gBl9IFefs0kKz+CJccWkYz2eGMeAulLniXGFpGM9nhjHgLpS54lxhaRjPZ4Y x4C6UueJcYWkYz2eGMeAulLniXGFpGM9nhjHgLpS54lxhaRjPZ4Yx4C6UueJcYWkYz2eGMeAulLn iXGFpGM9nhjHgLpS54lxhaRjPZ4Yx4C6UueJcYWkYz2eGMeAulLniXGFpGM9nhjHgLpS9y9BjyDx r+DRaQAAAABJRU5ErkJggg== --001a113dcdca3a15ad052ff384e6--