text:
Das One-Time-Pad (Abkürzung: OTP, deutsch: Einmalverschlüsselung oder Einmalschlüssel-Verfahren, wörtlich Einmal-Block, nicht zu verwechseln mit dem Einmalkennwort) ist ein symmetrisches Verschlüsselungsverfahren zur geheimen Kommunikation.

Kennzeichnend ist, dass ein Schlüssel verwendet wird, der mindestens so lang wie die Nachricht ist. Das OTP ist informationstheoretisch sicher und kann nachweislich nicht gebrochen werden, wenn es bestimmungsgemäß genutzt wird.

Geschichte

Das Verfahren wurde zum ersten Mal durch den amerikanischen Kryptologen Frank Miller (1842–1925) bereits im Jahr 1882 vorgeschlagen, bevor es – 35 Jahre später – durch seinen Landsmann Gilbert Vernam (1890–1960) zum Patent angemeldet wurde. Der Amerikaner Joseph O. Mauborgne (1881–1971) setzte diese Idee um und nannte das Verfahren One-Time Pad (deutsch: Einmal-Block). Kurz darauf arbeiteten auch die Deutschen Werner Kunze, Rudolf Schauffler und Erich Langlotz an dieser Methode. Sie schlugen im Jahr 1921 vor, Blöcke, die mit zufällig erstellten Ziffern bedruckt waren, zur Überschlüsselung der damaligen diplomatischen Codes zu verwenden, und bezeichneten diese als i-Wurm (individueller Wurm). Diese Methode wurde vom diplomatischen Dienst der Weimarer Republik auch tatsächlich eingesetzt.

Seit dieser Zeit bis zum heutigen Tag, speziell auch während der Zeit des Kalten Krieges, wurde und wird dieses Verfahren verwendet. Beispielsweise war der Heiße Draht (auch als das Rote Telefon bekannt), also die hochsichere direkte Fernschreibverbindung zwischen dem amerikanischen Präsidenten und dem sowjetischen Generalsekretär, durch ein Einmalschlüssel-Verfahren geschützt.

Verfahren

Beschreibung
Das One-Time-Pad gehört zu den polyalphabetischen Substitutionsverfahren, bei denen die einzelnen Buchstaben (oder Zeichen) in jeweils andere Buchstaben (oder Zeichen) umgewandelt (verschlüsselt) werden. Kennzeichnendes Merkmal der Einmalverschlüsselung ist die einmalige Verwendung eines zufälligen Schlüssels, der (mindestens) die gleiche Länge wie die zu verschlüsselnde Nachricht aufweist.

Sowohl der Klartext als auch der Schlüssel und das Chiffrat sind beim One-Time-Pad Zeichenfolgen derselben Länge. Während moderne Implementierungen des OTP auf Bits und Bytes basieren, lässt sich das OTP auch klassisch beispielsweise mithilfe der üblichen 26 Großbuchstaben des lateinischen Alphabets benutzen. Dies kann bei Bedarf leicht durch Kleinbuchstaben, Zahlzeichen oder Sonderzeichen erweitert werden. Zur Verschlüsselung wird der Schlüssel zeichenweise mit dem Klartext kombiniert. Die Art der Kombination ist beliebig und muss nicht geheim gehalten werden. Bei Verwendung von Bits ist eine Exklusiv-Oder-Verknüpfung (XOR) von Klartext- und Schlüsselbits gebräuchlich, weil diese besonders einfach durchzuführen ist. Alternativ kann aber auch eine andere Verknüpfung, beispielsweise eine zeichenweise Addition (ohne Übertrag) verwendet werden. Benutzt man Handmethoden und nur Großbuchstaben, empfiehlt sich die Addition. Hierzu werden die Buchstaben zumeist entsprechend ihrer Position im Alphabet durchnummeriert, wobei häufig eine Nummerierung von 0 bis 25 (A=0, B=1, … Z=25) oder von 1 bis 26 (A=1, B=2, … Z=26) erfolgt. Man kann sich auch für eine beliebige andere umkehrbare Zuordnung entscheiden. Dies hat keinen prinzipiellen Einfluss auf die Methode oder deren Sicherheit.

Sicherheit
Grundlegende Voraussetzungen für die Sicherheit des Einmalschlüssel-Verfahrens sind: Der Einmalschlüssel muss
 mindestens so lang sein wie die Nachricht,
 gleichverteilt zufällig gewählt werden,
 geheim bleiben und
 darf nicht wiederverwendet werden, auch nicht teilweise.
Damit erfüllt das Einmalschlüsselverfahren Kerckhoffs' Prinzip, nach dem die Sicherheit eines Kryptosystems nicht von der Geheimhaltung des Algorithmus abhängen darf, sondern nur von der Geheimhaltung des Schlüssels, in idealer Weise. Die vier Bedingungen der Schlüsselwahl stellen zusammen mit der Beschreibung des Verfahrens sicher, dass die folgenden Voraussetzungen erfüllt sind:
 Es gibt genauso viele Schlüssel wie mögliche Chiffrate,
 Zu jedem Klartext-Chiffrat-Paar gibt es genau einen Schlüssel, der auf den Klartext angewendet das Chiffrat ergibt.
Unter diesen Bedingungen ist das Verfahren informationstheoretisch sicher (auch perfekte Sicherheit genannt) und kann auch mit beliebig hohem Rechenaufwand nicht gebrochen werden. Allein mit Kenntnis des Schlüssels kann der Geheimtext entschlüsselt werden. Diesen zu erraten oder anderweitig zu erschließen ist unmöglich, da jeder mögliche Schlüssel mit der gleichen Wahrscheinlichkeit auftreten kann. Zudem gibt es keine Möglichkeit, herauszufinden, ob ein Schlüssel richtig erraten wurde oder nicht. Würde man den Schlüssel nicht, wie oben vorausgesetzt, zufällig wählen, sondern beispielsweise Textpassagen verwenden, dann wäre diese Eigenschaft nicht gegeben.

Verwandt mit dem One-Time-Pad ist die Stromverschlüsselung, bei welcher der Schlüssel pseudozufällig aus einem kürzeren Schlüssel, einer PIN oder einem Pass- oder Kennwort erzeugt wird. Andere historische und auch aktuelle kryptographische Verfahren verwenden Schlüssel, die in der Regel deutlich kürzer sind als die Länge des zu verschlüsselnden Klartextes. Diese Verfahren weisen – im Gegensatz zum OTP – sämtlich keine perfekte Sicherheit auf.

Das Einmalschlüsselverfahren ist gut geeignet für eine maschinelle Realisierung. Im Gegensatz zu vielen modernen kryptographischen Methoden (wie DES, PGP oder AES), die wegen ihrer Komplexität auf Computer angewiesen sind, eignet sich das One-Time-Pad jedoch ebenso gut zur manuellen Durchführung der Ver- und Entschlüsselung.

Beispiel
Eine einfache Handmethode zur Verschlüsselung ist beispielsweise die buchstabenweise Addition von Klartext und Schlüssel. Hierzu ersetzt man zunächst mithilfe einer beliebigen Substitutionstabelle die Buchstaben des Klartextalphabets durch Zahlen. Im einfachsten Fall ordnet man den 26 Großbuchstaben des lateinischen Alphabets Zahlen zu, die ihrer Position im Alphabet entsprechen. Mit anderen Worten, man nummeriert das Alphabet wie folgt durch:

 A B C D E F G H I J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Jetzt ist eine buchstabenweise Addition leicht möglich. Beispielsweise ergibt die Addition von A und F den Buchstaben G, entsprechend ihren Platznummern 1 + 6 = 7. Falls die Summe den Wert 26 überschreiten sollte, so zieht man einfach 26 ab (Modulo-Operation) und erhält so wieder einen der 26 Alphabetbuchstaben. Beispielsweise X plus U ist numerisch 24 + 21 = 45, nach Abziehen von 26 ergibt sich 19 und damit der Buchstabe S, also X + U = S.

