Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Einsteigerfragen
  4. More than 100 subscriptions listed... ?? Woher?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.0k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

More than 100 subscriptions listed... ?? Woher?

Geplant Angeheftet Gesperrt Verschoben Einsteigerfragen
5 Beiträge 3 Kommentatoren 562 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    Mottimuc
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    im Log warn mich IOBroker, dass ich ein Script habe, welches > 100 subscriptions haben soll:

    	script.js.CALENDAR_SCRIPTE.Kalender.ICAL_2_LIST_KONVERTER: More than 105 subscriptions registered. Check your script
    

    Ich hatte den Begriff subscription auf "wenn sich Status des Datenpunkt xyz ändert" Verstanden, also ein Überwachen eines Datenpunktes. in Dem Script läuft aber m.E. nach alle 5 Min ein Script, welches aus einem ICAL Feld ein JSON für ein MDW Widget macht...

    ? Was tun?

    Hier das Script

    var schedule1;
    
    // Beschreibe diese Funktion …
    async function tbl_PAPA() {
       
       var instances = $(`[id=ical.5.data.table]`);
       instances.on(ical2TableWidget_0);
       
       // remove this, if you know to use your own datapoint
       let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_0'
           createState(datapointId, "[]", {
               read: true, 
               write: false, 
               desc: "JSON String for MDW TABLE Widget", 
               type: "string", 
               def: "[]"
           });
        
       function ical2TableWidget_0() {
           try {
               let calList = [];
        
               for (var inst = 0; inst <= instances.length - 1; inst++) {
                   let icalObj = getState(instances[inst]).val;
        
                   if (icalObj) {
                       for (var i = 0; i <= icalObj.length - 1; i++) {
                           let item = icalObj[i];
        
                           let calendarName = item._class.split(' ')[0].replace('ical_', '');
        
                           // Objekt für Tabelle erzeugen
                           calList.push({
                               farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                               zeit: item.date,
                               termin: item.event,
                               kalender: calendarName,
                               timestamp: Date.parse(item._date)
                           })
                       }
                   }
               }
        
               // Liste sort by timestamp asc
               calList.sort(function (a, b) {
                   return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
               });
        
               // Enter the destination data point that is to be used as object ID in the widget
               setState(datapointId, JSON.stringify(calList), true);
        
               function getMyCalendarColor(calendarName) {
                   // assign colors via the calendar names, use calendar name as set in ical
                    if (calendarName === 'Michael') {
                               return '#44739e';
                           } else if (calendarName === 'Schiedsrichter') {
                               return '#008080'
                           } else if (calendarName === 'SCBV') {
                               return '#5a885d'
                           }
               }
        
           } catch (e) {
               console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
           }
       }
        
       ical2TableWidget_0();
    
    }
    
    // Beschreibe diese Funktion …
    async function tbl_MAMA() {
       
       var instances = $(`[id=ical.6.data.table]`);
       instances.on(ical2TableWidget_1);
       
       // remove this, if you know to use your own datapoint
       let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_1'
           createState(datapointId, "[]", {
               read: true, 
               write: false, 
               desc: "JSON String for MDW TABLE Widget", 
               type: "string", 
               def: "[]"
           });
        
       function ical2TableWidget_1() {
           try {
               let calList = [];
        
               for (var inst = 0; inst <= instances.length - 1; inst++) {
                   let icalObj = getState(instances[inst]).val;
        
                   if (icalObj) {
                       for (var i = 0; i <= icalObj.length - 1; i++) {
                           let item = icalObj[i];
        
                           let calendarName = item._class.split(' ')[0].replace('ical_', '');
        
                           // Objekt für Tabelle erzeugen
                           calList.push({
                               farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                               zeit: item.date,
                               termin: item.event,
                               kalender: calendarName,
                               timestamp: Date.parse(item._date)
                           })
                       }
                   }
               }
        
               // Liste sort by timestamp asc
               calList.sort(function (a, b) {
                   return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
               });
        
               // Enter the destination data point that is to be used as object ID in the widget
               setState(datapointId, JSON.stringify(calList), true);
        
               function getMyCalendarColor(calendarName) {
               // assign colors via the calendar names, use calendar name as set in ical
                           if (calendarName === 'MAMA') {
                               return '#44739e';
                           } else if (calendarName === 'FEIERTAGE') {
                               return '#5a885d'
                           }
               }
        
           } catch (e) {
               console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
           }
       }
        
       ical2TableWidget_1();
    
    }
    
    // Beschreibe diese Funktion …
    async function tbl_LORENZ() {
       
       var instances = $(`[id=ical.7.data.table]`);
       instances.on(ical2TableWidget_2);
       
       // remove this, if you know to use your own datapoint
       let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_2'
           createState(datapointId, "[]", {
               read: true, 
               write: false, 
               desc: "JSON String for MDW TABLE Widget", 
               type: "string", 
               def: "[]"
           });
        
       function ical2TableWidget_2() {
           try {
               let calList = [];
        
               for (var inst = 0; inst <= instances.length - 1; inst++) {
                   let icalObj = getState(instances[inst]).val;
        
                   if (icalObj) {
                       for (var i = 0; i <= icalObj.length - 1; i++) {
                           let item = icalObj[i];
        
                           let calendarName = item._class.split(' ')[0].replace('ical_', '');
        
                           // Objekt für Tabelle erzeugen
                           calList.push({
                               farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                               zeit: item.date,
                               termin: item.event,
                               kalender: calendarName,
                               timestamp: Date.parse(item._date)
                           })
                       }
                   }
               }
        
               // Liste sort by timestamp asc
               calList.sort(function (a, b) {
                   return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
               });
        
               // Enter the destination data point that is to be used as object ID in the widget
               setState(datapointId, JSON.stringify(calList), true);
        
               function getMyCalendarColor(calendarName) {
                   // assign colors via the calendar names, use calendar name as set in ical
                           if (calendarName === 'LORENZ') {
                               return '#407f88';
                           } else if (calendarName === 'Schiedsrichter') {
                               return '#008080'
                           } else if (calendarName === 'SCBV') {
                               return '#5a885d'
                           }
               }
        
           } catch (e) {
               console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
           }
       }
        
       ical2TableWidget_2();
    
    }
    
    // Beschreibe diese Funktion …
    async function tbl_FRANZI() {
       
       var instances = $(`[id=ical.8.data.table]`);
       instances.on(ical2TableWidget_3);
       
       // remove this, if you know to use your own datapoint
       let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_3'
           createState(datapointId, "[]", {
               read: true, 
               write: false, 
               desc: "JSON String for MDW TABLE Widget", 
               type: "string", 
               def: "[]"
           });
        
       function ical2TableWidget_3() {
           try {
               let calList = [];
        
               for (var inst = 0; inst <= instances.length - 1; inst++) {
                   let icalObj = getState(instances[inst]).val;
        
                   if (icalObj) {
                       for (var i = 0; i <= icalObj.length - 1; i++) {
                           let item = icalObj[i];
        
                           let calendarName = item._class.split(' ')[0].replace('ical_', '');
        
                           // Objekt für Tabelle erzeugen
                           calList.push({
                               farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                               zeit: item.date,
                               termin: item.event,
                               kalender: calendarName,
                               timestamp: Date.parse(item._date)
                           })
                       }
                   }
               }
        
               // Liste sort by timestamp asc
               calList.sort(function (a, b) {
                   return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
               });
        
               // Enter the destination data point that is to be used as object ID in the widget
               setState(datapointId, JSON.stringify(calList), true);
        
               function getMyCalendarColor(calendarName) {
                   // assign colors via the calendar names, use calendar name as set in ical
                    if (calendarName === 'FRANZI') {
                               return '#44739e';
                           } else if (calendarName === 'Schiedsrichter') {
                               return '#008080'
                           } else if (calendarName === 'SCBV') {
                               return '#5a885d'
                           }
               }
        
           } catch (e) {
               console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
           }
       }
        
       ical2TableWidget_3();
    
    }
    
    // Beschreibe diese Funktion …
    async function tbl_ALLE() {
       
       var instances = $(`[id=ical.9.data.table]`);
       instances.on(ical2TableWidget_4);
       
       // remove this, if you know to use your own datapoint
       let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_4'
           createState(datapointId, "[]", {
               read: true, 
               write: false, 
               desc: "JSON String for MDW TABLE Widget", 
               type: "string", 
               def: "[]"
           });
        
       function ical2TableWidget_4() {
           try {
               let calList = [];
        
               for (var inst = 0; inst <= instances.length - 1; inst++) {
                   let icalObj = getState(instances[inst]).val;
        
                   if (icalObj) {
                       for (var i = 0; i <= icalObj.length - 1; i++) {
                           let item = icalObj[i];
        
                           let calendarName = item._class.split(' ')[0].replace('ical_', '');
        
                           // Objekt für Tabelle erzeugen
                           calList.push({
                               farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                               zeit: item.date,
                               termin: item.event,
                               kalender: calendarName,
                               timestamp: Date.parse(item._date)
                           })
                       }
                   }
               }
        
               // Liste sort by timestamp asc
               calList.sort(function (a, b) {
                   return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
               });
        
               // Enter the destination data point that is to be used as object ID in the widget
               setState(datapointId, JSON.stringify(calList), true);
        
               function getMyCalendarColor(calendarName) {
                   // assign colors via the calendar names, use calendar name as set in ical
                    if (calendarName === 'PAPA') {
                               return '#44739e';
                           } else if (calendarName === 'Schiedsrichter') {
                               return '#000000'
                           } else if (calendarName === 'PAPA SCBV') {
                               return '#5a885d'
                           } else if (calendarName === 'MAMA') {
                               return '#835d85'
                           } else if (calendarName === 'FRANZI') {
                               return '#848f53'
                           } else if (calendarName === 'LORENZ') {
                               return '#008080'
                           } else if (calendarName === 'FAMILY') {
                               return '#F88c2b'
                           }
               }
        
           } catch (e) {
               console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
           }
       }
        
       ical2TableWidget_4();
    
    }
    
    
    schedule1 = schedule('*/5 * * * *', async () => {
     await tbl_PAPA();
     await wait(5000);
     await tbl_MAMA();
     await wait(5000);
     await tbl_LORENZ();
     await wait(5000);
     await tbl_FRANZI();
     await wait(5000);
     await tbl_ALLE();
     console.info('CAL_TBL_UPDATE');
    });
    
    //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJjcm9uJTIyJTIwaWQlM0QlMjJzY2hlZHVsZTElMjIlM0VzY2hlZHVsZTElM0MlMkZ2YXJpYWJsZSUzRSUzQyUyRnZhcmlhYmxlcyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnNjaGVkdWxlX2NyZWF0ZSUyMiUyMGlkJTNEJTIyKSU1QiU3RHF3UExGSy1oZWE1bCU3QkF5UlUlMjIlMjB4JTNEJTIyMTEzJTIyJTIweSUzRCUyMjYyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXNjaGVkdWxlMSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyU0NIRURVTEUlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyMH4lNDBxdWMlM0ZjVHduJTVFbFRhLSUzRllJaCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNST04lMjIlM0UqJTIwKiUyMColMjAqJTIwKiUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyJTVEJTNGNzF0QSUzQiUyNX51akF4VCUyQmQlNUJUeEQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDUk9OJTIyJTNFKiUyRjUlMjAqJTIwKiUyMColMjAqJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlNUVQNkUzWWIlM0FnMFZUcE0lN0MlMkZzOGgyJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX1BBUEElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJpdyU0MCFDT3U1NCUyQ2klM0ExeSUzRm1QRCU3QyU1RCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkRFTEFZJTIyJTNFNSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVU5JVCUyMiUzRXNlYyUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlN0NuJTJGejhxJTYwcURGJTJCbFJBV0MlN0N+JTJGJTdEJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX01BTUElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJmdnpZfiEuQzglM0IlMjMlNURPbGZSJTVFdThWJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVklMjIlM0U1JTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFc2VjJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMiU1QipKcyU2MCUzQlh5bFVDSmE4Z3MwJTdEaWslMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfTE9SRU5aJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfd2FpdCUyMiUyMGlkJTNEJTIydHR1JTI1JTYwT1ZRcFJmcXElN0NDVWt6Y1QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyeVJiYU9GakclMkY0KUFmTDJYNGlyUCUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMnRibF9GUkFOWkklMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjIlM0F1cjN2MSUyM0lEZTVsJTIzSSU0MHU4TyU1RC4lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyRnNuV08lN0RjUlhjV0JYdEUlNjBTeCUzQmMlMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfQUxMRSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJaSi5xJTdEfn5xJTVEJTdCJTNGY0ElNURocyU1QiUzRDBkJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VpbmZvJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMkhaNCUyRkxyMSU3QzIuJTNCfk4lNUJQR0ElN0I4JTdEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUNBTF9UQkxfVVBEQVRFJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZmN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJfenItRyhQdHljVjZVbCUyRkdFcWIlN0MlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjIzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX1BBUEElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTUNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpBb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0owMXBZMmhoWld3bktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh3S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyMCU1RCUzRGsyRkklMkNVMllaUFlnOTBGa3UlMjIlMjB4JTNEJTIyMzEyJTIyJTIweSUzRCUyMjI4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX01BTUElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOaTVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTVNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1TY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQzh2SUdGemMybG5iaUJqYjJ4dmNuTWdkbWxoSUhSb1pTQmpZV3hsYm1SaGNpQnVZVzFsY3l3Z2RYTmxJR05oYkdWdVpHRnlJRzVoYldVZ1lYTWdjMlYwSUdsdUlHbGpZV3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMDFCVFVFbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaRlNVVlNWRUZIUlNjcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmUTBLSUNBZ0lDQWdJQ0I5RFFvZ0RRb2dJQ0FnZlNCallYUmphQ0FvWlNrZ2V3MEtJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dCcFkyRnNNazFoZEdWeWFXRnNSR1Z6YVdkdVZHRmliR1ZYYVdSblpYUTZJRzFsYzNOaFoyVTZJQ1I3WlM1dFpYTnpZV2RsZlN3Z2MzUmhZMnM2SUNSN1pTNXpkR0ZqYTMxZ0tUc05DaUFnSUNCOURRcDlEUW9nRFFwcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tUc05DZyUzRCUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyJTJCJTVFZy0lNUJxOGlBJTIza2MwSy5NVGR4QyUyMiUyMHglM0QlMjIzMTIlMjIlMjB5JTNEJTIyMzM4JTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V0YmxfTE9SRU5aJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VEUXAyWVhJZ2FXNXpkR0Z1WTJWeklEMGdKQ2hnVzJsa1BXbGpZV3d1Tnk1a1lYUmhMblJoWW14bFhXQXBPdzBLYVc1emRHRnVZMlZ6TG05dUtHbGpZV3d5VkdGaWJHVlhhV1JuWlhSZk1pazdEUW9OQ2k4dklISmxiVzkyWlNCMGFHbHpMQ0JwWmlCNWIzVWdhMjV2ZHlCMGJ5QjFjMlVnZVc5MWNpQnZkMjRnWkdGMFlYQnZhVzUwRFFwc1pYUWdaR0YwWVhCdmFXNTBTV1FnUFNBbk1GOTFjMlZ5WkdGMFlTNHdMa05oYkdWdVpHRnlMa3RoYkdWdVpHVnlMa3BUVDA1ZlRFbFRWRjlOUkZkRFFVeGZNaWNOQ2lBZ0lDQmpjbVZoZEdWVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z0lsdGRJaXdnZXcwS0lDQWdJQ0FnSUNCeVpXRmtPaUIwY25WbExDQU5DaUFnSUNBZ0lDQWdkM0pwZEdVNklHWmhiSE5sTENBTkNpQWdJQ0FnSUNBZ1pHVnpZem9nSWtwVFQwNGdVM1J5YVc1bklHWnZjaUJOUkZjZ1ZFRkNURVVnVjJsa1oyVjBJaXdnRFFvZ0lDQWdJQ0FnSUhSNWNHVTZJQ0p6ZEhKcGJtY2lMQ0FOQ2lBZ0lDQWdJQ0FnWkdWbU9pQWlXMTBpRFFvZ0lDQWdmU2s3RFFvZ0RRcG1kVzVqZEdsdmJpQnBZMkZzTWxSaFlteGxWMmxrWjJWMFh6SW9LU0I3RFFvZ0lDQWdkSEo1SUhzTkNpQWdJQ0FnSUNBZ2JHVjBJR05oYkV4cGMzUWdQU0JiWFRzTkNpQU5DaUFnSUNBZ0lDQWdabTl5SUNoMllYSWdhVzV6ZENBOUlEQTdJR2x1YzNRZ1BEMGdhVzV6ZEdGdVkyVnpMbXhsYm1kMGFDQXRJREU3SUdsdWMzUXJLeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsallXeFBZbW9nUFNCblpYUlRkR0YwWlNocGJuTjBZVzVqWlhOYmFXNXpkRjBwTG5aaGJEc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwWTJGc1QySnFLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUEQwZ2FXTmhiRTlpYWk1c1pXNW5kR2dnTFNBeE95QnBLeXNwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsMFpXMGdQU0JwWTJGc1QySnFXMmxkT3cwS0lBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyRnNaVzVrWVhKT1lXMWxJRDBnYVhSbGJTNWZZMnhoYzNNdWMzQnNhWFFvSnlBbktWc3dYUzV5WlhCc1lXTmxLQ2RwWTJGc1h5Y3NJQ2NuS1RzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1QySnFaV3QwSUdiRHZISWdWR0ZpWld4c1pTQmxjbnBsZFdkbGJnMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVd4TWFYTjBMbkIxYzJnb2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnlZbVU2SUdBOFpHbDJJSE4wZVd4bFBTSmlZV05yWjNKdmRXNWtPaUFrZTJkbGRFMTVRMkZzWlc1a1lYSkRiMnh2Y2loallXeGxibVJoY2s1aGJXVXBmVHNnZDJsa2RHZzZJRFp3ZURzZ2FHVnBaMmgwT2lBeU1IQjRJajQ4TDJScGRqNWdMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlbVZwZERvZ2FYUmxiUzVrWVhSbExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHVnliV2x1T2lCcGRHVnRMbVYyWlc1MExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyRnNaVzVrWlhJNklHTmhiR1Z1WkdGeVRtRnRaU3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJwYldWemRHRnRjRG9nUkdGMFpTNXdZWEp6WlNocGRHVnRMbDlrWVhSbEtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnZlEwS0lBMEtJQ0FnSUNBZ0lDQXZMeUJNYVhOMFpTQnpiM0owSUdKNUlIUnBiV1Z6ZEdGdGNDQmhjMk1OQ2lBZ0lDQWdJQ0FnWTJGc1RHbHpkQzV6YjNKMEtHWjFibU4wYVc5dUlDaGhMQ0JpS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZUzUwYVcxbGMzUmhiWEFnUFQwZ1lpNTBhVzFsYzNSaGJYQWdQeUF3SURvZ0t5aGhMblJwYldWemRHRnRjQ0ElMkJJR0l1ZEdsdFpYTjBZVzF3S1NCOGZDQXRNVHNOQ2lBZ0lDQWdJQ0FnZlNrN0RRb2dEUW9nSUNBZ0lDQWdJQzh2SUVWdWRHVnlJSFJvWlNCa1pYTjBhVzVoZEdsdmJpQmtZWFJoSUhCdmFXNTBJSFJvWVhRZ2FYTWdkRzhnWW1VZ2RYTmxaQ0JoY3lCdlltcGxZM1FnU1VRZ2FXNGdkR2hsSUhkcFpHZGxkQTBLSUNBZ0lDQWdJQ0J6WlhSVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z1NsTlBUaTV6ZEhKcGJtZHBabmtvWTJGc1RHbHpkQ2tzSUhSeWRXVXBPdzBLSUEwS0lDQWdJQ0FnSUNCbWRXNWpkR2x2YmlCblpYUk5lVU5oYkdWdVpHRnlRMjlzYjNJb1kyRnNaVzVrWVhKT1lXMWxLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJoYzNOcFoyNGdZMjlzYjNKeklIWnBZU0IwYUdVZ1kyRnNaVzVrWVhJZ2JtRnRaWE1zSUhWelpTQmpZV3hsYm1SaGNpQnVZVzFsSUdGeklITmxkQ0JwYmlCcFkyRnNEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBNRGRtT0Rnbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh5S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyUCUzQVdhTVUlMjMlMjQxX2VaVyU3Q0QlNUVkJTYwV3glMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjM4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0ZSQU5aSSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFRFFwMllYSWdhVzV6ZEdGdVkyVnpJRDBnSkNoZ1cybGtQV2xqWVd3dU9DNWtZWFJoTG5SaFlteGxYV0FwT3cwS2FXNXpkR0Z1WTJWekxtOXVLR2xqWVd3eVZHRmliR1ZYYVdSblpYUmZNeWs3RFFvTkNpOHZJSEpsYlc5MlpTQjBhR2x6TENCcFppQjViM1VnYTI1dmR5QjBieUIxYzJVZ2VXOTFjaUJ2ZDI0Z1pHRjBZWEJ2YVc1MERRcHNaWFFnWkdGMFlYQnZhVzUwU1dRZ1BTQW5NRjkxYzJWeVpHRjBZUzR3TGtOaGJHVnVaR0Z5TGt0aGJHVnVaR1Z5TGtwVFQwNWZURWxUVkY5TlJGZERRVXhmTXljTkNpQWdJQ0JqY21WaGRHVlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dJbHRkSWl3Z2V3MEtJQ0FnSUNBZ0lDQnlaV0ZrT2lCMGNuVmxMQ0FOQ2lBZ0lDQWdJQ0FnZDNKcGRHVTZJR1poYkhObExDQU5DaUFnSUNBZ0lDQWdaR1Z6WXpvZ0lrcFRUMDRnVTNSeWFXNW5JR1p2Y2lCTlJGY2dWRUZDVEVVZ1YybGtaMlYwSWl3Z0RRb2dJQ0FnSUNBZ0lIUjVjR1U2SUNKemRISnBibWNpTENBTkNpQWdJQ0FnSUNBZ1pHVm1PaUFpVzEwaURRb2dJQ0FnZlNrN0RRb2dEUXBtZFc1amRHbHZiaUJwWTJGc01sUmhZbXhsVjJsa1oyVjBYek1vS1NCN0RRb2dJQ0FnZEhKNUlIc05DaUFnSUNBZ0lDQWdiR1YwSUdOaGJFeHBjM1FnUFNCYlhUc05DaUFOQ2lBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVc1emRDQTlJREE3SUdsdWMzUWdQRDBnYVc1emRHRnVZMlZ6TG14bGJtZDBhQ0F0SURFN0lHbHVjM1FyS3lrZ2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbGpZV3hQWW1vZ1BTQm5aWFJUZEdGMFpTaHBibk4wWVc1alpYTmJhVzV6ZEYwcExuWmhiRHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocFkyRnNUMkpxS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BEMGdhV05oYkU5aWFpNXNaVzVuZEdnZ0xTQXhPeUJwS3lzcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbDBaVzBnUFNCcFkyRnNUMkpxVzJsZE93MEtJQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdZMkZzWlc1a1lYSk9ZVzFsSUQwZ2FYUmxiUzVmWTJ4aGMzTXVjM0JzYVhRb0p5QW5LVnN3WFM1eVpYQnNZV05sS0NkcFkyRnNYeWNzSUNjbktUc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUMkpxWld0MElHYkR2SElnVkdGaVpXeHNaU0JsY25wbGRXZGxiZzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallXeE1hWE4wTG5CMWMyZ29ldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZ5WW1VNklHQThaR2wySUhOMGVXeGxQU0ppWVdOclozSnZkVzVrT2lBa2UyZGxkRTE1UTJGc1pXNWtZWEpEYjJ4dmNpaGpZV3hsYm1SaGNrNWhiV1VwZlRzZ2QybGtkR2c2SURad2VEc2dhR1ZwWjJoME9pQXlNSEI0SWo0OEwyUnBkajVnTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZW1WcGREb2dhWFJsYlM1a1lYUmxMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR1Z5YldsdU9pQnBkR1Z0TG1WMlpXNTBMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMkZzWlc1a1pYSTZJR05oYkdWdVpHRnlUbUZ0WlN3TkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGJXVnpkR0Z0Y0RvZ1JHRjBaUzV3WVhKelpTaHBkR1Z0TGw5a1lYUmxLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ2ZRMEtJQTBLSUNBZ0lDQWdJQ0F2THlCTWFYTjBaU0J6YjNKMElHSjVJSFJwYldWemRHRnRjQ0JoYzJNTkNpQWdJQ0FnSUNBZ1kyRnNUR2x6ZEM1emIzSjBLR1oxYm1OMGFXOXVJQ2hoTENCaUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVM1MGFXMWxjM1JoYlhBZ1BUMGdZaTUwYVcxbGMzUmhiWEFnUHlBd0lEb2dLeWhoTG5ScGJXVnpkR0Z0Y0NBJTJCSUdJdWRHbHRaWE4wWVcxd0tTQjhmQ0F0TVRzTkNpQWdJQ0FnSUNBZ2ZTazdEUW9nRFFvZ0lDQWdJQ0FnSUM4dklFVnVkR1Z5SUhSb1pTQmtaWE4wYVc1aGRHbHZiaUJrWVhSaElIQnZhVzUwSUhSb1lYUWdhWE1nZEc4Z1ltVWdkWE5sWkNCaGN5QnZZbXBsWTNRZ1NVUWdhVzRnZEdobElIZHBaR2RsZEEwS0lDQWdJQ0FnSUNCelpYUlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dTbE5QVGk1emRISnBibWRwWm5rb1kyRnNUR2x6ZENrc0lIUnlkV1VwT3cwS0lBMEtJQ0FnSUNBZ0lDQm1kVzVqZEdsdmJpQm5aWFJOZVVOaGJHVnVaR0Z5UTI5c2IzSW9ZMkZzWlc1a1lYSk9ZVzFsS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0F2THlCaGMzTnBaMjRnWTI5c2IzSnpJSFpwWVNCMGFHVWdZMkZzWlc1a1lYSWdibUZ0WlhNc0lIVnpaU0JqWVd4bGJtUmhjaUJ1WVcxbElHRnpJSE5sZENCcGJpQnBZMkZzRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpRME56TTVaU2M3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMkZzWlc1a1lYSk9ZVzFsSUQwOVBTQW5VMk5vYVdWa2MzSnBZMmgwWlhJbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuVTBOQ1ZpY3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5JelZoT0RnMVpDY05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlEwS0lDQWdJQ0FnSUNCOURRb2dEUW9nSUNBZ2ZTQmpZWFJqYUNBb1pTa2dldzBLSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtHQnBZMkZzTWsxaGRHVnlhV0ZzUkdWemFXZHVWR0ZpYkdWWGFXUm5aWFE2SUcxbGMzTmhaMlU2SUNSN1pTNXRaWE56WVdkbGZTd2djM1JoWTJzNklDUjdaUzV6ZEdGamEzMWdLVHNOQ2lBZ0lDQjlEUXA5RFFvZ0RRcHBZMkZzTWxSaFlteGxWMmxrWjJWMFh6TW9LVHNOQ2clM0QlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMnhodFByNWZDci5zdkh1JTNEKXZIemIlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjQzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0FMTEUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VPUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTkNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk5DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpRb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxQkJVRUVuS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNME5EY3pPV1VuT3cwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMU5qYUdsbFpITnlhV05vZEdWeUp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pNREF3TURBd0p3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFCQlVFRWdVME5DVmljcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hqWVd4bGJtUmhjazVoYldVZ1BUMDlJQ2ROUVUxQkp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pPRE0xWkRnMUp3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpnME9HWTFNeWNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuUmtGTlNVeFpKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqUmpnNFl6SmlKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOURRb2dJQ0FnSUNBZ0lIME5DaUFOQ2lBZ0lDQjlJR05oZEdOb0lDaGxLU0I3RFFvZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9ZR2xqWVd3eVRXRjBaWEpwWVd4RVpYTnBaMjVVWVdKc1pWZHBaR2RsZERvZ2JXVnpjMkZuWlRvZ0pIdGxMbTFsYzNOaFoyVjlMQ0J6ZEdGamF6b2dKSHRsTG5OMFlXTnJmV0FwT3cwS0lDQWdJSDBOQ24wTkNpQU5DbWxqWVd3eVZHRmliR1ZYYVdSblpYUmZOQ2dwT3cwSyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
    

    Viele Grüße
    Michael

    OliverIOO AsgothianA 2 Antworten Letzte Antwort
    0
    • M Mottimuc

      Hallo zusammen,

      im Log warn mich IOBroker, dass ich ein Script habe, welches > 100 subscriptions haben soll:

      	script.js.CALENDAR_SCRIPTE.Kalender.ICAL_2_LIST_KONVERTER: More than 105 subscriptions registered. Check your script
      

      Ich hatte den Begriff subscription auf "wenn sich Status des Datenpunkt xyz ändert" Verstanden, also ein Überwachen eines Datenpunktes. in Dem Script läuft aber m.E. nach alle 5 Min ein Script, welches aus einem ICAL Feld ein JSON für ein MDW Widget macht...

      ? Was tun?

      Hier das Script

      var schedule1;
      
      // Beschreibe diese Funktion …
      async function tbl_PAPA() {
         
         var instances = $(`[id=ical.5.data.table]`);
         instances.on(ical2TableWidget_0);
         
         // remove this, if you know to use your own datapoint
         let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_0'
             createState(datapointId, "[]", {
                 read: true, 
                 write: false, 
                 desc: "JSON String for MDW TABLE Widget", 
                 type: "string", 
                 def: "[]"
             });
          
         function ical2TableWidget_0() {
             try {
                 let calList = [];
          
                 for (var inst = 0; inst <= instances.length - 1; inst++) {
                     let icalObj = getState(instances[inst]).val;
          
                     if (icalObj) {
                         for (var i = 0; i <= icalObj.length - 1; i++) {
                             let item = icalObj[i];
          
                             let calendarName = item._class.split(' ')[0].replace('ical_', '');
          
                             // Objekt für Tabelle erzeugen
                             calList.push({
                                 farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                 zeit: item.date,
                                 termin: item.event,
                                 kalender: calendarName,
                                 timestamp: Date.parse(item._date)
                             })
                         }
                     }
                 }
          
                 // Liste sort by timestamp asc
                 calList.sort(function (a, b) {
                     return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                 });
          
                 // Enter the destination data point that is to be used as object ID in the widget
                 setState(datapointId, JSON.stringify(calList), true);
          
                 function getMyCalendarColor(calendarName) {
                     // assign colors via the calendar names, use calendar name as set in ical
                      if (calendarName === 'Michael') {
                                 return '#44739e';
                             } else if (calendarName === 'Schiedsrichter') {
                                 return '#008080'
                             } else if (calendarName === 'SCBV') {
                                 return '#5a885d'
                             }
                 }
          
             } catch (e) {
                 console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
             }
         }
          
         ical2TableWidget_0();
      
      }
      
      // Beschreibe diese Funktion …
      async function tbl_MAMA() {
         
         var instances = $(`[id=ical.6.data.table]`);
         instances.on(ical2TableWidget_1);
         
         // remove this, if you know to use your own datapoint
         let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_1'
             createState(datapointId, "[]", {
                 read: true, 
                 write: false, 
                 desc: "JSON String for MDW TABLE Widget", 
                 type: "string", 
                 def: "[]"
             });
          
         function ical2TableWidget_1() {
             try {
                 let calList = [];
          
                 for (var inst = 0; inst <= instances.length - 1; inst++) {
                     let icalObj = getState(instances[inst]).val;
          
                     if (icalObj) {
                         for (var i = 0; i <= icalObj.length - 1; i++) {
                             let item = icalObj[i];
          
                             let calendarName = item._class.split(' ')[0].replace('ical_', '');
          
                             // Objekt für Tabelle erzeugen
                             calList.push({
                                 farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                 zeit: item.date,
                                 termin: item.event,
                                 kalender: calendarName,
                                 timestamp: Date.parse(item._date)
                             })
                         }
                     }
                 }
          
                 // Liste sort by timestamp asc
                 calList.sort(function (a, b) {
                     return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                 });
          
                 // Enter the destination data point that is to be used as object ID in the widget
                 setState(datapointId, JSON.stringify(calList), true);
          
                 function getMyCalendarColor(calendarName) {
                 // assign colors via the calendar names, use calendar name as set in ical
                             if (calendarName === 'MAMA') {
                                 return '#44739e';
                             } else if (calendarName === 'FEIERTAGE') {
                                 return '#5a885d'
                             }
                 }
          
             } catch (e) {
                 console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
             }
         }
          
         ical2TableWidget_1();
      
      }
      
      // Beschreibe diese Funktion …
      async function tbl_LORENZ() {
         
         var instances = $(`[id=ical.7.data.table]`);
         instances.on(ical2TableWidget_2);
         
         // remove this, if you know to use your own datapoint
         let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_2'
             createState(datapointId, "[]", {
                 read: true, 
                 write: false, 
                 desc: "JSON String for MDW TABLE Widget", 
                 type: "string", 
                 def: "[]"
             });
          
         function ical2TableWidget_2() {
             try {
                 let calList = [];
          
                 for (var inst = 0; inst <= instances.length - 1; inst++) {
                     let icalObj = getState(instances[inst]).val;
          
                     if (icalObj) {
                         for (var i = 0; i <= icalObj.length - 1; i++) {
                             let item = icalObj[i];
          
                             let calendarName = item._class.split(' ')[0].replace('ical_', '');
          
                             // Objekt für Tabelle erzeugen
                             calList.push({
                                 farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                 zeit: item.date,
                                 termin: item.event,
                                 kalender: calendarName,
                                 timestamp: Date.parse(item._date)
                             })
                         }
                     }
                 }
          
                 // Liste sort by timestamp asc
                 calList.sort(function (a, b) {
                     return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                 });
          
                 // Enter the destination data point that is to be used as object ID in the widget
                 setState(datapointId, JSON.stringify(calList), true);
          
                 function getMyCalendarColor(calendarName) {
                     // assign colors via the calendar names, use calendar name as set in ical
                             if (calendarName === 'LORENZ') {
                                 return '#407f88';
                             } else if (calendarName === 'Schiedsrichter') {
                                 return '#008080'
                             } else if (calendarName === 'SCBV') {
                                 return '#5a885d'
                             }
                 }
          
             } catch (e) {
                 console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
             }
         }
          
         ical2TableWidget_2();
      
      }
      
      // Beschreibe diese Funktion …
      async function tbl_FRANZI() {
         
         var instances = $(`[id=ical.8.data.table]`);
         instances.on(ical2TableWidget_3);
         
         // remove this, if you know to use your own datapoint
         let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_3'
             createState(datapointId, "[]", {
                 read: true, 
                 write: false, 
                 desc: "JSON String for MDW TABLE Widget", 
                 type: "string", 
                 def: "[]"
             });
          
         function ical2TableWidget_3() {
             try {
                 let calList = [];
          
                 for (var inst = 0; inst <= instances.length - 1; inst++) {
                     let icalObj = getState(instances[inst]).val;
          
                     if (icalObj) {
                         for (var i = 0; i <= icalObj.length - 1; i++) {
                             let item = icalObj[i];
          
                             let calendarName = item._class.split(' ')[0].replace('ical_', '');
          
                             // Objekt für Tabelle erzeugen
                             calList.push({
                                 farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                 zeit: item.date,
                                 termin: item.event,
                                 kalender: calendarName,
                                 timestamp: Date.parse(item._date)
                             })
                         }
                     }
                 }
          
                 // Liste sort by timestamp asc
                 calList.sort(function (a, b) {
                     return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                 });
          
                 // Enter the destination data point that is to be used as object ID in the widget
                 setState(datapointId, JSON.stringify(calList), true);
          
                 function getMyCalendarColor(calendarName) {
                     // assign colors via the calendar names, use calendar name as set in ical
                      if (calendarName === 'FRANZI') {
                                 return '#44739e';
                             } else if (calendarName === 'Schiedsrichter') {
                                 return '#008080'
                             } else if (calendarName === 'SCBV') {
                                 return '#5a885d'
                             }
                 }
          
             } catch (e) {
                 console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
             }
         }
          
         ical2TableWidget_3();
      
      }
      
      // Beschreibe diese Funktion …
      async function tbl_ALLE() {
         
         var instances = $(`[id=ical.9.data.table]`);
         instances.on(ical2TableWidget_4);
         
         // remove this, if you know to use your own datapoint
         let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_4'
             createState(datapointId, "[]", {
                 read: true, 
                 write: false, 
                 desc: "JSON String for MDW TABLE Widget", 
                 type: "string", 
                 def: "[]"
             });
          
         function ical2TableWidget_4() {
             try {
                 let calList = [];
          
                 for (var inst = 0; inst <= instances.length - 1; inst++) {
                     let icalObj = getState(instances[inst]).val;
          
                     if (icalObj) {
                         for (var i = 0; i <= icalObj.length - 1; i++) {
                             let item = icalObj[i];
          
                             let calendarName = item._class.split(' ')[0].replace('ical_', '');
          
                             // Objekt für Tabelle erzeugen
                             calList.push({
                                 farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                 zeit: item.date,
                                 termin: item.event,
                                 kalender: calendarName,
                                 timestamp: Date.parse(item._date)
                             })
                         }
                     }
                 }
          
                 // Liste sort by timestamp asc
                 calList.sort(function (a, b) {
                     return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                 });
          
                 // Enter the destination data point that is to be used as object ID in the widget
                 setState(datapointId, JSON.stringify(calList), true);
          
                 function getMyCalendarColor(calendarName) {
                     // assign colors via the calendar names, use calendar name as set in ical
                      if (calendarName === 'PAPA') {
                                 return '#44739e';
                             } else if (calendarName === 'Schiedsrichter') {
                                 return '#000000'
                             } else if (calendarName === 'PAPA SCBV') {
                                 return '#5a885d'
                             } else if (calendarName === 'MAMA') {
                                 return '#835d85'
                             } else if (calendarName === 'FRANZI') {
                                 return '#848f53'
                             } else if (calendarName === 'LORENZ') {
                                 return '#008080'
                             } else if (calendarName === 'FAMILY') {
                                 return '#F88c2b'
                             }
                 }
          
             } catch (e) {
                 console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
             }
         }
          
         ical2TableWidget_4();
      
      }
      
      
      schedule1 = schedule('*/5 * * * *', async () => {
       await tbl_PAPA();
       await wait(5000);
       await tbl_MAMA();
       await wait(5000);
       await tbl_LORENZ();
       await wait(5000);
       await tbl_FRANZI();
       await wait(5000);
       await tbl_ALLE();
       console.info('CAL_TBL_UPDATE');
      });
      
      //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJjcm9uJTIyJTIwaWQlM0QlMjJzY2hlZHVsZTElMjIlM0VzY2hlZHVsZTElM0MlMkZ2YXJpYWJsZSUzRSUzQyUyRnZhcmlhYmxlcyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnNjaGVkdWxlX2NyZWF0ZSUyMiUyMGlkJTNEJTIyKSU1QiU3RHF3UExGSy1oZWE1bCU3QkF5UlUlMjIlMjB4JTNEJTIyMTEzJTIyJTIweSUzRCUyMjYyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXNjaGVkdWxlMSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyU0NIRURVTEUlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyMH4lNDBxdWMlM0ZjVHduJTVFbFRhLSUzRllJaCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNST04lMjIlM0UqJTIwKiUyMColMjAqJTIwKiUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyJTVEJTNGNzF0QSUzQiUyNX51akF4VCUyQmQlNUJUeEQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDUk9OJTIyJTNFKiUyRjUlMjAqJTIwKiUyMColMjAqJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlNUVQNkUzWWIlM0FnMFZUcE0lN0MlMkZzOGgyJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX1BBUEElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJpdyU0MCFDT3U1NCUyQ2klM0ExeSUzRm1QRCU3QyU1RCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkRFTEFZJTIyJTNFNSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVU5JVCUyMiUzRXNlYyUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlN0NuJTJGejhxJTYwcURGJTJCbFJBV0MlN0N+JTJGJTdEJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX01BTUElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJmdnpZfiEuQzglM0IlMjMlNURPbGZSJTVFdThWJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVklMjIlM0U1JTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFc2VjJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMiU1QipKcyU2MCUzQlh5bFVDSmE4Z3MwJTdEaWslMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfTE9SRU5aJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfd2FpdCUyMiUyMGlkJTNEJTIydHR1JTI1JTYwT1ZRcFJmcXElN0NDVWt6Y1QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyeVJiYU9GakclMkY0KUFmTDJYNGlyUCUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMnRibF9GUkFOWkklMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjIlM0F1cjN2MSUyM0lEZTVsJTIzSSU0MHU4TyU1RC4lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyRnNuV08lN0RjUlhjV0JYdEUlNjBTeCUzQmMlMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfQUxMRSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJaSi5xJTdEfn5xJTVEJTdCJTNGY0ElNURocyU1QiUzRDBkJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VpbmZvJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMkhaNCUyRkxyMSU3QzIuJTNCfk4lNUJQR0ElN0I4JTdEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUNBTF9UQkxfVVBEQVRFJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZmN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJfenItRyhQdHljVjZVbCUyRkdFcWIlN0MlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjIzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX1BBUEElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTUNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpBb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0owMXBZMmhoWld3bktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh3S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyMCU1RCUzRGsyRkklMkNVMllaUFlnOTBGa3UlMjIlMjB4JTNEJTIyMzEyJTIyJTIweSUzRCUyMjI4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX01BTUElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOaTVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTVNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1TY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQzh2SUdGemMybG5iaUJqYjJ4dmNuTWdkbWxoSUhSb1pTQmpZV3hsYm1SaGNpQnVZVzFsY3l3Z2RYTmxJR05oYkdWdVpHRnlJRzVoYldVZ1lYTWdjMlYwSUdsdUlHbGpZV3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMDFCVFVFbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaRlNVVlNWRUZIUlNjcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmUTBLSUNBZ0lDQWdJQ0I5RFFvZ0RRb2dJQ0FnZlNCallYUmphQ0FvWlNrZ2V3MEtJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dCcFkyRnNNazFoZEdWeWFXRnNSR1Z6YVdkdVZHRmliR1ZYYVdSblpYUTZJRzFsYzNOaFoyVTZJQ1I3WlM1dFpYTnpZV2RsZlN3Z2MzUmhZMnM2SUNSN1pTNXpkR0ZqYTMxZ0tUc05DaUFnSUNCOURRcDlEUW9nRFFwcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tUc05DZyUzRCUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyJTJCJTVFZy0lNUJxOGlBJTIza2MwSy5NVGR4QyUyMiUyMHglM0QlMjIzMTIlMjIlMjB5JTNEJTIyMzM4JTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V0YmxfTE9SRU5aJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VEUXAyWVhJZ2FXNXpkR0Z1WTJWeklEMGdKQ2hnVzJsa1BXbGpZV3d1Tnk1a1lYUmhMblJoWW14bFhXQXBPdzBLYVc1emRHRnVZMlZ6TG05dUtHbGpZV3d5VkdGaWJHVlhhV1JuWlhSZk1pazdEUW9OQ2k4dklISmxiVzkyWlNCMGFHbHpMQ0JwWmlCNWIzVWdhMjV2ZHlCMGJ5QjFjMlVnZVc5MWNpQnZkMjRnWkdGMFlYQnZhVzUwRFFwc1pYUWdaR0YwWVhCdmFXNTBTV1FnUFNBbk1GOTFjMlZ5WkdGMFlTNHdMa05oYkdWdVpHRnlMa3RoYkdWdVpHVnlMa3BUVDA1ZlRFbFRWRjlOUkZkRFFVeGZNaWNOQ2lBZ0lDQmpjbVZoZEdWVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z0lsdGRJaXdnZXcwS0lDQWdJQ0FnSUNCeVpXRmtPaUIwY25WbExDQU5DaUFnSUNBZ0lDQWdkM0pwZEdVNklHWmhiSE5sTENBTkNpQWdJQ0FnSUNBZ1pHVnpZem9nSWtwVFQwNGdVM1J5YVc1bklHWnZjaUJOUkZjZ1ZFRkNURVVnVjJsa1oyVjBJaXdnRFFvZ0lDQWdJQ0FnSUhSNWNHVTZJQ0p6ZEhKcGJtY2lMQ0FOQ2lBZ0lDQWdJQ0FnWkdWbU9pQWlXMTBpRFFvZ0lDQWdmU2s3RFFvZ0RRcG1kVzVqZEdsdmJpQnBZMkZzTWxSaFlteGxWMmxrWjJWMFh6SW9LU0I3RFFvZ0lDQWdkSEo1SUhzTkNpQWdJQ0FnSUNBZ2JHVjBJR05oYkV4cGMzUWdQU0JiWFRzTkNpQU5DaUFnSUNBZ0lDQWdabTl5SUNoMllYSWdhVzV6ZENBOUlEQTdJR2x1YzNRZ1BEMGdhVzV6ZEdGdVkyVnpMbXhsYm1kMGFDQXRJREU3SUdsdWMzUXJLeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsallXeFBZbW9nUFNCblpYUlRkR0YwWlNocGJuTjBZVzVqWlhOYmFXNXpkRjBwTG5aaGJEc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwWTJGc1QySnFLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUEQwZ2FXTmhiRTlpYWk1c1pXNW5kR2dnTFNBeE95QnBLeXNwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsMFpXMGdQU0JwWTJGc1QySnFXMmxkT3cwS0lBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyRnNaVzVrWVhKT1lXMWxJRDBnYVhSbGJTNWZZMnhoYzNNdWMzQnNhWFFvSnlBbktWc3dYUzV5WlhCc1lXTmxLQ2RwWTJGc1h5Y3NJQ2NuS1RzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1QySnFaV3QwSUdiRHZISWdWR0ZpWld4c1pTQmxjbnBsZFdkbGJnMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVd4TWFYTjBMbkIxYzJnb2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnlZbVU2SUdBOFpHbDJJSE4wZVd4bFBTSmlZV05yWjNKdmRXNWtPaUFrZTJkbGRFMTVRMkZzWlc1a1lYSkRiMnh2Y2loallXeGxibVJoY2s1aGJXVXBmVHNnZDJsa2RHZzZJRFp3ZURzZ2FHVnBaMmgwT2lBeU1IQjRJajQ4TDJScGRqNWdMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlbVZwZERvZ2FYUmxiUzVrWVhSbExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHVnliV2x1T2lCcGRHVnRMbVYyWlc1MExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyRnNaVzVrWlhJNklHTmhiR1Z1WkdGeVRtRnRaU3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJwYldWemRHRnRjRG9nUkdGMFpTNXdZWEp6WlNocGRHVnRMbDlrWVhSbEtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnZlEwS0lBMEtJQ0FnSUNBZ0lDQXZMeUJNYVhOMFpTQnpiM0owSUdKNUlIUnBiV1Z6ZEdGdGNDQmhjMk1OQ2lBZ0lDQWdJQ0FnWTJGc1RHbHpkQzV6YjNKMEtHWjFibU4wYVc5dUlDaGhMQ0JpS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZUzUwYVcxbGMzUmhiWEFnUFQwZ1lpNTBhVzFsYzNSaGJYQWdQeUF3SURvZ0t5aGhMblJwYldWemRHRnRjQ0ElMkJJR0l1ZEdsdFpYTjBZVzF3S1NCOGZDQXRNVHNOQ2lBZ0lDQWdJQ0FnZlNrN0RRb2dEUW9nSUNBZ0lDQWdJQzh2SUVWdWRHVnlJSFJvWlNCa1pYTjBhVzVoZEdsdmJpQmtZWFJoSUhCdmFXNTBJSFJvWVhRZ2FYTWdkRzhnWW1VZ2RYTmxaQ0JoY3lCdlltcGxZM1FnU1VRZ2FXNGdkR2hsSUhkcFpHZGxkQTBLSUNBZ0lDQWdJQ0J6WlhSVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z1NsTlBUaTV6ZEhKcGJtZHBabmtvWTJGc1RHbHpkQ2tzSUhSeWRXVXBPdzBLSUEwS0lDQWdJQ0FnSUNCbWRXNWpkR2x2YmlCblpYUk5lVU5oYkdWdVpHRnlRMjlzYjNJb1kyRnNaVzVrWVhKT1lXMWxLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJoYzNOcFoyNGdZMjlzYjNKeklIWnBZU0IwYUdVZ1kyRnNaVzVrWVhJZ2JtRnRaWE1zSUhWelpTQmpZV3hsYm1SaGNpQnVZVzFsSUdGeklITmxkQ0JwYmlCcFkyRnNEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBNRGRtT0Rnbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh5S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyUCUzQVdhTVUlMjMlMjQxX2VaVyU3Q0QlNUVkJTYwV3glMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjM4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0ZSQU5aSSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFRFFwMllYSWdhVzV6ZEdGdVkyVnpJRDBnSkNoZ1cybGtQV2xqWVd3dU9DNWtZWFJoTG5SaFlteGxYV0FwT3cwS2FXNXpkR0Z1WTJWekxtOXVLR2xqWVd3eVZHRmliR1ZYYVdSblpYUmZNeWs3RFFvTkNpOHZJSEpsYlc5MlpTQjBhR2x6TENCcFppQjViM1VnYTI1dmR5QjBieUIxYzJVZ2VXOTFjaUJ2ZDI0Z1pHRjBZWEJ2YVc1MERRcHNaWFFnWkdGMFlYQnZhVzUwU1dRZ1BTQW5NRjkxYzJWeVpHRjBZUzR3TGtOaGJHVnVaR0Z5TGt0aGJHVnVaR1Z5TGtwVFQwNWZURWxUVkY5TlJGZERRVXhmTXljTkNpQWdJQ0JqY21WaGRHVlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dJbHRkSWl3Z2V3MEtJQ0FnSUNBZ0lDQnlaV0ZrT2lCMGNuVmxMQ0FOQ2lBZ0lDQWdJQ0FnZDNKcGRHVTZJR1poYkhObExDQU5DaUFnSUNBZ0lDQWdaR1Z6WXpvZ0lrcFRUMDRnVTNSeWFXNW5JR1p2Y2lCTlJGY2dWRUZDVEVVZ1YybGtaMlYwSWl3Z0RRb2dJQ0FnSUNBZ0lIUjVjR1U2SUNKemRISnBibWNpTENBTkNpQWdJQ0FnSUNBZ1pHVm1PaUFpVzEwaURRb2dJQ0FnZlNrN0RRb2dEUXBtZFc1amRHbHZiaUJwWTJGc01sUmhZbXhsVjJsa1oyVjBYek1vS1NCN0RRb2dJQ0FnZEhKNUlIc05DaUFnSUNBZ0lDQWdiR1YwSUdOaGJFeHBjM1FnUFNCYlhUc05DaUFOQ2lBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVc1emRDQTlJREE3SUdsdWMzUWdQRDBnYVc1emRHRnVZMlZ6TG14bGJtZDBhQ0F0SURFN0lHbHVjM1FyS3lrZ2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbGpZV3hQWW1vZ1BTQm5aWFJUZEdGMFpTaHBibk4wWVc1alpYTmJhVzV6ZEYwcExuWmhiRHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocFkyRnNUMkpxS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BEMGdhV05oYkU5aWFpNXNaVzVuZEdnZ0xTQXhPeUJwS3lzcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbDBaVzBnUFNCcFkyRnNUMkpxVzJsZE93MEtJQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdZMkZzWlc1a1lYSk9ZVzFsSUQwZ2FYUmxiUzVmWTJ4aGMzTXVjM0JzYVhRb0p5QW5LVnN3WFM1eVpYQnNZV05sS0NkcFkyRnNYeWNzSUNjbktUc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUMkpxWld0MElHYkR2SElnVkdGaVpXeHNaU0JsY25wbGRXZGxiZzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallXeE1hWE4wTG5CMWMyZ29ldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZ5WW1VNklHQThaR2wySUhOMGVXeGxQU0ppWVdOclozSnZkVzVrT2lBa2UyZGxkRTE1UTJGc1pXNWtZWEpEYjJ4dmNpaGpZV3hsYm1SaGNrNWhiV1VwZlRzZ2QybGtkR2c2SURad2VEc2dhR1ZwWjJoME9pQXlNSEI0SWo0OEwyUnBkajVnTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZW1WcGREb2dhWFJsYlM1a1lYUmxMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR1Z5YldsdU9pQnBkR1Z0TG1WMlpXNTBMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMkZzWlc1a1pYSTZJR05oYkdWdVpHRnlUbUZ0WlN3TkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGJXVnpkR0Z0Y0RvZ1JHRjBaUzV3WVhKelpTaHBkR1Z0TGw5a1lYUmxLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ2ZRMEtJQTBLSUNBZ0lDQWdJQ0F2THlCTWFYTjBaU0J6YjNKMElHSjVJSFJwYldWemRHRnRjQ0JoYzJNTkNpQWdJQ0FnSUNBZ1kyRnNUR2x6ZEM1emIzSjBLR1oxYm1OMGFXOXVJQ2hoTENCaUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVM1MGFXMWxjM1JoYlhBZ1BUMGdZaTUwYVcxbGMzUmhiWEFnUHlBd0lEb2dLeWhoTG5ScGJXVnpkR0Z0Y0NBJTJCSUdJdWRHbHRaWE4wWVcxd0tTQjhmQ0F0TVRzTkNpQWdJQ0FnSUNBZ2ZTazdEUW9nRFFvZ0lDQWdJQ0FnSUM4dklFVnVkR1Z5SUhSb1pTQmtaWE4wYVc1aGRHbHZiaUJrWVhSaElIQnZhVzUwSUhSb1lYUWdhWE1nZEc4Z1ltVWdkWE5sWkNCaGN5QnZZbXBsWTNRZ1NVUWdhVzRnZEdobElIZHBaR2RsZEEwS0lDQWdJQ0FnSUNCelpYUlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dTbE5QVGk1emRISnBibWRwWm5rb1kyRnNUR2x6ZENrc0lIUnlkV1VwT3cwS0lBMEtJQ0FnSUNBZ0lDQm1kVzVqZEdsdmJpQm5aWFJOZVVOaGJHVnVaR0Z5UTI5c2IzSW9ZMkZzWlc1a1lYSk9ZVzFsS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0F2THlCaGMzTnBaMjRnWTI5c2IzSnpJSFpwWVNCMGFHVWdZMkZzWlc1a1lYSWdibUZ0WlhNc0lIVnpaU0JqWVd4bGJtUmhjaUJ1WVcxbElHRnpJSE5sZENCcGJpQnBZMkZzRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpRME56TTVaU2M3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMkZzWlc1a1lYSk9ZVzFsSUQwOVBTQW5VMk5vYVdWa2MzSnBZMmgwWlhJbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuVTBOQ1ZpY3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5JelZoT0RnMVpDY05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlEwS0lDQWdJQ0FnSUNCOURRb2dEUW9nSUNBZ2ZTQmpZWFJqYUNBb1pTa2dldzBLSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtHQnBZMkZzTWsxaGRHVnlhV0ZzUkdWemFXZHVWR0ZpYkdWWGFXUm5aWFE2SUcxbGMzTmhaMlU2SUNSN1pTNXRaWE56WVdkbGZTd2djM1JoWTJzNklDUjdaUzV6ZEdGamEzMWdLVHNOQ2lBZ0lDQjlEUXA5RFFvZ0RRcHBZMkZzTWxSaFlteGxWMmxrWjJWMFh6TW9LVHNOQ2clM0QlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMnhodFByNWZDci5zdkh1JTNEKXZIemIlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjQzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0FMTEUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VPUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTkNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk5DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpRb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxQkJVRUVuS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNME5EY3pPV1VuT3cwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMU5qYUdsbFpITnlhV05vZEdWeUp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pNREF3TURBd0p3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFCQlVFRWdVME5DVmljcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hqWVd4bGJtUmhjazVoYldVZ1BUMDlJQ2ROUVUxQkp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pPRE0xWkRnMUp3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpnME9HWTFNeWNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuUmtGTlNVeFpKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqUmpnNFl6SmlKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOURRb2dJQ0FnSUNBZ0lIME5DaUFOQ2lBZ0lDQjlJR05oZEdOb0lDaGxLU0I3RFFvZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9ZR2xqWVd3eVRXRjBaWEpwWVd4RVpYTnBaMjVVWVdKc1pWZHBaR2RsZERvZ2JXVnpjMkZuWlRvZ0pIdGxMbTFsYzNOaFoyVjlMQ0J6ZEdGamF6b2dKSHRsTG5OMFlXTnJmV0FwT3cwS0lDQWdJSDBOQ24wTkNpQU5DbWxqWVd3eVZHRmliR1ZYYVdSblpYUmZOQ2dwT3cwSyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
      

      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @mottimuc sagte in More than 100 subscriptions listed... ?? Woher?:

      also alle 5 minuten werden die diverse funktionen aufgerufen
      in jeder funktion wird per selektor diverse datenpunkte ermittelt
      und für jeden datenpunkt wird ein neuer trigger erzeugt.

      d.h. alle 5 minuten vergrößert sich die anzahl der trigger und es sind immer die selbe anzahl von datenpunkte die dazukommen.

      du solltest dich entscheiden, ob du alle 5 minuten per schedule das skript ablaufen läst, die werte abrufst und dann aktionen ausführen (pull-prinzip)
      oder
      ob du einmalig die trigger erzeugst und darauf waren, bis iobroker dich über änderung der datenpunkte informiert (alles was dann innerhalb der on funktion abläuft.

      jetzt vermischt du beide konzepte und erzeugst einfach nur alle 5 minuten neue trigger, die dann natürlich auch alle aufgerufen werden, wenn sich was ändert

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      1 Antwort Letzte Antwort
      2
      • M Mottimuc

        Hallo zusammen,

        im Log warn mich IOBroker, dass ich ein Script habe, welches > 100 subscriptions haben soll:

        	script.js.CALENDAR_SCRIPTE.Kalender.ICAL_2_LIST_KONVERTER: More than 105 subscriptions registered. Check your script
        

        Ich hatte den Begriff subscription auf "wenn sich Status des Datenpunkt xyz ändert" Verstanden, also ein Überwachen eines Datenpunktes. in Dem Script läuft aber m.E. nach alle 5 Min ein Script, welches aus einem ICAL Feld ein JSON für ein MDW Widget macht...

        ? Was tun?

        Hier das Script

        var schedule1;
        
        // Beschreibe diese Funktion …
        async function tbl_PAPA() {
           
           var instances = $(`[id=ical.5.data.table]`);
           instances.on(ical2TableWidget_0);
           
           // remove this, if you know to use your own datapoint
           let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_0'
               createState(datapointId, "[]", {
                   read: true, 
                   write: false, 
                   desc: "JSON String for MDW TABLE Widget", 
                   type: "string", 
                   def: "[]"
               });
            
           function ical2TableWidget_0() {
               try {
                   let calList = [];
            
                   for (var inst = 0; inst <= instances.length - 1; inst++) {
                       let icalObj = getState(instances[inst]).val;
            
                       if (icalObj) {
                           for (var i = 0; i <= icalObj.length - 1; i++) {
                               let item = icalObj[i];
            
                               let calendarName = item._class.split(' ')[0].replace('ical_', '');
            
                               // Objekt für Tabelle erzeugen
                               calList.push({
                                   farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                   zeit: item.date,
                                   termin: item.event,
                                   kalender: calendarName,
                                   timestamp: Date.parse(item._date)
                               })
                           }
                       }
                   }
            
                   // Liste sort by timestamp asc
                   calList.sort(function (a, b) {
                       return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                   });
            
                   // Enter the destination data point that is to be used as object ID in the widget
                   setState(datapointId, JSON.stringify(calList), true);
            
                   function getMyCalendarColor(calendarName) {
                       // assign colors via the calendar names, use calendar name as set in ical
                        if (calendarName === 'Michael') {
                                   return '#44739e';
                               } else if (calendarName === 'Schiedsrichter') {
                                   return '#008080'
                               } else if (calendarName === 'SCBV') {
                                   return '#5a885d'
                               }
                   }
            
               } catch (e) {
                   console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
               }
           }
            
           ical2TableWidget_0();
        
        }
        
        // Beschreibe diese Funktion …
        async function tbl_MAMA() {
           
           var instances = $(`[id=ical.6.data.table]`);
           instances.on(ical2TableWidget_1);
           
           // remove this, if you know to use your own datapoint
           let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_1'
               createState(datapointId, "[]", {
                   read: true, 
                   write: false, 
                   desc: "JSON String for MDW TABLE Widget", 
                   type: "string", 
                   def: "[]"
               });
            
           function ical2TableWidget_1() {
               try {
                   let calList = [];
            
                   for (var inst = 0; inst <= instances.length - 1; inst++) {
                       let icalObj = getState(instances[inst]).val;
            
                       if (icalObj) {
                           for (var i = 0; i <= icalObj.length - 1; i++) {
                               let item = icalObj[i];
            
                               let calendarName = item._class.split(' ')[0].replace('ical_', '');
            
                               // Objekt für Tabelle erzeugen
                               calList.push({
                                   farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                   zeit: item.date,
                                   termin: item.event,
                                   kalender: calendarName,
                                   timestamp: Date.parse(item._date)
                               })
                           }
                       }
                   }
            
                   // Liste sort by timestamp asc
                   calList.sort(function (a, b) {
                       return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                   });
            
                   // Enter the destination data point that is to be used as object ID in the widget
                   setState(datapointId, JSON.stringify(calList), true);
            
                   function getMyCalendarColor(calendarName) {
                   // assign colors via the calendar names, use calendar name as set in ical
                               if (calendarName === 'MAMA') {
                                   return '#44739e';
                               } else if (calendarName === 'FEIERTAGE') {
                                   return '#5a885d'
                               }
                   }
            
               } catch (e) {
                   console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
               }
           }
            
           ical2TableWidget_1();
        
        }
        
        // Beschreibe diese Funktion …
        async function tbl_LORENZ() {
           
           var instances = $(`[id=ical.7.data.table]`);
           instances.on(ical2TableWidget_2);
           
           // remove this, if you know to use your own datapoint
           let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_2'
               createState(datapointId, "[]", {
                   read: true, 
                   write: false, 
                   desc: "JSON String for MDW TABLE Widget", 
                   type: "string", 
                   def: "[]"
               });
            
           function ical2TableWidget_2() {
               try {
                   let calList = [];
            
                   for (var inst = 0; inst <= instances.length - 1; inst++) {
                       let icalObj = getState(instances[inst]).val;
            
                       if (icalObj) {
                           for (var i = 0; i <= icalObj.length - 1; i++) {
                               let item = icalObj[i];
            
                               let calendarName = item._class.split(' ')[0].replace('ical_', '');
            
                               // Objekt für Tabelle erzeugen
                               calList.push({
                                   farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                   zeit: item.date,
                                   termin: item.event,
                                   kalender: calendarName,
                                   timestamp: Date.parse(item._date)
                               })
                           }
                       }
                   }
            
                   // Liste sort by timestamp asc
                   calList.sort(function (a, b) {
                       return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                   });
            
                   // Enter the destination data point that is to be used as object ID in the widget
                   setState(datapointId, JSON.stringify(calList), true);
            
                   function getMyCalendarColor(calendarName) {
                       // assign colors via the calendar names, use calendar name as set in ical
                               if (calendarName === 'LORENZ') {
                                   return '#407f88';
                               } else if (calendarName === 'Schiedsrichter') {
                                   return '#008080'
                               } else if (calendarName === 'SCBV') {
                                   return '#5a885d'
                               }
                   }
            
               } catch (e) {
                   console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
               }
           }
            
           ical2TableWidget_2();
        
        }
        
        // Beschreibe diese Funktion …
        async function tbl_FRANZI() {
           
           var instances = $(`[id=ical.8.data.table]`);
           instances.on(ical2TableWidget_3);
           
           // remove this, if you know to use your own datapoint
           let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_3'
               createState(datapointId, "[]", {
                   read: true, 
                   write: false, 
                   desc: "JSON String for MDW TABLE Widget", 
                   type: "string", 
                   def: "[]"
               });
            
           function ical2TableWidget_3() {
               try {
                   let calList = [];
            
                   for (var inst = 0; inst <= instances.length - 1; inst++) {
                       let icalObj = getState(instances[inst]).val;
            
                       if (icalObj) {
                           for (var i = 0; i <= icalObj.length - 1; i++) {
                               let item = icalObj[i];
            
                               let calendarName = item._class.split(' ')[0].replace('ical_', '');
            
                               // Objekt für Tabelle erzeugen
                               calList.push({
                                   farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                   zeit: item.date,
                                   termin: item.event,
                                   kalender: calendarName,
                                   timestamp: Date.parse(item._date)
                               })
                           }
                       }
                   }
            
                   // Liste sort by timestamp asc
                   calList.sort(function (a, b) {
                       return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                   });
            
                   // Enter the destination data point that is to be used as object ID in the widget
                   setState(datapointId, JSON.stringify(calList), true);
            
                   function getMyCalendarColor(calendarName) {
                       // assign colors via the calendar names, use calendar name as set in ical
                        if (calendarName === 'FRANZI') {
                                   return '#44739e';
                               } else if (calendarName === 'Schiedsrichter') {
                                   return '#008080'
                               } else if (calendarName === 'SCBV') {
                                   return '#5a885d'
                               }
                   }
            
               } catch (e) {
                   console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
               }
           }
            
           ical2TableWidget_3();
        
        }
        
        // Beschreibe diese Funktion …
        async function tbl_ALLE() {
           
           var instances = $(`[id=ical.9.data.table]`);
           instances.on(ical2TableWidget_4);
           
           // remove this, if you know to use your own datapoint
           let datapointId = '0_userdata.0.Calendar.Kalender.JSON_LIST_MDWCAL_4'
               createState(datapointId, "[]", {
                   read: true, 
                   write: false, 
                   desc: "JSON String for MDW TABLE Widget", 
                   type: "string", 
                   def: "[]"
               });
            
           function ical2TableWidget_4() {
               try {
                   let calList = [];
            
                   for (var inst = 0; inst <= instances.length - 1; inst++) {
                       let icalObj = getState(instances[inst]).val;
            
                       if (icalObj) {
                           for (var i = 0; i <= icalObj.length - 1; i++) {
                               let item = icalObj[i];
            
                               let calendarName = item._class.split(' ')[0].replace('ical_', '');
            
                               // Objekt für Tabelle erzeugen
                               calList.push({
                                   farbe: `<div style="background: ${getMyCalendarColor(calendarName)}; width: 6px; height: 20px"></div>`,
                                   zeit: item.date,
                                   termin: item.event,
                                   kalender: calendarName,
                                   timestamp: Date.parse(item._date)
                               })
                           }
                       }
                   }
            
                   // Liste sort by timestamp asc
                   calList.sort(function (a, b) {
                       return a.timestamp == b.timestamp ? 0 : +(a.timestamp > b.timestamp) || -1;
                   });
            
                   // Enter the destination data point that is to be used as object ID in the widget
                   setState(datapointId, JSON.stringify(calList), true);
            
                   function getMyCalendarColor(calendarName) {
                       // assign colors via the calendar names, use calendar name as set in ical
                        if (calendarName === 'PAPA') {
                                   return '#44739e';
                               } else if (calendarName === 'Schiedsrichter') {
                                   return '#000000'
                               } else if (calendarName === 'PAPA SCBV') {
                                   return '#5a885d'
                               } else if (calendarName === 'MAMA') {
                                   return '#835d85'
                               } else if (calendarName === 'FRANZI') {
                                   return '#848f53'
                               } else if (calendarName === 'LORENZ') {
                                   return '#008080'
                               } else if (calendarName === 'FAMILY') {
                                   return '#F88c2b'
                               }
                   }
            
               } catch (e) {
                   console.error(`ical2MaterialDesignTableWidget: message: ${e.message}, stack: ${e.stack}`);
               }
           }
            
           ical2TableWidget_4();
        
        }
        
        
        schedule1 = schedule('*/5 * * * *', async () => {
         await tbl_PAPA();
         await wait(5000);
         await tbl_MAMA();
         await wait(5000);
         await tbl_LORENZ();
         await wait(5000);
         await tbl_FRANZI();
         await wait(5000);
         await tbl_ALLE();
         console.info('CAL_TBL_UPDATE');
        });
        
        //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJjcm9uJTIyJTIwaWQlM0QlMjJzY2hlZHVsZTElMjIlM0VzY2hlZHVsZTElM0MlMkZ2YXJpYWJsZSUzRSUzQyUyRnZhcmlhYmxlcyUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnNjaGVkdWxlX2NyZWF0ZSUyMiUyMGlkJTNEJTIyKSU1QiU3RHF3UExGSy1oZWE1bCU3QkF5UlUlMjIlMjB4JTNEJTIyMTEzJTIyJTIweSUzRCUyMjYyJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTkFNRSUyMiUzRXNjaGVkdWxlMSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyU0NIRURVTEUlMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyMH4lNDBxdWMlM0ZjVHduJTVFbFRhLSUzRllJaCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNST04lMjIlM0UqJTIwKiUyMColMjAqJTIwKiUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZmllbGRfY3JvbiUyMiUyMGlkJTNEJTIyJTVEJTNGNzF0QSUzQiUyNX51akF4VCUyQmQlNUJUeEQlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJDUk9OJTIyJTNFKiUyRjUlMjAqJTIwKiUyMColMjAqJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlNUVQNkUzWWIlM0FnMFZUcE0lN0MlMkZzOGgyJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX1BBUEElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJpdyU0MCFDT3U1NCUyQ2klM0ExeSUzRm1QRCU3QyU1RCUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkRFTEFZJTIyJTNFNSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVU5JVCUyMiUzRXNlYyUzQyUyRmZpZWxkJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfY2FsbGN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjIlN0NuJTJGejhxJTYwcURGJTJCbFJBV0MlN0N+JTJGJTdEJTIyJTNFJTNDbXV0YXRpb24lMjBuYW1lJTNEJTIydGJsX01BTUElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjJmdnpZfiEuQzglM0IlMjMlNURPbGZSJTVFdThWJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyREVMQVklMjIlM0U1JTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJVTklUJTIyJTNFc2VjJTNDJTJGZmllbGQlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19jYWxsY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMiU1QipKcyU2MCUzQlh5bFVDSmE4Z3MwJTdEaWslMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfTE9SRU5aJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydGltZW91dHNfd2FpdCUyMiUyMGlkJTNEJTIydHR1JTI1JTYwT1ZRcFJmcXElN0NDVWt6Y1QlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyeVJiYU9GakclMkY0KUFmTDJYNGlyUCUyMiUzRSUzQ211dGF0aW9uJTIwbmFtZSUzRCUyMnRibF9GUkFOWkklMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ0aW1lb3V0c193YWl0JTIyJTIwaWQlM0QlMjIlM0F1cjN2MSUyM0lEZTVsJTIzSSU0MHU4TyU1RC4lMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJERUxBWSUyMiUzRTUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlVOSVQlMjIlM0VzZWMlM0MlMkZmaWVsZCUzRSUzQ25leHQlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2NhbGxjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyRnNuV08lN0RjUlhjV0JYdEUlNjBTeCUzQmMlMjIlM0UlM0NtdXRhdGlvbiUyMG5hbWUlM0QlMjJ0YmxfQUxMRSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmRlYnVnJTIyJTIwaWQlM0QlMjJaSi5xJTdEfn5xJTVEJTdCJTNGY0ElNURocyU1QiUzRDBkJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU2V2ZXJpdHklMjIlM0VpbmZvJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJURVhUJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMnRleHQlMjIlMjBpZCUzRCUyMkhaNCUyRkxyMSU3QzIuJTNCfk4lNUJQR0ElN0I4JTdEJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVEVYVCUyMiUzRUNBTF9UQkxfVVBEQVRFJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0NibG9jayUyMHR5cGUlM0QlMjJwcm9jZWR1cmVzX2RlZmN1c3RvbW5vcmV0dXJuJTIyJTIwaWQlM0QlMjJfenItRyhQdHljVjZVbCUyRkdFcWIlN0MlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjIzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX1BBUEElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTUNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpBb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0owMXBZMmhoWld3bktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh3S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyMCU1RCUzRGsyRkklMkNVMllaUFlnOTBGa3UlMjIlMjB4JTNEJTIyMzEyJTIyJTIweSUzRCUyMjI4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX01BTUElM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VOaTVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTVNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk1TY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQzh2SUdGemMybG5iaUJqYjJ4dmNuTWdkbWxoSUhSb1pTQmpZV3hsYm1SaGNpQnVZVzFsY3l3Z2RYTmxJR05oYkdWdVpHRnlJRzVoYldVZ1lYTWdjMlYwSUdsdUlHbGpZV3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMDFCVFVFbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBORGN6T1dVbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaRlNVVlNWRUZIUlNjcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmUTBLSUNBZ0lDQWdJQ0I5RFFvZ0RRb2dJQ0FnZlNCallYUmphQ0FvWlNrZ2V3MEtJQ0FnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dCcFkyRnNNazFoZEdWeWFXRnNSR1Z6YVdkdVZHRmliR1ZYYVdSblpYUTZJRzFsYzNOaFoyVTZJQ1I3WlM1dFpYTnpZV2RsZlN3Z2MzUmhZMnM2SUNSN1pTNXpkR0ZqYTMxZ0tUc05DaUFnSUNCOURRcDlEUW9nRFFwcFkyRnNNbFJoWW14bFYybGtaMlYwWHpFb0tUc05DZyUzRCUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyJTJCJTVFZy0lNUJxOGlBJTIza2MwSy5NVGR4QyUyMiUyMHglM0QlMjIzMTIlMjIlMjB5JTNEJTIyMzM4JTIyJTNFJTNDbXV0YXRpb24lMjBzdGF0ZW1lbnRzJTNEJTIyZmFsc2UlMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0V0YmxfTE9SRU5aJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJTQ1JJUFQlMjIlM0VEUXAyWVhJZ2FXNXpkR0Z1WTJWeklEMGdKQ2hnVzJsa1BXbGpZV3d1Tnk1a1lYUmhMblJoWW14bFhXQXBPdzBLYVc1emRHRnVZMlZ6TG05dUtHbGpZV3d5VkdGaWJHVlhhV1JuWlhSZk1pazdEUW9OQ2k4dklISmxiVzkyWlNCMGFHbHpMQ0JwWmlCNWIzVWdhMjV2ZHlCMGJ5QjFjMlVnZVc5MWNpQnZkMjRnWkdGMFlYQnZhVzUwRFFwc1pYUWdaR0YwWVhCdmFXNTBTV1FnUFNBbk1GOTFjMlZ5WkdGMFlTNHdMa05oYkdWdVpHRnlMa3RoYkdWdVpHVnlMa3BUVDA1ZlRFbFRWRjlOUkZkRFFVeGZNaWNOQ2lBZ0lDQmpjbVZoZEdWVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z0lsdGRJaXdnZXcwS0lDQWdJQ0FnSUNCeVpXRmtPaUIwY25WbExDQU5DaUFnSUNBZ0lDQWdkM0pwZEdVNklHWmhiSE5sTENBTkNpQWdJQ0FnSUNBZ1pHVnpZem9nSWtwVFQwNGdVM1J5YVc1bklHWnZjaUJOUkZjZ1ZFRkNURVVnVjJsa1oyVjBJaXdnRFFvZ0lDQWdJQ0FnSUhSNWNHVTZJQ0p6ZEhKcGJtY2lMQ0FOQ2lBZ0lDQWdJQ0FnWkdWbU9pQWlXMTBpRFFvZ0lDQWdmU2s3RFFvZ0RRcG1kVzVqZEdsdmJpQnBZMkZzTWxSaFlteGxWMmxrWjJWMFh6SW9LU0I3RFFvZ0lDQWdkSEo1SUhzTkNpQWdJQ0FnSUNBZ2JHVjBJR05oYkV4cGMzUWdQU0JiWFRzTkNpQU5DaUFnSUNBZ0lDQWdabTl5SUNoMllYSWdhVzV6ZENBOUlEQTdJR2x1YzNRZ1BEMGdhVzV6ZEdGdVkyVnpMbXhsYm1kMGFDQXRJREU3SUdsdWMzUXJLeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsallXeFBZbW9nUFNCblpYUlRkR0YwWlNocGJuTjBZVzVqWlhOYmFXNXpkRjBwTG5aaGJEc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hwWTJGc1QySnFLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVNBOUlEQTdJR2tnUEQwZ2FXTmhiRTlpYWk1c1pXNW5kR2dnTFNBeE95QnBLeXNwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiR1YwSUdsMFpXMGdQU0JwWTJGc1QySnFXMmxkT3cwS0lBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWlhRZ1kyRnNaVzVrWVhKT1lXMWxJRDBnYVhSbGJTNWZZMnhoYzNNdWMzQnNhWFFvSnlBbktWc3dYUzV5WlhCc1lXTmxLQ2RwWTJGc1h5Y3NJQ2NuS1RzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z1QySnFaV3QwSUdiRHZISWdWR0ZpWld4c1pTQmxjbnBsZFdkbGJnMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqWVd4TWFYTjBMbkIxYzJnb2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptRnlZbVU2SUdBOFpHbDJJSE4wZVd4bFBTSmlZV05yWjNKdmRXNWtPaUFrZTJkbGRFMTVRMkZzWlc1a1lYSkRiMnh2Y2loallXeGxibVJoY2s1aGJXVXBmVHNnZDJsa2RHZzZJRFp3ZURzZ2FHVnBaMmgwT2lBeU1IQjRJajQ4TDJScGRqNWdMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlbVZwZERvZ2FYUmxiUzVrWVhSbExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHVnliV2x1T2lCcGRHVnRMbVYyWlc1MExBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2EyRnNaVzVrWlhJNklHTmhiR1Z1WkdGeVRtRnRaU3dOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJwYldWemRHRnRjRG9nUkdGMFpTNXdZWEp6WlNocGRHVnRMbDlrWVhSbEtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5S1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnZlEwS0lBMEtJQ0FnSUNBZ0lDQXZMeUJNYVhOMFpTQnpiM0owSUdKNUlIUnBiV1Z6ZEdGdGNDQmhjMk1OQ2lBZ0lDQWdJQ0FnWTJGc1RHbHpkQzV6YjNKMEtHWjFibU4wYVc5dUlDaGhMQ0JpS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZUzUwYVcxbGMzUmhiWEFnUFQwZ1lpNTBhVzFsYzNSaGJYQWdQeUF3SURvZ0t5aGhMblJwYldWemRHRnRjQ0ElMkJJR0l1ZEdsdFpYTjBZVzF3S1NCOGZDQXRNVHNOQ2lBZ0lDQWdJQ0FnZlNrN0RRb2dEUW9nSUNBZ0lDQWdJQzh2SUVWdWRHVnlJSFJvWlNCa1pYTjBhVzVoZEdsdmJpQmtZWFJoSUhCdmFXNTBJSFJvWVhRZ2FYTWdkRzhnWW1VZ2RYTmxaQ0JoY3lCdlltcGxZM1FnU1VRZ2FXNGdkR2hsSUhkcFpHZGxkQTBLSUNBZ0lDQWdJQ0J6WlhSVGRHRjBaU2hrWVhSaGNHOXBiblJKWkN3Z1NsTlBUaTV6ZEhKcGJtZHBabmtvWTJGc1RHbHpkQ2tzSUhSeWRXVXBPdzBLSUEwS0lDQWdJQ0FnSUNCbWRXNWpkR2x2YmlCblpYUk5lVU5oYkdWdVpHRnlRMjlzYjNJb1kyRnNaVzVrWVhKT1lXMWxLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQXZMeUJoYzNOcFoyNGdZMjlzYjNKeklIWnBZU0IwYUdVZ1kyRnNaVzVrWVhJZ2JtRnRaWE1zSUhWelpTQmpZV3hsYm1SaGNpQnVZVzFsSUdGeklITmxkQ0JwYmlCcFkyRnNEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TTBNRGRtT0Rnbk93MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFOamFHbGxaSE55YVdOb2RHVnlKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqTURBNE1EZ3dKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxTkRRbFluS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNMVlUZzROV1FuRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJSDBnWTJGMFkyZ2dLR1VwSUhzTkNpQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhnYVdOaGJESk5ZWFJsY21saGJFUmxjMmxuYmxSaFlteGxWMmxrWjJWME9pQnRaWE56WVdkbE9pQWtlMlV1YldWemMyRm5aWDBzSUhOMFlXTnJPaUFrZTJVdWMzUmhZMnQ5WUNrN0RRb2dJQ0FnZlEwS2ZRMEtJQTBLYVdOaGJESlVZV0pzWlZkcFpHZGxkRjh5S0NrN0RRbyUzRCUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIycHJvY2VkdXJlc19kZWZjdXN0b21ub3JldHVybiUyMiUyMGlkJTNEJTIyUCUzQVdhTVUlMjMlMjQxX2VaVyU3Q0QlNUVkJTYwV3glMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjM4OCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0ZSQU5aSSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyU0NSSVBUJTIyJTNFRFFwMllYSWdhVzV6ZEdGdVkyVnpJRDBnSkNoZ1cybGtQV2xqWVd3dU9DNWtZWFJoTG5SaFlteGxYV0FwT3cwS2FXNXpkR0Z1WTJWekxtOXVLR2xqWVd3eVZHRmliR1ZYYVdSblpYUmZNeWs3RFFvTkNpOHZJSEpsYlc5MlpTQjBhR2x6TENCcFppQjViM1VnYTI1dmR5QjBieUIxYzJVZ2VXOTFjaUJ2ZDI0Z1pHRjBZWEJ2YVc1MERRcHNaWFFnWkdGMFlYQnZhVzUwU1dRZ1BTQW5NRjkxYzJWeVpHRjBZUzR3TGtOaGJHVnVaR0Z5TGt0aGJHVnVaR1Z5TGtwVFQwNWZURWxUVkY5TlJGZERRVXhmTXljTkNpQWdJQ0JqY21WaGRHVlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dJbHRkSWl3Z2V3MEtJQ0FnSUNBZ0lDQnlaV0ZrT2lCMGNuVmxMQ0FOQ2lBZ0lDQWdJQ0FnZDNKcGRHVTZJR1poYkhObExDQU5DaUFnSUNBZ0lDQWdaR1Z6WXpvZ0lrcFRUMDRnVTNSeWFXNW5JR1p2Y2lCTlJGY2dWRUZDVEVVZ1YybGtaMlYwSWl3Z0RRb2dJQ0FnSUNBZ0lIUjVjR1U2SUNKemRISnBibWNpTENBTkNpQWdJQ0FnSUNBZ1pHVm1PaUFpVzEwaURRb2dJQ0FnZlNrN0RRb2dEUXBtZFc1amRHbHZiaUJwWTJGc01sUmhZbXhsVjJsa1oyVjBYek1vS1NCN0RRb2dJQ0FnZEhKNUlIc05DaUFnSUNBZ0lDQWdiR1YwSUdOaGJFeHBjM1FnUFNCYlhUc05DaUFOQ2lBZ0lDQWdJQ0FnWm05eUlDaDJZWElnYVc1emRDQTlJREE3SUdsdWMzUWdQRDBnYVc1emRHRnVZMlZ6TG14bGJtZDBhQ0F0SURFN0lHbHVjM1FyS3lrZ2V3MEtJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbGpZV3hQWW1vZ1BTQm5aWFJUZEdGMFpTaHBibk4wWVc1alpYTmJhVzV6ZEYwcExuWmhiRHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNocFkyRnNUMkpxS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FTQTlJREE3SUdrZ1BEMGdhV05oYkU5aWFpNXNaVzVuZEdnZ0xTQXhPeUJwS3lzcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYkdWMElHbDBaVzBnUFNCcFkyRnNUMkpxVzJsZE93MEtJQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCc1pYUWdZMkZzWlc1a1lYSk9ZVzFsSUQwZ2FYUmxiUzVmWTJ4aGMzTXVjM0JzYVhRb0p5QW5LVnN3WFM1eVpYQnNZV05sS0NkcFkyRnNYeWNzSUNjbktUc05DaUFOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdUMkpxWld0MElHYkR2SElnVkdGaVpXeHNaU0JsY25wbGRXZGxiZzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCallXeE1hWE4wTG5CMWMyZ29ldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabUZ5WW1VNklHQThaR2wySUhOMGVXeGxQU0ppWVdOclozSnZkVzVrT2lBa2UyZGxkRTE1UTJGc1pXNWtZWEpEYjJ4dmNpaGpZV3hsYm1SaGNrNWhiV1VwZlRzZ2QybGtkR2c2SURad2VEc2dhR1ZwWjJoME9pQXlNSEI0SWo0OEwyUnBkajVnTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZW1WcGREb2dhWFJsYlM1a1lYUmxMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR1Z5YldsdU9pQnBkR1Z0TG1WMlpXNTBMQTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhMkZzWlc1a1pYSTZJR05oYkdWdVpHRnlUbUZ0WlN3TkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGJXVnpkR0Z0Y0RvZ1JHRjBaUzV3WVhKelpTaHBkR1Z0TGw5a1lYUmxLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOUtRMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdJQ0FnSUgwTkNpQWdJQ0FnSUNBZ2ZRMEtJQTBLSUNBZ0lDQWdJQ0F2THlCTWFYTjBaU0J6YjNKMElHSjVJSFJwYldWemRHRnRjQ0JoYzJNTkNpQWdJQ0FnSUNBZ1kyRnNUR2x6ZEM1emIzSjBLR1oxYm1OMGFXOXVJQ2hoTENCaUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWVM1MGFXMWxjM1JoYlhBZ1BUMGdZaTUwYVcxbGMzUmhiWEFnUHlBd0lEb2dLeWhoTG5ScGJXVnpkR0Z0Y0NBJTJCSUdJdWRHbHRaWE4wWVcxd0tTQjhmQ0F0TVRzTkNpQWdJQ0FnSUNBZ2ZTazdEUW9nRFFvZ0lDQWdJQ0FnSUM4dklFVnVkR1Z5SUhSb1pTQmtaWE4wYVc1aGRHbHZiaUJrWVhSaElIQnZhVzUwSUhSb1lYUWdhWE1nZEc4Z1ltVWdkWE5sWkNCaGN5QnZZbXBsWTNRZ1NVUWdhVzRnZEdobElIZHBaR2RsZEEwS0lDQWdJQ0FnSUNCelpYUlRkR0YwWlNoa1lYUmhjRzlwYm5SSlpDd2dTbE5QVGk1emRISnBibWRwWm5rb1kyRnNUR2x6ZENrc0lIUnlkV1VwT3cwS0lBMEtJQ0FnSUNBZ0lDQm1kVzVqZEdsdmJpQm5aWFJOZVVOaGJHVnVaR0Z5UTI5c2IzSW9ZMkZzWlc1a1lYSk9ZVzFsS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0F2THlCaGMzTnBaMjRnWTI5c2IzSnpJSFpwWVNCMGFHVWdZMkZzWlc1a1lYSWdibUZ0WlhNc0lIVnpaU0JqWVd4bGJtUmhjaUJ1WVcxbElHRnpJSE5sZENCcGJpQnBZMkZzRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpRME56TTVaU2M3RFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIMGdaV3h6WlNCcFppQW9ZMkZzWlc1a1lYSk9ZVzFsSUQwOVBTQW5VMk5vYVdWa2MzSnBZMmgwWlhJbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuVTBOQ1ZpY3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQW5JelZoT0RnMVpDY05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlEwS0lDQWdJQ0FnSUNCOURRb2dEUW9nSUNBZ2ZTQmpZWFJqYUNBb1pTa2dldzBLSUNBZ0lDQWdJQ0JqYjI1emIyeGxMbVZ5Y205eUtHQnBZMkZzTWsxaGRHVnlhV0ZzUkdWemFXZHVWR0ZpYkdWWGFXUm5aWFE2SUcxbGMzTmhaMlU2SUNSN1pTNXRaWE56WVdkbGZTd2djM1JoWTJzNklDUjdaUzV6ZEdGamEzMWdLVHNOQ2lBZ0lDQjlEUXA5RFFvZ0RRcHBZMkZzTWxSaFlteGxWMmxrWjJWMFh6TW9LVHNOQ2clM0QlM0QlM0MlMkZmaWVsZCUzRSUzQ2NvbW1lbnQlMjBwaW5uZWQlM0QlMjJmYWxzZSUyMiUyMGglM0QlMjI4MCUyMiUyMHclM0QlMjIxNjAlMjIlM0VCZXNjaHJlaWJlJTIwZGllc2UlMjBGdW5rdGlvbiUyMCVFMiU4MCVBNiUzQyUyRmNvbW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnByb2NlZHVyZXNfZGVmY3VzdG9tbm9yZXR1cm4lMjIlMjBpZCUzRCUyMnhodFByNWZDci5zdkh1JTNEKXZIemIlMjIlMjB4JTNEJTIyMzEzJTIyJTIweSUzRCUyMjQzOCUyMiUzRSUzQ211dGF0aW9uJTIwc3RhdGVtZW50cyUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOQU1FJTIyJTNFdGJsX0FMTEUlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlNDUklQVCUyMiUzRURRcDJZWElnYVc1emRHRnVZMlZ6SUQwZ0pDaGdXMmxrUFdsallXd3VPUzVrWVhSaExuUmhZbXhsWFdBcE93MEthVzV6ZEdGdVkyVnpMbTl1S0dsallXd3lWR0ZpYkdWWGFXUm5aWFJmTkNrN0RRb05DaTh2SUhKbGJXOTJaU0IwYUdsekxDQnBaaUI1YjNVZ2EyNXZkeUIwYnlCMWMyVWdlVzkxY2lCdmQyNGdaR0YwWVhCdmFXNTBEUXBzWlhRZ1pHRjBZWEJ2YVc1MFNXUWdQU0FuTUY5MWMyVnlaR0YwWVM0d0xrTmhiR1Z1WkdGeUxrdGhiR1Z1WkdWeUxrcFRUMDVmVEVsVFZGOU5SRmREUVV4Zk5DY05DaUFnSUNCamNtVmhkR1ZUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnSWx0ZElpd2dldzBLSUNBZ0lDQWdJQ0J5WldGa09pQjBjblZsTENBTkNpQWdJQ0FnSUNBZ2QzSnBkR1U2SUdaaGJITmxMQ0FOQ2lBZ0lDQWdJQ0FnWkdWell6b2dJa3BUVDA0Z1UzUnlhVzVuSUdadmNpQk5SRmNnVkVGQ1RFVWdWMmxrWjJWMElpd2dEUW9nSUNBZ0lDQWdJSFI1Y0dVNklDSnpkSEpwYm1jaUxDQU5DaUFnSUNBZ0lDQWdaR1ZtT2lBaVcxMGlEUW9nSUNBZ2ZTazdEUW9nRFFwbWRXNWpkR2x2YmlCcFkyRnNNbFJoWW14bFYybGtaMlYwWHpRb0tTQjdEUW9nSUNBZ2RISjVJSHNOQ2lBZ0lDQWdJQ0FnYkdWMElHTmhiRXhwYzNRZ1BTQmJYVHNOQ2lBTkNpQWdJQ0FnSUNBZ1ptOXlJQ2gyWVhJZ2FXNXpkQ0E5SURBN0lHbHVjM1FnUEQwZ2FXNXpkR0Z1WTJWekxteGxibWQwYUNBdElERTdJR2x1YzNRckt5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2xqWVd4UFltb2dQU0JuWlhSVGRHRjBaU2hwYm5OMFlXNWpaWE5iYVc1emRGMHBMblpoYkRzTkNpQU5DaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHBZMkZzVDJKcUtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdabTl5SUNoMllYSWdhU0E5SURBN0lHa2dQRDBnYVdOaGJFOWlhaTVzWlc1bmRHZ2dMU0F4T3lCcEt5c3BJSHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JHVjBJR2wwWlcwZ1BTQnBZMkZzVDJKcVcybGRPdzBLSUEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNaWFFnWTJGc1pXNWtZWEpPWVcxbElEMGdhWFJsYlM1ZlkyeGhjM011YzNCc2FYUW9KeUFuS1Zzd1hTNXlaWEJzWVdObEtDZHBZMkZzWHljc0lDY25LVHNOQ2lBTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMeThnVDJKcVpXdDBJR2JEdkhJZ1ZHRmlaV3hzWlNCbGNucGxkV2RsYmcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpZV3hNYVhOMExuQjFjMmdvZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWm1GeVltVTZJR0E4WkdsMklITjBlV3hsUFNKaVlXTnJaM0p2ZFc1a09pQWtlMmRsZEUxNVEyRnNaVzVrWVhKRGIyeHZjaWhqWVd4bGJtUmhjazVoYldVcGZUc2dkMmxrZEdnNklEWndlRHNnYUdWcFoyaDBPaUF5TUhCNElqNDhMMlJwZGo1Z0xBMEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2VtVnBkRG9nYVhSbGJTNWtZWFJsTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdWeWJXbHVPaUJwZEdWdExtVjJaVzUwTEEwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYTJGc1pXNWtaWEk2SUdOaGJHVnVaR0Z5VG1GdFpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2dSR0YwWlM1d1lYSnpaU2hwZEdWdExsOWtZWFJsS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlLUTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBOQ2lBZ0lDQWdJQ0FnSUNBZ0lIME5DaUFnSUNBZ0lDQWdmUTBLSUEwS0lDQWdJQ0FnSUNBdkx5Qk1hWE4wWlNCemIzSjBJR0o1SUhScGJXVnpkR0Z0Y0NCaGMyTU5DaUFnSUNBZ0lDQWdZMkZzVEdsemRDNXpiM0owS0daMWJtTjBhVzl1SUNoaExDQmlLU0I3RFFvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lTNTBhVzFsYzNSaGJYQWdQVDBnWWk1MGFXMWxjM1JoYlhBZ1B5QXdJRG9nS3loaExuUnBiV1Z6ZEdGdGNDQSUyQklHSXVkR2x0WlhOMFlXMXdLU0I4ZkNBdE1Uc05DaUFnSUNBZ0lDQWdmU2s3RFFvZ0RRb2dJQ0FnSUNBZ0lDOHZJRVZ1ZEdWeUlIUm9aU0JrWlhOMGFXNWhkR2x2YmlCa1lYUmhJSEJ2YVc1MElIUm9ZWFFnYVhNZ2RHOGdZbVVnZFhObFpDQmhjeUJ2WW1wbFkzUWdTVVFnYVc0Z2RHaGxJSGRwWkdkbGRBMEtJQ0FnSUNBZ0lDQnpaWFJUZEdGMFpTaGtZWFJoY0c5cGJuUkpaQ3dnU2xOUFRpNXpkSEpwYm1kcFpua29ZMkZzVEdsemRDa3NJSFJ5ZFdVcE93MEtJQTBLSUNBZ0lDQWdJQ0JtZFc1amRHbHZiaUJuWlhSTmVVTmhiR1Z1WkdGeVEyOXNiM0lvWTJGc1pXNWtZWEpPWVcxbEtTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBdkx5QmhjM05wWjI0Z1kyOXNiM0p6SUhacFlTQjBhR1VnWTJGc1pXNWtZWElnYm1GdFpYTXNJSFZ6WlNCallXeGxibVJoY2lCdVlXMWxJR0Z6SUhObGRDQnBiaUJwWTJGc0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tHTmhiR1Z1WkdGeVRtRnRaU0E5UFQwZ0oxQkJVRUVuS1NCN0RRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnSnlNME5EY3pPV1VuT3cwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2FXWWdLR05oYkdWdVpHRnlUbUZ0WlNBOVBUMGdKMU5qYUdsbFpITnlhV05vZEdWeUp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pNREF3TURBd0p3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjFCQlVFRWdVME5DVmljcElIc05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBbkl6VmhPRGcxWkNjTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdmU0JsYkhObElHbG1JQ2hqWVd4bGJtUmhjazVoYldVZ1BUMDlJQ2ROUVUxQkp5a2dldzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlDY2pPRE0xWkRnMUp3MEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5SUdWc2MyVWdhV1lnS0dOaGJHVnVaR0Z5VG1GdFpTQTlQVDBnSjBaU1FVNWFTU2NwSUhzTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFuSXpnME9HWTFNeWNOQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpZV3hsYm1SaGNrNWhiV1VnUFQwOUlDZE1UMUpGVGxvbktTQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0p5TXdNRGd3T0RBbkRRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDBnWld4elpTQnBaaUFvWTJGc1pXNWtZWEpPWVcxbElEMDlQU0FuUmtGTlNVeFpKeWtnZXcwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2NqUmpnNFl6SmlKdzBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCOURRb2dJQ0FnSUNBZ0lIME5DaUFOQ2lBZ0lDQjlJR05oZEdOb0lDaGxLU0I3RFFvZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9ZR2xqWVd3eVRXRjBaWEpwWVd4RVpYTnBaMjVVWVdKc1pWZHBaR2RsZERvZ2JXVnpjMkZuWlRvZ0pIdGxMbTFsYzNOaFoyVjlMQ0J6ZEdGamF6b2dKSHRsTG5OMFlXTnJmV0FwT3cwS0lDQWdJSDBOQ24wTkNpQU5DbWxqWVd3eVZHRmliR1ZYYVdSblpYUmZOQ2dwT3cwSyUzQyUyRmZpZWxkJTNFJTNDY29tbWVudCUyMHBpbm5lZCUzRCUyMmZhbHNlJTIyJTIwaCUzRCUyMjgwJTIyJTIwdyUzRCUyMjE2MCUyMiUzRUJlc2NocmVpYmUlMjBkaWVzZSUyMEZ1bmt0aW9uJTIwJUUyJTgwJUE2JTNDJTJGY29tbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
        

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von
        #3

        @mottimuc So ganz steige ich durch das Skript nicht durch, aber:

        • Printe mal das Ergebnis dieses Selektors (instances) ins Log (für jeden der 5 Fälle) - wenn da mehr als ein Objekt heraus kommt macht das schon mal schnell viele subscriptions
        • Du erzeugst die Subskriptions (instances.on(ical2TableWidget_0);)
          alle 5 Minuten für alle 5 Leute. Sprich nach ca. 100 Minuten hat dein Skript 100 subscriptions erreicht.

        Warum die Subscriptions wenn du den Kalender per Cron Job alle 5 Minuten aktualisierst ?

        A.

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        M 1 Antwort Letzte Antwort
        1
        • AsgothianA Asgothian

          @mottimuc So ganz steige ich durch das Skript nicht durch, aber:

          • Printe mal das Ergebnis dieses Selektors (instances) ins Log (für jeden der 5 Fälle) - wenn da mehr als ein Objekt heraus kommt macht das schon mal schnell viele subscriptions
          • Du erzeugst die Subskriptions (instances.on(ical2TableWidget_0);)
            alle 5 Minuten für alle 5 Leute. Sprich nach ca. 100 Minuten hat dein Skript 100 subscriptions erreicht.

          Warum die Subscriptions wenn du den Kalender per Cron Job alle 5 Minuten aktualisierst ?

          A.

          M Offline
          M Offline
          Mottimuc
          schrieb am zuletzt editiert von
          #4

          @asgothian
          Hallo zusammen

          ahhhhh, das war mir nicht bewusst, dass ich über instances.on die subscription erzeuge.
          Dann habe ich, wie OIiver richtig formuliert hat, beides fälschlicherweise gleichzeitig gemacht.

          Das Script übersetzt aus dem ICAL Adapter den Datenpunkt für die Anzeige in einem MaterialDesignWidget, welches auf ein JSON zugreift.
          Mein Gedanke war, dass ich eben die Push-Methode nutze, um hier (relativ synchron mit dem cron des ICAL Adapters) die Daten konvertiere.

          Ich hätte noch eine paar allgemeine Fragen dazu:

          1. Subscriptions laufen grundsätzlich immer, solange das Script aktiv ist?

          2. Wie viele Subscriptions je System sind machbar? Gerade für meine Steuerung Lichter und Wohnbereich habe ich hier einiges aufgebaut?
            Klar, das wir von Rechner usw. abhängen. Ich hab bei mir derzeit 3 Raspi 5 laufen....

          3. Kann ich irgendwie "aktive subscriptions" mir anzeigen lassen? In eine Liste protokollieren?

          Danke für Eure Hilfe
          Michael

          Viele Grüße
          Michael

          OliverIOO 1 Antwort Letzte Antwort
          0
          • M Mottimuc

            @asgothian
            Hallo zusammen

            ahhhhh, das war mir nicht bewusst, dass ich über instances.on die subscription erzeuge.
            Dann habe ich, wie OIiver richtig formuliert hat, beides fälschlicherweise gleichzeitig gemacht.

            Das Script übersetzt aus dem ICAL Adapter den Datenpunkt für die Anzeige in einem MaterialDesignWidget, welches auf ein JSON zugreift.
            Mein Gedanke war, dass ich eben die Push-Methode nutze, um hier (relativ synchron mit dem cron des ICAL Adapters) die Daten konvertiere.

            Ich hätte noch eine paar allgemeine Fragen dazu:

            1. Subscriptions laufen grundsätzlich immer, solange das Script aktiv ist?

            2. Wie viele Subscriptions je System sind machbar? Gerade für meine Steuerung Lichter und Wohnbereich habe ich hier einiges aufgebaut?
              Klar, das wir von Rechner usw. abhängen. Ich hab bei mir derzeit 3 Raspi 5 laufen....

            3. Kann ich irgendwie "aktive subscriptions" mir anzeigen lassen? In eine Liste protokollieren?

            Danke für Eure Hilfe
            Michael

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #5

            @mottimuc

            1. ja, in der befehlsreferenz gibt es noch ein paar weitere Befehle mit denen du das steuern kannst.
            2. viele. Begrenzung ist der Hauptspeicher und dein Prozessor der die getriggerten Aktionen abarbeiten muss.
              Die Warnung kommt deswegen weil man sich durch falsche Programmierung schnell viele von den triggern zulegt, was dann meist in einen Absturz des js Adapters führt. Da gibt es viele Geschichten hier im Forum
              3.So bekommst du eine Liste.
              Ich weiß allerdings nicht, ob das nur per Skript ist oder alle. Wahrscheinlich nur per Skript, hab ich selbst noch nicht verwendet.
              https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#getsubscriptions

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            1
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            325

            Online

            32.7k

            Benutzer

            82.3k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe