S{o}cial
Gizmeo.eu RSS-Feed c1 auf LinkedIn c1 auf DeviantArt c1 bei YouTube Gizmeo.eu als Android-App
Komm{e}ntare
{A}rchiv

Sie sind momentan im Archiv der Kategorie JaGutÄhhh….

Lef{t}overs
GET FIREFOX!
GET THUNDERBIRD!
www . cipha . net

www . cipha . net
Please use an AMD CPU!
cell processor rox, fuck INTEL
KDE - the Ueber-Desktop-Environment!
STOP FACEBOOK!
msn user die!
aol sucks cock!
FUCK MYSPACE!
explicit content
NEIN zu Softwarepatenten
save the net! net-neutrality is important!
Aktion UBERWACH!
Cred{i}ts
Created, Made & Maintained by AETHYX.EU

Archiv für die Kategorie „JaGutÄhhh…“

this. is. sparta! oder: wider dem cpu-capping

Aus einem mir unerfindlichen Grund war ich bis heute geplagt mit AMD-CPU-Capping. Unter Vollast und/oder bei CPU-Temperaturen von 70C+ ging die Frequenz unter Linux einfach runter auf 399MHz. Und blieb dort. Bis zu einem Reboot.

Serious!?

Ja, ernsthaft. Und das Problem hat mich nun 80+ Tage beschäftigt. Oder eben zu selten gekümmert.

AMD@7nm(12nmIOD)@Zen2@Rome@EPYC_7702_ES@2S1404E2VJUG5_BB_ES___DSCx18_CCD_polysilicon@20xNIC
Oben: AMD Zen2 CPU: Epyc 7702 – 64-Kerne, 128 Threads, 200W

Stellt sich heraus, ich konnte wohl ein wichtiges Modul bzw. einen ASUS-Kernel-Patch nicht nutzen:

modprobe -v asus-nb-wmi
insmod /lib/modules/5.8.11-1-linux/kernel/drivers/input/serio/i8042.ko.xz
modprobe: ERROR: could not insert ‘asus_nb_wmi’: No such device

Bei mir gab es unter /sys/devices/platform/ einfach keinen Ordner asus-nb-wmi. Und der hätte ab Kernel 5.6.x wohl genau dort sein sollen. Da kann ich modproben, bis ich schwarz werde.

Was tun? Wir sind mit Internet nie alleine, zum Glück auch nicht mit Problemen, so fand ich die selbe Issue vom selben Hardware-Hersteller für ein anderes Modell, https://lab.retarded.farm/zappel/asus-rog-zephyrus-g14/-/issues/9. Man solle einfach i8042.nopnp als Kernelparameter dem GRUB hinzufügen und rebooten. Was ich tat.

Das erste Erfolgsgefühl hatte ich dann beim erneuten Modproben: keinerlei Fehlermeldung. Okay, sehr cool! Natürlich wollte ich danach wissen, ob der Ordner nun da ist: und auch der asus-nb-wmi war nun vorhanden (logisch, aber egal), inklusive Inhalte. Nice!

Wirklich etwas von der Kiste gefordert hatte ich da noch nicht, also wieder den BOINC-Client gestartet – meines Wissens „der ultimative Stresstest“ für jede CPU/GPU. Hier hatte ich auch immer wieder die Erfahrung gemacht, dass die CPU einknickt. Und tatsächlich: jetzt ist 18:00 und seit dem Mittag läuft meine CPU, eine AMD Ryzen 7 4800HS, unter Vollast mit erwartbarer dynamischer Frequenz und auch mit Temperaturen Ü70C (aktuell locker 90C, offiziell verträgt er wohl 105C).

W00t!

Nun, egal. Selbst Schuld, bleeding edge hardware gekauft zu haben… ¯\_(ツ)_/¯

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

(a)soziale netzwerkartefakte

Für ein Projekt musste ich mich auf Web-Bildersuche für Dateien größer als 5MB begeben. Dabei fiel mir eine uralte Share-Leiste ins Auge, wie u.a. wir Blogger sie um 2004 herum manuell noch in unsere (X)HTML-Webseiten gepflegt hatten:

(a)soziale Netzwerke, Stand 2003

Damals war nicht abzusehen, dass es mal _die_ Webseuche überhaupt werden würde. Davon abgesehen war ebenfalls unwahrscheinlich, dass diese Idee mal zu unkontrollierbaren Mega-Corporations führen würde.

Mir fiel auf, dass die Icons hier nach Popularität bzw. Nutzung geordnet sind. Das bedeutet, dass Twitter damals noch populärer als Facebook oder Reddit war. Besonders bemerkenswert fand ich digg auf Platz 4.

Was ist aus diesen ganzen Pionieren der (a)sozialen Netzwerke geworden? Ich begab mich auf Recherche…