Die Zusammenhänge bei der Addition von Buchstaben lassen sich an der folgenden Tabelle, die Ähnlichkeit mit einer klassischen Tabula recta hat, übersichtlich darstellen:
{| class="wikitable"
 |
   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
 B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
 C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
 D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
 E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
 F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
 G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
 H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
 I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
 J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
 K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
 L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
 M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
 N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
 O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
 P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
 Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
 R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
 S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
 T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
 U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
 V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
 W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
 X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
 Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
 Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|}
In der kursiv gedruckten oberen Zeile und in der ersten Spalte am linken Rand sind die beiden zu addierenden Summanden angegeben. Im Kreuzungspunkt innerhalb der Tabelle lässt sich die Summe ablesen, also das Ergebnis der Summation von Klartextbuchstaben und Schlüsselbuchstaben. Dies ist der entsprechende Buchstabe des Geheimtextes.

Zur Verschlüsselung wird man einen zufälligen Schlüssel benutzen, der in diesem Beispielfall passenderweise ebenfalls aus den 26 Großbuchstaben zusammengesetzt ist und dessen Länge (mindestens) der Länge des zu verschlüsselnden Klartextes entspricht. Entscheidend für die Sicherheit der Verschlüsselung ist, dass die einzelnen Buchstaben des Schlüssels wirklich zufällig verteilt sind, unvorhersagbar sind und in keinerlei Zusammenhang untereinander stehen. Als Beispiel für einen zufälligen Schlüssel dient die folgende Buchstabenfolge:

 S = WZSLXWMFQUDMPJLYQOXXB

Der Schlüssel S ist in diesem Beispiel recht kurz, er umfasst nur 21 Buchstaben und ist bei bestimmungsgemäßer Verwendung sehr schnell verbraucht, nämlich bereits nach Verschlüsselung eines Textes aus 21 Buchstaben.

Beispielsweise soll der folgende Klartext K verschlüsselt werden:

 K = ANGRIFFIMMORGENGRAUEN

Zur Verschlüsselung werden Klartext K und Schlüssel S, wie oben erläutert, buchstabenweise addiert. Als Summe (K + S = G) erhält man nach der so durchgeführten Einmalverschlüsselung den Geheimtext G:

 G = XNZDGCSODHSEWOZFIPSCP

Der im Ergebnis erhaltene Geheimtext G ist von einem Zufallstext nicht zu unterscheiden und kann prinzipiell mit keiner noch so gearteten kryptoanalytischen Angriffsmethode (weder jetzt noch in Zukunft) entziffert werden. Allein die Kenntnis des Schlüssels S erlaubt es, aus dem Geheimtext G durch Subtraktion des Schlüssels wieder den Klartext K zu gewinnen. Ohne den Schlüssel kann man prinzipiell alle denkbaren und mehr oder weniger sinnvollen Buchstabenkombinationen aus 21 Buchstaben konstruieren. Theoretisch könnte ein Angreifer dies probieren. Er würde so eine Unmenge an Sätzen erhalten, die in beliebigen Sprachen beliebige Informationen verkünden würden, beispielsweise

 K' = WIKIPEDIAFINDENWIRGUT

mit dem dazu passenden Schlüssel, der der Differenz zwischen Geheimtext G und dem konstruierten Pseudo-Klartext K' entspricht (S' = G - K'):

 S' = AEOUQXOFCBJQSJLIZXLHV

Dieser Schlüssel S' erfüllt die Bedingung, dass die buchstabenweise Summe von ihm mit dem oben erzeugten (falschen) Klartext K' genau den gleichen Geheimtext ergibt wie die Summe aus dem echten, aber dem Angreifer unbekannten Schlüssel S mit dem echten, aber dem Angreifer ebenso unbekannten Klartext K. So kann der Angreifer eine unübersehbare Fülle von denkbaren Klartext-Schlüsselpaaren konstruieren, die in (buchstabenweiser) Summe alle den gleichen echten Geheimtext ergeben. Er hat jedoch keine Möglichkeit, daraus auf den echten Klartext zurückzuschließen. Auch Brute Force, also das erschöpfende Durchprobieren aller möglichen Schlüssel, führt nicht zum Erfolg. Der Angreifer kann zwar so – sogar ohne überhaupt den Geheimtext zu kennen – alle denkbaren Texte mit 21 Buchstaben erzeugen, unter denen natürlich auch der ursprüngliche sein wird. Es gibt jedoch keinerlei Anhaltspunkte, zu entscheiden, welcher aus der Unmenge der durchaus sinnvollen Texte der tatsächliche Klartext ist. Solange ihm der Schlüssel nicht in die Hände fällt, bleibt der Klartext auf ewig ein Geheimnis.

Um diese Sicherheit nicht zu gefährden, sollte der Einmalschlüssel nach bestimmungsgemäßem Gebrauch unwiederbringlich vernichtet werden.

Angriffsmöglichkeiten
Bei korrekter Anwendung des Einmalschlüsselverfahrens ist OTP, wie der amerikanische Wissenschaftler Claude Shannon in den 1940er-Jahren zeigte, nachweislich sicher und kann nicht gebrochen werden. In der praktischen Anwendung können jedoch Fehler passieren, die einen Einbruch möglich machen. Ursache dafür ist die Verletzung von grundlegenden Sicherheitsmaßnahmen.

Ausspähen des Schlüssels
Ein möglicher Fehler ist, den Einmalschlüssel nicht geheim zwischen Sender und Empfänger auszutauschen, sodass er durch Dritte ausgespäht werden kann. Auch eine sichere Aufbewahrung des Schlüssels ist essentiell. Im Gegensatz zu Passwörtern oder Kennwörtern lässt sich ein Einmalschlüssel kaum merken. Er muss auf einem geeigneten Medium, z. B. Papier, Diskette, CD oder USB-Stift, gespeichert werden. Solch ein Medium – und mit ihm der Schlüssel – kann leicht kopiert werden. Ebenso darf nicht vergessen werden, den Einmalschlüssel nach Gebrauch sicher zu vernichten.

Allgemein gilt: Wenn ein Unbefugter eine verschlüsselte Nachricht und den zu ihr passenden Entschlüsselungs-Schlüssel findet, kann er diese Nachricht entschlüsseln.

Kryptologisch unsichere Schlüssel
Ein Kardinalfehler ist, als Einmalschlüssel keine zufällige Buchstabenfolge, sondern eine Textpassage zu benutzen. Selbst wenn der verwendete Text einmalig ist und niemandem (außer den beiden Kommunikationspartnern) bekannt ist, weisen Buchstabenfolgen, die aus einem sinnvollen Text stammen, im Gegensatz zu zufälligen Buchstabenfolgen (Zufallstexten), statistisch auswertbare Abhängigkeiten auf, die eine Entschlüsselung möglich machen können.

Damit aus dem verschlüsselten Text ohne Schlüssel nicht wieder das Original rekonstruiert werden kann, muss der Schlüssel kryptologisch sicher sein, das heißt, er darf von einer echt zufälligen Zahlen- beziehungsweise Buchstabenfolge nicht zu unterscheiden sein. Ist er dies nicht, so kann ein Angreifer unter Umständen durch Kryptoanalyse, auch ohne Kenntnis des Schlüssels, den Text entschlüsseln.

Um einen kryptologisch sicheren Schlüssel zu erzeugen, wird im Idealfall ein physikalischer Zufallszahlengenerator verwendet, da nur ein solcher echt zufällige, das heißt nicht-deterministische, Werte liefert.

Grundsätzlich kann auch ein Generator für Pseudozufallszahlen verwendet werden. Dann darf der Schlüssel jedoch nicht so lang sein, dass man aus ihm auf den internen Zustand des Generators schließen könnte, denn sonst könnten alle darauffolgenden Werte vorhergesagt werden. Das ist bei einfachen Generatoren (wie zum Beispiel Kongruenzgeneratoren) bereits nach wenigen Werten der Fall. Bei kryptographisch sicheren Generatoren können dies erheblich längere Folgen sein, sie sind aber ebenfalls deterministisch und können theoretisch dennoch geknackt werden.

