<!DOCTYPE html>
<html class="no-js" <?php language_attributes(); ?>>
<head>
<meta name="p:domain_verify" content="ac371c7e80296cf2a0525d78d86260ae"/>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8845395834695179"
crossorigin="anonymous"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8845395834695179"
crossorigin="anonymous"></script>
<ins class="adsbygoogle"
style="display:block"
data-ad-format="fluid"
data-ad-layout-key="-ef+6k-30-ac+ty"
data-ad-client="ca-pub-8845395834695179"
data-ad-slot="5959085648"></ins>
<meta name="publication-media-verification" content="5c0b769e5e8847bf94ba0022758a018f">
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<script async src="https://fundingchoicesmessages.google.com/i/pub-8845395834695179?ers=1" nonce="K1dvEnQ4OoLTPMKB_b0jug"></script><script nonce="K1dvEnQ4OoLTPMKB_b0jug">(function() {function signalGooglefcPresent() {if (!window.frames['googlefcPresent']) {if (document.body) {const iframe = document.createElement('iframe'); iframe.style = 'width: 0; height: 0; border: none; z-index: -1000; left: -1000px; top: -1000px;'; iframe.style.display = 'none'; iframe.name = 'googlefcPresent'; document.body.appendChild(iframe);} else {setTimeout(signalGooglefcPresent, 0);}}}signalGooglefcPresent();})();</script>
<script>(function(){'use strict';function aa(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}var ba="function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};
function ea(a){a=["object"==typeof globalThis&&globalThis,a,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error("Cannot find global object");}var fa=ea(this);function ha(a,b){if(b)a:{var c=fa;a=a.split(".");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&ba(c,a,{configurable:!0,writable:!0,value:b})}}
var ia="function"==typeof Object.create?Object.create:function(a){function b(){}b.prototype=a;return new b},l;if("function"==typeof Object.setPrototypeOf)l=Object.setPrototypeOf;else{var m;a:{var ja={a:!0},ka={};try{ka.__proto__=ja;m=ka.a;break a}catch(a){}m=!1}l=m?function(a,b){a.__proto__=b;if(a.__proto__!==b)throw new TypeError(a+" is not extensible");return a}:null}var la=l;
function n(a,b){a.prototype=ia(b.prototype);a.prototype.constructor=a;if(la)la(a,b);else for(var c in b)if("prototype"!=c)if(Object.defineProperties){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)}else a[c]=b[c];a.A=b.prototype}function ma(){for(var a=Number(this),b=[],c=a;c<arguments.length;c++)b[c-a]=arguments[c];return b}
var na="function"==typeof Object.assign?Object.assign:function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var e in d)Object.prototype.hasOwnProperty.call(d,e)&&(a[e]=d[e])}return a};ha("Object.assign",function(a){return a||na});/*
Copyright The Closure Library Authors.
SPDX-License-Identifier: Apache-2.0
*/
var p=this||self;function q(a){return a};var t,u;a:{for(var oa=["CLOSURE_FLAGS"],v=p,x=0;x<oa.length;x++)if(v=v[oa[x]],null==v){u=null;break a}u=v}var pa=u&&u[610401301];t=null!=pa?pa:!1;var z,qa=p.navigator;z=qa?qa.userAgentData||null:null;function A(a){return t?z?z.brands.some(function(b){return(b=b.brand)&&-1!=b.indexOf(a)}):!1:!1}function B(a){var b;a:{if(b=p.navigator)if(b=b.userAgent)break a;b=""}return-1!=b.indexOf(a)};function C(){return t?!!z&&0<z.brands.length:!1}function D(){return C()?A("Chromium"):(B("Chrome")||B("CriOS"))&&!(C()?0:B("Edge"))||B("Silk")};var ra=C()?!1:B("Trident")||B("MSIE");!B("Android")||D();D();B("Safari")&&(D()||(C()?0:B("Coast"))||(C()?0:B("Opera"))||(C()?0:B("Edge"))||(C()?A("Microsoft Edge"):B("Edg/"))||C()&&A("Opera"));var sa={},E=null;var ta="undefined"!==typeof Uint8Array,ua=!ra&&"function"===typeof btoa;var F="function"===typeof Symbol&&"symbol"===typeof Symbol()?Symbol():void 0,G=F?function(a,b){a[F]|=b}:function(a,b){void 0!==a.g?a.g|=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}})};function va(a){var b=H(a);1!==(b&1)&&(Object.isFrozen(a)&&(a=Array.prototype.slice.call(a)),I(a,b|1))}
var H=F?function(a){return a[F]|0}:function(a){return a.g|0},J=F?function(a){return a[F]}:function(a){return a.g},I=F?function(a,b){a[F]=b}:function(a,b){void 0!==a.g?a.g=b:Object.defineProperties(a,{g:{value:b,configurable:!0,writable:!0,enumerable:!1}})};function wa(){var a=[];G(a,1);return a}function xa(a,b){I(b,(a|0)&-99)}function K(a,b){I(b,(a|34)&-73)}function L(a){a=a>>11&1023;return 0===a?536870912:a};var M={};function N(a){return null!==a&&"object"===typeof a&&!Array.isArray(a)&&a.constructor===Object}var O,ya=[];I(ya,39);O=Object.freeze(ya);var P;function Q(a,b){P=b;a=new a(b);P=void 0;return a}
function R(a,b,c){null==a&&(a=P);P=void 0;if(null==a){var d=96;c?(a=[c],d|=512):a=[];b&&(d=d&-2095105|(b&1023)<<11)}else{if(!Array.isArray(a))throw Error();d=H(a);if(d&64)return a;d|=64;if(c&&(d|=512,c!==a[0]))throw Error();a:{c=a;var e=c.length;if(e){var f=e-1,g=c[f];if(N(g)){d|=256;b=(d>>9&1)-1;e=f-b;1024<=e&&(za(c,b,g),e=1023);d=d&-2095105|(e&1023)<<11;break a}}b&&(g=(d>>9&1)-1,b=Math.max(b,e-g),1024<b&&(za(c,g,{}),d|=256,b=1023),d=d&-2095105|(b&1023)<<11)}}I(a,d);return a}
function za(a,b,c){for(var d=1023+b,e=a.length,f=d;f<e;f++){var g=a[f];null!=g&&g!==c&&(c[f-b]=g)}a.length=d+1;a[d]=c};function Aa(a){switch(typeof a){case "number":return isFinite(a)?a:String(a);case "boolean":return a?1:0;case "object":if(a&&!Array.isArray(a)&&ta&&null!=a&&a instanceof Uint8Array){if(ua){for(var b="",c=0,d=a.length-10240;c<d;)b+=String.fromCharCode.apply(null,a.subarray(c,c+=10240));b+=String.fromCharCode.apply(null,c?a.subarray(c):a);a=btoa(b)}else{void 0===b&&(b=0);if(!E){E={};c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");d=["+/=","+/","-_=","-_.","-_"];for(var e=
0;5>e;e++){var f=c.concat(d[e].split(""));sa[e]=f;for(var g=0;g<f.length;g++){var h=f[g];void 0===E[h]&&(E[h]=g)}}}b=sa[b];c=Array(Math.floor(a.length/3));d=b[64]||"";for(e=f=0;f<a.length-2;f+=3){var k=a[f],w=a[f+1];h=a[f+2];g=b[k>>2];k=b[(k&3)<<4|w>>4];w=b[(w&15)<<2|h>>6];h=b[h&63];c[e++]=g+k+w+h}g=0;h=d;switch(a.length-f){case 2:g=a[f+1],h=b[(g&15)<<2]||d;case 1:a=a[f],c[e]=b[a>>2]+b[(a&3)<<4|g>>4]+h+d}a=c.join("")}return a}}return a};function Ba(a,b,c){a=Array.prototype.slice.call(a);var d=a.length,e=b&256?a[d-1]:void 0;d+=e?-1:0;for(b=b&512?1:0;b<d;b++)a[b]=c(a[b]);if(e){b=a[b]={};for(var f in e)Object.prototype.hasOwnProperty.call(e,f)&&(b[f]=c(e[f]))}return a}function Da(a,b,c,d,e,f){if(null!=a){if(Array.isArray(a))a=e&&0==a.length&&H(a)&1?void 0:f&&H(a)&2?a:Ea(a,b,c,void 0!==d,e,f);else if(N(a)){var g={},h;for(h in a)Object.prototype.hasOwnProperty.call(a,h)&&(g[h]=Da(a[h],b,c,d,e,f));a=g}else a=b(a,d);return a}}
function Ea(a,b,c,d,e,f){var g=d||c?H(a):0;d=d?!!(g&32):void 0;a=Array.prototype.slice.call(a);for(var h=0;h<a.length;h++)a[h]=Da(a[h],b,c,d,e,f);c&&c(g,a);return a}function Fa(a){return a.s===M?a.toJSON():Aa(a)};function Ga(a,b,c){c=void 0===c?K:c;if(null!=a){if(ta&&a instanceof Uint8Array)return b?a:new Uint8Array(a);if(Array.isArray(a)){var d=H(a);if(d&2)return a;if(b&&!(d&64)&&(d&32||0===d))return I(a,d|34),a;a=Ea(a,Ga,d&4?K:c,!0,!1,!0);b=H(a);b&4&&b&2&&Object.freeze(a);return a}a.s===M&&(b=a.h,c=J(b),a=c&2?a:Q(a.constructor,Ha(b,c,!0)));return a}}function Ha(a,b,c){var d=c||b&2?K:xa,e=!!(b&32);a=Ba(a,b,function(f){return Ga(f,e,d)});G(a,32|(c?2:0));return a};function Ia(a,b){a=a.h;return Ja(a,J(a),b)}function Ja(a,b,c,d){if(-1===c)return null;if(c>=L(b)){if(b&256)return a[a.length-1][c]}else{var e=a.length;if(d&&b&256&&(d=a[e-1][c],null!=d))return d;b=c+((b>>9&1)-1);if(b<e)return a[b]}}function Ka(a,b,c,d,e){var f=L(b);if(c>=f||e){e=b;if(b&256)f=a[a.length-1];else{if(null==d)return;f=a[f+((b>>9&1)-1)]={};e|=256}f[c]=d;e&=-1025;e!==b&&I(a,e)}else a[c+((b>>9&1)-1)]=d,b&256&&(d=a[a.length-1],c in d&&delete d[c]),b&1024&&I(a,b&-1025)}
function La(a,b){var c=Ma;var d=void 0===d?!1:d;var e=a.h;var f=J(e),g=Ja(e,f,b,d);var h=!1;if(null==g||"object"!==typeof g||(h=Array.isArray(g))||g.s!==M)if(h){var k=h=H(g);0===k&&(k|=f&32);k|=f&2;k!==h&&I(g,k);c=new c(g)}else c=void 0;else c=g;c!==g&&null!=c&&Ka(e,f,b,c,d);e=c;if(null==e)return e;a=a.h;f=J(a);f&2||(g=e,c=g.h,h=J(c),g=h&2?Q(g.constructor,Ha(c,h,!1)):g,g!==e&&(e=g,Ka(a,f,b,e,d)));return e}function Na(a,b){a=Ia(a,b);return null==a||"string"===typeof a?a:void 0}
function Oa(a,b){a=Ia(a,b);return null!=a?a:0}function S(a,b){a=Na(a,b);return null!=a?a:""};function T(a,b,c){this.h=R(a,b,c)}T.prototype.toJSON=function(){var a=Ea(this.h,Fa,void 0,void 0,!1,!1);return Pa(this,a,!0)};T.prototype.s=M;T.prototype.toString=function(){return Pa(this,this.h,!1).toString()};
function Pa(a,b,c){var d=a.constructor.v,e=L(J(c?a.h:b)),f=!1;if(d){if(!c){b=Array.prototype.slice.call(b);var g;if(b.length&&N(g=b[b.length-1]))for(f=0;f<d.length;f++)if(d[f]>=e){Object.assign(b[b.length-1]={},g);break}f=!0}e=b;c=!c;g=J(a.h);a=L(g);g=(g>>9&1)-1;for(var h,k,w=0;w<d.length;w++)if(k=d[w],k<a){k+=g;var r=e[k];null==r?e[k]=c?O:wa():c&&r!==O&&va(r)}else h||(r=void 0,e.length&&N(r=e[e.length-1])?h=r:e.push(h={})),r=h[k],null==h[k]?h[k]=c?O:wa():c&&r!==O&&va(r)}d=b.length;if(!d)return b;
var Ca;if(N(h=b[d-1])){a:{var y=h;e={};c=!1;for(var ca in y)Object.prototype.hasOwnProperty.call(y,ca)&&(a=y[ca],Array.isArray(a)&&a!=a&&(c=!0),null!=a?e[ca]=a:c=!0);if(c){for(var rb in e){y=e;break a}y=null}}y!=h&&(Ca=!0);d--}for(;0<d;d--){h=b[d-1];if(null!=h)break;var cb=!0}if(!Ca&&!cb)return b;var da;f?da=b:da=Array.prototype.slice.call(b,0,d);b=da;f&&(b.length=d);y&&b.push(y);return b};function Qa(a){return function(b){if(null==b||""==b)b=new a;else{b=JSON.parse(b);if(!Array.isArray(b))throw Error(void 0);G(b,32);b=Q(a,b)}return b}};function Ra(a){this.h=R(a)}n(Ra,T);var Sa=Qa(Ra);var U;function V(a){this.g=a}V.prototype.toString=function(){return this.g+""};var Ta={};function Ua(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^Date.now()).toString(36)};function Va(a,b){b=String(b);"application/xhtml+xml"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)}function Wa(a){this.g=a||p.document||document}Wa.prototype.appendChild=function(a,b){a.appendChild(b)};/*
SPDX-License-Identifier: Apache-2.0
*/
function Xa(a,b){a.src=b instanceof V&&b.constructor===V?b.g:"type_error:TrustedResourceUrl";var c,d;(c=(b=null==(d=(c=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)?void 0:d.call(c,"script[nonce]"))?b.nonce||b.getAttribute("nonce")||"":"")&&a.setAttribute("nonce",c)};function Ya(a){a=void 0===a?document:a;return a.createElement("script")};function Za(a,b,c,d,e,f){try{var g=a.g,h=Ya(g);h.async=!0;Xa(h,b);g.head.appendChild(h);h.addEventListener("load",function(){e();d&&g.head.removeChild(h)});h.addEventListener("error",function(){0<c?Za(a,b,c-1,d,e,f):(d&&g.head.removeChild(h),f())})}catch(k){f()}};var $a=p.atob("aHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vaW1hZ2VzL2ljb25zL21hdGVyaWFsL3N5c3RlbS8xeC93YXJuaW5nX2FtYmVyXzI0ZHAucG5n"),ab=p.atob("WW91IGFyZSBzZWVpbmcgdGhpcyBtZXNzYWdlIGJlY2F1c2UgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlIGlzIGludGVyZmVyaW5nIHdpdGggdGhpcyBwYWdlLg=="),bb=p.atob("RGlzYWJsZSBhbnkgYWQgb3Igc2NyaXB0IGJsb2NraW5nIHNvZnR3YXJlLCB0aGVuIHJlbG9hZCB0aGlzIHBhZ2Uu");function db(a,b,c){this.i=a;this.l=new Wa(this.i);this.g=null;this.j=[];this.m=!1;this.u=b;this.o=c}
function eb(a){if(a.i.body&&!a.m){var b=function(){fb(a);p.setTimeout(function(){return gb(a,3)},50)};Za(a.l,a.u,2,!0,function(){p[a.o]||b()},b);a.m=!0}}
function fb(a){for(var b=W(1,5),c=0;c<b;c++){var d=X(a);a.i.body.appendChild(d);a.j.push(d)}b=X(a);b.style.bottom="0";b.style.left="0";b.style.position="fixed";b.style.width=W(100,110).toString()+"%";b.style.zIndex=W(2147483544,2147483644).toString();b.style["background-color"]=hb(249,259,242,252,219,229);b.style["box-shadow"]="0 0 12px #888";b.style.color=hb(0,10,0,10,0,10);b.style.display="flex";b.style["justify-content"]="center";b.style["font-family"]="Roboto, Arial";c=X(a);c.style.width=W(80,
85).toString()+"%";c.style.maxWidth=W(750,775).toString()+"px";c.style.margin="24px";c.style.display="flex";c.style["align-items"]="flex-start";c.style["justify-content"]="center";d=Va(a.l.g,"IMG");d.className=Ua();d.src=$a;d.alt="Warning icon";d.style.height="24px";d.style.width="24px";d.style["padding-right"]="16px";var e=X(a),f=X(a);f.style["font-weight"]="bold";f.textContent=ab;var g=X(a);g.textContent=bb;Y(a,e,f);Y(a,e,g);Y(a,c,d);Y(a,c,e);Y(a,b,c);a.g=b;a.i.body.appendChild(a.g);b=W(1,5);for(c=
0;c<b;c++)d=X(a),a.i.body.appendChild(d),a.j.push(d)}function Y(a,b,c){for(var d=W(1,5),e=0;e<d;e++){var f=X(a);b.appendChild(f)}b.appendChild(c);c=W(1,5);for(d=0;d<c;d++)e=X(a),b.appendChild(e)}function W(a,b){return Math.floor(a+Math.random()*(b-a))}function hb(a,b,c,d,e,f){return"rgb("+W(Math.max(a,0),Math.min(b,255)).toString()+","+W(Math.max(c,0),Math.min(d,255)).toString()+","+W(Math.max(e,0),Math.min(f,255)).toString()+")"}function X(a){a=Va(a.l.g,"DIV");a.className=Ua();return a}
function gb(a,b){0>=b||null!=a.g&&0!=a.g.offsetHeight&&0!=a.g.offsetWidth||(ib(a),fb(a),p.setTimeout(function(){return gb(a,b-1)},50))}
function ib(a){var b=a.j;var c="undefined"!=typeof Symbol&&Symbol.iterator&&b[Symbol.iterator];if(c)b=c.call(b);else if("number"==typeof b.length)b={next:aa(b)};else throw Error(String(b)+" is not an iterable or ArrayLike");for(c=b.next();!c.done;c=b.next())(c=c.value)&&c.parentNode&&c.parentNode.removeChild(c);a.j=[];(b=a.g)&&b.parentNode&&b.parentNode.removeChild(b);a.g=null};function jb(a,b,c,d,e){function f(k){document.body?g(document.body):0<k?p.setTimeout(function(){f(k-1)},e):b()}function g(k){k.appendChild(h);p.setTimeout(function(){h?(0!==h.offsetHeight&&0!==h.offsetWidth?b():a(),h.parentNode&&h.parentNode.removeChild(h)):a()},d)}var h=kb(c);f(3)}function kb(a){var b=document.createElement("div");b.className=a;b.style.width="1px";b.style.height="1px";b.style.position="absolute";b.style.left="-10000px";b.style.top="-10000px";b.style.zIndex="-10000";return b};function Ma(a){this.h=R(a)}n(Ma,T);function lb(a){this.h=R(a)}n(lb,T);var mb=Qa(lb);function nb(a){a=Na(a,4)||"";if(void 0===U){var b=null;var c=p.trustedTypes;if(c&&c.createPolicy){try{b=c.createPolicy("goog#html",{createHTML:q,createScript:q,createScriptURL:q})}catch(d){p.console&&p.console.error(d.message)}U=b}else U=b}a=(b=U)?b.createScriptURL(a):a;return new V(a,Ta)};function ob(a,b){this.m=a;this.o=new Wa(a.document);this.g=b;this.j=S(this.g,1);this.u=nb(La(this.g,2));this.i=!1;b=nb(La(this.g,13));this.l=new db(a.document,b,S(this.g,12))}ob.prototype.start=function(){pb(this)};
function pb(a){qb(a);Za(a.o,a.u,3,!1,function(){a:{var b=a.j;var c=p.btoa(b);if(c=p[c]){try{var d=Sa(p.atob(c))}catch(e){b=!1;break a}b=b===Na(d,1)}else b=!1}b?Z(a,S(a.g,14)):(Z(a,S(a.g,8)),eb(a.l))},function(){jb(function(){Z(a,S(a.g,7));eb(a.l)},function(){return Z(a,S(a.g,6))},S(a.g,9),Oa(a.g,10),Oa(a.g,11))})}function Z(a,b){a.i||(a.i=!0,a=new a.m.XMLHttpRequest,a.open("GET",b,!0),a.send())}function qb(a){var b=p.btoa(a.j);a.m[b]&&Z(a,S(a.g,5))};(function(a,b){p[a]=function(){var c=ma.apply(0,arguments);p[a]=function(){};b.apply(null,c)}})("__h82AlnkH6D91__",function(a){"function"===typeof window.atob&&(new ob(window,mb(window.atob(a)))).start()});}).call(this);
window.__h82AlnkH6D91__("WyJwdWItODg0NTM5NTgzNDY5NTE3OSIsW251bGwsbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9iL3B1Yi04ODQ1Mzk1ODM0Njk1MTc5Il0sbnVsbCxudWxsLCJodHRwczovL2Z1bmRpbmdjaG9pY2VzbWVzc2FnZXMuZ29vZ2xlLmNvbS9lbC9BR1NLV3hWQzlZVXFnY3dzWWRrdzFNcWROVklpbDFFZ3I3Q2phV2huS1FaSFMtdjhPX0JlRHRlUVpxX3ZhSGVuLThFRUJ2SHZ4M2I1UVQ3aGdlNjlKa0pXZE9zbWZBXHUwMDNkXHUwMDNkP3RlXHUwMDNkVE9LRU5fRVhQT1NFRCIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFZTU0dUOElEcUx2eWFaamVtZ0hsbWRZOU1yQ1M2bEtCQ0YzM2dkbklRRFRqbEVDNFAzRDkwQkY2dnV2LVhjTTJFSTNIREZjRnV0RHh6WXVTNENOa0R5OVFcdTAwM2RcdTAwM2Q/YWJcdTAwM2QxXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFZFb1pJQUQxb2d4TUR0ZGk5U19taXJyNnpRMTl0bkR5ZWxxYndUQlZJeUt0YUZpUVd1RFAtU0h5Wl8tMTZERTN6VVRUM2d6YlBPQ3NFYThqbUxlVXlKb0FcdTAwM2RcdTAwM2Q/YWJcdTAwM2QyXHUwMDI2c2JmXHUwMDNkMSIsImh0dHBzOi8vZnVuZGluZ2Nob2ljZXNtZXNzYWdlcy5nb29nbGUuY29tL2VsL0FHU0tXeFg3X3RBNy1sNUllaDJXQTRlemVwRUZ2dHdZN0RxMjFzM2tNbWk1ZmtXQUxoU2lpaFViUWVyLTU5SXJRdGdJS24wU0hRbHNWUnFmNmFzN1ZUbDJaM1NOSHdcdTAwM2RcdTAwM2Q/c2JmXHUwMDNkMiIsImRpdi1ncHQtYWQiLDIwLDEwMCwiY0hWaUxUZzRORFV6T1RVNE16UTJPVFV4TnprXHUwMDNkIixbbnVsbCxudWxsLG51bGwsImh0dHBzOi8vd3d3LmdzdGF0aWMuY29tLzBlbW4vZi9wL3B1Yi04ODQ1Mzk1ODM0Njk1MTc5LmpzP3VzcXBcdTAwM2RDQTAiXSwiaHR0cHM6Ly9mdW5kaW5nY2hvaWNlc21lc3NhZ2VzLmdvb2dsZS5jb20vZWwvQUdTS1d4VlUyemNTeDlVamVuNkxGODg0N21PY29qOTNGV18xN3NmT3MwSHIxbXRYQnFRcHZNSjJFT0ZTMmZiLXJPamU2R2c5eXhIdS1zYXFqWDZ4YTdjMWZWbVA0d1x1MDAzZFx1MDAzZCJd");</script>
<meta name='dmca-site-verification' content='S2FWbVFQd0RBODNPRlMvNU0yZTBMQk1hK3NMSjFFZmpvWjVBa0JqWW5NUT01' />
<meta name="google-site-verification" content="uvWJN5LEjPOabZbSksyZmEj0Ym-AGdIk8uYHWM7FaSA" />
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-8845395834695179",
enable_page_level_ads: true
});
</script>
<!-- Guest post publishing code -->
<meta name="publication-media-verification"content="6c91d5dfc21446eb913970655201f400">
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TLGCK84');</script>
<!-- End Google Tag Manager -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-144675222-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-144675222-1', { 'optimize_id': 'GTM-KNPK5HF'});
</script>
<meta name="yandex-verification" content="677634e71e582def" />
<meta name="yandex-verification" content="9645084fae6ab9bb" />
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="profile" href="http://gmpg.org/xfn/11">
<?php if ( is_singular() && pings_open( get_queried_object() ) ) : ?>
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<?php endif; ?>
<?php wp_head(); ?>
</head>
<body <?php body_class(); ?>>
<body>
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(103002626, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/103002626" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-TLGCK84"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<?php if ( function_exists( 'wp_body_open' ) ) { wp_body_open(); } ?>
<a class="skip-link screen-reader-text" href="#page"><?php _e( 'Skip to content', 'gridzone' ); ?></a>
<div id="wrapper">
<div id="header-sticky">
<header id="header" class="hide-on-scroll-down nav-menu-dropdown-left">
<div class="group">
<?php echo gridzone_site_title(); ?>
<?php if ( display_header_text() == true ): ?>
<p class="site-description"><?php bloginfo( 'description' ); ?></p>
<?php endif; ?>
<?php if ( has_nav_menu('header') ): ?>
<div id="wrap-nav-header" class="wrap-nav">
<?php \Gridzone\Nav::nav_menu(array('theme_location'=>'header','menu_id' => 'nav-header','fallback_cb'=> false)); ?>
</div>
<?php endif; ?>
<?php if ( has_nav_menu('mobile') ): ?>
<div id="wrap-nav-mobile" class="wrap-nav">
<?php \Gridzone\Nav::nav_menu(array('theme_location'=>'mobile','menu_id' => 'nav-mobile','fallback_cb'=> false)); ?>
</div>
<?php endif; ?>
</div>
</header><!--/#header-->
</div><!--/#header-sticky-->
<div class="sidebar s2 group">
<?php if ( get_theme_mod( 'header-search', 'on' ) == 'on' ): ?>
<div class="search-trap-focus">
<button class="toggle-search">
<svg class="svg-icon" id="svg-search" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" width="23" height="23" viewBox="0 0 23 23"><path d="M38.710696,48.0601792 L43,52.3494831 L41.3494831,54 L37.0601792,49.710696 C35.2632422,51.1481185 32.9839107,52.0076499 30.5038249,52.0076499 C24.7027226,52.0076499 20,47.3049272 20,41.5038249 C20,35.7027226 24.7027226,31 30.5038249,31 C36.3049272,31 41.0076499,35.7027226 41.0076499,41.5038249 C41.0076499,43.9839107 40.1481185,46.2632422 38.710696,48.0601792 Z M36.3875844,47.1716785 C37.8030221,45.7026647 38.6734666,43.7048964 38.6734666,41.5038249 C38.6734666,36.9918565 35.0157934,33.3341833 30.5038249,33.3341833 C25.9918565,33.3341833 22.3341833,36.9918565 22.3341833,41.5038249 C22.3341833,46.0157934 25.9918565,49.6734666 30.5038249,49.6734666 C32.7048964,49.6734666 34.7026647,48.8030221 36.1716785,47.3875844 C36.2023931,47.347638 36.2360451,47.3092237 36.2726343,47.2726343 C36.3092237,47.2360451 36.347638,47.2023931 36.3875844,47.1716785 Z" transform="translate(-20 -31)"></path></svg>
<svg class="svg-icon" id="svg-close" aria-hidden="true" role="img" focusable="false" xmlns="http://www.w3.org/2000/svg" width="23" height="23" viewBox="0 0 16 16"><polygon fill="" fill-rule="evenodd" points="6.852 7.649 .399 1.195 1.445 .149 7.899 6.602 14.352 .149 15.399 1.195 8.945 7.649 15.399 14.102 14.352 15.149 7.899 8.695 1.445 15.149 .399 14.102"></polygon></svg>
</button>
<div class="search-expand">
<div class="search-expand-inner">
<?php get_search_form(); ?>
</div>
</div>
</div>
<?php endif; ?>
<?php if ( get_theme_mod( 'header-social', 'on' ) == 'on' ): ?>
<?php gridzone_social_links() ; ?>
<?php endif; ?>
</div>
<?php if ( get_header_image() ) : ?>
<div class="site-header">
<a href="<?php echo esc_url( home_url('/') ); ?>" rel="home">
<img class="site-image" src="<?php header_image(); ?>" alt="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>">
</a>
</div>
<?php endif; ?>
<div class="container" id="page">
<div class="container-inner">
<div class="main">
<div class="main-inner group">
Java Script and HTML/CSS are the critical ingredients behind many software developments today, including designing iGaming sites like Ice Casino and the games in their lobbies. That said, Python’s popularity has rapidly grown to become the go-to programming language for many developers today, even in the iGaming scene, because of how versatile and user-friendly this tool is.
Meanwhile, as good as Python is, if you are interested in home automation, connected devices, and the Internet of Things, there is one Python derivative you could lean into to get things done. This is where MicroPython comes in. Read on to discover what this language is all about and why it is the perfect solution for building exciting items like a laser sword, blaster, or robot.
What Is MicroPython?
Essentially, MicroPython refers to an efficient, lean implementation of Python programming. The tiny, open-source language runs on microcontrollers, essentially small, embedded development boards. So, given that this tool lets you write simple and clean Python code for controlling your boards, you don’t have to leverage complex languages like C++.
This software implementation benefits users who are new to programming and coding. No worries if you already use Python, as its Micro counterpart supports most of the syntax you’re already accustomed to. But how do the two differ?
Python vs Its Micro Counterpart
The difference between the two software types lies in the size of their standard libraries. MicroPython features a more compact standard library with only a limited subset compared to the comprehensive library of Python.
This design language functions effectively under constrained conditions and compensates for its smaller standard library by allowing modules to access low-level hardware. For instance, it facilitates the use of libraries for convenient interaction with general-purpose input/outputs (GPIOs).
What Is a Microcontroller?
Microcontrollers are tiny and less potent than your server rack or desktop computer. However, their all-rounded assembly adds control and intelligence to our devices. These small computers on single-integrated circuits encompass a range of general-purpose computing devices, including appliances, HVAC systems, home security setups, pacemakers, and more.
MicroPython is tailored to the specific constraints of microcontrollers. Choose it if you want to write Python code that can run efficiently on microcontrollers. This way, you’ll simplify the development of embedded systems and Internet of Things (IoT) applications. This combination enables programmers to leverage Python’s ease of use and readability in the context of resource-constrained devices. Thus, it’s more accessible to a broader range of developers.
Why Use MicroPython?
So, why use this software when it has its limitations? Despite the setbacks, this programming language implementation tool has much to offer. Let’s explore some benefits:
- Perfect for Beginners: MicroPython’s simplicity makes it an excellent choice for those starting their programming and coding journey. You can learn it in just a few days or even hours and swiftly progress to programming microcontrollers. But if you’re already familiar with Python, transitioning is even more seamless with minimal challenges;
- Rapid Feedback: Users get rapid feedback through the interactive nature of the software REPL (read-evaluate-print-loop). This feature lets you enter commands and receive immediate responses without compiling or uploading. As a result, you’ll achieve a faster learning and experimentation process than the traditional code-compile-upload-execute iterations;
- Extensive Software Library: MicroPython’s extensive software library supports various tasks, such as parsing JSON data from a web service, string handling, and network socket programming. This feature significantly simplifies tasks and enhances overall ease of use;
- Flexible: Lastly, the tool is highly extensible with mid-level C/C++ functions. Its flexibility allows users to blend clean and easily understandable code with performance-critical sections written in faster low-level code. This approach combines simplicity with the ability to address performance-intensive requirements.
Supported Platforms & Architectures
MicroPython is compatible with diverse microcontrollers. It operates seamlessly on various platforms, including Unix-like systems (BSD, Linux, WSL, macOS) and Windows. In addition, it caters to microcontroller targets with minimal specifications, supporting devices as compact as 256kiB flash + 16kiB RAM. However, devices with at least 512kiB flash + 128kiB RAM are recommended for a more comprehensive and feature-rich experience.
The Windows and Unix ports of MicroPython facilitate the development and testing of Python’s Micro descendant itself and offer a lightweight alternative to CPython, especially on embedded Linux systems. Its “minimal” port is an illustrative example of why it is called Micro. You can compile it as a standalone Linux binary or for ARM Cortex M4.
Start with the “minimal” port if you want to port MicroPython to another microcontroller. The “bare-arm” port represents the minimal configuration, serving as a reference to monitor the code size of the core runtime and VM.
MicroPython Hardware
You’ll need a compatible hardware solution to install the software onto. Fortunately, you have vast options, including but not limited to:
Built for Python
The Kickstarter campaign that initiated the Micro software in the center of our post introduced its corresponding hardware, the so-called Pyboard. This hardware solution is built on the STM32 and is now at version 1.1. The feature-rich board offers ample GPIO, an SD slot, an accelerometer, and RTC, operating at 168 MHz.
ESP8266 or ESP32 Boards
ESP8266-based boards are on the more affordable end. They offer limited analog inputs and fewer pins than the Pyboard, but you benefit from Wi-Fi capability. Notable versions like the M5 Stack include a Peizo speaker, battery, card reader, and color screen.
BBC Micro: Bit
This tiny board is based on the Nordic nRF51822 microcontroller. It has a built-in Bluetooth LE, temperature sensing, an accelerometer, a 5×5 LED grid, and two action buttons. These boards are widely distributed to UK schoolchildren and inspire a new generation of coders.
Adafruit and CircuitPython Boards
Adafruit introduced CircuitPython following MicroPython’s momentum. The latter supports Adafruit hardware and presents boards as USB-connected drives, simplifying code transfer. The CircuitPlayground Express is the flagship Adafruit board. It boasts an optional Crickit add-on, providing a comprehensive solution with pins, sensors, motor drivers, RGB LEDs, and more. However, Adafruit has discontinued ESP8266 compatibility. Instead, the hardware opts for the ESP32 Wi-Fi co-processor in upcoming releases.
The Revolution in Hardware Programming
Programming robots, microcontrollers, and electronics has never been more accessible. Traditionally, developers were confined to low-level languages like Assembler or C++, sacrificing functionality. Thankfully, MicroPython opens new possibilities that developers can tap into!
</div><!--/.main-inner-->
</div><!--/.main-->
</div><!--/.container-inner-->
</div><!--/.container-->
<div class="clear"></div>
<footer id="footer">
<?php if ( get_theme_mod( 'footer-ads', 'off' ) == 'on' ): ?>
<div id="footer-ads">
<?php dynamic_sidebar( 'footer-ads' ); ?>
</div><!--/#footer-ads-->
<?php endif; ?>
<?php // footer widgets
$total = 4;
if ( get_theme_mod( 'footer-widgets','0' ) != '' ) {
$total = get_theme_mod( 'footer-widgets' );
if( $total == 1) $class = 'one-full';
if( $total == 2) $class = 'one-half';
if( $total == 3) $class = 'one-third';
if( $total == 4) $class = 'one-fourth';
}
if ( ( is_active_sidebar( 'footer-1' ) ||
is_active_sidebar( 'footer-2' ) ||
is_active_sidebar( 'footer-3' ) ||
is_active_sidebar( 'footer-4' ) ) && $total > 0 )
{ ?>
<div id="footer-widgets">
<div class="pad group">
<?php $i = 0; while ( $i < $total ) { $i++; ?>
<?php if ( is_active_sidebar( 'footer-' . $i ) ) { ?>
<div class="footer-widget-<?php echo esc_attr( $i ); ?> grid <?php echo esc_attr( $class ); ?> <?php if ( $i == $total ) { echo 'last'; } ?>">
<?php dynamic_sidebar( 'footer-' . $i ); ?>
</div>
<?php } ?>
<?php } ?>
</div><!--/.pad-->
</div><!--/#footer-widgets-->
<?php } ?>
<div id="footer-bottom">
<a id="back-to-top" href="#"><i class="fas fa-angle-up"></i></a>
<div class="pad group">
<div class="grid one-full">
<?php if ( get_theme_mod('footer-logo') ): ?>
<img id="footer-logo" src="<?php echo esc_url( get_theme_mod('footer-logo') ); ?>" alt="<?php echo esc_attr( get_bloginfo('name')); ?>">
<?php endif; ?>
<div id="copyright">
<?php if ( get_theme_mod( 'copyright' ) ): ?>
<p><?php echo esc_html( get_theme_mod( 'copyright' ) ); ?></p>
<?php else: ?>
<p><?php bloginfo(); ?> © <?php echo esc_html( date_i18n( esc_html__( 'Y', 'gridzone' ) ) ); ?>. <?php esc_html_e( 'All Rights Reserved.', 'gridzone' ); ?></p>
<?php endif; ?>
</div><!--/#copyright-->
<?php if ( get_theme_mod( 'credit', 'on' ) == 'on' ): ?>
<div id="credit">
<p><?php esc_html_e('Powered by','gridzone'); ?> <a href="http://wordpress.org" rel="nofollow">WordPress</a>. <?php esc_html_e('Theme by','gridzone'); ?> <a href="http://alx.media" rel="nofollow">Alx</a>.</p>
</div><!--/#credit-->
<?php endif; ?>
<?php if ( get_theme_mod( 'footer-social', 'on' ) == 'on' ): ?>
<?php gridzone_social_links() ; ?>
<?php endif; ?>
</div>
</div><!--/.pad-->
</div><!--/#footer-bottom-->
</footer><!--/#footer-->
</div><!--/#wrapper-->
<?php wp_footer(); ?>
</body>
</html>