digg.com – entgegen meinen Erwartungen existiert die Domain wie auch das Projekt noch. Geschrieben in Python, wird es im Dezember stolze 16 Jahre alt. Da man damit Webinhalte nicht nur teilen, sondern auch bewerten konnte, entstand sogar ein eigener Neologismus dafür, das sogenannte digging. Du diggst nach unten, der Link war Käse. Viele Diggs nach oben zeigten einen populären Inhalt, den du unbedingt lesen musstest. 2010 ging das Redesign in die Hose, zwei Mitgründer verließen das Projekt und 2012 wurde es filetiert, Marke, Website und Technologie wurden für nur 500.000$ verramscht. Heute ist es ein Produkt von „BuySellAds“ und der Name ist ab 2018 Programm: vom Aggregator-Pionier ist nicht viel geblieben, die Website erinnert heute eher an eine virtuelle Bildzeitung.

Google+ – brauchen wir wohl nicht viele Worte verlieren, der Sozial-Media-Konkurrent aus dem Hause des „Big G“ wurde im April 2019 für immer geschlossen. Sogar mehrere Monate früher als geplant. Obwohl es als das innovativste und mit komplexeste der sozialen Netzwerke galt, wurden offiziell Sicherheitslücken und Designfehler als Gründe angegeben. Inoffiziell konnte sich ein halbwegs intelligentes soziales Netzwerk einfach überhaupt nicht durchsetzen. Die Schließung dieses Projekts sollte man auch als Mahnung verstehen – das Web ist im Eimer. Selbst Google hatte keine Chance den Karren mehr aus dem Dreck zu ziehen.

Yahoo! Groups – wird sogar erst Ende des Jahres offiziell gekillt. Allerdings kann man keine neuen Inhalte mehr seit über einem Jahr einstellen. Pionier war man hier in der Verlagerung von elektronischen Mailinglisten ins Web. Ein großer Pluspunkt (aber auch Kritikpunkt) war das Fehlen jeglicher Moderation der Inhalte. Es hatte die Möglichkeit eines der größten Diskussionsforen im Web zu werden und zeitweise war es genau das: 2008 hatte man fast 120 Millionen User in 22 Sprachen vorzuweisen. Verizon zieht am 15. Dezember endgültig den Stecker.

del.icio.us – vielleicht eines der legendärsten „Social Networks“. Ein Hauptproblem bei der Größe des WWW ist es den Überblick zu behalten. Del.icio.us löste das clever indem es die Möglichkeit bot, Lesezeichen zu teilen. Was erstmal wenig revolutionär klingt hat in der Anwendung dazu geführt, dass es sich zum Über-WWW-Kurzzeitgedächtnis entwickelte. Besonders als Onlineautor ein legendäres Feature. Weiteres Killer-Feature: wer del.icio.us-Nutzer war, der brauchte kein Twitter. Auch zeitlich lag man beim Start 2003 fast richtig mit dem Timing zum überflüssigsten Web-Marketing-Phänomen EVER, dem „Web 2.0“. Heute ist nicht einmal mehr die Domain aktiv. Die vielen Besitzerwechsel führten zwischenzeitlich auch zu Komplettlöschungen von Links und Nutzerkonten. Selbst Yahoo! hatte 2005 keinen Bock mehr auf das Projekt. Danach war es faktisch tot, egal wer noch kam.

StumbleUpon – bedeutet übersetzt so viel wie „darüber stolpern“. Worüber Webnutzer immer stolpern, egal was sie machen, sind Links zu anderen Webseiten. StumbleUpon wollte daraus Kasse machen. Ich bin nicht sicher, ob ihnen das je gelungen ist, dennoch kam eBay 2007 und kaufte das Teil für 75 Millionen US-Dollar. StumbleUpon ist das perfekte Beispiel, warum auch die „Web 2.0“-Blase irgendwann platzen musste. Offline seit 2018, existiert eine der Grundideen heute noch als Browserplugin namens „Mix“.

Play-Icon trifft auf Kreis-Icon – auch wenn ich dieses „soziale Netzwerk“ nicht kenne möchte ich es dennoch als gutes Beispiel für die damalige Webzeit nicht unkommentiert lassen. Im Kern wussten wir bis auf wenige Ausnahmen nämlich nicht, woher plötzlich alle diese kleinen, nutzlosen Icons kamen und was der Scheiß eigentlich sollte. Wir haben, tatsächlich, einfach irgendwelche Code-Snippets in unsere Webseiten eingebaut, entgegen unserem Sicherheitsgefühl und unserer Vernunft, weil dieses „Sharing is caring“ war einfach überall. Es war beängstigend und eine eklige Zeit, mit am Ende auch ziemlich ekligen, exploitenden Produkten. Ich will hier auch nicht in die Tiefe gehen, weil zum Glück ist „Web 2.0“ lange tot. Doch es zeigt uns am Ende sehr gut, dass, selbst wenn wir gewollt hätten, niemand ein (a)soziales Netzwerkphänomen wie Facebook oder Twitter hätte verhindern können. Es war auf einmal „plötzlich da“. Wie das Internet generell.

