- Home
- Deutsch
- Einsteigerfragen
- More than 100 subscriptions listed... ?? Woher?
More than 100 subscriptions listed... ?? Woher?
-
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
-
@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
-
@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.
- Printe mal das Ergebnis dieses Selektors (
-
@asgothian
Hallo zusammenahhhhh, 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:
-
Subscriptions laufen grundsätzlich immer, solange das Script aktiv ist?
-
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.... -
Kann ich irgendwie "aktive subscriptions" mir anzeigen lassen? In eine Liste protokollieren?
Danke für Eure Hilfe
Michael -
-
- ja, in der befehlsreferenz gibt es noch ein paar weitere Befehle mit denen du das steuern kannst.
- 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