Mehrfachverwendung des Einmalschlüssels
Ein in der praktischen Anwendung (Beispiele: Lorenz-Schlüsselmaschine und Venona) schon häufig gemachter Fehler ist, mehr als nur die beiden, allein für Sender und Empfänger bestimmten Kopien des Einmalschlüssels herzustellen und zu verteilen oder den Schlüssel mehr als einmal zur Verschlüsselung zu verwenden. Schon eine zweimalige Verwendung eines Einmalschlüssels genügt, um die Kommunikation erfolgversprechend angreifen zu können.

Der Angreifer geht dabei von folgender Überlegung aus: Angenommen, der Absender hat für beide verschlüsselten Nachrichten (versehentlich) denselben Schlüssel verwendet, dann kann der Angreifer die Differenz der beiden verschlüsselten Texte analysieren. Klartexte und folglich auch Differenzen von Klartexten zeigen nämlich im Gegensatz zu Zufallstexten eine Reihe von Auffälligkeiten, die statistisch ausgewertet und zur Entzifferung ausgenutzt werden können. So zeigt die Buchstabenhäufigkeit von Differenztexten ebenso charakteristische Auffälligkeiten wie bspw. die von Klartexten oder von monoalphabetisch verschlüsselten Texten.

Die folgende Tabelle zeigt als Ergebnis einer Auszählung der Differenz von zwei deutschen Texten aus jeweils einer Million Buchstaben die relativen Häufigkeiten der Buchstaben in ‰ (Promille). Bei einer Gleichverteilung würde man jeden der 26 Buchstaben mit einer Häufigkeit von 1/26, also mit 38,5 ‰ erwarten.

Bei Differenztexten – falls sie von zwei Klartexten oder von zwei nach dem Einmalschlüssel-Verfahren mit identischem Schlüssel verschlüsselten Geheimtexten stammen – dominiert der Buchstabe Z mit etwa 77 ‰, der durch Koinzidenzen von identischen Buchstaben in beiden Klartexten und damit auch (bei zweifacher Verwendung desselben Einmalschlüssels) in beiden Geheimtexten auftritt. Ein Nebenmaximum tritt beim Buchstaben M mit 50 ‰ auf. Ursache dafür sind Koinzidenzen der in deutschsprachigen Texten häufigen Buchstaben E und R beziehungsweise R und E, die beide die gleiche Differenz, nämlich 13, aufweisen. Falls der Angreifer diese Auffälligkeiten am Differenztext entdeckt, bestätigt dies seinen Verdacht der Mehrfachverwendung eines Einmalschlüssels (siehe auch: Koinzidenzindex). Basierend auf weiteren statistischen Abhängigkeiten und mithilfe von speziellen Differenztextbasen sowie passender Trigramm-, Tetragramm- und Pentagramm-Tabellen (siehe N-Gramm) und rechnergestützter Untersuchung der verschiedenen Fälle können die Geheimtexte nun erfolgversprechend angegriffen werden.

Auf diese Weise kann das theoretisch unknackbare Einmalschlüssel-Verfahren plötzlich dennoch gebrochen werden, falls bei der praktischen Anwendung Fehler passieren.

Seitenkanalangriffe
Variiert die Länge der verschlüsselten Nachrichten oder die Rate des Nachrichtenaustauschs, so lassen sich dadurch, unabhängig vom Verschlüsselungsverfahren, Rückschlüsse auf den Inhalt ziehen. Ein probates Gegenmittel hierzu sind Füllsprüche, die dem Gegner Funkaktivität vortäuschen, auch dort, wo keine Nachrichten ausgetauscht werden.

Zusammenfassung

Nachteile
Das One-Time-Pad benötigt einen Schlüssel, der genauso lang ist wie die Nachricht selbst. Um beispielsweise die gesamten Daten eines Festplattenlaufwerks zu verschlüsseln, ist ein zweites Festplattenlaufwerk (mit mindestens gleicher Größe) zur Speicherung des Schlüssels nötig.

Zur Wahl des Schlüssels ist ein physikalischer Zufallszahlengenerator nötig, der in der Regel in spezieller Hardware realisiert wird. Die Sicherheit des One-Time-Pads hängt von der Güte des Zufallszahlengenerators ab. Eine weniger aufwendige Alternative zum One-Time-Pad ist eine Stromchiffre, die mit einem Pseudozufallsgenerator auskommt, aber dafür keine informationstheoretische Sicherheit besitzt.

Will man Nachrichten mit dem OTP-Verfahren verschlüsselt übertragen, muss der Schlüssel über einen anderen (sicheren) Kanal übertragen werden als die Nachricht. Beispielsweise kann eine CD mit Schlüsseln durch einen Boten überbracht werden, während die damit verschlüsselten Nachrichten über das Internet übertragen werden.
Aufgrund des hohen logistischen Aufwands konnte sich das One-Time-Pad für die Verschlüsselung in größeren Kommunikationsnetzen nicht durchsetzen.

Vorteil
Das One-Time-Pad ist informationstheoretisch gegen Kryptanalyse sicher und kann nicht entziffert werden, wenn der Schlüssel genauso lang ist wie die Nachricht und aus Zeichen besteht, die zufällig und unabhängig sind, und wenn er nur einmal zur Verschlüsselung verwendet wird. Unter diesen Voraussetzungen kann der Geheimtext nur mit Kenntnis des Schlüssels entschlüsselt werden. Um die nur einmalige Verwendung des Schlüssels sicherzustellen, empfiehlt es sich, den Schlüssel unmittelbar nach Benutzung unwiderruflich zu löschen.

Andere Verschlüsselungsverfahren (wie AES) erreichen ihre Sicherheit durch den immensen Berechnungsaufwand der theoretisch denkbaren Entzifferung, der auf absehbare Zeit praktisch nicht realisierbar ist. Mit anderen Worten, einem potenziellen Angreifer fehlt es an notwendigen Ressourcen (zum Beispiel Rechenleistung oder Zeit), um seinen Entzifferungsversuch erfolgreich durchführen zu können. Die Sicherheit des One-Time-Pad dagegen beruht auf der einmaligen Verwendung des Schlüssels sowie der zufälligen Wahl des verwendeten Schlüssels. Richtig angewendet, bietet es für die zweiseitige geheime Kommunikation unübertreffliche Sicherheit und kann auch mit beliebig hoher Rechenleistung nicht gebrochen werden.

Siehe auch
 Floradora, ein fast perfektes OTP und dessen Bruch
 Zahlensender
 Sicherheitseigenschaften kryptografischer Verfahren

Literatur
 Friedrich L. Bauer: Entzifferte Geheimnisse. Methoden und Maximen der Kryptologie. 3., überarbeitete und erweiterte Auflage. Springer, Berlin u. a. 2000, ISBN 3-540-67931-6.
 Steven M. Bellovin: Frank Miller – Inventor of the One-Time Pad. Cryptologia. Rose-Hulman Institute of Technology. Taylor & Francis, Philadelphia PA 35.2011,3 (Juli), S. 203–22. .
 Robert Louis Benson: The VENONA Story. Center for Cryptologic History, NSA, Fort Meade, USA (PDF; 0,8 MB). Abgerufen: 25. Juli 2021.
 Rudolf Kippenhahn: Verschlüsselte Botschaften: Geheimschrift, Enigma und Chipkarte. Rowohlt, Hamburg 1999. ISBN 3-499-60807-3.
 Dirk Rijmenants: Is One-time Pad History? Cipher Machines & Cryptology, 2010 (PDF; 0,1 MB). Abgerufen: 5. Januar 2011.
 Dirk Rijmenants: The Complete Guide to Secure Communications with the One Time Pad Cipher Cipher Machines & Cryptology, 2010 (PDF; 0,2 MB). Abgerufen: 5. Januar 2011.

Weblinks
 Erklärung des OTPs mit Quellcode zu verschiedenen Angriffsmethoden
 Häufige Fragen zum OTP (englisch) mit Foto eines authentischen russischen Einmalblocks
 Erläuterungen zum OTP (englisch) mit Bildern, Übungen und Programmen

Einzelnachweise

Symmetrisches Verschlüsselungsverfahren


