From ae773a25ba28c581ab34df4a9ad6e74fb0f7c35a Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Wed, 17 Nov 2021 20:44:21 +0100 Subject: [PATCH] mod: waste integration --- .HA_VERSION | 2 +- configuration.yaml | 48 -- entities/sensors/waste_sensors.yaml | 63 +++ integrations/waste_collection_schedule.yaml | 52 +- scripts/back_home_again.yaml | 2 +- scripts/waste_notification.yaml | 6 + www/community/button-card/button-card.js | 547 ++++++++++++++++++++ www/community/button-card/button-card.js.gz | Bin 0 -> 27332 bytes www/images/waste/tonnebraun.png | Bin 0 -> 976 bytes www/images/waste/tonnebraun.svg | 27 + www/images/waste/tonnegelb.png | Bin 0 -> 1083 bytes www/images/waste/tonnegelb.svg | 28 + www/images/waste/tonnegrau.png | Bin 0 -> 993 bytes www/images/waste/tonnegrau.svg | 26 + www/images/waste/tonnegruen.png | Bin 0 -> 1068 bytes www/images/waste/tonnegruen.svg | 28 + 16 files changed, 763 insertions(+), 66 deletions(-) create mode 100644 entities/sensors/waste_sensors.yaml create mode 100644 scripts/waste_notification.yaml create mode 100644 www/community/button-card/button-card.js create mode 100644 www/community/button-card/button-card.js.gz create mode 100644 www/images/waste/tonnebraun.png create mode 100644 www/images/waste/tonnebraun.svg create mode 100644 www/images/waste/tonnegelb.png create mode 100644 www/images/waste/tonnegelb.svg create mode 100644 www/images/waste/tonnegrau.png create mode 100644 www/images/waste/tonnegrau.svg create mode 100644 www/images/waste/tonnegruen.png create mode 100644 www/images/waste/tonnegruen.svg diff --git a/.HA_VERSION b/.HA_VERSION index 6c7afce..5c51301 100644 --- a/.HA_VERSION +++ b/.HA_VERSION @@ -1 +1 @@ -2021.11.1 \ No newline at end of file +2021.11.3 \ No newline at end of file diff --git a/configuration.yaml b/configuration.yaml index e382418..fc2107a 100644 --- a/configuration.yaml +++ b/configuration.yaml @@ -11,54 +11,6 @@ default_config: tts: - platform: google_translate -#group: !include groups.yaml -#automation: !include automations.yaml -#script: !include scripts.yaml -# scene: !include scenes.yaml - -waste_collection_schedule: - sources: - - name: ics - args: - url: https://drolshagen.abfuhrtermine.info/dates/exportDates/44/Ics - # file: FILE - offset: 0 - method: GET - params: {} - # year_field: YEAR_FIELD - # split_at: ":" - customize: - - type: ics - -# sensor: -# # next collection -# - platform: waste_collection_schedule -# name: next_collection - -sensor: - - platform: waste_collection_schedule - name: restlichen_tonnen - details_format: upcoming - count: 4 - value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' - date_template: '{{value.date.strftime("%d.%m.%Y")}}' - types: - - 'Restlichen Tonnen' - - - platform: waste_collection_schedule - name: papier_tonne - details_format: upcoming - count: 4 - value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' - date_template: '{{value.date.strftime("%d.%m.%Y")}}' - types: - - 'Papiertonne' - - - platform: waste_collection_schedule - name: tonnenbutton - count: 4 - value_template: '{{value.types|join(", ")}}|{{value.daysTo}}|{{value.date.strftime("%d.%m.%Y")}}|{{value.date.strftime("%a")}}' - logger: diff --git a/entities/sensors/waste_sensors.yaml b/entities/sensors/waste_sensors.yaml new file mode 100644 index 0000000..dafd5dd --- /dev/null +++ b/entities/sensors/waste_sensors.yaml @@ -0,0 +1,63 @@ +# https://github.com/mampfes/hacs_waste_collection_schedule +# https://www.youtube.com/watch?v=MzQgARDvRww + + +- platform: waste_collection_schedule + name: waste_gray + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'graue Tonne' + +- platform: waste_collection_schedule + name: waste_yellow + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'gelbe Tonne/Sack' + +- platform: waste_collection_schedule + name: waste_brown + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'braune Tonne' + +- platform: waste_collection_schedule + name: waste_green + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'grüne Tonne' + +- platform: waste_collection_schedule + name: waste_bulk + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'Sperrmüll' + +- platform: waste_collection_schedule + name: waste_pollutants + details_format: upcoming + count: 4 + value_template: '{{value.types|join(" + ")}} in {{value.daysTo}} Tag(en)' + date_template: '{{value.date.strftime("%d.%m.%Y")}}' + types: + - 'Schadstoffe' + +- platform: waste_collection_schedule + name: waste_all + count: 4 + value_template: '{{value.types|join(", ")}}|{{value.daysTo}}|{{value.date.strftime("%d.%m")}}|{{value.date.strftime("%a")}}' + diff --git a/integrations/waste_collection_schedule.yaml b/integrations/waste_collection_schedule.yaml index 76e4644..5628026 100644 --- a/integrations/waste_collection_schedule.yaml +++ b/integrations/waste_collection_schedule.yaml @@ -1,17 +1,37 @@ -# waste_collection_schedule: -# sources: -# - name: ics -# args: -# url: https://drolshagen.abfuhrtermine.info/dates/exportDates/44/Ics -# # file: FILE -# offset: 0 -# method: GET -# params: {} -# # year_field: YEAR_FIELD -# split_at: ":" +# https://github.com/mampfes/hacs_waste_collection_schedule +# https://www.youtube.com/watch?v=MzQgARDvRww - -# sensor: -# # next collection -# - platform: waste_collection_schedule -# name: next_collection \ No newline at end of file +waste_collection_schedule: + sources: + - name: ics + args: + url: https://drolshagen.abfuhrtermine.info/dates/exportDates/44/Ics + # file: FILE + offset: 0 + method: GET + params: {} + # year_field: YEAR_FIELD + # split_at: ":" + customize: + - type: Altholz + show: false + - type: grüne Tonne + alias: grüne Tonne + picture: /local/images/waste/tonnegruen.png + - type: graue Tonne + alias: graue Tonne + picture: /local/images/waste/tonnegrau.png + - type: braune Tonne + alias: braune Tonne + picture: /local/images/waste/tonnebraun.png + - type: gelbe Tonne/Sack + alias: gelbe Tonne/Sack + picture: /local/images/waste/tonnegelb.png + - type: Sperrmüll + alias: Sperrmüll + - type: Schadstoffe + alias: Schadstoffe + + calendar_title: Müllkalender + fetch_time: "01:00" + day_switch_time: "23:00" diff --git a/scripts/back_home_again.yaml b/scripts/back_home_again.yaml index 5cda4d9..edb17ce 100644 --- a/scripts/back_home_again.yaml +++ b/scripts/back_home_again.yaml @@ -1,5 +1,5 @@ # https://www.home-assistant.io/integrations/script -alias: Skript Wieder da +alias: Skript Wir sind wieder da sequence: - service: scene.turn_on target: diff --git a/scripts/waste_notification.yaml b/scripts/waste_notification.yaml new file mode 100644 index 0000000..a7c2544 --- /dev/null +++ b/scripts/waste_notification.yaml @@ -0,0 +1,6 @@ +# https://www.home-assistant.io/integrations/script +alias: Skript Müllbenachrichtigung +sequence: + - service: notify.dev_telegram + data: + message: Mülldatem werden ausgewertet {{ states('sensor.tonnenbutton') }} \ No newline at end of file diff --git a/www/community/button-card/button-card.js b/www/community/button-card/button-card.js new file mode 100644 index 0000000..6f85563 --- /dev/null +++ b/www/community/button-card/button-card.js @@ -0,0 +1,547 @@ +function t(t,e,i,n){var r,s=arguments.length,a=s<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,n);else for(var o=t.length-1;o>=0;o--)(r=t[o])&&(a=(s<3?r(a):s>3?r(e,i,a):r(e,i))||a);return s>3&&a&&Object.defineProperty(e,i,a),a}const e="undefined"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,i=(t,e,i=null)=>{for(;e!==i;){const i=e.nextSibling;t.removeChild(e),e=i}},n=`{{lit-${String(Math.random()).slice(2)}}}`,r=`\x3c!--${n}--\x3e`,s=new RegExp(`${n}|${r}`);class a{constructor(t,e){this.parts=[],this.element=e;const i=[],r=[],a=document.createTreeWalker(e.content,133,null,!1);let l=0,u=-1,d=0;const{strings:p,values:{length:f}}=t;for(;d0;){const e=p[d],i=h.exec(e)[2],n=i.toLowerCase()+"$lit$",r=t.getAttribute(n);t.removeAttribute(n);const a=r.split(s);this.parts.push({type:"attribute",index:u,name:i,strings:a}),d+=a.length-1}}"TEMPLATE"===t.tagName&&(r.push(t),a.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(n)>=0){const n=t.parentNode,r=e.split(s),a=r.length-1;for(let e=0;e{const i=t.length-e.length;return i>=0&&t.slice(i)===e},l=t=>-1!==t.index,c=()=>document.createComment(""),h=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/;function u(t,e){const{element:{content:i},parts:n}=t,r=document.createTreeWalker(i,133,null,!1);let s=p(n),a=n[s],o=-1,l=0;const c=[];let h=null;for(;r.nextNode();){o++;const t=r.currentNode;for(t.previousSibling===h&&(h=null),e.has(t)&&(c.push(t),null===h&&(h=t)),null!==h&&l++;void 0!==a&&a.index===o;)a.index=null!==h?-1:a.index-l,s=p(n,s),a=n[s]}c.forEach((t=>t.parentNode.removeChild(t)))}const d=t=>{let e=11===t.nodeType?0:1;const i=document.createTreeWalker(t,133,null,!1);for(;i.nextNode();)e++;return e},p=(t,e=-1)=>{for(let i=e+1;i(...e)=>{const i=t(...e);return f.set(i,!0),i},g=t=>"function"==typeof t&&f.has(t),_={},b={};class y{constructor(t,e,i){this.__parts=[],this.template=t,this.processor=e,this.options=i}update(t){let e=0;for(const i of this.__parts)void 0!==i&&i.setValue(t[e]),e++;for(const i of this.__parts)void 0!==i&&i.commit()}_clone(){const t=e?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),i=[],n=this.template.parts,r=document.createTreeWalker(t,133,null,!1);let s,a=0,o=0,c=r.nextNode();for(;at}),w=` ${n} `;class S{constructor(t,e,i,n){this.strings=t,this.values=e,this.type=i,this.processor=n}getHTML(){const t=this.strings.length-1;let e="",i=!1;for(let s=0;s-1||i)&&-1===t.indexOf("--\x3e",a+1);const o=h.exec(t);e+=null===o?t+(i?w:r):t.substr(0,o.index)+o[1]+o[2]+"$lit$"+o[3]+n}return e+=this.strings[t],e}getTemplateElement(){const t=document.createElement("template");let e=this.getHTML();return void 0!==v&&(e=v.createHTML(e)),t.innerHTML=e,t}}const x=t=>null===t||!("object"==typeof t||"function"==typeof t),k=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class O{constructor(t,e,i){this.dirty=!0,this.element=t,this.name=e,this.strings=i,this.parts=[];for(let n=0;n{try{const t={get capture(){return A=!0,!1}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){}})();class N{constructor(t,e,i){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=i,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;g(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=_,t(this)}if(this.__pendingValue===_)return;const t=this.__pendingValue,e=this.value,i=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),n=null!=t&&(null==e||i);i&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),n&&(this.__options=j(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=_}handleEvent(t){"function"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const j=t=>t&&(A?{capture:t.capture,passive:t.passive,once:t.once}:t.capture);function $(t){let e=H.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},H.set(t.type,e));let i=e.stringsArray.get(t.strings);if(void 0!==i)return i;const r=t.strings.join(n);return i=e.keyString.get(r),void 0===i&&(i=new a(t,t.getTemplateElement()),e.keyString.set(r,i)),e.stringsArray.set(t.strings,i),i}const H=new Map,R=new WeakMap;const V=new class{handleAttributeExpressions(t,e,i,n){const r=e[0];if("."===r){return new E(t,e.slice(1),i).parts}if("@"===r)return[new N(t,e.slice(1),n.eventContext)];if("?"===r)return[new C(t,e.slice(1),i)];return new O(t,e,i).parts}handleTextExpression(t){return new M(t)}};"undefined"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.3.0");const D=(t,...e)=>new S(t,e,"html",V),L=(t,e)=>`${t}--${e}`;let F=!0;void 0===window.ShadyCSS?F=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn("Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1."),F=!1);const I=t=>e=>{const i=L(e.type,t);let r=H.get(i);void 0===r&&(r={stringsArray:new WeakMap,keyString:new Map},H.set(i,r));let s=r.stringsArray.get(e.strings);if(void 0!==s)return s;const o=e.strings.join(n);if(s=r.keyString.get(o),void 0===s){const i=e.getTemplateElement();F&&window.ShadyCSS.prepareTemplateDom(i,t),s=new a(e,i),r.keyString.set(o,s)}return r.stringsArray.set(e.strings,s),s},z=["html","svg"],U=new Set,q=(t,e,i)=>{U.add(t);const n=i?i.element:document.createElement("template"),r=e.querySelectorAll("style"),{length:s}=r;if(0===s)return void window.ShadyCSS.prepareTemplateStyles(n,t);const a=document.createElement("style");for(let c=0;c{z.forEach((e=>{const i=H.get(L(e,t));void 0!==i&&i.keyString.forEach((t=>{const{element:{content:e}}=t,i=new Set;Array.from(e.querySelectorAll("style")).forEach((t=>{i.add(t)})),u(t,i)}))}))})(t);const o=n.content;i?function(t,e,i=null){const{element:{content:n},parts:r}=t;if(null==i)return void n.appendChild(e);const s=document.createTreeWalker(n,133,null,!1);let a=p(r),o=0,l=-1;for(;s.nextNode();)for(l++,s.currentNode===i&&(o=d(e),i.parentNode.insertBefore(e,i));-1!==a&&r[a].index===l;){if(o>0){for(;-1!==a;)r[a].index+=o,a=p(r,a);return}a=p(r,a)}}(i,a,o.firstChild):o.insertBefore(a,o.firstChild),window.ShadyCSS.prepareTemplateStyles(n,t);const l=o.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==l)e.insertBefore(l.cloneNode(!0),e.firstChild);else if(i){o.insertBefore(a,o.firstChild);const t=new Set;t.add(a),u(i,t)}};window.JSCompiler_renameProperty=(t,e)=>t;const Y={toAttribute(t,e){switch(e){case Boolean:return t?"":null;case Object:case Array:return null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){switch(e){case Boolean:return null!==t;case Number:return null===t?null:Number(t);case Object:case Array:return JSON.parse(t)}return t}},B=(t,e)=>e!==t&&(e==e||t==t),W={attribute:!0,type:String,converter:Y,reflect:!1,hasChanged:B};class G extends HTMLElement{constructor(){super(),this.initialize()}static get observedAttributes(){this.finalize();const t=[];return this._classProperties.forEach(((e,i)=>{const n=this._attributeNameForProperty(i,e);void 0!==n&&(this._attributeToPropertyMap.set(n,i),t.push(n))})),t}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty("_classProperties",this))){this._classProperties=new Map;const t=Object.getPrototypeOf(this)._classProperties;void 0!==t&&t.forEach(((t,e)=>this._classProperties.set(e,t)))}}static createProperty(t,e=W){if(this._ensureClassProperties(),this._classProperties.set(t,e),e.noAccessor||this.prototype.hasOwnProperty(t))return;const i="symbol"==typeof t?Symbol():"__"+t,n=this.getPropertyDescriptor(t,i,e);void 0!==n&&Object.defineProperty(this.prototype,t,n)}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(n){const r=this[t];this[e]=n,this.requestUpdateInternal(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this._classProperties&&this._classProperties.get(t)||W}static finalize(){const t=Object.getPrototypeOf(this);if(t.hasOwnProperty("finalized")||t.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty("properties",this))){const t=this.properties,e=[...Object.getOwnPropertyNames(t),..."function"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[]];for(const i of e)this.createProperty(i,t[i])}}static _attributeNameForProperty(t,e){const i=e.attribute;return!1===i?void 0:"string"==typeof i?i:"string"==typeof t?t.toLowerCase():void 0}static _valueHasChanged(t,e,i=B){return i(t,e)}static _propertyValueFromAttribute(t,e){const i=e.type,n=e.converter||Y,r="function"==typeof n?n:n.fromAttribute;return r?r(t,i):t}static _propertyValueToAttribute(t,e){if(void 0===e.reflect)return;const i=e.type,n=e.converter;return(n&&n.toAttribute||Y.toAttribute)(t,i)}initialize(){this._updateState=0,this._updatePromise=new Promise((t=>this._enableUpdatingResolver=t)),this._changedProperties=new Map,this._saveInstanceProperties(),this.requestUpdateInternal()}_saveInstanceProperties(){this.constructor._classProperties.forEach(((t,e)=>{if(this.hasOwnProperty(e)){const t=this[e];delete this[e],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(e,t)}}))}_applyInstanceProperties(){this._instanceProperties.forEach(((t,e)=>this[e]=t)),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(t,e,i){e!==i&&this._attributeToProperty(t,i)}_propertyToAttribute(t,e,i=W){const n=this.constructor,r=n._attributeNameForProperty(t,i);if(void 0!==r){const t=n._propertyValueToAttribute(e,i);if(void 0===t)return;this._updateState=8|this._updateState,null==t?this.removeAttribute(r):this.setAttribute(r,t),this._updateState=-9&this._updateState}}_attributeToProperty(t,e){if(8&this._updateState)return;const i=this.constructor,n=i._attributeToPropertyMap.get(t);if(void 0!==n){const t=i.getPropertyOptions(n);this._updateState=16|this._updateState,this[n]=i._propertyValueFromAttribute(e,t),this._updateState=-17&this._updateState}}requestUpdateInternal(t,e,i){let n=!0;if(void 0!==t){const r=this.constructor;i=i||r.getPropertyOptions(t),r._valueHasChanged(this[t],e,i.hasChanged)?(this._changedProperties.has(t)||this._changedProperties.set(t,e),!0!==i.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(t,i))):n=!1}!this._hasRequestedUpdate&&n&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(t,e){return this.requestUpdateInternal(t,e),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(e){}const t=this.performUpdate();return null!=t&&await t,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){if(!this._hasRequestedUpdate)return;this._instanceProperties&&this._applyInstanceProperties();let t=!1;const e=this._changedProperties;try{t=this.shouldUpdate(e),t?this.update(e):this._markUpdated()}catch(i){throw t=!1,this._markUpdated(),i}t&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(e)),this.updated(e))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(t){return!0}update(t){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach(((t,e)=>this._propertyToAttribute(e,this[e],t))),this._reflectingProperties=void 0),this._markUpdated()}updated(t){}firstUpdated(t){}}G.finalized=!0;const Z=(t,e)=>"method"===e.kind&&e.descriptor&&!("value"in e.descriptor)?Object.assign(Object.assign({},e),{finisher(i){i.createProperty(e.key,t)}}):{kind:"field",key:Symbol(),placement:"own",descriptor:{},initializer(){"function"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function J(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):Z(t,e)}const X=(t,e,i)=>{Object.defineProperty(e,i,t)},K=(t,e)=>({kind:"method",placement:"prototype",key:e.key,descriptor:t});const Q=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,tt=Symbol();class et{constructor(t,e){if(e!==tt)throw new Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t}get styleSheet(){return void 0===this._styleSheet&&(Q?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}(window.litElementVersions||(window.litElementVersions=[])).push("2.4.0");const it={};class nt extends G{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty("_styles",this)))return;const t=this.getStyles();if(Array.isArray(t)){const e=(t,i)=>t.reduceRight(((t,i)=>Array.isArray(i)?e(i,t):(t.add(i),t)),i),i=e(t,new Set),n=[];i.forEach((t=>n.unshift(t))),this._styles=n}else this._styles=void 0===t?[]:[t];this._styles=this._styles.map((t=>{if(t instanceof CSSStyleSheet&&!Q){const e=Array.prototype.slice.call(t.cssRules).reduce(((t,e)=>t+e.cssText),"");return new et(String(e),tt)}return t}))}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:"open"})}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?Q?this.renderRoot.adoptedStyleSheets=t.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map((t=>t.cssText)),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){const e=this.render();super.update(t),e!==it&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach((t=>{const e=document.createElement("style");e.textContent=t.cssText,this.renderRoot.appendChild(e)})))}render(){return it}}nt.finalized=!0,nt.render=(t,e,n)=>{if(!n||"object"!=typeof n||!n.scopeName)throw new Error("The `scopeName` option is required.");const r=n.scopeName,s=R.has(e),a=F&&11===e.nodeType&&!!e.host,o=a&&!U.has(r),l=o?document.createDocumentFragment():e;if(((t,e,n)=>{let r=R.get(e);void 0===r&&(i(e,e.firstChild),R.set(e,r=new M(Object.assign({templateFactory:$},n))),r.appendInto(e)),r.setValue(t),r.commit()})(t,l,Object.assign({templateFactory:I(r)},n)),o){const t=R.get(l);R.delete(l);const n=t.value instanceof y?t.value.template:void 0;q(r,l,n),i(e,e.firstChild),e.appendChild(l),R.set(e,t)}!s&&a&&window.ShadyCSS.styleElement(e.host)};class rt{constructor(t){this.startPress=e=>{t().then((t=>{t&&t.startPress(e)}))},this.endPress=()=>{t().then((t=>{t&&t.endPress()}))},this.startFocus=()=>{t().then((t=>{t&&t.startFocus()}))},this.endFocus=()=>{t().then((t=>{t&&t.endFocus()}))},this.startHover=()=>{t().then((t=>{t&&t.startHover()}))},this.endHover=()=>{t().then((t=>{t&&t.endHover()}))}}}const st=new WeakMap,at=m((t=>e=>{if(!(e instanceof T)||e instanceof P||"style"!==e.committer.name||e.committer.parts.length>1)throw new Error("The `styleMap` directive must be used in the style attribute and must be the only part in the attribute.");const{committer:i}=e,{style:n}=i.element;let r=st.get(e);void 0===r&&(n.cssText=i.strings.join(" "),st.set(e,r=new Set)),r.forEach((e=>{e in t||(r.delete(e),-1===e.indexOf("-")?n[e]=null:n.removeProperty(e))}));for(const s in t)r.add(s),-1===s.indexOf("-")?n[s]=t[s]:n.setProperty(s,t[s])})),ot=new WeakMap,lt=m((t=>e=>{if(!(e instanceof M))throw new Error("unsafeHTML can only be used in text bindings");const i=ot.get(e);if(void 0!==i&&x(t)&&t===i.value&&e.value===i.fragment)return;const n=document.createElement("template");n.innerHTML=t;const r=document.importNode(n.content,!0);e.setValue(r),ot.set(e,{value:t,fragment:r})}));class ct{constructor(t){this.classes=new Set,this.changed=!1,this.element=t;const e=(t.getAttribute("class")||"").split(/\s+/);for(const i of e)this.classes.add(i)}add(t){this.classes.add(t),this.changed=!0}remove(t){this.classes.delete(t),this.changed=!0}commit(){if(this.changed){let t="";this.classes.forEach((e=>t+=e+" ")),this.element.setAttribute("class",t)}}}const ht=new WeakMap,ut=m((t=>e=>{if(!(e instanceof T)||e instanceof P||"class"!==e.committer.name||e.committer.parts.length>1)throw new Error("The `classMap` directive must be used in the `class` attribute and must be the only part in the attribute.");const{committer:i}=e,{element:n}=i;let r=ht.get(e);void 0===r&&(n.setAttribute("class",i.strings.join(" ")),ht.set(e,r=new Set));const s=n.classList||new ct(n);r.forEach((e=>{e in t||(s.remove(e),r.delete(e))}));for(const a in t){const e=t[a];e!=r.has(a)&&(e?(s.add(a),r.add(a)):(s.remove(a),r.delete(a)))}"function"==typeof s.commit&&s.commit()}));var dt=/d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\1?|[aA]|"[^"]*"|'[^']*'/g,pt="[^\\s]+",ft=/\[([^]*?)\]/gm;function mt(t,e){for(var i=[],n=0,r=t.length;n-1?n:null}};function _t(t){for(var e=[],i=1;i3?0:(t-t%10!=10?1:0)*t%10]}},St=_t({},wt),xt=function(t,e){for(void 0===e&&(e=2),t=String(t);t.length0?"-":"+")+xt(100*Math.floor(Math.abs(e)/60)+Math.abs(e)%60,4)},Z:function(t){var e=t.getTimezoneOffset();return(e>0?"-":"+")+xt(Math.floor(Math.abs(e)/60),2)+":"+xt(Math.abs(e)%60,2)}},Ot=function(t){return+t-1},Tt=[null,"[1-9]\\d?"],Mt=[null,pt],Ct=["isPm",pt,function(t,e){var i=t.toLowerCase();return i===e.amPm[0]?0:i===e.amPm[1]?1:null}],Et=["timezoneOffset","[^\\s]*?[\\+\\-]\\d\\d:?\\d\\d|[^\\s]*?Z?",function(t){var e=(t+"").match(/([+-]|\d\d)/gi);if(e){var i=60*+e[1]+parseInt(e[2],10);return"+"===e[0]?i:-i}return 0}],Pt=(gt("monthNamesShort"),gt("monthNames"),{default:"ddd MMM DD YYYY HH:mm:ss",shortDate:"M/D/YY",mediumDate:"MMM D, YYYY",longDate:"MMMM D, YYYY",fullDate:"dddd, MMMM D, YYYY",isoDate:"YYYY-MM-DD",isoDateTime:"YYYY-MM-DDTHH:mm:ssZ",shortTime:"HH:mm",mediumTime:"HH:mm:ss",longTime:"HH:mm:ss.SSS"});var At=function(t,e,i){if(void 0===e&&(e=Pt.default),void 0===i&&(i={}),"number"==typeof t&&(t=new Date(t)),"[object Date]"!==Object.prototype.toString.call(t)||isNaN(t.getTime()))throw new Error("Invalid Date pass to format");var n=[];e=(e=Pt[e]||e).replace(ft,(function(t,e){return n.push(e),"@@@"}));var r=_t(_t({},St),i);return(e=e.replace(dt,(function(e){return kt[e](t,r)}))).replace(/@@@/g,(function(){return n.shift()}))};function Nt(t){var e=t.split(":").map(Number);return 3600*e[0]+60*e[1]+e[2]}var jt=function(){try{(new Date).toLocaleDateString("i")}catch(t){return"RangeError"===t.name}return!1}()?function(t,e){return t.toLocaleDateString(e,{year:"numeric",month:"long",day:"numeric"})}:function(t){return At(t,"mediumDate")},$t=function(){try{(new Date).toLocaleString("i")}catch(t){return"RangeError"===t.name}return!1}()?function(t,e){return t.toLocaleString(e,{year:"numeric",month:"long",day:"numeric",hour:"numeric",minute:"2-digit"})}:function(t){return At(t,"haDateTime")},Ht=function(){try{(new Date).toLocaleTimeString("i")}catch(t){return"RangeError"===t.name}return!1}()?function(t,e){return t.toLocaleTimeString(e,{hour:"numeric",minute:"2-digit"})}:function(t){return At(t,"shortTime")},Rt=function(t){return t<10?"0"+t:t};function Vt(t){return t.substr(0,t.indexOf("."))}var Dt="hass:bookmark",Lt=["closed","locked","off"],Ft=new Set(["fan","input_boolean","light","switch","group","automation"]),It=function(t,e,i,n){n=n||{},i=null==i?{}:i;var r=new Event(e,{bubbles:void 0===n.bubbles||n.bubbles,cancelable:Boolean(n.cancelable),composed:void 0===n.composed||n.composed});return r.detail=i,t.dispatchEvent(r),r},zt=new Set(["call-service","divider","section","weblink","cast","select"]),Ut={alert:"toggle",automation:"toggle",climate:"climate",cover:"cover",fan:"toggle",group:"group",input_boolean:"toggle",input_number:"input-number",input_select:"input-select",input_text:"input-text",light:"toggle",lock:"lock",media_player:"media-player",remote:"toggle",scene:"scene",script:"script",sensor:"sensor",timer:"timer",switch:"toggle",vacuum:"toggle",water_heater:"climate",input_datetime:"input-datetime"},qt={alert:"hass:alert",automation:"hass:playlist-play",calendar:"hass:calendar",camera:"hass:video",climate:"hass:thermostat",configurator:"hass:settings",conversation:"hass:text-to-speech",device_tracker:"hass:account",fan:"hass:fan",group:"hass:google-circles-communities",history_graph:"hass:chart-line",homeassistant:"hass:home-assistant",homekit:"hass:home-automation",image_processing:"hass:image-filter-frames",input_boolean:"hass:drawing",input_datetime:"hass:calendar-clock",input_number:"hass:ray-vertex",input_select:"hass:format-list-bulleted",input_text:"hass:textbox",light:"hass:lightbulb",mailbox:"hass:mailbox",notify:"hass:comment-alert",person:"hass:account",plant:"hass:flower",proximity:"hass:apple-safari",remote:"hass:remote",scene:"hass:google-pages",script:"hass:file-document",sensor:"hass:eye",simple_alarm:"hass:bell",sun:"hass:white-balance-sunny",switch:"hass:flash",timer:"hass:timer",updater:"hass:cloud-upload",vacuum:"hass:robot-vacuum",water_heater:"hass:thermometer",weblink:"hass:open-in-new"};function Yt(t,e){if(t in qt)return qt[t];switch(t){case"alarm_control_panel":switch(e){case"armed_home":return"hass:bell-plus";case"armed_night":return"hass:bell-sleep";case"disarmed":return"hass:bell-outline";case"triggered":return"hass:bell-ring";default:return"hass:bell"}case"binary_sensor":return e&&"off"===e?"hass:radiobox-blank":"hass:checkbox-marked-circle";case"cover":return"closed"===e?"hass:window-closed":"hass:window-open";case"lock":return e&&"unlocked"===e?"hass:lock-open":"hass:lock";case"media_player":return e&&"off"!==e&&"idle"!==e?"hass:cast-connected":"hass:cast";case"zwave":switch(e){case"dead":return"hass:emoticon-dead";case"sleeping":return"hass:sleep";case"initializing":return"hass:timer-sand";default:return"hass:z-wave"}default:return console.warn("Unable to find icon for domain "+t+" ("+e+")"),Dt}}var Bt=function(t){It(window,"haptic",t)},Wt=function(t,e){return function(t,e,i){void 0===i&&(i=!0);var n,r=Vt(e),s="group"===r?"homeassistant":r;switch(r){case"lock":n=i?"unlock":"lock";break;case"cover":n=i?"open_cover":"close_cover";break;default:n=i?"turn_on":"turn_off"}return t.callService(s,n,{entity_id:e})}(t,e,Lt.includes(t.states[e].state))},Gt=function(t,e,i,n,r){var s;if(r&&i.double_tap_action?s=i.double_tap_action:n&&i.hold_action?s=i.hold_action:!n&&i.tap_action&&(s=i.tap_action),s||(s={action:"more-info"}),!s.confirmation||s.confirmation.exemptions&&s.confirmation.exemptions.some((function(t){return t.user===e.user.id}))||confirm(s.confirmation.text||"Are you sure you want to "+s.action+"?"))switch(s.action){case"more-info":(s.entity||i.entity||i.camera_image)&&(It(t,"hass-more-info",{entityId:s.entity?s.entity:i.entity?i.entity:i.camera_image}),s.haptic&&Bt(s.haptic));break;case"navigate":s.navigation_path&&(function(t,e,i){void 0===i&&(i=!1),i?history.replaceState(null,"",e):history.pushState(null,"",e),It(window,"location-changed",{replace:i})}(0,s.navigation_path),s.haptic&&Bt(s.haptic));break;case"url":s.url_path&&window.open(s.url_path),s.haptic&&Bt(s.haptic);break;case"toggle":i.entity&&(Wt(e,i.entity),s.haptic&&Bt(s.haptic));break;case"call-service":if(!s.service)return;var a=s.service.split(".",2),o=a[0],l=a[1],c=Object.assign({},s.service_data);"entity"===c.entity_id&&(c.entity_id=i.entity),e.callService(o,l,c),s.haptic&&Bt(s.haptic);break;case"fire-dom-event":It(t,"ll-custom",s),s.haptic&&Bt(s.haptic)}},Zt={humidity:"hass:water-percent",illuminance:"hass:brightness-5",temperature:"hass:thermometer",pressure:"hass:gauge",power:"hass:flash",signal_strength:"hass:wifi"},Jt={binary_sensor:function(t){var e=t.state&&"off"===t.state;switch(t.attributes.device_class){case"battery":return e?"hass:battery":"hass:battery-outline";case"cold":return e?"hass:thermometer":"hass:snowflake";case"connectivity":return e?"hass:server-network-off":"hass:server-network";case"door":return e?"hass:door-closed":"hass:door-open";case"garage_door":return e?"hass:garage":"hass:garage-open";case"gas":case"power":case"problem":case"safety":case"smoke":return e?"hass:shield-check":"hass:alert";case"heat":return e?"hass:thermometer":"hass:fire";case"light":return e?"hass:brightness-5":"hass:brightness-7";case"lock":return e?"hass:lock":"hass:lock-open";case"moisture":return e?"hass:water-off":"hass:water";case"motion":return e?"hass:walk":"hass:run";case"occupancy":return e?"hass:home-outline":"hass:home";case"opening":return e?"hass:square":"hass:square-outline";case"plug":return e?"hass:power-plug-off":"hass:power-plug";case"presence":return e?"hass:home-outline":"hass:home";case"sound":return e?"hass:music-note-off":"hass:music-note";case"vibration":return e?"hass:crop-portrait":"hass:vibrate";case"window":return e?"hass:window-closed":"hass:window-open";default:return e?"hass:radiobox-blank":"hass:checkbox-marked-circle"}},cover:function(t){var e="closed"!==t.state;switch(t.attributes.device_class){case"garage":return e?"hass:garage-open":"hass:garage";case"door":return e?"hass:door-open":"hass:door-closed";case"shutter":return e?"hass:window-shutter-open":"hass:window-shutter";case"blind":return e?"hass:blinds-open":"hass:blinds";case"window":return e?"hass:window-open":"hass:window-closed";default:return Yt("cover",t.state)}},sensor:function(t){var e=t.attributes.device_class;if(e&&e in Zt)return Zt[e];if("battery"===e){var i=Number(t.state);if(isNaN(i))return"hass:battery-unknown";var n=10*Math.round(i/10);return n>=100?"hass:battery":n<=0?"hass:battery-alert":"hass:battery-"+n}var r=t.attributes.unit_of_measurement;return"°C"===r||"°F"===r?"hass:thermometer":Yt("sensor")},input_datetime:function(t){return t.attributes.has_date?t.attributes.has_time?Yt("input_datetime"):"hass:calendar":"hass:clock"}};const Xt=(t,e,i,n)=>{n=n||{},i=null==i?{}:i;const r=new Event(e,{bubbles:void 0===n.bubbles||n.bubbles,cancelable:Boolean(n.cancelable),composed:void 0===n.composed||n.composed});return r.detail=i,t.dispatchEvent(r),r},Kt=(t,e)=>{if(t===e)return!0;if(t&&e&&"object"==typeof t&&"object"==typeof e){if(t.constructor!==e.constructor)return!1;let i,n;if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(i=n;0!=i--;)if(!Kt(t[i],e[i]))return!1;return!0}if(t instanceof Map&&e instanceof Map){if(t.size!==e.size)return!1;for(i of t.entries())if(!e.has(i[0]))return!1;for(i of t.entries())if(!Kt(i[1],e.get(i[0])))return!1;return!0}if(t instanceof Set&&e instanceof Set){if(t.size!==e.size)return!1;for(i of t.entries())if(!e.has(i[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(e)){if(n=t.length,n!==e.length)return!1;for(i=n;0!=i--;)if(t[i]!==e[i])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===e.toString();const r=Object.keys(t);if(n=r.length,n!==Object.keys(e).length)return!1;for(i=n;0!=i--;)if(!Object.prototype.hasOwnProperty.call(e,r[i]))return!1;for(i=n;0!=i--;){const n=r[i];if(!Kt(t[n],e[n]))return!1}return!0}return t!=t&&e!=e},Qt="ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0;class te extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.cancelled=!1,this.isRepeating=!1,this.ripple=document.createElement("mwc-ripple")}connectedCallback(){Object.assign(this.style,{position:"absolute",width:Qt?"100px":"50px",height:Qt?"100px":"50px",transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:"999"}),this.appendChild(this.ripple),this.ripple.primary=!0,["touchcancel","mouseout","mouseup","touchmove","mousewheel","wheel","scroll"].forEach((t=>{document.addEventListener(t,(()=>{this.cancelled=!0,this.timer&&(this.stopAnimation(),clearTimeout(this.timer),this.timer=void 0,this.isRepeating&&this.repeatTimeout&&(clearInterval(this.repeatTimeout),this.isRepeating=!1))}),{passive:!0})}))}bind(t,e){t.actionHandler&&Kt(e,t.actionHandler.options)||(t.actionHandler?(t.removeEventListener("touchstart",t.actionHandler.start),t.removeEventListener("touchend",t.actionHandler.end),t.removeEventListener("touchcancel",t.actionHandler.end),t.removeEventListener("mousedown",t.actionHandler.start),t.removeEventListener("click",t.actionHandler.end),t.removeEventListener("keyup",t.actionHandler.handleEnter)):t.addEventListener("contextmenu",(t=>{const e=t||window.event;return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0,e.returnValue=!1,!1})),t.actionHandler={options:e},e.disabled||(t.actionHandler.start=i=>{let n,r;this.cancelled=!1,i.touches?(n=i.touches[0].pageX,r=i.touches[0].pageY):(n=i.pageX,r=i.pageY),e.hasHold&&(this.held=!1,this.timer=window.setTimeout((()=>{this.startAnimation(n,r),this.held=!0,e.repeat&&!this.isRepeating&&(this.isRepeating=!0,this.repeatTimeout=setInterval((()=>{Xt(t,"action",{action:"hold"})}),e.repeat))}),this.holdTime))},t.actionHandler.end=t=>{if(["touchend","touchcancel"].includes(t.type)&&this.cancelled)return void(this.isRepeating&&this.repeatTimeout&&(clearInterval(this.repeatTimeout),this.isRepeating=!1));const i=t.target;t.cancelable&&t.preventDefault(),e.hasHold&&(clearTimeout(this.timer),this.isRepeating&&this.repeatTimeout&&clearInterval(this.repeatTimeout),this.isRepeating=!1,this.stopAnimation(),this.timer=void 0),e.hasHold&&this.held?e.repeat||Xt(i,"action",{action:"hold"}):e.hasDoubleClick?"click"===t.type&&t.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout((()=>{this.dblClickTimeout=void 0,Xt(i,"action",{action:"tap"})}),250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,Xt(i,"action",{action:"double_tap"})):Xt(i,"action",{action:"tap"})},t.actionHandler.handleEnter=t=>{13===t.keyCode&&t.currentTarget.actionHandler.end(t)},t.addEventListener("touchstart",t.actionHandler.start,{passive:!0}),t.addEventListener("touchend",t.actionHandler.end),t.addEventListener("touchcancel",t.actionHandler.end),t.addEventListener("mousedown",t.actionHandler.start,{passive:!0}),t.addEventListener("click",t.actionHandler.end),t.addEventListener("keyup",t.actionHandler.handleEnter)))}startAnimation(t,e){Object.assign(this.style,{left:t+"px",top:e+"px",display:null}),this.ripple.disabled=!1,this.ripple.startPress(),this.ripple.unbounded=!0}stopAnimation(){this.ripple.endPress(),this.ripple.disabled=!0,this.style.display="none"}}customElements.define("button-card-action-handler",te);const ee=(t,e)=>{const i=(()=>{const t=document.body;if(t.querySelector("button-card-action-handler"))return t.querySelector("button-card-action-handler");const e=document.createElement("button-card-action-handler");return t.appendChild(e),e})();i&&i.bind(t,e)},ie=m(((t={})=>e=>{ee(e.committer.element,t)}));function ne(t,e){(function(t){return"string"==typeof t&&t.includes(".")&&1===parseFloat(t)})(t)&&(t="100%");var i=function(t){return"string"==typeof t&&t.includes("%")}(t);return t=360===e?t:Math.min(e,Math.max(0,parseFloat(t))),i&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:t=360===e?(t<0?t%e+e:t%e)/parseFloat(String(e)):t%e/parseFloat(String(e))}function re(t){return Math.min(1,Math.max(0,t))}function se(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function ae(t){return t<=1?100*Number(t)+"%":t}function oe(t){return 1===t.length?"0"+t:String(t)}function le(t,e,i){t=ne(t,255),e=ne(e,255),i=ne(i,255);var n=Math.max(t,e,i),r=Math.min(t,e,i),s=0,a=0,o=(n+r)/2;if(n===r)a=0,s=0;else{var l=n-r;switch(a=o>.5?l/(2-n-r):l/(n+r),n){case t:s=(e-i)/l+(e1&&(i-=1),i<1/6?t+6*i*(e-t):i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}function he(t,e,i){t=ne(t,255),e=ne(e,255),i=ne(i,255);var n=Math.max(t,e,i),r=Math.min(t,e,i),s=0,a=n,o=n-r,l=0===n?0:o/n;if(n===r)s=0;else{switch(n){case t:s=(e-i)/o+(e>16,g:(65280&t)>>8,b:255&t}}(e)),this.originalInput=e;var r=me(e);this.originalInput=e,this.r=r.r,this.g=r.g,this.b=r.b,this.a=r.a,this.roundA=Math.round(100*this.a)/100,this.format=null!==(n=i.format)&&void 0!==n?n:r.format,this.gradientType=i.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=r.ok}return t.prototype.isDark=function(){return this.getBrightness()<128},t.prototype.isLight=function(){return!this.isDark()},t.prototype.getBrightness=function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},t.prototype.getLuminance=function(){var t=this.toRgb(),e=t.r/255,i=t.g/255,n=t.b/255;return.2126*(e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))},t.prototype.getAlpha=function(){return this.a},t.prototype.setAlpha=function(t){return this.a=se(t),this.roundA=Math.round(100*this.a)/100,this},t.prototype.toHsv=function(){var t=he(this.r,this.g,this.b);return{h:360*t.h,s:t.s,v:t.v,a:this.a}},t.prototype.toHsvString=function(){var t=he(this.r,this.g,this.b),e=Math.round(360*t.h),i=Math.round(100*t.s),n=Math.round(100*t.v);return 1===this.a?"hsv("+e+", "+i+"%, "+n+"%)":"hsva("+e+", "+i+"%, "+n+"%, "+this.roundA+")"},t.prototype.toHsl=function(){var t=le(this.r,this.g,this.b);return{h:360*t.h,s:t.s,l:t.l,a:this.a}},t.prototype.toHslString=function(){var t=le(this.r,this.g,this.b),e=Math.round(360*t.h),i=Math.round(100*t.s),n=Math.round(100*t.l);return 1===this.a?"hsl("+e+", "+i+"%, "+n+"%)":"hsla("+e+", "+i+"%, "+n+"%, "+this.roundA+")"},t.prototype.toHex=function(t){return void 0===t&&(t=!1),ue(this.r,this.g,this.b,t)},t.prototype.toHexString=function(t){return void 0===t&&(t=!1),"#"+this.toHex(t)},t.prototype.toHex8=function(t){return void 0===t&&(t=!1),function(t,e,i,n,r){var s,a=[oe(Math.round(t).toString(16)),oe(Math.round(e).toString(16)),oe(Math.round(i).toString(16)),oe((s=n,Math.round(255*parseFloat(s)).toString(16)))];return r&&a[0].startsWith(a[0].charAt(1))&&a[1].startsWith(a[1].charAt(1))&&a[2].startsWith(a[2].charAt(1))&&a[3].startsWith(a[3].charAt(1))?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join("")}(this.r,this.g,this.b,this.a,t)},t.prototype.toHex8String=function(t){return void 0===t&&(t=!1),"#"+this.toHex8(t)},t.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},t.prototype.toRgbString=function(){var t=Math.round(this.r),e=Math.round(this.g),i=Math.round(this.b);return 1===this.a?"rgb("+t+", "+e+", "+i+")":"rgba("+t+", "+e+", "+i+", "+this.roundA+")"},t.prototype.toPercentageRgb=function(){var t=function(t){return Math.round(100*ne(t,255))+"%"};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},t.prototype.toPercentageRgbString=function(){var t=function(t){return Math.round(100*ne(t,255))};return 1===this.a?"rgb("+t(this.r)+"%, "+t(this.g)+"%, "+t(this.b)+"%)":"rgba("+t(this.r)+"%, "+t(this.g)+"%, "+t(this.b)+"%, "+this.roundA+")"},t.prototype.toName=function(){if(0===this.a)return"transparent";if(this.a<1)return!1;for(var t="#"+ue(this.r,this.g,this.b,!1),e=0,i=Object.entries(fe);e=0;return e||!n||!t.startsWith("hex")&&"name"!==t?("rgb"===t&&(i=this.toRgbString()),"prgb"===t&&(i=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(i=this.toHexString()),"hex3"===t&&(i=this.toHexString(!0)),"hex4"===t&&(i=this.toHex8String(!0)),"hex8"===t&&(i=this.toHex8String()),"name"===t&&(i=this.toName()),"hsl"===t&&(i=this.toHslString()),"hsv"===t&&(i=this.toHsvString()),i||this.toHexString()):"name"===t&&0===this.a?this.toName():this.toRgbString()},t.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},t.prototype.clone=function(){return new t(this.toString())},t.prototype.lighten=function(e){void 0===e&&(e=10);var i=this.toHsl();return i.l+=e/100,i.l=re(i.l),new t(i)},t.prototype.brighten=function(e){void 0===e&&(e=10);var i=this.toRgb();return i.r=Math.max(0,Math.min(255,i.r-Math.round(-e/100*255))),i.g=Math.max(0,Math.min(255,i.g-Math.round(-e/100*255))),i.b=Math.max(0,Math.min(255,i.b-Math.round(-e/100*255))),new t(i)},t.prototype.darken=function(e){void 0===e&&(e=10);var i=this.toHsl();return i.l-=e/100,i.l=re(i.l),new t(i)},t.prototype.tint=function(t){return void 0===t&&(t=10),this.mix("white",t)},t.prototype.shade=function(t){return void 0===t&&(t=10),this.mix("black",t)},t.prototype.desaturate=function(e){void 0===e&&(e=10);var i=this.toHsl();return i.s-=e/100,i.s=re(i.s),new t(i)},t.prototype.saturate=function(e){void 0===e&&(e=10);var i=this.toHsl();return i.s+=e/100,i.s=re(i.s),new t(i)},t.prototype.greyscale=function(){return this.desaturate(100)},t.prototype.spin=function(e){var i=this.toHsl(),n=(i.h+e)%360;return i.h=n<0?360+n:n,new t(i)},t.prototype.mix=function(e,i){void 0===i&&(i=50);var n=this.toRgb(),r=new t(e).toRgb(),s=i/100;return new t({r:(r.r-n.r)*s+n.r,g:(r.g-n.g)*s+n.g,b:(r.b-n.b)*s+n.b,a:(r.a-n.a)*s+n.a})},t.prototype.analogous=function(e,i){void 0===e&&(e=6),void 0===i&&(i=30);var n=this.toHsl(),r=360/i,s=[this];for(n.h=(n.h-(r*e>>1)+720)%360;--e;)n.h=(n.h+r)%360,s.push(new t(n));return s},t.prototype.complement=function(){var e=this.toHsl();return e.h=(e.h+180)%360,new t(e)},t.prototype.monochromatic=function(e){void 0===e&&(e=6);for(var i=this.toHsv(),n=i.h,r=i.s,s=i.v,a=[],o=1/e;e--;)a.push(new t({h:n,s:r,v:s})),s=(s+o)%1;return a},t.prototype.splitcomplement=function(){var e=this.toHsl(),i=e.h;return[this,new t({h:(i+72)%360,s:e.s,l:e.l}),new t({h:(i+216)%360,s:e.s,l:e.l})]},t.prototype.triad=function(){return this.polyad(3)},t.prototype.tetrad=function(){return this.polyad(4)},t.prototype.polyad=function(e){for(var i=this.toHsl(),n=i.h,r=[this],s=360/e,a=1;at&&"object"==typeof t;return t.reduce(((t,i)=>(Object.keys(i).forEach((n=>{const r=t[n],s=i[n];Array.isArray(r)&&Array.isArray(s)?t[n]=r.concat(...s):e(r)&&e(s)?t[n]=Te(r,s):t[n]=s})),t)),{})}function Me(t,e){let i=[];return t&&t.forEach((t=>{let n=t;e&&e.forEach((e=>{e.id&&t.id&&e.id==t.id&&(n=Te(n,e))})),i.push(n)})),e&&(i=i.concat(e.filter((e=>!t||!t.find((t=>!(!t.id||!e.id)&&t.id==e.id)))))),i}const Ce=((t,...e)=>{const i=e.reduce(((e,i,n)=>e+(t=>{if(t instanceof et)return t.cssText;if("number"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\n take care to ensure page security.`)})(i)+t[n+1]),t[0]);return new et(i,tt)})` + :host { + position: relative; + display: block; + } + ha-card { + cursor: pointer; + overflow: hidden; + box-sizing: border-box; + position: relative; + display: flex; + justify-content: center; + align-items: center; + line-height: normal; + + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Old versions of Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + supported by Chrome, Opera and Firefox */ + } + ha-card.disabled { + pointer-events: none; + cursor: default; + } + :host(.tooltip) .tooltiptext { + pointer-events: none; + opacity: 0; + text-align: center; + padding: 4px; + border-radius: var(--ha-card-border-radius, 4px); + box-shadow: var( + --ha-card-box-shadow, + 0px 2px 1px -1px rgba(0, 0, 0, 0.2), + 0px 1px 1px 0px rgba(0, 0, 0, 0.14), + 0px 1px 3px 0px rgba(0, 0, 0, 0.12) + ); + background: var(--ha-card-background, var(--card-background-color, white)); + border: 1px solid var(--primary-text-color); + color: var(--primary-text-color); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 9999; + } + :host(.tooltip:hover) span.tooltiptext { + opacity: 1; + transition-delay: 1.5s; + } + ha-icon { + display: inline-block; + margin: auto; + --mdc-icon-size: 100%; + --iron-icon-width: 100%; + --iron-icon-height: 100%; + } + ha-card.button-card-main { + padding: 4% 0px; + text-transform: none; + font-weight: 400; + font-size: 1.2rem; + align-items: center; + text-align: center; + letter-spacing: normal; + width: 100%; + } + .ellipsis { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + #overlay { + align-items: flex-start; + justify-content: flex-end; + padding: 8px 7px; + opacity: 0.5; + /* DO NOT override items below */ + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 50; + display: flex; + } + #lock { + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + margin: unset; + width: 24px; + } + .invalid { + animation: blink 1s cubic-bezier(0.68, -0.55, 0.27, 1.55) infinite; + } + .hidden { + visibility: hidden; + opacity: 0; + transition: visibility 0s 1s, opacity 1s linear; + } + @keyframes blink { + 0% { + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0; + } + } + @-webkit-keyframes rotating /* Safari and Chrome */ { + from { + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } + } + @keyframes rotating { + from { + -ms-transform: rotate(0deg); + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -o-transform: rotate(0deg); + transform: rotate(0deg); + } + to { + -ms-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); + } + } + [rotating] { + -webkit-animation: rotating 2s linear infinite; + -moz-animation: rotating 2s linear infinite; + -ms-animation: rotating 2s linear infinite; + -o-animation: rotating 2s linear infinite; + animation: rotating 2s linear infinite; + } + + #container { + display: grid; + width: 100%; + height: 100%; + text-align: center; + align-items: center; + } + #img-cell { + display: flex; + grid-area: i; + height: 100%; + width: 100%; + max-width: 100%; + max-height: 100%; + align-self: center; + justify-self: center; + overflow: hidden; + justify-content: center; + align-items: center; + position: relative; + } + + ha-icon#icon { + height: 100%; + width: 100%; + max-height: 100%; + position: absolute; + } + img#icon { + display: block; + height: auto; + width: 100%; + position: absolute; + } + #name { + grid-area: n; + max-width: 100%; + align-self: center; + justify-self: center; + /* margin: auto; */ + } + #state { + grid-area: s; + max-width: 100%; + align-self: center; + justify-self: center; + /* margin: auto; */ + } + + #label { + grid-area: l; + max-width: 100%; + align-self: center; + justify-self: center; + } + + #container.vertical { + grid-template-areas: 'i' 'n' 's' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr min-content min-content min-content; + } + /* Vertical No Icon */ + #container.vertical.no-icon { + grid-template-areas: 'n' 's' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr min-content 1fr; + } + #container.vertical.no-icon #state { + align-self: center; + } + #container.vertical.no-icon #name { + align-self: end; + } + #container.vertical.no-icon #label { + align-self: start; + } + + /* Vertical No Icon No Name */ + #container.vertical.no-icon.no-name { + grid-template-areas: 's' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } + #container.vertical.no-icon.no-name #state { + align-self: end; + } + #container.vertical.no-icon.no-name #label { + align-self: start; + } + + /* Vertical No Icon No State */ + #container.vertical.no-icon.no-state { + grid-template-areas: 'n' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } + #container.vertical.no-icon.no-state #name { + align-self: end; + } + #container.vertical.no-icon.no-state #label { + align-self: start; + } + + /* Vertical No Icon No Label */ + #container.vertical.no-icon.no-label { + grid-template-areas: 'n' 's'; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } + #container.vertical.no-icon.no-label #name { + align-self: end; + } + #container.vertical.no-icon.no-label #state { + align-self: start; + } + + /* Vertical No Icon No Label No Name */ + #container.vertical.no-icon.no-label.no-name { + grid-template-areas: 's'; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + #container.vertical.no-icon.no-label.no-name #state { + align-self: center; + } + /* Vertical No Icon No Label No State */ + #container.vertical.no-icon.no-label.no-state { + grid-template-areas: 'n'; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + #container.vertical.no-icon.no-label.no-state #name { + align-self: center; + } + + /* Vertical No Icon No Name No State */ + #container.vertical.no-icon.no-name.no-state { + grid-template-areas: 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + #container.vertical.no-icon.no-name.no-state #label { + align-self: center; + } + + #container.icon_name_state { + grid-template-areas: 'i n' 'l l'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content; + } + + #container.icon_name { + grid-template-areas: 'i n' 's s' 'l l'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content min-content; + } + + #container.icon_state { + grid-template-areas: 'i s' 'n n' 'l l'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content min-content; + } + + #container.name_state { + grid-template-areas: 'i' 'n' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr min-content min-content; + } + #container.name_state.no-icon { + grid-template-areas: 'n' 'l'; + grid-template-columns: 1fr; + grid-template-rows: 1fr 1fr; + } + #container.name_state.no-icon #name { + align-self: end; + } + #container.name_state.no-icon #label { + align-self: start; + } + + #container.name_state.no-icon.no-label { + grid-template-areas: 'n'; + grid-template-columns: 1fr; + grid-template-rows: 1fr; + } + #container.name_state.no-icon.no-label #name { + align-self: center; + } + + /* icon_name_state2nd default */ + #container.icon_name_state2nd { + grid-template-areas: 'i n' 'i s' 'i l'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content 1fr; + } + #container.icon_name_state2nd #name { + align-self: end; + } + #container.icon_name_state2nd #state { + align-self: center; + } + #container.icon_name_state2nd #label { + align-self: start; + } + + /* icon_name_state2nd No Label */ + #container.icon_name_state2nd.no-label { + grid-template-areas: 'i n' 'i s'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr 1fr; + } + #container.icon_name_state2nd #name { + align-self: end; + } + #container.icon_name_state2nd #state { + align-self: start; + } + + /* icon_state_name2nd Default */ + #container.icon_state_name2nd { + grid-template-areas: 'i s' 'i n' 'i l'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content 1fr; + } + #container.icon_state_name2nd #state { + align-self: end; + } + #container.icon_state_name2nd #name { + align-self: center; + } + #container.icon_state_name2nd #label { + align-self: start; + } + + /* icon_state_name2nd No Label */ + #container.icon_state_name2nd.no-label { + grid-template-areas: 'i s' 'i n'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr 1fr; + } + #container.icon_state_name2nd #state { + align-self: end; + } + #container.icon_state_name2nd #name { + align-self: start; + } + + #container.icon_label { + grid-template-areas: 'i l' 'n n' 's s'; + grid-template-columns: 40% 1fr; + grid-template-rows: 1fr min-content min-content; + } + + [style*='--aspect-ratio'] > :first-child { + width: 100%; + } + [style*='--aspect-ratio'] > img { + height: auto; + } + @supports (--custom: property) { + [style*='--aspect-ratio'] { + position: relative; + } + [style*='--aspect-ratio']::before { + content: ''; + display: block; + padding-bottom: calc(100% / (var(--aspect-ratio))); + } + [style*='--aspect-ratio'] > :first-child { + position: absolute; + top: 0; + left: 0; + height: 100%; + } + } +`;const Ee=(t,e,i,n)=>{if(!((t,e,i)=>{const[n,r]=t.split(".",2);return Number(n)>e||Number(n)===e&&Number(r)>=i})(t.config.version,0,109))return function(t,e){let i;const n=xe(e.entity_id);return"binary_sensor"===n?(e.attributes.device_class&&(i=t(`state.${n}.${e.attributes.device_class}.${e.state}`)),i||(i=t(`state.${n}.default.${e.state}`))):i=e.attributes.unit_of_measurement&&!["unknown","unavailable"].includes(e.state)?e.state:"zwave"===n?["initializing","dead"].includes(e.state)?t("state.zwave.query_stage."+e.state,"query_stage",e.attributes.query_stage):t("state.zwave.default."+e.state):t(`state.${n}.${e.state}`),i||(i=t("state.default."+e.state)||t(`component.${n}.state.${e.state}`)||e.state),i}(e,i);if("unknown"===i.state||"unavailable"===i.state)return e("state.default."+i.state);if(i.attributes.unit_of_measurement)return`${i.state} ${i.attributes.unit_of_measurement}`;const r=xe(i.entity_id);if("input_datetime"===r){let t;if(!i.attributes.has_time)return t=new Date(i.attributes.year,i.attributes.month-1,i.attributes.day),jt(t,n);if(!i.attributes.has_date){const e=new Date;return t=new Date(e.getFullYear(),e.getMonth(),e.getDay(),i.attributes.hour,i.attributes.minute),Ht(t,n)}return t=new Date(i.attributes.year,i.attributes.month-1,i.attributes.day,i.attributes.hour,i.attributes.minute),$t(t,n)}return i.attributes.device_class&&e(`component.${r}.state.${i.attributes.device_class}.${i.state}`)||e(`component.${r}.state._.${i.state}`)||i.state};var Pe=Function.prototype.toString,Ae=Object.create,Ne=Object.defineProperty,je=Object.getOwnPropertyDescriptor,$e=Object.getOwnPropertyNames,He=Object.getOwnPropertySymbols,Re=Object.getPrototypeOf,Ve=Object.prototype,De=Ve.hasOwnProperty,Le=Ve.propertyIsEnumerable,Fe="function"==typeof He,Ie="function"==typeof WeakMap,ze=function(t,e){if(!t.constructor)return Ae(null);var i=t.constructor,n=t.__proto__||Re(t);if(i===e.Object)return n===e.Object.prototype?{}:Ae(n);if(~Pe.call(i).indexOf("[native code]"))try{return new i}catch(r){}return Ae(n)},Ue=function(t,e,i,n){var r=ze(t,e);for(var s in n.set(t,r),t)De.call(t,s)&&(r[s]=i(t[s],n));if(Fe){var a=He(t),o=a.length;if(o)for(var l=0,c=void 0;l{Ge&&t(),window.loadCardHelpers&&(Ge=await window.loadCardHelpers(),window.cardHelpers=Ge,t())}));console.info("%c BUTTON-CARD \n%c Version 3.4.2 ","color: orange; font-weight: bold; background: black","color: white; font-weight: bold; background: dimgray"),window.customCards=window.customCards||[],window.customCards.push({type:"button-card",name:"Button-Card",preview:!1,description:"A massively customizable custom button card"});let Je=class extends nt{constructor(){super(...arguments),this._cards={},this._cardsConfig={},this._entities=[],this._initial_setup_complete=!1,this._rippleHandlers=new rt((()=>this._ripple))}set hass(t){this._hass=t,Object.keys(this._cards).forEach((t=>{this._cards[t].hass=this._hass})),this._initial_setup_complete||this._initConnected()}disconnectedCallback(){super.disconnectedCallback(),this._clearInterval()}connectedCallback(){super.connectedCallback(),this._initial_setup_complete?this._startTimerCountdown():this._initConnected()}_initConnected(){void 0!==this._hass&&void 0!==this._config&&this.isConnected&&(this._initial_setup_complete=!0,this._startTimerCountdown())}_startTimerCountdown(){if(this._config&&this._config.entity&&"timer"===xe(this._config.entity)){const t=this._hass.states[this._config.entity];this._startInterval(t)}}_createCard(t){if(Ge)return Ge.createCardElement(t);{const e=function(t,e){void 0===e&&(e=!1);var i=function(t,e){return n("hui-error-card",{type:"error",error:t,config:e})},n=function(t,e){var n=window.document.createElement(t);try{n.setConfig(e)}catch(n){return console.error(t,n),i(n.message,e)}return n};if(!t||"object"!=typeof t||!e&&!t.type)return i("No type defined",t);var r=t.type;if(r&&r.startsWith("custom:"))r=r.substr("custom:".length);else if(e)if(zt.has(r))r="hui-"+r+"-row";else{if(!t.entity)return i("Invalid config given.",t);var s=t.entity.split(".",1)[0];r="hui-"+(Ut[s]||"text")+"-entity-row"}else r="hui-"+r+"-card";if(customElements.get(r))return n(r,t);var a=i("Custom element doesn't exist: "+t.type+".",t);a.style.display="None";var o=setTimeout((function(){a.style.display=""}),2e3);return customElements.whenDefined(t.type).then((function(){clearTimeout(o),It(a,"ll-rebuild",{},a)})),a}(t);return Ze.then((()=>{It(e,"ll-rebuild",{})})),e}}static get styles(){return Ce}render(){if(!this._config||!this._hass)return D``;this._stateObj=this._config.entity?this._hass.states[this._config.entity]:void 0;try{return this._evaledVariables=this._config.variables?this._objectEvalTemplate(this._stateObj,this._config.variables):void 0,this._cardHtml()}catch(t){t.stack?console.error(t.stack):console.error(t);const e=document.createElement("hui-error-card");return e.setConfig({type:"error",error:t.toString(),origConfig:this._config}),D` ${e} `}}shouldUpdate(t){return!(!this._hasTemplate&&!t.has("_timeRemaining")&&!function(t,e){if(e.has("_config"))return!0;const i=e.get("_hass");if(i)return t._entities.some((function(e){return(null==i?void 0:i.states[e])!==t._hass.states[e]}));return!1}(this,t))&&(this._expandTriggerGroups(),!0)}updated(t){if(super.updated(t),this._config&&this._config.entity&&"timer"===xe(this._config.entity)&&t.has("_hass")){const e=this._hass.states[this._config.entity],i=t.get("_hass");(i?i.states[this._config.entity]:void 0)!==e?this._startInterval(e):e||this._clearInterval()}}_clearInterval(){this._interval&&(window.clearInterval(this._interval),this._interval=void 0)}_startInterval(t){this._clearInterval(),this._calculateRemaining(t),"active"===t.state&&(this._interval=window.setInterval((()=>this._calculateRemaining(t)),1e3))}_calculateRemaining(t){t.attributes.remaining&&(this._timeRemaining=function(t){var e=Nt(t.attributes.remaining);if("active"===t.state){var i=(new Date).getTime(),n=new Date(t.last_changed).getTime();e=Math.max(e-(i-n)/1e3,0)}return e}(t))}_computeTimeDisplay(t){if(t)return function(t){var e=Math.floor(t/3600),i=Math.floor(t%3600/60),n=Math.floor(t%3600%60);return e>0?e+":"+Rt(i)+":"+Rt(n):i>0?i+":"+Rt(n):n>0?""+n:null}(this._timeRemaining||Nt(t.attributes.duration))}_getMatchingConfigState(t){if(!this._config.state)return;const e=this._config.state.find((t=>"template"===t.operator));if(!t&&!e)return;let i;const n=this._config.state.find((e=>{if(!e.operator)return t&&this._getTemplateOrValue(t,e.value)==t.state;switch(e.operator){case"==":return t&&t.state==this._getTemplateOrValue(t,e.value);case"<=":return t&&t.state<=this._getTemplateOrValue(t,e.value);case"<":return t&&t.state=":return t&&t.state>=this._getTemplateOrValue(t,e.value);case">":return t&&t.state>this._getTemplateOrValue(t,e.value);case"!=":return t&&t.state!=this._getTemplateOrValue(t,e.value);case"regex":return!(!t||!t.state.match(this._getTemplateOrValue(t,e.value)));case"template":return this._getTemplateOrValue(t,e.value);case"default":return i=e,!1;default:return!1}}));return!n&&i?i:n}_evalTemplate(t,e){try{return new Function("states","entity","user","hass","variables","html","'use strict'; "+e).call(this,this._hass.states,t,this._hass.user,this._hass,this._evaledVariables,D)}catch(i){const t=e.length<=100?e.trim():e.trim().substring(0,98)+"...";throw i.message=`${i.name}: ${i.message} in '${t}'`,i.name="ButtonCardJSTemplateError",i}}_objectEvalTemplate(t,e){const i=We(e);return this._getTemplateOrValue(t,i)}_getTemplateOrValue(t,e){if(["number","boolean"].includes(typeof e))return e;if(!e)return e;if("object"==typeof e)return Object.keys(e).forEach((i=>{e[i]=this._getTemplateOrValue(t,e[i])})),e;const i=e.trim();return"[[["===i.substring(0,3)&&"]]]"===i.slice(-3)?this._evalTemplate(t,i.slice(3,-3)):e}_getDefaultColorForState(t){switch(t.state){case"on":return this._config.color_on;case"off":return this._config.color_off;default:return this._config.default_color}}_getColorForLightEntity(t,e){let i=this._config.default_color;return t&&("on"===t.state?t.attributes.rgb_color?(i=`rgb(${t.attributes.rgb_color.join(",")})`,t.attributes.brightness&&(i=Oe(i,(t.attributes.brightness+245)/5))):e&&t.attributes.color_temp&&t.attributes.min_mireds&&t.attributes.max_mireds?(i=function(t,e,i){const n=new we("rgb(255, 160, 0)"),r=new we("rgb(166, 209, 255)"),s=new we("white"),a=(t-e)/(i-e)*100;return a<50?Se(r).mix(s,2*a).toRgbString():Se(s).mix(n,2*(a-50)).toRgbString()}(t.attributes.color_temp,t.attributes.min_mireds,t.attributes.max_mireds),t.attributes.brightness&&(i=Oe(i,(t.attributes.brightness+245)/5))):i=t.attributes.brightness?Oe(this._getDefaultColorForState(t),(t.attributes.brightness+245)/5):this._getDefaultColorForState(t):i=this._getDefaultColorForState(t)),i}_buildCssColorAttribute(t,e){let i,n="";return(null==e?void 0:e.color)?n=e.color:"auto"!==this._config.color&&"off"===(null==t?void 0:t.state)?n=this._config.color_off:this._config.color&&(n=this._config.color),i="auto"==n||"auto-no-temperature"==n?this._getColorForLightEntity(t,"auto-no-temperature"!==n):n||(t?this._getDefaultColorForState(t):this._config.default_color),i}_buildIcon(t,e){if(!this._config.show_icon)return;let i;if(null==e?void 0:e.icon)i=e.icon;else if(this._config.icon)i=this._config.icon;else{if(!t)return;i=function(t){if(!t)return Dt;if(t.attributes.icon)return t.attributes.icon;var e=Vt(t.entity_id);return e in Jt?Jt[e](t):Yt(e,t.state)}(t)}return this._getTemplateOrValue(t,i)}_buildEntityPicture(t,e){if(!this._config.show_entity_picture||!t&&!e&&!this._config.entity_picture)return;let i;return(null==e?void 0:e.entity_picture)?i=e.entity_picture:this._config.entity_picture?i=this._config.entity_picture:t&&(i=t.attributes&&t.attributes.entity_picture?t.attributes.entity_picture:void 0),this._getTemplateOrValue(t,i)}_buildStyleGeneric(t,e,i){var n,r;let s={};if((null===(n=this._config.styles)||void 0===n?void 0:n[i])&&(s=Object.assign(s,...this._config.styles[i])),null===(r=null==e?void 0:e.styles)||void 0===r?void 0:r[i]){let t={};t=Object.assign(t,...e.styles[i]),s=Object.assign(Object.assign({},s),t)}return Object.keys(s).forEach((e=>{s[e]=this._getTemplateOrValue(t,s[e])})),s}_buildCustomStyleGeneric(t,e,i){var n,r,s,a;let o={};if((null===(r=null===(n=this._config.styles)||void 0===n?void 0:n.custom_fields)||void 0===r?void 0:r[i])&&(o=Object.assign(o,...this._config.styles.custom_fields[i])),null===(a=null===(s=null==e?void 0:e.styles)||void 0===s?void 0:s.custom_fields)||void 0===a?void 0:a[i]){let t={};t=Object.assign(t,...e.styles.custom_fields[i]),o=Object.assign(Object.assign({},o),t)}return Object.keys(o).forEach((e=>{o[e]=this._getTemplateOrValue(t,o[e])})),o}_buildName(t,e){if(!1===this._config.show_name)return;let i;var n;return(null==e?void 0:e.name)?i=e.name:this._config.name?i=this._config.name:t&&(i=t.attributes&&t.attributes.friendly_name?t.attributes.friendly_name:(n=t.entity_id).substr(n.indexOf(".")+1)),this._getTemplateOrValue(t,i)}_buildStateString(t){var e;let i;if(this._config.show_state&&t&&t.state){const n=this._buildUnits(t);n?i=`${t.state} ${n}`:"timer"===xe(t.entity_id)?"idle"===t.state||0===this._timeRemaining?i=Ee(this._hass,this._hass.localize,t,this._hass.language):(i=this._computeTimeDisplay(t),"paused"===t.state&&(i+=` (${Ee(this._hass,this._hass.localize,t,this._hass.language)})`)):i=(null===(e=this._config)||void 0===e?void 0:e.show_units)||"sensor"!==xe(t.entity_id)?Ee(this._hass,this._hass.localize,t,this._hass.language):t.state}return i}_buildUnits(t){var e;let i;return t&&this._config.show_units&&(i=(null===(e=t.attributes)||void 0===e?void 0:e.unit_of_measurement)&&!this._config.units?t.attributes.unit_of_measurement:this._config.units?this._config.units:void 0),i}_buildLastChanged(t,e){return this._config.show_last_changed&&t?D` + + `:void 0}_buildLabel(t,e){if(!this._config.show_label)return;let i;return i=(null==e?void 0:e.label)?e.label:this._config.label,this._getTemplateOrValue(t,i)}_buildCustomFields(t,e){let i=D``;const n={},r={};return this._config.custom_fields&&Object.keys(this._config.custom_fields).forEach((e=>{const i=this._config.custom_fields[e];i.card?r[e]=this._objectEvalTemplate(t,i.card):n[e]=this._getTemplateOrValue(t,i)})),(null==e?void 0:e.custom_fields)&&Object.keys(e.custom_fields).forEach((i=>{const s=e.custom_fields[i];s.card?r[i]=this._objectEvalTemplate(t,s.card):n[i]=this._getTemplateOrValue(t,s)})),Object.keys(n).forEach((r=>{if(null!=n[r]){const s=Object.assign(Object.assign({},this._buildCustomStyleGeneric(t,e,r)),{"grid-area":r});i=D` + ${i} +
+ ${n[r]&&"html"===n[r].type?n[r]:lt(n[r])} +
+ `}})),Object.keys(r).forEach((n=>{if(null!=r[n]){const s=Object.assign(Object.assign({},this._buildCustomStyleGeneric(t,e,n)),{"grid-area":n});let a;Kt(this._cardsConfig[n],r[n])?a=this._cards[n]:(a=this._createCard(r[n]),this._cards[n]=a,this._cardsConfig[n]=We(r[n])),a.hass=this._hass,i=D` + ${i} +
+ ${a} +
+ `}})),i}_isClickable(t){let e=!0;const i=this._getTemplateOrValue(t,this._config.tap_action.action),n=this._getTemplateOrValue(t,this._config.hold_action.action),r=this._getTemplateOrValue(t,this._config.double_tap_action.action);return e="none"!=i||"none"!=n||"none"!=r,e}_rotate(t){return!!(null==t?void 0:t.spin)}_blankCardColoredHtml(t){const e=Object.assign({background:"none","box-shadow":"none"},t);return D` + +
+
+ `}_cardHtml(){var t,e;const i=this._getMatchingConfigState(this._stateObj),n=this._buildCssColorAttribute(this._stateObj,i);let r=n,s={},a={};const o={},l=this._buildStyleGeneric(this._stateObj,i,"lock"),c=this._buildStyleGeneric(this._stateObj,i,"card"),h=this._buildStyleGeneric(this._stateObj,i,"tooltip"),u={"button-card-main":!0,disabled:!this._isClickable(this._stateObj)};switch((null===(t=this._config)||void 0===t?void 0:t.tooltip)&&this.classList.add("tooltip"),c.width&&(this.style.setProperty("flex","0 0 auto"),this.style.setProperty("max-width","fit-content")),this._config.color_type){case"blank-card":return this._blankCardColoredHtml(c);case"card":case"label-card":{const t=function(t){const e=new we(ke(t));return e.isValid&&e.getLuminance()>.5?"rgb(62, 62, 62)":"rgb(234, 234, 234)"}(n);s.color=t,a.color=t,s["background-color"]=n,s=Object.assign(Object.assign({},s),c),r="inherit";break}default:s=c}this._config.aspect_ratio?(o["--aspect-ratio"]=this._config.aspect_ratio,s.position="absolute"):o.display="inline",this.style.setProperty("--button-card-light-color",this._getColorForLightEntity(this._stateObj,!0)),this.style.setProperty("--button-card-light-color-no-temperature",this._getColorForLightEntity(this._stateObj,!1)),a=Object.assign(Object.assign({},a),l);const d=this._config.extra_styles?D` + + `:D``;return D` + ${d} +
+ + ${this._buttonContent(this._stateObj,i,r)} + + +
+ ${this._getLock(a)} + ${(null===(e=this._config)||void 0===e?void 0:e.tooltip)?D` + + ${this._getTemplateOrValue(this._stateObj,this._config.tooltip)} + + `:""} + `}_getLock(t){return this._config.lock&&this._getTemplateOrValue(this._stateObj,this._config.lock.enabled)?D` +
+ +
+ `:D``}_buttonContent(t,e,i){const n=this._buildName(t,e),r=this._config.show_state&&this._config.state_display?this._getTemplateOrValue(t,this._config.state_display):void 0,s=r||this._buildStateString(t),a=function(t,e){if(!t&&!e)return;let i;return i=e?t?`${t}: ${e}`:e:t,i}(n,s);switch(this._config.layout){case"icon_name_state":case"name_state":return this._gridHtml(t,e,this._config.layout,i,a,void 0);default:return this._gridHtml(t,e,this._config.layout,i,n,s)}}_gridHtml(t,e,i,n,r,s){const a=this._getIconHtml(t,e,n),o=[i],l=this._buildLabel(t,e),c=this._buildStyleGeneric(t,e,"name"),h=this._buildStyleGeneric(t,e,"state"),u=this._buildStyleGeneric(t,e,"label"),d=this._buildLastChanged(t,u),p=this._buildStyleGeneric(t,e,"grid");return a||o.push("no-icon"),r||o.push("no-name"),s||o.push("no-state"),l||d||o.push("no-label"),D` +
+ ${a||""} + ${r?D` +
+ ${"html"===r.type?r:lt(r)} +
+ `:""} + ${s?D` +
+ ${"html"===s.type?s:lt(s)} +
+ `:""} + ${l&&!d?D` +
+ ${"html"===l.type?l:lt(l)} +
+ `:""} + ${d||""} ${this._buildCustomFields(t,e)} +
+ `}_getIconHtml(t,e,i){const n=this._buildIcon(t,e),r=this._buildEntityPicture(t,e),s=this._buildStyleGeneric(t,e,"entity_picture"),a=this._buildStyleGeneric(t,e,"icon"),o=this._buildStyleGeneric(t,e,"img_cell"),l=this._buildStyleGeneric(t,e,"card"),c=Object.assign({color:i,width:this._config.size,position:this._config.aspect_ratio||l.height?"absolute":"relative"},a),h=Object.assign(Object.assign({},c),s),u=this._buildLiveStream(h);return n||r?D` +
+ ${!n||r||u?"":D` + + `} + ${u||""} + ${r&&!u?D` + + `:""} +
+ `:void 0}_buildLiveStream(t){return this._config.show_live_stream&&this._config.entity&&"camera"===xe(this._config.entity)?D` + + `:void 0}_configFromLLTemplates(t,e){const i=e.template;if(!i)return e;let n,r={};const s=i&&Array.isArray(i)?i:[i];return null==s||s.forEach((e=>{var i;if(!(null===(i=t.config.button_card_templates)||void 0===i?void 0:i[e]))throw new Error(`Button-card template '${e}' is missing!`);const s=this._configFromLLTemplates(t,t.config.button_card_templates[e]);r=Te(r,s),n=Me(n,s.state)})),r=Te(r,e),r.state=Me(n,e.state),r}setConfig(t){if(!t)throw new Error("Invalid configuration");this._cards={},this._cardsConfig={};const e=function(){var t=document.querySelector("home-assistant");if(t=(t=(t=(t=(t=(t=(t=(t=t&&t.shadowRoot)&&t.querySelector("home-assistant-main"))&&t.shadowRoot)&&t.querySelector("app-drawer-layout partial-panel-resolver"))&&t.shadowRoot||t)&&t.querySelector("ha-panel-lovelace"))&&t.shadowRoot)&&t.querySelector("hui-root")){var e=t.lovelace;return e.current_view=t.___curView,e}return null}()||function(){let t=document.querySelector("hc-main");if(t=t&&t.shadowRoot,t=t&&t.querySelector("hc-lovelace"),t=t&&t.shadowRoot,t=t&&(t.querySelector("hui-view")||t.querySelector("hui-panel-view")),t){const e=t.lovelace;return e.current_view=t.___curView,e}return null}();let i=We(t);i=this._configFromLLTemplates(e,i),this._config=Object.assign(Object.assign({type:"custom:button-card",group_expand:!1,hold_action:{action:"none"},double_tap_action:{action:"none"},layout:"vertical",size:"40%",color_type:"icon",show_name:!0,show_state:!1,show_icon:!0,show_units:!0,show_label:!1,show_entity_picture:!1,show_live_stream:!1,card_size:3},i),{default_color:"DUMMY",color_off:"DUMMY",color_on:"DUMMY",lock:Object.assign({enabled:!1,duration:5,unlock:"tap"},i.lock)}),this._config.entity&&Ft.has(xe(this._config.entity))?this._config=Object.assign({tap_action:{action:"toggle"}},this._config):this._config=Object.assign({tap_action:{action:"more-info"}},this._config),this._config.default_color="var(--primary-text-color)","icon"!==this._config.color_type?this._config.color_off="var(--card-background-color)":this._config.color_off="var(--paper-item-icon-color)",this._config.color_on="var(--paper-item-icon-active-color)";const n=JSON.stringify(this._config);if(this._entities=[],Array.isArray(this._config.triggers_update)?this._entities=[...this._config.triggers_update]:"string"==typeof this._config.triggers_update&&"all"!==this._config.triggers_update&&this._entities.push(this._config.triggers_update),"all"!==this._config.triggers_update){const t=new RegExp(/states\[\s*('|\\")([a-zA-Z0-9_]+\.[a-zA-Z0-9_]+)\1\s*\]/,"gm"),e=new RegExp(/states\[\s*('|\\")([a-zA-Z0-9_]+\.[a-zA-Z0-9_]+)\1\s*\]/,"m"),i=n.match(t);null==i||i.forEach((t=>{const i=t.match(e);i&&!this._entities.includes(i[2])&&this._entities.push(i[2])}))}this._config.entity&&!this._entities.includes(this._config.entity)&&this._entities.push(this._config.entity),this._expandTriggerGroups();const r=new RegExp("\\[\\[\\[.*\\]\\]\\]","m");this._hasTemplate=!("all"!==this._config.triggers_update||!n.match(r)),this._initial_setup_complete||this._initConnected()}_loopGroup(t){t&&t.forEach((t=>{var e,i;(null===(e=this._hass)||void 0===e?void 0:e.states[t])&&("group"===xe(t)&&(null===(i=this._hass.states[t].attributes)||void 0===i?void 0:i.entity_id)?this._loopGroup(this._hass.states[t].attributes.entity_id):this._entities.includes(t)||this._entities.push(t))}))}_expandTriggerGroups(){var t;this._hass&&(null===(t=this._config)||void 0===t?void 0:t.group_expand)&&this._entities&&this._entities.forEach((t=>{var e,i;"group"===xe(t)&&this._loopGroup(null===(i=null===(e=this._hass)||void 0===e?void 0:e.states[t].attributes)||void 0===i?void 0:i.entity_id)}))}getCardSize(){var t;return(null===(t=this._config)||void 0===t?void 0:t.card_size)||3}_evalActions(t,e){const i=We(t),n=t=>t?(Object.keys(t).forEach((e=>{"object"==typeof t[e]?t[e]=n(t[e]):t[e]=this._getTemplateOrValue(this._stateObj,t[e])})),t):t;return i[e]=n(i[e]),!i[e].confirmation&&i.confirmation&&(i[e].confirmation=n(i.confirmation)),i}handleRippleActivate(t){this._ripple.then((e=>e&&e.startPress&&this._rippleHandlers.startPress(t)))}handleRippleDeactivate(){this._ripple.then((t=>t&&t.endPress&&this._rippleHandlers.endPress()))}handleRippleFocus(){this._ripple.then((t=>t&&t.startFocus&&this._rippleHandlers.startFocus()))}handleRippleBlur(){this._ripple.then((t=>t&&t.endFocus&&this._rippleHandlers.endFocus()))}_handleAction(t){var e;if(null===(e=t.detail)||void 0===e?void 0:e.action)switch(t.detail.action){case"tap":this._handleTap();break;case"hold":this._handleHold();break;case"double_tap":this._handleDblTap()}}_handleTap(){const t=this._config;t&&Gt(this,this._hass,this._evalActions(t,"tap_action"),!1,!1)}_handleHold(){const t=this._config;t&&Gt(this,this._hass,this._evalActions(t,"hold_action"),!0,!1)}_handleDblTap(){const t=this._config;t&&Gt(this,this._hass,this._evalActions(t,"double_tap_action"),!1,!0)}_handleUnlockType(t){const e=this._config;e&&e.lock.unlock===t.detail.action&&this._handleLock()}_handleLock(){const t=this.shadowRoot.getElementById("lock");if(!t)return;if(this._config.lock.exemptions){if(!this._hass.user.name||!this._hass.user.id)return;let e=!1;if(this._config.lock.exemptions.forEach((t=>{(!e&&t.user===this._hass.user.id||t.username===this._hass.user.name)&&(e=!0)})),!e)return t.classList.add("invalid"),void window.setTimeout((()=>{t&&t.classList.remove("invalid")}),3e3)}const e=this.shadowRoot.getElementById("overlay");if(e.style.setProperty("pointer-events","none"),t){const e=document.createAttribute("icon");e.value="mdi:lock-open-outline",t.attributes.setNamedItem(e),t.classList.add("hidden")}window.setTimeout((()=>{if(e.style.setProperty("pointer-events",""),t){t.classList.remove("hidden");const e=document.createAttribute("icon");e.value="mdi:lock-outline",t.attributes.setNamedItem(e)}}),1e3*this._config.lock.duration)}_stopPropagation(t){t.stopPropagation()}};var Xe,Ke,Qe;t([J()],Je.prototype,"_hass",void 0),t([J()],Je.prototype,"_config",void 0),t([J()],Je.prototype,"_timeRemaining",void 0),t([(Xe="mwc-ripple",(t,e)=>{const i={async get(){return await this.updateComplete,this.renderRoot.querySelector(Xe)},enumerable:!0,configurable:!0};return void 0!==e?X(i,t,e):K(i,t)})],Je.prototype,"_ripple",void 0),t([(Ke={passive:!0},(t,e)=>void 0!==e?((t,e,i)=>{Object.assign(e[i],t)})(Ke,t,e):((t,e)=>Object.assign(Object.assign({},e),{finisher(i){Object.assign(i.prototype[e.key],t)}}))(Ke,t))],Je.prototype,"handleRippleActivate",null),Je=t([(Qe="button-card",t=>"function"==typeof t?((t,e)=>(window.customElements.define(t,e),e))(Qe,t):((t,e)=>{const{kind:i,elements:n}=e;return{kind:i,elements:n,finisher(e){window.customElements.define(t,e)}}})(Qe,t))],Je); diff --git a/www/community/button-card/button-card.js.gz b/www/community/button-card/button-card.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..34dea7a7f5e6293a2a7191b769ae00d9cceae28c GIT binary patch literal 27332 zcmV(zK<2+6iwFpl+mvAf|6+A?bZ>4gV_|Y+E^2cC)V=#++cxqj{Qo|M%%%<*QHo^8 zjzgJI)1=vUw`sa@+WuNc>rfJ8aYKdk|nd&8#ap| zVSnG6i9yuzx>Ghu(jaF};8&B>cn2)XSZfBI;lL9=7sKuJ2gy^vH%K}i$4>qHJQ+Fr z`*z^lIE&N{94~u{Kd>42;DdEGo4^^QEMKK@3-b5(gZ+Im%PE_MF_W_t_1vJCBypCv zm~X9OUSw+R$(ei%<7x77e;;AC=ku@bWR>N~;;V=ec=z|Ol5pDU?fK35-DMJ8&%!AB zDGin{qg6J49z@YNn0#+CCgEY_l^N~wmjL+L=133Z6N%22{KTRftlif+m014ivjQtcu9~dlN7fR=l<@OH` zU4)0b*LMaH%UhA(b60++?@j?7sLgdoQ_Q@jdlf`0mU(NAG~TQz{Cq%QoSx1U5OY5u zAbyujne8Ax^9A*DXAK{#cH8X(N#xxa3cQ7-r{ugl53*-D^fg}PECVR6C9dS%K&88~ z^RR$P)2fahT3byf6r2rv|K=K_Q_khICw8~7NA6Z#XIGb)8oVod;a z5|j4#6FbKhDp%Id{7evD&&~OOopyfSAGNWh%Ib(JVsu#KaOA+sSLsEfaOM;-G?xJ* z`;x&-m>s$R)-9`uV3Z5kZm$Zbpn0X|!Dwh#+JT8;OQBpU$KxQU(zMcrTBH+mk%(fb zEC?5U$;$Om!0Ikjb`>V8Ot7{6{S_ofn+?$-YZ{Z|M*eD-DZ&I@A>(qLbq>YoEX%Xi z{M;4D7noO@X0_%RA<$#c>BFFGiFGByxvbrHoPo2$V1OWa^Big>;sZe>OWP^1Gl9M> z5IUg~YcMnTeGL4YmrO`@pwN(PR!L4Ken>eO0)6c7=K|eA2LQtgfM)JLr5Os$bSJ(I z?NxB@d9uJSAO**r`w#8&*1J!=C-83o|4!iF>BzCq|NX89LZtul-KWPd;m4DgE$jYM z|KX_ZG*x)uHznFb@BH7jbnE{6)2IIE!NxlOw*`Ohpa1**=z-(hdpMAaM{C7}5tj`@ z{&;J_RDdnJv_@VGvH>{4b|Dnjg-_-$0qDRw;`40eCMbp?DTZ1TkZM$FP7<6WO{z;8 zXPp3dmrNtoSD#AP2m#h+4vd302*Mpj5TGd}O%%!s5Zqz;mo=j%K?S zWB89yu&%2L7HG6w#k#mKm8_gCmJz@X5SlZgG?}n0OF-W7gk*``W}q9cmQ&KVowXEq zCA$fc-RK=S3VFi){SasLBPv)R*cb>TCN!1ZDo=oOfZ%nCi%FEkuzE^(vY{~vsWM76 zpiAXx#Q~U}LYHu{Oj3>sH`eD%fUp8>z$i$=ypaVo=${!-L=Q;62Mp36ZbHxCG?sXV z5)gD~6qFH&Xosuw$!W%EY~TPda1HHfLIfhzBO#L}j%)A$YLIbSzUa*FxG|v>R)3+#|*@#E%lI1V&z5@VTIN2!%Yb1)#Ygo*-X18&=A2$@qq4 ztEgTYCu>#^$l`sV?)98+P)Lm<%0+S=4|O6P3u2F0klMI!)i6?!4rJ*AlY1UI57%IeyUGb=PG4mVtA#IYT|`P7a*{zoEXe=j!yZ|vOENu&d(*5 zsd-j6-f*jxm4-Uwn`EI^UzBaTk)dPGtJu2s<^%=rQRdmp0QuOpke6kPI=);B6r_yO z3`XInrAwPv=)%U{ZAhj)p8w>fLTs82w8<{5)*s$hPF04bJf$rpTF7J~uZu3dMG7UJFabqZS+#VeWhTSUHMP}iJ z-75Qp4mzL^;XbkAdntZN9_QkrMtmxFB2n8FKmAyr9BmXx+5)yjiFpP8fn(ZRIi+ie zjS8^}Ir+RvnKe*s2XT3T`x;^rplw_D33{OV3Gm40Y4VYj(XY}Jda}Mu5|~lkDi4cV z6ZlNx=(>eQeGo!kD}$~g)?&)IwZwtUF3R;?1kYb3O(ZBQ1wf2QIVRiQ+uPc@!9$0; zXoi+0xV$V^J?m0MD}1+cnJ*-^d<83!L(Uc>C|fO={19tF>*pW%C4vaEAuKHjM3C*q z%l8e&i!=+$E{2+QBrOn+#-l69chvvlX*E{LO71Coki0?G|qlD+UFZU^z7VgExI9bKhuW8SUhKqY;>!uAJ z)yPoOekMT_*)=Q$P-_!$bHO`#l?r|e``|x>zW|nJ!?jpJPpzvf*2+^W=;Dfce1(g$ zpi>^y-7AkFzQ)}#z!KVo9w=pn(Z-l`@E}FW(~n|4uxqZ|QYxer?$>ni!dr4dix`MQ zpswDC=uIR!#=c3Y&VdBZqbG&j2>nkI#^^L5i$J?-4Ady-Jq@Z>fQCc2X)h7guCfIj zdWw!qZe_fgK3)_xp;(l!eKB+QjebZahW;a^5i4BZuz9XFkmZCK2o&0->XK`KA)LO# z;^OqU4+C+y2tpQOeZhn17uwq90jGumN4XIRo@^$Ke{Y)$bm5dzRG9U*IvMI3C2#&uF+7-`)Sw zale&k_3!Vk^8%f&Sn;0F^d-o}68S~HXY*is{rv1~2)TW4TP|91s0K>}dyy>glo$pC zI%oG|kjA$4O$>5m8RVcGvzDyby5bXROd4dlw9XY+GgrtYSIE>E1gmicI`K;@93jy-LZX}x!NaBK27eh|#yhM#1kNC5~{mnlY2x?_lm)6Mrff_$!x%;bd zOGMS~2b6edkxTcg5UfP$VsZOv2svQ=x?<_|8AJciBz*?5$;$HU2y><9Tvqrg!jeNw zKPm7t(d!l1^fHx2B&;#q5*9qBu{%n zPv@luPFbq$CoYZ9Res5Z{4NS0>%dLAvoOtaf`a2EX7813_s;YX`H6`WB_Y7jtIfqA zE3O!RmR`?(m&{!TE{aE7~;g*w1y7=y??h_j9F@S34P)ZkLM9_-Z)Si9^gdA zjG-0oml9ZVmxYm0m7^E5`;)&`n^Ybi?xH6n=SePr7F32D2KKX?azB1=ukX%->^W#+ zmu%{NDLt6}u67CV3|p{X!y=a(D8d2?<1i0{DEtjKF0vfZZ_>gYgk%hObH%2*`!zR} zL7Nlh75s(m-D({aR&C#b8~e3Kxj{F6J**&40|iu+g5ds7J<`oYYmcQ%`!WYZ-uV*LgsS?b!qkvPrHTu`*cl-3&YI@ zq@mxi4)HMd;;x|yNb!^oiDNik-aLf2Roz7yq;yCtgm0CHHH}X6XahfryP8S_qt-ti zuKDXySO^fl7jTy2>8hj|o(2oN2s1{+AbxWfaY0weI*8Z6(!F6>5?!I^jiVSjUz)mX z68Twh1x$(`_|_@2nU^`m)@p0vL!&g1o74kwqe6lN?!0A*_u< z9`H6~$>}>=D=S%ApnY}$MpJaXeX30jG>L2!5ap^gj7yLf%s8fPB6)4mR-P03O2Zmd z6V|2Pa06;6t*SX&vE(g?B|LeHX_z&Qv`}nEumqJSIomAxMr;C*6}xEzMP?3@0e_%rq6}0>+tZs&1DV zjdz~x*Ak0j3lupwJE_;Gva=c#$s1#f&ds$61B$WcsM&4MTVkgHPW|HsKoOb5BkcYL zNx`-Nr~kMKI@^>nLPqWYy4N%2lbZ^j4w^yehnr2>ZPd&NT2~zH?U_|>*;GahDg-sl18DXO z;dB6VdBdU4rX2nt993_oaFaX-imy1+p~G-v^*B=NI`G!T6~pCypq_|QqX@F=n9M?> zmj(g+sE(WiJai8}24UW67{53hhvAv7egGkm1q<2Lz}STV>rOQ2ZiN`S$F~~NOXK8G z1J+|DsKbj+%d-83vXvp0#&JWhCf}>eFvZumiOd1NqP^EQeXQz;PT-b~N%LeC$$8__ z4z&`26wb&rA;iac(R~x$q$tRMN^_#%fxPD1(Y2M=4yG_t)hE0Gn$)t2q?o(dpGi; zEjuAis)CRus3AJeO}tC$GflWr$mK(q7h{3R2j=gFnJWXqP8v%rH9YRy3WoP+{*EZk6&C`ycJ}ZF}SrsP6t#uB|Pg zDwbG>q}p-fz~&RuAe$F*8}(oM0dw;4O_CrZ+IIT9+1zw=;Oy^PbcK#h=|tje&RCuy zX1$O{J8EE1G-Whm%!iiB8v1@&?n^`wTg@!5haWQ-4zoW=5ENXFl)t0-cps( ztmw9W$XM(BD$ar#gQD+SN!ofp$+Gw4e9VGrS2|@vB6=S9Iq|wo4YuT16&#(9M>of-$wi(BuW*yIiiV0p^Lh~b_KhA9l|0=k z;-LFTbBYM_@?vwGt8;NdNn`-l|$-zw< z4r<@kD|4mmI%$@8AwFf()r7qXFXuT)08BNjh0c&i=J0HOv=#C|7U<36qxvWgzR=z6 zd^8A+6WX{7*fjG zoHw6ZxwTHdI)axX7QIRvrSGwK2v5V&?&M+_?ni!t!yQp_#U^$qxu+Y2>d%Z}e45Z$Y z#a7`IMnmRCu`yx3m;+LBN=N(O$FYb18dj#ey?){Z(Eo!hTO1tX};6yu1o;h<@ zce|s!LNbvXRzm5!H?CIS-G+<}{wpx)+dOiZ?nL9O)pTnZX}F6N4jJSelxl+?Bw3uB z2R`H`jK#QS6^kw2y?C>c7pawVAf)ZZT?N#-9`SY#dV&}xbcN6q9+53S?rx^Dr8CF0j)u@+gaLN71 zJi6>_mowyUbZ@weTg8no1WYoVHrzL2lQ|U^g(_Np<%*VfuYgV*++xzMjWSBmeA`{^ z$|@?mk$X$C-@tUKWj84qAD=?x4BmA4Zae-iqkYw{hz;|~^)PWtH2Bp{VGJ=y-`f0{ zfm~4u5D-gy8HEwNk>2^rIa1+C^Tw;Wbb;x6^jP)LH4Na=&F3uU)Ix{rWeJYqg}Twi ztMU65^?I^^tyQA7UIM0UuT~bZ&E9UVCJWSh`#Qlr`5SwqB9-25t|klcO42z!%Z(U4 zLGCZ84inUE8%Xii*=&r2?}7L^|KS%D)Fo?F9ign2!sCW;0sFMSjU`}PFp&4HDKLQv zO4in51>+pE)+%FD=o=(I;|4={A&h)yWjV~JyJ6U)te}c2zOq(BqmY9j1F%gDZ>3x_ zg%fR-HjF`~$Xti3F<7Tt>sppPolzs|6&w?5r3ETCRM7A4>v{ah zCdZf^MoT)ewG9;G5D)VN}W#|50nY2oOC z5k~w?N!bf9louP?nRJ9r#Sh0T+Yhw%1Jr>VHbZ69kp2BkQ^5dILE4(;{=@0I?>;Iv zulS#zf3}C-&p$iE%^4&d7MmBz=9gbKzijODujj9_7mJbeu0PzI2hT<#45KCDFy4Q7 z=`I2N&;R}IT{dc4?hG1#cW$5md-P!Fyc<2dT$DSf3w~6%mcgDyh_)U@t`#xV;?tDk z0LcKI=kcfv?1Y!QRLDMT;WGD2uXJSts3ba5#d5J9V&Gk}7aJ;6oQeQYO6V{%tK7eM z+UcX84@fqBbNGU8>d6VxRsPV&V1(6Z+!U0Morj(NsEpK&p$TPO4i|<1QLw>_3Ydoh zYU8pf;Z)`zD)|}wr`$)u+;Q%oTW70y8eChh^(qlR-mX~2fBnR!vHbmZzDmWe=J5B~G7Tg8#?*hTVn%-={Cc*!T;b(i>x_X( ziQdfc`!$FX{_8tHZjtzcP594|dj)JSx36>e&~ZQJ{u%~CesE`VkZc}gjVVhed+@mc zK{wY5UFk_4G!-nqUwG$Muz;?X3+UuU@-p_C5Tku=)cY8}_}P^8mj_Md6<1KH$Q-fH6DnCml@{1(;VJ4?sHjW!w%)5T|V50DbkW zc0MTG%s&7iUNj9@Hh`S*g*dZzUo;k_9TcNj;+dnAQPR2yo=V~A?Y&>~g43Hjm!+oL zIyV;lysR~%TDMj+YrMK`*sl;#Y^U9aLA`o))6mV5ueOb&f{f>S-4WH?p=!0(&p&S& znLd@5z?**N5k%Zaj^v^T4p!gVK&2*BEZq5RK>IoYu3n9WK~!Nz7i)W~lK=Ic~G3y&)Kup4GOTHp~{l`G7z+ zixObc^fMUaX3WFmp3~O8KR@mfb^PHjw|56C)5dbLP}woQo4z7D%ENu=3W67cJzjE#OnYRnYLrurkU`&wBOn#lxR}w%i4q zhO320!%8kyvfL<%FIBRZJ_C^QbQF1R%ghb4glFPs=hdsuix(;pkx zsd8Xi63qZdWu|q3U04M-C!U$gjR>t&(QdvcCk6ynEn335a6q-9%WX!KY@3_EFZj_2 zlsV^n^^`I~qgHGtmq(KFh+CXWf<+u=-v!^Hjm#|O77SQ}))!xVVM*&NMZJ)#hG+QDLdh1$ z!Jjue)f+9F{D8gV#T`2PP^BM2`(THaHMBAC6J**rEv=OAa-CK2ofhCT4jD-No}r@l z!(-rxNGI)M{0k(7lth-rf3%f%CP-{3w9tptBA z1a~J2c|)YIo#7Tq(a=6~*Vmx6coyAY3MUp<`#lR0*g_Mb%qpCsN!~p}6V)o|69(+w z+hv-6aGQJhNSTVY_>VD5^tO&AJB=20EIcDN6T=;m0LtbxZggtnvhS z74H9x9QT_lJH{w4u^(?X=tL(XHHE`<;e~=95i6v~KLFbCYCMj>N>)rd?uw+%M*Var zxW^dL9YJxQ8TXe}qT^B|5SXdnj!eUbo2 zM9APfctbdx;0D7qyb7nZbC5B<6XseU8Ab#Iz(Zj&-!r-Zk1+ZH%x6HV6y$cETwX>P zYg_@bOq)dEg5;|B0V#M41>g7wq;jAYrq%G|q8N);7UIcV*m-<~J3{n{JU&R7Cx$HY z=ptz!b!zca0FZ2z>Py7qt zEY1>Wga5T$)al@p{y;9FW7*bKFj=h@<@ZMbTzWCb1B_IIB%cxbJ>;ZW@L9=kt8jlU z*N6y-ew*t=={P4aO>&wXtPqror^qEKSAJp!-f9)eh%Je>z?7KJS-MEj@60MM#iEZS z&j$T9rvo2xA3oDZfy>d!lTNl|42g5f5Hm0GGypP}Ed-MZ*kQRq97-Zm7pOxCmq`L( z>rBFQ0)*DVz1tPKJ)!s79HyD1*B6&*u$;>Y&Vw}X0HQPG`3r_8>v#kp!G>uamB`C{ z2+iD*f4BgTOLif`qGBi=UXGGGvoL~1?95Wqeycc61*d875pQhP*4J2#&V=KrNe)yb z4X!(MgYi?9A~?KAE$h&NkAao39GR$29%?zp$tOi1lt{m!(in&X7!Bl$4Dn^Tagv9# zYdKi{@KHw~9$1-~T5h$HfOHDfV8VSwiU8<+3KwB68^X&6tdj+^APq~}G5?* z#9|&nHdkcM;mK*8J1QyKijvi|vsy+;FfHkx&np=xd50%eS%5}s3s^pAR&Z*Og0VdbFN%`>D=g76=na|9Gx9Sn2nr=*{}!%7kK2ECeg(*h*@NLW+)B|O0ek# z(tss`XOtiVcCyN>fmSXi`CBiTMT{*)NswDqxS?3G%85#OK~QBbFIn1HlCC@tq-9yn zwhC%s9L52#0>P8L@(mMGDA4X2N`jh(uo|B_V_5MImSP)h@&Qv(H(^u3Z^YoZc#}N~ zl|^fkJHm8ChG!&_4QEN1OG}NbW0cepK)I;aN)ZVG7l^0LYx`S= z23DAPEi<0m4|E5X>{9@D3&)3+YHJD%9B2YG*0$BMtu||0j^(&7@`AL{FHJS~n_T#F zqpH8mQH93q1V2?zDXPb5!n&{6@90iIMzWjwKjLw$oB2Ww!V_6o7hNm?P$a3Q0`?qF zFtV7y5KHJVgK^4&4+c(BDMXhGk-*VYe2EGYgj5)(aFHN-@n3*C>U@m$3C_3{X=iTi zu7R%tSD=;Ch9LgvhM?g)n~iA4uC&O*l3LGF z*1AqsEeyy(KRyDYAd*|{tjlN7wuWF@3B-|!0)NW+;UPI+!ObSresSIJg0vVsVgE*$ zxmngJE6c_IX6ngShVq9eTN{RDiry+f7Tt!CnD+O-%x(GMI64x?!Bu#P>aU04mgzT4 z1Edo1d-6@JG~artS9qv@2Q&UYJ`t|!q{0yII_U>MU!5LnBQ}2 zL)>YKs}$vI7ygK839m_{S-VW%)|TFsupkud0SZ5%jVix)8joQpdgwNT*MsR(x?9l^ zy04PuepuIX4=}7;aNZla5&Y?o+=*Yi{if=nvKu%9iw};!?xxrYz2B(5{BjD+;6aHS zxszRB12lx1;G#ob-j>HP8m7wMDzhlaV`D2t;r;@q)qJ%Gr=^ZcDq070+zDxxVH81r zj4Gm3BU4m=Vz3H2M<6bM6X1hU7!bHYp`)0rW!`15x&-BPiR!VbVt{F}g0b3!z4+bmOz4#7%%L z*J|p3kd|Yde1r*qDC?1W5?&#mRO?gNvlO)7{9}@WY6R2rnsTJZnds`DXaf@~>KP?z z%GqU*qNUeZo#$De{$Ro5@*Lh7Rd)zpXnSgfp$n0wG1nt zcY_AQF5pF4kSeFHqnC@R<8B?FA2;f&ntrOQraBxJ2{2ng^I9cNP1@2?f~rNPcD+ud zI!afvi)1ocf$=h_;|ZDW5+5~lURH!*YC32M^j}v&sw(iW3R;8ZQ?ExWjYiR>KCd!W z)&Y#M~Qr8a-CxU9_O zQ++vZwQ(wn`tP#0ib8BD);XKByY}wP(L@^|nNgc3?X-LioyxISmhWef_+ndEfEy*{4RUA88qg{9{yuqy{-U-h ze#zy7@=~zSi$&tFT1NI1{bD(OZW+p}s-_fL#UEn4AurA*`@&;^J9&f;%R}x~{1kF~ zRhbr_`js@X$yJedRy!{E5rHvX+>Zo1>H@7g;C^)7Kn(N${O{*v^np_UfByGNY5&#u zHUeAhTsTE_tFY0k(7K1_sPM3siq(hMw%MZPR5ydm4J=^pg?#h*e{x@)nD|e(otdbc zUH@;Kn*1~O^{8fqb~0K9g;E4uMeV8jo@hgw*nHEk{Rz)<^(~w3%lE08uTouZ*NdP_GZVfvfdRuw#pP=QQha;C^1j4eYivCf(&HO4@a#GYIqr2X%}; zD&5jMTBxF@6eNcF<}b11gFemoajOhZ_x+=u zh*~)ZBcr^sOx!lo?j?oU8@6N=Q&6R)As*Rmy??d%IO*^rR`d08bCaNqYT>SdeTRHk zE*NJ?w8F!mkKq(d-+$#p3uN{36G*2c{Nv6U9bVNlK%0#-JPGqG`iXbJ?9Nf|bGL>6 zbg3Pnx1dj)Qqj$JH>&cTRmb?qDUwYN1?&xp;Bnv@pr8l3?Em~&|M#}|b zW|c8e>*Y^!NT4EkRYj(LoHHsd|7M_uUFq#a>YAil_eA_Ok3;n=6aSV z%V%-OcNhUH=t)7u2pFYZ7I(C&#=~D4KBy=V_$`{ijT~%|g1cP>;+-XLekh^`#BMsMbIq{J5hEMg7?@Lh zpp!NpS^tll))RkrJStlj;HfT&t*?P)OX@Y4H78C1)r?8{vNdKv11`xO4_s6Dq%&_497=$&`|KeXQ(2wx+0)Pm9n-On7=FVVdrndsho9anu3j^|vX zJA;@;`Y{x}nkM6f$kovwSF!(EW>yAk?ZOIN(%T)SC4(wj1Cp0(eKS+Ob=1FW&~Br6 zs7V21pbC|Say>Vj|G@{Pwl2L#wO`P=-g9J3L&2YDZ<@zD%Z1T)da&7WtelP`DlEo7 zY)ZVD5UPcRNZT^lJXmrxJvizCZPu5g(wu-Zs^DBh?C4xJI3$z}8;FFkIil-$A%8OAWM zF*2aT0~s)8>yZe`*GcKxymbDGMXcopmxKBn5y%^qs6?0S{e281LN|e4MoB;~oI14E z0V6@%>T_|=BlPdyKGZGHs+WN950B~E%P{w7S9THNJ#_vv_+3q`s@q?AhdHNx);S*by|ODiKkW_k&sm#!@L%Vl)`beN=U`TIPNCqOYSDCC zYWRJ9__qi(!GVlVgDcJtM>n#1Y7NRAdkRW3gego_m>_d4U^wNl`*( z!pvueTHz^%JPzBqM&Z*w{_fE4)BeNbVctG|5I%sR<&GDg!W)ng&jan#OGV%nOQX!GPRvXEcnC;P<}ZzW$s%(Xrb;JMGlrK0 z!U-E=*dpt*S#NeSn^|rU=NJf-e4Q~lVB_gyNd9#dz-O;Fn^7tFTm%3+Eb|zWrjH=; zH*#FTrl`=Eg_rbwG&`D3;5*EI<$cZAqX|?PM*-ftfL8H;^c{n4I1QpjfmJbv`#2;IRj zBMYMsRCacPQ=g>af_&gVn@;+V4l(5#J^vLzr$PEbo8`%vC#g~=W0`ab))I?TnitIK zxF^%`Aw!t{6Z}UeF~+MOKf+mwv}&;r^WZ~>txd;|k40K`C89TCbFv}oyb+>pqgJUMvnBSv4J~;@4FYW*puVHtq9tg;h@gVADgqjlz~o z^00@g^&dSEN!f>MwOV7ofZ;;)fBXdh5h=__Nv4+yTl(w?Av5~mjMI<^VSIr9gR}^7 zP0`?N7R&%x_z-B8ORyXqoQ$a~nq*->Q>ES>4DKYA#*OTAZECMn>q?*oVh!JAiveF#X|LZCHC|Ls~Cxn9!qYBs7LO1IVXom7hPot(P%{#9XFYa&0u`d*ilUVQh_g8_ z*P9)c>4;>Yz712voX4=99-0HdDzOO+9{ma`NPfnZfEAIb)G%YTTPVnlh15P8v>jV){nhM~IgkN#Z#OpoC_5BIF0Zd~C?31LEOieE7JpGBnooczk@qn95nAl2MY*3|Ozs(;3mDlW8B> zB+ucjND##1{?W-1Ue}$*8Z!2u^q)NL(JkH_EzboPwliG9MF>WCnq*SmG8||!0ZlB7 zMba2rjDxG-KS{}H=*kABUQ0;??F06bdovW6&W>;~NDv4T@Abs@G!4cG^6?2f05EDY zAvmH!l)z^+n>`X~0{GJapbRZ9gNW&Ti7|G93rOjbCO{-SIpJwK0D~EnW;|U7AIP;H za_(iY46Xy1?2D{=xVO-B?=@A38ZY1VmFLHt9{qcykSJYkfAI z2EFN&oO7p&tB-q(uvKBtiGU$6c?Qr|>Bq;1he$XQ92|pT!LFqugHjLWUYcA7lByo{ zkDuU5X26FcCQF`-A071%F;$X%aMF8xfC=$bwKsbdJUZ^--M5kru#@r8V@k^AK%<;O zj~LyDV{wes7W9q|4yKq8(GA|u00{68Bp7Ui0bq0zI1Y}8c^X^hr_>B@EXT*_vf+OQ@R8H^)Rbe(g!7a2!kSAR596o}% z8x#nuH-&0S4FKdjKxlkKk6NNGP$duXTZv}k^7KuKAT>I$?;n)AK$r4c>;#SFH{T5^3hcs#)?I8E83k^*S)U_i zs<3OR3U1fwJ40&;v;_0O|2iHGX)ec>$sbn^o?Zt$4Y*Oj6W#j2bN`r+_YebeiCrt& zloh*H_*>t#;*q>C_`RQZVqkIM1H0d$p#StM#hu-R|He-Tzau~X{CHph={$4;H-mo? zHyoWuBLS;(_;f`UC3BFSi;|dy$ppDM-9%JS1A5#JkqGx@OORyzSJVU&aof}7es}(@ z&~ba*?bHtu8u*-Nxibnt!HqZa*k+yZ0fW&VJP13%Aol52RN&_A{=-9rsr<$v z%HJK#D@+s<;7SF2G6j%K2S{W&?oO_Bc-oIA2{s;i2e@tTgO~{&cb$Cj0!c-Am;cyo z5;raP|6u^-7CP{Hx91@0Z_B@={PEWOG35i(Nh*M&dr z&xg*&$iNiKy@2xP@7`sbckk>`+qT-5cwPA1-B1YMZQt+#?E-nZ5O z&GA<1=YGIP@~2Px$3Um{@zKFaZ$EdQK0V>=WFOy4Q?F_!X?Th6&3uE`4tyrUDlIVj z_n@hOICl0^6m9hO82r5CKgaNMEPONJXCTVrX8$u^+xW*bGG2;~2*snH#C&}InyXJP zS3Jql-Z8@G=~Iy|y2m?9=t%((!6%coPtpBpUph;r`XG3U1jA)n>ateqQkEK*rN*^V zV@J8}{D?9600PN}^16P>qQmS(kbdy%5%1(%ZeObVeH2Rc1YJS&>fd5^y}oo3!`5xb ztYoyRSH<-f?{nqJo6B(->hs{qlLw%mw2w|6!{5txzyIg~Dl!lI?6B7OxAMyE&277Q z`zXb85*KCBCH+Fz{4xF#J$DcK2geU=cItO~hffYphU{Vgp!?*2%M>v7ZJV{bJy5Y8 z_VJH<(0$}M?e63L(ZK^dRMo;-wXmrg*y&I$R@LHKwYXlb27qVLavp43)4(jA)r#kp z@_tsn!*|fY!~w+;gteGNLm!+E z?%oq1fHo1)8!9B#>7gDM*Hf>QvqE3KQ5g(TuJOPjZp&(iZR>OV8^d1*Z2}N_&AIqj z12M)OsZTMgPcFJ67$f*^bQ2h(ZD5T4A}~fG#^?`#k$q}H_VU?B+9Saz5v%4I zySdZQW)*BVwrqVShDlZJ#s*JzY-?-G6j0Cq(lc_*wlhC=wK8ZTXx=NCQ>jxPtf%|? zLFHgQs2;2bm4o%5daxc;4%P$nU>yq_Rtg*%C+~rI@*bEc?}2gh-qtJk94{yj;pN82VHq&~w?0L&8!Z$Hv5Bp3BoE}fQNd~7 zypG4AgM_k;Z6hHuzXzBnb}HmO&l%Vk>@<|m!!Y?g48C^5M!3fgTw)-u{l>T(D0x^J zde?2b-00UYyh|$%pC%Co2EFuJnjK;Xd=K~d4I_WG=u@KV^1^8>GDNu+ke3FmuQ5bmI}aOMT7p*4Pb%yp9H|4vp#o zF;7@)X@56Xyu7L6_=bw(?G>9rfWAn75Z;}g;hl$ZzJpeR0jnxh)$g59UyJaQZPAIR zRnv5`c`#*nZj2lO>y1rWhJmtzoc$3t4{+BdGB{Wmzw#WMxmS3k4sVP-79QUt z=cWZu%6ts1(i<2Y2NWke1zL=OvpvY#@CWw`Qy{V!SQ@2Vf)WKOV@MhElrgAMkP<*j zz*B;vGVUM_qU17JW!py2m+`o^_jy>I4+mk2cLg5e`O7(`^S9$-03rUTW2X<;)2Dr> z{rI5Af!yh^fg|(VDJ8lYf6;=^JTBkDt8AQLloIjSXGIHSjo8Mp8~9JVf5LlrCG0C} znZ(Ito>Hvp$xX<8>@?Pu!TnC;Ae<|BwwBMnnkoIj-k`Seci) zS6+tqYBS%?+KKbI^iyb6H>EIg;I7jLeGVoqTB22PRj+mkOCf;nG1~qB`BgYZi31R% z^&+DRTTH`Xx{WfINpu}d?ZYZ7WuUs=R_Rft5>GakrC|{wZ4o#o0#Fe(8LUKq5S+3> z0BUSnSp_?82M;ni+mL1(;%v)6IOb^Bud5)+{DwDF>dFi%#|E)$T25hWw~)@55f`^2 z42**aj)-fqVjp?M(y#p!+wCa{RpEnH!2+0yP={0x$J%obouRlOddc$VfP<@?P0#QO zo2@Q($sgismxD#+F{gO5U27BHj6>ggXuQ+M4H0s)(QkIV766fV*~DCFu-y4YZseD* zxrc_Z1cuttw{Lg^7IlxUe92Pv`Igz;ZdZRn)qmO)t*Cr1v755#3Z`MhU_-}$YU|-v zLZ=Ku5vz-MsZT*rfJNXtn`Qu`RL00rDVa0G;y%81A5VfD2beh?qoPb@!^l$?(&>Zv z3A$DQj+B#oB>+m%lkm|YIR^@QqX)~N`}ux8pr@qG2Wh()ZZxO=;%`J03P2j;2x6B% zN$ZLSR%7~LBs)SmerS@yN;rk-@fD+ZNZ~jc`b;#02?bIR#Oxy%wd44XUp@y(he;XPwv-V+!AghVHjY zZ#D5QaZt@jS%%@^TKCp@(QW;ZvDSV5Eco-Yv-{W(y%ZHEaR+!lOM|FIQG_zLHD2ZK z;+FQmJovy`lOUzQ-7Kas#~1*im9fbx4fE^nd%TbsI&DCWHahL(7_~{)G%$#io8!I3 z_kU}(JoJNat^bCNtB5i%;wZpZnFo|EuhzE4808Gp3ix*(&^=C37kbC=b}bPuhF8QO zcz7ekYt6&yl*K$1V;5!=)*M<)(kV+jkTlqB2(yTZqW=MKhqLRBc#GU?p{Xu=21aoi zcL17;%*;S9>W&D910YWqK{WUq<#ax>@rMwf-dIiM9rV;lR#YZtgVw_bt?>0(>x^Dr zXgzpn)WGo6;(ZmZe5LG%dA^9Y6#Zus<1O1HrO-sG$|Ct~ONH0bw1w}6U?dI<*!40@ z*(~`~*37n4q(}!b5d2r4mQj+j^x;=iz#dVrxz2Zhm`i9s{KQnRZcAL5kFNjL+WNn2 zwZw>-P;GqOdXD-Qb6c-5+%G-kZH!t&DRqBZ;U(b|4^W(mkr`MgA}~tSB&4=M6eLj| zE}fSAh4EHyZ8KR06O3lu>hW)SkA?8b#H3{~oe~Z|T7Hs{v^CjtTjKxS14l2~7ytGeO7E6QSWoX7BHwl`B{d=YBh$%;-!A;kc#ECp1}W_aSy(LVw_gC z4B`eXRJhjH`laD^ri}Pqzk8Hv9G9MHSeq;{jESi!=G>5$g(#e2yrk5tIhulJsW4%7Ll!ZXWe| zTB;az_aJ49TUh)yf(1PXDLzA(t$&6YuzaF%V=^e?I<%#|Mbc3L7EddT=maR|v4nET#=1v51z7ou*RAhf zzokK?;gq$gL(o}ZfKmo*qZdvgVo6fIL_Lj^dXkC(5fZB?txl_# z!9ZMD8V7~+9;C9fFTncX4{3>E^Im(Oiy!rl3i|I+Q;EJ_0?FaVMyPwaV&yQvcBW8C zni_=io@)SrXrj#-e5&S^`c*OpY6fh^DZ3OL7m6jfmAEmx5D2?Nw};2KcU&oROM#-k zUxyH-hm`ZgAs`7-K|1) zxAMuIitk>wK%3|@6gVKvSz1*&En=7@np2*aH9$6@E3hGZUsL6t zm(5vt*_AF{J-6R`q8@_K?^p}3(t&*P?-Rbfpq`|com<9>>lOu7hjLq9yXDu-?Dt&l zy0?xC_|MkTJd?^6@A;jyT6LjpnI#<$y+&_-f_8s@@7$6v!6<_G(vGin`-0xwKQg`&0pIbk&3$Z6!SMdI`_p zYz)wr87jn1eJG*+u<C%t8j!qF;r>Tu!0Kor zW-i*Sas5|6?_{o%<~% zO3mP#?5lXSU@6kJ`;z&V6drZM9u7JPUWEZyJCfPr*5elKr$CA#&D*?5y& z-9*&OP(-7P3mW~!#b)z{$#|;t$}XRrY$(>!$_e9p-Pi?H`(NKP9>_0r$~!jaG3hj* zo=n-ua-2N9)-M!?#RQ+z24TA{v>`i%`$IJ-V)?wsZ~O{}x`CGAOYkwqD}r=<;m&!% zWJo~_zG$cC*~ky=9R9d5zc%wy+=C4KuPKI6;s^4QKjbEkY&-IM?nJ!8Hi%A>LDX(L z6F$4UvHmFIec2G%zw#-_i$wL!Uzr1@hHs={7f5dphla( zXe0S%oEmm=8VnK`HZp1)Fr)kbcI0R0$p}LNP-2RS5f+;G|G`m34lqr``pss7qXRKG z;qN%pEF%s}T+r|E+D!yd5UV+N)+yxsqIgkIEjF7k z8D5_p{>r=`n42|GI%o*uF4kVd{TwL5A0}53Yg_z{^qk{X;3l|OCNmh&x`T>Vp?iE8 zICe9as}?^q`MA7{x!n4dl_jwCxq2;X5Rkx|xJ=-7P?GG*?+sR`^T7(xGB{t2d>AeK z!A8`*&+1jBxcfp=f~aYmxH7(#XmhfzR4`sTx5apD`Qo`NUO5NEj(p2DOWFYS-5^oC%$EKxINVBNU?BXrhxdme)Et zE3bs@+6i_6R;69<;7b5ztp`jryTBA1JSWNW8d$5G32`Rg8WDhzf_E@O_R$=WXnf2|huol1S11y-l@aN(NE3R9^kMFmtU(16 zLIf~l_IzUytZ0A0Bl3WxUjv`=>Q{*O_Wl>BCU|>PX%cu<9VYIXm-S^Sx@d`Ss&_B= z9YLOgu?jAYO4^lRQS!Xr)2Jx4XBR0K@35;X^ig2+lb_J0LndBf)1oqQ{i-@1qfNv-kkT-WXNhfnK54bS{Ne4}*WY!X zKYR0{)p{30(vN(1q;=SR)IDf{WiPHF@y9#{<{cK$tfvFxrj)p>ENjudky|T?x0I}M z{Im^+Q_K8%(q;qeR!`=r!a0xr5+^=yg0Ihf$&;Q_627?%lji(NRlG)<5xS+~31qzh zK1~bb2hv3ygFpOwfnR>^>KDJYu{q||YApx2ewWu(%@i_3?Un(HI7^fZla8T7Hnp8% z8fFvu`5ZVtqKbrKw>eY7&v@{on=%^@%>=+$rB4f@3F zh7wL0v!I+B-zLb;8_JIc+E~lS$(^FO;QItfqvGk3zbnD>ch)U)<&(Rh3#%O=lXX`D zOzidR57%lOKDMp-D(sM*Ah?F$B$Q;i^v44ektX6X3_}xFyQF9`f-`M-BRJ=#7TJlM z(orOGdn;DMG3^%I1ad=ARTeDEf=h;?T8^8ZxM(&d&^p=Q-{V@Cgkor0-z6((W(nFnWgK9}?&<-oG!|Mb1Dl`3)>(xEtdUdfGtSz7j$fFpf=s4AKy#eP(uXC6h%j zoYKC6DsRPEr)`eVZLaQ!?lo!ub-o}$Mf8tC7)L+(Fsv{Dp6Ym&0Va?~sDw_VVoDw*c1z?v;DuG2j2^oV$=Lc^X z-l)c7BnNV8+aydB<$bD`+xL2dGD-@PsYQ!#881np)-TnkZk8;VMhA-b)6S~zheN(N zUMLZWjU1HACRVXg8A^%X{K05cx#K7S%|0zb@p=m&yJYF#LBn05V!qdNiWR{|3O25X zlxgmtA&4==3gU|=;V19 z-`~2J%+VH{YJ~=@jE2cNcG!vO;Rd&-6ct9#V-=*a!kDny3og_IJ>>P1csU*Yv8acK z$NbGCJrSdw^&aB8N^w2?b4XWg?`dxc0@<_LZ!iL){1rQ12sxql9mBU}VZ21(4n-5( zH=8P$rz>)zz(a!zJaI&(4h1>uB>!_US3~LHBo zR?m%X(`)k9X;b~vJJfHgzH{xTO}#(ez4xb0)pxGF*VOyo?!Bk%l6{g*?Aanr8DIYe z*F0`-$`Oqz-17_tYKLJ6HwRS_B)7ZQABbd6$y80i#{2sqf4sOL1+CP!P&cR?LCSMz z;Z%`XuEj+Zy0~N@HC>BDnrkV243j|rf`!w`+;GZJ{&xeQC^ zT4Nq8U3VRluT7PwUc}az@mULEsIv8)E2iyNg&6SfJRIFfHjvM47)`n4iy@u9&d<+< zD~}OT5_GfCXe4rIi@$T|3`B}Tl!a}f9C8vpylDI;A zf}_)>>qQcCa!Y2j8;i|m71A?HiM$IcUCycn8# z%H^0>7{YSB$7c-gt(yyohdEpe49xA}=DS{q zLkYQEC1VlB7mF}u)2x~id=eQr{OVJXQU;62pY%urMhkECk1_n1W64m;GP8et?6wYi zPvAdCN0^hpa53kB7IHZ_J?ah5FsvrU5Y60!2SFudt9OR+HYq!X zY&+;2^_*&0S9=Rc+$|7sw*bWXQLO&_qbJ7>jn9F z7?`PzuvNoA4%3@|F7@bRt-( zn_wyivg9RExkM8Lw|VLt2C|g72HR+%QfG)uVy1aF^f3(m8*;r|zEP_{Tw&;y)^5m? zyCCi^aHUYwe`hfRb+htNFo6RP1Q9C)IDETixZ#$nv)QO4j#xr0Mg<0@l}VpQJj}d| zK>%PR=z1eq9E@hs4}WUjSb%z8smx5VGItKf0q2!2c{F3KAGbOv^J`t;d&4D$>Ux}h z?ue!;Zo}QA$I;#$g`t<+n6}Ap0KA*I0Rca$0$&25b#50)yaKqc9- zRA!Ur!UbxK*)B_%$;@o~I0IQGxWh8n$LJ=vEqbzT(UZ!eC$}tmA{RXoi%xIyD7K{@ z$TCdc5MQq73W;4VP{T%~Yb^t? z=cnd&Z`k(Vx4;zny`6%ILfWh1DdzT`PIfxoBFOOy2hyb_ZW-;>!S=gBAs0q&#}wxJ z8Te4$4b;(s#z-ixPf$bREfZ|I(^6F$sBM!X8mf6sb!tgUNXwai8)W%&zL#w{1JtLe zZ+im>hA-Z0VZl%5K}TNt>mZ^UA;ZI|Z_%Ag%Sa}dA>Wc=cFj!gNn_p9d~%9P33*3{ zN*UYom6F7n{d?rR$!zP`srLaOD$SHI%CeCAm$sy#h$3K}a5X!?cuO zjXQ0;7??x1NV<^3T!ZCk4Ah(v+d7R9oFBkhZTta4v6T7bq9?|TK8bdFakJc+`|haJn(D;sqDykmt$f_g{tF}_Rr)$%UG z0X_0A#V6=19_?1cBn4f_RH!1j72!cRhuL!kH6EOx9)g&M9*zT(**3BlgAeDy@`A5$ zm;Z6(gR47Ko+r_?T07mj_B2_+=r8IcP+K*=g%1OOLKlK|Cw|7|&(vkbg^1u>deiJR zZ1XL{7$qX;bsvzvXxEH!$0F_RrwSX;+^>0$coZYw;jlzn;g-%{iq=l$!#IK;%EwHs zil$MnE0W?K zRp9;NK7bqPt(k1H(vWLmYzE80`&c_y;VxP3{0>#b8yiq-<*%*kvlJFyO^^%X2{p~2 zCKFtRJg!%Yd%o2&(NIo4JR^(&LWFO_ET_vu+7KsQiqs+9R=6u;Rz9R=TNv*eP_NhO zQA`d?$c2WIDq=7cpM|*$A!0eE--DjHBn zxB7;zej~kn(@iCN+v5LQNj zyqYV{U;G?oq5PGdTh(W0tPx@J?OSaV~;xtgNv%(Nku2Ebn@Oq z^QtNo?yaY?meiRo13h%%kQl;2NP@qa7Bi9C->T;Fz4a=$SH=LhY93YHZcf)>o=vLC z%NMf*Y#wE7^I~u4g3L?IG0f>N#?dNmEc+#7m_UBV?YpU^r1&wty zRde@_ltOsto`hO>hk8Qw5%-Z`K|+3E@CE5eB%C~{_V_z#Q7+W}8uYU*)#|F7o3bSs zAl}wuJijn7NCXTj_hE$Fb2+!Cf2&g-XClwJc&bbA)FiLP$4Q6Z#v-)mKP}Lf$_$NG zOtq<^Kx?G`E$AY4pnAIZ|J8P-zi|^${5yX|Vu@lGZ<v=ea_du#O}WI zRpA>SN}3F*YQTvERJdKdE0Uzsf}|e(I&95DDJ>S!7$FC%9#w=OFcqxvR85>m_4TVH zd{C|TIH=w%u)o)sKmDm&$?lrO_j%A5uBd6dhj1UnO5SEye5XI^MrKeHkqOanl+34f zfqxH{S8KZa*&K;4-39NgZ@PIpe}Bo~8b^>e-XEj2gu7lZ^M(^h7O_;n9v7 z9rPY>wSYhnfP?7A?b<-e@p_D|6bkXHx_3oYtPy?+B)v?_@SYX*BQREpz#bx|l55=u zGAf{{mHG(G4YUfUSgF3>oP|Tk_Gkeq$EY&5BtFIO{;KILt?GwS9j4dpXF0Yi|bgp%JNmb5#)l+%_%pVB_}f{3Z55Z!^A^1 zgjPJ%6wfxBsd%Ajv^u<&(F`_ZVkE4k3avXxvd%rUR_?hDPc|EU>hgoezb%|@h}@_F z^}K&;V57!-+OX}kLBna|-3UEHlDrhSr8YtyGcHQsvxbPMEGQoA9+P_Hg*jHo;rw%-#}+l(+E>C8KjFQZiaz zZL;N#QuB*5{Aw5Ov3N;k**W*kZXD28=Zs(~?-BIW8kEhg%JgP4J7Q4HvDKxEM7!}4 z(j_l<>6@VYx8BkA9BRV_Rh4sC?B;{on@!`3InqRrJ}tXJ|tq$3gb^wl^t zaA03((9JoHs0ofp9!CG?kniL`{a zrn%Ph^1^k!v%^UE(1jRF9X!EGBPq(N9zV0U7({^Z+X%bL9%G2r<*ba zsRN@-Dj-7S1WV;)#y`{4h`0}%UW;K`87Hxz#gx)d(svK7?d?D}faxn$_r*co9?WYv zyA~IR?=mwIcP9G$iBpC&44ctw1iWi0Yp_CDS_jHzcmdH%yoyw=8Wl0vuT5tYs7+9> zKPnH&K&1zQq_+q9%diJ)pMb4gI zm&-Nf4M$sJ_d=HKu2-&BgK1O#RW$<^_77HNgODWyP}?hn3xG=t)Z<=bpf3gKC{@K7 zDAlv_yxNNj+))j@!xU%^nO-012CQlR{Hkeyk!J`6L?D`H@B}w+Zla<%{S#KQGYuRJ zxpf-O6|D>XO4qUd3>76hcjq!pM~9Brom;ut4g(2E<_kDVJ4pV4VW1U=}Gf7c@0p-3LR zdGX>mO(!OEcuyAQ0oqs!kH^Z0Mc`NJOe(&~+1OJgXg7jR$pQpNVII7nA2ZItHawtl zWWujQv$9@ZT+CozI?`PiqO`Ld}7h;P)!baK>F|J@*D6b@;`%)`V_{0(0`(QAqTjI4H zSR5zjoEvb45O2__T5MevnP!!@1_-;d3r{#p#6uTQ@6$qAT%n@32z!e%I72-~`^>R? zzsX#F%Df<>Ff0M?oL3+`82*TCmOVLRL=brYfbkdDdEWLg0SNjUSh60cB8b|HmG0&2 zW0v9={~0Y(`~{069{KEf=XAmkriL0{2{%VtW`2mjSP^XIBy)sx`JfNt= zkWbx03bCtJ;iJJ|2?(5=^1n2c<{U!ibPC`y&$_TPJq>n({KiwGT1;bI=+~*=J_R?# znrML+m6x*0z34EsN+4o10=%cRAx^TCK}^wq--9_)7z*z=ic=c9fy$ zTex1>*X0Us6$*{wxG?gSiX!Mkm1P|Nt0?*Cj~TVsb#Ch(bSCe~A#mu&wGThyK#SO| zm{>6wBmfZU5APd(F>SZ*!O^s^i(|J7J*ZoE(o@;gXpT)+)+O#n-HHBa+c~alO5+kU ztydd2NudI!1O7{n#OmM}y{B;X9)5f>O;yC_P^Nl&d2<{z@HZS}G*CBv#(>9AlAypo zyr9xU!nDA)MlR^AZXHbq_+NsC=@+0>N5)P)reoGZu&n)<&zkLA zFlDsgEFhWzwIs|)+V{3!NSTbG*l=?Zp^}}TA08E32gzrW8}f~38-O=WbU!*vYt*WXtvwN zq`im2!w4}{_c6T9821@o*AbB2-TtC9SZJM}IiO)Kvijo+qqjzksD@ISD1dc)JSyW@IR zjjmUWaE|TjaXIZepWl=A76eD4j-V0lIaRfHI2&OXT)zh%x0h9e@K>@xZD~HKP;jJ9 z;Jl%3vfi*la#%u{@EMdG;UHha126oEP)uP%23vLg+xT3F$&r=zFM!i4;2EUH?vCOS}<2ayP10OtU}L2yCj;I!@{5@3i0 zJ)9qHB%^lr=h;h>UvvYCM;gwi=A`@|vu-8#9M?k2VS0QaBs($z;K1(v@Wk)~6XtN& z*r;vI_)<7O|3f8R(_b;f)|k_2d)1Co0w-{A5I6|feeS>ZQfNC2OV;_D`t(~@d;tMq zY4yKY?Ai{OaqBFVh^3YcsKL$K{9bGG91CrOoht zeqv%Hlgav4xIbD}yFxzo0f6fQSFc<>_I+RAh!OP-BM#Ue!{oVV3j+h2mRmn9_aZ^UtnM)48I;F0F8PrHx#g6#s?L0NV4h;1zf+M+r|lk z6Kf6y42{M-5czhERd1Ar0;*aF#7`hml7}v;G8qH)~f-r zv-5xKl7SR705k?uI5#&ZyMq2{JoV<~@XK$1z+ZTy_E+_(8#P;O?$q4TK9=nidyOgd zG>l<X!-rU@53WC6b!4Xz|T&^dT>NDc*;puQ}KgbsbR=BpdcB@n><&w#yo=7BA zBG~D*_1g)hdYu4xVEfK)J7*eIlI4LFE-WnE(=_d+OeXU>5vf+Yy>uy+y7$|U>6OK; yvdTEenS^mh7wmCe5t7ZO<&BJ*X<*~nG5-fS^k=Yd4RxXb0000 + + + diff --git a/www/images/waste/tonnegelb.png b/www/images/waste/tonnegelb.png new file mode 100644 index 0000000000000000000000000000000000000000..a26eebae08d34c0202cf8574aef2f084b32e4d01 GIT binary patch literal 1083 zcmV-B1jPG^P)e?og)hxCrC+W#azVGv5v|ZD*naK+;eCOpm?{l8# z{W*jxcIwj)jEff%G5cR9toUvro6Vvl?)HYmntpvUZT_8dmrz77vL*Mjzg57_$B&=< z?EL6@`KUbb-mx9;$J*y!KX=}Lsl~7E+_ih5*)WQly~q)|Pe9j!yv2|+2|_RkplWaA^<9)t6PQUW@rr;vAu^!r*BLQx3%y2;?1LpV^sk!Uw?35_udN!1A$a$)@mA$ zcc*to+X@Wh;MhAe;O_JR$|D?1A~L#%#REO_Q&IkLCI|~ zd95K05E$cNOn@;7#sn0FFFTQ3em`facv z@Wn&+dNT8-MxptI}`q#b9IfZLJ+2J@Y)AI6bc>5WHJt8Of?KcPbO#c zp-`yz>#x+yg@RUL0WjE>QTrScQM2PXXl!g`E|&|csxY^%t6*+}F}`M0git`#Q2SWe zw*7N37}REGXY;94%J%viSvr$34;(Nfswyh}o=l6+)eJZ>F>y4VPA8+$s5cUc=ma>k z)6*aJ?a#g{C81b!p;S^K1Y53Q-ppw=kHy&7*cFe*vukQ<>S+MFQ*_Qg_V6QDJ~}b^ zd&X3BCV;-j18u?0`K=vYzUa(f1<|xAFu76A{{R+t?KEWF+ + + + diff --git a/www/images/waste/tonnegrau.png b/www/images/waste/tonnegrau.png new file mode 100644 index 0000000000000000000000000000000000000000..7c579bc5936722f3c4ff7cf267cef767fa3253d3 GIT binary patch literal 993 zcmV<710MW|P)-$7*6;Uz@4ep) zf(h%w2NzOXzub77^*W0?y#Sm}2h!$(qU(lKt5qD&bpw7dFcn2w0Z{=Xk$C^JYoC7; zg@=X@PQ3Q&dtwZ~-Doy{Q)T&>kxUv`6mj4akkvTwf&kR_A?Wu35CQ}MZMy|REC!6{ z;jenVoL*c!@#*C&g;9juLnlF?V~ig)O|y~7n5Ha?7%>X6C<3AZAOHw_@*q_P3>fIi zBxt%0k1Uw*w;x@+Selv;0O0c4TKD5im(KM`|Enlx(*1TsrrWy0yY@H6Ne5qW>(ni zdEIb1Cn-c62Pa>D!<(6~W!tT=x;@}f0^vk3#$)j&5*oT5sb=^a0Kjo}s^jn`_E1se ze+@sbcMsx-7wB9H?`&_^qwFxMuZU82K7|R5{vTVoj$_S5sKvF3B@L7E;+#YCR(^P}u?r&L<|y;%HdCWV + + + diff --git a/www/images/waste/tonnegruen.png b/www/images/waste/tonnegruen.png new file mode 100644 index 0000000000000000000000000000000000000000..49687998014d1f925e159b330e4483e83e63d5a3 GIT binary patch literal 1068 zcmV+{1k?M8P)tKcE1~OP10EbqzXVG5EFz12n1q4WL&tK1bjwlL#`a_ zjbEO-K70EhK+zb;Yj$7B@E#kA4sNDT%eXy2x*GyyfI#YQeav8D_$1*834cHZMRmx8 zj>5A>awVSs>C6W&et8g}+8B7wJvIHCvi#OMZJqA*joVhtJ?ERyJwX*928aM~?QobF z0E2c9%=aj=x@1ipiQ&!b-)F;%{!2Si#LK=bjVv-C0yBdFKvdW<$*QBW1ArjP!1zpf z>P@=v&XE8CVDZP_A6&FX&qhmuSwBQ3B=2^cE4lgLNnl8jClQA6%eP;BojTIcG}^IG zp1-k?bgn>f<@f5DHW)Jq0^&ap$#3$I(F~g!&*y1XM z)=o?a8KIW>+8?ReTbnGRW=CyhV&sbXwXOhr_9|u^%&e}7%s@cZWmkX?m)0IuSk(2e ziDk_crczgcLp=jha4T8xK3Nox8#CZKuGJOb_~@A&?f4C^ z1T{0|ut@5?K+O`VYD}x2~J9iUVPm@oS67-5=R-Ri>10VxYVItot!|Ca1UA6pA zUsKM%{CfHPIA%JuSzj`o7h)2{^8kZk1DMwHb*-J{}tzyC$U!NGWL~dHig| zHhLfB(mxavxX5A;l&W{B`Hz3IaQELk9WhKK5>u9CIYJ0E7K<5cE6b(Cz~Dr1&i+er zn`J>vh=%$)*C7!_9LGU892T0UL1?N71P!4oiYbYkWI+T3p?59|+qP%p@wmRax>{Oa zU$@Pku&}b(!uBZ|WtEy_K}@jL)0-Uw&d<+(n8{?;lF4LfczDmMrAbK)>q8#KA mHKZr)9a|2D`xoY0 + + +