arry
trenner
text
to
subject
id
user
val
alexa_instanz_0
alexa_instanz_1
uebnerschrift_nachrichten_Batterien
uebnerschrift_nachrichten_Steckdosen
Batterien_Datenpruefung
uebnerschrift_nachrichten_Lichter
Steckdosen_Datenpruefung
uebnerschrift_nachrichten_Bewegungsmelder
anzahl_Batterien_aktiv
Lichter_Datenpruefung
Fenster_Datenpruefung
anzahl_Steckdosen_aktiv
Bewegungsmelder_Datenpruefung
gekippt
anzahl_Lichter_aktiv
anzahl_Bewegungsmelder_aktiv
Tueren_Datenpruefung
anzahl_fenster_gekippt
anzahl_tueren_gekippt
Batterien_Ansage
Steckdosen_Ansage
anzahl_Batterien_inaktiv
Lichter_Ansage
Fenster_Ansage
anzahl_Steckdosen_inaktiv
Bewegungsmelder_Ansage
geoffnet
anzahl_Lichter_inaktiv
anzahl_Bewegungsmelder_inaktiv
Tueren_Ansage
anzahl_fenster_offen
anzahl_tueren_offen
angesprochener_echo_instanz_0
angesprochener_echo_instanz_1
etage
Batterien
nachrichten_ausgabe_Batterien
Steckdosen
nachrichten_ausgabe_Steckdosen
Licht
nachrichten_ausgabe_Lichter
Alexa_Ansage_verwenden
objekt_id_01alexa_eDP
Bewegungsmelder
nachrichten_ausgabe_Bewegungsmelder
anzahl_Batterien_gesamt
anzahl_Steckdosen_gesamt
emoji_π
uebnerschrift_nachrichten_Tueren
anzahl_Lichter_gesamt
uebnerschrift_nachrichten_Fenster
anzahl_Bewegungsmelder_gesamt
anzahl_fenster_geschlossen
anzahl_tueren_geschlossen
speak_volume_instanz_0
07_Ansage_Button_Batterien_eDP
07_Ansage_Button_Steckdosen_eDP
speak_volume_instanz_1
07_Ansage_Button_Lichter_eDP
07_Ansage_Button_Bewegungsmelder_eDP
09_Fenster_Ansage_Button_eDP
09_Tueren_Ansage_Button_eDP
objekt_id_02hans_eDP
liste_Batterien_aktiv
Fenster
liste_Steckdosen_aktiv
emoji_βοΈ
liste_Lichter_aktiv
liste_Bewegungsmelder_aktiv
anzahl_fenster_gesamt
anzahl_tueren_gesamt
angesprochener_echo_instanz_0_neu
angesprochener_echo_instanz_1_neu
eine
einzahl_Batterie
einzahl_Steckdose
Ansage_Einleitungssatz_Batterien
mehrzahl_Batterien
ein
einzahl_Licht
anlegen_in
objekt_id_03vicki_eDP
Batterien_verwenden
01_anzahl_Batterien_gesamt_eDP
Ansage_Einleitungssatz_Steckdosen
einzahl_Bewegungsmelder
liste_Batterien_inaktiv
Ansage_Einleitungssatz_Lichter
Ansage_Einleitungssatz_Fenster
Tueren
liste_Steckdosen_inaktiv
Ansage_Einleitungssatz_Bewegungsmelder
nachrichten_ausgabe_Tueren
liste_Lichter_inaktiv
nachrichten_ausgabe_Fenster
liste_Bewegungsmelder_inaktiv
liste_fenster_offen
liste_tueren_offen
speak_volume_instanz_0_neu
Ansagelautstaerke
speak_volume_instanz_1_neu
emoji_βοΈ
06_liste_Batterien_aktiv_emojis_eDP
emoji_β‘οΈ
06_liste_Steckdosen_aktiv__emojis_eDP
Logmeldung_Tueren_Ansage
02_anzahl_Batterien_aktiv_eDP
objekt_id_05alexa_ssml_eDP
objekt_id_09ende_ssml_eDP
emoji_π‘
06_liste_Lichter_aktiv_emojis_eDP
objekt_id_04conchita_eDP
Logmeldung_Batterie_Ansage
02_anzahl_Steckdosen_aktiv_eDP
emoji_π
06_liste_Bewegungsmelder_aktiv_emojis_eDP
liste_Batterien_aktiv_gesamt
02_anzahl_Lichter_aktiv_eDP
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
liste_Steckdosen_aktiv_gesamt
02_anzahl_Bewegungsmelder_aktiv_eDP
liste_Lichter_aktiv_gesamt
liste_Bewegungsmelder_aktiv_gesamt
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
Ansage_Einleitungssatz_Tueren
liste_fenster_gekippt
liste_tueren_gekippt
emoji_β
03_liste_Batterien_aktiv_eDP
objekt_id_06hans_ssml_eDP
pfad_geraete_zaehlen
03_liste_Steckdosen_aktiv_eDP
liste_Batterien_aktiv_html
03_liste_Lichter_aktiv_eDP
05_offene_gekippte_Fenster_Liste
liste_Steckdosen_aktiv_html
03_liste_Bewegungsmelder_aktiv_eDP
einzahl_Tuer
liste_Lichter_aktiv_html
liste_Bewegungsmelder_aktiv_html
05_offene_gekippte_Tueren_Liste
liste_fenster_geschlossen
liste_tueren_geschlossen
objekt_id_07vicki_ssml_eDP
04_liste_Batterien_gesamt_eDP
Steckdosen_verwenden
01_anzahl_Steckdosen_gesamt_eDP
liste_Batterien_inaktiv_html
liste_Steckdosen_inaktiv_html
02_anzahl_Tueren_offen_eDP
01_anzahl_Tueren_gekippt_eDP
liste_Lichter_inaktiv_html
02_anzahl_Fenster_offen_eDP
01_anzahl_Fenster_gekippt_eDP
liste_Bewegungsmelder_inaktiv_html
liste_fenster_offen_gesamt
liste_tueren_offen_gesamt
objekt_id_08conchita_ssml_eDP
05_liste_Batterien_html_eDP
Logmeldung_Steckdosen_Ansage
htmlText
liste_fenster_offen_html
liste_tueren_offen_html
Logmeldung_Lichter_Ansage
Logmeldung_Bewegungsmelder_Ansage
Logmeldung_Fenster_Ansage
Batterien_aktiv
Steckdosen_aktiv
Lichter_aktiv
Bewegungsmelder_aktiv
liste_fenster_gekippt_html
liste_tueren_gekippt_html
04_liste_Steckdosen_gesamt_eDP
Lichter_verwenden
01_anzahl_Lichter_gesamt_eDP
selektor_Batterien
Batterien_inaktiv
selektor_Steckdosen
Steckdosen_inaktiv
selektor_Lichter
Lichter_inaktiv
selektor_Bewegungsmelder
Bewegungsmelder_inaktiv
liste_fenster_geschlossen_html
liste_tueren_geschlossen_html
blockly_start_batterien_zaehlen_einlesen
05_liste_Steckdosen_html_eDP
formatierte_ausgabe_batterien_zum_start
01_anzahl_Bewegungsmelder_gesamt_eDP
fenster_offen
tueren_offen
04_liste_Lichter_gesamt_eDP
Bewegungsmelder_verwenden
08_offene_gekippte_Tueren_Liste_mit_Emojis
08_offene_gekippte_Fenster_Liste_mit_Emojis
selektor_Fenster
fenster_gekippt
selektor_Tueren
tueren_gekippt
blockly_start_steckdosen_zaehlen_einlesen
05_liste_Lichter_html_eDP
wert
fenster_geschlossen
tueren_geschlossen
formatierte_ausgabe_steckdosen_zum_start
04_liste_Bewegungsmelder_gesamt_eDP
Fenster_verwenden
blockly_start_lichter_zaehlen_einlesen
05_liste_Bewegungsmelder_html_eDP
formatierte_ausgabe_lichter_zum_start
03_anzahl_Fenster_geschlossen_eDP
Telegram_verwenden
emoji_π
emoji_π
03_anzahl_Tueren_geschlossen_eDP
04_anzahl_Fenster_gesamt_eDP
Tueren_verwenden
Email_verwenden
04_anzahl_Tueren_gesamt_eDP
blockly_start_bwm_zaehlen_einlesen
formatierte_ausgabe_bwm_zum_start
06_gesamte_Fenster_Liste
telegram_versand_an_aus_Batterien
07_html_Fenster_Liste
telegram_direkt_versenden_Batterien
telegram_versand_an_aus_Steckdosen
06_gesamte_Tueren_Liste
telegram_direkt_versenden_Steckdosen
telegram_versand_an_aus_Lichter
07_html_Tueren_Liste
telegram_direkt_versenden_Lichter
telegram_versand_an_aus_Bewegungsmelder
blockly_start_fenster_zaehlen_einlesen
telegram_direkt_versenden_Bewegungsmelder
telegram_versand_an_aus_Fenster
formatierte_ausgabe_fenster_zum_start
Telegram_Empfaenger
telegram_direkt_versenden_Fenster
telegram_versand_an_aus_Tueren
telegram
telegram_direkt_versenden_Tueren
blockly_start_tueren_zaehlen_einlesen
telegram2
email_versand_an_aus_batterien
formatierte_ausgabe_tueren_zum_start
telegram3
email_direkt_versenden_Batterien
email_versand_an_aus_Steckdosen
telegram4
email_direkt_versenden_Steckdosen
email_versand_an_aus_Lichter
telegram5
email_direkt_versenden_Lichter
email_versand_an_aus_Bewegungsmelder
EMail_Empfaenger
telegram6
Betreff
email_direkt_versenden_Bewegungsmelder
email_versand_an_aus_Fenster
email_direkt_versenden_Fenster
email_versand_an_aus_Tueren
email_direkt_versenden_Tueren
email
email2
email3
email4
email5
email6
emoji_β
emoji_π§―
emoji_π
einzahl_Fenster
mehrzahl_Fenster
mehrzahl_Tueren
mehrzahl_Steckdosen
mehrzahl_Licht
mehrzahl_Bewegungsmelder
arry, trenner
cmV0dXJuIGFycnkuam9pbih0cmVubmVyKTs=
Beschreibe diese Funktion β¦
EMail_Batterien
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs=
Beschreibe diese Funktion β¦
getParentName
dmFyIG5hbWUgPSBnZXRPYmplY3QoaWQpLmNvbW1vbi5uYW1lOw0KdmFyIHdlcnQgPSBnZXRTdGF0ZShpZCkudmFsDQoNCi8vSFVFIExhbXBlbg0KaWYgKG5hbWUuc3Vic3RyKCAtMykgPT0gKCcub24nKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTMpOw0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCcuTEVWRUwnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTYpOw0KDQovL0hNUEkgU3RlY2tkb3Nlbg0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCcuU1RBVEUnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTYpOw0KDQovL0hNSVAgQmV3ZWd1bmdzbWVsZGVyIC8gUHLDpHNlbnptZWxkZXINCmlmIChuYW1lLnN1YnN0ciggLTcpID09ICgnLk1PVElPTicpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtNyk7DQppZiAobmFtZS5zdWJzdHIoIC0yNSkgPT0gKCcuUFJFU0VOQ0VfREVURUNUSU9OX1NUQVRFJykpIHJldHVybiBuYW1lLnNsaWNlKDAsIC0yNSk7DQoNCi8vQW5kZXJlIEJld2VndW5nc21lbGRlcg0KaWYgKG5hbWUuc3Vic3RyKCAtOSkgPT0gKCcucHJlc2VuY2UnKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLTkpOw0KaWYgKG5hbWUuc3Vic3RyKCAtMTMpID09ICgnIFN3aXRjaCBzdGF0ZScpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtMTMpOw0KDQovL0hNSVAgdW5kIEhNIEJhdHRlcmllbg0KaWYgKG5hbWUuc3Vic3RyKCAtNykgPT0gKCdMT1dfQkFUJykgJiYgd2VydCA9PSB0cnVlKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtMTApIDsNCmlmIChuYW1lLnN1YnN0ciggLTcpID09ICgnTE9XX0JBVCcpICYmIHdlcnQgPT0gZmFsc2UpIHJldHVybiBuYW1lLnNsaWNlKDAsIC0xMCkgOw0KaWYgKG5hbWUuc3Vic3RyKCAtNikgPT0gKCdMT1dCQVQnKSAmJiB3ZXJ0ID09IHRydWUpIHJldHVybiBuYW1lLnNsaWNlKDAsIC05KSA7DQppZiAobmFtZS5zdWJzdHIoIC02KSA9PSAoJ0xPV0JBVCcpICYmIHdlcnQgPT0gZmFsc2UpIHJldHVybiBuYW1lLnNsaWNlKDAsIC05KTsNCi8vaWYgKG5hbWUuc3Vic3RyKCAtMTcpID09ICgnT1BFUkFUSU5HX1ZPTFRBR0UnKSkgcmV0dXJuICBnZXRTdGF0ZShpZCkudmFsLnRvU3RyaW5nKCkucmVwbGFjZSgnLicsICcsJywpICsgJyBWb2x0JyArICcgJyArIG5hbWUuc2xpY2UoMCwgLTIwKSA7DQovL2lmIChuYW1lLnN1YnN0ciggLTE3KSA9PSAoJ09QRVJBVElOR19WT0xUQUdFJykgJiYgd2VydCA+IDApIHJldHVybiAn4pyFICcgKyBuYW1lLnNsaWNlKDAsIC0yMCk7DQovL2lmIChuYW1lLnN1YnN0ciggLTE3KSA9PSAoJ09QRVJBVElOR19WT0xUQUdFJykgJiYgd2VydCA9PSAwKSByZXR1cm4gJ+Kdl++4jyDvuI8nICsgbmFtZS5zbGljZSgwLCAtMjApOw0KDQovL1NvbnN0aWdlDQppZiAobmFtZS5zdWJzdHIoIC02KSA9PSAoJy5zdGF0ZScpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtNik7DQoNCg0KaWQgPSBpZC5zdWJzdHJpbmcoMCwgaWQubGFzdEluZGV4T2YoJy4nKSk7DQppZihleGlzdHNPYmplY3QoaWQpICYmIGdldE9iamVjdChpZCkudHlwZSA9PSAnZGV2aWNlJykgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7DQppZCA9IGlkLnN1YnN0cmluZygwLCBpZC5sYXN0SW5kZXhPZignLicpKTsNCmlmKGV4aXN0c09iamVjdChpZCkgJiYgZ2V0T2JqZWN0KGlkKS50eXBlID09ICdkZXZpY2UnKSByZXR1cm4gZ2V0T2JqZWN0KGlkKS5jb21tb24ubmFtZTsNCg0KZWxzZSByZXR1cm4gJ0dlcmFldCB1bmJla2FubnQnOw0KDQo=
Beschreibe diese Funktion β¦
EMail_Steckdosen
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs=
Beschreibe diese Funktion β¦
Telegram_Batterien
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CYXR0ZXJpZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7
Beschreibe diese Funktion β¦
EMail_Lichter
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfTGljaHRlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7
Beschreibe diese Funktion β¦
existiert_DP
cmV0dXJuIGV4aXN0c1N0YXRlKGlkKTs=
Beschreibe diese Funktion β¦
Telegram_Steckdosen
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9TdGVja2Rvc2VuLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw==
Beschreibe diese Funktion β¦
EMail_BWM
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmV3ZWd1bmdzbWVsZGVyLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs=
Beschreibe diese Funktion β¦
Batterien_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
07_Ansage_Button_Batterien_eDP
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Batterien_Ansage
0
log
Logmeldung_Batterie_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
Telegram_Lichter
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9MaWNodGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw==
Beschreibe diese Funktion β¦
EMail_Fenster
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfRmVuc3RlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7
Beschreibe diese Funktion β¦
Datenpunkte_anlegen
LyoqCiAqIENyZWF0ZSBzdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wIG9yIGphdmFzY3JpcHQueAogKiBDdXJyZW50IFZlcnNpb246ICAgICBodHRwczovL2dpdGh1Yi5jb20vTWljLU0vaW9icm9rZXIuY3JlYXRlVXNlclN0YXRlcwogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8KICogQXV0b3I6ICAgICAgICAgICAgICAgTWljIChpb0Jyb2tlcikgfCBNaWMtTSAoZ2l0aHViKQogKiBWZXJzaW9uOiAgICAgICAgICAgICAxLjEgKDI2IEphbnVhcnkgMjAyMCkKICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIFBMRUFTRSBOT1RFOiBQZXIgaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIEBwYXJhbSB7c3RyaW5nfSB3aGVyZSAgICAgICAgICBXaGVyZSB0byBjcmVhdGUgdGhlIHN0YXRlOiAnMF91c2VyZGF0YS4wJyBvciAnamF2YXNjcmlwdC54Jy4KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4KICogQHBhcmFtIHthcnJheX0gc3RhdGVzVG9DcmVhdGUgIFN0YXRlKHMpIHRvIGNyZWF0ZS4gc2luZ2xlIGFycmF5IG9yIGFycmF5IG9mIGFycmF5cwogKiBAcGFyYW0ge29iamVjdH0gW2NhbGxiYWNrXSAgICAgT3B0aW9uYWw6IGEgY2FsbGJhY2sgZnVuY3Rpb24gLS0gVGhpcyBwcm92aWRlZCBmdW5jdGlvbiB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCBzdGF0ZXMgYXJlIGNyZWF0ZWQuCiAqLwoKCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsKIAogICAgY29uc3QgV0FSTiA9IGZhbHNlOyAvLyBPbmx5IGZvciAwX3VzZXJkYXRhLjA6IFRocm93cyB3YXJuaW5nIGluIGxvZywgaWYgc3RhdGUgaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgZm9yY2U9ZmFsc2UuIERlZmF1bHQgaXMgZmFsc2UsIHNvIG5vIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBleGlzdHMuCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUKICAgIC8vIFBlciBpc3N1ZSAjNDc0IChodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0KSwgdGhlIHVzZWQgZnVuY3Rpb24gc2V0T2JqZWN0KCkgZXhlY3V0ZXMgdGhlIGNhbGxiYWNrIAogICAgLy8gYmVmb3JlIHRoZSBzdGF0ZSBpcyBhY3R1YWwgY3JlYXRlZC4gVGhlcmVmb3JlLCB3ZSB1c2UgYSBzZXRUaW1lb3V0IGFuZCBjb3VudGVyIGFzIGEgd29ya2Fyb3VuZC4KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuCgogICAgLy8gVmFsaWRhdGUgIndoZXJlIgogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90CiAgICBpZiAoICh3aGVyZS5tYXRjaCgvXigoamF2YXNjcmlwdFwuKFsxLTldWzAtOV18WzAtOV0pKSR8MF91c2VyZGF0YVwuMCQpLykgPT0gbnVsbCkgKSB7CiAgICAgICAgbG9nKCdUaGlzIHNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRvIGNyZWF0ZSBzdGF0ZXMgdW5kZXIgWycgKyB3aGVyZSArICddJywgJ2Vycm9yJyk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQogICAgaWYoIUFycmF5LmlzQXJyYXkoc3RhdGVzVG9DcmVhdGVbMF0pKSBzdGF0ZXNUb0NyZWF0ZSA9IFtzdGF0ZXNUb0NyZWF0ZV07IC8vIHdyYXAgaW50byBhcnJheSwgaWYganVzdCBvbmUgYXJyYXkgYW5kIG5vdCBpbnNpZGUgYW4gYXJyYXkKCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXRlc1RvQ3JlYXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGV0IGxwUGF0aCA9IHN0YXRlc1RvQ3JlYXRlW2ldWzBdLnJlcGxhY2UoL1wuKlwuL2csICcuJyk7IC8vIHJlcGxhY2UgYWxsIG11bHRpcGxlIGRvdHMgbGlrZSAnLi4nLCAnLi4uJyB3aXRoIGEgc2luZ2xlICcuJwogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcKICAgICAgICBscFBhdGggPSB3aGVyZSArICcuJyArIGxwUGF0aDsgLy8gYWRkIHdoZXJlIHRvIGJlZ2lubmluZyBvZiBzdHJpbmcKICAgICAgICBzdGF0ZXNUb0NyZWF0ZVtpXVswXSA9IGxwUGF0aDsKICAgIH0KCiAgICBpZiAod2hlcmUgIT0gJzBfdXNlcmRhdGEuMCcpIHsKICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueAogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsKICAgICAgICAgICAgbGV0IGxvb3BJbml0ID0gKGxvb3BQYXJhbVsxXVsnZGVmJ10gPT0gdW5kZWZpbmVkKSA/IG51bGwgOiBsb29wUGFyYW1bMV1bJ2RlZiddOyAvLyBtaW1pYyBzYW1lIGJlaGF2aW9yIGFzIGNyZWF0ZVN0YXRlIGlmIG5vIGluaXQgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgICAgY3JlYXRlU3RhdGUobG9vcFBhcmFtWzBdLCBsb29wSW5pdCwgZm9yY2UsIGxvb3BQYXJhbVsxXSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsKICAgICAgICAgICAgICAgIGlmIChudW1TdGF0ZXMgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBwcm9jZXNzZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gRnVuY3Rpb24gdG8gY2FsbGJhY2sgcGFyYW1ldGVyIHdhcyBwcm92aWRlZCcpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ3JlYXRlIFN0YXRlcyB1bmRlciAwX3VzZXJkYXRhLjAKICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOwogICAgICAgIGxldCBjb3VudGVyID0gLTE7CiAgICAgICAgc3RhdGVzVG9DcmVhdGUuZm9yRWFjaChmdW5jdGlvbihsb29wUGFyYW0pIHsKICAgICAgICAgICAgY291bnRlciArPSAxOwogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOwogICAgICAgICAgICBpZiggKCQobG9vcFBhcmFtWzBdKS5sZW5ndGggPiAwKSAmJiAoZXhpc3RzU3RhdGUobG9vcFBhcmFtWzBdKSkgKSB7IC8vIFdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9pb0Jyb2tlci9pb0Jyb2tlci5qYXZhc2NyaXB0L2lzc3Vlcy80NzgKICAgICAgICAgICAgICAgIC8vIFN0YXRlIGlzIGV4aXN0aW5nLgogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOwogICAgICAgICAgICAgICAgaWYgKCFXQVJOICYmIExPR19ERUJVRykgbG9nKCdbRGVidWddIFN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZy4gT3B0aW9uIGZvcmNlICg9b3ZlcndyaXRlKSBpcyBzZXQgdG8gWycgKyBmb3JjZSArICddLicpOwogICAgICAgICAgICAgICAgaWYoIWZvcmNlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyBTbywgd2UgZG8gbm90IHByb2NlZWQuCiAgICAgICAgICAgICAgICAgICAgbnVtU3RhdGVzLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQWxsIHN0YXRlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gb3V0IGFuZCBjb250aW51ZSB3aXRoIG5leHQgZWxlbWVudCBpbiBsb29wLgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE4NDUyOTIwL2NvbnRpbnVlLWluLWN1cnNvci1mb3JlYWNoCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBpZighZm9yY2UpCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFN0YXRlIGlzIG5vdCBleGlzdGluZyBvciBmb3JjZSA9IHRydWUsIHNvIHdlIGFyZSBjb250aW51aW5nIHRvIGNyZWF0ZSB0aGUgc3RhdGUgdGhyb3VnaCBzZXRPYmplY3QoKS4KICAgICAgICAgICAgbGV0IG9iaiA9IHt9OwogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7CiAgICAgICAgICAgIG9iai5uYXRpdmUgPSB7fTsKICAgICAgICAgICAgb2JqLmNvbW1vbiA9IGxvb3BQYXJhbVsxXTsKICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgbG9nKCdDYW5ub3Qgd3JpdGUgb2JqZWN0IGZvciBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddOiAnICsgZXJyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKQogICAgICAgICAgICAgICAgICAgIGxldCBpbml0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdudW1iZXInKSBpbml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9vcFBhcmFtWzFdLnR5cGUgPT09ICdib29sZWFuJykgaW5pdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0ID0gbG9vcFBhcmFtWzFdLmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUobG9vcFBhcmFtWzBdLCBpbml0LCB0cnVlLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVN0YXRlcy0tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7IC8vIGV4ZWN1dGUgaWYgYSBmdW5jdGlvbiB3YXMgcHJvdmlkZWQgdG8gcGFyYW1ldGVyIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBGdW5jdGlvbiB0byBjYWxsYmFjayBwYXJhbWV0ZXIgd2FzIHByb3ZpZGVkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSwgREVMQVkgKyAoMjAgKiBjb3VudGVyKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgIH0KfQoKLy9TdGltbWVuIGZ1ZXIgQWxleGEgc3NtbCBBbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjAxQWxleGEnLCB7J25hbWUnOicwMUFsZXhhJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICJBbGV4YSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifX1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjAySGFucycsIHsnbmFtZSc6JzAySGFucycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDNWaWNraScsIHsnbmFtZSc6JzAzVmlja2knLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJWaWNraSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uQWxleGFfU3RpbW1lbi4wNENvbmNoaXRhJywgeyduYW1lJzonMDRDb25jaGl0YScsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkNvbmNoaXRhIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjA1QWxleGFfc3NtbCcsIHsnbmFtZSc6JzA1QWxleGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQWxleGEiPicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDZIYW5zX3NzbWwnLCB7J25hbWUnOicwNkhhbnNfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iSGFucyI+JyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uQWxleGFfU3RpbW1lbi4wN1ZpY2tpX3NzbWwnLCB7J25hbWUnOicwN1ZpY2tpX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8c3BlYWs+PHZvaWNlIG5hbWU9IlZpY2tpIj4nIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5BbGV4YV9TdGltbWVuLjA4Q29uY2hpdGFfc3NtbCcsIHsnbmFtZSc6JzA4Q29uY2hpdGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQ29uY2hpdGEiPicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkFsZXhhX1N0aW1tZW4uMDlzc21sX2VuZGUnLCB7J25hbWUnOicwOXNzbWxfZW5kZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6Jzwvdm9pY2U+PC9zcGVhaz4nIH1dLApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0ZlbnN0ZXIKLy9BbnNhZ2UgQnV0dG9uIEZlbnN0ZXJhbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIEZlbnN0ZXJfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDlfJytbZXRhZ2VdKydfJytbRmVuc3Rlcl0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwOV8nK1tldGFnZV0rJ18nK1tGZW5zdGVyXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0ZlbnN0ZXJdKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0ZlbnN0ZXIgemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuICAgIAppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZWtpcHB0JywgeyduYW1lJzonMDFfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VraXBwdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0ZlbnN0ZXJdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAyX0FuemFobF8nK1tGZW5zdGVyXSsnX29mZmVuJywgeyduYW1lJzonMDJfQW56YWhsXycrW0ZlbnN0ZXJdKydfb2ZmZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tGZW5zdGVyXSsnJywgJ2RlZic6MCB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19BbnphaGxfJytbRmVuc3Rlcl0rJ19nZXNjaGxvc3NlbicsIHsnbmFtZSc6JzAzX0FuemFobF8nK1tGZW5zdGVyXSsnX2dlc2NobG9zc2VuJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgeyduYW1lJzonMDRfQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgeyduYW1lJzonMDRfMV9BbnphaGxfJytbRmVuc3Rlcl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDVfb2ZmZW5lX2dla2lwcHRlXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOicwNV9vZmZlbmVfZ2VraXBwdGVfJytbRmVuc3Rlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfZ2VzYW10ZV8nK1tGZW5zdGVyXSsnX0xpc3RlJywgeyduYW1lJzonMDZfZ2VzYW10ZV8nK1tGZW5zdGVyXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN19odG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOicwN19odG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA4X29mZmVuZV9nZWtpcHB0ZV8nK1tGZW5zdGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwOF9vZmZlbmVfZ2VraXBwdGVfJytbRmVuc3Rlcl0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vVGVsZWdyYW0gRmVuc3RlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICAgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tGZW5zdGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbRmVuc3Rlcl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0ZlbnN0ZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW0ZlbnN0ZXJdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbRmVuc3Rlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tGZW5zdGVyXSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCgpdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CiAgICAKLy9FLU1haWwgRmVuc3RlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICAgCgogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbRmVuc3Rlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0ZlbnN0ZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tGZW5zdGVyXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0ZlbnN0ZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tGZW5zdGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0ZlbnN0ZXJdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1BSUwgIitbRmVuc3Rlcl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCl07CgpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vVHVlcmVuCi8vQW5zYWdlIEJ1dHRvbiBUdWVyZW5hbnNhZ2UgYW5sZWdlbgppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIFR1ZXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDlfJytbZXRhZ2VdKydfJytbVHVlcmVuXSsnYW5zYWdlJywgeyduYW1lJzogJzA5XycrW2V0YWdlXSsnXycrW1R1ZXJlbl0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tUdWVyZW5dKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07ICAgCgovL1R1ZXJlbiB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKFR1ZXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMV9BbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW1R1ZXJlbl0rJ19vZmZlbicsIHsnbmFtZSc6JzAyX0FuemFobF8nK1tUdWVyZW5dKydfb2ZmZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDNfQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNjaGxvc3NlbicsIHsnbmFtZSc6JzAzX0FuemFobF8nK1tUdWVyZW5dKydfZ2VzY2hsb3NzZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNhbXQnLCB7J25hbWUnOicwNF9BbnphaGxfJytbVHVlcmVuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1R1ZXJlbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF8xX0FuemFobF8nK1tUdWVyZW5dKydfZ2VvZWZmbmV0X3VuZF9nZWtpcHB0X2dlc2FtdCcsIHsnbmFtZSc6JzA0XzFfQW56YWhsXycrW1R1ZXJlbl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbVHVlcmVuXSsnJywgJ2RlZic6MCB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X29mZmVuZV9nZWtpcHB0ZV8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNV9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA2X2dlc2FtdGVfJytbVHVlcmVuXSsnX0xpc3RlJywgeyduYW1lJzonMDZfZ2VzYW10ZV8nK1tUdWVyZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfaHRtbF8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOicwN19odG1sXycrW1R1ZXJlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wOF9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwOF9vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9UZWxlZ3JhbSBUdWVyZW4gIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChUdWVyZW5fdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbVHVlcmVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbVHVlcmVuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgeyduYW1lJzonVGVsZWdyYW1fJytbVHVlcmVuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW1R1ZXJlbl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tUdWVyZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbVHVlcmVuXSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vRS1NYWlsIFR1ZXJlbiBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoVHVlcmVuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1R1ZXJlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW1R1ZXJlbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J0VNQUlMXycrW1R1ZXJlbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tUdWVyZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tUdWVyZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonRU1BSUxfJytbVHVlcmVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW1R1ZXJlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8vU3RlY2tkb3NlbgovL0Fuc2FnZSBCdXR0b24gU3RlY2tkb3NlbmFuc2FnZSBhbmxlZ2VuCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgU3RlY2tkb3Nlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfJytbZXRhZ2VdKydfJytbU3RlY2tkb3Nlbl0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwN18nK1tldGFnZV0rJ18nK1tTdGVja2Rvc2VuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW1N0ZWNrZG9zZW5dKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1N0ZWNrZG9zZW4gemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuCmlmIChTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgICAgICAgCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDFfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfZ2VzYW10JywgeyduYW1lJzonMDFfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbU3RlY2tkb3Nlbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW1N0ZWNrZG9zZW5dKydfYWt0aXYnLCB7J25hbWUnOicwMl9BbnphaGxfJytbU3RlY2tkb3Nlbl0rJ19ha3RpdicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1N0ZWNrZG9zZW5dKycnLCAnZGVmJzowIH1dLCAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19ha3RpdmVfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzAzX2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF9nZXNhbXRlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNF9nZXNhbXRlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X2h0bWxfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzA1X2h0bWxfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tTdGVja2Rvc2VuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfYWt0aXZlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6JzA2X2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwogICAgCi8vVGVsZWdyYW0gU3RlY2tkb3NlbiAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKFN0ZWNrZG9zZW5fdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW1N0ZWNrZG9zZW5dKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tTdGVja2Rvc2VuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tTdGVja2Rvc2VuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J1RlbGVncmFtXycrW1N0ZWNrZG9zZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbU3RlY2tkb3Nlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0UtTWFpbCBTdGVja2Rvc2VuIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbU3RlY2tkb3Nlbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW1N0ZWNrZG9zZW5dKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tTdGVja2Rvc2VuXSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW1N0ZWNrZG9zZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tTdGVja2Rvc2VuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW1N0ZWNrZG9zZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1BSUwgIitbU3RlY2tkb3Nlbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sCiAgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9MaWNodGVyCi8vQW5zYWdlIEJ1dHRvbiBMaWNodGVyYW5zYWdlIGFubGVnZW4KaWYgKEFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBMaWNodGVyX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN18nK1tldGFnZV0rJ18nK1tMaWNodF0rJ2Fuc2FnZScsIHsnbmFtZSc6ICcwN18nK1tldGFnZV0rJ18nK1tMaWNodF0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tMaWNodF0rJycrJ2Fuc2FnZScrJyAnK1tldGFnZV0sInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vTGljaHRlciB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKExpY2h0ZXJfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAxX0FuemFobF8nK1tMaWNodF0rJ19nZXNhbXQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbTGljaHRdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbTGljaHRdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMl9BbnphaGxfJytbTGljaHRdKydfYWt0aXYnLCB7J25hbWUnOicwMl9BbnphaGxfJytbTGljaHRdKydfYWt0aXYnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tMaWNodF0rJycsICdkZWYnOjAgfV0sICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wM19ha3RpdmVfJytbTGljaHRdKydfTGlzdGUnLCB7J25hbWUnOicwM19ha3RpdmVfJytbTGljaHRdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNF9nZXNhbXRlXycrW0xpY2h0XSsnX0xpc3RlJywgeyduYW1lJzonMDRfZ2VzYW10ZV8nK1tMaWNodF0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA1X2h0bWxfJytbTGljaHRdKydfTGlzdGUnLCB7J25hbWUnOicwNV9odG1sXycrW0xpY2h0XSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDZfYWt0aXZlXycrW0xpY2h0XSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwNl9ha3RpdmVfJytbTGljaHRdKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1RlbGVncmFtIExpY2h0ZXIgIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChMaWNodGVyX3ZlcndlbmRlbiA9PSB0cnVlICYmIFRlbGVncmFtX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbTGljaHRdKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tMaWNodF0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0xpY2h0XSsnXycrW2V0YWdlXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbTGljaHRdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbTGljaHRdKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbTGljaHRdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9FLU1haWwgTGljaHRlciBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbgppZiAoTGljaHRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0xpY2h0XSsnX3phZWhsZW4uJytbZXRhZ2VdKycuRU1BSUxfJytbTGljaHRdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tMaWNodF0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tMaWNodF0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0xpY2h0XSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0xpY2h0XSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW0xpY2h0XSsnJysnc3RhdHVzJysnICcrW2V0YWdlXSsnIHNlbmRlbicsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKLy9CZXdlZ3VuZ3NtZWxkZXIKLy9BbnNhZ2UgQnV0dG9uIEJld2VndW5nc21lbGRlcmFuc2FnZSBhbmxlZ2VuCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgQmV3ZWd1bmdzbWVsZGVyX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDdfJytbZXRhZ2VdKydfJytbQmV3ZWd1bmdzbWVsZGVyXSsnYW5zYWdlJywgeyduYW1lJzogJzA3XycrW2V0YWdlXSsnXycrW0Jld2VndW5nc21lbGRlcl0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydhbnNhZ2UnKycgJytbZXRhZ2VdLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0Jld2VndW5nc21lbGRlciB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4KaWYgKEJld2VndW5nc21lbGRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAxX0FuemFobF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfZ2VzYW10JywgeyduYW1lJzonMDFfQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19nZXNhbXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnLCAnZGVmJzowIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDJfQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19ha3RpdicsIHsnbmFtZSc6JzAyX0FuemFobF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfYWt0aXYnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnLCAnZGVmJzowIH1dLCAgICAKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjAzX2FrdGl2ZV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOicwM19ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0Jld2VndW5nc21lbGRlcl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA0X2dlc2FtdGVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlJywgeyduYW1lJzonMDRfZ2VzYW10ZV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDVfaHRtbF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOicwNV9odG1sXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNl9ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCB7J25hbWUnOicwNl9ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9UZWxlZ3JhbSBCZXdlZ3VuZ3NtZWxkZXIgIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuVGVsZWdyYW1fJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J1RlbGVncmFtXycrW0Jld2VndW5nc21lbGRlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy9FLU1haWwgQmV3ZWd1bmdzbWVsZGVyIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgRW1haWxfdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCB7J25hbWUnOidFTUFJTF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfJytbZXRhZ2VdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmV3ZWd1bmdzbWVsZGVyXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuRU1BSUxfJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsIHsnbmFtZSc6J0VNQUlMXycrW0Jld2VndW5nc21lbGRlcl0rJ3N0YXR1c18nK1tldGFnZV0rJ19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJFTUFJTCAiK1tCZXdlZ3VuZ3NtZWxkZXJdKycnKydzdGF0dXMnKycgJytbZXRhZ2VdKycgc2VuZGVuJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0JhdHRlcmllbgovL0Fuc2FnZSBCdXR0b24gQmV3ZWd1bmdzbWVsZGVyYW5zYWdlIGFubGVnZW4KaWYgKEFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBCYXR0ZXJpZW5fdmVyd2VuZGVuID09IHRydWUpewpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wN18nK1tldGFnZV0rJ18nK1tCYXR0ZXJpZW5dKydhbnNhZ2UnLCB7J25hbWUnOiAnMDdfJytbZXRhZ2VdKydfJytbQmF0dGVyaWVuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0JhdHRlcmllbl0rJycrJ2Fuc2FnZScrJyAnK1tldGFnZV0sInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgCl07CmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsKCi8vQmF0dGVyaWVuIHphZWhsZW4gRGF0ZW5wdW5rdGUgYW5sZWdlbgppZiAoQmF0dGVyaWVuX3ZlcndlbmRlbiA9PSB0cnVlKXsKbGV0IHN0YXRlc1RvQ3JlYXRlID0gWwogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDFfQW56YWhsXycrW0JhdHRlcmllbl0rJ19nZXNhbXQnLCB7J25hbWUnOicwMV9BbnphaGxfJytbQmF0dGVyaWVuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0JhdHRlcmllbl0rJycsICdkZWYnOjAgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wMl9BbnphaGxfJytbQmF0dGVyaWVuXSsnX2FrdGl2JywgeyduYW1lJzonMDJfQW56YWhsXycrW0JhdHRlcmllbl0rJ19ha3RpdicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0JhdHRlcmllbl0rJycsICdkZWYnOjAgfV0sICAgIAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDNfYWt0aXZlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzAzX2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLAogICAgWydHZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uJytbQmF0dGVyaWVuXSsnX3phZWhsZW4uJytbZXRhZ2VdKycuMDRfZ2VzYW10ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCB7J25hbWUnOicwNF9nZXNhbXRlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy4wNV9odG1sXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6JzA1X2h0bWxfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLjA2X2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6JzA2X2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL1RlbGVncmFtIEJhdHRlcmllbiAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKEJhdHRlcmllbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLlRlbGVncmFtXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5UZWxlZ3JhbV8nK1tCYXR0ZXJpZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonVGVsZWdyYW1fJytbQmF0dGVyaWVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIlRlbGVncmFtICIrW0JhdHRlcmllbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIApdOwpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07CgovL0UtTWFpbCBCYXR0ZXJpZW4gTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4KaWYgKEJhdHRlcmllbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7CmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsKICAgIFsnR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLicrW0JhdHRlcmllbl0rJ196YWVobGVuLicrW2V0YWdlXSsnLkVNQUlMXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsIHsnbmFtZSc6J0VNQUlMXycrW0JhdHRlcmllbl0rJ18nK1tldGFnZV0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sCiAgICBbJ0dlcmFldGVfemFlaGxlbl9vcHRpb25hbF9BbnNhZ2VuLkdlcmFldGVfemFlaGxlbi4nK1tCYXR0ZXJpZW5dKydfemFlaGxlbi4nK1tldGFnZV0rJy5FTUFJTF8nK1tCYXR0ZXJpZW5dKydzdGF0dXNfJytbZXRhZ2VdKydfc2VuZGVuJywgeyduYW1lJzonRU1BSUxfJytbQmF0dGVyaWVuXSsnc3RhdHVzXycrW2V0YWdlXSsnX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNQUlMICIrW0JhdHRlcmllbl0rJycrJ3N0YXR1cycrJyAnK1tldGFnZV0rJyBzZW5kZW4nLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sICAKXTsKY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0FiIGhpZXIgRGF0ZW5wdW5rdGUgbMO2c2NoZW4KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5BbGV4YV9TdGltbWVuLionKTsgIAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5BbGV4YV9TdGltbWVuLionKTsgIAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi4qLiouKmFuc2FnZScpOyAgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLiouKi4qYW5zYWdlJyk7ICAKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiAoIVRlbGVncmFtX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi4qLlRlbGVncmFtXyonKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFUZWxlZ3JhbV92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7CmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouKi5UZWxlZ3JhbV8qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghRW1haWxfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLiouRU1BSUxfKicpOyAKaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkLnN1YnN0cmluZygxMykpOwp9KX07CgppZiAoIUVtYWlsX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi4qLkVNQUlMXyonKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFGZW5zdGVyX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5GZW5zdGVyX3phZWhsZW4uKicpOyAKaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkLnN1YnN0cmluZygxMykpOwp9KX07CgppZiAoIUZlbnN0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLkZlbnN0ZXJfemFlaGxlbi4qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghVHVlcmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsKY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5Uw7xyZW5femFlaGxlbi4qJyk7IAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghVHVlcmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5Uw7xyZW5femFlaGxlbi4qJyk7IAppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOwp9KX07CgovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCmlmICghU3RlY2tkb3Nlbl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7CmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouU3RlY2tkb3Nlbl96YWVobGVuLionKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFTdGVja2Rvc2VuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi5TdGVja2Rvc2VuX3phZWhsZW4uKicpOyAKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgppZiAoIUxpY2h0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkxpY2h0ZXJfemFlaGxlbi4qJyk7IAppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghTGljaHRlcl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7CmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouTGljaHRlcl96YWVobGVuLionKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkJld2VndW5nc21lbGRlcl96YWVobGVuLionKTsgCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsKfSl9OwoKaWYgKCFCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgewpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLkJld2VndW5nc21lbGRlcl96YWVobGVuLionKTsgCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsKICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7Cn0pfTsKCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKaWYgKCFCYXR0ZXJpZW5fdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgewpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi5HZXJhZXRlX3phZWhsZW5fb3B0aW9uYWxfQW5zYWdlbi5HZXJhZXRlX3phZWhsZW4uQmF0dGVyaWVuKicpOwppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7CiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7Cn0pfTsKCmlmICghQmF0dGVyaWVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsKY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuR2VyYWV0ZV96YWVobGVuX29wdGlvbmFsX0Fuc2FnZW4uR2VyYWV0ZV96YWVobGVuLkJhdHRlcmllbionKTsKaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgewogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsKfSl9OwoKLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovL0Z1bmt0aW9uIG1haW4gbWl0IFZlcnTDtmdlcnVuZyBhdWZydWZlbgp0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgbWFpbigpOwp9LCA1MDAwKTsKLy9tYWluKCk7Cgo=
Beschreibe diese Funktion β¦
Steckdosen_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
07_Ansage_Button_Steckdosen_eDP
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Steckdosen_Ansage
0
log
Logmeldung_Steckdosen_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
Telegram_BWM
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CZXdlZ3VuZ3NtZWxkZXIsCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7
Beschreibe diese Funktion β¦
EMail_Tueren
c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfVHVlcmVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs=
Beschreibe diese Funktion β¦
Batterien_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
07_Ansage_Button_Batterien_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Batterien_Ansage
0
log
Logmeldung_Batterie_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
Lichter_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
07_Ansage_Button_Lichter_eDP
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Lichter_Ansage
0
log
Logmeldung_Lichter_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
Telegram_Fenster
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9GZW5zdGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw==
Beschreibe diese Funktion β¦
echo_name
aWYoZXhpc3RzT2JqZWN0KGlkKSkgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7
Beschreibe diese Funktion β¦
Steckdosen_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
07_Ansage_Button_Steckdosen_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Steckdosen_Ansage
0
log
Logmeldung_Batterie_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
Bewegungsmelder_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
07_Ansage_Button_Bewegungsmelder_eDP
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Bewegungsmelder_Ansage
0
log
Logmeldung_Bewegungsmelder_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
Telegram_Tueren
c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9UdWVyZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7
Beschreibe diese Funktion β¦
Batterien_vor_versand_pruefen
Beschreibe diese Funktion β¦
uebnerschrift_nachrichten_Batterien
*
etage
Batterien
status
*
\n
EQ
anzahl_Batterien_aktiv
1
nachrichten_ausgabe_Batterien
uebnerschrift_nachrichten_Batterien
Es ist
eine
einzahl_Batterie
leer
emoji_βοΈ
\n
\n
TEXT
1
liste_Batterien_aktiv
\n
GT
anzahl_Batterien_aktiv
1
nachrichten_ausgabe_Batterien
uebnerschrift_nachrichten_Batterien
Es sind
anzahl_Batterien_aktiv
Batterien
leer
emoji_βοΈ
\n
\n
TEXT
1
liste_Batterien_aktiv
\n
EQ
anzahl_Batterien_aktiv
0
nachrichten_ausgabe_Batterien
uebnerschrift_nachrichten_Batterien
emoji_β
Aktuell gibt es keine leeren
Batterien
emoji_β
true
FALSE
Object ID
06_liste_Batterien_aktiv_emojis_eDP
TRUE
nachrichten_ausgabe_Batterien
0
Lichter_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
07_Ansage_Button_Lichter_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Lichter_Ansage
0
log
Logmeldung_Lichter_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
Fenster_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
09_Fenster_Ansage_Button_eDP
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Fenster_Ansage
0
log
Logmeldung_Fenster_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
stateText
Ly9pZihnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXMpIHJldHVybiBnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXNbdmFsXTsKLy9yZXR1cm4gaWQgKyAnIGhhdCBrZWluZW4gWnVzdGFuZHN0ZXh0JzsKaWYoZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzKSByZXR1cm4gKGdldE9iamVjdChpZCkuY29tbW9uLnN0YXRlc1t2YWxdKTsKZWxzZSAKcmV0dXJuIGdldFN0YXRlKGlkKS52YWw7
Beschreibe diese Funktion β¦
Steckdosen_vor_versand_pruefen
Beschreibe diese Funktion β¦
uebnerschrift_nachrichten_Steckdosen
*
etage
Steckdosen
status
*
\n
EQ
anzahl_Steckdosen_aktiv
1
nachrichten_ausgabe_Steckdosen
uebnerschrift_nachrichten_Steckdosen
Es ist
eine
einzahl_Steckdose
an
emoji_β‘οΈ
\n
\n
TEXT
1
liste_Steckdosen_aktiv
\n
GT
anzahl_Steckdosen_aktiv
1
nachrichten_ausgabe_Steckdosen
uebnerschrift_nachrichten_Steckdosen
Es sind
anzahl_Steckdosen_aktiv
Steckdosen
an
emoji_β‘οΈ
\n
\n
TEXT
1
liste_Steckdosen_aktiv
\n
EQ
anzahl_Steckdosen_aktiv
0
nachrichten_ausgabe_Steckdosen
uebnerschrift_nachrichten_Steckdosen
emoji_β
Alle
Steckdosen
sind ausgeschaltet
emoji_β
true
FALSE
Object ID
06_liste_Steckdosen_aktiv__emojis_eDP
TRUE
nachrichten_ausgabe_Steckdosen
0
Bewegungsmelder_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
07_Ansage_Button_Bewegungsmelder_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Bewegungsmelder_Ansage
0
log
Logmeldung_Bewegungsmelder_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
Tueren_alexa2_adapter_instanz_0
Beschreibe diese Funktion β¦
alexa_instanz_0
alexa2.0.History.serialNumber
any
default
alexa_instanz_0
angesprochener_echo_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0
AND
EQ
FIRST
FROM_START
alexa_instanz_0
8
alexa2.0
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
angesprochener_echo_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.ssml
speak_volume_instanz_0_neu
FIRST
FROM_START
alexa_instanz_0
8
.Echo-Devices.
val
alexa_instanz_0
.Commands.speak-volume
any
default
09_Tueren_Ansage_Button_eDP
log
Logmeldung_Tueren_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
AND
EQ
angesprochener_echo_instanz_0
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_0_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_0_neu
TRUE
Tueren_Ansage
0
log
Logmeldung_Tueren_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_0_neu
15
ausgefΓΌhrt β
Batterien_ansage_wiedergabe
Beschreibe diese Funktion β¦
Batterien_Datenpruefung
EQ
val
02_anzahl_Batterien_aktiv_eDP
0
Ansage_Einleitungssatz_Batterien
, alle
mehrzahl_Batterien
sind voll.
NEQ
val
02_anzahl_Batterien_aktiv_eDP
0
Ansage_Einleitungssatz_Batterien
val
03_liste_Batterien_aktiv_eDP
, alle anderen
mehrzahl_Batterien
sind voll.
Batterien_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Batterien_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Batterien_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Batterien_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Batterien_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Lichter_vor_versand_pruefen
Beschreibe diese Funktion β¦
uebnerschrift_nachrichten_Lichter
*
etage
Licht
status
*
\n
EQ
anzahl_Lichter_aktiv
1
nachrichten_ausgabe_Lichter
uebnerschrift_nachrichten_Lichter
Es ist
ein
einzahl_Licht
an
emoji_π‘
\n
\n
TEXT
1
liste_Lichter_aktiv
\n
GT
anzahl_Lichter_aktiv
1
nachrichten_ausgabe_Lichter
uebnerschrift_nachrichten_Lichter
Es sind
anzahl_Lichter_aktiv
Licht
an
emoji_π‘
\n
\n
TEXT
1
liste_Lichter_aktiv
\n
EQ
anzahl_Lichter_aktiv
0
nachrichten_ausgabe_Lichter
uebnerschrift_nachrichten_Lichter
emoji_β
Alle
Licht
sind ausgeschaltet
emoji_β
true
FALSE
Object ID
06_liste_Lichter_aktiv_emojis_eDP
TRUE
nachrichten_ausgabe_Lichter
0
Fenster_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
09_Fenster_Ansage_Button_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Fenster_Ansage
0
log
Logmeldung_Fenster_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
main
Beschreibe diese Funktion β¦
falls Alexa verwendet wird
Alexa_Ansage_verwenden
objekt_id_01alexa_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.01Alexa
objekt_id_02hans_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.02Hans
objekt_id_03vicki_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.03Vicki
objekt_id_04conchita_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.04Conchita
objekt_id_05alexa_ssml_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.05Alexa_ssml
objekt_id_06hans_ssml_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.06Hans_ssml
objekt_id_07vicki_ssml_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.07Vicki_ssml
objekt_id_08conchita_ssml_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.08Conchita_ssml
objekt_id_09ende_ssml_eDP
anlegen_in
.Geraete_zaehlen_optional_Ansagen.Alexa_Stimmen.09ssml_ende
true
default
objekt_id_01alexa_eDP
true
FALSE
Object ID
objekt_id_02hans_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_03vicki_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_04conchita_eDP
FALSE
0
true
default
objekt_id_02hans_eDP
true
FALSE
Object ID
objekt_id_01alexa_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_03vicki_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_04conchita_eDP
FALSE
0
true
default
objekt_id_03vicki_eDP
true
FALSE
Object ID
objekt_id_01alexa_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_02hans_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_04conchita_eDP
FALSE
0
true
default
objekt_id_04conchita_eDP
true
FALSE
Object ID
objekt_id_01alexa_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_02hans_eDP
FALSE
0
true
FALSE
Object ID
objekt_id_03vicki_eDP
FALSE
0
ne
default
objekt_id_01alexa_eDP
default
objekt_id_02hans_eDP
default
objekt_id_03vicki_eDP
default
objekt_id_04conchita_eDP
AND
AND
val
objekt_id_01alexa_eDP
val
objekt_id_02hans_eDP
AND
val
objekt_id_03vicki_eDP
val
objekt_id_04conchita_eDP
true
FALSE
Object ID
objekt_id_01alexa_eDP
TRUE
0
Batterien
Batterien_verwenden
01_anzahl_Batterien_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.01_Anzahl_
Batterien
_gesamt
02_anzahl_Batterien_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.02_Anzahl_
Batterien
_aktiv
03_liste_Batterien_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.03_aktive_
Batterien
_Liste
04_liste_Batterien_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.04_gesamte_
Batterien
_Liste
05_liste_Batterien_html_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.05_html_
Batterien
_Liste
06_liste_Batterien_aktiv_emojis_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.06_aktive_
Batterien
_Liste_mit_Emojis
ne
default
selektor_Batterien
blockly_start_batterien_zaehlen_einlesen
2
sec
formatierte_ausgabe_batterien_zum_start
4
sec
AND
Batterien_verwenden
Alexa_Ansage_verwenden
Logmeldung_Batterie_Ansage
β
Die
etage
Batterien
ansage wurde vom ECHO
Ansage_Einleitungssatz_Batterien
Hier der
etage
Batterien
status fΓΌr Dich.
07_Ansage_Button_Batterien_eDP
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.07_
etage
_
Batterien
ansage
Steckdosen
Steckdosen_verwenden
01_anzahl_Steckdosen_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.01_Anzahl_
Steckdosen
_gesamt
02_anzahl_Steckdosen_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.02_Anzahl_
Steckdosen
_aktiv
03_liste_Steckdosen_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.03_aktive_
Steckdosen
_Liste
04_liste_Steckdosen_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.04_gesamte_
Steckdosen
_Liste
05_liste_Steckdosen_html_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.05_html_
Steckdosen
_Liste
06_liste_Steckdosen_aktiv__emojis_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.06_aktive_
Steckdosen
_Liste_mit_Emojis
ne
default
selektor_Steckdosen
blockly_start_steckdosen_zaehlen_einlesen
2
sec
formatierte_ausgabe_steckdosen_zum_start
4
sec
AND
Steckdosen_verwenden
Alexa_Ansage_verwenden
Logmeldung_Steckdosen_Ansage
β
Die
etage
Steckdosen
ansage wurde vom ECHO
Ansage_Einleitungssatz_Steckdosen
Hier der
etage
Steckdosen
status fΓΌr Dich.
07_Ansage_Button_Steckdosen_eDP
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.07_
etage
_
Steckdosen
ansage
Licht
Lichter_verwenden
01_anzahl_Lichter_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.01_Anzahl_
Licht
_gesamt
02_anzahl_Lichter_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.02_Anzahl_
Licht
_aktiv
03_liste_Lichter_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.03_aktive_
Licht
_Liste
04_liste_Lichter_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.04_gesamte_
Licht
_Liste
05_liste_Lichter_html_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.05_html_
Licht
_Liste
06_liste_Lichter_aktiv_emojis_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.06_aktive_
Licht
_Liste_mit_Emojis
ne
default
selektor_Lichter
blockly_start_lichter_zaehlen_einlesen
2
sec
formatierte_ausgabe_lichter_zum_start
4
sec
AND
Lichter_verwenden
Alexa_Ansage_verwenden
Logmeldung_Lichter_Ansage
β
Die
etage
Licht
ansage wurde vom ECHO
Ansage_Einleitungssatz_Lichter
Hier der
etage
Licht
status fΓΌr Dich.
07_Ansage_Button_Lichter_eDP
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.07_
etage
_
Licht
ansage
Bewegungsmelder
Bewegungsmelder_verwenden
01_anzahl_Bewegungsmelder_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.01_Anzahl_
Bewegungsmelder
_gesamt
02_anzahl_Bewegungsmelder_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.02_Anzahl_
Bewegungsmelder
_aktiv
03_liste_Bewegungsmelder_aktiv_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.03_aktive_
Bewegungsmelder
_Liste
04_liste_Bewegungsmelder_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.04_gesamte_
Bewegungsmelder
_Liste
05_liste_Bewegungsmelder_html_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.05_html_
Bewegungsmelder
_Liste
06_liste_Bewegungsmelder_aktiv_emojis_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.06_aktive_
Bewegungsmelder
_Liste_mit_Emojis
ne
default
selektor_Bewegungsmelder
blockly_start_bwm_zaehlen_einlesen
2
sec
formatierte_ausgabe_bwm_zum_start
4
sec
AND
Bewegungsmelder_verwenden
Alexa_Ansage_verwenden
Logmeldung_Bewegungsmelder_Ansage
β
Die
etage
Bewegungsmelder
ansage wurde vom ECHO
Ansage_Einleitungssatz_Bewegungsmelder
Hier der
etage
Bewegungsmelder
status fΓΌr Dich.
07_Ansage_Button_Bewegungsmelder_eDP
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.07_
etage
_
Bewegungsmelder
ansage
Fenster
Fenster_verwenden
01_anzahl_Fenster_gekippt_eDP
anlegen_in
pfad_geraete_zaehlen
Fenster
etage
.01_Anzahl_
Fenster
_gekippt
02_anzahl_Fenster_offen_eDP
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.02_Anzahl_
Fenster
_offen
03_anzahl_Fenster_geschlossen_eDP
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.03_Anzahl_
Fenster
_geschlossen
04_anzahl_Fenster_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.04_Anzahl_
Fenster
_gesamt
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.04_1_Anzahl_
Fenster
_geoeffnet_und_gekippt_gesamt
05_offene_gekippte_Fenster_Liste
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.05_offene_gekippte_
Fenster
_Liste
06_gesamte_Fenster_Liste
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.06_gesamte_
Fenster
_Liste
07_html_Fenster_Liste
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.07_html_
Fenster
_Liste
08_offene_gekippte_Fenster_Liste_mit_Emojis
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.08_offene_gekippte_
Fenster
_Liste_mit_Emojis
ne
default
selektor_Fenster
blockly_start_fenster_zaehlen_einlesen
2
sec
formatierte_ausgabe_fenster_zum_start
4
sec
AND
Fenster_verwenden
Alexa_Ansage_verwenden
Logmeldung_Fenster_Ansage
β
Die
etage
Fenster
ansage wurde vom ECHO
Ansage_Einleitungssatz_Fenster
Hier der
etage
Fenster
status fΓΌr Dich.
09_Fenster_Ansage_Button_eDP
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.09_
etage
_
Fenster
ansage
Tueren
Tueren_verwenden
01_anzahl_Tueren_gekippt_eDP
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.01_Anzahl_
Tueren
_gekippt
02_anzahl_Tueren_offen_eDP
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.02_Anzahl_
Tueren
_offen
03_anzahl_Tueren_geschlossen_eDP
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.03_Anzahl_
Tueren
_geschlossen
04_anzahl_Tueren_gesamt_eDP
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.04_Anzahl_
Tueren
_gesamt
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.04_1_Anzahl_
Tueren
_geoeffnet_und_gekippt_gesamt
05_offene_gekippte_Tueren_Liste
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.05_offene_gekippte_
Tueren
_Liste
06_gesamte_Tueren_Liste
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.06_gesamte_
Tueren
_Liste
07_html_Tueren_Liste
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.07_html_
Tueren
_Liste
08_offene_gekippte_Tueren_Liste_mit_Emojis
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.08_offene_gekippte_
Tueren
_Liste_mit_Emojis
ne
default
selektor_Tueren
blockly_start_tueren_zaehlen_einlesen
2
sec
formatierte_ausgabe_tueren_zum_start
4
sec
AND
Tueren_verwenden
Alexa_Ansage_verwenden
Logmeldung_Tueren_Ansage
β
Die
etage
Tueren
ansage wurde vom ECHO
Ansage_Einleitungssatz_Tueren
Hier der
etage
Tueren
status fΓΌr Dich.
09_Tueren_Ansage_Button_eDP
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.09_
etage
_
Tueren
ansage
Telegram
AND
Batterien_verwenden
Telegram_verwenden
telegram_versand_an_aus_Batterien
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.Telegram_
Batterien
_
etage
_Versand_an_aus
telegram_direkt_versenden_Batterien
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.Telegram_
Batterien
status_
etage
_senden
ne
default
02_anzahl_Batterien_aktiv_eDP
val
telegram_versand_an_aus_Batterien
telegram
telegram
1
sec
nachrichten_ausgabe_Batterien
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Batterien
nachrichten_ausgabe_Batterien
Telegram_Empfaenger
AND
Steckdosen_verwenden
Telegram_verwenden
telegram_versand_an_aus_Steckdosen
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.Telegram_
Steckdosen
_
etage
_Versand_an_aus
telegram_direkt_versenden_Steckdosen
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.Telegram_
Steckdosen
status_
etage
_senden
ne
default
02_anzahl_Steckdosen_aktiv_eDP
val
telegram_versand_an_aus_Steckdosen
telegram2
telegram2
1
sec
nachrichten_ausgabe_Steckdosen
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Steckdosen
nachrichten_ausgabe_Steckdosen
Telegram_Empfaenger
AND
Lichter_verwenden
Telegram_verwenden
telegram_versand_an_aus_Lichter
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.Telegram_
Licht
_
etage
_Versand_an_aus
telegram_direkt_versenden_Lichter
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.Telegram_
Licht
status_
etage
_senden
ne
default
02_anzahl_Lichter_aktiv_eDP
val
telegram_versand_an_aus_Lichter
telegram3
telegram3
1
sec
nachrichten_ausgabe_Lichter
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Lichter
nachrichten_ausgabe_Lichter
Telegram_Empfaenger
AND
Bewegungsmelder_verwenden
Telegram_verwenden
telegram_versand_an_aus_Bewegungsmelder
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.Telegram_
Bewegungsmelder
_
etage
_Versand_an_aus
telegram_direkt_versenden_Bewegungsmelder
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.Telegram_
Bewegungsmelder
status_
etage
_senden
ne
default
02_anzahl_Bewegungsmelder_aktiv_eDP
val
telegram_versand_an_aus_Bewegungsmelder
telegram4
telegram4
1
sec
nachrichten_ausgabe_Bewegungsmelder
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Bewegungsmelder
nachrichten_ausgabe_Bewegungsmelder
Telegram_Empfaenger
AND
Fenster_verwenden
Telegram_verwenden
telegram_versand_an_aus_Fenster
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.Telegram_
Fenster
_
etage
_Versand_an_aus
telegram_direkt_versenden_Fenster
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.Telegram_
Fenster
status_
etage
_senden
ne
default
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
val
telegram_versand_an_aus_Fenster
telegram5
telegram5
1
sec
nachrichten_ausgabe_Fenster
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Fenster
nachrichten_ausgabe_Fenster
Telegram_Empfaenger
AND
Tueren_verwenden
Telegram_verwenden
telegram_versand_an_aus_Tueren
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.Telegram_
Tueren
_
etage
_Versand_an_aus
telegram_direkt_versenden_Tueren
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.Telegram_
Tueren
status_
etage
_senden
ne
default
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
val
telegram_versand_an_aus_Tueren
telegram6
telegram6
1
sec
nachrichten_ausgabe_Tueren
Telegram_Empfaenger
any
default
telegram_direkt_versenden_Tueren
nachrichten_ausgabe_Tueren
Telegram_Empfaenger
EMail
AND
Batterien_verwenden
Email_verwenden
email_versand_an_aus_batterien
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
Batterien
_
etage
_Versand_an_aus
email_direkt_versenden_Batterien
anlegen_in
pfad_geraete_zaehlen
Batterien
_zaehlen.
etage
.EMAIL_
Batterien
status_
etage
_senden
ne
default
02_anzahl_Batterien_aktiv_eDP
EQ
val
email_versand_an_aus_batterien
TRUE
Betreff
etage
Batterien
Status
email
email
1
sec
nachrichten_ausgabe_Batterien
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Batterien
Betreff
etage
Batterien
Status
nachrichten_ausgabe_Batterien
EMail_Empfaenger
Betreff
AND
Steckdosen_verwenden
Email_verwenden
email_versand_an_aus_Steckdosen
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.EMAIL_
Steckdosen
_
etage
_Versand_an_aus
email_direkt_versenden_Steckdosen
anlegen_in
pfad_geraete_zaehlen
Steckdosen
_zaehlen.
etage
.EMAIL_
Steckdosen
status_
etage
_senden
ne
default
02_anzahl_Steckdosen_aktiv_eDP
EQ
val
email_versand_an_aus_Steckdosen
TRUE
Betreff
etage
Steckdosen
Status
email2
email2
1
sec
nachrichten_ausgabe_Steckdosen
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Steckdosen
Betreff
etage
Steckdosen
Status
nachrichten_ausgabe_Steckdosen
EMail_Empfaenger
Betreff
AND
Lichter_verwenden
Email_verwenden
email_versand_an_aus_Lichter
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.EMAIL_
Licht
_
etage
_Versand_an_aus
email_direkt_versenden_Lichter
anlegen_in
pfad_geraete_zaehlen
Licht
_zaehlen.
etage
.EMAIL_
Licht
status_
etage
_senden
ne
default
02_anzahl_Lichter_aktiv_eDP
EQ
val
email_versand_an_aus_Lichter
TRUE
Betreff
etage
Licht
Status
email3
email3
1
sec
nachrichten_ausgabe_Lichter
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Lichter
Betreff
etage
Licht
Status
nachrichten_ausgabe_Lichter
EMail_Empfaenger
Betreff
AND
Bewegungsmelder_verwenden
Email_verwenden
email_versand_an_aus_Bewegungsmelder
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.EMAIL_
Bewegungsmelder
_
etage
_Versand_an_aus
email_direkt_versenden_Bewegungsmelder
anlegen_in
pfad_geraete_zaehlen
Bewegungsmelder
_zaehlen.
etage
.EMAIL_
Bewegungsmelder
status_
etage
_senden
ne
default
02_anzahl_Bewegungsmelder_aktiv_eDP
EQ
val
email_versand_an_aus_Bewegungsmelder
TRUE
Betreff
etage
Bewegungsmelder
Status
email4
email4
1
sec
nachrichten_ausgabe_Bewegungsmelder
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Bewegungsmelder
Betreff
etage
Bewegungsmelder
Status
nachrichten_ausgabe_Bewegungsmelder
EMail_Empfaenger
Betreff
AND
Fenster_verwenden
Email_verwenden
email_versand_an_aus_Fenster
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.EMAIL_
Fenster
_
etage
_Versand_an_aus
email_direkt_versenden_Fenster
anlegen_in
pfad_geraete_zaehlen
Fenster
_zaehlen.
etage
.EMAIL_
Fenster
status_
etage
_senden
ne
default
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
EQ
val
email_versand_an_aus_Fenster
TRUE
Betreff
etage
Fenster
Status
email5
email5
1
sec
nachrichten_ausgabe_Fenster
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Fenster
Betreff
etage
Fenster
Status
nachrichten_ausgabe_Fenster
EMail_Empfaenger
Betreff
AND
Tueren_verwenden
Email_verwenden
email_versand_an_aus_Tueren
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.EMAIL_
Tueren
_
etage
_Versand_an_aus
email_direkt_versenden_Tueren
anlegen_in
pfad_geraete_zaehlen
Tueren
_zaehlen.
etage
.EMAIL_
Tueren
status_
etage
_senden
ne
default
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
EQ
val
email_versand_an_aus_Tueren
TRUE
Betreff
etage
Tueren
Status
email6
email6
1
sec
nachrichten_ausgabe_Tueren
EMail_Empfaenger
Betreff
any
default
email_direkt_versenden_Tueren
Betreff
etage
Tueren
Status
nachrichten_ausgabe_Tueren
EMail_Empfaenger
Betreff
Steckdosen_ansage_wiedergabe
Beschreibe diese Funktion β¦
Steckdosen_Datenpruefung
EQ
val
02_anzahl_Steckdosen_aktiv_eDP
0
Ansage_Einleitungssatz_Steckdosen
, alle
Steckdosen
sind ausgeschaltet.
NEQ
val
02_anzahl_Steckdosen_aktiv_eDP
0
Ansage_Einleitungssatz_Steckdosen
val
03_liste_Steckdosen_aktiv_eDP
, alle anderen
Steckdosen
sind ausgeschaltet.
Steckdosen_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Steckdosen_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Steckdosen_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Steckdosen_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Steckdosen_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Bewegungsmelder_vor_versand_pruefen
Beschreibe diese Funktion β¦
uebnerschrift_nachrichten_Bewegungsmelder
*
etage
Bewegungsmelder
status
*
\n
EQ
anzahl_Bewegungsmelder_aktiv
1
nachrichten_ausgabe_Bewegungsmelder
uebnerschrift_nachrichten_Bewegungsmelder
Es ist
ein
einzahl_Bewegungsmelder
aktiv
emoji_π
\n
\n
TEXT
1
liste_Bewegungsmelder_aktiv
\n
GT
anzahl_Bewegungsmelder_aktiv
1
nachrichten_ausgabe_Bewegungsmelder
uebnerschrift_nachrichten_Bewegungsmelder
Es sind
anzahl_Bewegungsmelder_aktiv
Bewegungsmelder
an
emoji_π
\n
\n
TEXT
1
liste_Bewegungsmelder_aktiv
\n
EQ
anzahl_Bewegungsmelder_aktiv
0
nachrichten_ausgabe_Bewegungsmelder
uebnerschrift_nachrichten_Bewegungsmelder
emoji_β
Alle
Bewegungsmelder
sind inaktiv
emoji_β
true
FALSE
Object ID
06_liste_Bewegungsmelder_aktiv_emojis_eDP
TRUE
nachrichten_ausgabe_Bewegungsmelder
0
Tueren_alexa2_adapter_instanz_1
Beschreibe diese Funktion β¦
alexa_instanz_1
alexa2.1.History.serialNumber
any
default
alexa_instanz_1
angesprochener_echo_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1
AND
EQ
FIRST
FROM_START
alexa_instanz_1
8
alexa2.1
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
angesprochener_echo_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.ssml
speak_volume_instanz_1_neu
FIRST
FROM_START
alexa_instanz_1
8
.Echo-Devices.
val
alexa_instanz_1
.Commands.speak-volume
any
default
09_Tueren_Ansage_Button_eDP
AND
EQ
angesprochener_echo_instanz_1
TRUE
EQ
state.from
system.adapter.iot.0
false
FALSE
Object ID
speak_volume_instanz_1_neu
TRUE
Ansagelautstaerke
0
false
FALSE
Object ID
angesprochener_echo_instanz_1_neu
TRUE
Tueren_Ansage
0
log
Logmeldung_Tueren_Ansage
FIRST
FROM_END
angesprochener_echo_instanz_1_neu
15
ausgefΓΌhrt β
Batterien_zaehlen
Beschreibe diese Funktion β¦
anzahl_Batterien_aktiv
0
anzahl_Batterien_inaktiv
0
anzahl_Batterien_gesamt
0
liste_Batterien_aktiv
liste_Batterien_inaktiv
liste_Batterien_aktiv_gesamt
liste_Batterien_aktiv_html
liste_Batterien_inaktiv_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Batterien
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Batterien
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Batterien
etage
   </td><td>Status</td></tr>