text:
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ChangeListManager">
    <list default="true" id="122ce47b-b488-4553-a355-406e32361329" name="Default" comment="">
      <change type="DELETED" beforePath="C:\projects\python\pyqt-webkit-base\.alembi.swp" afterPath="" />
    </list>
    <ignored path="pa.iws" />
    <ignored path=".idea/workspace.xml" />
    <file path="/Dummy.txt" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371781951468" ignored="false" />
    <file path="/unit_query.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370832823847" ignored="false" />
    <file path="/a.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370831984346" ignored="false" />
    <file path="/start.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371794439898" ignored="false" />
    <file path="/README.md" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371260234044" ignored="false" />
    <file path="/sass.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370950173352" ignored="false" />
    <file path="/bootstrap.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370951973738" ignored="false" />
    <file path="/scss.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370950989627" ignored="false" />
    <file path="/index.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371794678900" ignored="false" />
    <file path="/a.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371449723716" ignored="false" />
    <file path="/controllers.js" changelist="122ce47b-b488-4553-a355-406e32361329" time="1370951835205" ignored="false" />
    <file path="/header.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371187336519" ignored="false" />
    <file path="/__init__.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371793838824" ignored="false" />
    <file path="/db.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371185087707" ignored="false" />
    <file path="/setup.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371269293041" ignored="false" />
    <file path="/webkit.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371794272313" ignored="false" />
    <file path="/setup.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371448711295" ignored="false" />
    <file path="/pref.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371187671116" ignored="false" />
    <file path="/home.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371792017964" ignored="false" />
    <file path="/home_tests.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371298827275" ignored="false" />
    <file path="/consts.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371261293624" ignored="false" />
    <file path="/pref_tests.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371186918964" ignored="false" />
    <file path="/enum.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371261242027" ignored="false" />
    <file path="/flash.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371261388450" ignored="false" />
    <file path="/flash_msg_tests.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371264632058" ignored="false" />
    <file path="/flash_msg.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371794567104" ignored="false" />
    <file path="/TODO" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371263234752" ignored="false" />
    <file path="/resolver.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371271595559" ignored="false" />
    <file path="/bridge.js" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371265181438" ignored="false" />
    <file path="/a.js" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371264098803" ignored="false" />
    <file path="/footer.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371265499267" ignored="false" />
    <file path="/footer.less" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371267967681" ignored="false" />
    <file path="/base.less" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371459761412" ignored="false" />
    <file path="/json_reformat.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371269462633" ignored="false" />
    <file path="/reformat_json.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371272153248" ignored="false" />
    <file path="/utils.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371793827768" ignored="false" />
    <file path="/utils_tests.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371271847664" ignored="false" />
    <file path="/worker.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371287212967" ignored="false" />
    <file path="/units.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371449253173" ignored="false" />
    <file path="/unit_explorer.html" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371460109905" ignored="false" />
    <file path="/search.less" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371460168237" ignored="false" />
    <file path="/config.less" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371460138031" ignored="false" />
    <file path="$USER_HOME$/.PyCharm20/system/python_stubs/-762174762/__builtin__.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371787158430" ignored="false" />
    <file path="/scope.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371791036172" ignored="false" />
    <file path="/session.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371791077323" ignored="false" />
    <file path="/less.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371791206924" ignored="false" />
    <file path="/conf.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371794545058" ignored="false" />
    <file path="/sample.py" changelist="122ce47b-b488-4553-a355-406e32361329" time="1371792651004" ignored="false" />
    <option name="TRACKING_ENABLED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
  <component name="CreatePatchCommitExecutor">
    <option name="PATCH_PATH" value="" />
  </component>
  <component name="DaemonCodeAnalyzer">
    <disable_hints />
  </component>
  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
  <component name="FavoritesManager">
    <favorites_list name="pa" />
  </component>
  <component name="FileEditorManager">
    <leaf>
      <file leaf-file-name="webkit.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/base/webkit.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="24" column="9" selection-start="792" selection-end="792" vertical-scroll-proportion="0.0">
              <folding>
                <element signature="e#576#614#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="config.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/app/config.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="__init__.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/base/__init__.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="12" column="0" selection-start="228" selection-end="228" vertical-scroll-proportion="0.0">
              <folding>
                <element signature="e#0#38#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="start.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/start.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="32" column="35" selection-start="696" selection-end="696" vertical-scroll-proportion="0.0">
              <folding>
                <element signature="e#0#16#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="index.html" pinned="false" current="true" current-in-tab="true">
        <entry file="file://$PROJECT_DIR$/static/index.html">
          <provider selected="true" editor-type-id="text-editor">
            <state line="27" column="25" selection-start="951" selection-end="952" vertical-scroll-proportion="0.7906977">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="conf.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/app/conf.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="36" column="12" selection-start="924" selection-end="924" vertical-scroll-proportion="0.0">
              <folding>
                <element signature="e#576#614#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="flash_msg.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/app/model/flash_msg.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="60" column="18" selection-start="1843" selection-end="1843" vertical-scroll-proportion="0.0">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="pref.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/app/model/pref.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="53" column="0" selection-start="1563" selection-end="1563" vertical-scroll-proportion="0.0">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="db.py" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/src/base/db.py">
          <provider selected="true" editor-type-id="text-editor">
            <state line="43" column="0" selection-start="1475" selection-end="1475" vertical-scroll-proportion="0.0">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="prefs.html" pinned="false" current="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/static/prefs.html">
          <provider selected="true" editor-type-id="text-editor">
            <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="-0.0">
              <folding />
            </state>
          </provider>
        </entry>
      </file>
    </leaf>
  </component>
  <component name="FindManager">
    <FindUsagesManager>
      <setting name="OPEN_NEW_TAB" value="false" />
    </FindUsagesManager>
  </component>
  <component name="Git.Settings">
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="GitLogSettings">
    <option name="myDateState">
      <MyDateState />
    </option>
  </component>
  <component name="IdeDocumentHistory">
    <option name="changedFiles">
      <list>
        <option value="$PROJECT_DIR$/src/app/__init__.py" />
        <option value="$PROJECT_DIR$/src/app/views/home.py" />
        <option value="$PROJECT_DIR$/src/app/views/util.py" />
        <option value="$PROJECT_DIR$/static/scripts/bridge.js" />
        <option value="$PROJECT_DIR$/src/app/views/sample.py" />
        <option value="$PROJECT_DIR$/src/app/views/__init__.py" />
        <option value="$PROJECT_DIR$/src/app/views/utils.py" />
        <option value="$PROJECT_DIR$/static/inc/header.html" />
        <option value="$PROJECT_DIR$/src/base/webkit.py" />
        <option value="$PROJECT_DIR$/src/base/__init__.py" />
        <option value="$PROJECT_DIR$/start.py" />
        <option value="$PROJECT_DIR$/src/app/conf.py" />
        <option value="$PROJECT_DIR$/src/app/model/flash_msg.py" />
        <option value="$PROJECT_DIR$/src/app/model/pref.py" />
        <option value="$PROJECT_DIR$/src/base/db.py" />
        <option value="$PROJECT_DIR$/static/index.html" />
      </list>
    </option>
  </component>
  <component name="ProjectFrameBounds">
    <option name="x" value="-8" />
    <option name="width" value="1374" />
    <option name="height" value="744" />
  </component>
  <component name="ProjectInspectionProfilesVisibleTreeState">
    <entry key="Project Default">
      <profile-state>
        <expanded-state>
          <State>
            <id />
          </State>
          <State>
            <id>Control flow issuesJavaScript</id>
          </State>
          <State>
            <id>DOM issuesJavaScript</id>
          </State>
          <State>
            <id>GeneralJavaScript</id>
          </State>
          <State>
            <id>HTML</id>
          </State>
          <State>
            <id>JavaScript</id>
          </State>
          <State>
            <id>JavaScript validity issuesJavaScript</id>
          </State>
          <State>
            <id>Python</id>
          </State>
          <State>
            <id>XML</id>
          </State>
        </expanded-state>
      </profile-state>
    </entry>
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
    <OptionsSetting value="true" id="Add" />
    <OptionsSetting value="true" id="Remove" />
    <OptionsSetting value="true" id="Checkout" />
    <OptionsSetting value="true" id="Update" />
    <OptionsSetting value="true" id="Status" />
    <OptionsSetting value="true" id="Edit" />
    <ConfirmationsSetting value="1" id="Add" />
    <ConfirmationsSetting value="0" id="Remove" />
  </component>
  <component name="ProjectReloadState">
    <option name="STATE" value="0" />
  </component>
  <component name="ProjectView">
    <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
      <flattenPackages />
      <showMembers />
      <showModules />
      <showLibraryContents />
      <hideEmptyPackages />
      <abbreviatePackageNames />
      <autoscrollToSource />
      <autoscrollFromSource />
      <sortByType />
    </navigator>
    <panes>
      <pane id="ProjectPane">
        <subPane>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="static" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="static" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="scripts" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="static" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="inc" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="static" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="css" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="app" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="app" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="views" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
          <PATH>
            <PATH_ELEMENT>
              <option name="myItemId" value="pa" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="pyqt-webkit-base" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="src" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="app" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
            <PATH_ELEMENT>
              <option name="myItemId" value="model" />
              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
            </PATH_ELEMENT>
          </PATH>
        </subPane>
      </pane>
      <pane id="Scope" />
    </panes>
  </component>
  <component name="PropertiesComponent">
    <property name="options.splitter.main.proportions" value="0.3" />
    <property name="WebServerToolWindowFactoryState" value="false" />
    <property name="options.lastSelected" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
    <property name="recentsLimit" value="5" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
    <property name="FullScreen" value="false" />
    <property name="DefaultHtmlFileTemplate" value="Html5" />
    <property name="options.searchVisible" value="true" />
    <property name="options.splitter.details.proportions" value="0.2" />
  </component>
  <component name="PyConsoleOptionsProvider">
    <option name="myPythonConsoleState">
      <PyConsoleSettings />
    </option>
    <option name="myDjangoConsoleState">
      <PyConsoleSettings />
    </option>
  </component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="C:\projects\python\pyqt-webkit-base\static" />
      <recent name="C:\projects\python\pyqt-webkit-base\src\app\views" />
      <recent name="C:\projects\python\pyqt-webkit-base\src\app" />
      <recent name="$PROJECT_DIR$/static/css/inc" />
      <recent name="$PROJECT_DIR$/src/pau/views" />
    </key>
    <key name="MoveFile.RECENT_KEYS">
      <recent name="$PROJECT_DIR$/src/pau" />
      <recent name="C:\projects\pa\tests" />
      <recent name="C:\projects\pa\tests\pau" />
    </key>
  </component>
  <component name="RunManager" selected="Python.start">
    <configuration default="false" name="start" type="PythonConfigurationType" factoryName="Python" temporary="true">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs>
        <env name="PYTHONUNBUFFERED" value="1" />
      </envs>
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
      <option name="IS_MODULE_SDK" value="true" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/start.py" />
      <option name="PARAMETERS" value="" />
      <RunnerSettings RunnerId="PyDebugRunner" />
      <RunnerSettings RunnerId="PythonRunner" />
      <ConfigurationWrapper RunnerId="PyDebugRunner" />
      <ConfigurationWrapper RunnerId="PythonRunner" />
      <method />
    </configuration>
    <configuration default="false" name="Nosetests in flash_msg_tests" type="tests" factoryName="Nosetests" temporary="true">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs />
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/tests/pau/views" />
      <option name="IS_MODULE_SDK" value="true" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="C:\projects\pa\tests\pau\flash_msg_tests.py" />
      <option name="CLASS_NAME" value="" />
      <option name="METHOD_NAME" value="" />
      <option name="FOLDER_NAME" value="" />
      <option name="TEST_TYPE" value="TEST_SCRIPT" />
      <option name="PATTERN" value="" />
      <option name="USE_PATTERN" value="false" />
      <option name="PARAMS" value="" />
      <option name="USE_PARAM" value="false" />
      <RunnerSettings RunnerId="PythonRunner" />
      <ConfigurationWrapper RunnerId="PythonRunner" />
      <method />
    </configuration>
    <configuration default="false" name="webkit" type="PythonConfigurationType" factoryName="Python" temporary="true">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs>
        <env name="PYTHONUNBUFFERED" value="1" />
      </envs>
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/src/base" />
      <option name="IS_MODULE_SDK" value="true" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="$PROJECT_DIR$/src/base/webkit.py" />
      <option name="PARAMETERS" value="" />
      <RunnerSettings RunnerId="PythonRunner" />
      <ConfigurationWrapper RunnerId="PythonRunner" />
      <method />
    </configuration>
    <configuration default="true" type="tests" factoryName="Nosetests">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs />
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="" />
      <option name="IS_MODULE_SDK" value="false" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="" />
      <option name="CLASS_NAME" value="" />
      <option name="METHOD_NAME" value="" />
      <option name="FOLDER_NAME" value="" />
      <option name="TEST_TYPE" value="TEST_SCRIPT" />
      <option name="PATTERN" value="" />
      <option name="USE_PATTERN" value="false" />
      <option name="PARAMS" value="" />
      <option name="USE_PARAM" value="false" />
      <method />
    </configuration>
    <configuration default="true" type="PythonConfigurationType" factoryName="Python">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs>
        <env name="PYTHONUNBUFFERED" value="1" />
      </envs>
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="" />
      <option name="IS_MODULE_SDK" value="false" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="" />
      <option name="PARAMETERS" value="" />
      <method />
    </configuration>
    <configuration default="true" type="tests" factoryName="Doctests">
      <option name="INTERPRETER_OPTIONS" value="" />
      <option name="PARENT_ENVS" value="true" />
      <envs />
      <option name="SDK_HOME" value="" />
      <option name="WORKING_DIRECTORY" value="" />
      <option name="IS_MODULE_SDK" value="false" />
      <option name="ADD_CONTENT_ROOTS" value="true" />
      <option name="ADD_SOURCE_ROOTS" value="true" />
      <module name="pa" />
      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
      <option name="SCRIPT_NAME" value="" />
      <option name="CLASS_NAME" value="" />
      <option name="METHOD_NAME" value="" />
      <option name="FOLDER_NAME" value="" />
      <option name="TEST_TYPE" value="TEST_SCRIPT" />
      <option name="PATTERN" value="" />
      <option name="USE_PATTERN" value="false" />
      <method />
    </configuration>
    <configuration default="true" type="JavascriptDebugSession" factoryName="Local" singleton="true">
      <JSDebuggerConfigurationSettings>
        <option name="engineId" value="embedded" />
        <option name="fileUrl" />
      </JSDebuggerConfigurationSettings>
      <method />
    </configuration>
    <list size="3">
      <item index="0" class="java.lang.String" itemvalue="Python.start" />
      <item index="1" class="java.lang.String" itemvalue="Python tests.Nosetests in flash_msg_tests" />
      <item index="2" class="java.lang.String" itemvalue="Python.webkit" />
    </list>
    <recent_temporary>
      <list size="3">
        <item index="0" class="java.lang.String" itemvalue="Python.start" />
        <item index="1" class="java.lang.String" itemvalue="Python.webkit" />
        <item index="2" class="java.lang.String" itemvalue="Python tests.Nosetests in flash_msg_tests" />
      </list>
    </recent_temporary>
  </component>
  <component name="ShelveChangesManager" show_recycled="false" />
  <component name="SvnConfiguration" maxAnnotateRevisions="500" myUseAcceleration="nothing" myAutoUpdateAfterCommit="false" cleanupOnStartRun="false" SSL_PROTOCOLS="all">
    <option name="USER" value="" />
    <option name="PASSWORD" value="" />
    <option name="mySSHConnectionTimeout" value="30000" />
    <option name="mySSHReadTimeout" value="30000" />
    <option name="LAST_MERGED_REVISION" />
    <option name="MERGE_DRY_RUN" value="false" />
    <option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
    <option name="UPDATE_LOCK_ON_DEMAND" value="false" />
    <option name="IGNORE_SPACES_IN_MERGE" value="false" />
    <option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
    <option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
    <option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
    <option name="FORCE_UPDATE" value="false" />
    <option name="IGNORE_EXTERNALS" value="false" />
    <myIsUseDefaultProxy>false</myIsUseDefaultProxy>
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="122ce47b-b488-4553-a355-406e32361329" name="Default" comment="" />
      <created>1370831543768</created>
      <updated>1370831543768</updated>
    </task>
    <servers />
  </component>
  <component name="ToolWindowManager">
    <frame x="-8" y="0" width="1374" height="744" extended-state="0" />
    <editor active="false" />
    <layout>
      <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32993197" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2497332" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1410061" sideWeight="0.67346936" order="0" side_tool="false" content_ui="combo" />
      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3265306" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
    </layout>
  </component>
  <component name="VcsContentAnnotationSettings">
    <option name="myLimit" value="2678400000" />
  </component>
  <component name="VcsManagerConfiguration">
    <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
    <option name="CHECK_NEW_TODO" value="true" />
    <option name="myTodoPanelSettings">
      <value>
        <are-packages-shown value="false" />
        <are-modules-shown value="false" />
        <flatten-packages value="false" />
        <is-autoscroll-to-source value="false" />
      </value>
    </option>
    <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
    <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
    <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
    <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
    <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
    <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
    <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
    <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
    <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
    <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
    <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
    <option name="SHORT_DIFF_HORIZONTALLY" value="true" />
    <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
    <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
    <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
    <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
    <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
    <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="false" />
    <option name="SHOW_DIRTY_RECURSIVELY" value="false" />
    <option name="LIMIT_HISTORY" value="true" />
    <option name="MAXIMUM_HISTORY_ROWS" value="1000" />
    <option name="UPDATE_FILTER_SCOPE_NAME" />
    <option name="USE_COMMIT_MESSAGE_MARGIN" value="false" />
    <option name="COMMIT_MESSAGE_MARGIN_SIZE" value="72" />
    <option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="false" />
    <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
    <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
    <option name="LAST_COMMIT_MESSAGE" />
    <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
    <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
    <option name="ACTIVE_VCS_NAME" />
    <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
    <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
    <option name="UPDATE_FILTER_BY_SCOPE" value="false" />
    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
  </component>
  <component name="XDebuggerManager">
    <breakpoint-manager>
      <breakpoints>
        <line-breakpoint enabled="true" type="python-line">
          <url>file://$PROJECT_DIR$/src/pau/model/flash_msg.py</url>
          <line>13</line>
        </line-breakpoint>
        <line-breakpoint enabled="true" type="python-line">
          <url>file://$PROJECT_DIR$/lib/nark/process/worker.py</url>
          <line>116</line>
          <option name="timeStamp" value="1" />
        </line-breakpoint>
        <line-breakpoint enabled="true" type="python-line">
          <url>file://$PROJECT_DIR$/src/app/conf.py</url>
          <line>13</line>
          <option name="timeStamp" value="2" />
        </line-breakpoint>
      </breakpoints>
      <option name="time" value="3" />
    </breakpoint-manager>
  </component>
  <component name="editorHistoryManager">
    <entry file="file://$PROJECT_DIR$/src/app/views/__init__.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="14" column="23" selection-start="640" selection-end="640" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/views/utils.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="39" column="18" selection-start="1261" selection-end="1261" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#578#616#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/views/sample.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="26" column="13" selection-start="854" selection-end="854" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/static/inc/header.html">
      <provider selected="true" editor-type-id="text-editor">
        <state line="14" column="0" selection-start="387" selection-end="387" vertical-scroll-proportion="-9.153846">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/__init__.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="6" column="8" selection-start="89" selection-end="89" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#0#24#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/session.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="13" column="0" selection-start="576" selection-end="576" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#576#614#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/base/webkit.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="24" column="9" selection-start="792" selection-end="792" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#576#614#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/config.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/base/__init__.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="12" column="0" selection-start="228" selection-end="228" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#0#38#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/start.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="32" column="35" selection-start="696" selection-end="696" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#0#16#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/conf.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="36" column="12" selection-start="924" selection-end="924" vertical-scroll-proportion="0.0">
          <folding>
            <element signature="e#576#614#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/model/flash_msg.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="60" column="18" selection-start="1843" selection-end="1843" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/app/model/pref.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="53" column="0" selection-start="1563" selection-end="1563" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/src/base/db.py">
      <provider selected="true" editor-type-id="text-editor">
        <state line="43" column="0" selection-start="1475" selection-end="1475" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/static/prefs.html">
      <provider selected="true" editor-type-id="text-editor">
        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
          <folding />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/static/index.html">
      <provider selected="true" editor-type-id="text-editor">
        <state line="27" column="25" selection-start="951" selection-end="952" vertical-scroll-proportion="0.7906977">
          <folding />
        </state>
      </provider>
    </entry>
  </component>