Technorati – das letze Icon hier war wahrscheinlich das komplizierteste der (a)sozialen Netzwerke. Um das Konzept Technorati zu verstehen, brauchte man ein Handbuch. Nur leider druckt sich nicht eben jemand mal schnell ein kleines Internet aus. Es wollte unbedingt eine Suchmaschine sein, war aber keine, die diese Definition verdient hätte. Man konnte seine Website hier anmelden und verstand dann hinterher nicht, was das vielschichtige Admin-Interface einem eigentlich sagen will, geschweige warum man seine Seite hier angemeldet hatte. Natürlich versuchte man auch Displayanzeigen an die Konsumenten zu bringen. Die Komplexität und oberflächliche Sinnlosigkeit machten das Produkt allerdings sehr interessant und vielversprechend; alleine der Name war ein Kofferwort aus Technologie und Literati, was intellektuell wirken sollte und manchmal sogar funktionierte: denn selbst 2016, lange nach dem Hype um Aggregatoren, Link-Sharer und Status-Update-Fanatik-Bots (sprich „Web 2.0“) ging das Projekt für 3 Millionen an einen anderen Besitzer über. Die Domain gibt es heute noch, das Projekt (leider?) nicht mehr. Ich würde mich allerdings nicht wundern, wenn wir ein paar von den damals überfrachteten und sinnlosen Features irgendwann wiedersehen werden als eigenständiges Webprojekt, denn ganz ehrlich, hier war man vordergründig und hintergründig der Zeit voraus.

Fazit: die „Nullerjahre“ waren schwierig für das Web, für Content-KreatorInnen genauso wie für bloße KonsumentInnen. Es war rückblickend eine recht unverständliche Zeit, zu der man sich außerhalb der USA die Hintergründe irgendwie zusammenrecherchieren musste; was einfach war für Nutzer, die der englischen Sprache mächtig waren und schwierig für alle anderen. Man fragte zu wenig „wozu das alles?“ und „machte einfach mit“ (Mitläufer-Phänomen), oft waren die Code-Snippets generell verseucht und stellten große Sicherheitsrisiken dar, wenn wohl auch ungewollt und größtenteils unwissend.

Gleichzeitig war es die Zeit des ersten wirklich großen WWW-Marketing-Hypes, man stellte das „Sharen“ als das nächste „große Ding“ dar, was es ja dann auch wurde, und erfand sogar einen eigenen Begriff, um sich gegen alles Vorherige abzusetzen, „Web 2.0“. Vielleicht war es rückblickend „das erste große künstliche Ding“, den zuvor hatte man als Technikbegeisterter irgendwie das Gefühl, es würde alles einigermaßen sinnvoll aus- und zusammenwachsen hier drin. Gerade in dieser herbeigelogenen „Weiterentwicklung“ lag vielleicht aber auch das größte Problem und der größte Betrug. Beste Beispiele hier sind Technorati, del.icio.us oder Google+ – alles Web-Produkte mit großem Potenzial, jedoch unverständlich und nicht einfach genug für die Massen.

Überhaupt Massen, ein nicht zu unterschätzender Faktor: wie damals so bewegen wir uns heute auf einem völlig unbekannten Terrain, da wir mit noch keiner Technologie dermaßen viele Menschen rund um die Uhr erreichen, begleiten und leider auch manipulieren und verkaufen konnten. Die US-Wahl 2016 mag ein gutes Beispiel hier sein, was (a)soziale Netzwerke anrichten können, wenn man negative Auswirkungen hier anführen möchte, oder auch das Cybermobbing. Viele Fragen hier werden auch eventuell zu einem Generationenproblem und nicht innerhalb weniger Jahre oder nur einer Dekade gelöst werden können. In Europa hält man mit der DSGVO faktisch erst seit wenigen Jahren aktiv gegen; es könnte bereits zu spät sein.

Und hiermit endet mein historischer Ausflug, in die „Nullerjahre“ wie in die Zeit der „Social-Media-Icons“. Es ist unschön noch heute Websites zu finden, die solche Leisten anbieten. Dennoch hat mich dieses kleine, sinnlose Netzwerkartefakt zum Nachdenken wie zur Erstellung dieses Textes gebracht. Ich bin froh, dass wir diese Zeit hinter uns haben. Peinlich ist mir, ein Teil davon gewesen zu sein. Ich kann damals auch schon spät drangewesen sein, doch seitdem sehe ich eigentlich für das WWW nur noch schwarz. Ich denke nicht, dass wir diese dämlichen Erfindungen wieder wegbekommen werden. (A)soziale Netzwerke – für mich sind sie die technologische Immunschwächekrankheit, an der das Web krepiert.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

influenca

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

Rede nicht mit ihr, denn sie hat eine schreckliche Krankheit/
sie postet lieber drei Tage Kinderzimmer als einen Tag in Frankreich/
nee, die Sprache kann sie eh nicht, doch schreibt sie einen Track darüber/
der sich nicht mal reimt, wenigstens bucht sie später bei Über/
ein Track für’s Radio, eigentlich ist sie gar nicht so, genießt nur ihr Smartphone/
sie hat Fans, Millionen Follower, alle gekauft im Darkweb, doch sei’s drum/
sie kann gut, sehr gut auf Zehenspitzen gehen und auch wenn/
sie keinerlei Talente hat wollen es in sozialen Medien Millionen sehen/
ist doch fast wie Fernsehen! Sagt ihre Oma auch, sie fotografiert gerne für/
Hardcore-GILF-GIF-Videos mit Opas Feuerwehrschlauch. Er holt ihn raus/
oh nein, sie nimmt gerade auf und Papa kommt rein/
er sagt Mama hat ihn heute verlassen wegen der Tochter ihrer Dummheit/
Oma rennt, Opa pennt, Mama ist weg und Papa schreit/
es klingelt die Tür und das Telefon zur selben Zeit, weil mal wieder Polizei/
der Wachtmeister bekommt von ihr einen BJ zwischen Angel und Tür/
ihr Nick im Internet ist BJAlice02, jetzt weißt du wofür/

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

