var console=console||{log:function(){},debug:function(){},warn:function(){}};String.prototype.startsWith||(String.prototype.startsWith=function(searchString,position){return this.substr(position=position||0,searchString.length)===searchString}),String.prototype.endsWith||(String.prototype.endsWith=function(search,this_len){return(void 0===this_len||this_len>this.length)&&(this_len=this.length),this.substring(this_len-search.length,this_len)===search}),String.prototype.includes||Object.defineProperty(String.prototype,"includes",{enumerable:!1,writable:!0,value:function(search,start){"use strict";return!((start="number"!=typeof start?0:start)+search.length>this.length)&&-1!==this.indexOf(search,start)}}),Array.prototype.includes||Object.defineProperty(Array.prototype,"includes",{enumerable:!1,writable:!0,value:function(searchElement){"use strict";var O=Object(this),len=parseInt(O.length)||0;if(0===len)return!1;var k,currentElement,n=parseInt(arguments[1])||0;for(0<=n?k=n:(k=len+n)<0&&(k=0);k<len;){if(searchElement===(currentElement=O[k])||searchElement!=searchElement&&currentElement!=currentElement)return!0;k++}return!1}}),Array.from||(Array.from=function(){function isCallable(fn){return"function"==typeof fn||"[object Function]"===toStr.call(fn)}function toLength(len){return len=function(number){number=Number(number);return isNaN(number)?0:0!==number&&isFinite(number)?(0<number?1:-1)*Math.floor(Math.abs(number)):number}(len),Math.min(Math.max(len,0),maxSafeInteger)}var toStr=Object.prototype.toString,maxSafeInteger=Math.pow(2,53)-1;return function(arrayLike){var items=Object(arrayLike);if(null==arrayLike)throw new TypeError("Array.from requires an array-like object - not null or undefined");var T,mapFn=1<arguments.length?arguments[1]:void 0;if(void 0!==mapFn){if(!isCallable(mapFn))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(T=arguments[2])}for(var kValue,len=toLength(items.length),A=isCallable(this)?Object(new this(len)):new Array(len),k=0;k<len;)kValue=items[k],A[k]=mapFn?void 0===T?mapFn(kValue,k):mapFn.call(T,kValue,k):kValue,k+=1;return A.length=len,A}}()),"undefined"==typeof Element||Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector),Int32Array.__proto__.from||(Int32Array.__proto__.from=function(obj,func,thisObj){var typedArrayClass=Int32Array.__proto__;if("function"!=typeof this)throw new TypeError("# is not a constructor");if(this.__proto__!==typedArrayClass)throw new TypeError("this is not a typed array.");if("function"!=typeof(func=func||function(elem){return elem}))throw new TypeError("specified argument is not a function");if(!(obj=Object(obj)).length)return new this(0);for(var copy_data=[],i=0;i<obj.length;i++)copy_data.push(obj[i]);for(var typed_array=new this((copy_data=copy_data.map(func,thisObj)).length),i=0;i<typed_array.length;i++)typed_array[i]=copy_data[i];return typed_array});