</project>

redpajama_set_name: RedPajamaGithub


text:
<!DOCTYPE html>

hola earth


WASHINGTON (AP) — More than 3½ hours before the start of what many expect to be his last game at Nationals Park as a member of the Washington Nationals, Bryce Harper stood at his locker and let his eyes linger on that familiar white jersey with the curly red "W'' on the front and his last name on the back.
Then Harper, who can become a free agent at season's end, put on his full uniform, right down to the stirrups — the only player ready that far ahead of Wednesday's scheduled first pitch for the Nationals' home finale against the Miami Marlins.
"It's definitely crazy walking in today and knowing this could be my last game at Nats Park in my white jersey. It's definitely something that you're not sure how you're going to react, and not sure what it's going to be like," Harper said.
Washington is the only big league club Harper has played for.
"This is my home. This is my city," said Harper, the only NL player with 100 RBIs, 100 runs and 100 walks in 2018. "Being able to come here — of course I root for the Golden Knights and I root for Duke and I root for the Cowboys and things like that — but I'm a Washington National."
They drafted him No. 1 overall at age 17 in 2010, then called him up to the majors at 19. He was the NL Rookie of the Year in 2012, then a unanimous selection as NL MVP in 2015.
"He's got an unbelievable future ahead of him. Hopefully it's here with the Nationals. We all hope for that," said Martinez, the rookie skipper whose team entered Wednesday with an 80-78 record. "What he's meant for the city — if you take a look around the stadium and see how many number 34's kids wear and fans wear, that should tell you everything."
Eaton sounded genuinely surprised to see the slugger dressed to play at that hour.
"Did we have a doubleheader today?" Eaton teased. "Hey, yo, you ready to go or what?"
Until it's been determined, Harper's 2019 destination will be the talk of baseball.


