<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Apache restart ist nicht notwendig- wozu auch?<div class=""><br class=""></div><div class="">Viele Grüße, Andreas</div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 18. Mar 2018, at 13:59, Frank Richter <<a href="mailto:frank.richter83@gmail.com" class="">frank.richter83@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">
<div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">Hallo Michael,</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">versuch's mal damit:</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><span class="gmail-il">git</span><span class=""> </span>fetch origin pull/659/head:auth</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><span class="gmail-il">git</span><span class=""> </span><span class="gmail-il">checkout</span><span class=""> </span>auth<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">composer update</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">cd etc</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><div class="">sudo mv volkszaehler.conf.php volkszaehler.conf.backup.php</div></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><div class="">cp volkszaehler.conf.template.php volkszaehler.conf.php</div></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">sudo nano volkszaehler.conf.php</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">1) falls erforderlich, DB-Einstellungen und -Passwort wieder anpassen<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">2) Firewallregeln checken (im Lieferzustand ist im lokalen Netz alles erlaubt, von Remote geht lesender Zugriff (GET) ohne, alles andere nur mit Login)<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">3) bei 'secretkey' ein paar zufällige Zeichen einsetzen (= salt)<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">4) bei 'user' => 'pass' eigene Zugangsdaten eintragen (oder nur mal kurz testen und dann die Zeile löschen/auskommentieren, falls kein HTTPS vorhanden ist!)<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><div class="">systemctl restart apache2<br class=""></div></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">zurück zum Stand vorher geht es mit:</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class=""><span class="gmail-il">git</span><span class=""> </span><span class="gmail-il">checkout</span><span class=""> </span>master<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">mv volkszaehler.conf.backup.php volkszaehler.conf.php<br class=""></div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:12.8px;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial" class="">systemctl restart apache2<br class=""></div><br class="gmail-Apple-interchange-newline">
Viele Grüße<div class="">Frank</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">Am 18. März 2018 um 13:29 schrieb Michael Koch <span dir="ltr" class=""><<a href="mailto:princemichi@gmail.com" target="_blank" class="">princemichi@gmail.com</a>></span>:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF" class=""><p class="">Hallo alle zusammen,</p>
ich muss euch noch mal fragen wie ich das ganze testen kann.<br class="">
Kann mir jemand noch mal kurz zusammen fassen, was ich tun muss um
den PR <span class="m_-5605034997854828571js-issue-title">"Add basic login capabilities </span>
<span class="m_-5605034997854828571gh-header-number">#659" auszuprobieren?</span><br class="">
<span class="m_-5605034997854828571gh-header-number">Sprich: Was miss ich an git befehlen
ausführen und wie muss ich die config ändern? Außerdem habe ich
etwas von einem salt in Erinnerung.</span><br class="">
<span class="m_-5605034997854828571gh-header-number">Ich habe in der zwischenzeit meinen
Server auf PHP7 geupdatet und möchte jtzt endlich weiter machen -
entschuldigt das ich so lange benötigt habe.</span><br class="">
<span class="m_-5605034997854828571gh-header-number">Ich weiß, dass andi mir auch schon
mal geschrieben hat - ich finde diese infos aber nicht mehr.</span><p class=""><span class="m_-5605034997854828571gh-header-number">Danke,</span></p><p class=""><span class="m_-5605034997854828571gh-header-number">Michael<br class="">
</span></p><div class=""><div class="h5">
<br class="">
<div class="m_-5605034997854828571moz-cite-prefix">Am 22.01.2018 um 23:48 schrieb Frank
Richter:<br class="">
</div>
<blockquote type="cite" class="">
<div dir="ltr" class="">Hi Frank,
<div class=""><br class="">
</div>
<div class="">im lokalen Netz juckt dich das alles nicht. Das einzige,
was du machen musst, wenn der PR gemergt ist, ist beim
nächsten Update (git pull) deine volkszaehler.conf.php auf den
aktuellen Stand zu bringen. Ansonsten ändert sich nix für
dich.</div>
<div class=""><br class="">
</div>
<div class="">Tokens generieren geht mit misc/tools/token-helper.php,
wenn du das doch mal brauchst.</div>
<div class=""><br class="">
</div>
<div class="">Grüße</div>
<div class="">Frank</div>
</div>
<div class="gmail_extra"><br class="">
<div class="gmail_quote">Am 22. Januar 2018 um 23:30 schrieb F.
S. <span dir="ltr" class=""><<a href="mailto:mailing3000@googlemail.com" target="_blank" class="">mailing3000@googlemail.com</a>></span>:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="auto" class="">
<div class="">Hallo vz-ler,</div>
<div dir="auto" class=""><br class="">
<div dir="auto" class="">und Danke Justin für die gute
Zusammenfassung! Ich bin softwaretechnisch nicht so
fit wie Ihr, aber jetzt verstehe ich die wichtigsten
Zusammenhänge.</div>
<div dir="auto" class=""><br class="">
</div>
<div dir="auto" class="">Also wenn im LAN kein höheres
Sicherheitslevel platziert wird, wäre ich sehr dafür.
Ich gehe von außen nur per VPN rein.</div>
<div dir="auto" class="">Wenn mir noch jemand ein Tip gibt, wie
man sich denn die Token generiert, wäre ich auch damit
einverstanden.</div>
<div dir="auto" class="">Bei mir fliegen die Cookies übrigens
auch nach jeder Firefox-Sitzung raus.</div>
<div dir="auto" class=""><br class="">
</div>
<div dir="auto" class="">Btw - wer zahlt eigentlich aktuell den
Server? Gibt es eine Möglichkeit, Euch finanziell zu
unterstützen? Ihr investiert hier derart viel Zeit,
dass einem ganz unwohl wird. Vielen Dank dafür! Viele
wissen das zu schätzen.</div>
<div dir="auto" class=""><br class="">
</div>
<div dir="auto" class="">VG</div>
<div dir="auto" class="">Frank S.</div>
<div class="">
<div class="m_-5605034997854828571h5"><br class="">
<div class="gmail_extra" dir="auto"><br class="">
<div class="gmail_quote">Am 22.01.2018 10:44
nachm. schrieb "Justin Otherguy" <<a href="mailto:justin@justinotherguy.org" target="_blank" class="">justin@justinotherguy.org</a>>:<br type="attribution" class="">
<blockquote class="m_-5605034997854828571m_4835487412324640501quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br class="">
<br class="">
Puh - ich versuch mal zusammenzufassen, was
ich verstanden habe:<br class="">
<br class="">
- derzeit gibt es (alt) keine Auth, sondern
nur eine UUID, mit der alles möglich ist; das
ist doof, weil jeder der die UUID alles tun
kann<br class="">
- neu gibt es - Andreas sei Dank - die
Möglichkeit, sich per User+Pwd zu
authentisieren<br class="">
- das ist eine Option, die man - zB für einen
Betrieb im LAN - auch ungenutzt lassen kann<br class="">
<br class="">
Korrekt soweit?<br class="">
<br class="">
<br class="">
Frage: welche Optionen soll es künftig geben?<br class="">
<br class="">
Nach meinem Verständnis hat man heute doch
folgende Hierarchie:<br class="">
<br class="">
- User+Pwd stehen ganz oben - daraus kann man
sich alles weitere generieren<br class="">
<br class="">
- zB einen Token (vgl. API-Key/secret oder …)
für den Zugriff<br class="">
- welche Berechtigungen mit diesem Token
einhergehen, lässt sich im Prinzip
konfigurieren<br class="">
- ich könnte mir also mehrere Tokens
erstellen, die unterschiedliche Berechtigungen
haben:<br class="">
- read-only für mein Display (oder zur
Weitergabe an Leute, die die Datenreihe auch
sehen können sollen)<br class="">
- read-write für meinen Sensor<br class="">
- …<br class="">
- die Tokens kann ich jederzeit widerrufen
oder die Berechtigungen anpassen<br class="">
- das Token hat keine feste Gültigkeitsdauer;
potenziell zeitlich unbegrenzt<br class="">
<br class="">
<br class="">
- ganz unten in der Kette gibt es das Cookie<br class="">
- dieser wird aus dem Token generiert und ist
Client-spezifisch<br class="">
- bei einem Neustart des Clients wird dieser
ggf. gelöscht oder ungültig gemacht<br class="">
- dann muss er - aus dem Token oder User+Pwd -
neu erzeugt werden<br class="">
<br class="">
Soweit immer noch korrekt?<br class="">
<br class="">
<br class="">
Wir haben im Moment ein Token, welches im
Cookie abgelegt wird. Da müssen wir uns nach
meinem Verständnis entscheiden, ob wir wollen,
dass es sich eher wie ein Token (unbeschränkte
Laufzeit, Client-übergreifend) oder eher wie
ein Cookie (beschränkte Laufzeit,
Client-spezifisch) verhält.<br class="">
<br class="">
<br class="">
Egal welche Ebene (User+Pwd, Token, Cookie):
solange diese gültig sind, sollte ich auf
diese gut aufpassen. Sind sie in falsche Hände
geraten, können sie missbraucht werden und
sollten daher geändert/ungültig gemacht
werden.<br class="">
<br class="">
<br class="">
Konkret:<br class="">
- für vzlogger würde ein Cookie nicht
ausreichen - der bräuchte einen Token, der
dauerhaft gilt.<br class="">
<br class="">
- wenn ich Token oder Cookie lösche oder
ungültig mache, muss ich es neu erzeugen
(Eingabe User+Pwd)<br class="">
<br class="">
- „Token aus dem Cookie auslesen“: ergibt für
mich keinen Sinn (vllt. habe ich etwas falsch
verstanden); entweder wir unterscheiden nicht
- dann können wir hin- und herwandeln (bzw.
-kopieren) oder wir unterscheiden - dann aber
kann man aus dem Token zwar das Cookie
generieren, aber nicht umgekehrt<br class="">
<br class="">
- „Token ungültig machen“ - kommt m.E.
ebenfalls daher, dass wir nicht zwischen Token
und Cookie unterscheiden; anderenfalls könnte
man Tokens (die dann Server-seitig gespeichert
würden) ungültig machen - Cookie hingegen
nicht:; durch die begrenzte Laufzeit wäre das
aber auch tolerierbar<br class="">
<br class="">
<br class="">
Frage:<br class="">
Sind die Tokens derzeit Kanal-spezifisch?
Also: gilt ein Token immer nur für einen Kanal
oder kann ein Token (so wie User+Pwd) auch für
mehrere Kanäle berechtigt sein?<br class="">
<br class="">
<br class="">
Mein Vorschlag:<br class="">
- (weiterhin) keine Unterscheidung zwischen
„Auth-Code in Cookies" und „Tokens“; ein Token
kann auch per Cookie übermittelt werden<br class="">
Das würde das Thema nur aufblähen, ohne
einen deutlichen Gewinn (ich lass mich vom
Gegenteil überzeugen - eine Unterscheidung
wäre m.E. sauberer)<br class="">
<br class="">
- Tokens können mit Berechtigungen versehen
werden (read only/read-write/write-only?/we<wbr class="">itere?)<br class="">
<br class="">
- jedes Token kann für mehrere Kanäle
berechtigt werden; wenn wir das gebaut
bekommen: auch unterschiedlich: Token A darf
Kanal n lesen und Kanal m schreiben; vermtl.
ist das aber verzichtbar, weil anderenfalls in
vzlogger eben für jeden Kanal ein separates
Token mitgegeben wird - auch kein Beinbruch,
oder?<br class="">
<br class="">
Damit hätten wir:<br class="">
- weiterhin die Möglichkeit, alles so zu
belassen wie bisher (zB LAN-Installation)<br class="">
- die Möglichkeit, Daten Read-only weiter zu
geben<br class="">
- die Möglichkeit, einzelne Kanäle auch vor
lesendem Zugriff zu schützen<br class="">
- ggf. write-only Kanäle zu bauen<br class="">
<br class="">
Was meint Ihr?<br class="">
<br class="">
<br class="">
Gruß, J.<br class="">
<div class="m_-5605034997854828571m_4835487412324640501elided-text"><br class="">
<br class="">
> Am 21.01.2018 um 16:59 schrieb Andreas
Goetz <<a href="mailto:cpuidle@gmail.com" target="_blank" class="">cpuidle@gmail.com</a>>:<br class="">
><br class="">
> Hallo,<br class="">
><br class="">
>> On 21. Jan 2018, at 15:50, Daniel
Lauckner <<a href="mailto:vz@jahp.de" target="_blank" class="">vz@jahp.de</a>>
wrote:<br class="">
>><br class="">
>> Hallo,<br class="">
>><br class="">
>><br class="">
>> am Sonntag, 21. Januar 2018 um
15:42 hat Frank Richter geschrieben:<br class="">
>>> Wer seine Cookies löscht, muss
sich halt danach im Frontend neu<br class="">
>>> anmelden, aber das ist ja bei
anderen Seiten nicht anders.<br class="">
>><br class="">
>> Ja, und es nervt.<br class="">
><br class="">
> Dann tu’s nicht :)<br class="">
><br class="">
> Wie Frank schrieb:<br class="">
><br class="">
>> Aber wenn du nichts an der
Standardconfig änderst, sind GET-Requests eh
nicht betroffen, du wirst also beim normalen
Zugriff aufs Frontend nicht von einer
Passwortabfrage behelligt.<br class="">
><br class="">
> Also kein Problem. In der Diskussion
ging es darum wie man den Zugriff von außen
vernageln kann und trotzdem noch mit
vzlogger reinkommen.<br class="">
><br class="">
>><br class="">
>> Kann man User/Passwort auch mit der
URL übergeben?<br class="">
><br class="">
> Nein, sicher nicht. Weil das Passwort
bei absolut jedem Proxy im Logfile landen
würde.<br class="">
><br class="">
> @Frank: Cookie geht jetzt auch:<br class="">
><br class="">
> // authorization
header?<br class="">
> if (($header =
$request->headers->get('Author<wbr class="">ization'))
&& (0 !== strpos($header, 'Bearer
'))) {<br class="">
> $jwt =
substr($header, strlen('Bearer '));<br class="">
> }<br class="">
> // authorization
cookie?<br class="">
> elseif ($cookie =
$request->cookies->get('vz_aut<wbr class="">htoken'))
{<br class="">
> $jwt =
explode('@', $cookie)[0]; // split
@middleware portion<br class="">
> }<br class="">
> else {<br class="">
> throw new
\Exception('Missing authorization token');<br class="">
> }<br class="">
><br class="">
> Ich schiebs bei Gelegenheit in den PR.<br class="">
><br class="">
><br class="">
>> Anpassung des Installscripts bzgl.
Firewall-Einstellungen sollten wir dann auf
die Agenda setzen. Zusätzlich sollten wir
diesen Part vielleicht als Extra-Script
liefern, damit die Image-User sich das
passend konfigurieren können, ohne das
komplette Installscript nochmal
durchzuackern. Das Image sollte dann am
besten ohne eingetragenen secretkey
geliefert werden, oder?<br class="">
>> Aus meiner Sicht damit “fertig”.<br class="">
><br class="">
> Brauchen wir egtl. alles nicht. Der
interne Zugriff geht auch ohne, extern
sollte man überlegen was man da tut.<br class="">
><br class="">
> Weil ich im PV Forum gesehen habe: wenn
irgendwer mit HTTP 500 ankommt lautet die
Frage immer was in
/var/log/apache2/error.log steht- das kann
man dann auch hier zur Diagnose gebrauchen.<br class="">
><br class="">
> Damit aus meiner Sicht “fertig”.<br class="">
><br class="">
>><br class="">
>> mfg Daniel<br class="">
>><br class="">
><br class="">
> Viele Grüße, Andreas<br class="">
><br class="">
<br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</blockquote>
<br class="">
</div></div></div>
</blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></body></html>