Heute wurde er 17, das muss heftig gefeiert werden/
Frühstück, Mittagessen, Abendessen, Hormone, denn er will ein Mädchen werden/
seit kurzem postet er seine Fortschritte in einem Vlog/
mit glatter Haut und dicken Titten klappt es mit Followern wie/
ist auch egal. Im Texten war er nie die Leuchte, hat die Schule schon geschmissen/
Was er werden will, keine Ahnung, das fragt sein Jugendberater auch/
er gehe lieber shoppen mit Hartz IV, weil seine Mutter nicht arbeiten braucht/
er liebe immer noch Deutschland, früher mit Flagge und Glatze frisch rasiert/
heute mit blauen Kontaktlinsen und blondierten Haaren für die kastrierten Massen/
wozu sich Gedanken machen, alles läuft doch wie es soll/
er ist noch nicht sicher, ob er ihn sich abnehmen lassen soll/
denn wenn er hart wird, und er sich damit zwischen die Titten spritzt/
ist er froh, wenn er es noch schafft bevor er kommt auf Record zu klicken/
doch meist gelingt ihm das nicht, dann spritzt er sich ins Gesicht/
Gott, er liebt sein iPhone, hat ihn letztes Jahr nur die Niere gekostet/
sein Nick ist Trafica03.com, ihn hat das Internet verhorstet/

Influenca – geh‘ mir bitte aus der Sonne, du bist ansteckend/
Wie ein Virus, den Dreck, den du verbreitest, ist das anstrengend/
Influenca – wieso werden das immer mehr behinderte Kinder/
Warum haben eure Eltern nicht verhütet, was hat ihre Aufklärung verhindert/

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

die secure-boot-seuche III

2012/2013 war Secure Boot ein megaheißes Thema. So dermaßen heiß, dass ich sogar in meinem Feedreader zweistellig zählen konnte, siehe hier.

2020 ist dieses Rotzthema immer noch nicht tot.

Wie ist das möglich?

Gestern ein Update für das mitgelieferte Windows 10 auf einem Laptop gemacht, das berüchtigte Update 2004 vom Mai. Ich weiß nicht wieso, wohl aus Laune heraus oder weil ich einfach ein System wollte, wo ich nicht dauernd darauf hingewiesen werden möchte, dass es nicht 100% aktuell ist. Ich hätte es lassen sollen, denn ich verlor meinen GRUB.

Bootet anschließend Linux, bekam ich das hier heraus:

Welcome to Grub!
error: unknown filesystem.
Entering rescue mode…
grub rescue>

Jop, das war’s dann. Kein Linux will mehr booten. Und das mit ausgeschaltetem Secure Boot, ausgeschaltetem Fastboot _und_ dem manuell ausgewählten EFI-Eintrag im mitgelieferten BIOS-Interface.

Mit ls geht dann das Debugging los. Irgendwas mit (hd1,gptX) spuckt das System dann aus. Bei mir waren das 10+ Einträge. Jeden durchgehen, mit englischsprachigem Tastaturlayout, kurz vor Mitternacht, wo hängt mein verschollenes root herum?

Als es dann gefunden war, erst einmal /home gefunden, geil! Nix bootet. Glücklich war ich dann dennoch, denn irgendwie ist mein Linux ja noch da.

Da es auf einem Haussystem eigentlich nur zwei ext-Systeme geben kann wegen / und /home (oder welches Linux-Dateisystem auch immer man verwendet, z.B. reiser, etc.), hatte ich mit dem zweiten dann Glück. Mit folgenden Codezeilen brachte ich das System wieder in einen grafischen Bootzustand:

grub rescue > root=(hd1,gpt2)
grub rescue > prefix=(hd1,gpt2)/boot/grub
grub rescue > insmod normal
grub rescue > normal

Der soll dann zwar nur temporär sein, aber mir reicht das. Windows nutze ich vielleicht einmal im Schaltjahr. Dann kracht es aber richtig.

Ahhhh! Ahahahaha! Ihr Redmonder Zoophilie-Junkies mal wieder! Hatte euch schon fast komplett vergessen!

[Update I, 16.10.20]

Das mit der temporären Lösung ist einem ja irgendwann doch zu blöde, weshalb ich mir kürzlich wieder die permanente zurückerobert habe. Hier hilft es, wenn man sich zuerst mal ausgeben lässt, welche Partitionen man benutzt und wie diese heißen: lsblk -o PATH,PTTYPE,PARTTYPE,FSTYPE,PARTTYPENAME. Heutzutage wird das eher in Richtung nvmeXYZ gehen, bei älteren PCs ohne SSDs dann wahrscheinlich sda. Dann noch ein sudo update-grub, was bekannt sein sollte, sowie ein sudo grub-install /dev/sda bzw. ein sudo grub-install /dev/nvmeXYZ danach und dann „Macht’s gut, Redmond!“.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