<tr><td>
Batterien_aktiv
selektor_Batterien
anzahl_Batterien_gesamt
1
OR
val
Batterien_aktiv
GT
val
Batterien_aktiv
0
anzahl_Batterien_aktiv
1
INSERT
LAST
liste_Batterien_aktiv
Batterien_aktiv
Batterien
leer
INSERT
LAST
liste_Batterien_aktiv_html
Batterien_aktiv
Batterien
<td><span style="color:#FF0000">
emoji_βοΈ
</span>
Batterien_inaktiv
selektor_Batterien
OR
val
Batterien_inaktiv
EQ
val
Batterien_inaktiv
0
anzahl_Batterien_inaktiv
1
INSERT
LAST
liste_Batterien_inaktiv
Batterien_inaktiv
Batterien
voll
INSERT
LAST
liste_Batterien_inaktiv_html
Batterien_inaktiv
Batterien
<td>
voll
emoji_β
true
FALSE
Object ID
01_anzahl_Batterien_gesamt_eDP
TRUE
anzahl_Batterien_gesamt
0
true
FALSE
Object ID
02_anzahl_Batterien_aktiv_eDP
TRUE
anzahl_Batterien_aktiv
0
EQ
anzahl_Batterien_aktiv
0
true
FALSE
Object ID
03_liste_Batterien_aktiv_eDP
TRUE
Batterien_verwenden
Aktuell
gibt es keine leeren
mehrzahl_Batterien
0
true
FALSE
Object ID
03_liste_Batterien_aktiv_eDP
TRUE
TEXT
1
liste_Batterien_aktiv
,
0
EQ
anzahl_Batterien_aktiv
0
true
FALSE
Object ID
04_liste_Batterien_gesamt_eDP
TRUE
TEXT
1
liste_Batterien_inaktiv
,
0
NEQ
anzahl_Batterien_aktiv
0
true
FALSE
Object ID
04_liste_Batterien_gesamt_eDP
TRUE
TEXT
1
liste_Batterien_aktiv
,
,
TEXT
1
liste_Batterien_inaktiv
,
0
EQ
anzahl_Batterien_aktiv
anzahl_Batterien_gesamt
true
FALSE
Object ID
04_liste_Batterien_gesamt_eDP
TRUE
TEXT
1
liste_Batterien_aktiv
,
0
EQ
anzahl_Batterien_aktiv
0
true
FALSE
Object ID
05_liste_Batterien_html_eDP
TRUE
htmlText
TEXT
1
liste_Batterien_inaktiv_html
<tr><td>
</table></body>
0
NEQ
anzahl_Batterien_aktiv
0
true
FALSE
Object ID
05_liste_Batterien_html_eDP
TRUE
htmlText
TEXT
1
liste_Batterien_aktiv_html
<tr><td>
<tr><td>
TEXT
1
liste_Batterien_inaktiv_html
<tr><td>
</table></body>
0
EQ
anzahl_Batterien_aktiv
anzahl_Batterien_gesamt
true
FALSE
Object ID
05_liste_Batterien_html_eDP
TRUE
htmlText
TEXT
1
liste_Batterien_aktiv_html
<tr><td>
</table></body>
0
Version 0.1
erstellt von @dslraser im Juni 2020
Forum Link:
https://forum.iobroker.net/post/273896
Fenster
Fenster
Tueren
TΓΌren
Steckdosen
Steckdosen
Licht
Lichter
Bewegungsmelder
Bewegungsmelder
Batterien
Batterien
pfad_geraete_zaehlen
.Geraete_zaehlen_optional_Ansagen.Geraete_zaehlen.
Bei Nutzung der Instanzen javascript.x
muss das Blockly in der gleichen Instanz laufen
wo die Datenpunkte angelegt werden
anlegen_in
0_userdata.0
etage
Haus
auf wahr stellen was benutzt werden soll
und auch vorhanden ist.
Alexa_Ansage_verwenden
FALSE
Telegram_verwenden
FALSE
Email_verwenden
FALSE
Steckdosen_verwenden
FALSE
Batterien_verwenden
FALSE
Lichter_verwenden
FALSE
Bewegungsmelder_verwenden
FALSE
Fenster_verwenden
FALSE
Tueren_verwenden
FALSE
Ansagelautstaerke Alexa bis 100 auswaehlen
Ansagelautstaerke
60
Telegram Empfaenger eintragen
Telegram_Empfaenger
Heiko
E-Mail Empfaenger eintragen
leere Felder fΓΌr weitere Benutzer mit Semikolon trennen
EMail_Empfaenger
max.muster@gmx.de
Selektoren an die eigene Aufzaehlung anpassen
selektor_Fenster
(functions='Fenster')
selektor_Tueren
(functions='Tueren')
selektor_Steckdosen
(functions='Steckdosen')
selektor_Lichter
(functions='Licht')
selektor_Bewegungsmelder
(functions='Bewegungsmelder')
selektor_Batterien
(functions='Batterien')
emoji_β
β
emoji_β
β
emoji_βοΈ
βοΈ
emoji_π
π
emoji_βοΈ
βοΈ
emoji_π
π
emoji_π‘
π‘
emoji_β‘οΈ
β‘οΈ
emoji_π
π
emoji_π
π
emoji_π§―
π§―
emoji_π
π
ein
ein
eine
eine
einzahl_Fenster
Fenster
mehrzahl_Fenster
Fenster
einzahl_Tuer
TΓΌr
mehrzahl_Tueren
TΓΌren
einzahl_Steckdose
Steckdose
mehrzahl_Steckdosen
Steckdosen
einzahl_Licht
Licht
mehrzahl_Licht
Lichter
einzahl_Bewegungsmelder
Bewegungsmelder
mehrzahl_Bewegungsmelder
Bewegungsmelder
einzahl_Batterie
Batterie
mehrzahl_Batterien
Batterien
Steckdosen_zaehlen
Beschreibe diese Funktion β¦
anzahl_Steckdosen_aktiv
0
anzahl_Steckdosen_inaktiv
0
anzahl_Steckdosen_gesamt
0
liste_Steckdosen_aktiv
liste_Steckdosen_inaktiv
liste_Steckdosen_aktiv_gesamt
liste_Steckdosen_aktiv_html
liste_Steckdosen_inaktiv_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Steckdosen
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Steckdosen
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Steckdosen
etage
   </td><td>Status</td></tr>