I love people and am blessed to get to work in a job where I see the miracles of healing. As a young girl, I was introduced to the 12-steps and it has lead me to a set of guiding principles that has given me opportunities to do many things and enjoy a life worth living.
I received my bachelors degree from Centenary College of Louisiana where I studied religious education and took as many art and sociology classes I could. I pursued my Masters degree in social work at University of Texas at Arlington. I am a certified challenge course practitioner, licensed master social worker, licensed chemical dependency counselor, and EMDR trained.
I am honored to know the women of Simply Grace and to get to remember the journey we are all on one day at a time.


text:
Airline News / Travel Technology News
Virgin America welcomes Netflix to skies
Today, Netflix, the world's leading Internet TV network, and Virgin America, have joined forces to provide complimentary in-flight Wi-Fi access that allows new and existing Netflix members to enjoy the entire Netflix catalogue of films and award-winning shows.
Beginning today, Netflix users on-board Virgin America's new ViaSat Wi-Fi-equipped aircraft will be able to stream the best programming available in the skies, including the hit series House of Cards and Orange Is The New Black, to their phones, tablets, and laptops at no cost through March 2nd, 2016.
The experience is made possible by Virgin America's recent connectivity partnership with ViaSat, which brings significantly faster Wi-Fi to the airline's ten new airbus A320 aircraft being delivered from fall 2015 to mid-2016.
In addition to offering free streaming through its new ViaSat Wi-Fi network, as of next month, Virgin America will also offer House of Cards seasons one-to-three for free on the airline's recently upgraded Red touch-screen seatback in-flight entertainment platform – so travellers can binge-watch through their own devices or their seatback.
Virgin America and Netflix kick off their #NetflixOnboard partnership today with the surprise unveiling of a House of Cards and Netflix-branded aircraft and an appearance by Michael Kelly, the Emmy-nominated star of the Netflix original series House of Cards.
Kelly's character Doug Stamper, who serves as president Frank Underwood's loyal consultant and Machiavellian fixer, will drop in on Virgin America Flight 1 from San Francisco International Airport to Washington Reagan National Airport.
Guests on-board the flight will be able to binge-watch Netflix content in Virgin America's mood-lit cabin and will be treated to a signature Whiskey Whistleblower cocktail, while Kelly – as Doug Stamper – dispenses some tongue-in-cheek, morally-ambiguous political advice over the aircraft's intercom before take-off.
"Netflix and Virgin America are both known for their focus on innovation and for shaking up their respective industries – so we're thrilled to team up to bring the best in technology and entertainment to the skies.
"These latest generation investments in our Wi-Fi and entertainment platforms allow us to provide the largest breadth of streamed content ever available at 35,000 feet – along with entire seasons of some Netflix favourites via the Red platform," said Abby Lunardini, Virgin America vice president of brand marketing and communications.
"We hope our guests enjoy the offering and know that even President Frank Underwood can't get entertainment this good on-board Air Force One."
Finca Cortesin announces new Thai Oriental Spa in Andalusia
Grand Lucayan to offer new autumnal wellness travel package
Airbus delivers first ever A321neo to Virgin America
Alaska Airlines to retire Virgin America name in 2019
Alaska Airlines to acquire Virgin America for $4bn
Virgin America adds daily flights to Hawai'i
Virgin America signs codeshare with China Southern Airlines
Virgin America signs up for Travelport Rich Content solution
Virgin America extends San Francisco Giants partnership
Virgin America announces pricing for IPO