unser strom? ihr strom!

Jedes Gadget braucht Strom, in irgendeiner Art und Weise. Manche permanent, andere temporär. Die meisten viel bis sehr viel, zu wenige wenig. Es ist wichtiger denn je, sorgfältig auszuwählen, aus welcher Quelle dieser Strom stammt.

Stichwort Atomstrom.

Als das erste Kernkraftwerk der Welt, das Atomstrom in ein öffentliches Stromnetz eingespeist haben soll, gilt Obninsk im Jahr 1954, südwestlich von Moskau. Legen wir zugrunde, dass technisch und von Alterswegen her man um die 50 gewesen sein muss, um dieses „Kunststück“ zu realisieren, ist das die Menschen-Generation ab 1904 gewesen, heute bekannt als „Greatest Generation“.

Mir ist nicht bekannt, warum man diese Vollpfosten marketingtechnisch genau so bezeichnet, haben wir ihnen nicht nur Atomkraft zu „verdanken“, sondern auch die zweite Komplettzerstörung der gesamten Welt, sowie die Zündung der Atombombe zu Lande – Letzteres so ziemlich DAS Dümmste, das du als Lebewesen machen kannst auf einem Planeten, den du selbst bewohnst. Und ohne der Möglichkeit diesen vorher verlassen zu können.

Zeitlich nun einfach visualisiert, wie viele Generationen von diesem Atomstrom bis heute, 2020, maximal „profitieren“ konnten:

II

Und nun, wie viele Generationen dafür bezahlen dürfen:

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

In Worten: Zwei. Versus. Vierzigtausend.

Vierzigtausend Generationen, das sind schlappe 1.000.000 Jahre.

Och bitte, nehmen wir Rücksicht: Hauptsache Oma und Opa hatten es warm!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

androiden, elfte generation

Weltweit soll es über 2,5 Milliarden (Stand Mitte 2019) Nutzer des auf Linux basierenden Android-Betriebssystems geben. Die Kontrolle über dieses Betriebssystem hat eine US-amerikanische Technologiefirma, die aktuell fast 324 Milliarden US-Dollar wert sein soll. Man sollte also meinen, die Veröffentlichung einer neuen Hauptversion dieses Betriebssystems, dem Kernstück auf Milliarden Geräten für Hosentaschen, muss ja faktisch mit großem Tamtam der Weltöffentlichkeit präsentiert werden.

Android & Androidesse

Was macht Google stattdessen?

Spielt Indie und veröffentlicht, auch noch auf der eigenen Blogger-Plattform, lediglich einen ranzigen Blogpost: https://germany.googleblog.com/2020/09/unkompliziert-ubersichtlich-und.html.

W00t!

Nee, ist geil! Ehrlich gemeint! Wie selbstbewusst! Und mutig.

In Coronazeiten solche Meldungen an die Konsumenten des Planeten zu bringen ist schwerer als früher. Selbst der Megakonzern Apple, größter Konkurrent auf Smartphone- und Tablet-Gebiet, musste sich dieses Jahr etwas einfallen lassen, verschickte mysteriösere Nachrichten als sonst, hält noch Events ab _und_ versteckt Easter Eggs in Form Augmentierter-Realität-Goodies. DAS ist genau die selbe Richtung, allerdings um 180 Grad versetzt. Der eigene Charakter bestimmt hier, zu welcher Seite man gehören mag und welche einem besser gefällt. Der Kapitalismus neoliberaler Prägung ist doch etwas Wundervolles!

Jüngst kam auch auch heraus, dass entwicklerintern die Süßigkeiten-Codenames weiterhin verwendet werden: Android 11 heißt dort Red Velvet Cake. Die offizielle Meldung geht eigentlich anders, hier werden seit Version 10 keine süßen Aliase mehr benutzt.

Doch was soll eigentlich nun genau neu sein in Version 11?

Wenn ich das wissen will, lese ich keine News oder Blogposts, ich schaue in die Versionshistorie auf Wikipedia. Dort steht, Neuerungen seien diese hier:

* Temporäre App-Berechtigungen
* Unterstützung von 5G-Mobilfunknetzen
* Chats bekommen einen eigenen Bereich im Benachrichtigungsmenü
* Bluetooth bleibt im Flugmodus aktiviert
* Native Bildschirmaufnahme
* Stummschalten von Benachrichtigungen bei Videoaufnahmen
* Benachrichtigungsverlauf
* Rückgängigmachen von kürzlich gestoppten Apps
* Aktueller Sicherheitspatch-Stand: September 2020

Wirklich viel ist es nicht und wirklich revolutionär Neues kann ich hier nicht entnehmen. Das ist seit Jahren auch nicht mehr zu erwarten in dem Bereich. Wenigstens keine Liste mit „Updates für Emojis“ (oje…).