<tr><td>
Steckdosen_aktiv
selektor_Steckdosen
anzahl_Steckdosen_gesamt
1
OR
val
Steckdosen_aktiv
GT
val
Steckdosen_aktiv
0
anzahl_Steckdosen_aktiv
1
INSERT
LAST
liste_Steckdosen_aktiv
Steckdosen_aktiv
Steckdosen
an
INSERT
LAST
liste_Steckdosen_aktiv_html
Steckdosen_aktiv
Steckdosen
<td><span style="color:#FF0000">
emoji_β‘οΈ
an
</span>
Steckdosen_inaktiv
selektor_Steckdosen
OR
val
Steckdosen_inaktiv
EQ
val
Steckdosen_inaktiv
0
anzahl_Steckdosen_inaktiv
1
INSERT
LAST
liste_Steckdosen_inaktiv
Steckdosen_inaktiv
Steckdosen
aus
INSERT
LAST
liste_Steckdosen_inaktiv_html
Steckdosen_inaktiv
Steckdosen
<td>
aus
emoji_π
true
FALSE
Object ID
01_anzahl_Steckdosen_gesamt_eDP
TRUE
anzahl_Steckdosen_gesamt
0
true
FALSE
Object ID
02_anzahl_Steckdosen_aktiv_eDP
TRUE
anzahl_Steckdosen_aktiv
0
EQ
anzahl_Steckdosen_aktiv
0
true
FALSE
Object ID
03_liste_Steckdosen_aktiv_eDP
TRUE
Steckdosen_verwenden
Aktuell sind alle
Steckdosen
ausgeschaltet
0
true
FALSE
Object ID
03_liste_Steckdosen_aktiv_eDP
TRUE
TEXT
1
liste_Steckdosen_aktiv
,
0
EQ
anzahl_Steckdosen_aktiv
0
true
FALSE
Object ID
04_liste_Steckdosen_gesamt_eDP
TRUE
TEXT
1
liste_Steckdosen_inaktiv
,
0
NEQ
anzahl_Steckdosen_aktiv
0
true
FALSE
Object ID
04_liste_Steckdosen_gesamt_eDP
TRUE
TEXT
1
liste_Steckdosen_aktiv
,
,
TEXT
1
liste_Steckdosen_inaktiv
,
0
EQ
anzahl_Steckdosen_aktiv
anzahl_Steckdosen_gesamt
true
FALSE
Object ID
04_liste_Steckdosen_gesamt_eDP
TRUE
TEXT
1
liste_Steckdosen_aktiv
,
0
EQ
anzahl_Steckdosen_aktiv
0
true
FALSE
Object ID
05_liste_Steckdosen_html_eDP
TRUE
htmlText
TEXT
1
liste_Steckdosen_inaktiv_html
<tr><td>
</table></body>
0
NEQ
anzahl_Steckdosen_aktiv
0
true
FALSE
Object ID
05_liste_Steckdosen_html_eDP
TRUE
htmlText
TEXT
1
liste_Steckdosen_aktiv_html
<tr><td>
<tr><td>
TEXT
1
liste_Steckdosen_inaktiv_html
<tr><td>
</table></body>
0
EQ
anzahl_Steckdosen_aktiv
anzahl_Steckdosen_gesamt
true
FALSE
Object ID
05_liste_Steckdosen_html_eDP
TRUE
htmlText
TEXT
1
liste_Steckdosen_aktiv_html
<tr><td>
</table></body>
0
Bewegungsmelder_ansage_wiedergabe
Beschreibe diese Funktion β¦
Bewegungsmelder_Datenpruefung
EQ
val
02_anzahl_Bewegungsmelder_aktiv_eDP
0
Ansage_Einleitungssatz_Bewegungsmelder
, alle
Bewegungsmelder
sind inaktiv.
NEQ
val
02_anzahl_Bewegungsmelder_aktiv_eDP
0
Ansage_Einleitungssatz_Bewegungsmelder
val
03_liste_Bewegungsmelder_aktiv_eDP
, alle anderen
Bewegungsmelder
sind inaktiv.
Bewegungsmelder_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Bewegungsmelder_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Bewegungsmelder_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Bewegungsmelder_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Bewegungsmelder_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Tueren_vor_versand_pruefen
Beschreibe diese Funktion β¦
gekippt
gekippt
emoji_π
geoffnet
geΓΆffnet
emoji_βοΈ
uebnerschrift_nachrichten_Tueren
*
etage
Tueren
status
*
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
1
EQ
val
01_anzahl_Tueren_gekippt_eDP
0
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es ist
eine
einzahl_Tuer
geoffnet
\n
\n
TEXT
1
liste_tueren_offen
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
0
EQ
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es ist
eine
einzahl_Tuer
gekippt
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
1
EQ
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es ist
eine
einzahl_Tuer
geoffnet
\n
Es ist
eine
einzahl_Tuer
gekippt
\n
\n
TEXT
1
liste_tueren_offen
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
0
GT
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es sind
val
01_anzahl_Tueren_gekippt_eDP
Tueren
gekippt
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
GT
val
02_anzahl_Tueren_offen_eDP
1
EQ
val
01_anzahl_Tueren_gekippt_eDP
0
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es sind
val
02_anzahl_Tueren_offen_eDP
Tueren
geoffnet
\n
\n
TEXT
1
liste_tueren_offen
\n
AND
GT
val
02_anzahl_Tueren_offen_eDP
1
EQ
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es sind
val
02_anzahl_Tueren_offen_eDP
Tueren
geoffnet
\n
Es ist
eine
einzahl_Tuer
gekippt
\n
\n
TEXT
1
liste_tueren_offen
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
1
GT
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es ist
eine
einzahl_Tuer
geoffnet
\n
Es sind
val
01_anzahl_Tueren_gekippt_eDP
Tueren
gekippt
\n
\n
TEXT
1
liste_tueren_offen
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
GT
val
02_anzahl_Tueren_offen_eDP
1
GT
val
01_anzahl_Tueren_gekippt_eDP
1
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
Es sind
val
02_anzahl_Tueren_offen_eDP
Tueren
geoffnet
\n
Es sind
val
01_anzahl_Tueren_gekippt_eDP
Tueren
gekippt
\n
\n
TEXT
1
liste_tueren_offen
\n
\n
TEXT
1
liste_tueren_gekippt
\n
AND
EQ
val
02_anzahl_Tueren_offen_eDP
0
EQ
val
01_anzahl_Tueren_gekippt_eDP
0
nachrichten_ausgabe_Tueren
uebnerschrift_nachrichten_Tueren
β
Alle
Tueren
sind geschlossen β
true
FALSE
Object ID
08_offene_gekippte_Tueren_Liste_mit_Emojis
TRUE
nachrichten_ausgabe_Tueren
0
Lichter_ansage_wiedergabe
Beschreibe diese Funktion β¦
Lichter_Datenpruefung
EQ
val
02_anzahl_Lichter_aktiv_eDP
0
Ansage_Einleitungssatz_Lichter
, alle
Licht
sind ausgeschaltet.
NEQ
val
02_anzahl_Lichter_aktiv_eDP
0
Ansage_Einleitungssatz_Lichter
val
03_liste_Lichter_aktiv_eDP
, alle anderen
Licht
sind ausgeschaltet.
Lichter_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Lichter_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Lichter_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Lichter_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Lichter_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Fenster_ansage_wiedergabe
Beschreibe diese Funktion β¦
Fenster_Datenpruefung
EQ
val
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
0
Ansage_Einleitungssatz_Fenster
, alle
Fenster
sind geschlossen.
NEQ
val
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
0
Ansage_Einleitungssatz_Fenster
val
05_offene_gekippte_Fenster_Liste
, alle anderen
Fenster
sind geschlossen.
Fenster_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Fenster_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Fenster_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Fenster_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Fenster_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Bewegungsmelder_zaehlen
Beschreibe diese Funktion β¦
anzahl_Bewegungsmelder_aktiv
0
anzahl_Bewegungsmelder_inaktiv
0
anzahl_Bewegungsmelder_gesamt
0
liste_Bewegungsmelder_aktiv
liste_Bewegungsmelder_inaktiv
liste_Bewegungsmelder_aktiv_gesamt
liste_Bewegungsmelder_aktiv_html
liste_Bewegungsmelder_inaktiv_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Bewegungsmelder
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Bewegungsmelder
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Bewegungsmelder
etage
   </td><td>Status</td></tr>