redpajama_set_name: RedPajamaCommonCrawl


text:
Ertha Metaverse Raises $5.4M
Ertha Metaverse, currently the most notable Metaverse and Play-to-Earn projects in BSC blockchain gaming, announced its list of key investors.
They include the world-renowned:
LD Capital
Polygon Syndicate
OKEx Blockdream Ventures
Shima Capital
Genblock Capital
Zen Capital
& Many others.
All have been instrumental to the continued success of the project.
Xi – Partner of LD Capital, the leading investors of Ertha provided insights about the project: "We have no hesitation to invest in Ertha after first call with Ertha team. They have proven track record in both gaming and crypto industries. Coronavirus pandemic has forced governments to take various lockdown measures which placed a huge pressure on economies and businesses. At this challenging time, we believe Ertha is going to gain more adoption from traditional game players and start a new era of Play to Earn."
To date Ertha raised $5.4 million and recently launched IDO's on three of blockchain gaming's most respected launchpads, Seedify, GameFi, and RedKite – the community pools sold out in less than one minute each.
Ertha is going strength-to-strength with its NFT land sales and already sold over 7,500 revenue generating land-plots.
Social media channels are exploding in popularity – Twitter community recently surpassed 70,000 followers, Discord is boasting at 50,000.
Ertha is part of the Solar Multiverse Ecosystem – Ertha, Moon, Venus & other planets.
Introduction to Ertha:
In Ertha, mankind finds itself on the brink of extinction. World leaders failed with their last-ditch attempts at saving Earth, and in the years that followed untold natural disasters devastated the planet.
Players are given the opportunity to right the wrongs of our past by building a new world, from the ground up. Extract resources, develop land, re-build economies, and re-form countries and their governments in the way they see fit. Each player's actions can have lasting impacts within an ever-evolving metaverse.
Ertha's Gameplay:
Ertha's world is a complex and intricately designed playspace ripe for the creation of new governments, economies, and shaky alliances between its player-base. The Metaverse is divided into 350,000 land plots, each of which collects taxes, fees, and other forms of revenue from the transactions taking place on them. Players must balance production, trade, and financial budgets, in order to stay one step ahead of the competition.
For those looking for an introduction to Metaverses and Play-to-Earn gaming, Ertha represents an opportunity like no other.
How does Play-to-Earn Work:
Player ownership is connected to unique NFTs called HEXs. Each HEX grants its owner complete control over their land within the Metaverse.
Ertha has been designed to replicate a real-life environment with a player-driven economy. A Player's actions, whether political or environmental, in times of conflict or peace, can create real change and have far-reaching consequences.
Owners have a say in everything from international trade laws to taxes on the transactions being conducted in their territory. Just like in the real world, each HEX owner will profit from their real estate investment.
Social Media Channels:
Twitter : https://twitter.com/ErthaGame
Discord : https://discord.gg/ertha
Medium : https://erthium.medium.com/
YouTube : https://www.youtube.com/channel/UCHiXL-GSDqd9jIa1hsr20Kw
Telegram : https://t.me/erthagame
This is a sponsored post. Learn how to reach our audience here. Read disclaimer below.
from Bitcoin News
στις Δεκεμβρίου 28, 2021
Ετικέτες Bitcoin News