Mein persönlicher Eindruck ist sowieso: mit jeder neuen Hauptversion macht es Google unabhängigen Entwicklern schwerer 1) eigene ROMs zu bauen und 2) eigene Geräte auf dem neuesten Stand zu halten. Auch fliegen mittlerweile alle Apps, die älter als 1 Jahr sind, automatisch aus dem hauseigenen App-Store, aktualisiert man hier nicht mindestens die Version, auf der diese lauffähig sein sollen.

Die Hochzeit der Smartphones ist vorbei. Dann halt wieder LEGO.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

aldi-highend in 2020

Heute gesehen bei heise.de, ein „Highend-Notebook“ mit „300Hz“ vom Gemüse-Discounter unseres Vertrauens:

ALDI Highend-Laptop in 2020: 300Hz!

Ich musste heftig suchen, in welchem PC-Jahr wir hier wirklich angekommen sind.

Der Z3 von Zuse hatte 4 bis 5 Hz, irgendwann um 1941. Der ENIAC vier Jahre später, 1945, schon wuchtige 5kHz. Also irgendwo dazwischen.

Nur wurden leider keine weiteren Computer „dazwischen“ gebaut. Vielleicht fehlen hier auch Einträge in der westlichen Literatur. Die Technik war in jedem Fall noch zu neu und füllte Hallen, alleine die Z3 wog über eine Tonne.

Mit der Headline habe ich noch ein weiteres riesiges Problem neben der Unvollständigkeit (falls das überhaupt jemandem auffiel): ich gehe hier von der Taktfrequenz eines Prozessors aus und halte das für „normal“. Im Text aber geht es um das Display.

Sind Displays heute wichtiger als CPUs!? Sind CPU-Infos nicht mehr relevant für Technikmagazine?? Und: wer kauft eigentlich PCs bei ALDI!? Hakt’s?

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

2020: alles wird kurzweil

Keine Panik! Sieht alles schlimmer aus, als es ist! Ende 2020 wird für uns alle doch noch alles gut!

Ray Kurzweil
Turntable-Rocker mit Grüßen aus 2006: US-Futurist Ray Kurzweil

Aus Langeweile seit Ewigkeiten mal wieder in einem meiner eigenen Ebooks geschmöckert. Dort habe ich mit Datum 23.11.06 einen interessanten Text entdeckt, betitelt sick shit II. Er dreht sich um Blicke in die Gegenwart einer noch 14 Menschenjahre entfernten Welt.

Spätestens Ende 2020 wird alles gut für die Menschen sein, aus medizinischer Sicht. Denn dann „flitzen Nanobots umher in unserer Blutbahn und werden uns gesund und jung halten“. Sind doch nur noch wenige Monate! Wird schon schiefgehen!

Natürlich gibt es die Onlinequelle dieser kurzweiligen, optimistischen Vorhersagen heute nicht mehr. Ich fand jedoch im Internet Archive noch einen Schnappschuss der Website, wo diese und mehr Prognosen online publiziert wurden. Und dann war da noch…

…“2020 werde die Lebensdauer eines Menschen wesentlich größer als heute sein“. Gut, das war jetzt nicht ganz so schwer, trifft seit 2014 allerdings auf die USA nicht mehr zu.

Oder „2020 werden wir uns komplett in virtuellen Umgebungen bewegen. Anstatt jemanden anzurufen werden wir unser Gegenüber irgendwo virtuell treffen, können virtuelle Strandspaziergänge machen und uns dort unterhalten. Meetings werden in beruhigenden Örtlichkeiten nur noch virtuell stattfinden.“ Möp! Meetings finden im Jahr 2020 wie Ende der 90er-Jahre weiterhin in ranzigen Chat-Applikationen statt und kommen öfter mal direkt aus dem Big-Brother-Ministerium Chinas. Gut, statt nur zu schreiben kann man sein Gegenüber mittlerweile auch direkt anrufen (will niemand wirklich) und man kann es auch in Echtzeit sehen, wenngleich in mieser Handykameraqualität (wenn deutsches Internet einen guten Tag hat). „Virtuelle Strandspaziergänge“ hätten uns in Lockdownzeiten sicherlich mental ein bisschen geholfen, doch in der Realität sehen wir nur wechselnde Standbilder als auswählbare Hintergründe in „Microsoft Teams“. Tja, so unterscheiden sich Begrifflichkeiten früher und heute in Bezug auf „virtuelle Welten“. Hätte man extra dazusagen müssen, klar.

„Innerhalb der nächsten zehn Jahre“, also aus Sicht des Textes um 2016 herum, „müsse sich kein Mensch mehr mit Erkältungen rumschlagen.“ Allerweltskrankheiten wie die Influenza, die aktuell weltweit Zehntausende Tote fordert pro Jahr, ließen sich durch „die Nanotechnologie komplett ausrotten“. Nanotechnologie versus COVID-19 FTW! Läuft doch!

Zu seiner Verteidigung will ich am Ende anmerken, bei manchen Prognosen aus dem Text hat man ihn auch gnadenlos geschnitten.