<tr><td>
Bewegungsmelder_aktiv
selektor_Bewegungsmelder
anzahl_Bewegungsmelder_gesamt
1
OR
val
Bewegungsmelder_aktiv
GT
val
Bewegungsmelder_aktiv
0
anzahl_Bewegungsmelder_aktiv
1
INSERT
LAST
liste_Bewegungsmelder_aktiv
Bewegungsmelder_aktiv
Bewegungsmelder
aktiv
INSERT
LAST
liste_Bewegungsmelder_aktiv_html
Bewegungsmelder_aktiv
Bewegungsmelder
<td><span style="color:#FF0000">
emoji_π
aktiv
</span>
Bewegungsmelder_inaktiv
selektor_Bewegungsmelder
OR
val
Bewegungsmelder_aktiv
EQ
val
Bewegungsmelder_aktiv
0
anzahl_Bewegungsmelder_inaktiv
1
INSERT
LAST
liste_Bewegungsmelder_inaktiv
Bewegungsmelder_inaktiv
Bewegungsmelder
inaktiv
INSERT
LAST
liste_Bewegungsmelder_inaktiv_html
Bewegungsmelder_inaktiv
Bewegungsmelder
<td>
inaktiv
emoji_π
true
FALSE
Object ID
01_anzahl_Bewegungsmelder_gesamt_eDP
TRUE
anzahl_Bewegungsmelder_gesamt
0
true
FALSE
Object ID
02_anzahl_Bewegungsmelder_aktiv_eDP
TRUE
anzahl_Bewegungsmelder_aktiv
0
EQ
anzahl_Bewegungsmelder_aktiv
0
true
FALSE
Object ID
03_liste_Bewegungsmelder_aktiv_eDP
TRUE
Bewegungsmelder
Aktuell sind alle
Bewegungsmelder
inaktiv
0
true
FALSE
Object ID
03_liste_Bewegungsmelder_aktiv_eDP
TRUE
TEXT
1
liste_Bewegungsmelder_aktiv
,
0
EQ
anzahl_Bewegungsmelder_aktiv
0
true
FALSE
Object ID
04_liste_Bewegungsmelder_gesamt_eDP
TRUE
TEXT
1
liste_Bewegungsmelder_inaktiv
,
0
NEQ
anzahl_Bewegungsmelder_aktiv
0
true
FALSE
Object ID
04_liste_Bewegungsmelder_gesamt_eDP
TRUE
TEXT
1
liste_Bewegungsmelder_aktiv
,
,
TEXT
1
liste_Bewegungsmelder_inaktiv
,
0
EQ
anzahl_Bewegungsmelder_aktiv
anzahl_Bewegungsmelder_gesamt
true
FALSE
Object ID
04_liste_Bewegungsmelder_gesamt_eDP
TRUE
TEXT
1
liste_Bewegungsmelder_aktiv
,
0
EQ
anzahl_Bewegungsmelder_aktiv
0
true
FALSE
Object ID
05_liste_Bewegungsmelder_html_eDP
TRUE
htmlText
TEXT
1
liste_Bewegungsmelder_inaktiv_html
<tr><td>
</table></body>
0
NEQ
anzahl_Bewegungsmelder_aktiv
0
true
FALSE
Object ID
05_liste_Bewegungsmelder_html_eDP
TRUE
htmlText
TEXT
1
liste_Bewegungsmelder_aktiv_html
<tr><td>
<tr><td>
TEXT
1
liste_Bewegungsmelder_inaktiv_html
<tr><td>
</table></body>
0
EQ
anzahl_Bewegungsmelder_aktiv
anzahl_Bewegungsmelder_gesamt
true
FALSE
Object ID
05_liste_Bewegungsmelder_html_eDP
TRUE
htmlText
TEXT
1
liste_Bewegungsmelder_aktiv_html
<tr><td>
</table></body>
0
Tueren_ansage_wiedergabe
Beschreibe diese Funktion β¦
Tueren_Datenpruefung
EQ
val
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
0
Ansage_Einleitungssatz_Fenster
, alle
Tueren
sind geschlossen.
NEQ
val
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
0
Ansage_Einleitungssatz_Tueren
val
05_offene_gekippte_Tueren_Liste
, alle anderen
Tueren
sind geschlossen.
Tueren_Ansage
val
objekt_id_01alexa_eDP
val
objekt_id_05alexa_ssml_eDP
Tueren_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_02hans_eDP
val
objekt_id_06hans_ssml_eDP
Tueren_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_03vicki_eDP
val
objekt_id_07vicki_ssml_eDP
Tueren_Datenpruefung
val
objekt_id_09ende_ssml_eDP
val
objekt_id_04conchita_eDP
val
objekt_id_08conchita_ssml_eDP
Tueren_Datenpruefung
val
objekt_id_09ende_ssml_eDP
Fenster_zaehlen
Beschreibe diese Funktion β¦
anzahl_fenster_gekippt
0
anzahl_fenster_offen
0
anzahl_fenster_geschlossen
0
anzahl_fenster_gesamt
0
liste_fenster_offen
liste_fenster_gekippt
liste_fenster_geschlossen
liste_fenster_offen_gesamt
liste_fenster_offen_html
liste_fenster_gekippt_html
liste_fenster_geschlossen_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Fenster
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Fenster
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Fenster
etage
   </td><td>Status</td></tr>
