[fusion_builder_container hundred_percent=”no” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” overlay_color=”” video_preview_image=”” border_color=”” border_style=”solid” padding_top=”” padding_bottom=”” padding_left=”” padding_right=”” admin_label=”Einleitung” type=”legacy” admin_toggled=”no”][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ background_position=”left top” background_color=”” border_color=”” border_style=”solid” border_position=”all” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” center_content=”no” last=”true” min_height=”” hover_type=”none” link=”” border_sizes_top=”” border_sizes_bottom=”” border_sizes_left=”” border_sizes_right=”” first=”true”][fusion_text columns=”” column_min_width=”” column_spacing=”” rule_style=”default” rule_size=”” rule_color=”” hue=”” saturation=”” lightness=”” alpha=”” content_alignment_medium=”” content_alignment_small=”” content_alignment=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” margin_top=”” margin_right=”” margin_bottom=”” margin_left=”” fusion_font_family_text_font=”” fusion_font_variant_text_font=”” font_size=”” line_height=”” letter_spacing=”” text_transform=”none” text_color=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]
Meinen Newsletter verschicke ich seit gut einem Jahr zweimal im Monat an Menschen, die ihre (weiblichen) Werte leben möchten. Denn meine Vision ist, dass die Zukunft weiblicher werden muss, damit die Welt wieder ins Gleichgewicht kommt. In diesem Jahr habe ich viele Erfahrungen gemacht, aus Fehlern gelernt und Lust auf mehr bekommen. Nun überarbeite ich meinen Newsletter inhaltlich, grafisch und technisch. Bislang verlinke ich meine Blogartikel, gebe Impulse zu meiner Arbeit und teile Empfehlungen aus meinem Netzwerk. Hinzu kommen jetzt meine Angebote, die ich in den nächsten Monaten online umsetzen werde. In diesem Blogbeitrag schreibe ich über meine wichtigsten Erkenntnisse. Lass dich inspirieren und begleite mich auf dieser Newsletter-Entwicklungsreise und komm in meinen Newsletter!
[/fusion_text][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container hundred_percent=”no” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” overlay_color=”” video_preview_image=”” border_color=”” border_style=”solid” padding_top=”” padding_bottom=”” padding_left=”” padding_right=”” admin_label=”Copy” type=”legacy” admin_toggled=”no”][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ background_position=”left top” background_color=”” border_color=”” border_style=”solid” border_position=”all” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding_top=”” padding_right=”” padding_bottom=”” padding_left=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” center_content=”no” last=”true” min_height=”” hover_type=”none” link=”” border_sizes_top=”” border_sizes_bottom=”” border_sizes_left=”” border_sizes_right=”” first=”true”][fusion_text columns=”” column_min_width=”” column_spacing=”” rule_style=”default” rule_size=”” rule_color=”” hue=”” saturation=”” lightness=”” alpha=”” content_alignment_medium=”” content_alignment_small=”” content_alignment=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” margin_top=”” margin_right=”” margin_bottom=”” margin_left=”” fusion_font_family_text_font=”” fusion_font_variant_text_font=”” font_size=”” line_height=”” letter_spacing=”” text_transform=”none” text_color=”” animation_type=”” animation_direction=”left” animation_speed=”0.3″ animation_offset=””]
#Erkenntnis 1: Investiere gleich zu Beginn in eine optimale Newsletter-Plattform
Am Anfang suchte ich nach einem kostenfreien, einfachen Newsletter-Anbieter in deutscher Sprache. Meine Wahl fiel auf Mail Poet. Ich kam technisch gut zurecht und konnte alles selbst installieren. Die Gestaltung der Formulare ließ mir Spielraum, ich war recht zufrieden und verschickte meine ersten Newsletter. Meine Community empfahl mir zwar zu dem Zeitpunkt bereits ActiveCampaign, aber ich wollte Kosten sparen. Schon nach einigen Monaten stieß ich mit dem Programm an seine Grenzen, als ich meine Freebies automatisiert verschicken wollte. Weil ich
in diesem Jahr meinen Online-Kurs für Frauen anbieten werde, war mir wichtig, dass meine Liste wächst und die Automatisierungen technisch strukturiert funktionieren. Außerdem wollte ich verschiedene Sequenzen für unterschiedliche Produkte anbieten – auch das war mit Mail Poet nicht möglich.
Mein Fazit: Ich habe sehr viel Zeit investiert in eine kostenlose Plattform und ich kann nur jedem empfehlen, der online wachsen will, direkt einen professionellen Newsletter-Anbieter zu wählen. Du sparst Zeit und Nerven! Mit dem kleinsten Tarif bei ActiveCampaign erreichst du 500 Kontakte.
#Erkenntnis 2: Lass dich technisch unterstützen und konzentriere dich auf deine Inhalte
Anfangs verbrachte ich Stunden und Tage damit, mich in verschiedene technische Details zu fuchsen. Ich war manchmal sehr verzweifelt, weil die Technik nicht so wollte, wie ich selbst. Teilweise machte es mir Spaß, ich freute mich an kleinen Lernerfolgen und funktionierenden Teilschritten. Allerdings blieb vieles auf dem Schreibtisch liegen, um das ich mich ebenso kümmern musste. Ich verbrachte mehr Zeit mit der Technik im Hintergrund als mit Konzepten und Inhalten zu meinen Produkten.
Zu Beginn 2022 suchte ich eine virtuelle Assistentin. Seit Anfang des Jahres arbeite ich mit
André zusammen. André kommt aus Wien, ist Informatiker und kennt sich gut aus mit allen technischen Erfordernissen rund um das Online-Business. Ein wichtiger Auftrag war gleich zu Beginn der Umzug von Mail Poet zu ActiveCampaign. Ich muss mich noch sehr daran gewöhnen, Arbeit wirklich abzugeben und es nicht doch wieder selbst zu machen. Aber die Zusammenarbeit gelingt immer besser.
Fazit: Du bist Expertin für deine Inhalte, Konzepte und Angebote. Überlege dir gleich zu Anfang, wo du Unterstützung gut gebrauchen könntest. Buche zunächst überschaubare Pakete und teste die Zusammenarbeit mit einem Probeprojekt. So hast du die Kosten im Blick und freust dich über professionelle, technische und schnelle Umsetzung.
#Erkenntnis 3: Setze dir Ziele für deinen Newsletter
Was willst du erreichen mit deinem Newsletter? Für wen schreibst du? Welche Inhalte dürfen deine Leser:innen von dir erwarten? Wie willst du den Newsletter bewerben und Abonnenten gewinnen? Wie oft willst du deinen Newsletter verschicken und zu welchen Themen? Das sind alles wichtige Fragen, über die du dir von Anfang an Gedanken machen solltest. Klar kannst du erstmal ins Blaue starten und einfach mal machen, statt den Start immer wieder vor dir herzuschieben. Das hat bei mir auch erstmal funktioniert. Und mit dem Machen kommt die Erfahrung. Das ist in Ordnung. Nur, alle zwei Wochen ploppte das Thema wieder auf und jedes Mal fragte ich mich, was soll ich denn schreiben? Auch machte ich mir Sorgen, dass das doch niemanden interessiert, was ich zu schreiben habe. Ich hatte mir vorgenommen, zweimal im Monat einen Newsletter zu versenden. Das hat irgendwie geklappt.
Einfacher und strukturierter geht anders.
Mit meiner Zielgruppe war ich etwas unsicher. Anfangs schrieb ich für Menschen, dann für Frauen (wie allgemein?!) und nun schreibe ich für Menschen, die ihre (weiblichen) Werte sichtbar machen wollen. Mein Newsletter, mein Claim sowie meine Blogthemen, Angebote und Webseite, alles hat sich erst nach und nach entwickelt, bis ich meinen eigenen Wesenskern herausgearbeitet hatte. Und auch das bleibt im Wandel.
Fazit: Mache dir von Anfang an ein Konzept und setze dir Ziele! Und wenn du noch nicht in allen Details klar bist, dann lass es in dir nach und nach weiter für dich arbeiten und gehe in die Verbindlichkeit mit den Antworten, die du jetzt bereits hast. Vereinbare mit dir einen Versand-Rhythmus. Anfangs reicht vielleicht 1-2 Mal im Monat. Noch besser wäre es, du würdest feste Tage versenden, z.B. immer Freitags, so dass sich deine Leserschaft darauf verlassen kann. So baut sich Vertrauen auf. Je mehr du allerdings online anbieten möchtest, desto wichtiger ist es, wöchentlich zu versenden. Halte dich an deinen Plan und ziehe erst nach einigen Monaten ein erstes Fazit. So erlangst du Sicherheit und Routine, auf die du aufbauen kannst und vermeidest, dass dein Newsletter irgendwann in der Versenkung verschwindet.
#Erkenntnis 4: Starte den Newsletter gemeinsam in einer Gruppe
Fehlende Kenntnisse frischte ich im Newsletter-Workshop in
The Content Society auf. Automatisierungen, Sequenzen, Listen, Willkommensmail – alles neue Themen für mich, in die ich mich einarbeitete. Nach einem Jahr und mit dem neuen Programm ActiveCampaign versende ich jetzt für neue Interessent:innen eine
kleine Willkommens-Serie, um ihnen die Orientierung zu erleichtern und in den persönlichen Austausch zu kommen.
Gemeinsam in der Gruppe setzten wir den Newsletter auf und bewarben ihn auf den Social-Media-Kanälen, als E-Mail-Abbinder, im WhatsApp-Status und in den persönlichen Netzwerken. Sehr anregend dazu der
Blogbeitrag von Judith Peters von Sympatexter mit vielen Ideen,
wie du deine ersten 100 Abonnent:innen findest.
Fazit: Du musst es nicht alleine machen! Suche dir Menschen, die an den gleichen Projekten arbeiten. Das kann eine temporäre Arbeitsgruppe sein, ein Online-Kurs, ein Buddy oder ein Experten-Coaching.
Mit dem Umzug zu ActiveCampaign habe ich den Newsletter auch inhaltlich und grafisch überarbeitet. Auf den beiden Bildern kannst du dir einen ersten Eindruck machen. Nun warte ich auf Feedback von meinen Abonnent:innen. Ich bin sehr gespannt, zu hören, wie die Neuerungen ankommen.
Mein neues Headerbild weist klar auf meine Vision hin, dass die Zukunft weiblicher werden muss.
In meinem Abbinder kannst du jetzt ganz klar sehen und lesen, wofür ich stehe.
Bist du neugierig? Hier kannst du meinen letzten Newsletter lesen. Oder trage dich gleich hier in meinen Newsletter ein und erhalte als Bonus ein Kurzcoaching mit mir (gilt im April 2022)
#Erkenntnis 5: Mut ist auf jeden Fall die beste Grundlage für deinen Newsletter
Anfangs wollte ich alles richtig machen: eine funktionierende Technik, super Inhalte und ein schickes Layout. Alles ein bisschen viel. Zufrieden war ich nie. Auch fehlte mir die Resonanz meiner Leser:innen.
Interessierte das überhaupt irgendjemanden da draußen, was ich zu schreiben habe? Davon musste ich mich anfangs befreien. Bevor ich den Newsletter versendete, habe ich ihn gefühlt 100 Mal durchgelesen und ihn immer wieder verändert. Mein Liebster hat ihn vorher gelesen und wenn er meinte, das liest sich gut, dann habe ich auf Senden gedrückt. Nun nach fast einem Jahr verschickte ich ihn zum ersten Mal ohne diese Rückmeldung. Und glaub mir, du hast den Newsletter verschickt, dann liest du ihn nochmal durch und siehst sofort!!! den Fehler.
In meiner Laufbahn als Journalistin habe ich oft erlebt, dass mir bei druckfrischen Produkten sofort mindestens ein Fehler ins Auge stach, obwohl mehrere Kolleg:innen Korrektur gelesen hatten.
Fazit: Am Ende musst du es einfach tun. Die meisten Unternehmungen scheitern nicht weil uns Wissen fehlt, sondern, weil wir nicht in die Umsetzung kommen. Mache dir nicht so viele Gedanken. Schreibe intuitiv, schlafe eine Nacht darüber, nutze ein Korrekturprogramm und dann raus damit! Mit der Zeit kommst du in eine gewisse Routine und dann ist Zeit für eine Optimierung und ebenso die Frage, wie du mit deinen Abonnent:innen in einen Austausch kommen kannst. Und ja, Menschen machen Rechtsschreibfehler. Na, und?
Jetzt bist du neugierig, ob ich wirklich meinen Newsletter mit Rechtschreibfehlern verschicke? Dann trag dich gleich ein in meinen Newsletter.
#Erkenntnis 6: Abonniere andere Newsletter und lass dich inspirieren
Ich habe mich in viele Newsletter-Listen eingetragen und auch die Automatisierungen gespeichert. Manches fand ich inspirierend und das floss in meine eigenen Überlegungen ein. Aus Unsicherheit und Angst, etwas falsch zu machen, habe ich ganz am Anfang einiges kopiert:
hier gefiel mir der Stil, da fand ich die Rubriken, die inspirierenden Tipps oder die Schreibe gut. Das führte dazu, dass ich an etwas festhielt, das mir nicht entsprach. Mit der Zeit fand ich meinen eigenen Stil. Aber ich hätte mir auch ruhig von Anfang an etwas mehr vertrauen können.
Fazit: Schauen wie es andere machen hilft dir nur ganz zu Anfang. Lass dich ruhig inspirieren, aber dann setze deinen kreativen Autopiloten in Gang, vertraue deiner Schöpferkraft und gestalte deinen ganz indivuduellen Newsletter. Authentisch und Unverwechselbar. Sonst fehlt dir das Fundament für deinen Newsletter.
#Erkenntnis 7: Lerne aus deinen Fehlern und lass deinen Newsletter mit dir wachsen
Mit dem Umzug zu ActiveCampaign nutzte ich die Gelegenheit, Layout und Inhalte zu überarbeiten. Neue Rubriken, eine aussagekräftige Betreffzeile, ein Headerbild mit meinem aktuellen Claim und mehr Tipps und Angebote. Technisch automatisierte ich eine Willkommenssequenz. Aktuell verschicke ich meinen Newsletter zweimal im Monat. Bis zum Sommer kannst du damit rechnen, wöchentlich von mir zu hören. In einem meiner nächsten Newsletter schreibe ich über Gefühle und wie du mehr in die emotionale Balance kommst.
Meine aktuellen Rubriken
- Einleitung zu einem aktuellen, persönlichen Thema
- Tipps, Hinweise, Methoden zu den Themen Werte, Emotionen, persönliche Entwicklung
- Verlinkung meiner Blogartikel verbunden mit einer Geschichte oder einem aktuellen Bezug
- Der Blick hinter die Kulissen, was fällt mir schwer, worüber freue ich mich und was ärgert mich
- Empfehlungen aus meinem Netzwerk: Buchtipps, Dokumentationen, Webseiten, Videos, Podcasts, Blogbeiträge
- Einladung zu besonderen Angeboten von mir: Kurzcoachings, Kurse, Salongespräche, Wartelisten zu kostenfreien Workshops, Terminbuchungen
Fazit: Dein Newsletter darf mit dir gemeinsam wachsen. Nicht alles ist von Anfang an perfekt. Meine wichtigste Grundlage für meinen Newsletter sind meine Blogartikel mit Anleitungen, Übungen, Empfehlungen. Das ist schon ein Mehrwert für die Leser:innen, sollte es zumindest sein. Mit einem Newsletter bist du unabhängig. In den sozialen Medien herrscht eine Halbwertzeit von wenigen Stunden. Die meisten meiner Follower sehen meine Beiträge nicht. Also starte deinen Newsletter genau jetzt!
Begleite mich auf meiner Newsletter-Entwicklungsreise, lerne mit mir und von mir und lass dich inspirieren! Trag dich gern ein in meinen Newsetter und erhalte als Bonus ein Kurzcoaching mit mir (gilt für April 2022).
[/fusion_text][fusion_separator style_type=”default” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” sticky_display=”normal,sticky” class=”” id=”” flex_grow=”0″ top_margin=”” bottom_margin=”” width=”” alignment=”center” border_size=”” sep_color=”” hue=”” saturation=”” lightness=”” alpha=”” icon=”” icon_size=”” icon_color=”” icon_circle=”” icon_circle_color=”” /][fusion_code]PHN0eWxlPgogI19mb3JtXzEzXyB7IGZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDoxLjY7IGZvbnQtZmFtaWx5OmFyaWFsLCBoZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IG1hcmdpbjowOyB9CiAjX2Zvcm1fMTNfICogeyBvdXRsaW5lOjA7IH0KIC5fZm9ybV9oaWRlIHsgZGlzcGxheTpub25lOyB2aXNpYmlsaXR5OmhpZGRlbjsgfQogLl9mb3JtX3Nob3cgeyBkaXNwbGF5OmJsb2NrOyB2aXNpYmlsaXR5OnZpc2libGU7IH0KICNfZm9ybV8xM18uX2Zvcm0tdG9wIHsgdG9wOjA7IH0KICNfZm9ybV8xM18uX2Zvcm0tYm90dG9tIHsgYm90dG9tOjA7IH0KICNfZm9ybV8xM18uX2Zvcm0tbGVmdCB7IGxlZnQ6MDsgfQogI19mb3JtXzEzXy5fZm9ybS1yaWdodCB7IHJpZ2h0OjA7IH0KICNfZm9ybV8xM18gaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xM18gaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xM18gdGV4dGFyZWEgeyBwYWRkaW5nOjZweDsgaGVpZ2h0OmF1dG87IGJvcmRlcjojOTc5Nzk3IDFweCBzb2xpZDsgYm9yZGVyLXJhZGl1czo0cHg7IGNvbG9yOiMwMDAgIWltcG9ydGFudDsgZm9udC1zaXplOjE0cHg7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyB9CiAjX2Zvcm1fMTNfIHRleHRhcmVhIHsgcmVzaXplOm5vbmU7IH0KICNfZm9ybV8xM18gLl9zdWJtaXQgeyAtd2Via2l0LWFwcGVhcmFuY2U6bm9uZTsgY3Vyc29yOnBvaW50ZXI7IGZvbnQtZmFtaWx5OmFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTRweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJhY2tncm91bmQ6I2Q1MGIyZiAhaW1wb3J0YW50OyBib3JkZXI6MCAhaW1wb3J0YW50OyAtbW96LWJvcmRlci1yYWRpdXM6MTlweCAhaW1wb3J0YW50OyAtd2Via2l0LWJvcmRlci1yYWRpdXM6MTlweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOjE5cHggIWltcG9ydGFudDsgY29sb3I6I2ZmZiAhaW1wb3J0YW50OyBwYWRkaW5nOjEwcHggIWltcG9ydGFudDsgfQogI19mb3JtXzEzXyAuX2Nsb3NlLWljb24geyBjdXJzb3I6cG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2h0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvZXNma3lqaDF1X2Zvcm1zLWNsb3NlLWRhcmsucG5nJyk7IGJhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOjE0LjJweCAxNC4ycHg7IHBvc2l0aW9uOmFic29sdXRlOyBkaXNwbGF5OmJsb2NrOyB0b3A6MTFweDsgcmlnaHQ6OXB4OyBvdmVyZmxvdzpoaWRkZW47IHdpZHRoOjE2LjJweDsgaGVpZ2h0OjE2LjJweDsgfQogI19mb3JtXzEzXyAuX2Nsb3NlLWljb246YmVmb3JlIHsgcG9zaXRpb246cmVsYXRpdmU7IH0KICNfZm9ybV8xM18gLl9mb3JtLWJvZHkgeyBtYXJnaW4tYm90dG9tOjMwcHg7IH0KICNfZm9ybV8xM18gLl9mb3JtLWltYWdlLWxlZnQgeyB3aWR0aDoxNTBweDsgZmxvYXQ6bGVmdDsgfQogI19mb3JtXzEzXyAuX2Zvcm0tY29udGVudC1yaWdodCB7IG1hcmdpbi1sZWZ0OjE2NHB4OyB9CiAjX2Zvcm1fMTNfIC5fZm9ybS1icmFuZGluZyB7IGNvbG9yOiNmZmY7IGZvbnQtc2l6ZToxMHB4OyBjbGVhcjpib3RoOyB0ZXh0LWFsaWduOmxlZnQ7IG1hcmdpbi10b3A6MzBweDsgZm9udC13ZWlnaHQ6MTAwOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybS1icmFuZGluZyAuX2xvZ28geyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMzBweDsgaGVpZ2h0OjE0cHg7IG1hcmdpbi10b3A6NnB4OyBiYWNrZ3JvdW5kLWltYWdlOnVybCgnaHR0cHM6Ly9kMjI2YWo0YW8xdDYxcS5jbG91ZGZyb250Lm5ldC9oaDl1anFndjVfYWNsb2dvX2xpLnBuZycpOyBiYWNrZ3JvdW5kLXNpemU6MTMwcHggYXV0bzsgYmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0OyB9CiAjX2Zvcm1fMTNfIC5mb3JtLXNyLW9ubHkgeyBwb3NpdGlvbjphYnNvbHV0ZTsgd2lkdGg6MXB4OyBoZWlnaHQ6MXB4OyBwYWRkaW5nOjA7IG1hcmdpbjotMXB4OyBvdmVyZmxvdzpoaWRkZW47IGNsaXA6cmVjdCgwLCAwLCAwLCAwKTsgYm9yZGVyOjA7IH0KICNfZm9ybV8xM18gLl9mb3JtLWxhYmVsLCNfZm9ybV8xM18gLl9mb3JtX2VsZW1lbnQgLl9mb3JtLWxhYmVsIHsgZm9udC13ZWlnaHQ6Ym9sZDsgbWFyZ2luLWJvdHRvbTo1cHg7IGRpc3BsYXk6YmxvY2s7IH0KICNfZm9ybV8xM18uX2RhcmsgLl9mb3JtLWJyYW5kaW5nIHsgY29sb3I6IzMzMzsgfQogI19mb3JtXzEzXy5fZGFyayAuX2Zvcm0tYnJhbmRpbmcgLl9sb2dvIHsgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2h0dHBzOi8vZDIyNmFqNGFvMXQ2MXEuY2xvdWRmcm9udC5uZXQvamZ0cTJjOHNfYWNsb2dvX2RrLnBuZycpOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybV9lbGVtZW50IHsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbi1ib3R0b206MTBweDsgZm9udC1zaXplOjA7IG1heC13aWR0aDoxMDAlOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybV9lbGVtZW50ICogeyBmb250LXNpemU6MTRweDsgfQogI19mb3JtXzEzXyAuX2Zvcm1fZWxlbWVudC5fY2xlYXIgeyBjbGVhcjpib3RoOyB3aWR0aDoxMDAlOyBmbG9hdDpub25lOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybV9lbGVtZW50Ll9jbGVhcjphZnRlciB7IGNsZWFyOmxlZnQ7IH0KICNfZm9ybV8xM18gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0idGV4dCJdLCNfZm9ybV8xM18gLl9mb3JtX2VsZW1lbnQgaW5wdXRbdHlwZT0iZGF0ZSJdLCNfZm9ybV8xM18gLl9mb3JtX2VsZW1lbnQgc2VsZWN0LCNfZm9ybV8xM18gLl9mb3JtX2VsZW1lbnQgdGV4dGFyZWE6bm90KC5nLXJlY2FwdGNoYS1yZXNwb25zZSkgeyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMDAlOyAtd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgLW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgZm9udC1mYW1pbHk6aW5oZXJpdDsgfQogI19mb3JtXzEzXyAuX2ZpZWxkLXdyYXBwZXIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgfQogI19mb3JtXzEzXyAuX2lubGluZS1zdHlsZSB7IGZsb2F0OmxlZnQ7IH0KICNfZm9ybV8xM18gLl9pbmxpbmUtc3R5bGUgaW5wdXRbdHlwZT0idGV4dCJdIHsgd2lkdGg6MTUwcHg7IH0KICNfZm9ybV8xM18gLl9pbmxpbmUtc3R5bGU6bm90KC5fY2xlYXIpICsgLl9pbmxpbmUtc3R5bGU6bm90KC5fY2xlYXIpIHsgbWFyZ2luLWxlZnQ6MjBweDsgfQogI19mb3JtXzEzXyAuX2Zvcm1fZWxlbWVudCBpbWcuX2Zvcm0taW1hZ2UgeyBtYXgtd2lkdGg6MTAwJTsgfQogI19mb3JtXzEzXyAuX2Zvcm1fZWxlbWVudCAuX2Zvcm0tZmllbGRzZXQgeyBib3JkZXI6MDsgcGFkZGluZzowLjAxZW0gMCAwIDA7IG1hcmdpbjowOyBtaW4td2lkdGg6MDsgfQogI19mb3JtXzEzXyAuX2NsZWFyLWVsZW1lbnQgeyBjbGVhcjpsZWZ0OyB9CiAjX2Zvcm1fMTNfIC5fZnVsbF93aWR0aCB7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xM18gLl9mb3JtX2Z1bGxfZmllbGQgeyBkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMDAlOyBtYXJnaW4tYm90dG9tOjEwcHg7IH0KICNfZm9ybV8xM18gaW5wdXRbdHlwZT0idGV4dCJdLl9oYXNfZXJyb3IsI19mb3JtXzEzXyB0ZXh0YXJlYS5faGFzX2Vycm9yIHsgYm9yZGVyOiNmMzdjN2IgMXB4IHNvbGlkOyB9CiAjX2Zvcm1fMTNfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0uX2hhc19lcnJvciB7IG91dGxpbmU6I2YzN2M3YiAxcHggc29saWQ7IH0KICNfZm9ybV8xM18gLl9lcnJvciB7IGRpc3BsYXk6YmxvY2s7IHBvc2l0aW9uOmFic29sdXRlOyBmb250LXNpemU6MTRweDsgei1pbmRleDoxMDAwMDAwMTsgfQogI19mb3JtXzEzXyAuX2Vycm9yLl9hYm92ZSB7IHBhZGRpbmctYm90dG9tOjRweDsgYm90dG9tOjM5cHg7IHJpZ2h0OjA7IH0KICNfZm9ybV8xM18gLl9lcnJvci5fYmVsb3cgeyBwYWRkaW5nLXRvcDo0cHg7IHRvcDoxMDAlOyByaWdodDowOyB9CiAjX2Zvcm1fMTNfIC5fZXJyb3IuX2Fib3ZlIC5fZXJyb3ItYXJyb3cgeyBib3R0b206MDsgcmlnaHQ6MTVweDsgYm9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItdG9wOjVweCBzb2xpZCAjZjM3YzdiOyB9CiAjX2Zvcm1fMTNfIC5fZXJyb3IuX2JlbG93IC5fZXJyb3ItYXJyb3cgeyB0b3A6MDsgcmlnaHQ6MTVweDsgYm9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItYm90dG9tOjVweCBzb2xpZCAjZjM3YzdiOyB9CiAjX2Zvcm1fMTNfIC5fZXJyb3ItaW5uZXIgeyBwYWRkaW5nOjhweCAxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNmMzdjN2I7IGZvbnQtc2l6ZToxNHB4OyBmb250LWZhbWlseTphcmlhbCwgc2Fucy1zZXJpZjsgY29sb3I6I2ZmZjsgdGV4dC1hbGlnbjpjZW50ZXI7IHRleHQtZGVjb3JhdGlvbjpub25lOyAtd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4OyAtbW96LWJvcmRlci1yYWRpdXM6NHB4OyBib3JkZXItcmFkaXVzOjRweDsgfQogI19mb3JtXzEzXyAuX2Vycm9yLWlubmVyLl9mb3JtX2Vycm9yIHsgbWFyZ2luLWJvdHRvbTo1cHg7IHRleHQtYWxpZ246bGVmdDsgfQogI19mb3JtXzEzXyAuX2J1dHRvbi13cmFwcGVyIC5fZXJyb3ItaW5uZXIuX2Zvcm1fZXJyb3IgeyBwb3NpdGlvbjpzdGF0aWM7IH0KICNfZm9ybV8xM18gLl9lcnJvci1pbm5lci5fbm9fYXJyb3cgeyBtYXJnaW4tYm90dG9tOjEwcHg7IH0KICNfZm9ybV8xM18gLl9lcnJvci1hcnJvdyB7IHBvc2l0aW9uOmFic29sdXRlOyB3aWR0aDowOyBoZWlnaHQ6MDsgfQogI19mb3JtXzEzXyAuX2Vycm9yLWh0bWwgeyBtYXJnaW4tYm90dG9tOjEwcHg7IH0KIC5waWthLXNpbmdsZSB7IHotaW5kZXg6MTAwMDAwMDEgIWltcG9ydGFudDsgfQogI19mb3JtXzEzXyBpbnB1dFt0eXBlPSJ0ZXh0Il0uZGF0ZXRpbWVfZGF0ZSB7IHdpZHRoOjY5JTsgZGlzcGxheTppbmxpbmU7IH0KICNfZm9ybV8xM18gc2VsZWN0LmRhdGV0aW1lX3RpbWUgeyB3aWR0aDoyOSU7IGRpc3BsYXk6aW5saW5lOyBoZWlnaHQ6MzJweDsgfQogI19mb3JtXzEzXyBpbnB1dFt0eXBlPSJkYXRlIl0uZGF0ZXRpbWVfZGF0ZSB7IHdpZHRoOjY5JTsgZGlzcGxheTppbmxpbmUtZmxleDsgfQogI19mb3JtXzEzXyBpbnB1dFt0eXBlPSJ0aW1lIl0uZGF0ZXRpbWVfdGltZSB7IHdpZHRoOjI5JTsgZGlzcGxheTppbmxpbmUtZmxleDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgOjotd2Via2l0LXNjcm9sbGJhciB7IGRpc3BsYXk6bm9uZTsgfQogI19mb3JtXzEzXyB7IG1hcmdpbjowOyB3aWR0aDoxMDAlOyBtaW4td2lkdGg6MTAwJTsgbWF4LXdpZHRoOjEwMCU7IGJveC1zaXppbmc6Ym9yZGVyLWJveDsgfQogI19mb3JtXzEzXyAqIHsgLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7IC1tb3otYm94LXNpemluZzpib3JkZXItYm94OyBib3gtc2l6aW5nOmJvcmRlci1ib3g7IGZvbnQtc2l6ZToxZW07IH0KICNfZm9ybV8xM18gLl9mb3JtLWNvbnRlbnQgeyBtYXJnaW46MDsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzEzXyAuX2Zvcm0taW5uZXIgeyBkaXNwbGF5OmJsb2NrOyBtaW4td2lkdGg6MTAwJTsgfQogI19mb3JtXzEzXyAuX2Zvcm0tdGl0bGUsI19mb3JtXzEzXyAuX2lubGluZS1zdHlsZSB7IG1hcmdpbi10b3A6MDsgbWFyZ2luLXJpZ2h0OjA7IG1hcmdpbi1sZWZ0OjA7IH0KICNfZm9ybV8xM18gLl9mb3JtLXRpdGxlIHsgZm9udC1zaXplOjEuMmVtOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybV9lbGVtZW50IHsgbWFyZ2luOjAgMCAyMHB4OyBwYWRkaW5nOjA7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xM18gLl9mb3JtLWVsZW1lbnQsI19mb3JtXzEzXyAuX2lubGluZS1zdHlsZSwjX2Zvcm1fMTNfIGlucHV0W3R5cGU9InRleHQiXSwjX2Zvcm1fMTNfIGxhYmVsLCNfZm9ybV8xM18gcCwjX2Zvcm1fMTNfIHRleHRhcmVhOm5vdCguZy1yZWNhcHRjaGEtcmVzcG9uc2UpIHsgZmxvYXQ6bm9uZTsgZGlzcGxheTpibG9jazsgd2lkdGg6MTAwJTsgfQogI19mb3JtXzEzXyAuX3Jvdy5fY2hlY2tib3gtcmFkaW8gbGFiZWwgeyBkaXNwbGF5OmlubGluZTsgfQogI19mb3JtXzEzXyAuX3JvdywjX2Zvcm1fMTNfIHAsI19mb3JtXzEzXyBsYWJlbCB7IG1hcmdpbi1ib3R0b206MC43ZW07IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xM18gLl9yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSwjX2Zvcm1fMTNfIC5fcm93IGlucHV0W3R5cGU9InJhZGlvIl0geyBtYXJnaW46MCAhaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUgIWltcG9ydGFudDsgfQogI19mb3JtXzEzXyAuX3JvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdICsgc3BhbiBsYWJlbCB7IGRpc3BsYXk6aW5saW5lOyB9CiAjX2Zvcm1fMTNfIC5fcm93IHNwYW4gbGFiZWwgeyBtYXJnaW46MCAhaW1wb3J0YW50OyB3aWR0aDppbml0aWFsICFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZSAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMTNfIC5fZm9ybS1pbWFnZSB7IG1heC13aWR0aDoxMDAlOyBoZWlnaHQ6YXV0byAhaW1wb3J0YW50OyB9CiAjX2Zvcm1fMTNfIGlucHV0W3R5cGU9InRleHQiXSB7IHBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHg7IGZvbnQtc2l6ZToxNnB4OyBsaW5lLWhlaWdodDoxLjNlbTsgLXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7IH0KICNfZm9ybV8xM18gaW5wdXRbdHlwZT0icmFkaW8iXSwjX2Zvcm1fMTNfIGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyBkaXNwbGF5OmlubGluZS1ibG9jazsgd2lkdGg6MS4zZW07IGhlaWdodDoxLjNlbTsgZm9udC1zaXplOjFlbTsgbWFyZ2luOjAgMC4zZW0gMCAwOyB2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTsgfQogI19mb3JtXzEzXyBidXR0b25bdHlwZT0ic3VibWl0Il0geyBwYWRkaW5nOjIwcHg7IGZvbnQtc2l6ZToxLjVlbTsgfQogI19mb3JtXzEzXyAuX2lubGluZS1zdHlsZSB7IG1hcmdpbjoyMHB4IDAgMCAhaW1wb3J0YW50OyB9CiB9CiAjX2Zvcm1fMTNfIHsgcG9zaXRpb246cmVsYXRpdmU7IHRleHQtYWxpZ246bGVmdDsgbWFyZ2luOjI1cHggYXV0byAwOyBwYWRkaW5nOjIwcHg7IC13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94OyAtbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsgYm94LXNpemluZzpib3JkZXItYm94OyAqem9vbToxOyBiYWNrZ3JvdW5kOiNlNmU2ZTYgIWltcG9ydGFudDsgYm9yZGVyOjBweCBzb2xpZCAjYjBiMGIwICFpbXBvcnRhbnQ7IC1tb3otYm9yZGVyLXJhZGl1czo1cHggIWltcG9ydGFudDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweCAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOjVweCAhaW1wb3J0YW50OyBjb2xvcjojNzQ3NDc0ICFpbXBvcnRhbnQ7IH0KICNfZm9ybV8xM18uX2lubGluZS1mb3JtLCNfZm9ybV8xM18uX2lubGluZS1mb3JtIC5fZm9ybS1jb250ZW50LCNfZm9ybV8xM18uX2lubGluZS1mb3JtIGlucHV0LCNfZm9ybV8xM18uX2lubGluZS1mb3JtIC5fc3VibWl0IHsgZm9udC1mYW1pbHk6VmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmLCAnSUJNIFBsZXggU2FucycsIGFyaWFsLCBzYW5zLXNlcmlmOyB9CiAjX2Zvcm1fMTNfIC5fZm9ybS10aXRsZSB7IGZvbnQtc2l6ZToyMnB4OyBsaW5lLWhlaWdodDoyMnB4OyBmb250LXdlaWdodDo2MDA7IG1hcmdpbi1ib3R0b206MDsgfQogI19mb3JtXzEzXzpiZWZvcmUsI19mb3JtXzEzXzphZnRlciB7IGNvbnRlbnQ6IiAiOyBkaXNwbGF5OnRhYmxlOyB9CiAjX2Zvcm1fMTNfOmFmdGVyIHsgY2xlYXI6Ym90aDsgfQogI19mb3JtXzEzXy5faW5saW5lLXN0eWxlIHsgd2lkdGg6YXV0bzsgZGlzcGxheTppbmxpbmUtYmxvY2s7IH0KICNfZm9ybV8xM18uX2lubGluZS1zdHlsZSBpbnB1dFt0eXBlPSJ0ZXh0Il0sI19mb3JtXzEzXy5faW5saW5lLXN0eWxlIGlucHV0W3R5cGU9ImRhdGUiXSB7IHBhZGRpbmc6MTBweCAxMnB4OyB9CiAjX2Zvcm1fMTNfLl9pbmxpbmUtc3R5bGUgYnV0dG9uLl9pbmxpbmUtc3R5bGUgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOjI3cHg7IH0KICNfZm9ybV8xM18uX2lubGluZS1zdHlsZSBwIHsgbWFyZ2luOjA7IH0KICNfZm9ybV8xM18uX2lubGluZS1zdHlsZSAuX2J1dHRvbi13cmFwcGVyIHsgcG9zaXRpb246cmVsYXRpdmU7IG1hcmdpbjoyN3B4IDEyLjVweCAwIDIwcHg7IH0KICNfZm9ybV8xM18gLl9mb3JtLXRoYW5rLXlvdSB7IHBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0OjA7IHJpZ2h0OjA7IHRleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6MThweDsgfQogQG1lZGlhIGFsbCBhbmQgKG1pbi13aWR0aDozMjBweCkgYW5kIChtYXgtd2lkdGg6NjY3cHgpIHsgI19mb3JtXzEzXy5faW5saW5lLWZvcm0uX2lubGluZS1zdHlsZSAuX2lubGluZS1zdHlsZS5fYnV0dG9uLXdyYXBwZXIgeyBtYXJnaW4tdG9wOjIwcHggIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50OyB9CiB9CgogI19mb3JtXzEzXyAuX3N1Ym1pdCB7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjEwMCU7IH0KICNfZm9ybV8xM18gLl94NzI4MDE3MTQgaW5wdXQgeyBib3JkZXItcmFkaXVzOjIwcHg7IH0KICNfZm9ybV8xM18gLl94MjkwMjQwODcgaW5wdXQgeyBib3JkZXItcmFkaXVzOjIwcHg7IH0KPC9zdHlsZT4KPGxpbmsgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1MYXRvJmZhbWlseT1Nb250c2VycmF0JmZhbWlseT1Sb2JvdG8mZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgogIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249Imh0dHBzOi8vbWFrb21tLmFjdGl2ZWhvc3RlZC5jb20vcHJvYy5waHAiIGlkPSJfZm9ybV8xM18iIGNsYXNzPSJfZm9ybSBfZm9ybV8xMyBfaW5saW5lLWZvcm0gX2lubGluZS1zdHlsZSBfZGFyayIgbm92YWxpZGF0ZT4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idSIgdmFsdWU9IjEzIiAvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmIiB2YWx1ZT0iMTMiIC8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InMiIC8+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImMiIHZhbHVlPSIwIiAvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtIiB2YWx1ZT0iMCIgLz4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3ViIiAvPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ2IiB2YWx1ZT0iMiIgLz4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3IiIHZhbHVlPSIzY2NiYzdjZjU0Nzk2MzczNzkyYTViNGYxOTY4MzMzOCIgLz4KICAgICAgPGRpdiBjbGFzcz0iX2Zvcm0tY29udGVudCI+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDUwOTA0MDA4IF9pbmxpbmUtc3R5bGUgX2NsZWFyIiA+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfZm9ybS10aXRsZSI+CiAgICAgICAgICAgIEphLCBpY2ggd2lsbCEgTmV3c2xldHRlciAyIE1hbCBpbSBNb25hdAogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDk0MDk3MDA2IF9pbmxpbmUtc3R5bGUgX2NsZWFyIiA+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfaHRtbC1jb2RlIj4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSW1wdWxzZSwgTmV1aWdrZWl0ZW4sIFBlcnPDtm5saWNoZXMgw7xiZXIgV2VydGUsIEVtb3Rpb25lbiwgcGVyc8O2bmxpY2hlIEVudHdpY2tsdW5nIG1pdCBlaW5lciBQcmlzZSAiWnVrdW5mdCBpc3Qgd2VpYmxpY2giLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJfZm9ybV9lbGVtZW50IF94NzI4MDE3MTQgX2lubGluZS1zdHlsZSAiID4KICAgICAgICAgIDxsYWJlbCBmb3I9ImZ1bGxuYW1lIiBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgICAmbmJzcDsKICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZnVsbG5hbWUiIG5hbWU9ImZ1bGxuYW1lIiBwbGFjZWhvbGRlcj0iVm9ybmFtZSAqIiByZXF1aXJlZC8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwhLS0gIFRoaXMgU1RBUlRTIHRoZSBDdXN0b20gT2JqZWN0cyBzZWN0aW9uICAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iX2Zvcm1fZWxlbWVudCBfeDI5MDI0MDg3IF9pbmxpbmUtc3R5bGUgIiA+CiAgICAgICAgICAgIDxsYWJlbCBmb3I9ImVtYWlsIiBjbGFzcz0iX2Zvcm0tbGFiZWwiPgogICAgICAgICAgICAgICZuYnNwOwogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJfZmllbGQtd3JhcHBlciI+CiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJlbWFpbCIgbmFtZT0iZW1haWwiIHBsYWNlaG9sZGVyPSJFLU1haWwtQWRyZXNzZSAqIiByZXF1aXJlZC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8IS0tICBUaGlzIFNUQVJUUyB0aGUgQ3VzdG9tIE9iamVjdHMgc2VjdGlvbiAgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJfYnV0dG9uLXdyYXBwZXIgX2lubGluZS1zdHlsZSI+CiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD0iX2Zvcm1fMTNfc3VibWl0IiBjbGFzcz0iX3N1Ym1pdCIgdHlwZT0ic3VibWl0Ij4KICAgICAgICAgICAgICAgIEphLCBpY2ggd2lsbCEKICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Il9jbGVhci1lbGVtZW50Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Il9mb3JtLXRoYW5rLXlvdSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9mb3JtPgogICAgICA8L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CndpbmRvdy5jZmllbGRzID0gW107CndpbmRvdy5fc2hvd190aGFua195b3UgPSBmdW5jdGlvbihpZCwgbWVzc2FnZSwgdHJhY2tjbXBfdXJsLCBlbWFpbCkgewogIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ19mb3JtXycgKyBpZCArICdfJyksIHRoYW5rX3lvdSA9IGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLXRoYW5rLXlvdScpOwogIGZvcm0ucXVlcnlTZWxlY3RvcignLl9mb3JtLWNvbnRlbnQnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogIHRoYW5rX3lvdS5pbm5lckhUTUwgPSBtZXNzYWdlOwogIHRoYW5rX3lvdS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICBjb25zdCB2Z29BbGlhcyA9IHR5cGVvZiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXMgPT09ICd1bmRlZmluZWQnID8gJ3ZnbycgOiB2aXNpdG9yR2xvYmFsT2JqZWN0QWxpYXM7CiAgdmFyIHZpc2l0b3JPYmplY3QgPSB3aW5kb3dbdmdvQWxpYXNdOwogIGlmIChlbWFpbCAmJiB0eXBlb2YgdmlzaXRvck9iamVjdCAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHZpc2l0b3JPYmplY3QoJ3NldEVtYWlsJywgZW1haWwpOwogICAgdmlzaXRvck9iamVjdCgndXBkYXRlJyk7CiAgfSBlbHNlIGlmICh0eXBlb2YodHJhY2tjbXBfdXJsKSAhPSAndW5kZWZpbmVkJyAmJiB0cmFja2NtcF91cmwpIHsKICAgIC8vIFNpdGUgdHJhY2tpbmcgVVJMIHRvIHVzZSBhZnRlciBpbmxpbmUgZm9ybSBzdWJtaXNzaW9uLgogICAgX2xvYWRfc2NyaXB0KHRyYWNrY21wX3VybCk7CiAgfQogIGlmICh0eXBlb2Ygd2luZG93Ll9mb3JtX2NhbGxiYWNrICE9PSAndW5kZWZpbmVkJykgd2luZG93Ll9mb3JtX2NhbGxiYWNrKGlkKTsKfTsKd2luZG93Ll9zaG93X2Vycm9yID0gZnVuY3Rpb24oaWQsIG1lc3NhZ2UsIGh0bWwpIHsKICB2YXIgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8nICsgaWQgKyAnXycpLCBlcnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSwgYnV0dG9uID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdidXR0b24nKSwgb2xkX2Vycm9yID0gZm9ybS5xdWVyeVNlbGVjdG9yKCcuX2Zvcm1fZXJyb3InKTsKICBpZiAob2xkX2Vycm9yKSBvbGRfZXJyb3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRfZXJyb3IpOwogIGVyci5pbm5lckhUTUwgPSBtZXNzYWdlOwogIGVyci5jbGFzc05hbWUgPSAnX2Vycm9yLWlubmVyIF9mb3JtX2Vycm9yIF9ub19hcnJvdyc7CiAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICB3cmFwcGVyLmNsYXNzTmFtZSA9ICdfZm9ybS1pbm5lcic7CiAgd3JhcHBlci5hcHBlbmRDaGlsZChlcnIpOwogIGJ1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLCBidXR0b24pOwogIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49Il9mb3JtIl1baWQkPSJfc3VibWl0Il0nKS5kaXNhYmxlZCA9IGZhbHNlOwogIGlmIChodG1sKSB7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBkaXYuY2xhc3NOYW1lID0gJ19lcnJvci1odG1sJzsKICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOwogICAgZXJyLmFwcGVuZENoaWxkKGRpdik7CiAgfQp9Owp3aW5kb3cuX2xvYWRfc2NyaXB0ID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgewogIHZhciBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgciA9IGZhbHNlOwogIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgc2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnOwogIHNjcmlwdC5zcmMgPSB1cmw7CiAgaWYgKGNhbGxiYWNrKSB7CiAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXIgJiYgKCF0aGlzLnJlYWR5U3RhdGUgfHwgdGhpcy5yZWFkeVN0YXRlID09ICdjb21wbGV0ZScpKSB7CiAgICAgICAgciA9IHRydWU7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfQogICAgfTsKICB9CiAgaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwp9OwooZnVuY3Rpb24oKSB7CiAgaWYgKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc2VhcmNoKCJleGNsdWRlZm9ybSIpICE9PSAtMSkgcmV0dXJuIGZhbHNlOwogIHZhciBnZXRDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICB2YXIgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58OyApJyArIG5hbWUgKyAnPShbXjtdKyknKSk7CiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsyXSA6IG51bGw7CiAgfQogIHZhciBzZXRDb29raWUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICB2YXIgdGltZSA9IG5vdy5nZXRUaW1lKCk7CiAgICB2YXIgZXhwaXJlVGltZSA9IHRpbWUgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogMzY1OwogICAgbm93LnNldFRpbWUoZXhwaXJlVGltZSk7CiAgICBkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgdmFsdWUgKyAnOyBleHBpcmVzPScgKyBub3cgKyAnO3BhdGg9Lyc7CiAgfQogICAgICB2YXIgYWRkRXZlbnQgPSBmdW5jdGlvbihlbGVtZW50LCBldmVudCwgZnVuYykgewogICAgaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGZ1bmMpOwogICAgfSBlbHNlIHsKICAgICAgdmFyIG9sZEZ1bmMgPSBlbGVtZW50WydvbicgKyBldmVudF07CiAgICAgIGVsZW1lbnRbJ29uJyArIGV2ZW50XSA9IGZ1bmN0aW9uKCkgewogICAgICAgIG9sZEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICB9CiAgfQogIHZhciBfcmVtb3ZlZCA9IGZhbHNlOwogIHZhciBmb3JtX3RvX3N1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8xM18nKTsKICB2YXIgYWxsSW5wdXRzID0gZm9ybV90b19zdWJtaXQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKSwgdG9vbHRpcHMgPSBbXSwgc3VibWl0dGVkID0gZmFsc2U7CgogIHZhciBnZXRVcmxQYXJhbSA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgIHZhciBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgcmV0dXJuIHBhcmFtcy5nZXQobmFtZSkgfHwgZmFsc2U7CiAgfTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxJbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgIHZhciByZWdleFN0ciA9ICJmaWVsZFxcWyhcXGQrKVxcXSI7CiAgICB2YXIgcmVzdWx0cyA9IG5ldyBSZWdFeHAocmVnZXhTdHIpLmV4ZWMoYWxsSW5wdXRzW2ldLm5hbWUpOwogICAgaWYgKHJlc3VsdHMgIT0gdW5kZWZpbmVkKSB7CiAgICAgIGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUgPSB3aW5kb3cuY2ZpZWxkc1tyZXN1bHRzWzFdXTsKICAgIH0gZWxzZSB7CiAgICAgIGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUgPSBhbGxJbnB1dHNbaV0ubmFtZTsKICAgIH0KICAgIHZhciBmaWVsZFZhbCA9IGdldFVybFBhcmFtKGFsbElucHV0c1tpXS5kYXRhc2V0Lm5hbWUpOwoKICAgIGlmIChmaWVsZFZhbCkgewogICAgICBpZiAoYWxsSW5wdXRzW2ldLmRhdGFzZXQuYXV0b2ZpbGwgPT09ICJmYWxzZSIpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoYWxsSW5wdXRzW2ldLnR5cGUgPT0gInJhZGlvIiB8fCBhbGxJbnB1dHNbaV0udHlwZSA9PSAiY2hlY2tib3giKSB7CiAgICAgICAgaWYgKGFsbElucHV0c1tpXS52YWx1ZSA9PSBmaWVsZFZhbCkgewogICAgICAgICAgYWxsSW5wdXRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhbGxJbnB1dHNbaV0udmFsdWUgPSBmaWVsZFZhbDsKICAgICAgfQogICAgfQogIH0KCiAgdmFyIHJlbW92ZV90b29sdGlwcyA9IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b29sdGlwcy5sZW5ndGg7IGkrKykgewogICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgfQogICAgdG9vbHRpcHMgPSBbXTsKICB9OwogIHZhciByZW1vdmVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0pIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9vbHRpcHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRvb2x0aXBzW2ldLmVsZW0gPT09IGVsZW0pIHsKICAgICAgICB0b29sdGlwc1tpXS50aXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0b29sdGlwc1tpXS50aXApOwogICAgICAgIHRvb2x0aXBzLnNwbGljZShpLCAxKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICB9OwogIHZhciBjcmVhdGVfdG9vbHRpcCA9IGZ1bmN0aW9uKGVsZW0sIHRleHQpIHsKICAgIHZhciB0b29sdGlwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JyksIG5ld190b29sdGlwID0ge307CiAgICBpZiAoZWxlbS50eXBlICE9ICdyYWRpbycgJiYgZWxlbS50eXBlICE9ICdjaGVja2JveCcpIHsKICAgICAgdG9vbHRpcC5jbGFzc05hbWUgPSAnX2Vycm9yJzsKICAgICAgYXJyb3cuY2xhc3NOYW1lID0gJ19lcnJvci1hcnJvdyc7CiAgICAgIGlubmVyLmNsYXNzTmFtZSA9ICdfZXJyb3ItaW5uZXInOwogICAgICBpbm5lci5pbm5lckhUTUwgPSB0ZXh0OwogICAgICB0b29sdGlwLmFwcGVuZENoaWxkKGFycm93KTsKICAgICAgdG9vbHRpcC5hcHBlbmRDaGlsZChpbm5lcik7CiAgICAgIGVsZW0ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0b29sdGlwKTsKICAgIH0gZWxzZSB7CiAgICAgIHRvb2x0aXAuY2xhc3NOYW1lID0gJ19lcnJvci1pbm5lciBfbm9fYXJyb3cnOwogICAgICB0b29sdGlwLmlubmVySFRNTCA9IHRleHQ7CiAgICAgIGVsZW0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodG9vbHRpcCwgZWxlbSk7CiAgICAgIG5ld190b29sdGlwLm5vX2Fycm93ID0gdHJ1ZTsKICAgIH0KICAgIG5ld190b29sdGlwLnRpcCA9IHRvb2x0aXA7CiAgICBuZXdfdG9vbHRpcC5lbGVtID0gZWxlbTsKICAgIHRvb2x0aXBzLnB1c2gobmV3X3Rvb2x0aXApOwogICAgcmV0dXJuIG5ld190b29sdGlwOwogIH07CiAgdmFyIHJlc2l6ZV90b29sdGlwID0gZnVuY3Rpb24odG9vbHRpcCkgewogICAgdmFyIHJlY3QgPSB0b29sdGlwLmVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICB2YXIgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzY3JvbGxQb3NpdGlvbiA9IHJlY3QudG9wIC0gKCh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jLnNjcm9sbFRvcCkgIC0gKGRvYy5jbGllbnRUb3AgfHwgMCkpOwogICAgaWYgKHNjcm9sbFBvc2l0aW9uIDwgNDApIHsKICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYmVsb3cnOwogICAgfSBlbHNlIHsKICAgICAgdG9vbHRpcC50aXAuY2xhc3NOYW1lID0gdG9vbHRpcC50aXAuY2xhc3NOYW1lLnJlcGxhY2UoLyA/KF9hYm92ZXxfYmVsb3cpID8vZywgJycpICsgJyBfYWJvdmUnOwogICAgfQogIH07CiAgdmFyIHJlc2l6ZV90b29sdGlwcyA9IGZ1bmN0aW9uKCkgewogICAgaWYgKF9yZW1vdmVkKSByZXR1cm47CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvb2x0aXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdG9vbHRpcHNbaV0ubm9fYXJyb3cpIHJlc2l6ZV90b29sdGlwKHRvb2x0aXBzW2ldKTsKICAgIH0KICB9OwogIHZhciB2YWxpZGF0ZV9maWVsZCA9IGZ1bmN0aW9uKGVsZW0sIHJlbW92ZSkgewogICAgdmFyIHRvb2x0aXAgPSBudWxsLCB2YWx1ZSA9IGVsZW0udmFsdWUsIG5vX2Vycm9yID0gdHJ1ZTsKICAgIHJlbW92ZSA/IHJlbW92ZV90b29sdGlwKGVsZW0pIDogZmFsc2U7CiAgICBpZiAoZWxlbS50eXBlICE9ICdjaGVja2JveCcpIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUucmVwbGFjZSgvID9faGFzX2Vycm9yID8vZywgJycpOwogICAgaWYgKGVsZW0uZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKSB7CiAgICAgIGlmIChlbGVtLnR5cGUgPT0gJ3JhZGlvJyB8fCAoZWxlbS50eXBlID09ICdjaGVja2JveCcgJiYgL2FueS8udGVzdChlbGVtLmNsYXNzTmFtZSkpKSB7CiAgICAgICAgdmFyIGVsZW1zID0gZm9ybV90b19zdWJtaXQuZWxlbWVudHNbZWxlbS5uYW1lXTsKICAgICAgICBpZiAoIShlbGVtcyBpbnN0YW5jZW9mIE5vZGVMaXN0IHx8IGVsZW1zIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24pIHx8IGVsZW1zLmxlbmd0aCA8PSAxKSB7CiAgICAgICAgICBub19lcnJvciA9IGVsZW0uY2hlY2tlZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxlbXNbaV0uY2hlY2tlZCkgbm9fZXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkJpdHRlIGVpbmUgT3B0aW9uIGF1c3fDpGhsZW4uIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVsZW0udHlwZSA9PSdjaGVja2JveCcpIHsKICAgICAgICB2YXIgZWxlbXMgPSBmb3JtX3RvX3N1Ym1pdC5lbGVtZW50c1tlbGVtLm5hbWVdLCBmb3VuZCA9IGZhbHNlLCBlcnIgPSBbXTsKICAgICAgICBub19lcnJvciA9IHRydWU7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGVsZW1zW2ldLmdldEF0dHJpYnV0ZSgncmVxdWlyZWQnKSA9PT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICBpZiAoIWZvdW5kICYmIGVsZW1zW2ldICE9PSBlbGVtKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgIGVsZW1zW2ldLmNsYXNzTmFtZSA9IGVsZW1zW2ldLmNsYXNzTmFtZS5yZXBsYWNlKC8gP19oYXNfZXJyb3IgPy9nLCAnJyk7CiAgICAgICAgICBpZiAoIWVsZW1zW2ldLmNoZWNrZWQpIHsKICAgICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgZWxlbXNbaV0uY2xhc3NOYW1lID0gZWxlbXNbaV0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICAgICAgZXJyLnB1c2goIkRpZSBNYXJraWVydW5nIHZvbiAlcyBpc3QgZXJmb3JkZXJsaWNoLiIucmVwbGFjZSgiJXMiLCBlbGVtc1tpXS52YWx1ZSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW5vX2Vycm9yKSB7CiAgICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgZXJyLmpvaW4oJzxici8+JykpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbGVtLnRhZ05hbWUgPT0gJ1NFTEVDVCcpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0cnVlOwogICAgICAgIGlmIChlbGVtLm11bHRpcGxlKSB7CiAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtLm9wdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGVsZW0ub3B0aW9uc1tpXS5zZWxlY3RlZCkgewogICAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0ub3B0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoZWxlbS5vcHRpb25zW2ldLnNlbGVjdGVkICYmICghZWxlbS5vcHRpb25zW2ldLnZhbHVlIHx8IChlbGVtLm9wdGlvbnNbaV0udmFsdWUubWF0Y2goL1xuL2cpKSkpIHsKICAgICAgICAgICAgICBzZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghc2VsZWN0ZWQpIHsKICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUgKyAnIF9oYXNfZXJyb3InOwogICAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiQml0dGUgZWluZSBPcHRpb24gYXVzd8OkaGxlbi4iKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycpIHsKICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lICsgJyBfaGFzX2Vycm9yJzsKICAgICAgICBub19lcnJvciA9IGZhbHNlOwogICAgICAgIHRvb2x0aXAgPSBjcmVhdGVfdG9vbHRpcChlbGVtLCAiQml0dGUgZsO8bGxlbiBTaWUgZGFzIG1hcmtpZXJ0ZSBQZmxpY2h0ZmVsZCBhdXMuIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChub19lcnJvciAmJiBlbGVtLm5hbWUgPT0gJ2VtYWlsJykgewogICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eW1wrX2EtejAtOS0nJj1dKyhcLltcK19hLXowLTktJ10rKSpAW2EtejAtOS1dKyhcLlthLXowLTktXSspKihcLlthLXpdezIsfSkkL2kpKSB7CiAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkdlYmVuIFNpZSBlaW5lIGfDvGx0aWdlIEUtTWFpbC1BZHJlc3NlIGVpbi4iKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vX2Vycm9yICYmIC9kYXRlX2ZpZWxkLy50ZXN0KGVsZW0uY2xhc3NOYW1lKSkgewogICAgICBpZiAoIXZhbHVlLm1hdGNoKC9eXGRcZFxkXGQtXGRcZC1cZFxkJC8pKSB7CiAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZSArICcgX2hhc19lcnJvcic7CiAgICAgICAgbm9fZXJyb3IgPSBmYWxzZTsKICAgICAgICB0b29sdGlwID0gY3JlYXRlX3Rvb2x0aXAoZWxlbSwgIkfDvGx0aWdlcyBEYXR1bSBlaW5nZWJlbiIpOwogICAgICB9CiAgICB9CiAgICB0b29sdGlwID8gcmVzaXplX3Rvb2x0aXAodG9vbHRpcCkgOiBmYWxzZTsKICAgIHJldHVybiBub19lcnJvcjsKICB9OwogIHZhciBuZWVkc192YWxpZGF0ZSA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlKCdyZXF1aXJlZCcpICE9PSBudWxsKXsKICAgICAgICAgICAgcmV0dXJuIHRydWUKICAgICAgICB9CiAgICAgICAgaWYoZWwubmFtZSA9PT0gJ2VtYWlsJyAmJiBlbC52YWx1ZSAhPT0gIiIpewogICAgICAgICAgICByZXR1cm4gdHJ1ZQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2UKICB9OwogIHZhciB2YWxpZGF0ZV9mb3JtID0gZnVuY3Rpb24oZSkgewogICAgdmFyIGVyciA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybV9lcnJvcicpLCBub19lcnJvciA9IHRydWU7CiAgICBpZiAoIXN1Ym1pdHRlZCkgewogICAgICBzdWJtaXR0ZWQgPSB0cnVlOwogICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYWxsSW5wdXRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgdmFyIGlucHV0ID0gYWxsSW5wdXRzW2ldOwogICAgICAgIGlmIChuZWVkc192YWxpZGF0ZShpbnB1dCkpIHsKICAgICAgICAgIGlmIChpbnB1dC50eXBlID09ICd0ZXh0JyB8fCBpbnB1dC50eXBlID09ICdudW1iZXInIHx8IGlucHV0LnR5cGUgPT0gJ3RpbWUnKSB7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnRyaW0oKTsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGFkZEV2ZW50KGlucHV0LCAnaW5wdXQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZCh0aGlzLCB0cnVlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gJ3JhZGlvJyB8fCBpbnB1dC50eXBlID09ICdjaGVja2JveCcpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgICAgdmFyIHJhZGlvcyA9IGZvcm1fdG9fc3VibWl0LmVsZW1lbnRzW2VsLm5hbWVdOwogICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFkaW9zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBhZGRFdmVudChyYWRpb3NbaV0sICdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9maWVsZChlbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKGlucHV0KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudGFnTmFtZSA9PSAnU0VMRUNUJykgewogICAgICAgICAgICBhZGRFdmVudChpbnB1dCwgJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQudHlwZSA9PSAndGV4dGFyZWEnKXsKICAgICAgICAgICAgYWRkRXZlbnQoaW5wdXQsICdpbnB1dCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhbGlkYXRlX2ZpZWxkKHRoaXMsIHRydWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJlbW92ZV90b29sdGlwcygpOwogICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbElucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgZWxlbSA9IGFsbElucHV0c1tpXTsKICAgICAgaWYgKG5lZWRzX3ZhbGlkYXRlKGVsZW0pKSB7CiAgICAgICAgaWYgKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAic2VsZWN0IikgewogICAgICAgICAgZWxlbS52YWx1ZSA9IGVsZW0udmFsdWUudHJpbSgpOwogICAgICAgIH0KICAgICAgICB2YWxpZGF0ZV9maWVsZChlbGVtKSA/IHRydWUgOiBub19lcnJvciA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoIW5vX2Vycm9yICYmIGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgfQogICAgcmVzaXplX3Rvb2x0aXBzKCk7CiAgICByZXR1cm4gbm9fZXJyb3I7CiAgfTsKICBhZGRFdmVudCh3aW5kb3csICdyZXNpemUnLCByZXNpemVfdG9vbHRpcHMpOwogIGFkZEV2ZW50KHdpbmRvdywgJ3Njcm9sbCcsIHJlc2l6ZV90b29sdGlwcyk7CiAgICB2YXIgX2Zvcm1fc2VyaWFsaXplID0gZnVuY3Rpb24oZm9ybSl7aWYoIWZvcm18fGZvcm0ubm9kZU5hbWUhPT0iRk9STSIpe3JldHVybiB9dmFyIGksaixxPVtdO2ZvcihpPTA7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspe2lmKGZvcm0uZWxlbWVudHNbaV0ubmFtZT09PSIiKXtjb250aW51ZX1zd2l0Y2goZm9ybS5lbGVtZW50c1tpXS5ub2RlTmFtZSl7Y2FzZSJJTlBVVCI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJ0ZXh0IjpjYXNlIm51bWJlciI6Y2FzZSJkYXRlIjpjYXNlInRpbWUiOmNhc2UiaGlkZGVuIjpjYXNlInBhc3N3b3JkIjpjYXNlImJ1dHRvbiI6Y2FzZSJyZXNldCI6Y2FzZSJzdWJtaXQiOnEucHVzaChmb3JtLmVsZW1lbnRzW2ldLm5hbWUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChmb3JtLmVsZW1lbnRzW2ldLnZhbHVlKSk7YnJlYWs7Y2FzZSJjaGVja2JveCI6Y2FzZSJyYWRpbyI6aWYoZm9ybS5lbGVtZW50c1tpXS5jaGVja2VkKXtxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpfWJyZWFrO2Nhc2UiZmlsZSI6YnJlYWt9YnJlYWs7Y2FzZSJURVhUQVJFQSI6cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0udmFsdWUpKTticmVhaztjYXNlIlNFTEVDVCI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJzZWxlY3Qtb25lIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0LW11bHRpcGxlIjpmb3Ioaj0wO2o8Zm9ybS5lbGVtZW50c1tpXS5vcHRpb25zLmxlbmd0aDtqKyspe2lmKGZvcm0uZWxlbWVudHNbaV0ub3B0aW9uc1tqXS5zZWxlY3RlZCl7cS5wdXNoKGZvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGZvcm0uZWxlbWVudHNbaV0ub3B0aW9uc1tqXS52YWx1ZSkpfX1icmVha31icmVhaztjYXNlIkJVVFRPTiI6c3dpdGNoKGZvcm0uZWxlbWVudHNbaV0udHlwZSl7Y2FzZSJyZXNldCI6Y2FzZSJzdWJtaXQiOmNhc2UiYnV0dG9uIjpxLnB1c2goZm9ybS5lbGVtZW50c1tpXS5uYW1lKyI9IitlbmNvZGVVUklDb21wb25lbnQoZm9ybS5lbGVtZW50c1tpXS52YWx1ZSkpO2JyZWFrfWJyZWFrfX1yZXR1cm4gcS5qb2luKCImIil9OwogIHZhciBmb3JtX3N1Ym1pdCA9IGZ1bmN0aW9uKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGlmICh2YWxpZGF0ZV9mb3JtKCkpIHsKICAgICAgLy8gdXNlIHRoaXMgdHJpY2sgdG8gZ2V0IHRoZSBzdWJtaXQgYnV0dG9uICYgZGlzYWJsZSBpdCB1c2luZyBwbGFpbiBqYXZhc2NyaXB0CiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNfZm9ybV8xM19zdWJtaXQnKS5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICAgIHZhciBzZXJpYWxpemVkID0gX2Zvcm1fc2VyaWFsaXplKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdfZm9ybV8xM18nKSkucmVwbGFjZSgvJTBBL2csICdcXG4nKTsKICAgICAgdmFyIGVyciA9IGZvcm1fdG9fc3VibWl0LnF1ZXJ5U2VsZWN0b3IoJy5fZm9ybV9lcnJvcicpOwogICAgICBlcnIgPyBlcnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlcnIpIDogZmFsc2U7CiAgICAgIF9sb2FkX3NjcmlwdCgnaHR0cHM6Ly9tYWtvbW0uYWN0aXZlaG9zdGVkLmNvbS9wcm9jLnBocD8nICsgc2VyaWFsaXplZCArICcmanNvbnA9dHJ1ZScpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH07CiAgYWRkRXZlbnQoZm9ybV90b19zdWJtaXQsICdzdWJtaXQnLCBmb3JtX3N1Ym1pdCk7Cn0pKCk7Cgo8L3NjcmlwdD4=[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container][fusion_builder_container type=”flex” hundred_percent=”no” equal_height_columns=”no” menu_anchor=”” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” class=”” id=”” background_color=”” background_image=”” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” parallax_speed=”0.3″ video_mp4=”” video_webm=”” video_ogv=”” video_url=”” video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” overlay_color=”” video_preview_image=”” border_color=”” border_style=”solid” padding_top=”” padding_bottom=”” padding_left=”” padding_right=”” admin_toggled=”no”][/fusion_builder_container]
0 Kommentare