Augmentierte Realität durch Brillen zum Beispiel – Google Glass wurde 2014 für den Massenmarkt aus moralischen und ethischen Bedenken von Google selbst aus dem Verkehr gezogen. Oder der Verbreitung von Viren durch Terroristen – offenbar nichts im Vergleich zu Zoonosen. Anderes Zeug, Themen wie „Züchten von Organen“ und „Metamorphosen von Hautzellen“, erspare ich uns jetzt, es ist kurz vor halb Acht und draußen hat es 30+°C. Seit Freitag.

Ja. Wahrsagerei ist auch kein Zuckerschlecken mehr. 2020 – wir packen das!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

canon tr 8550 – arch-basiert

Was Unterstützung für Linux betrifft, so ist Canon aus Japan beileibe kein A****loch-Hersteller: für meinen Drucker TR 8550 aus 2017/2018 gibt es wenigstens Treiber für Debian Linux und RPM-basierte wie z.B. Fedora. Wenngleich die seit Ende 2017 auch nie mehr einem Update unterzogen wurden…

AKIRA A.D.2019 TOKYO
Wie Canon in den 80ern Populärkultur wurde: dank „Akira“!

Nur was mit Arch oder auf Arch basierenden Derivaten? Viel Spaß mit der Installation über den Sourcecode!

Nee, das funktioniert nicht. Ehrlich jetzt.

Ich hatte noch ein funktionierendes Setup auf einem anderen Linux-Rechner, aber selbst meine manuell kopierten Dateien (cmdtocanonij2, cmdtocanonij3, rastertocanonij) nach /usr/lib/cups/filter/ brachten das Mistding nicht ans Laufen. Ich bekam beim Druckversuch einer Testseite nur immer wieder die Meldung „Filter failed“.

In einer Onlinerecherche kam irgendwo (ich spare mir Links, keine Zeit, hier auch unnötig), das bedeute „eine Vielzahl von Fehlern“, ich solle debuggen.

Nee, das funktioniert heute nicht. Nicht heute. Und morgen auch nicht. Und auch nicht irgendwann nächstes Jahr.

Phew, was tun?

Wir werden pervers! Aber so richtig! Wir konvertieren das erhältliche *.deb-Paket in eine Arch-Installationsdatei, die pacman dann essen muss! Völlig egal, ob es funktioniert oder nicht danach! Muhahahaha!

Das Tool, das dies erledigt, nennt sich debtap und ist über offizielle Quellen nicht erhältlich, man muss das inoffizielle AUR anzapfen. Doch selbst dann läuft es nicht einfach von selbst, man muss indizieren lassen, aber wie das alles genau geht steht hier, denn den Link share ich gerne weiter: https://ostechnix.com/convert-deb-packages-arch-linux-packages/.

Der Befehl, der die Konvertierung durchführt, lautet schließlich so:

debtap cnijfilter2_5.50-1_amd64.deb

Der hat wahrscheinlich eine halbe Ewigkeit Gültigkeit, denn der Treiber wird von Canon für Pinguinnutzer ja eh nie geupdatet.

Man kann übrigens die Fragen, die sich hier stellen, nach Belieben ausfüllen, das ist nicht wichtig. Heraus kommt eine cnijfilter2-5.50-1-x86_64.pkg.tar.zst, die man nur noch mit sudo pacman -U installieren muss. DONE!

Gestern, nach 22:00, end-lich funktioniert’s!

Gut, bei mir schlug die Installation erst einmal fehl, denn meine manuell kopierten Dateien waren ja noch da, worüber sich pacman beschwert hat. Doch nach dem Löschen dieser war dann eine Installation ohne Fehlermeldung möglich. Danke debtap, danke pacman, danke TCP/IP!

Mit diesem Tutorial wollte ich mehrere Dinge auf einmal zeigen:

1) die erfolgreiche Installation des Druckers TR 8550 von Canon unter Arch Linux bzw. einem der vielen Derivate
2) dass eine manuelle Installation fehl schlägt (verschwendete Lebenszeit!)
3) was das Tool debtap ist und warum wir hier pervers werden müssen
4) warum Versuch manchmal kluch macht
5) get it running or die tryin‘!