<tr><td>
fenster_offen
selektor_Fenster
anzahl_fenster_gesamt
1
wert
val
fenster_offen
OR
EQ
fenster_offen
wert
OPEN
EQ
fenster_offen
wert
TRUE
anzahl_fenster_offen
1
INSERT
LAST
liste_fenster_offen
fenster_offen
geΓΆffnet
INSERT
LAST
liste_fenster_offen_html
fenster_offen
<td><span style="color:#FF0000"> geΓΆffnet </span>
fenster_gekippt
selektor_Fenster
wert
val
fenster_gekippt
EQ
fenster_gekippt
wert
TILTED
anzahl_fenster_gekippt
1
INSERT
LAST
liste_fenster_gekippt
fenster_gekippt
gekippt
INSERT
LAST
liste_fenster_gekippt_html
fenster_gekippt
<td><span style="color:#0000FF"> gekippt </span>
fenster_geschlossen
selektor_Fenster
wert
val
fenster_geschlossen
OR
EQ
fenster_geschlossen
wert
CLOSED
EQ
fenster_geschlossen
wert
FALSE
anzahl_fenster_geschlossen
1
INSERT
LAST
liste_fenster_geschlossen
fenster_geschlossen
geschlossen
INSERT
LAST
liste_fenster_geschlossen_html
fenster_geschlossen
<td>geschlossen
true
FALSE
Object ID
01_anzahl_Fenster_gekippt_eDP
TRUE
anzahl_fenster_gekippt
0
true
FALSE
Object ID
02_anzahl_Fenster_offen_eDP
TRUE
anzahl_fenster_offen
0
true
FALSE
Object ID
03_anzahl_Fenster_geschlossen_eDP
TRUE
anzahl_fenster_geschlossen
0
true
FALSE
Object ID
04_anzahl_Fenster_gesamt_eDP
TRUE
anzahl_fenster_gesamt
0
true
FALSE
Object ID
04_1_anzahl_Fenster_geoeffnet_und_gekippt_gesamt
TRUE
ADD
1
anzahl_fenster_gekippt
1
anzahl_fenster_offen
0
AND
EQ
anzahl_fenster_gekippt
0
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
05_offene_gekippte_Fenster_Liste
TRUE
Alle
Fenster
sind geschlossen.
0
AND
EQ
anzahl_fenster_gekippt
0
NEQ
anzahl_fenster_offen
0
true
FALSE
Object ID
05_offene_gekippte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
0
AND
NEQ
anzahl_fenster_gekippt
0
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
05_offene_gekippte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_gekippt
,
0
AND
NEQ
anzahl_fenster_gekippt
0
NEQ
anzahl_fenster_offen
0
true
FALSE
Object ID
05_offene_gekippte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
,
TEXT
1
liste_fenster_gekippt
,
0
AND
EQ
anzahl_fenster_gekippt
0
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_geschlossen
,
0
EQ
anzahl_fenster_gesamt
anzahl_fenster_offen
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
0
EQ
anzahl_fenster_gesamt
anzahl_fenster_gekippt
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_gekippt
,
0
AND
GT
anzahl_fenster_offen
0
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
EQ
anzahl_fenster_gekippt
0
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
,
TEXT
1
liste_fenster_gekippt
,
TEXT
1
liste_fenster_geschlossen
,
0
AND
GT
anzahl_fenster_gekippt
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_gekippt
,
,
TEXT
1
liste_fenster_offen
,
TEXT
1
liste_fenster_geschlossen
,
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
AND
GT
anzahl_fenster_gekippt
0
GT
anzahl_fenster_offen
0
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
,
TEXT
1
liste_fenster_gekippt
,
,
TEXT
1
liste_fenster_geschlossen
,
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
AND
AND
GT
anzahl_fenster_gekippt
0
GT
anzahl_fenster_offen
0
EQ
ADD
1
anzahl_fenster_gekippt
1
anzahl_fenster_offen
anzahl_fenster_gesamt
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_fenster_offen
,
,
TEXT
1
liste_fenster_gekippt
,
TEXT
1
liste_fenster_geschlossen
,
0
AND
EQ
anzahl_fenster_gekippt
0
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_geschlossen_html
<tr><td>
</table></body>
0
EQ
anzahl_fenster_gesamt
anzahl_fenster_offen
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_offen_html
<tr><td>
</table></body>
0
EQ
anzahl_fenster_gesamt
anzahl_fenster_gekippt
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_gekippt_html
<tr><td>
</table></body>
0
AND
GT
anzahl_fenster_offen
0
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
EQ
anzahl_fenster_gekippt
0
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_fenster_gekippt_html
<tr><td>
TEXT
1
liste_fenster_geschlossen_html
<tr><td>
</table></body>
0
AND
GT
anzahl_fenster_gekippt
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
EQ
anzahl_fenster_offen
0
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_gekippt_html
<tr><td>
<tr><td>
TEXT
1
liste_fenster_offen_html
<tr><td>
TEXT
1
liste_fenster_geschlossen_html
<tr><td>
</table></body>
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
AND
GT
anzahl_fenster_gekippt
0
GT
anzahl_fenster_offen
0
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_fenster_gekippt_html
<tr><td>
<tr><td>
TEXT
1
liste_fenster_geschlossen_html
<tr><td>
</table></body>
0
AND
LT
anzahl_fenster_gekippt
anzahl_fenster_gesamt
AND
LT
anzahl_fenster_offen
anzahl_fenster_gesamt
AND
AND
GT
anzahl_fenster_gekippt
0
GT
anzahl_fenster_offen
0
EQ
ADD
1
anzahl_fenster_gekippt
1
anzahl_fenster_offen
anzahl_fenster_gesamt
true
FALSE
Object ID
07_html_Fenster_Liste
TRUE
htmlText
TEXT
1
liste_fenster_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_fenster_gekippt_html
<tr><td>
TEXT
1
liste_fenster_geschlossen_html
<tr><td>
</table></body>
0
Lichter_zaehlen
Beschreibe diese Funktion β¦
anzahl_Lichter_aktiv
0
anzahl_Lichter_inaktiv
0
anzahl_Lichter_gesamt
0
liste_Lichter_aktiv
liste_Lichter_inaktiv
liste_Lichter_aktiv_gesamt
liste_Lichter_aktiv_html
liste_Lichter_inaktiv_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Licht
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Licht
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Licht
etage
   </td><td>Status</td></tr>