text:
Russell Westbrook's Complicated Homecoming
LAWNDALE, Calif. — "Go home," Russell Westbrook yelled at a heckler seated behind the players' bench. "Go home," he repeated.
The crowd at this late-February blowout to the lowly New Orleans Pelicans had turned fast. The boos and taunts were so bad that Mr. Westbrook's Los Angeles Lakers teammates looked ready to confront fans in the first row. LeBron James got into a sideline debate with one trash talker, while Trevor Ariza had to be physically restrained from confronting another.
"You're not Kobe, you're not Kobe," a fan slurred, said Michael Morales, who filmed the courtside exchange at the Crypto.com Arena in Los Angeles.
Drunk people yelling is normal. Athletes yelling back isn't — especially at fans in seats that run $3,500 a pop.
"I'm a die-hard Laker fan," said Mr. Morales, a 38-year-old postal worker who drives across town after every shift, coming to more games than Jack Nicholson and posting close-up clips that can earn him thousands of dollars on Facebook Reels. But "right now," he said, "it's hard to watch." Mr. Morales's pain, and extra income, will end soon: On Tuesday night, after a loss to Phoenix, the Lakers were eliminated from the postseason.
Mr. Westbrook joined the Lakers last July, after stints on the Houston Rockets and Washington Wizards marred by injury and a case of Covid, in a blockbuster trade that brought him to the team he grew up idolizing.
Though his performance this season has made him the target of angry fans, much of Mr. Westbrook's off-court life seems to be thriving. There's a revealing new Showtime film, a History Channel documentary, a recent art book, a clothing line with a new collection, along with an educational foundation and community involvement that belies his temperamental image.
All of that should come as no surprise to many who have followed his career or been involved with it. "He knows how to be a star," said Simon Doonan, who spent three decades as Barneys New York's creative director.
Mr. Doonan, now a judge on the TV show "Making It," calls past collections with Mr. Westbrook where he "selected fabrics, working on and approving designs," and shot videos together, "the most fun I've had in my career."
But while Mr. Westbrook's off-court life is filled with successes, his basketball season has been so rocky that the hometown faithful have turned on the Los Angeles native — so much so that his wife recently tweeted that the family had been sent "death wishes." The former Laker Shaquille O'Neal has advised slowing down, and he's even been benched and shopped in trade talks.
Mr. Westbrook has reacted to the boos and taunts of "Westbrick" with defiance; speaking to a pool of reporters after the Pelicans loss, he said, "I got three beautiful kids at my house, my wife, I ain't taking it home."
But just days later, in a postgame interview, he shifted, saying that the taunts had gotten to him, alluding to more important things than basketball, a revelation that was a similar vein to the Showtime film, "Passion Play," in which he is introspective in a way that can still be uncommon among professional athletes. "The way I compete has made me an easy target," he says in the film, almost as if there are two Russells. "In the sports world, I am the bad guy. People don't really understand who I am. I'll be lying to say it didn't affect me."
Born in Long Beach, Calif., Mr. Westbrook grew up in Hawthorne, near South Central Los Angeles, went to high school in Lawndale, then spent two years in Westwood at the University of California, Los Angeles. He entered the N.B.A. in 2008 and immediately became known for his fiery play and fashion sense.
In the 1970s, the New York Knicks star Walt "Clyde" Frazier introduced player-endorsed sneakers, mink coats, Zorro hats and capes. Twenty years later, Dennis Rodman raised the bar, once wearing a wedding dress to a book signing. In the social media era, Mr. Westbrook has turned the arena tunnel into a pregame catwalk.
Being 6-foot-3 means he can shop off the rack, but he rarely plays it safe, preferring vivid patterns or, say, a white kilt at the Thom Browne spring 2022 show — bold statements in the hyper-macho sports world.
He has embraced his role as fashion star with vigor, spending fashion weeks in New York, Paris and Milan with the likes of Anna Wintour, Carine Roitfeld, Raymond Pettibon and Tim Coppens.
"You wouldn't want to get in his way on the court. In person, he's totally different," said Anthony Petrillose, the associate publisher of Rizzoli New York, which published "Russell Westbrook: Style Drivers," with cover art by Mr. Pettibon. "The experience was, 'I'm here to learn, I want the best possible book — how do we do it?'"
Honor the Gift, Mr. Westbrook's fashion brand, has done pop-ups in Los Angeles and Paris and released a collection earlier this month called the Concrete Jungle. The summer capsule collection was a homage to swap meets; last fall, it was a halcyon reimagining of the soul soundtrack to growing up in Hawthorne.
"Russell takes fashion every bit as seriously as he does being a point guard," said Ms. Wintour, who last saw him in November at Madison Square Garden, where he "generously presented me with his sneakers postgame. They were a little too large for me, but fortunately I was with my 6-4 nephew, who happily took them."
But the Lakers lost that night — and Mr. Westbrook looks unhappy on the job. While he's worked with Nike's Jordan brand on a full-foot system for his shoes, pored over Honor the Gift designs, and carefully constructed his homecoming, the basketball fit in Los Angeles has been bumpy.
In June of last year, Honor the Gift teamed with Jordan and Mr. Westbrook's Why Not? Foundation, building a basketball court and sponsoring tech and design workshops at a Y.M.C.A. in the city's Crenshaw District. (Jordan has produced Westbrook's signature shoe and Why Not? apparel since 2018.) The nonprofit foundation, named after a favorite saying, supports social initiatives and schools.
"Style is a weapon and that doesn't end with clothing," said Sam Sohaili, who runs DMA United, a creative agency that has worked with Mr. Westbrook on brand deals. "Russell's style is how he interacts with people."
Such interactions support the two-Russells theory: relishing the villain role, then playing opposite. (Despite multiple attempts, Mr. Westbrook declined to comment for this article.)
Playing in Los Angeles also means Hollywood. "Tulsa Burning: The 1921 Race Massacre," which he executive produced, premiered last May and other projects are in development.
And just when he appears to be another celebrity cashing in, he crosses over. During a grueling playing period in December, days after entering the N.B.A.'s safety protocols because of positive coronavirus tests in the team's traveling party, then testing negative for Covid, Mr. Westbrook donned a Santa hat and grinchy tracksuit, posed for photos and gave every Why Not? student new sneakers.
"Sometimes the priority ain't what you get paid for," noted the legendary Compton rapper DJ Quik just before the Lakers were crushed by the crosstown Clippers in March.
Leuzinger
South of the Crypto.com Arena, at Leuzinger High School in working-class Lawndale, one of the first things you see is a 50-foot mural of a soaring you-know-who plastered on the Gloria Ramos Cafeteria. Across campus, in the Thompson Gymnasium, a familiar name and jersey number hang above the court where Mr. Westbrook led the Olympians to a 25-4 record as a senior back in 2006.
"It was inevitable that he'd go to the N.B.A.," recalled Patrick Cleveland, a high school teammate who lived down the street from Mr. Westbrook and now coaches and works as a safety officer here.
We spoke just as the trade deadline passed and the Lakers decided not to deal Mr. Westbrook. In Lawndale he's still a prince of the city who came up hard, made good and stayed true.
To understand the two Russells means understanding a tragic what if, said Marlon Mendez, a coach from back in the day and now the school's athletic director. What if Mr. Westbrook's best friend Khelcey Barrs hadn't collapsed after a string of pickup games at Los Angeles Southwest College on May 11, 2004?
Khelcey was a 6-foot-6 sophomore headed for the N.B.A., until a heart condition ended everything at 16. "We all had that chip on our shoulder, but Russell took it on," Mr. Cleveland said. "Everybody thinks he's this high-energy guy. People don't understand what he plays for. We were all hurt, but he was the one who was able to make that name continue. I'm grateful Russell made it and carried that name with him."
After he died, Mr. Westbrook would walk across the street and do Khelcey's chores before class. Today, he wears wristbands and shoes with the initials KB3, Leuzinger basketball is sponsored by Jordan and the onetime high school star remains a fixture.
"I grew up around him," said Amire Jones, a 16-year-old junior and guard from Compton. "At school, games, Jordan events. It's crazy because an N.B.A. player went to your school and he's someone I can reach out to."
It's not uncommon for Mr. Westbrook to drop in, said Mr. Jones, the son of the Leuzinger coach Arturo Jones, one of many formative figures Mr. Westbrook still leans on. "His legacy provides opportunities for us. He's uplifting. Once I was working out with him, missing shots, he pulled me aside. He said: 'Confidence, don't stop. You miss 20, keep shooting.'"
What about Mr. Westbrook's own confidence? The boos?
"There's a lot of negativity around him for no reason," Mr. Jones said. "He's going to keep shooting. He doesn't care. It's Russ."
UFC president Dana White does not expect punishment for domestic violence incident | CNN
Zach Johnson isn't discounting Tiger Woods for the Ryder Cup | CNN
Australia pulls out of Afghanistan cricket series over Taliban's restrictions on women | CNN
GM looks to hire tech talent from massive job cuts in Silicon Valley


text:
Pentagon Says Top IS Leaders Killed In Air Strikes In Iraq
December 19, 2014 04:16 GMT
Rear Admiral John Kirby says Washington believes the loss of the Islamic State leaders seriously "degrades" the ability of Islamic State.
The Pentagon says air strikes by the United States and its allies have killed "multiple" senior and midlevel Islamic State leaders.
Spokesman Rear Admiral John Kirby said on December 18 that Washington believes that the loss of the leaders "degrades" the ability of IS to "command and control current operations against Iraqi security forces."
"The Wall Street Journal" cited U.S. officials as saying that U.S. military air strikes had killed three top leaders: Abd al-Basit, head of IS military operations in Iraq; Haji Mutazz, a deputy to the group's leader, Abu Bakr al-Baghdadi; and Radwin Talib, the group's self-styled governor in Mosul, Iraq.
The Pentagon added that "leadership, command and control nodes, facilities, and equipment are always part of our targeting calculus."
Words of the deaths came a day after U.S. Defense Secretary Chuck Hagel approved new orders for several hundred troops to deploy to Iraq to train Iraqi forces.
The Obama administration recently decided to deploy 1,500 more American forces to the country to advise and train Iraqi forces.
Army Lieutenant General James Terry, who is leading the U.S. campaign against Islamic State, cautioned it will take at least three years to build the capabilities of the Iraqi military.
He declined to comment on when a potential operation to retake Mosul may be launched.
U.S. President Barack Obama spoke on December 18 with Iraq Prime Minister Haider al-Abadi, commending him for his efforts to create an inclusive government and build a united Iraqi front to combat IS militants.
Obama also reiterated the U.S. commitment to train and assist the Iraqi military, provide weapons and equipment, and continue to launch air strikes against the militants.
Meanwhile, at least 1,000 people are feared to have been killed in the Syrian village of al-Kashkiya, the Britain-based Syrian Observatory for Human Rights said on December 18.
"There are still 1,000 people missing from the Shoueitat tribe. We believe they were all executed by Islamic State fighters when they advanced into the village of al-Kashkiya last summer," Rami Abdel-Rahman, the head of the Syrian Observatory for Human Rights, told the German news agency dpa.
With reporting by AP and "The Wall Street Journal"
RFE/RL journalists report the news in 27 languages in 23 countries where a free press is banned by the government or not fully established. We provide what many people cannot get locally: uncensored news, responsible discussion, and open debate.
LIKE FOLLOW Subscribe via RSS