Wenn diese Exkursion in die Tiefen der Linux-Druckertreiber-Höllen bei euch auch zum Erfolg geführt hat, klickt doch auf einen der Buttons und spendet bitte! KTHXBYE! <3

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (2 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

wegen autoindustrie: pedelec-werbevideo verboten

Zur Abwechslung mal Werbung.

In Frankreich verbotene Werbung.

Für ein Fahrrad.

Ja, 2020 und Europa und so, nicht Mittelalter und nicht China:

Dieser nur 45 Sekunden kurze Werbespot der niederländischen Elektrofahrradschmiede VanMoof darf im französischen Fernsehen nicht mehr gezeigt werden, denn er „verunglimpfe die Automobilindustrie“.

Nein, leider kein Scherz. Ist auch Juli und nicht April, wir leben immer noch in einer weltweiten Viruspandemie und wir haben auch erst die Hälfte des Jahres geschafft.

Fakt ist nach wie vor, dass wir eine Mobilitätswende brauchen, ob nun mit oder ohne Frankreich, ob nun in Europa oder außerhalb. Sonst gibt es nämlich zur Hälfte dieses Jahrhunderts kein [insert transportation object here] mehr, was auf irgendeiner Straße rollt, weil der Planet uns alle gegrillt und erstickt hat. Aus gutem Grund, nicht zu vergessen.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

DIE dating-revolution

I'm there for you -  toy digital sillinesss

Im Januar erzählte mir ein Kollege, ich solle „Tinder“ versuchen.
Es sei „der ideale Weg um Bräute abzuchecken“.
Also habe ich mich dort angemeldet.
Über mein eigenes Smartphone, ist Risiko, klar.
Ich durfte mir das einfach nicht entgehen lassen.
Woche für Woche schaue ich mal rein.
Irgendwie posten alle Honeys nur noch ihr „Instagram“-Profil.
Oder Zwei-Sekunden-Infinite-Loop-GIFs.
Das war aber gar nicht mein Problem, weil:
ich habe gemerkt, ich bin hässlich.
Und habe nur vier Likes. Pardon: „Matches“.
Und das auch noch während weltweiter Pandemiezeiten!
Um Depressionen zu vermeiden kam mir nur eine Lösung:
Ich lasse mir Titten machen.
Nächste Woche habe ich Termin.
#Zeitgeist

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

call it a keycard!

Wenn dein Schlüsselbund mal wieder auf irgendeinem Fenstersims vergessen wurde:

Cooler Master CPU-Karte fuer Waermeleitpaste - Call it Keycard!

Cooler Master! Call it a „keycard“! Made in Taiwan! Since 1992! xD

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

google aphex twin

Logo von Aphex Twin (populärer irischer Electronica-Musikant) seit 1991:

Aphex Twin Logo

Logo von Google Ads (vormals Adwords) seit 2018:

Google Ads Logo

Can’t be the only one seeing this. o.O

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

ich und meine maske

Als junger Erwachsener hätte ich niemals gedacht, so etwas hier mal zu besitzen:

Ich und meine Maske

Wie naiv!

Zu sehen ist meine N95/F2PP-Atemschutzmaske in doppelter Ausführung mit entsprechenden Wechselfiltern. Kostenpunkt: 15,99€. Lieferzeit: 5 Wochen.

Wenn man in den Nullerjahren alternative Medien besuchte im Internet, v.a. im englischsprachigen Raum, fand man immer wieder Websites, die einem solche Masken zu einem Spottpreis verkauften. Die Betreiber und Besucher dieser Webseiten bezeichnete man als „Spinner“, solche Masken waren doch nur etwas für „die Asiaten“ und den Begriff „Prepper“ gab es da auch noch nicht.

Heute ist sie einer der wertvollsten Gegenstände der Welt(!), die man besitzen kann. Und mausert sich im Hintergrund bereits zu einem unverrückbaren Sinnbild unserer Gegenwart. Wie schön, dass sich die Zeiten für uns alle doch verbessert haben!

Die Realität aktuell nämlich ist, dass Atemschutzmasken hierzulande bereits in Sachsen verpflichtend sind. Bayern und Mecklenburg-Vorpommern wollen nachziehen, in Bundesländern wie Baden-Württemberg darf man öffentliche Verkehrsmittel und Supermärkte nur noch betreten, wenn man eine trägt. Im Kern ist es eine Frage der Zeit, bis die Pflicht Maske zu tragen für alle kommt, und, hätte man hierzulande genügend auf Lager, sie wäre längst da. Zu spät kommt das alles zudem.

Seit wenigen Wochen biete ich auch in einem Widget unter den Beiträgen hier selbst welche an. Die Kooperation läuft aktuell über Amazon, allerdings haben die bereits durchsickern lassen, dass man eventuell in Erwägung ziehe, den Verkauf an die Bevölkerung einzustellen, da Einrichtungen wie Krankenhäuser die noch dringender bräuchten. Sollte sich das also erübrigen, werde ich das Widget versuchen während der Pandemiezeit weiterhin anzubieten, wahrscheinlich dann über Amazyble statt Amazon. Nur dass sich niemand wundert.

Meine persönliche Meinung dazu? Asiaten gehören nicht umsonst zu den intelligentesten Völkern der Welt. Vielleicht hätte man in der Vergangenheit öfter auf sie hören sollen. Das Beispiel Südkorea zeigt das ja aktuell ganz vorzüglich: während das 52 Millionen Einwohner zählende hochmoderne Land nur knapp 10.700 infizierte Personen zählt, bei lediglich 237 Todesfällen (Stand: 20.04.20), ist in Europa Mittelalter und seit 13.03.20 das größte Epizentrum der Seuche nach China.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

coronaaroma!

Snapshot Menschheit:


Quelle: tagesschau.de

Titel dieses Beitrags inspiriert durch „Antithese“, Olli Banjo (2003):

„…Verona krönungsaroma mola drinkt cola lapaloma bei tv wg bewohnern auf m sofa
Mtv idioten poken ins koma fühlen sich ohne hoden wohler
Für quoten in arizona stellt man strom an.“ [via]

Und ich muss raus, kaufe eine Pumpgun und gehe dann hamstern! Prost! (C) 1925

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^