<tr><td>
Lichter_aktiv
selektor_Lichter
anzahl_Lichter_gesamt
1
OR
val
Lichter_aktiv
GT
val
Lichter_aktiv
0
anzahl_Lichter_aktiv
1
INSERT
LAST
liste_Lichter_aktiv
Lichter_aktiv
Licht
an
INSERT
LAST
liste_Lichter_aktiv_html
Lichter_aktiv
Licht
<td><span style="color:#FF0000">
emoji_π‘
an
</span>
Lichter_inaktiv
selektor_Lichter
OR
val
Lichter_aktiv
EQ
val
Lichter_aktiv
0
anzahl_Lichter_inaktiv
1
INSERT
LAST
liste_Lichter_inaktiv
Lichter_inaktiv
Licht
aus
INSERT
LAST
liste_Lichter_inaktiv_html
Lichter_inaktiv
Licht
<td>
aus
emoji_π
true
FALSE
Object ID
01_anzahl_Lichter_gesamt_eDP
TRUE
anzahl_Lichter_gesamt
0
true
FALSE
Object ID
02_anzahl_Lichter_aktiv_eDP
TRUE
anzahl_Lichter_aktiv
0
EQ
anzahl_Lichter_aktiv
0
true
FALSE
Object ID
03_liste_Lichter_aktiv_eDP
TRUE
Licht
Aktuell sind alle
Licht
ausgeschaltet
0
true
FALSE
Object ID
03_liste_Lichter_aktiv_eDP
TRUE
TEXT
1
liste_Lichter_aktiv
,
0
EQ
anzahl_Lichter_aktiv
0
true
FALSE
Object ID
04_liste_Lichter_gesamt_eDP
TRUE
TEXT
1
liste_Lichter_inaktiv
,
0
NEQ
anzahl_Lichter_aktiv
0
true
FALSE
Object ID
04_liste_Lichter_gesamt_eDP
TRUE
TEXT
1
liste_Lichter_inaktiv
,
,
TEXT
1
liste_Lichter_inaktiv
,
0
EQ
anzahl_Lichter_aktiv
anzahl_Lichter_gesamt
true
FALSE
Object ID
04_liste_Lichter_gesamt_eDP
TRUE
TEXT
1
liste_Lichter_aktiv
,
0
EQ
anzahl_Lichter_aktiv
0
true
FALSE
Object ID
05_liste_Lichter_html_eDP
TRUE
htmlText
TEXT
1
liste_Lichter_inaktiv_html
<tr><td>
</table></body>
0
NEQ
anzahl_Lichter_aktiv
0
true
FALSE
Object ID
05_liste_Lichter_html_eDP
TRUE
htmlText
TEXT
1
liste_Lichter_aktiv_html
<tr><td>
<tr><td>
TEXT
1
liste_Lichter_inaktiv_html
<tr><td>
</table></body>
0
EQ
anzahl_Lichter_aktiv
anzahl_Lichter_gesamt
true
FALSE
Object ID
05_liste_Lichter_html_eDP
TRUE
htmlText
TEXT
1
liste_Lichter_aktiv_html
<tr><td>
</table></body>
0
Fenster_vor_versand_pruefen
Beschreibe diese Funktion β¦
gekippt
gekippt
emoji_π
geoffnet
geΓΆffnet
emoji_βοΈ
uebnerschrift_nachrichten_Fenster
*
etage
Fenster
status
*
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
1
EQ
val
01_anzahl_Fenster_gekippt_eDP
0
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es ist
ein
Fenster
geoffnet
\n
\n
TEXT
1
liste_fenster_offen
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
0
EQ
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es ist
ein
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
1
EQ
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es ist
ein
Fenster
geoffnet
\n
Es ist
ein
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_offen
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
0
GT
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es sind
val
01_anzahl_Fenster_gekippt_eDP
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
GT
val
02_anzahl_Fenster_offen_eDP
1
EQ
val
01_anzahl_Fenster_gekippt_eDP
0
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es sind
val
02_anzahl_Fenster_offen_eDP
Fenster
geoffnet
\n
\n
TEXT
1
liste_fenster_offen
\n
AND
GT
val
02_anzahl_Fenster_offen_eDP
1
EQ
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es sind
val
02_anzahl_Fenster_offen_eDP
Fenster
geoffnet
\n
Es ist
ein
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_offen
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
1
GT
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es ist
ein
Fenster
geoffnet
\n
Es sind
val
01_anzahl_Fenster_gekippt_eDP
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_offen
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
GT
val
02_anzahl_Fenster_offen_eDP
1
GT
val
01_anzahl_Fenster_gekippt_eDP
1
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
Es sind
val
02_anzahl_Fenster_offen_eDP
Fenster
geoffnet
\n
Es sind
val
01_anzahl_Fenster_gekippt_eDP
Fenster
gekippt
\n
\n
TEXT
1
liste_fenster_offen
\n
\n
TEXT
1
liste_fenster_gekippt
\n
AND
EQ
val
02_anzahl_Fenster_offen_eDP
0
EQ
val
01_anzahl_Fenster_gekippt_eDP
0
nachrichten_ausgabe_Fenster
uebnerschrift_nachrichten_Fenster
β
Alle
Fenster
sind geschlossen β
true
FALSE
Object ID
08_offene_gekippte_Fenster_Liste_mit_Emojis
TRUE
nachrichten_ausgabe_Fenster
0
Tueren_zaehlen
Beschreibe diese Funktion β¦
anzahl_tueren_gekippt
0
anzahl_tueren_offen
0
anzahl_tueren_geschlossen
0
anzahl_tueren_gesamt
0
liste_tueren_offen
liste_tueren_gekippt
liste_tueren_geschlossen
liste_tueren_offen_gesamt
liste_tueren_offen_html
liste_tueren_gekippt_html
liste_tueren_geschlossen_html
htmlText
<!DOCTYPE html><html lang="de"><head><title>
Tueren
</title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>
<p style="color:#0000FF; font-family:Helvetica; font-weight: bold">
Tueren
status
etage
</p>
<p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γnderung:
custom
TT.MM.JJJJ SS:mm:ss
</p>
<table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);">
<tr style="color:#0000FF"; font-weight: bold"><td>
Tueren
etage
   </td><td>Status</td></tr>
<tr><td>
tueren_offen
selektor_Tueren
anzahl_tueren_gesamt
1
wert
val
tueren_offen
OR
EQ
tueren_offen
wert
OPEN
EQ
tueren_offen
wert
TRUE
anzahl_tueren_offen
1
INSERT
LAST
liste_tueren_offen
tueren_offen
geΓΆffnet
INSERT
LAST
liste_tueren_offen_html
tueren_offen
<td><span style="color:#FF0000"> geΓΆffnet </span>
tueren_gekippt
selektor_Tueren
wert
val
tueren_gekippt
EQ
tueren_gekippt
wert
TILTED
anzahl_tueren_gekippt
1
INSERT
LAST
liste_tueren_gekippt
tueren_gekippt
gekippt
INSERT
LAST
liste_tueren_gekippt_html
tueren_gekippt
<td><span style="color:#0000FF"> gekippt </span>
tueren_geschlossen
selektor_Tueren
wert
val
tueren_geschlossen
OR
EQ
tueren_geschlossen
wert
CLOSED
EQ
tueren_geschlossen
wert
FALSE
anzahl_tueren_geschlossen
1
INSERT
LAST
liste_tueren_geschlossen
tueren_geschlossen
geschlossen
INSERT
LAST
liste_tueren_geschlossen_html
tueren_geschlossen
<td>geschlossen
true
FALSE
Object ID
01_anzahl_Tueren_gekippt_eDP
TRUE
anzahl_tueren_gekippt
0
true
FALSE
Object ID
02_anzahl_Tueren_offen_eDP
TRUE
anzahl_tueren_offen
0
true
FALSE
Object ID
03_anzahl_Tueren_geschlossen_eDP
TRUE
anzahl_tueren_geschlossen
0
true
FALSE
Object ID
04_anzahl_Tueren_gesamt_eDP
TRUE
anzahl_tueren_gesamt
0
true
FALSE
Object ID
04_1_anzahl_Tueren_geoeffnet_und_gekippt_gesamt
TRUE
ADD
1
anzahl_tueren_gekippt
1
anzahl_tueren_offen
0
AND
EQ
anzahl_tueren_gekippt
0
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
05_offene_gekippte_Tueren_Liste
TRUE
Alle
Tueren
sind geschlossen.
0
AND
EQ
anzahl_tueren_gekippt
0
NEQ
anzahl_tueren_offen
0
true
FALSE
Object ID
05_offene_gekippte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_offen
,
0
AND
NEQ
anzahl_tueren_gekippt
0
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
05_offene_gekippte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_gekippt
,
0
AND
NEQ
anzahl_tueren_gekippt
0
NEQ
anzahl_tueren_offen
0
true
FALSE
Object ID
05_offene_gekippte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_offen
,
,
TEXT
1
liste_tueren_gekippt
,
0
AND
EQ
anzahl_tueren_gekippt
0
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_geschlossen
,
0
EQ
anzahl_tueren_gesamt
anzahl_tueren_offen
true
FALSE
Object ID
06_gesamte_Fenster_Liste
TRUE
TEXT
1
liste_tueren_offen
,
0
EQ
anzahl_tueren_gesamt
anzahl_tueren_gekippt
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_gekippt
,
0
AND
GT
anzahl_tueren_offen
0
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
EQ
anzahl_tueren_gekippt
0
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_offen
,
,
TEXT
1
liste_tueren_gekippt
,
TEXT
1
liste_tueren_geschlossen
,
0
AND
GT
anzahl_tueren_gekippt
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_gesamt
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_gekippt
,
,
TEXT
1
liste_tueren_offen
,
TEXT
1
liste_tueren_geschlossen
,
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_gesamt
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
AND
GT
anzahl_tueren_gekippt
0
GT
anzahl_tueren_offen
0
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_offen
,
,
TEXT
1
liste_tueren_gekippt
,
,
TEXT
1
liste_tueren_geschlossen
,
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_offen
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
AND
AND
GT
anzahl_tueren_gekippt
0
GT
anzahl_tueren_offen
0
EQ
ADD
1
anzahl_tueren_gekippt
1
anzahl_tueren_offen
anzahl_tueren_gesamt
true
FALSE
Object ID
06_gesamte_Tueren_Liste
TRUE
TEXT
1
liste_tueren_offen
,
,
TEXT
1
liste_tueren_gekippt
,
TEXT
1
liste_tueren_geschlossen
,
0
AND
EQ
anzahl_tueren_gekippt
0
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_geschlossen_html
<tr><td>
</table></body>
0
EQ
anzahl_tueren_gesamt
anzahl_tueren_offen
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_offen_html
<tr><td>
</table></body>
0
EQ
anzahl_tueren_gesamt
anzahl_tueren_gekippt
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_gekippt_html
<tr><td>
</table></body>
0
AND
GT
anzahl_tueren_offen
0
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
EQ
anzahl_tueren_gekippt
0
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_tueren_gekippt_html
<tr><td>
TEXT
1
liste_tueren_geschlossen_html
<tr><td>
</table></body>
0
AND
GT
anzahl_tueren_gekippt
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_gesamt
EQ
anzahl_tueren_offen
0
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_gekippt_html
<tr><td>
<tr><td>
TEXT
1
liste_tueren_offen_html
<tr><td>
TEXT
1
liste_tueren_geschlossen_html
<tr><td>
</table></body>
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_gesamt
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
AND
GT
anzahl_tueren_gekippt
0
GT
anzahl_tueren_offen
0
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_tueren_gekippt_html
<tr><td>
<tr><td>
TEXT
1
liste_tueren_geschlossen_html
<tr><td>
</table></body>
0
AND
LT
anzahl_tueren_gekippt
anzahl_tueren_gesamt
AND
LT
anzahl_tueren_offen
anzahl_tueren_gesamt
AND
AND
GT
anzahl_tueren_gekippt
0
GT
anzahl_tueren_offen
0
EQ
ADD
1
anzahl_tueren_gekippt
1
anzahl_tueren_offen
anzahl_tueren_gesamt
true
FALSE
Object ID
07_html_Tueren_Liste
TRUE
htmlText
TEXT
1
liste_tueren_offen_html
<tr><td>
<tr><td>
TEXT
1
liste_tueren_gekippt_html
<tr><td>
TEXT
1
liste_tueren_geschlossen_html
<tr><td>
</table></body>
0