16 lines
173 KiB
JavaScript
16 lines
173 KiB
JavaScript
this.wordle=this.wordle||{},this.wordle.bundle=function(e){"use strict";function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,a){if(!(e instanceof a))throw new TypeError("Cannot call a class as a function")}function t(e,a){for(var s=0;s<a.length;s++){var t=a[s];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}function o(e,a,s){return a&&t(e.prototype,a),s&&t(e,s),e}function n(e,a,s){return a in e?Object.defineProperty(e,a,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[a]=s,e}function r(e,a){if("function"!=typeof a&&null!==a)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(a&&a.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),a&&l(e,a)}function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function l(e,a){return(l=Object.setPrototypeOf||function(e,a){return e.__proto__=a,e})(e,a)}function d(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function u(e,a,s){return(u=d()?Reflect.construct:function(e,a,s){var t=[null];t.push.apply(t,a);var o=new(Function.bind.apply(e,t));return s&&l(o,s.prototype),o}).apply(null,arguments)}function c(e){var a="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||(s=e,-1===Function.toString.call(s).indexOf("[native code]")))return e;var s;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==a){if(a.has(e))return a.get(e);a.set(e,t)}function t(){return u(e,arguments,i(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),l(t,e)})(e)}function p(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e,a){return!a||"object"!=typeof a&&"function"!=typeof a?p(e):a}function h(e){var a=d();return function(){var s,t=i(e);if(a){var o=i(this).constructor;s=Reflect.construct(t,arguments,o)}else s=t.apply(this,arguments);return m(this,s)}}function y(e,a){return function(e){if(Array.isArray(e))return e}(e)||function(e,a){var s=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==s)return;var t,o,n=[],r=!0,i=!1;try{for(s=s.call(e);!(r=(t=s.next()).done)&&(n.push(t.value),!a||n.length!==a);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}(e,a)||b(e,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e){return function(e){if(Array.isArray(e))return f(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,a){if(e){if("string"==typeof e)return f(e,a);var s=Object.prototype.toString.call(e).slice(8,-1);return"Object"===s&&e.constructor&&(s=e.constructor.name),"Map"===s||"Set"===s?Array.from(e):"Arguments"===s||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(s)?f(e,a):void 0}}function f(e,a){(null==a||a>e.length)&&(a=e.length);for(var s=0,t=new Array(a);s<a;s++)t[s]=e[s];return t}var k=document.createElement("template");k.innerHTML="\n<style>\n :host {\n display: inline-block;\n }\n .tile {\n width: 100%;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n font-size: 2rem;\n line-height: 2rem;\n font-weight: bold;\n vertical-align: middle;\n box-sizing: border-box;\n color: var(--tile-text-color);\n text-transform: uppercase;\n user-select: none;\n }\n .tile::before {\n content: '';\n display: inline-block;\n padding-bottom: 100%;\n }\n\n /* Allow tiles to be smaller on small screens */\n @media (max-height: 600px) {\n .tile {\n font-size: 1em;\n line-height: 1em;\n }\n }\n\n .tile[data-state='empty'] {\n border: 2px solid var(--color-tone-4);\n }\n .tile[data-state='tbd'] {\n background-color: var(--color-tone-7);\n border: 2px solid var(--color-tone-3);\n color: var(--color-tone-1);\n }\n .tile[data-state='correct'] {\n background-color: var(--color-correct);\n }\n .tile[data-state='present'] {\n background-color: var(--color-present);\n }\n .tile[data-state='absent'] {\n background-color: var(--color-absent);\n }\n\n .tile[data-animation='pop'] {\n animation-name: PopIn;\n animation-duration: 100ms;\n }\n\n @keyframes PopIn {\n from {\n transform: scale(0.8);\n opacity: 0;\n }\n\n 40% {\n transform: scale(1.1);\n opacity: 1;\n }\n }\n .tile[data-animation='flip-in'] {\n animation-name: FlipIn;\n animation-duration: 250ms;\n animation-timing-function: ease-in;\n }\n @keyframes FlipIn {\n 0% {\n transform: rotateX(0);\n }\n 100% {\n transform: rotateX(-90deg);\n }\n }\n .tile[data-animation='flip-out'] {\n animation-name: FlipOut;\n animation-duration: 250ms;\n animation-timing-function: ease-in;\n }\n @keyframes FlipOut {\n 0% {\n transform: rotateX(-90deg);\n }\n 100% {\n transform: rotateX(0);\n }\n }\n</style>\n<div class=\"tile\" data-state=\"empty\" data-animation=\"idle\"></div>\n";var v=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),n(p(e=a.call(this)),"_letter",""),n(p(e),"_state","empty"),n(p(e),"_animation","idle"),n(p(e),"_last",!1),n(p(e),"_reveal",!1),e.attachShadow({mode:"open"}),e}return o(t,[{key:"last",set:function(e){this._last=e}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(k.content.cloneNode(!0)),this.$tile=this.shadowRoot.querySelector(".tile"),this.$tile.addEventListener("animationend",(function(a){"PopIn"===a.animationName&&(e._animation="idle"),"FlipIn"===a.animationName&&(e.$tile.dataset.state=e._state,e._animation="flip-out"),"FlipOut"===a.animationName&&(e._animation="idle",e._last&&e.dispatchEvent(new CustomEvent("game-last-tile-revealed-in-row",{bubbles:!0,composed:!0}))),e._render()})),this._render()}},{key:"attributeChangedCallback",value:function(e,a,s){switch(e){case"letter":if(s===a)break;var t="null"===s?"":s;this._letter=t,this._state=t?"tbd":"empty",this._animation=t?"pop":"idle";break;case"evaluation":if(!s)break;this._state=s;break;case"reveal":this._animation="flip-in",this._reveal=!0}this._render()}},{key:"_render",value:function(){this.$tile&&(this.$tile.textContent=this._letter,["empty","tbd"].includes(this._state)&&(this.$tile.dataset.state=this._state),(["empty","tbd"].includes(this._state)||this._reveal)&&this.$tile.dataset.animation!=this._animation&&(this.$tile.dataset.animation=this._animation))}}],[{key:"observedAttributes",get:function(){return["letter","evaluation","reveal"]}}]),t}(c(HTMLElement));customElements.define("game-tile",v);var w=document.createElement("template");w.innerHTML='\n <style>\n :host {\n display: block;\n }\n :host([invalid]){\n animation-name: Shake;\n animation-duration: 600ms;\n }\n .row {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n grid-gap: 5px;\n }\n .win {\n animation-name: Bounce;\n animation-duration: 1000ms;\n }\n\n @keyframes Bounce {\n 0%, 20% {\n transform: translateY(0);\n }\n 40% {\n transform: translateY(-30px);\n }\n 50% {\n transform: translateY(5px);\n }\n 60% {\n transform: translateY(-15px);\n }\n 80% {\n transform: translateY(2px);\n }\n 100% {\n transform: translateY(0);\n }\n }\n\n @keyframes Shake {\n 10%,\n 90% {\n transform: translateX(-1px);\n }\n\n 20%,\n 80% {\n transform: translateX(2px);\n }\n\n 30%,\n 50%,\n 70% {\n transform: translateX(-4px);\n }\n\n 40%,\n 60% {\n transform: translateX(4px);\n }\n }\n </style>\n <div class="row"></div>\n';var x=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e._letters="",e._evaluation=[],e._length,e}return o(t,[{key:"evaluation",get:function(){return this._evaluation},set:function(e){var a=this;this._evaluation=e,this.$tiles&&this.$tiles.forEach((function(e,s){e.setAttribute("evaluation",a._evaluation[s]),setTimeout((function(){e.setAttribute("reveal","")}),300*s)}))}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(w.content.cloneNode(!0)),this.$row=this.shadowRoot.querySelector(".row");for(var a=function(a){var s=document.createElement("game-tile"),t=e._letters[a];(t&&s.setAttribute("letter",t),e._evaluation[a])&&(s.setAttribute("evaluation",e._evaluation[a]),setTimeout((function(){s.setAttribute("reveal","")}),100*a));a===e._length-1&&(s.last=!0),e.$row.appendChild(s)},s=0;s<this._length;s++)a(s);this.$tiles=this.shadowRoot.querySelectorAll("game-tile"),this.addEventListener("animationend",(function(a){"Shake"===a.animationName&&e.removeAttribute("invalid")}))}},{key:"attributeChangedCallback",value:function(e,a,s){switch(e){case"letters":this._letters=s||"";break;case"length":this._length=parseInt(s,10);break;case"win":if(null===s){this.$tiles.forEach((function(e){e.classList.remove("win")}));break}this.$tiles.forEach((function(e,a){e.classList.add("win"),e.style.animationDelay="".concat(100*a,"ms")}))}this._render()}},{key:"_render",value:function(){var e=this;this.$row&&this.$tiles.forEach((function(a,s){var t=e._letters[s];t?a.setAttribute("letter",t):a.removeAttribute("letter")}))}}],[{key:"observedAttributes",get:function(){return["letters","length","invalid","win"]}}]),t}(c(HTMLElement));customElements.define("game-row",x);var z=document.createElement("template");z.innerHTML="\n <slot></slot>\n";var j="darkTheme",S="colorBlindTheme",_=function(e){r(t,e);var a=h(t);function t(){var e;s(this,t),n(p(e=a.call(this)),"isDarkTheme",!1),n(p(e),"isColorBlindTheme",!1),e.attachShadow({mode:"open"});var o=JSON.parse(window.localStorage.getItem(j)),r=window.matchMedia("(prefers-color-scheme: dark)").matches,i=JSON.parse(window.localStorage.getItem(S));return!0===o||!1===o?e.setDarkTheme(o):r&&e.setDarkTheme(!0),!0!==i&&!1!==i||e.setColorBlindTheme(i),e}return o(t,[{key:"setDarkTheme",value:function(e){var a=document.querySelector("body");e&&!a.classList.contains("nightmode")?a.classList.add("nightmode"):a.classList.remove("nightmode"),this.isDarkTheme=e,window.localStorage.setItem(j,JSON.stringify(e))}},{key:"setColorBlindTheme",value:function(e){var a=document.querySelector("body");e&&!a.classList.contains("colorblind")?a.classList.add("colorblind"):a.classList.remove("colorblind"),this.isColorBlindTheme=e,window.localStorage.setItem(S,JSON.stringify(e))}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(z.content.cloneNode(!0)),this.shadowRoot.addEventListener("game-setting-change",(function(a){var s=a.detail,t=s.name,o=s.checked;switch(t){case"dark-theme":return void e.setDarkTheme(o);case"color-blind-theme":return void e.setColorBlindTheme(o)}}))}}]),t}(c(HTMLElement));function q(e,a){return e===a||e!=e&&a!=a}function E(e,a){for(var s=e.length;s--;)if(q(e[s][0],a))return s;return-1}customElements.define("game-theme-manager",_);var A=Array.prototype.splice;function C(e){var a=-1,s=null==e?0:e.length;for(this.clear();++a<s;){var t=e[a];this.set(t[0],t[1])}}C.prototype.clear=function(){this.__data__=[],this.size=0},C.prototype.delete=function(e){var a=this.__data__,s=E(a,e);return!(s<0)&&(s==a.length-1?a.pop():A.call(a,s,1),--this.size,!0)},C.prototype.get=function(e){var a=this.__data__,s=E(a,e);return s<0?void 0:a[s][1]},C.prototype.has=function(e){return E(this.__data__,e)>-1},C.prototype.set=function(e,a){var s=this.__data__,t=E(s,e);return t<0?(++this.size,s.push([e,a])):s[t][1]=a,this};var L="object"==("undefined"==typeof global?"undefined":a(global))&&global&&global.Object===Object&&global,T="object"==("undefined"==typeof self?"undefined":a(self))&&self&&self.Object===Object&&self,I=L||T||Function("return this")(),M=I.Symbol,O=Object.prototype,R=O.hasOwnProperty,P=O.toString,$=M?M.toStringTag:void 0;var H=Object.prototype.toString;var N=M?M.toStringTag:void 0;function D(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":N&&N in Object(e)?function(e){var a=R.call(e,$),s=e[$];try{e[$]=void 0;var t=!0}catch(e){}var o=P.call(e);return t&&(a?e[$]=s:delete e[$]),o}(e):function(e){return H.call(e)}(e)}function G(e){var s=a(e);return null!=e&&("object"==s||"function"==s)}function B(e){if(!G(e))return!1;var a=D(e);return"[object Function]"==a||"[object GeneratorFunction]"==a||"[object AsyncFunction]"==a||"[object Proxy]"==a}var F,W=I["__core-js_shared__"],Y=(F=/[^.]+$/.exec(W&&W.keys&&W.keys.IE_PROTO||""))?"Symbol(src)_1."+F:"";var J=Function.prototype.toString;var U=/^\[object .+?Constructor\]$/,X=Function.prototype,V=Object.prototype,K=X.toString,Q=V.hasOwnProperty,Z=RegExp("^"+K.call(Q).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ee(e){return!(!G(e)||(a=e,Y&&Y in a))&&(B(e)?Z:U).test(function(e){if(null!=e){try{return J.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e));var a}function ae(e,a){var s=function(e,a){return null==e?void 0:e[a]}(e,a);return ee(s)?s:void 0}var se=ae(I,"Map"),te=ae(Object,"create");var oe=Object.prototype.hasOwnProperty;var ne=Object.prototype.hasOwnProperty;function re(e){var a=-1,s=null==e?0:e.length;for(this.clear();++a<s;){var t=e[a];this.set(t[0],t[1])}}function ie(e,s){var t,o,n=e.__data__;return("string"==(o=a(t=s))||"number"==o||"symbol"==o||"boolean"==o?"__proto__"!==t:null===t)?n["string"==typeof s?"string":"hash"]:n.map}function le(e){var a=-1,s=null==e?0:e.length;for(this.clear();++a<s;){var t=e[a];this.set(t[0],t[1])}}re.prototype.clear=function(){this.__data__=te?te(null):{},this.size=0},re.prototype.delete=function(e){var a=this.has(e)&&delete this.__data__[e];return this.size-=a?1:0,a},re.prototype.get=function(e){var a=this.__data__;if(te){var s=a[e];return"__lodash_hash_undefined__"===s?void 0:s}return oe.call(a,e)?a[e]:void 0},re.prototype.has=function(e){var a=this.__data__;return te?void 0!==a[e]:ne.call(a,e)},re.prototype.set=function(e,a){var s=this.__data__;return this.size+=this.has(e)?0:1,s[e]=te&&void 0===a?"__lodash_hash_undefined__":a,this},le.prototype.clear=function(){this.size=0,this.__data__={hash:new re,map:new(se||C),string:new re}},le.prototype.delete=function(e){var a=ie(this,e).delete(e);return this.size-=a?1:0,a},le.prototype.get=function(e){return ie(this,e).get(e)},le.prototype.has=function(e){return ie(this,e).has(e)},le.prototype.set=function(e,a){var s=ie(this,e),t=s.size;return s.set(e,a),this.size+=s.size==t?0:1,this};function de(e){var a=this.__data__=new C(e);this.size=a.size}de.prototype.clear=function(){this.__data__=new C,this.size=0},de.prototype.delete=function(e){var a=this.__data__,s=a.delete(e);return this.size=a.size,s},de.prototype.get=function(e){return this.__data__.get(e)},de.prototype.has=function(e){return this.__data__.has(e)},de.prototype.set=function(e,a){var s=this.__data__;if(s instanceof C){var t=s.__data__;if(!se||t.length<199)return t.push([e,a]),this.size=++s.size,this;s=this.__data__=new le(t)}return s.set(e,a),this.size=s.size,this};var ue=function(){try{var e=ae(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();function ce(e,a,s){"__proto__"==a&&ue?ue(e,a,{configurable:!0,enumerable:!0,value:s,writable:!0}):e[a]=s}function pe(e,a,s){(void 0!==s&&!q(e[a],s)||void 0===s&&!(a in e))&&ce(e,a,s)}var me,he=function(e,a,s){for(var t=-1,o=Object(e),n=s(e),r=n.length;r--;){var i=n[me?r:++t];if(!1===a(o[i],i,o))break}return e},ye="object"==(void 0===e?"undefined":a(e))&&e&&!e.nodeType&&e,ge=ye&&"object"==("undefined"==typeof module?"undefined":a(module))&&module&&!module.nodeType&&module,be=ge&&ge.exports===ye?I.Buffer:void 0,fe=be?be.allocUnsafe:void 0;var ke=I.Uint8Array;function ve(e,a){var s,t,o=a?(s=e.buffer,t=new s.constructor(s.byteLength),new ke(t).set(new ke(s)),t):e.buffer;return new e.constructor(o,e.byteOffset,e.length)}var we=Object.create,xe=function(){function e(){}return function(a){if(!G(a))return{};if(we)return we(a);e.prototype=a;var s=new e;return e.prototype=void 0,s}}();var ze,je,Se=(ze=Object.getPrototypeOf,je=Object,function(e){return ze(je(e))}),_e=Object.prototype;function qe(e){var a=e&&e.constructor;return e===("function"==typeof a&&a.prototype||_e)}function Ee(e){return null!=e&&"object"==a(e)}function Ae(e){return Ee(e)&&"[object Arguments]"==D(e)}var Ce=Object.prototype,Le=Ce.hasOwnProperty,Te=Ce.propertyIsEnumerable,Ie=Ae(function(){return arguments}())?Ae:function(e){return Ee(e)&&Le.call(e,"callee")&&!Te.call(e,"callee")},Me=Array.isArray;function Oe(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}function Re(e){return null!=e&&Oe(e.length)&&!B(e)}var Pe="object"==(void 0===e?"undefined":a(e))&&e&&!e.nodeType&&e,$e=Pe&&"object"==("undefined"==typeof module?"undefined":a(module))&&module&&!module.nodeType&&module,He=$e&&$e.exports===Pe?I.Buffer:void 0,Ne=(He?He.isBuffer:void 0)||function(){return!1},De=Function.prototype,Ge=Object.prototype,Be=De.toString,Fe=Ge.hasOwnProperty,We=Be.call(Object);var Ye={};Ye["[object Float32Array]"]=Ye["[object Float64Array]"]=Ye["[object Int8Array]"]=Ye["[object Int16Array]"]=Ye["[object Int32Array]"]=Ye["[object Uint8Array]"]=Ye["[object Uint8ClampedArray]"]=Ye["[object Uint16Array]"]=Ye["[object Uint32Array]"]=!0,Ye["[object Arguments]"]=Ye["[object Array]"]=Ye["[object ArrayBuffer]"]=Ye["[object Boolean]"]=Ye["[object DataView]"]=Ye["[object Date]"]=Ye["[object Error]"]=Ye["[object Function]"]=Ye["[object Map]"]=Ye["[object Number]"]=Ye["[object Object]"]=Ye["[object RegExp]"]=Ye["[object Set]"]=Ye["[object String]"]=Ye["[object WeakMap]"]=!1;var Je="object"==(void 0===e?"undefined":a(e))&&e&&!e.nodeType&&e,Ue=Je&&"object"==("undefined"==typeof module?"undefined":a(module))&&module&&!module.nodeType&&module,Xe=Ue&&Ue.exports===Je&&L.process,Ve=function(){try{var e=Ue&&Ue.require&&Ue.require("util").types;return e||Xe&&Xe.binding&&Xe.binding("util")}catch(e){}}(),Ke=Ve&&Ve.isTypedArray,Qe=Ke?function(e){return function(a){return e(a)}}(Ke):function(e){return Ee(e)&&Oe(e.length)&&!!Ye[D(e)]};function Ze(e,a){if(("constructor"!==a||"function"!=typeof e[a])&&"__proto__"!=a)return e[a]}var ea=Object.prototype.hasOwnProperty;function aa(e,a,s){var t=e[a];ea.call(e,a)&&q(t,s)&&(void 0!==s||a in e)||ce(e,a,s)}var sa=/^(?:0|[1-9]\d*)$/;function ta(e,s){var t=a(e);return!!(s=null==s?9007199254740991:s)&&("number"==t||"symbol"!=t&&sa.test(e))&&e>-1&&e%1==0&&e<s}var oa=Object.prototype.hasOwnProperty;function na(e,a){var s=Me(e),t=!s&&Ie(e),o=!s&&!t&&Ne(e),n=!s&&!t&&!o&&Qe(e),r=s||t||o||n,i=r?function(e,a){for(var s=-1,t=Array(e);++s<e;)t[s]=a(s);return t}(e.length,String):[],l=i.length;for(var d in e)!a&&!oa.call(e,d)||r&&("length"==d||o&&("offset"==d||"parent"==d)||n&&("buffer"==d||"byteLength"==d||"byteOffset"==d)||ta(d,l))||i.push(d);return i}var ra=Object.prototype.hasOwnProperty;function ia(e){if(!G(e))return function(e){var a=[];if(null!=e)for(var s in Object(e))a.push(s);return a}(e);var a=qe(e),s=[];for(var t in e)("constructor"!=t||!a&&ra.call(e,t))&&s.push(t);return s}function la(e){return Re(e)?na(e,!0):ia(e)}function da(e){return function(e,a,s,t){var o=!s;s||(s={});for(var n=-1,r=a.length;++n<r;){var i=a[n],l=t?t(s[i],e[i],i,s,e):void 0;void 0===l&&(l=e[i]),o?ce(s,i,l):aa(s,i,l)}return s}(e,la(e))}function ua(e,a,s,t,o,n,r){var i=Ze(e,s),l=Ze(a,s),d=r.get(l);if(d)pe(e,s,d);else{var u,c=n?n(i,l,s+"",e,a,r):void 0,p=void 0===c;if(p){var m=Me(l),h=!m&&Ne(l),y=!m&&!h&&Qe(l);c=l,m||h||y?Me(i)?c=i:Ee(u=i)&&Re(u)?c=function(e,a){var s=-1,t=e.length;for(a||(a=Array(t));++s<t;)a[s]=e[s];return a}(i):h?(p=!1,c=function(e,a){if(a)return e.slice();var s=e.length,t=fe?fe(s):new e.constructor(s);return e.copy(t),t}(l,!0)):y?(p=!1,c=ve(l,!0)):c=[]:function(e){if(!Ee(e)||"[object Object]"!=D(e))return!1;var a=Se(e);if(null===a)return!0;var s=Fe.call(a,"constructor")&&a.constructor;return"function"==typeof s&&s instanceof s&&Be.call(s)==We}(l)||Ie(l)?(c=i,Ie(i)?c=da(i):G(i)&&!B(i)||(c=function(e){return"function"!=typeof e.constructor||qe(e)?{}:xe(Se(e))}(l))):p=!1}p&&(r.set(l,c),o(c,l,t,n,r),r.delete(l)),pe(e,s,c)}}function ca(e,a,s,t,o){e!==a&&he(a,(function(n,r){if(o||(o=new de),G(n))ua(e,a,r,s,ca,t,o);else{var i=t?t(Ze(e,r),n,r+"",e,a,o):void 0;void 0===i&&(i=n),pe(e,r,i)}}),la)}function pa(e){return e}function ma(e,a,s){switch(s.length){case 0:return e.call(a);case 1:return e.call(a,s[0]);case 2:return e.call(a,s[0],s[1]);case 3:return e.call(a,s[0],s[1],s[2])}return e.apply(a,s)}var ha=Math.max;var ya=ue?function(e,a){return ue(e,"toString",{configurable:!0,enumerable:!1,value:(s=a,function(){return s}),writable:!0});var s}:pa,ga=Date.now;var ba=function(e){var a=0,s=0;return function(){var t=ga(),o=16-(t-s);if(s=t,o>0){if(++a>=800)return arguments[0]}else a=0;return e.apply(void 0,arguments)}}(ya);function fa(e,a){return ba(function(e,a,s){return a=ha(void 0===a?e.length-1:a,0),function(){for(var t=arguments,o=-1,n=ha(t.length-a,0),r=Array(n);++o<n;)r[o]=t[a+o];o=-1;for(var i=Array(a+1);++o<a;)i[o]=t[o];return i[a]=s(r),ma(e,this,i)}}(e,a,pa),e+"")}var ka,va=(ka=function(e,a,s){ca(e,a,s)},fa((function(e,s){var t=-1,o=s.length,n=o>1?s[o-1]:void 0,r=o>2?s[2]:void 0;for(n=ka.length>3&&"function"==typeof n?(o--,n):void 0,r&&function(e,s,t){if(!G(t))return!1;var o=a(s);return!!("number"==o?Re(t)&&ta(s,t.length):"string"==o&&s in t)&&q(t[s],e)}(s[0],s[1],r)&&(n=o<3?void 0:n,o=1),e=Object(e);++t<o;){var i=s[t];i&&ka(e,i,t,n)}return e}))),wa="gameState",xa={boardState:null,evaluations:null,rowIndex:null,solution:null,gameStatus:null,lastPlayedTs:null,lastCompletedTs:null,restoringFromLocalStorage:null,hardMode:!1};function za(){var e=window.localStorage.getItem(wa)||JSON.stringify(xa);return JSON.parse(e)}function ja(e){var a=za();!function(e){window.localStorage.setItem(wa,JSON.stringify(e))}(va(a,e))}var Sa=document.createElement("template");Sa.innerHTML='\n <style>\n .setting {\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-bottom: 1px solid var(--color-tone-4);\n padding: 16px 0;\n }\n\n a, a:visited {\n color: var(--color-tone-2);\n }\n\n .title {\n font-size: 18px;\n }\n .text {\n padding-right: 8px;\n }\n .description {\n font-size: 12px;\n color: var(--color-tone-2);\n }\n\n #footnote {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n padding: 16px;\n color: var(--color-tone-2);\n font-size: 12px;\n text-align: right;\n display: flex;\n justify-content: space-between;\n align-items: flex-end;\n }\n\n #privacy-policy,\n #copyright {\n text-align: left;\n }\n\n @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {\n .setting {\n padding: 16px;\n }\n }\n\n </style>\n <div class="sections">\n <section>\n <div class="setting">\n <div class="text">\n <div class="title">Hard Mode</div>\n <div class="description">Any revealed hints must be used in subsequent guesses</div>\n </div>\n <div class="control">\n <game-switch id="hard-mode" name="hard-mode"></game-switch>\n </div>\n </div>\n <div class="setting">\n <div class="text">\n <div class="title">Dark Theme</div>\n </div>\n <div class="control">\n <game-switch id="dark-theme" name="dark-theme"></game-switch>\n </div>\n </div>\n <div class="setting">\n <div class="text">\n <div class="title">Color Blind Mode</div>\n <div class="description">High contrast colors</div>\n </div>\n <div class="control">\n <game-switch id="color-blind-theme" name="color-blind-theme"></game-switch>\n </div>\n </div>\n </section>\n\n <section>\n <div class="setting">\n <div class="text">\n <div class="title">Feedback</div>\n </div>\n <div class="control">\n <a href="mailto:wordle@powerlanguage.co.uk?subject=Feedback" title="wordle@powerlanguage.co.uk">Email</a>\n |\n <a href="https://twitter.com/intent/tweet?screen_name=powerlanguish" target="blank" title="@powerlanguish">Twitter</a>\n </div>\n </div>\n </section>\n </div>\n <div id="footnote">\n <div>\n <div id="privacy-policy"><a href="https://www.powerlanguage.co.uk/privacy-policy.html" target="_blank">Privacy Policy</a></div>\n <div id="copyright">Copyright 2021-2022. All Rights Reserved.</div>\n </div>\n <div>\n <div id="puzzle-number"></div>\n <div id="hash"></div>\n </div>\n </div>\n';var _a=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),n(p(e=a.call(this)),"gameApp",void 0),e.attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){var e,a=this;this.shadowRoot.appendChild(Sa.content.cloneNode(!0)),this.shadowRoot.querySelector("#hash").textContent=null===(e=window.wordle)||void 0===e?void 0:e.hash,this.shadowRoot.querySelector("#puzzle-number").textContent="#".concat(this.gameApp.dayOffset),this.shadowRoot.addEventListener("game-switch-change",(function(e){e.stopPropagation();var s=e.detail,t=s.name,o=s.checked,n=s.disabled;a.dispatchEvent(new CustomEvent("game-setting-change",{bubbles:!0,composed:!0,detail:{name:t,checked:o,disabled:n}})),a.render()})),this.render()}},{key:"render",value:function(){var e=document.querySelector("body");e.classList.contains("nightmode")&&this.shadowRoot.querySelector("#dark-theme").setAttribute("checked",""),e.classList.contains("colorblind")&&this.shadowRoot.querySelector("#color-blind-theme").setAttribute("checked","");var a=za();a.hardMode&&this.shadowRoot.querySelector("#hard-mode").setAttribute("checked",""),a.hardMode||"IN_PROGRESS"!==a.gameStatus||0===a.rowIndex||(this.shadowRoot.querySelector("#hard-mode").removeAttribute("checked"),this.shadowRoot.querySelector("#hard-mode").setAttribute("disabled",""))}}]),t}(c(HTMLElement));customElements.define("game-settings",_a);var qa=document.createElement("template");qa.innerHTML='\n <style>\n .toast {\n position: relative;\n margin: 16px;\n background-color: var(--color-tone-1);\n color: var(--color-tone-7);\n padding: 16px;\n border: none;\n border-radius: 4px;\n opacity: 1;\n transition: opacity 300ms cubic-bezier(0.645, 0.045, 0.355, 1);\n font-weight: 700;\n }\n .win {\n background-color: var(--color-correct);\n color: var(--tile-text-color);\n }\n .fade {\n opacity: 0;\n }\n </style>\n <div class="toast"></div>\n';var Ea,Aa=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),n(p(e=a.call(this)),"_duration",void 0),e.attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(qa.content.cloneNode(!0));var a=this.shadowRoot.querySelector(".toast");a.textContent=this.getAttribute("text"),this._duration=this.getAttribute("duration")||1e3,"Infinity"!==this._duration&&setTimeout((function(){a.classList.add("fade")}),this._duration),a.addEventListener("transitionend",(function(a){e.parentNode.removeChild(e)}))}}]),t}(c(HTMLElement));function Ca(){dataLayer.push(arguments)}customElements.define("game-toast",Aa),window.dataLayer=window.dataLayer||[],Ca("js",new Date);Ca("config","G-2SSGMHY3NP",{app_version:null===(Ea=window.wordle)||void 0===Ea?void 0:Ea.hash,debug_mode:!1});var La=["cigar","rebut","sissy","humph","awake","blush","focal","evade","naval","serve","heath","dwarf","model","karma","stink","grade","quiet","bench","abate","feign","major","death","fresh","crust","stool","colon","abase","marry","react","batty","pride","floss","helix","croak","staff","paper","unfed","whelp","trawl","outdo","adobe","crazy","sower","repay","digit","crate","cluck","spike","mimic","pound","maxim","linen","unmet","flesh","booby","forth","first","stand","belly","ivory","seedy","print","yearn","drain","bribe","stout","panel","crass","flume","offal","agree","error","swirl","argue","bleed","delta","flick","totem","wooer","front","shrub","parry","biome","lapel","start","greet","goner","golem","lusty","loopy","round","audit","lying","gamma","labor","islet","civic","forge","corny","moult","basic","salad","agate","spicy","spray","essay","fjord","spend","kebab","guild","aback","motor","alone","hatch","hyper","thumb","dowry","ought","belch","dutch","pilot","tweed","comet","jaunt","enema","steed","abyss","growl","fling","dozen","boozy","erode","world","gouge","click","briar","great","altar","pulpy","blurt","coast","duchy","groin","fixer","group","rogue","badly","smart","pithy","gaudy","chill","heron","vodka","finer","surer","radio","rouge","perch","retch","wrote","clock","tilde","store","prove","bring","solve","cheat","grime","exult","usher","epoch","triad","break","rhino","viral","conic","masse","sonic","vital","trace","using","peach","champ","baton","brake","pluck","craze","gripe","weary","picky","acute","ferry","aside","tapir","troll","unify","rebus","boost","truss","siege","tiger","banal","slump","crank","gorge","query","drink","favor","abbey","tangy","panic","solar","shire","proxy","point","robot","prick","wince","crimp","knoll","sugar","whack","mount","perky","could","wrung","light","those","moist","shard","pleat","aloft","skill","elder","frame","humor","pause","ulcer","ultra","robin","cynic","agora","aroma","caulk","shake","pupal","dodge","swill","tacit","other","thorn","trove","bloke","vivid","spill","chant","choke","rupee","nasty","mourn","ahead","brine","cloth","hoard","sweet","month","lapse","watch","today","focus","smelt","tease","cater","movie","lynch","saute","allow","renew","their","slosh","purge","chest","depot","epoxy","nymph","found","shall","harry","stove","lowly","snout","trope","fewer","shawl","natal","fibre","comma","foray","scare","stair","black","squad","royal","chunk","mince","slave","shame","cheek","ample","flair","foyer","cargo","oxide","plant","olive","inert","askew","heist","shown","zesty","hasty","trash","fella","larva","forgo","story","hairy","train","homer","badge","midst","canny","fetus","butch","farce","slung","tipsy","metal","yield","delve","being","scour","glass","gamer","scrap","money","hinge","album","vouch","asset","tiara","crept","bayou","atoll","manor","creak","showy","phase","froth","depth","gloom","flood","trait","girth","piety","payer","goose","float","donor","atone","primo","apron","blown","cacao","loser","input","gloat","awful","brink","smite","beady","rusty","retro","droll","gawky","hutch","pinto","gaily","egret","lilac","sever","field","fluff","hydro","flack","agape","wench","voice","stead","stalk","berth","madam","night","bland","liver","wedge","augur","roomy","wacky","flock","angry","bobby","trite","aphid","tryst","midge","power","elope","cinch","motto","stomp","upset","bluff","cramp","quart","coyly","youth","rhyme","buggy","alien","smear","unfit","patty","cling","glean","label","hunky","khaki","poker","gruel","twice","twang","shrug","treat","unlit","waste","merit","woven","octal","needy","clown","widow","irony","ruder","gauze","chief","onset","prize","fungi","charm","gully","inter","whoop","taunt","leery","class","theme","lofty","tibia","booze","alpha","thyme","eclat","doubt","parer","chute","stick","trice","alike","sooth","recap","saint","liege","glory","grate","admit","brisk","soggy","usurp","scald","scorn","leave","twine","sting","bough","marsh","sloth","dandy","vigor","howdy","enjoy","valid","ionic","equal","unset","floor","catch","spade","stein","exist","quirk","denim","grove","spiel","mummy","fault","foggy","flout","carry","sneak","libel","waltz","aptly","piney","inept","aloud","photo","dream","stale","vomit","ombre","fanny","unite","snarl","baker","there","glyph","pooch","hippy","spell","folly","louse","gulch","vault","godly","threw","fleet","grave","inane","shock","crave","spite","valve","skimp","claim","rainy","musty","pique","daddy","quasi","arise","aging","valet","opium","avert","stuck","recut","mulch","genre","plume","rifle","count","incur","total","wrest","mocha","deter","study","lover","safer","rivet","funny","smoke","mound","undue","sedan","pagan","swine","guile","gusty","equip","tough","canoe","chaos","covet","human","udder","lunch","blast","stray","manga","melee","lefty","quick","paste","given","octet","risen","groan","leaky","grind","carve","loose","sadly","spilt","apple","slack","honey","final","sheen","eerie","minty","slick","derby","wharf","spelt","coach","erupt","singe","price","spawn","fairy","jiffy","filmy","stack","chose","sleep","ardor","nanny","niece","woozy","handy","grace","ditto","stank","cream","usual","diode","valor","angle","ninja","muddy","chase","reply","prone","spoil","heart","shade","diner","arson","onion","sleet","dowel","couch","palsy","bowel","smile","evoke","creek","lance","eagle","idiot","siren","built","embed","award","dross","annul","goody","frown","patio","laden","humid","elite","lymph","edify","might","reset","visit","gusto","purse","vapor","crock","write","sunny","loath","chaff","slide","queer","venom","stamp","sorry","still","acorn","aping","pushy","tamer","hater","mania","awoke","brawn","swift","exile","birch","lucky","freer","risky","ghost","plier","lunar","winch","snare","nurse","house","borax","nicer","lurch","exalt","about","savvy","toxin","tunic","pried","inlay","chump","lanky","cress","eater","elude","cycle","kitty","boule","moron","tenet","place","lobby","plush","vigil","index","blink","clung","qualm","croup","clink","juicy","stage","decay","nerve","flier","shaft","crook","clean","china","ridge","vowel","gnome","snuck","icing","spiny","rigor","snail","flown","rabid","prose","thank","poppy","budge","fiber","moldy","dowdy","kneel","track","caddy","quell","dumpy","paler","swore","rebar","scuba","splat","flyer","horny","mason","doing","ozone","amply","molar","ovary","beset","queue","cliff","magic","truce","sport","fritz","edict","twirl","verse","llama","eaten","range","whisk","hovel","rehab","macaw","sigma","spout","verve","sushi","dying","fetid","brain","buddy","thump","scion","candy","chord","basin","march","crowd","arbor","gayly","musky","stain","dally","bless","bravo","stung","title","ruler","kiosk","blond","ennui","layer","fluid","tatty","score","cutie","zebra","barge","matey","bluer","aider","shook","river","privy","betel","frisk","bongo","begun","azure","weave","genie","sound","glove","braid","scope","wryly","rover","assay","ocean","bloom","irate","later","woken","silky","wreck","dwelt","slate","smack","solid","amaze","hazel","wrist","jolly","globe","flint","rouse","civil","vista","relax","cover","alive","beech","jetty","bliss","vocal","often","dolly","eight","joker","since","event","ensue","shunt","diver","poser","worst","sweep","alley","creed","anime","leafy","bosom","dunce","stare","pudgy","waive","choir","stood","spoke","outgo","delay","bilge","ideal","clasp","seize","hotly","laugh","sieve","block","meant","grape","noose","hardy","shied","drawl","daisy","putty","strut","burnt","tulip","crick","idyll","vixen","furor","geeky","cough","naive","shoal","stork","bathe","aunty","check","prime","brass","outer","furry","razor","elect","evict","imply","demur","quota","haven","cavil","swear","crump","dough","gavel","wagon","salon","nudge","harem","pitch","sworn","pupil","excel","stony","cabin","unzip","queen","trout","polyp","earth","storm","until","taper","enter","child","adopt","minor","fatty","husky","brave","filet","slime","glint","tread","steal","regal","guest","every","murky","share","spore","hoist","buxom","inner","otter","dimly","level","sumac","donut","stilt","arena","sheet","scrub","fancy","slimy","pearl","silly","porch","dingo","sepia","amble","shady","bread","friar","reign","dairy","quill","cross","brood","tuber","shear","posit","blank","villa","shank","piggy","freak","which","among","fecal","shell","would","algae","large","rabbi","agony","amuse","bushy","copse","swoon","knife","pouch","ascot","plane","crown","urban","snide","relay","abide","viola","rajah","straw","dilly","crash","amass","third","trick","tutor","woody","blurb","grief","disco","where","sassy","beach","sauna","comic","clued","creep","caste","graze","snuff","frock","gonad","drunk","prong","lurid","steel","halve","buyer","vinyl","utile","smell","adage","worry","tasty","local","trade","finch","ashen","modal","gaunt","clove","enact","adorn","roast","speck","sheik","missy","grunt","snoop","party","touch","mafia","emcee","array","south","vapid","jelly","skulk","angst","tubal","lower","crest","sweat","cyber","adore","tardy","swami","notch","groom","roach","hitch","young","align","ready","frond","strap","puree","realm","venue","swarm","offer","seven","dryer","diary","dryly","drank","acrid","heady","theta","junto","pixie","quoth","bonus","shalt","penne","amend","datum","build","piano","shelf","lodge","suing","rearm","coral","ramen","worth","psalm","infer","overt","mayor","ovoid","glide","usage","poise","randy","chuck","prank","fishy","tooth","ether","drove","idler","swath","stint","while","begat","apply","slang","tarot","radar","credo","aware","canon","shift","timer","bylaw","serum","three","steak","iliac","shirk","blunt","puppy","penal","joist","bunny","shape","beget","wheel","adept","stunt","stole","topaz","chore","fluke","afoot","bloat","bully","dense","caper","sneer","boxer","jumbo","lunge","space","avail","short","slurp","loyal","flirt","pizza","conch","tempo","droop","plate","bible","plunk","afoul","savoy","steep","agile","stake","dwell","knave","beard","arose","motif","smash","broil","glare","shove","baggy","mammy","swamp","along","rugby","wager","quack","squat","snaky","debit","mange","skate","ninth","joust","tramp","spurn","medal","micro","rebel","flank","learn","nadir","maple","comfy","remit","gruff","ester","least","mogul","fetch","cause","oaken","aglow","meaty","gaffe","shyly","racer","prowl","thief","stern","poesy","rocky","tweet","waist","spire","grope","havoc","patsy","truly","forty","deity","uncle","swish","giver","preen","bevel","lemur","draft","slope","annoy","lingo","bleak","ditty","curly","cedar","dirge","grown","horde","drool","shuck","crypt","cumin","stock","gravy","locus","wider","breed","quite","chafe","cache","blimp","deign","fiend","logic","cheap","elide","rigid","false","renal","pence","rowdy","shoot","blaze","envoy","posse","brief","never","abort","mouse","mucky","sulky","fiery","media","trunk","yeast","clear","skunk","scalp","bitty","cider","koala","duvet","segue","creme","super","grill","after","owner","ember","reach","nobly","empty","speed","gipsy","recur","smock","dread","merge","burst","kappa","amity","shaky","hover","carol","snort","synod","faint","haunt","flour","chair","detox","shrew","tense","plied","quark","burly","novel","waxen","stoic","jerky","blitz","beefy","lyric","hussy","towel","quilt","below","bingo","wispy","brash","scone","toast","easel","saucy","value","spice","honor","route","sharp","bawdy","radii","skull","phony","issue","lager","swell","urine","gassy","trial","flora","upper","latch","wight","brick","retry","holly","decal","grass","shack","dogma","mover","defer","sober","optic","crier","vying","nomad","flute","hippo","shark","drier","obese","bugle","tawny","chalk","feast","ruddy","pedal","scarf","cruel","bleat","tidal","slush","semen","windy","dusty","sally","igloo","nerdy","jewel","shone","whale","hymen","abuse","fugue","elbow","crumb","pansy","welsh","syrup","terse","suave","gamut","swung","drake","freed","afire","shirt","grout","oddly","tithe","plaid","dummy","broom","blind","torch","enemy","again","tying","pesky","alter","gazer","noble","ethos","bride","extol","decor","hobby","beast","idiom","utter","these","sixth","alarm","erase","elegy","spunk","piper","scaly","scold","hefty","chick","sooty","canal","whiny","slash","quake","joint","swept","prude","heavy","wield","femme","lasso","maize","shale","screw","spree","smoky","whiff","scent","glade","spent","prism","stoke","riper","orbit","cocoa","guilt","humus","shush","table","smirk","wrong","noisy","alert","shiny","elate","resin","whole","hunch","pixel","polar","hotel","sword","cleat","mango","rumba","puffy","filly","billy","leash","clout","dance","ovate","facet","chili","paint","liner","curio","salty","audio","snake","fable","cloak","navel","spurt","pesto","balmy","flash","unwed","early","churn","weedy","stump","lease","witty","wimpy","spoof","saner","blend","salsa","thick","warty","manic","blare","squib","spoon","probe","crepe","knack","force","debut","order","haste","teeth","agent","widen","icily","slice","ingot","clash","juror","blood","abode","throw","unity","pivot","slept","troop","spare","sewer","parse","morph","cacti","tacky","spool","demon","moody","annex","begin","fuzzy","patch","water","lumpy","admin","omega","limit","tabby","macho","aisle","skiff","basis","plank","verge","botch","crawl","lousy","slain","cubic","raise","wrack","guide","foist","cameo","under","actor","revue","fraud","harpy","scoop","climb","refer","olden","clerk","debar","tally","ethic","cairn","tulle","ghoul","hilly","crude","apart","scale","older","plain","sperm","briny","abbot","rerun","quest","crisp","bound","befit","drawn","suite","itchy","cheer","bagel","guess","broad","axiom","chard","caput","leant","harsh","curse","proud","swing","opine","taste","lupus","gumbo","miner","green","chasm","lipid","topic","armor","brush","crane","mural","abled","habit","bossy","maker","dusky","dizzy","lithe","brook","jazzy","fifty","sense","giant","surly","legal","fatal","flunk","began","prune","small","slant","scoff","torus","ninny","covey","viper","taken","moral","vogue","owing","token","entry","booth","voter","chide","elfin","ebony","neigh","minim","melon","kneed","decoy","voila","ankle","arrow","mushy","tribe","cease","eager","birth","graph","odder","terra","weird","tried","clack","color","rough","weigh","uncut","ladle","strip","craft","minus","dicey","titan","lucid","vicar","dress","ditch","gypsy","pasta","taffy","flame","swoop","aloof","sight","broke","teary","chart","sixty","wordy","sheer","leper","nosey","bulge","savor","clamp","funky","foamy","toxic","brand","plumb","dingy","butte","drill","tripe","bicep","tenor","krill","worse","drama","hyena","think","ratio","cobra","basil","scrum","bused","phone","court","camel","proof","heard","angel","petal","pouty","throb","maybe","fetal","sprig","spine","shout","cadet","macro","dodgy","satyr","rarer","binge","trend","nutty","leapt","amiss","split","myrrh","width","sonar","tower","baron","fever","waver","spark","belie","sloop","expel","smote","baler","above","north","wafer","scant","frill","awash","snack","scowl","frail","drift","limbo","fence","motel","ounce","wreak","revel","talon","prior","knelt","cello","flake","debug","anode","crime","salve","scout","imbue","pinky","stave","vague","chock","fight","video","stone","teach","cleft","frost","prawn","booty","twist","apnea","stiff","plaza","ledge","tweak","board","grant","medic","bacon","cable","brawl","slunk","raspy","forum","drone","women","mucus","boast","toddy","coven","tumor","truer","wrath","stall","steam","axial","purer","daily","trail","niche","mealy","juice","nylon","plump","merry","flail","papal","wheat","berry","cower","erect","brute","leggy","snipe","sinew","skier","penny","jumpy","rally","umbra","scary","modem","gross","avian","greed","satin","tonic","parka","sniff","livid","stark","trump","giddy","reuse","taboo","avoid","quote","devil","liken","gloss","gayer","beret","noise","gland","dealt","sling","rumor","opera","thigh","tonga","flare","wound","white","bulky","etude","horse","circa","paddy","inbox","fizzy","grain","exert","surge","gleam","belle","salvo","crush","fruit","sappy","taker","tract","ovine","spiky","frank","reedy","filth","spasm","heave","mambo","right","clank","trust","lumen","borne","spook","sauce","amber","lathe","carat","corer","dirty","slyly","affix","alloy","taint","sheep","kinky","wooly","mauve","flung","yacht","fried","quail","brunt","grimy","curvy","cagey","rinse","deuce","state","grasp","milky","bison","graft","sandy","baste","flask","hedge","girly","swash","boney","coupe","endow","abhor","welch","blade","tight","geese","miser","mirth","cloud","cabal","leech","close","tenth","pecan","droit","grail","clone","guise","ralph","tango","biddy","smith","mower","payee","serif","drape","fifth","spank","glaze","allot","truck","kayak","virus","testy","tepee","fully","zonal","metro","curry","grand","banjo","axion","bezel","occur","chain","nasal","gooey","filer","brace","allay","pubic","raven","plead","gnash","flaky","munch","dully","eking","thing","slink","hurry","theft","shorn","pygmy","ranch","wring","lemon","shore","mamma","froze","newer","style","moose","antic","drown","vegan","chess","guppy","union","lever","lorry","image","cabby","druid","exact","truth","dopey","spear","cried","chime","crony","stunk","timid","batch","gauge","rotor","crack","curve","latte","witch","bunch","repel","anvil","soapy","meter","broth","madly","dried","scene","known","magma","roost","woman","thong","punch","pasty","downy","knead","whirl","rapid","clang","anger","drive","goofy","email","music","stuff","bleep","rider","mecca","folio","setup","verso","quash","fauna","gummy","happy","newly","fussy","relic","guava","ratty","fudge","femur","chirp","forte","alibi","whine","petty","golly","plait","fleck","felon","gourd","brown","thrum","ficus","stash","decry","wiser","junta","visor","daunt","scree","impel","await","press","whose","turbo","stoop","speak","mangy","eying","inlet","crone","pulse","mossy","staid","hence","pinch","teddy","sully","snore","ripen","snowy","attic","going","leach","mouth","hound","clump","tonal","bigot","peril","piece","blame","haute","spied","undid","intro","basal","shine","gecko","rodeo","guard","steer","loamy","scamp","scram","manly","hello","vaunt","organ","feral","knock","extra","condo","adapt","willy","polka","rayon","skirt","faith","torso","match","mercy","tepid","sleek","riser","twixt","peace","flush","catty","login","eject","roger","rival","untie","refit","aorta","adult","judge","rower","artsy","rural","shave"],Ta=["aahed","aalii","aargh","aarti","abaca","abaci","abacs","abaft","abaka","abamp","aband","abash","abask","abaya","abbas","abbed","abbes","abcee","abeam","abear","abele","abers","abets","abies","abler","ables","ablet","ablow","abmho","abohm","aboil","aboma","aboon","abord","abore","abram","abray","abrim","abrin","abris","absey","absit","abuna","abune","abuts","abuzz","abyes","abysm","acais","acari","accas","accoy","acerb","acers","aceta","achar","ached","aches","achoo","acids","acidy","acing","acini","ackee","acker","acmes","acmic","acned","acnes","acock","acold","acred","acres","acros","acted","actin","acton","acyls","adaws","adays","adbot","addax","added","adder","addio","addle","adeem","adhan","adieu","adios","adits","adman","admen","admix","adobo","adown","adoze","adrad","adred","adsum","aduki","adunc","adust","advew","adyta","adzed","adzes","aecia","aedes","aegis","aeons","aerie","aeros","aesir","afald","afara","afars","afear","aflaj","afore","afrit","afros","agama","agami","agars","agast","agave","agaze","agene","agers","agger","aggie","aggri","aggro","aggry","aghas","agila","agios","agism","agist","agita","aglee","aglet","agley","agloo","aglus","agmas","agoge","agone","agons","agood","agria","agrin","agros","agued","agues","aguna","aguti","aheap","ahent","ahigh","ahind","ahing","ahint","ahold","ahull","ahuru","aidas","aided","aides","aidoi","aidos","aiery","aigas","aight","ailed","aimed","aimer","ainee","ainga","aioli","aired","airer","airns","airth","airts","aitch","aitus","aiver","aiyee","aizle","ajies","ajiva","ajuga","ajwan","akees","akela","akene","aking","akita","akkas","alaap","alack","alamo","aland","alane","alang","alans","alant","alapa","alaps","alary","alate","alays","albas","albee","alcid","alcos","aldea","alder","aldol","aleck","alecs","alefs","aleft","aleph","alews","aleye","alfas","algal","algas","algid","algin","algor","algum","alias","alifs","aline","alist","aliya","alkie","alkos","alkyd","alkyl","allee","allel","allis","allod","allyl","almah","almas","almeh","almes","almud","almug","alods","aloed","aloes","aloha","aloin","aloos","alowe","altho","altos","alula","alums","alure","alvar","alway","amahs","amain","amate","amaut","amban","ambit","ambos","ambry","ameba","ameer","amene","amens","ament","amias","amice","amici","amide","amido","amids","amies","amiga","amigo","amine","amino","amins","amirs","amlas","amman","ammon","ammos","amnia","amnic","amnio","amoks","amole","amort","amour","amove","amowt","amped","ampul","amrit","amuck","amyls","anana","anata","ancho","ancle","ancon","andro","anear","anele","anent","angas","anglo","anigh","anile","anils","anima","animi","anion","anise","anker","ankhs","ankus","anlas","annal","annas","annat","anoas","anole","anomy","ansae","antae","antar","antas","anted","antes","antis","antra","antre","antsy","anura","anyon","apace","apage","apaid","apayd","apays","apeak","apeek","apers","apert","apery","apgar","aphis","apian","apiol","apish","apism","apode","apods","apoop","aport","appal","appay","appel","appro","appui","appuy","apres","apses","apsis","apsos","apted","apter","aquae","aquas","araba","araks","arame","arars","arbas","arced","archi","arcos","arcus","ardeb","ardri","aread","areae","areal","arear","areas","areca","aredd","arede","arefy","areic","arene","arepa","arere","arete","arets","arett","argal","argan","argil","argle","argol","argon","argot","argus","arhat","arias","ariel","ariki","arils","ariot","arish","arked","arled","arles","armed","armer","armet","armil","arnas","arnut","aroba","aroha","aroid","arpas","arpen","arrah","arras","arret","arris","arroz","arsed","arses","arsey","arsis","artal","artel","artic","artis","aruhe","arums","arval","arvee","arvos","aryls","asana","ascon","ascus","asdic","ashed","ashes","ashet","asked","asker","askoi","askos","aspen","asper","aspic","aspie","aspis","aspro","assai","assam","asses","assez","assot","aster","astir","astun","asura","asway","aswim","asyla","ataps","ataxy","atigi","atilt","atimy","atlas","atman","atmas","atmos","atocs","atoke","atoks","atoms","atomy","atony","atopy","atria","atrip","attap","attar","atuas","audad","auger","aught","aulas","aulic","auloi","aulos","aumil","aunes","aunts","aurae","aural","aurar","auras","aurei","aures","auric","auris","aurum","autos","auxin","avale","avant","avast","avels","avens","avers","avgas","avine","avion","avise","aviso","avize","avows","avyze","awarn","awato","awave","aways","awdls","aweel","aweto","awing","awmry","awned","awner","awols","awork","axels","axile","axils","axing","axite","axled","axles","axman","axmen","axoid","axone","axons","ayahs","ayaya","ayelp","aygre","ayins","ayont","ayres","ayrie","azans","azide","azido","azine","azlon","azoic","azole","azons","azote","azoth","azuki","azurn","azury","azygy","azyme","azyms","baaed","baals","babas","babel","babes","babka","baboo","babul","babus","bacca","bacco","baccy","bacha","bachs","backs","baddy","baels","baffs","baffy","bafts","baghs","bagie","bahts","bahus","bahut","bails","bairn","baisa","baith","baits","baiza","baize","bajan","bajra","bajri","bajus","baked","baken","bakes","bakra","balas","balds","baldy","baled","bales","balks","balky","balls","bally","balms","baloo","balsa","balti","balun","balus","bambi","banak","banco","bancs","banda","bandh","bands","bandy","baned","banes","bangs","bania","banks","banns","bants","bantu","banty","banya","bapus","barbe","barbs","barby","barca","barde","bardo","bards","bardy","bared","barer","bares","barfi","barfs","baric","barks","barky","barms","barmy","barns","barny","barps","barra","barre","barro","barry","barye","basan","based","basen","baser","bases","basho","basij","basks","bason","basse","bassi","basso","bassy","basta","basti","basto","basts","bated","bates","baths","batik","batta","batts","battu","bauds","bauks","baulk","baurs","bavin","bawds","bawks","bawls","bawns","bawrs","bawty","bayed","bayer","bayes","bayle","bayts","bazar","bazoo","beads","beaks","beaky","beals","beams","beamy","beano","beans","beany","beare","bears","beath","beats","beaty","beaus","beaut","beaux","bebop","becap","becke","becks","bedad","bedel","bedes","bedew","bedim","bedye","beedi","beefs","beeps","beers","beery","beets","befog","begad","begar","begem","begot","begum","beige","beigy","beins","bekah","belah","belar","belay","belee","belga","bells","belon","belts","bemad","bemas","bemix","bemud","bends","bendy","benes","benet","benga","benis","benne","benni","benny","bento","bents","benty","bepat","beray","beres","bergs","berko","berks","berme","berms","berob","beryl","besat","besaw","besee","beses","besit","besom","besot","besti","bests","betas","beted","betes","beths","betid","beton","betta","betty","bever","bevor","bevue","bevvy","bewet","bewig","bezes","bezil","bezzy","bhais","bhaji","bhang","bhats","bhels","bhoot","bhuna","bhuts","biach","biali","bialy","bibbs","bibes","biccy","bices","bided","bider","bides","bidet","bidis","bidon","bield","biers","biffo","biffs","biffy","bifid","bigae","biggs","biggy","bigha","bight","bigly","bigos","bijou","biked","biker","bikes","bikie","bilbo","bilby","biled","biles","bilgy","bilks","bills","bimah","bimas","bimbo","binal","bindi","binds","biner","bines","bings","bingy","binit","binks","bints","biogs","biont","biota","biped","bipod","birds","birks","birle","birls","biros","birrs","birse","birsy","bises","bisks","bisom","bitch","biter","bites","bitos","bitou","bitsy","bitte","bitts","bivia","bivvy","bizes","bizzo","bizzy","blabs","blads","blady","blaer","blaes","blaff","blags","blahs","blain","blams","blart","blase","blash","blate","blats","blatt","blaud","blawn","blaws","blays","blear","blebs","blech","blees","blent","blert","blest","blets","bleys","blimy","bling","blini","blins","bliny","blips","blist","blite","blits","blive","blobs","blocs","blogs","blook","bloop","blore","blots","blows","blowy","blubs","blude","bluds","bludy","blued","blues","bluet","bluey","bluid","blume","blunk","blurs","blype","boabs","boaks","boars","boart","boats","bobac","bobak","bobas","bobol","bobos","bocca","bocce","bocci","boche","bocks","boded","bodes","bodge","bodhi","bodle","boeps","boets","boeuf","boffo","boffs","bogan","bogey","boggy","bogie","bogle","bogue","bogus","bohea","bohos","boils","boing","boink","boite","boked","bokeh","bokes","bokos","bolar","bolas","bolds","boles","bolix","bolls","bolos","bolts","bolus","bomas","bombe","bombo","bombs","bonce","bonds","boned","boner","bones","bongs","bonie","bonks","bonne","bonny","bonza","bonze","booai","booay","boobs","boody","booed","boofy","boogy","boohs","books","booky","bools","booms","boomy","boong","boons","boord","boors","boose","boots","boppy","borak","boral","boras","borde","bords","bored","boree","borel","borer","bores","borgo","boric","borks","borms","borna","boron","borts","borty","bortz","bosie","bosks","bosky","boson","bosun","botas","botel","botes","bothy","botte","botts","botty","bouge","bouks","boult","bouns","bourd","bourg","bourn","bouse","bousy","bouts","bovid","bowat","bowed","bower","bowes","bowet","bowie","bowls","bowne","bowrs","bowse","boxed","boxen","boxes","boxla","boxty","boyar","boyau","boyed","boyfs","boygs","boyla","boyos","boysy","bozos","braai","brach","brack","bract","brads","braes","brags","brail","braks","braky","brame","brane","brank","brans","brant","brast","brats","brava","bravi","braws","braxy","brays","braza","braze","bream","brede","breds","breem","breer","brees","breid","breis","breme","brens","brent","brere","brers","breve","brews","breys","brier","bries","brigs","briki","briks","brill","brims","brins","brios","brise","briss","brith","brits","britt","brize","broch","brock","brods","brogh","brogs","brome","bromo","bronc","brond","brool","broos","brose","brosy","brows","brugh","bruin","bruit","brule","brume","brung","brusk","brust","bruts","buats","buaze","bubal","bubas","bubba","bubbe","bubby","bubus","buchu","bucko","bucks","bucku","budas","budis","budos","buffa","buffe","buffi","buffo","buffs","buffy","bufos","bufty","buhls","buhrs","buiks","buist","bukes","bulbs","bulgy","bulks","bulla","bulls","bulse","bumbo","bumfs","bumph","bumps","bumpy","bunas","bunce","bunco","bunde","bundh","bunds","bundt","bundu","bundy","bungs","bungy","bunia","bunje","bunjy","bunko","bunks","bunns","bunts","bunty","bunya","buoys","buppy","buran","buras","burbs","burds","buret","burfi","burgh","burgs","burin","burka","burke","burks","burls","burns","buroo","burps","burqa","burro","burrs","burry","bursa","burse","busby","buses","busks","busky","bussu","busti","busts","busty","buteo","butes","butle","butoh","butts","butty","butut","butyl","buzzy","bwana","bwazi","byded","bydes","byked","bykes","byres","byrls","byssi","bytes","byway","caaed","cabas","caber","cabob","caboc","cabre","cacas","cacks","cacky","cadee","cades","cadge","cadgy","cadie","cadis","cadre","caeca","caese","cafes","caffs","caged","cager","cages","cagot","cahow","caids","cains","caird","cajon","cajun","caked","cakes","cakey","calfs","calid","calif","calix","calks","calla","calls","calms","calmy","calos","calpa","calps","calve","calyx","caman","camas","cames","camis","camos","campi","campo","camps","campy","camus","caned","caneh","caner","canes","cangs","canid","canna","canns","canso","canst","canto","cants","canty","capas","caped","capes","capex","caphs","capiz","caple","capon","capos","capot","capri","capul","carap","carbo","carbs","carby","cardi","cards","cardy","cared","carer","cares","caret","carex","carks","carle","carls","carns","carny","carob","carom","caron","carpi","carps","carrs","carse","carta","carte","carts","carvy","casas","casco","cased","cases","casks","casky","casts","casus","cates","cauda","cauks","cauld","cauls","caums","caups","cauri","causa","cavas","caved","cavel","caver","caves","cavie","cawed","cawks","caxon","ceaze","cebid","cecal","cecum","ceded","ceder","cedes","cedis","ceiba","ceili","ceils","celeb","cella","celli","cells","celom","celts","cense","cento","cents","centu","ceorl","cepes","cerci","cered","ceres","cerge","ceria","ceric","cerne","ceroc","ceros","certs","certy","cesse","cesta","cesti","cetes","cetyl","cezve","chace","chack","chaco","chado","chads","chaft","chais","chals","chams","chana","chang","chank","chape","chaps","chapt","chara","chare","chark","charr","chars","chary","chats","chave","chavs","chawk","chaws","chaya","chays","cheep","chefs","cheka","chela","chelp","chemo","chems","chere","chert","cheth","chevy","chews","chewy","chiao","chias","chibs","chica","chich","chico","chics","chiel","chiks","chile","chimb","chimo","chimp","chine","ching","chink","chino","chins","chips","chirk","chirl","chirm","chiro","chirr","chirt","chiru","chits","chive","chivs","chivy","chizz","choco","chocs","chode","chogs","choil","choko","choky","chola","choli","cholo","chomp","chons","choof","chook","choom","choon","chops","chota","chott","chout","choux","chowk","chows","chubs","chufa","chuff","chugs","chums","churl","churr","chuse","chuts","chyle","chyme","chynd","cibol","cided","cides","ciels","ciggy","cilia","cills","cimar","cimex","cinct","cines","cinqs","cions","cippi","circs","cires","cirls","cirri","cisco","cissy","cists","cital","cited","citer","cites","cives","civet","civie","civvy","clach","clade","clads","claes","clags","clame","clams","clans","claps","clapt","claro","clart","clary","clast","clats","claut","clave","clavi","claws","clays","cleck","cleek","cleep","clefs","clegs","cleik","clems","clepe","clept","cleve","clews","clied","clies","clift","clime","cline","clint","clipe","clips","clipt","clits","cloam","clods","cloff","clogs","cloke","clomb","clomp","clonk","clons","cloop","cloot","clops","clote","clots","clour","clous","clows","cloye","cloys","cloze","clubs","clues","cluey","clunk","clype","cnida","coact","coady","coala","coals","coaly","coapt","coarb","coate","coati","coats","cobbs","cobby","cobia","coble","cobza","cocas","cocci","cocco","cocks","cocky","cocos","codas","codec","coded","coden","coder","codes","codex","codon","coeds","coffs","cogie","cogon","cogue","cohab","cohen","cohoe","cohog","cohos","coifs","coign","coils","coins","coirs","coits","coked","cokes","colas","colby","colds","coled","coles","coley","colic","colin","colls","colly","colog","colts","colza","comae","comal","comas","combe","combi","combo","combs","comby","comer","comes","comix","commo","comms","commy","compo","comps","compt","comte","comus","coned","cones","coney","confs","conga","conge","congo","conia","conin","conks","conky","conne","conns","conte","conto","conus","convo","cooch","cooed","cooee","cooer","cooey","coofs","cooks","cooky","cools","cooly","coomb","cooms","coomy","coons","coops","coopt","coost","coots","cooze","copal","copay","coped","copen","coper","copes","coppy","copra","copsy","coqui","coram","corbe","corby","cords","cored","cores","corey","corgi","coria","corks","corky","corms","corni","corno","corns","cornu","corps","corse","corso","cosec","cosed","coses","coset","cosey","cosie","costa","coste","costs","cotan","coted","cotes","coths","cotta","cotts","coude","coups","courb","courd","coure","cours","couta","couth","coved","coves","covin","cowal","cowan","cowed","cowks","cowls","cowps","cowry","coxae","coxal","coxed","coxes","coxib","coyau","coyed","coyer","coypu","cozed","cozen","cozes","cozey","cozie","craal","crabs","crags","craic","craig","crake","crame","crams","crans","crape","craps","crapy","crare","craws","crays","creds","creel","crees","crems","crena","creps","crepy","crewe","crews","crias","cribs","cries","crims","crine","crios","cripe","crips","crise","crith","crits","croci","crocs","croft","crogs","cromb","crome","cronk","crons","crool","croon","crops","crore","crost","crout","crows","croze","cruck","crudo","cruds","crudy","crues","cruet","cruft","crunk","cruor","crura","cruse","crusy","cruve","crwth","cryer","ctene","cubby","cubeb","cubed","cuber","cubes","cubit","cuddy","cuffo","cuffs","cuifs","cuing","cuish","cuits","cukes","culch","culet","culex","culls","cully","culms","culpa","culti","cults","culty","cumec","cundy","cunei","cunit","cunts","cupel","cupid","cuppa","cuppy","curat","curbs","curch","curds","curdy","cured","curer","cures","curet","curfs","curia","curie","curli","curls","curns","curny","currs","cursi","curst","cusec","cushy","cusks","cusps","cuspy","cusso","cusum","cutch","cuter","cutes","cutey","cutin","cutis","cutto","cutty","cutup","cuvee","cuzes","cwtch","cyano","cyans","cycad","cycas","cyclo","cyder","cylix","cymae","cymar","cymas","cymes","cymol","cysts","cytes","cyton","czars","daals","dabba","daces","dacha","dacks","dadah","dadas","dados","daffs","daffy","dagga","daggy","dagos","dahls","daiko","daine","daint","daker","daled","dales","dalis","dalle","dalts","daman","damar","dames","damme","damns","damps","dampy","dancy","dangs","danio","danks","danny","dants","daraf","darbs","darcy","dared","darer","dares","darga","dargs","daric","daris","darks","darky","darns","darre","darts","darzi","dashi","dashy","datal","dated","dater","dates","datos","datto","daube","daubs","dauby","dauds","dault","daurs","dauts","daven","davit","dawah","dawds","dawed","dawen","dawks","dawns","dawts","dayan","daych","daynt","dazed","dazer","dazes","deads","deair","deals","deans","deare","dearn","dears","deary","deash","deave","deaws","deawy","debag","debby","debel","debes","debts","debud","debur","debus","debye","decad","decaf","decan","decko","decks","decos","dedal","deeds","deedy","deely","deems","deens","deeps","deere","deers","deets","deeve","deevs","defat","deffo","defis","defog","degas","degum","degus","deice","deids","deify","deils","deism","deist","deked","dekes","dekko","deled","deles","delfs","delft","delis","dells","delly","delos","delph","delts","deman","demes","demic","demit","demob","demoi","demos","dempt","denar","denay","dench","denes","denet","denis","dents","deoxy","derat","deray","dered","deres","derig","derma","derms","derns","derny","deros","derro","derry","derth","dervs","desex","deshi","desis","desks","desse","devas","devel","devis","devon","devos","devot","dewan","dewar","dewax","dewed","dexes","dexie","dhaba","dhaks","dhals","dhikr","dhobi","dhole","dholl","dhols","dhoti","dhows","dhuti","diact","dials","diane","diazo","dibbs","diced","dicer","dices","dicht","dicks","dicky","dicot","dicta","dicts","dicty","diddy","didie","didos","didst","diebs","diels","diene","diets","diffs","dight","dikas","diked","diker","dikes","dikey","dildo","dilli","dills","dimbo","dimer","dimes","dimps","dinar","dined","dines","dinge","dings","dinic","dinks","dinky","dinna","dinos","dints","diols","diota","dippy","dipso","diram","direr","dirke","dirks","dirls","dirts","disas","disci","discs","dishy","disks","disme","dital","ditas","dited","dites","ditsy","ditts","ditzy","divan","divas","dived","dives","divis","divna","divos","divot","divvy","diwan","dixie","dixit","diyas","dizen","djinn","djins","doabs","doats","dobby","dobes","dobie","dobla","dobra","dobro","docht","docks","docos","docus","doddy","dodos","doeks","doers","doest","doeth","doffs","dogan","doges","dogey","doggo","doggy","dogie","dohyo","doilt","doily","doits","dojos","dolce","dolci","doled","doles","dolia","dolls","dolma","dolor","dolos","dolts","domal","domed","domes","domic","donah","donas","donee","doner","donga","dongs","donko","donna","donne","donny","donsy","doobs","dooce","doody","dooks","doole","dools","dooly","dooms","doomy","doona","doorn","doors","doozy","dopas","doped","doper","dopes","dorad","dorba","dorbs","doree","dores","doric","doris","dorks","dorky","dorms","dormy","dorps","dorrs","dorsa","dorse","dorts","dorty","dosai","dosas","dosed","doseh","doser","doses","dosha","dotal","doted","doter","dotes","dotty","douar","douce","doucs","douks","doula","douma","doums","doups","doura","douse","douts","doved","doven","dover","doves","dovie","dowar","dowds","dowed","dower","dowie","dowle","dowls","dowly","downa","downs","dowps","dowse","dowts","doxed","doxes","doxie","doyen","doyly","dozed","dozer","dozes","drabs","drack","draco","draff","drags","drail","drams","drant","draps","drats","drave","draws","drays","drear","dreck","dreed","dreer","drees","dregs","dreks","drent","drere","drest","dreys","dribs","drice","dries","drily","drips","dript","droid","droil","droke","drole","drome","drony","droob","droog","drook","drops","dropt","drouk","drows","drubs","drugs","drums","drupe","druse","drusy","druxy","dryad","dryas","dsobo","dsomo","duads","duals","duans","duars","dubbo","ducal","ducat","duces","ducks","ducky","ducts","duddy","duded","dudes","duels","duets","duett","duffs","dufus","duing","duits","dukas","duked","dukes","dukka","dulce","dules","dulia","dulls","dulse","dumas","dumbo","dumbs","dumka","dumky","dumps","dunam","dunch","dunes","dungs","dungy","dunks","dunno","dunny","dunsh","dunts","duomi","duomo","duped","duper","dupes","duple","duply","duppy","dural","duras","dured","dures","durgy","durns","duroc","duros","duroy","durra","durrs","durry","durst","durum","durzi","dusks","dusts","duxes","dwaal","dwale","dwalm","dwams","dwang","dwaum","dweeb","dwile","dwine","dyads","dyers","dyked","dykes","dykey","dykon","dynel","dynes","dzhos","eagre","ealed","eales","eaned","eards","eared","earls","earns","earnt","earst","eased","easer","eases","easle","easts","eathe","eaved","eaves","ebbed","ebbet","ebons","ebook","ecads","eched","eches","echos","ecrus","edema","edged","edger","edges","edile","edits","educe","educt","eejit","eensy","eeven","eevns","effed","egads","egers","egest","eggar","egged","egger","egmas","ehing","eider","eidos","eigne","eiked","eikon","eilds","eisel","ejido","ekkas","elain","eland","elans","elchi","eldin","elemi","elfed","eliad","elint","elmen","eloge","elogy","eloin","elops","elpee","elsin","elute","elvan","elven","elver","elves","emacs","embar","embay","embog","embow","embox","embus","emeer","emend","emerg","emery","emeus","emics","emirs","emits","emmas","emmer","emmet","emmew","emmys","emoji","emong","emote","emove","empts","emule","emure","emyde","emyds","enarm","enate","ended","ender","endew","endue","enews","enfix","eniac","enlit","enmew","ennog","enoki","enols","enorm","enows","enrol","ensew","ensky","entia","enure","enurn","envoi","enzym","eorls","eosin","epact","epees","ephah","ephas","ephod","ephor","epics","epode","epopt","epris","eques","equid","erbia","erevs","ergon","ergos","ergot","erhus","erica","erick","erics","ering","erned","ernes","erose","erred","erses","eruct","erugo","eruvs","erven","ervil","escar","escot","esile","eskar","esker","esnes","esses","estoc","estop","estro","etage","etape","etats","etens","ethal","ethne","ethyl","etics","etnas","ettin","ettle","etuis","etwee","etyma","eughs","euked","eupad","euros","eusol","evens","evert","evets","evhoe","evils","evite","evohe","ewers","ewest","ewhow","ewked","exams","exeat","execs","exeem","exeme","exfil","exies","exine","exing","exits","exode","exome","exons","expat","expos","exude","exuls","exurb","eyass","eyers","eyots","eyras","eyres","eyrie","eyrir","ezine","fabby","faced","facer","faces","facia","facta","facts","faddy","faded","fader","fades","fadge","fados","faena","faery","faffs","faffy","faggy","fagin","fagot","faiks","fails","faine","fains","fairs","faked","faker","fakes","fakey","fakie","fakir","falaj","falls","famed","fames","fanal","fands","fanes","fanga","fango","fangs","fanks","fanon","fanos","fanum","faqir","farad","farci","farcy","fards","fared","farer","fares","farle","farls","farms","faros","farro","farse","farts","fasci","fasti","fasts","fated","fates","fatly","fatso","fatwa","faugh","fauld","fauns","faurd","fauts","fauve","favas","favel","faver","faves","favus","fawns","fawny","faxed","faxes","fayed","fayer","fayne","fayre","fazed","fazes","feals","feare","fears","feart","fease","feats","feaze","feces","fecht","fecit","fecks","fedex","feebs","feeds","feels","feens","feers","feese","feeze","fehme","feint","feist","felch","felid","fells","felly","felts","felty","femal","femes","femmy","fends","fendy","fenis","fenks","fenny","fents","feods","feoff","ferer","feres","feria","ferly","fermi","ferms","ferns","ferny","fesse","festa","fests","festy","fetas","feted","fetes","fetor","fetta","fetts","fetwa","feuar","feuds","feued","feyed","feyer","feyly","fezes","fezzy","fiars","fiats","fibro","fices","fiche","fichu","ficin","ficos","fides","fidge","fidos","fiefs","fient","fiere","fiers","fiest","fifed","fifer","fifes","fifis","figgy","figos","fiked","fikes","filar","filch","filed","files","filii","filks","fille","fillo","fills","filmi","films","filos","filum","finca","finds","fined","fines","finis","finks","finny","finos","fiord","fiqhs","fique","fired","firer","fires","firie","firks","firms","firns","firry","firth","fiscs","fisks","fists","fisty","fitch","fitly","fitna","fitte","fitts","fiver","fives","fixed","fixes","fixit","fjeld","flabs","flaff","flags","flaks","flamm","flams","flamy","flane","flans","flaps","flary","flats","flava","flawn","flaws","flawy","flaxy","flays","fleam","fleas","fleek","fleer","flees","flegs","fleme","fleur","flews","flexi","flexo","fleys","flics","flied","flies","flimp","flims","flips","flirs","flisk","flite","flits","flitt","flobs","flocs","floes","flogs","flong","flops","flors","flory","flosh","flota","flote","flows","flubs","flued","flues","fluey","fluky","flump","fluor","flurr","fluty","fluyt","flyby","flype","flyte","foals","foams","foehn","fogey","fogie","fogle","fogou","fohns","foids","foils","foins","folds","foley","folia","folic","folie","folks","folky","fomes","fonda","fonds","fondu","fones","fonly","fonts","foods","foody","fools","foots","footy","foram","forbs","forby","fordo","fords","forel","fores","forex","forks","forky","forme","forms","forts","forza","forze","fossa","fosse","fouat","fouds","fouer","fouet","foule","fouls","fount","fours","fouth","fovea","fowls","fowth","foxed","foxes","foxie","foyle","foyne","frabs","frack","fract","frags","fraim","franc","frape","fraps","frass","frate","frati","frats","fraus","frays","frees","freet","freit","fremd","frena","freon","frere","frets","fribs","frier","fries","frigs","frise","frist","frith","frits","fritt","frize","frizz","froes","frogs","frons","frore","frorn","frory","frosh","frows","frowy","frugs","frump","frush","frust","fryer","fubar","fubby","fubsy","fucks","fucus","fuddy","fudgy","fuels","fuero","fuffs","fuffy","fugal","fuggy","fugie","fugio","fugle","fugly","fugus","fujis","fulls","fumed","fumer","fumes","fumet","fundi","funds","fundy","fungo","fungs","funks","fural","furan","furca","furls","furol","furrs","furth","furze","furzy","fused","fusee","fusel","fuses","fusil","fusks","fusts","fusty","futon","fuzed","fuzee","fuzes","fuzil","fyces","fyked","fykes","fyles","fyrds","fytte","gabba","gabby","gable","gaddi","gades","gadge","gadid","gadis","gadje","gadjo","gadso","gaffs","gaged","gager","gages","gaids","gains","gairs","gaita","gaits","gaitt","gajos","galah","galas","galax","galea","galed","gales","galls","gally","galop","galut","galvo","gamas","gamay","gamba","gambe","gambo","gambs","gamed","games","gamey","gamic","gamin","gamme","gammy","gamps","ganch","gandy","ganef","ganev","gangs","ganja","ganof","gants","gaols","gaped","gaper","gapes","gapos","gappy","garbe","garbo","garbs","garda","gares","garis","garms","garni","garre","garth","garum","gases","gasps","gaspy","gasts","gatch","gated","gater","gates","gaths","gator","gauch","gaucy","gauds","gauje","gault","gaums","gaumy","gaups","gaurs","gauss","gauzy","gavot","gawcy","gawds","gawks","gawps","gawsy","gayal","gazal","gazar","gazed","gazes","gazon","gazoo","geals","geans","geare","gears","geats","gebur","gecks","geeks","geeps","geest","geist","geits","gelds","gelee","gelid","gelly","gelts","gemel","gemma","gemmy","gemot","genal","genas","genes","genet","genic","genii","genip","genny","genoa","genom","genro","gents","genty","genua","genus","geode","geoid","gerah","gerbe","geres","gerle","germs","germy","gerne","gesse","gesso","geste","gests","getas","getup","geums","geyan","geyer","ghast","ghats","ghaut","ghazi","ghees","ghest","ghyll","gibed","gibel","giber","gibes","gibli","gibus","gifts","gigas","gighe","gigot","gigue","gilas","gilds","gilet","gills","gilly","gilpy","gilts","gimel","gimme","gimps","gimpy","ginch","ginge","gings","ginks","ginny","ginzo","gipon","gippo","gippy","girds","girls","girns","giron","giros","girrs","girsh","girts","gismo","gisms","gists","gitch","gites","giust","gived","gives","gizmo","glace","glads","glady","glaik","glair","glams","glans","glary","glaum","glaur","glazy","gleba","glebe","gleby","glede","gleds","gleed","gleek","glees","gleet","gleis","glens","glent","gleys","glial","glias","glibs","gliff","glift","glike","glime","glims","glisk","glits","glitz","gloam","globi","globs","globy","glode","glogg","gloms","gloop","glops","glost","glout","glows","gloze","glued","gluer","glues","gluey","glugs","glume","glums","gluon","glute","gluts","gnarl","gnarr","gnars","gnats","gnawn","gnaws","gnows","goads","goafs","goals","goary","goats","goaty","goban","gobar","gobbi","gobbo","gobby","gobis","gobos","godet","godso","goels","goers","goest","goeth","goety","gofer","goffs","gogga","gogos","goier","gojis","golds","goldy","goles","golfs","golpe","golps","gombo","gomer","gompa","gonch","gonef","gongs","gonia","gonif","gonks","gonna","gonof","gonys","gonzo","gooby","goods","goofs","googs","gooks","gooky","goold","gools","gooly","goons","goony","goops","goopy","goors","goory","goosy","gopak","gopik","goral","goras","gored","gores","goris","gorms","gormy","gorps","gorse","gorsy","gosht","gosse","gotch","goths","gothy","gotta","gouch","gouks","goura","gouts","gouty","gowan","gowds","gowfs","gowks","gowls","gowns","goxes","goyim","goyle","graal","grabs","grads","graff","graip","grama","grame","gramp","grams","grana","grans","grapy","gravs","grays","grebe","grebo","grece","greek","grees","grege","grego","grein","grens","grese","greve","grews","greys","grice","gride","grids","griff","grift","grigs","grike","grins","griot","grips","gript","gripy","grise","grist","grisy","grith","grits","grize","groat","grody","grogs","groks","groma","grone","groof","grosz","grots","grouf","grovy","grows","grrls","grrrl","grubs","grued","grues","grufe","grume","grump","grund","gryce","gryde","gryke","grype","grypt","guaco","guana","guano","guans","guars","gucks","gucky","gudes","guffs","gugas","guids","guimp","guiro","gulag","gular","gulas","gules","gulet","gulfs","gulfy","gulls","gulph","gulps","gulpy","gumma","gummi","gumps","gundy","gunge","gungy","gunks","gunky","gunny","guqin","gurdy","gurge","gurls","gurly","gurns","gurry","gursh","gurus","gushy","gusla","gusle","gusli","gussy","gusts","gutsy","gutta","gutty","guyed","guyle","guyot","guyse","gwine","gyals","gyans","gybed","gybes","gyeld","gymps","gynae","gynie","gynny","gynos","gyoza","gypos","gyppo","gyppy","gyral","gyred","gyres","gyron","gyros","gyrus","gytes","gyved","gyves","haafs","haars","hable","habus","hacek","hacks","hadal","haded","hades","hadji","hadst","haems","haets","haffs","hafiz","hafts","haggs","hahas","haick","haika","haiks","haiku","hails","haily","hains","haint","hairs","haith","hajes","hajis","hajji","hakam","hakas","hakea","hakes","hakim","hakus","halal","haled","haler","hales","halfa","halfs","halid","hallo","halls","halma","halms","halon","halos","halse","halts","halva","halwa","hamal","hamba","hamed","hames","hammy","hamza","hanap","hance","hanch","hands","hangi","hangs","hanks","hanky","hansa","hanse","hants","haole","haoma","hapax","haply","happi","hapus","haram","hards","hared","hares","harim","harks","harls","harms","harns","haros","harps","harts","hashy","hasks","hasps","hasta","hated","hates","hatha","hauds","haufs","haugh","hauld","haulm","hauls","hault","hauns","hause","haver","haves","hawed","hawks","hawms","hawse","hayed","hayer","hayey","hayle","hazan","hazed","hazer","hazes","heads","heald","heals","heame","heaps","heapy","heare","hears","heast","heats","heben","hebes","hecht","hecks","heder","hedgy","heeds","heedy","heels","heeze","hefte","hefts","heids","heigh","heils","heirs","hejab","hejra","heled","heles","helio","hells","helms","helos","helot","helps","helve","hemal","hemes","hemic","hemin","hemps","hempy","hench","hends","henge","henna","henny","henry","hents","hepar","herbs","herby","herds","heres","herls","herma","herms","herns","heros","herry","herse","hertz","herye","hesps","hests","hetes","heths","heuch","heugh","hevea","hewed","hewer","hewgh","hexad","hexed","hexer","hexes","hexyl","heyed","hiant","hicks","hided","hider","hides","hiems","highs","hight","hijab","hijra","hiked","hiker","hikes","hikoi","hilar","hilch","hillo","hills","hilts","hilum","hilus","himbo","hinau","hinds","hings","hinky","hinny","hints","hiois","hiply","hired","hiree","hirer","hires","hissy","hists","hithe","hived","hiver","hives","hizen","hoaed","hoagy","hoars","hoary","hoast","hobos","hocks","hocus","hodad","hodja","hoers","hogan","hogen","hoggs","hoghs","hohed","hoick","hoied","hoiks","hoing","hoise","hokas","hoked","hokes","hokey","hokis","hokku","hokum","holds","holed","holes","holey","holks","holla","hollo","holme","holms","holon","holos","holts","homas","homed","homes","homey","homie","homme","homos","honan","honda","honds","honed","honer","hones","hongi","hongs","honks","honky","hooch","hoods","hoody","hooey","hoofs","hooka","hooks","hooky","hooly","hoons","hoops","hoord","hoors","hoosh","hoots","hooty","hoove","hopak","hoped","hoper","hopes","hoppy","horah","horal","horas","horis","horks","horme","horns","horst","horsy","hosed","hosel","hosen","hoser","hoses","hosey","hosta","hosts","hotch","hoten","hotty","houff","houfs","hough","houri","hours","houts","hovea","hoved","hoven","hoves","howbe","howes","howff","howfs","howks","howls","howre","howso","hoxed","hoxes","hoyas","hoyed","hoyle","hubby","hucks","hudna","hudud","huers","huffs","huffy","huger","huggy","huhus","huias","hulas","hules","hulks","hulky","hullo","hulls","hully","humas","humfs","humic","humps","humpy","hunks","hunts","hurds","hurls","hurly","hurra","hurst","hurts","hushy","husks","husos","hutia","huzza","huzzy","hwyls","hydra","hyens","hygge","hying","hykes","hylas","hyleg","hyles","hylic","hymns","hynde","hyoid","hyped","hypes","hypha","hyphy","hypos","hyrax","hyson","hythe","iambi","iambs","ibrik","icers","iched","iches","ichor","icier","icker","ickle","icons","ictal","ictic","ictus","idant","ideas","idees","ident","idled","idles","idola","idols","idyls","iftar","igapo","igged","iglus","ihram","ikans","ikats","ikons","ileac","ileal","ileum","ileus","iliad","ilial","ilium","iller","illth","imago","imams","imari","imaum","imbar","imbed","imide","imido","imids","imine","imino","immew","immit","immix","imped","impis","impot","impro","imshi","imshy","inapt","inarm","inbye","incel","incle","incog","incus","incut","indew","india","indie","indol","indow","indri","indue","inerm","infix","infos","infra","ingan","ingle","inion","inked","inker","inkle","inned","innit","inorb","inrun","inset","inspo","intel","intil","intis","intra","inula","inure","inurn","inust","invar","inwit","iodic","iodid","iodin","iotas","ippon","irade","irids","iring","irked","iroko","irone","irons","isbas","ishes","isled","isles","isnae","issei","istle","items","ither","ivied","ivies","ixias","ixnay","ixora","ixtle","izard","izars","izzat","jaaps","jabot","jacal","jacks","jacky","jaded","jades","jafas","jaffa","jagas","jager","jaggs","jaggy","jagir","jagra","jails","jaker","jakes","jakey","jalap","jalop","jambe","jambo","jambs","jambu","james","jammy","jamon","janes","janns","janny","janty","japan","japed","japer","japes","jarks","jarls","jarps","jarta","jarul","jasey","jaspe","jasps","jatos","jauks","jaups","javas","javel","jawan","jawed","jaxie","jeans","jeats","jebel","jedis","jeels","jeely","jeeps","jeers","jeeze","jefes","jeffs","jehad","jehus","jelab","jello","jells","jembe","jemmy","jenny","jeons","jerid","jerks","jerry","jesse","jests","jesus","jetes","jeton","jeune","jewed","jewie","jhala","jiaos","jibba","jibbs","jibed","jiber","jibes","jiffs","jiggy","jigot","jihad","jills","jilts","jimmy","jimpy","jingo","jinks","jinne","jinni","jinns","jirds","jirga","jirre","jisms","jived","jiver","jives","jivey","jnana","jobed","jobes","jocko","jocks","jocky","jocos","jodel","joeys","johns","joins","joked","jokes","jokey","jokol","joled","joles","jolls","jolts","jolty","jomon","jomos","jones","jongs","jonty","jooks","joram","jorum","jotas","jotty","jotun","joual","jougs","jouks","joule","jours","jowar","jowed","jowls","jowly","joyed","jubas","jubes","jucos","judas","judgy","judos","jugal","jugum","jujus","juked","jukes","jukus","julep","jumar","jumby","jumps","junco","junks","junky","jupes","jupon","jural","jurat","jurel","jures","justs","jutes","jutty","juves","juvie","kaama","kabab","kabar","kabob","kacha","kacks","kadai","kades","kadis","kafir","kagos","kagus","kahal","kaiak","kaids","kaies","kaifs","kaika","kaiks","kails","kaims","kaing","kains","kakas","kakis","kalam","kales","kalif","kalis","kalpa","kamas","kames","kamik","kamis","kamme","kanae","kanas","kandy","kaneh","kanes","kanga","kangs","kanji","kants","kanzu","kaons","kapas","kaphs","kapok","kapow","kapus","kaput","karas","karat","karks","karns","karoo","karos","karri","karst","karsy","karts","karzy","kasha","kasme","katal","katas","katis","katti","kaugh","kauri","kauru","kaury","kaval","kavas","kawas","kawau","kawed","kayle","kayos","kazis","kazoo","kbars","kebar","kebob","kecks","kedge","kedgy","keech","keefs","keeks","keels","keema","keeno","keens","keeps","keets","keeve","kefir","kehua","keirs","kelep","kelim","kells","kelly","kelps","kelpy","kelts","kelty","kembo","kembs","kemps","kempt","kempy","kenaf","kench","kendo","kenos","kente","kents","kepis","kerbs","kerel","kerfs","kerky","kerma","kerne","kerns","keros","kerry","kerve","kesar","kests","ketas","ketch","ketes","ketol","kevel","kevil","kexes","keyed","keyer","khadi","khafs","khans","khaph","khats","khaya","khazi","kheda","kheth","khets","khoja","khors","khoum","khuds","kiaat","kiack","kiang","kibbe","kibbi","kibei","kibes","kibla","kicks","kicky","kiddo","kiddy","kidel","kidge","kiefs","kiers","kieve","kievs","kight","kikes","kikoi","kiley","kilim","kills","kilns","kilos","kilps","kilts","kilty","kimbo","kinas","kinda","kinds","kindy","kines","kings","kinin","kinks","kinos","kiore","kipes","kippa","kipps","kirby","kirks","kirns","kirri","kisan","kissy","kists","kited","kiter","kites","kithe","kiths","kitul","kivas","kiwis","klang","klaps","klett","klick","klieg","kliks","klong","kloof","kluge","klutz","knags","knaps","knarl","knars","knaur","knawe","knees","knell","knish","knits","knive","knobs","knops","knosp","knots","knout","knowe","knows","knubs","knurl","knurr","knurs","knuts","koans","koaps","koban","kobos","koels","koffs","kofta","kogal","kohas","kohen","kohls","koine","kojis","kokam","kokas","koker","kokra","kokum","kolas","kolos","kombu","konbu","kondo","konks","kooks","kooky","koori","kopek","kophs","kopje","koppa","korai","koras","korat","kores","korma","koros","korun","korus","koses","kotch","kotos","kotow","koura","kraal","krabs","kraft","krais","krait","krang","krans","kranz","kraut","krays","kreep","kreng","krewe","krona","krone","kroon","krubi","krunk","ksars","kubie","kudos","kudus","kudzu","kufis","kugel","kuias","kukri","kukus","kulak","kulan","kulas","kulfi","kumis","kumys","kuris","kurre","kurta","kurus","kusso","kutas","kutch","kutis","kutus","kuzus","kvass","kvell","kwela","kyack","kyaks","kyang","kyars","kyats","kybos","kydst","kyles","kylie","kylin","kylix","kyloe","kynde","kynds","kypes","kyrie","kytes","kythe","laari","labda","labia","labis","labra","laced","lacer","laces","lacet","lacey","lacks","laddy","laded","lader","lades","laers","laevo","lagan","lahal","lahar","laich","laics","laids","laigh","laika","laiks","laird","lairs","lairy","laith","laity","laked","laker","lakes","lakhs","lakin","laksa","laldy","lalls","lamas","lambs","lamby","lamed","lamer","lames","lamia","lammy","lamps","lanai","lanas","lanch","lande","lands","lanes","lanks","lants","lapin","lapis","lapje","larch","lards","lardy","laree","lares","largo","laris","larks","larky","larns","larnt","larum","lased","laser","lases","lassi","lassu","lassy","lasts","latah","lated","laten","latex","lathi","laths","lathy","latke","latus","lauan","lauch","lauds","laufs","laund","laura","laval","lavas","laved","laver","laves","lavra","lavvy","lawed","lawer","lawin","lawks","lawns","lawny","laxed","laxer","laxes","laxly","layed","layin","layup","lazar","lazed","lazes","lazos","lazzi","lazzo","leads","leady","leafs","leaks","leams","leans","leany","leaps","leare","lears","leary","leats","leavy","leaze","leben","leccy","ledes","ledgy","ledum","leear","leeks","leeps","leers","leese","leets","leeze","lefte","lefts","leger","leges","legge","leggo","legit","lehrs","lehua","leirs","leish","leman","lemed","lemel","lemes","lemma","lemme","lends","lenes","lengs","lenis","lenos","lense","lenti","lento","leone","lepid","lepra","lepta","lered","leres","lerps","lesbo","leses","lests","letch","lethe","letup","leuch","leuco","leuds","leugh","levas","levee","leves","levin","levis","lewis","lexes","lexis","lezes","lezza","lezzy","liana","liane","liang","liard","liars","liart","liber","libra","libri","lichi","licht","licit","licks","lidar","lidos","liefs","liens","liers","lieus","lieve","lifer","lifes","lifts","ligan","liger","ligge","ligne","liked","liker","likes","likin","lills","lilos","lilts","liman","limas","limax","limba","limbi","limbs","limby","limed","limen","limes","limey","limma","limns","limos","limpa","limps","linac","linch","linds","lindy","lined","lines","liney","linga","lings","lingy","linin","links","linky","linns","linny","linos","lints","linty","linum","linux","lions","lipas","lipes","lipin","lipos","lippy","liras","lirks","lirot","lisks","lisle","lisps","lists","litai","litas","lited","liter","lites","litho","liths","litre","lived","liven","lives","livor","livre","llano","loach","loads","loafs","loams","loans","loast","loave","lobar","lobed","lobes","lobos","lobus","loche","lochs","locie","locis","locks","locos","locum","loden","lodes","loess","lofts","logan","loges","loggy","logia","logie","logoi","logon","logos","lohan","loids","loins","loipe","loirs","lokes","lolls","lolly","lolog","lomas","lomed","lomes","loner","longa","longe","longs","looby","looed","looey","loofa","loofs","looie","looks","looky","looms","loons","loony","loops","loord","loots","loped","loper","lopes","loppy","loral","loran","lords","lordy","lorel","lores","loric","loris","losed","losel","losen","loses","lossy","lotah","lotas","lotes","lotic","lotos","lotsa","lotta","lotte","lotto","lotus","loued","lough","louie","louis","louma","lound","louns","loupe","loups","loure","lours","loury","louts","lovat","loved","loves","lovey","lovie","lowan","lowed","lowes","lownd","lowne","lowns","lowps","lowry","lowse","lowts","loxed","loxes","lozen","luach","luaus","lubed","lubes","lubra","luces","lucks","lucre","ludes","ludic","ludos","luffa","luffs","luged","luger","luges","lulls","lulus","lumas","lumbi","lumme","lummy","lumps","lunas","lunes","lunet","lungi","lungs","lunks","lunts","lupin","lured","lurer","lures","lurex","lurgi","lurgy","lurks","lurry","lurve","luser","lushy","lusks","lusts","lusus","lutea","luted","luter","lutes","luvvy","luxed","luxer","luxes","lweis","lyams","lyard","lyart","lyase","lycea","lycee","lycra","lymes","lynes","lyres","lysed","lyses","lysin","lysis","lysol","lyssa","lyted","lytes","lythe","lytic","lytta","maaed","maare","maars","mabes","macas","maced","macer","maces","mache","machi","machs","macks","macle","macon","madge","madid","madre","maerl","mafic","mages","maggs","magot","magus","mahoe","mahua","mahwa","maids","maiko","maiks","maile","maill","mails","maims","mains","maire","mairs","maise","maist","makar","makes","makis","makos","malam","malar","malas","malax","males","malic","malik","malis","malls","malms","malmy","malts","malty","malus","malva","malwa","mamas","mamba","mamee","mamey","mamie","manas","manat","mandi","maneb","maned","maneh","manes","manet","mangs","manis","manky","manna","manos","manse","manta","manto","manty","manul","manus","mapau","maqui","marae","marah","maras","marcs","mardy","mares","marge","margs","maria","marid","marka","marks","marle","marls","marly","marms","maron","maror","marra","marri","marse","marts","marvy","masas","mased","maser","mases","mashy","masks","massa","massy","masts","masty","masus","matai","mated","mater","mates","maths","matin","matlo","matte","matts","matza","matzo","mauby","mauds","mauls","maund","mauri","mausy","mauts","mauzy","maven","mavie","mavin","mavis","mawed","mawks","mawky","mawns","mawrs","maxed","maxes","maxis","mayan","mayas","mayed","mayos","mayst","mazed","mazer","mazes","mazey","mazut","mbira","meads","meals","meane","means","meany","meare","mease","meath","meats","mebos","mechs","mecks","medii","medle","meeds","meers","meets","meffs","meins","meint","meiny","meith","mekka","melas","melba","melds","melic","melik","mells","melts","melty","memes","memos","menad","mends","mened","menes","menge","mengs","mensa","mense","mensh","menta","mento","menus","meous","meows","merch","mercs","merde","mered","merel","merer","meres","meril","meris","merks","merle","merls","merse","mesal","mesas","mesel","meses","meshy","mesic","mesne","meson","messy","mesto","meted","metes","metho","meths","metic","metif","metis","metol","metre","meuse","meved","meves","mewed","mewls","meynt","mezes","mezze","mezzo","mhorr","miaou","miaow","miasm","miaul","micas","miche","micht","micks","micky","micos","micra","middy","midgy","midis","miens","mieve","miffs","miffy","mifty","miggs","mihas","mihis","miked","mikes","mikra","mikva","milch","milds","miler","miles","milfs","milia","milko","milks","mille","mills","milor","milos","milpa","milts","milty","miltz","mimed","mimeo","mimer","mimes","mimsy","minae","minar","minas","mincy","minds","mined","mines","minge","mings","mingy","minis","minke","minks","minny","minos","mints","mired","mires","mirex","mirid","mirin","mirks","mirky","mirly","miros","mirvs","mirza","misch","misdo","mises","misgo","misos","missa","mists","misty","mitch","miter","mites","mitis","mitre","mitts","mixed","mixen","mixer","mixes","mixte","mixup","mizen","mizzy","mneme","moans","moats","mobby","mobes","mobey","mobie","moble","mochi","mochs","mochy","mocks","moder","modes","modge","modii","modus","moers","mofos","moggy","mohel","mohos","mohrs","mohua","mohur","moile","moils","moira","moire","moits","mojos","mokes","mokis","mokos","molal","molas","molds","moled","moles","molla","molls","molly","molto","molts","molys","momes","momma","mommy","momus","monad","monal","monas","monde","mondo","moner","mongo","mongs","monic","monie","monks","monos","monte","monty","moobs","mooch","moods","mooed","mooks","moola","mooli","mools","mooly","moong","moons","moony","moops","moors","moory","moots","moove","moped","moper","mopes","mopey","moppy","mopsy","mopus","morae","moras","morat","moray","morel","mores","moria","morne","morns","morra","morro","morse","morts","mosed","moses","mosey","mosks","mosso","moste","mosts","moted","moten","motes","motet","motey","moths","mothy","motis","motte","motts","motty","motus","motza","mouch","moues","mould","mouls","moups","moust","mousy","moved","moves","mowas","mowed","mowra","moxas","moxie","moyas","moyle","moyls","mozed","mozes","mozos","mpret","mucho","mucic","mucid","mucin","mucks","mucor","mucro","mudge","mudir","mudra","muffs","mufti","mugga","muggs","muggy","muhly","muids","muils","muirs","muist","mujik","mulct","muled","mules","muley","mulga","mulie","mulla","mulls","mulse","mulsh","mumms","mumps","mumsy","mumus","munga","munge","mungo","mungs","munis","munts","muntu","muons","muras","mured","mures","murex","murid","murks","murls","murly","murra","murre","murri","murrs","murry","murti","murva","musar","musca","mused","muser","muses","muset","musha","musit","musks","musos","musse","mussy","musth","musts","mutch","muted","muter","mutes","mutha","mutis","muton","mutts","muxed","muxes","muzak","muzzy","mvule","myall","mylar","mynah","mynas","myoid","myoma","myope","myops","myopy","mysid","mythi","myths","mythy","myxos","mzees","naams","naans","nabes","nabis","nabks","nabla","nabob","nache","nacho","nacre","nadas","naeve","naevi","naffs","nagas","naggy","nagor","nahal","naiad","naifs","naiks","nails","naira","nairu","naked","naker","nakfa","nalas","naled","nalla","named","namer","names","namma","namus","nanas","nance","nancy","nandu","nanna","nanos","nanua","napas","naped","napes","napoo","nappa","nappe","nappy","naras","narco","narcs","nards","nares","naric","naris","narks","narky","narre","nashi","natch","nates","natis","natty","nauch","naunt","navar","naves","navew","navvy","nawab","nazes","nazir","nazis","nduja","neafe","neals","neaps","nears","neath","neats","nebek","nebel","necks","neddy","needs","neeld","neele","neemb","neems","neeps","neese","neeze","negro","negus","neifs","neist","neive","nelis","nelly","nemas","nemns","nempt","nenes","neons","neper","nepit","neral","nerds","nerka","nerks","nerol","nerts","nertz","nervy","nests","netes","netop","netts","netty","neuks","neume","neums","nevel","neves","nevus","newbs","newed","newel","newie","newsy","newts","nexts","nexus","ngaio","ngana","ngati","ngoma","ngwee","nicad","nicht","nicks","nicol","nidal","nided","nides","nidor","nidus","niefs","nieve","nifes","niffs","niffy","nifty","niger","nighs","nihil","nikab","nikah","nikau","nills","nimbi","nimbs","nimps","niner","nines","ninon","nipas","nippy","niqab","nirls","nirly","nisei","nisse","nisus","niter","nites","nitid","niton","nitre","nitro","nitry","nitty","nival","nixed","nixer","nixes","nixie","nizam","nkosi","noahs","nobby","nocks","nodal","noddy","nodes","nodus","noels","noggs","nohow","noils","noily","noint","noirs","noles","nolls","nolos","nomas","nomen","nomes","nomic","nomoi","nomos","nonas","nonce","nones","nonet","nongs","nonis","nonny","nonyl","noobs","nooit","nooks","nooky","noons","noops","nopal","noria","noris","norks","norma","norms","nosed","noser","noses","notal","noted","noter","notes","notum","nould","noule","nouls","nouns","nouny","noups","novae","novas","novum","noway","nowed","nowls","nowts","nowty","noxal","noxes","noyau","noyed","noyes","nubby","nubia","nucha","nuddy","nuder","nudes","nudie","nudzh","nuffs","nugae","nuked","nukes","nulla","nulls","numbs","numen","nummy","nunny","nurds","nurdy","nurls","nurrs","nutso","nutsy","nyaff","nyala","nying","nyssa","oaked","oaker","oakum","oared","oases","oasis","oasts","oaten","oater","oaths","oaves","obang","obeah","obeli","obeys","obias","obied","obiit","obits","objet","oboes","obole","oboli","obols","occam","ocher","oches","ochre","ochry","ocker","ocrea","octad","octan","octas","octyl","oculi","odahs","odals","odeon","odeum","odism","odist","odium","odors","odour","odyle","odyls","ofays","offed","offie","oflag","ofter","ogams","ogeed","ogees","oggin","ogham","ogive","ogled","ogler","ogles","ogmic","ogres","ohias","ohing","ohmic","ohone","oidia","oiled","oiler","oinks","oints","ojime","okapi","okays","okehs","okras","oktas","oldie","oleic","olein","olent","oleos","oleum","olios","ollas","ollav","oller","ollie","ology","olpae","olpes","omasa","omber","ombus","omens","omers","omits","omlah","omovs","omrah","oncer","onces","oncet","oncus","onely","oners","onery","onium","onkus","onlay","onned","ontic","oobit","oohed","oomph","oonts","ooped","oorie","ooses","ootid","oozed","oozes","opahs","opals","opens","opepe","oping","oppos","opsin","opted","opter","orach","oracy","orals","orang","orant","orate","orbed","orcas","orcin","ordos","oread","orfes","orgia","orgic","orgue","oribi","oriel","orixa","orles","orlon","orlop","ormer","ornis","orpin","orris","ortho","orval","orzos","oscar","oshac","osier","osmic","osmol","ossia","ostia","otaku","otary","ottar","ottos","oubit","oucht","ouens","ouija","oulks","oumas","oundy","oupas","ouped","ouphe","ouphs","ourie","ousel","ousts","outby","outed","outre","outro","outta","ouzel","ouzos","ovals","ovels","ovens","overs","ovist","ovoli","ovolo","ovule","owche","owies","owled","owler","owlet","owned","owres","owrie","owsen","oxbow","oxers","oxeye","oxids","oxies","oxime","oxims","oxlip","oxter","oyers","ozeki","ozzie","paals","paans","pacas","paced","pacer","paces","pacey","pacha","packs","pacos","pacta","pacts","padis","padle","padma","padre","padri","paean","paedo","paeon","paged","pager","pages","pagle","pagod","pagri","paiks","pails","pains","paire","pairs","paisa","paise","pakka","palas","palay","palea","paled","pales","palet","palis","palki","palla","palls","pally","palms","palmy","palpi","palps","palsa","pampa","panax","pance","panda","pands","pandy","paned","panes","panga","pangs","panim","panko","panne","panni","panto","pants","panty","paoli","paolo","papas","papaw","papes","pappi","pappy","parae","paras","parch","pardi","pards","pardy","pared","paren","pareo","pares","pareu","parev","parge","pargo","paris","parki","parks","parky","parle","parly","parma","parol","parps","parra","parrs","parti","parts","parve","parvo","paseo","pases","pasha","pashm","paska","paspy","passe","pasts","pated","paten","pater","pates","paths","patin","patka","patly","patte","patus","pauas","pauls","pavan","paved","paven","paver","paves","pavid","pavin","pavis","pawas","pawaw","pawed","pawer","pawks","pawky","pawls","pawns","paxes","payed","payor","paysd","peage","peags","peaks","peaky","peals","peans","peare","pears","peart","pease","peats","peaty","peavy","peaze","pebas","pechs","pecke","pecks","pecky","pedes","pedis","pedro","peece","peeks","peels","peens","peeoy","peepe","peeps","peers","peery","peeve","peggy","peghs","peins","peise","peize","pekan","pekes","pekin","pekoe","pelas","pelau","peles","pelfs","pells","pelma","pelon","pelta","pelts","pends","pendu","pened","penes","pengo","penie","penis","penks","penna","penni","pents","peons","peony","pepla","pepos","peppy","pepsi","perai","perce","percs","perdu","perdy","perea","peres","peris","perks","perms","perns","perog","perps","perry","perse","perst","perts","perve","pervo","pervs","pervy","pesos","pests","pesty","petar","peter","petit","petre","petri","petti","petto","pewee","pewit","peyse","phage","phang","phare","pharm","pheer","phene","pheon","phese","phial","phish","phizz","phlox","phoca","phono","phons","phots","phpht","phuts","phyla","phyle","piani","pians","pibal","pical","picas","piccy","picks","picot","picra","picul","piend","piers","piert","pieta","piets","piezo","pight","pigmy","piing","pikas","pikau","piked","piker","pikes","pikey","pikis","pikul","pilae","pilaf","pilao","pilar","pilau","pilaw","pilch","pilea","piled","pilei","piler","piles","pilis","pills","pilow","pilum","pilus","pimas","pimps","pinas","pined","pines","pingo","pings","pinko","pinks","pinna","pinny","pinon","pinot","pinta","pints","pinup","pions","piony","pious","pioye","pioys","pipal","pipas","piped","pipes","pipet","pipis","pipit","pippy","pipul","pirai","pirls","pirns","pirog","pisco","pises","pisky","pisos","pissy","piste","pitas","piths","piton","pitot","pitta","piums","pixes","pized","pizes","plaas","plack","plage","plans","plaps","plash","plasm","plast","plats","platt","platy","playa","plays","pleas","plebe","plebs","plena","pleon","plesh","plews","plica","plies","plims","pling","plink","ploat","plods","plong","plonk","plook","plops","plots","plotz","plouk","plows","ploye","ploys","plues","pluff","plugs","plums","plumy","pluot","pluto","plyer","poach","poaka","poake","poboy","pocks","pocky","podal","poddy","podex","podge","podgy","podia","poems","poeps","poets","pogey","pogge","pogos","pohed","poilu","poind","pokal","poked","pokes","pokey","pokie","poled","poler","poles","poley","polio","polis","polje","polks","polls","polly","polos","polts","polys","pombe","pomes","pommy","pomos","pomps","ponce","poncy","ponds","pones","poney","ponga","pongo","pongs","pongy","ponks","ponts","ponty","ponzu","poods","pooed","poofs","poofy","poohs","pooja","pooka","pooks","pools","poons","poops","poopy","poori","poort","poots","poove","poovy","popes","poppa","popsy","porae","poral","pored","porer","pores","porge","porgy","porin","porks","porky","porno","porns","porny","porta","ports","porty","posed","poses","posey","posho","posts","potae","potch","poted","potes","potin","potoo","potsy","potto","potts","potty","pouff","poufs","pouke","pouks","poule","poulp","poult","poupe","poupt","pours","pouts","powan","powin","pownd","powns","powny","powre","poxed","poxes","poynt","poyou","poyse","pozzy","praam","prads","prahu","prams","prana","prang","praos","prase","prate","prats","pratt","praty","praus","prays","predy","preed","prees","preif","prems","premy","prent","preon","preop","preps","presa","prese","prest","preve","prexy","preys","prial","pricy","prief","prier","pries","prigs","prill","prima","primi","primp","prims","primy","prink","prion","prise","priss","proas","probs","prods","proem","profs","progs","proin","proke","prole","proll","promo","proms","pronk","props","prore","proso","pross","prost","prosy","proto","proul","prows","proyn","prunt","pruta","pryer","pryse","pseud","pshaw","psion","psoae","psoai","psoas","psora","psych","psyop","pubco","pubes","pubis","pucan","pucer","puces","pucka","pucks","puddy","pudge","pudic","pudor","pudsy","pudus","puers","puffa","puffs","puggy","pugil","puhas","pujah","pujas","pukas","puked","puker","pukes","pukey","pukka","pukus","pulao","pulas","puled","puler","pules","pulik","pulis","pulka","pulks","pulli","pulls","pully","pulmo","pulps","pulus","pumas","pumie","pumps","punas","punce","punga","pungs","punji","punka","punks","punky","punny","punto","punts","punty","pupae","pupas","pupus","purda","pured","pures","purin","puris","purls","purpy","purrs","pursy","purty","puses","pusle","pussy","putid","puton","putti","putto","putts","puzel","pwned","pyats","pyets","pygal","pyins","pylon","pyned","pynes","pyoid","pyots","pyral","pyran","pyres","pyrex","pyric","pyros","pyxed","pyxes","pyxie","pyxis","pzazz","qadis","qaids","qajaq","qanat","qapik","qibla","qophs","qorma","quads","quaff","quags","quair","quais","quaky","quale","quant","quare","quass","quate","quats","quayd","quays","qubit","quean","queme","quena","quern","queyn","queys","quich","quids","quiff","quims","quina","quine","quino","quins","quint","quipo","quips","quipu","quire","quirt","quist","quits","quoad","quods","quoif","quoin","quoit","quoll","quonk","quops","qursh","quyte","rabat","rabic","rabis","raced","races","rache","racks","racon","radge","radix","radon","raffs","rafts","ragas","ragde","raged","ragee","rager","rages","ragga","raggs","raggy","ragis","ragus","rahed","rahui","raias","raids","raiks","raile","rails","raine","rains","raird","raita","raits","rajas","rajes","raked","rakee","raker","rakes","rakia","rakis","rakus","rales","ramal","ramee","ramet","ramie","ramin","ramis","rammy","ramps","ramus","ranas","rance","rands","ranee","ranga","rangi","rangs","rangy","ranid","ranis","ranke","ranks","rants","raped","raper","rapes","raphe","rappe","rared","raree","rares","rarks","rased","raser","rases","rasps","rasse","rasta","ratal","ratan","ratas","ratch","rated","ratel","rater","rates","ratha","rathe","raths","ratoo","ratos","ratus","rauns","raupo","raved","ravel","raver","raves","ravey","ravin","rawer","rawin","rawly","rawns","raxed","raxes","rayah","rayas","rayed","rayle","rayne","razed","razee","razer","razes","razoo","readd","reads","reais","reaks","realo","reals","reame","reams","reamy","reans","reaps","rears","reast","reata","reate","reave","rebbe","rebec","rebid","rebit","rebop","rebuy","recal","recce","recco","reccy","recit","recks","recon","recta","recti","recto","redan","redds","reddy","reded","redes","redia","redid","redip","redly","redon","redos","redox","redry","redub","redux","redye","reech","reede","reeds","reefs","reefy","reeks","reeky","reels","reens","reest","reeve","refed","refel","reffo","refis","refix","refly","refry","regar","reges","reggo","regie","regma","regna","regos","regur","rehem","reifs","reify","reiki","reiks","reink","reins","reird","reist","reive","rejig","rejon","reked","rekes","rekey","relet","relie","relit","rello","reman","remap","remen","remet","remex","remix","renay","rends","reney","renga","renig","renin","renne","renos","rente","rents","reoil","reorg","repeg","repin","repla","repos","repot","repps","repro","reran","rerig","resat","resaw","resay","resee","reses","resew","resid","resit","resod","resow","resto","rests","resty","resus","retag","retax","retem","retia","retie","retox","revet","revie","rewan","rewax","rewed","rewet","rewin","rewon","rewth","rexes","rezes","rheas","rheme","rheum","rhies","rhime","rhine","rhody","rhomb","rhone","rhumb","rhyne","rhyta","riads","rials","riant","riata","ribas","ribby","ribes","riced","ricer","rices","ricey","richt","ricin","ricks","rides","ridgy","ridic","riels","riems","rieve","rifer","riffs","rifte","rifts","rifty","riggs","rigol","riled","riles","riley","rille","rills","rimae","rimed","rimer","rimes","rimus","rinds","rindy","rines","rings","rinks","rioja","riots","riped","ripes","ripps","rises","rishi","risks","risps","risus","rites","ritts","ritzy","rivas","rived","rivel","riven","rives","riyal","rizas","roads","roams","roans","roars","roary","roate","robed","robes","roble","rocks","roded","rodes","roguy","rohes","roids","roils","roily","roins","roist","rojak","rojis","roked","roker","rokes","rolag","roles","rolfs","rolls","romal","roman","romeo","romps","ronde","rondo","roneo","rones","ronin","ronne","ronte","ronts","roods","roofs","roofy","rooks","rooky","rooms","roons","roops","roopy","roosa","roose","roots","rooty","roped","roper","ropes","ropey","roque","roral","rores","roric","rorid","rorie","rorts","rorty","rosed","roses","roset","roshi","rosin","rosit","rosti","rosts","rotal","rotan","rotas","rotch","roted","rotes","rotis","rotls","roton","rotos","rotte","rouen","roues","roule","rouls","roums","roups","roupy","roust","routh","routs","roved","roven","roves","rowan","rowed","rowel","rowen","rowie","rowme","rownd","rowth","rowts","royne","royst","rozet","rozit","ruana","rubai","rubby","rubel","rubes","rubin","ruble","rubli","rubus","ruche","rucks","rudas","rudds","rudes","rudie","rudis","rueda","ruers","ruffe","ruffs","rugae","rugal","ruggy","ruing","ruins","rukhs","ruled","rules","rumal","rumbo","rumen","rumes","rumly","rummy","rumpo","rumps","rumpy","runch","runds","runed","runes","rungs","runic","runny","runts","runty","rupia","rurps","rurus","rusas","ruses","rushy","rusks","rusma","russe","rusts","ruths","rutin","rutty","ryals","rybat","ryked","rykes","rymme","rynds","ryots","ryper","saags","sabal","sabed","saber","sabes","sabha","sabin","sabir","sable","sabot","sabra","sabre","sacks","sacra","saddo","sades","sadhe","sadhu","sadis","sados","sadza","safed","safes","sagas","sager","sages","saggy","sagos","sagum","saheb","sahib","saice","saick","saics","saids","saiga","sails","saims","saine","sains","sairs","saist","saith","sajou","sakai","saker","sakes","sakia","sakis","sakti","salal","salat","salep","sales","salet","salic","salix","salle","salmi","salol","salop","salpa","salps","salse","salto","salts","salue","salut","saman","samas","samba","sambo","samek","samel","samen","sames","samey","samfu","sammy","sampi","samps","sands","saned","sanes","sanga","sangh","sango","sangs","sanko","sansa","santo","sants","saola","sapan","sapid","sapor","saran","sards","sared","saree","sarge","sargo","sarin","saris","sarks","sarky","sarod","saros","sarus","saser","sasin","sasse","satai","satay","sated","satem","sates","satis","sauba","sauch","saugh","sauls","sault","saunt","saury","sauts","saved","saver","saves","savey","savin","sawah","sawed","sawer","saxes","sayed","sayer","sayid","sayne","sayon","sayst","sazes","scabs","scads","scaff","scags","scail","scala","scall","scams","scand","scans","scapa","scape","scapi","scarp","scars","scart","scath","scats","scatt","scaud","scaup","scaur","scaws","sceat","scena","scend","schav","schmo","schul","schwa","sclim","scody","scogs","scoog","scoot","scopa","scops","scots","scoug","scoup","scowp","scows","scrab","scrae","scrag","scran","scrat","scraw","scray","scrim","scrip","scrob","scrod","scrog","scrow","scudi","scudo","scuds","scuff","scuft","scugs","sculk","scull","sculp","sculs","scums","scups","scurf","scurs","scuse","scuta","scute","scuts","scuzz","scyes","sdayn","sdein","seals","seame","seams","seamy","seans","seare","sears","sease","seats","seaze","sebum","secco","sechs","sects","seder","sedes","sedge","sedgy","sedum","seeds","seeks","seeld","seels","seely","seems","seeps","seepy","seers","sefer","segar","segni","segno","segol","segos","sehri","seifs","seils","seine","seirs","seise","seism","seity","seiza","sekos","sekts","selah","seles","selfs","sella","selle","sells","selva","semee","semes","semie","semis","senas","sends","senes","sengi","senna","senor","sensa","sensi","sente","senti","sents","senvy","senza","sepad","sepal","sepic","sepoy","septa","septs","serac","serai","seral","sered","serer","seres","serfs","serge","seric","serin","serks","seron","serow","serra","serre","serrs","serry","servo","sesey","sessa","setae","setal","seton","setts","sewan","sewar","sewed","sewel","sewen","sewin","sexed","sexer","sexes","sexto","sexts","seyen","shads","shags","shahs","shako","shakt","shalm","shaly","shama","shams","shand","shans","shaps","sharn","shash","shaul","shawm","shawn","shaws","shaya","shays","shchi","sheaf","sheal","sheas","sheds","sheel","shend","shent","sheol","sherd","shere","shero","shets","sheva","shewn","shews","shiai","shiel","shier","shies","shill","shily","shims","shins","ships","shirr","shirs","shish","shiso","shist","shite","shits","shiur","shiva","shive","shivs","shlep","shlub","shmek","shmoe","shoat","shoed","shoer","shoes","shogi","shogs","shoji","shojo","shola","shool","shoon","shoos","shope","shops","shorl","shote","shots","shott","showd","shows","shoyu","shred","shris","shrow","shtik","shtum","shtup","shule","shuln","shuls","shuns","shura","shute","shuts","shwas","shyer","sials","sibbs","sibyl","sices","sicht","sicko","sicks","sicky","sidas","sided","sider","sides","sidha","sidhe","sidle","sield","siens","sient","sieth","sieur","sifts","sighs","sigil","sigla","signa","signs","sijos","sikas","siker","sikes","silds","siled","silen","siler","siles","silex","silks","sills","silos","silts","silty","silva","simar","simas","simba","simis","simps","simul","sinds","sined","sines","sings","sinhs","sinks","sinky","sinus","siped","sipes","sippy","sired","siree","sires","sirih","siris","siroc","sirra","sirup","sisal","sises","sista","sists","sitar","sited","sites","sithe","sitka","situp","situs","siver","sixer","sixes","sixmo","sixte","sizar","sized","sizel","sizer","sizes","skags","skail","skald","skank","skart","skats","skatt","skaws","skean","skear","skeds","skeed","skeef","skeen","skeer","skees","skeet","skegg","skegs","skein","skelf","skell","skelm","skelp","skene","skens","skeos","skeps","skers","skets","skews","skids","skied","skies","skiey","skimo","skims","skink","skins","skint","skios","skips","skirl","skirr","skite","skits","skive","skivy","sklim","skoal","skody","skoff","skogs","skols","skool","skort","skosh","skran","skrik","skuas","skugs","skyed","skyer","skyey","skyfs","skyre","skyrs","skyte","slabs","slade","slaes","slags","slaid","slake","slams","slane","slank","slaps","slart","slats","slaty","slaws","slays","slebs","sleds","sleer","slews","sleys","slier","slily","slims","slipe","slips","slipt","slish","slits","slive","sloan","slobs","sloes","slogs","sloid","slojd","slomo","sloom","sloot","slops","slopy","slorm","slots","slove","slows","sloyd","slubb","slubs","slued","slues","sluff","slugs","sluit","slums","slurb","slurs","sluse","sluts","slyer","slype","smaak","smaik","smalm","smalt","smarm","smaze","smeek","smees","smeik","smeke","smerk","smews","smirr","smirs","smits","smogs","smoko","smolt","smoor","smoot","smore","smorg","smout","smowt","smugs","smurs","smush","smuts","snabs","snafu","snags","snaps","snarf","snark","snars","snary","snash","snath","snaws","snead","sneap","snebs","sneck","sneds","sneed","snees","snell","snibs","snick","snies","snift","snigs","snips","snipy","snirt","snits","snobs","snods","snoek","snoep","snogs","snoke","snood","snook","snool","snoot","snots","snowk","snows","snubs","snugs","snush","snyes","soaks","soaps","soare","soars","soave","sobas","socas","soces","socko","socks","socle","sodas","soddy","sodic","sodom","sofar","sofas","softa","softs","softy","soger","sohur","soils","soily","sojas","sojus","sokah","soken","sokes","sokol","solah","solan","solas","solde","soldi","soldo","solds","soled","solei","soler","soles","solon","solos","solum","solus","soman","somas","sonce","sonde","sones","songs","sonly","sonne","sonny","sonse","sonsy","sooey","sooks","sooky","soole","sools","sooms","soops","soote","soots","sophs","sophy","sopor","soppy","sopra","soral","soras","sorbo","sorbs","sorda","sordo","sords","sored","soree","sorel","sorer","sores","sorex","sorgo","sorns","sorra","sorta","sorts","sorus","soths","sotol","souce","souct","sough","souks","souls","soums","soups","soupy","sours","souse","souts","sowar","sowce","sowed","sowff","sowfs","sowle","sowls","sowms","sownd","sowne","sowps","sowse","sowth","soyas","soyle","soyuz","sozin","spacy","spado","spaed","spaer","spaes","spags","spahi","spail","spain","spait","spake","spald","spale","spall","spalt","spams","spane","spang","spans","spard","spars","spart","spate","spats","spaul","spawl","spaws","spayd","spays","spaza","spazz","speal","spean","speat","specs","spect","speel","speer","speil","speir","speks","speld","spelk","speos","spets","speug","spews","spewy","spial","spica","spick","spics","spide","spier","spies","spiff","spifs","spiks","spile","spims","spina","spink","spins","spirt","spiry","spits","spitz","spivs","splay","splog","spode","spods","spoom","spoor","spoot","spork","sposh","spots","sprad","sprag","sprat","spred","sprew","sprit","sprod","sprog","sprue","sprug","spuds","spued","spuer","spues","spugs","spule","spume","spumy","spurs","sputa","spyal","spyre","squab","squaw","squeg","squid","squit","squiz","stabs","stade","stags","stagy","staig","stane","stang","staph","staps","starn","starr","stars","stats","staun","staws","stays","stean","stear","stedd","stede","steds","steek","steem","steen","steil","stela","stele","stell","steme","stems","stend","steno","stens","stent","steps","stept","stere","stets","stews","stewy","steys","stich","stied","sties","stilb","stile","stime","stims","stimy","stipa","stipe","stire","stirk","stirp","stirs","stive","stivy","stoae","stoai","stoas","stoat","stobs","stoep","stogy","stoit","stoln","stoma","stond","stong","stonk","stonn","stook","stoor","stope","stops","stopt","stoss","stots","stott","stoun","stoup","stour","stown","stowp","stows","strad","strae","strag","strak","strep","strew","stria","strig","strim","strop","strow","stroy","strum","stubs","stude","studs","stull","stulm","stumm","stums","stuns","stupa","stupe","sture","sturt","styed","styes","styli","stylo","styme","stymy","styre","styte","subah","subas","subby","suber","subha","succi","sucks","sucky","sucre","sudds","sudor","sudsy","suede","suent","suers","suete","suets","suety","sugan","sughs","sugos","suhur","suids","suint","suits","sujee","sukhs","sukuk","sulci","sulfa","sulfo","sulks","sulph","sulus","sumis","summa","sumos","sumph","sumps","sunis","sunks","sunna","sunns","sunup","supes","supra","surah","sural","suras","surat","surds","sured","sures","surfs","surfy","surgy","surra","sused","suses","susus","sutor","sutra","sutta","swabs","swack","swads","swage","swags","swail","swain","swale","swaly","swamy","swang","swank","swans","swaps","swapt","sward","sware","swarf","swart","swats","swayl","sways","sweal","swede","sweed","sweel","sweer","swees","sweir","swelt","swerf","sweys","swies","swigs","swile","swims","swink","swipe","swire","swiss","swith","swits","swive","swizz","swobs","swole","swoln","swops","swopt","swots","swoun","sybbe","sybil","syboe","sybow","sycee","syces","sycon","syens","syker","sykes","sylis","sylph","sylva","symar","synch","syncs","synds","syned","synes","synth","syped","sypes","syphs","syrah","syren","sysop","sythe","syver","taals","taata","taber","tabes","tabid","tabis","tabla","tabor","tabun","tabus","tacan","taces","tacet","tache","tacho","tachs","tacks","tacos","tacts","taels","tafia","taggy","tagma","tahas","tahrs","taiga","taigs","taiko","tails","tains","taira","taish","taits","tajes","takas","takes","takhi","takin","takis","takky","talak","talaq","talar","talas","talcs","talcy","talea","taler","tales","talks","talky","talls","talma","talpa","taluk","talus","tamal","tamed","tames","tamin","tamis","tammy","tamps","tanas","tanga","tangi","tangs","tanhs","tanka","tanks","tanky","tanna","tansy","tanti","tanto","tanty","tapas","taped","tapen","tapes","tapet","tapis","tappa","tapus","taras","tardo","tared","tares","targa","targe","tarns","taroc","tarok","taros","tarps","tarre","tarry","tarsi","tarts","tarty","tasar","tased","taser","tases","tasks","tassa","tasse","tasso","tatar","tater","tates","taths","tatie","tatou","tatts","tatus","taube","tauld","tauon","taupe","tauts","tavah","tavas","taver","tawai","tawas","tawed","tawer","tawie","tawse","tawts","taxed","taxer","taxes","taxis","taxol","taxon","taxor","taxus","tayra","tazza","tazze","teade","teads","teaed","teaks","teals","teams","tears","teats","teaze","techs","techy","tecta","teels","teems","teend","teene","teens","teeny","teers","teffs","teggs","tegua","tegus","tehrs","teiid","teils","teind","teins","telae","telco","teles","telex","telia","telic","tells","telly","teloi","telos","temed","temes","tempi","temps","tempt","temse","tench","tends","tendu","tenes","tenge","tenia","tenne","tenno","tenny","tenon","tents","tenty","tenue","tepal","tepas","tepoy","terai","teras","terce","terek","teres","terfe","terfs","terga","terms","terne","terns","terry","terts","tesla","testa","teste","tests","tetes","teths","tetra","tetri","teuch","teugh","tewed","tewel","tewit","texas","texes","texts","thack","thagi","thaim","thale","thali","thana","thane","thang","thans","thanx","tharm","thars","thaws","thawy","thebe","theca","theed","theek","thees","thegn","theic","thein","thelf","thema","thens","theow","therm","thesp","thete","thews","thewy","thigs","thilk","thill","thine","thins","thiol","thirl","thoft","thole","tholi","thoro","thorp","thous","thowl","thrae","thraw","thrid","thrip","throe","thuds","thugs","thuja","thunk","thurl","thuya","thymi","thymy","tians","tiars","tical","ticca","ticed","tices","tichy","ticks","ticky","tiddy","tided","tides","tiers","tiffs","tifos","tifts","tiges","tigon","tikas","tikes","tikis","tikka","tilak","tiled","tiler","tiles","tills","tilly","tilth","tilts","timbo","timed","times","timon","timps","tinas","tinct","tinds","tinea","tined","tines","tinge","tings","tinks","tinny","tints","tinty","tipis","tippy","tired","tires","tirls","tiros","tirrs","titch","titer","titis","titre","titty","titup","tiyin","tiyns","tizes","tizzy","toads","toady","toaze","tocks","tocky","tocos","todde","toeas","toffs","toffy","tofts","tofus","togae","togas","toged","toges","togue","tohos","toile","toils","toing","toise","toits","tokay","toked","toker","tokes","tokos","tolan","tolar","tolas","toled","toles","tolls","tolly","tolts","tolus","tolyl","toman","tombs","tomes","tomia","tommy","tomos","tondi","tondo","toned","toner","tones","toney","tongs","tonka","tonks","tonne","tonus","tools","tooms","toons","toots","toped","topee","topek","toper","topes","tophe","tophi","tophs","topis","topoi","topos","toppy","toque","torah","toran","toras","torcs","tores","toric","torii","toros","torot","torrs","torse","torsi","torsk","torta","torte","torts","tosas","tosed","toses","toshy","tossy","toted","toter","totes","totty","touks","touns","tours","touse","tousy","touts","touze","touzy","towed","towie","towns","towny","towse","towsy","towts","towze","towzy","toyed","toyer","toyon","toyos","tozed","tozes","tozie","trabs","trads","tragi","traik","trams","trank","tranq","trans","trant","trape","traps","trapt","trass","trats","tratt","trave","trayf","trays","treck","treed","treen","trees","trefa","treif","treks","trema","trems","tress","trest","trets","trews","treyf","treys","triac","tride","trier","tries","triff","trigo","trigs","trike","trild","trill","trims","trine","trins","triol","trior","trios","trips","tripy","trist","troad","troak","troat","trock","trode","trods","trogs","trois","troke","tromp","trona","tronc","trone","tronk","trons","trooz","troth","trots","trows","troys","trued","trues","trugo","trugs","trull","tryer","tryke","tryma","tryps","tsade","tsadi","tsars","tsked","tsuba","tsubo","tuans","tuart","tuath","tubae","tubar","tubas","tubby","tubed","tubes","tucks","tufas","tuffe","tuffs","tufts","tufty","tugra","tuile","tuina","tuism","tuktu","tules","tulpa","tulsi","tumid","tummy","tumps","tumpy","tunas","tunds","tuned","tuner","tunes","tungs","tunny","tupek","tupik","tuple","tuque","turds","turfs","turfy","turks","turme","turms","turns","turnt","turps","turrs","tushy","tusks","tusky","tutee","tutti","tutty","tutus","tuxes","tuyer","twaes","twain","twals","twank","twats","tways","tweel","tween","tweep","tweer","twerk","twerp","twier","twigs","twill","twilt","twink","twins","twiny","twire","twirp","twite","twits","twoer","twyer","tyees","tyers","tyiyn","tykes","tyler","tymps","tynde","tyned","tynes","typal","typed","types","typey","typic","typos","typps","typto","tyran","tyred","tyres","tyros","tythe","tzars","udals","udons","ugali","ugged","uhlan","uhuru","ukase","ulama","ulans","ulema","ulmin","ulnad","ulnae","ulnar","ulnas","ulpan","ulvas","ulyie","ulzie","umami","umbel","umber","umble","umbos","umbre","umiac","umiak","umiaq","ummah","ummas","ummed","umped","umphs","umpie","umpty","umrah","umras","unais","unapt","unarm","unary","unaus","unbag","unban","unbar","unbed","unbid","unbox","uncap","unces","uncia","uncos","uncoy","uncus","undam","undee","undos","undug","uneth","unfix","ungag","unget","ungod","ungot","ungum","unhat","unhip","unica","units","unjam","unked","unket","unkid","unlaw","unlay","unled","unlet","unlid","unman","unmew","unmix","unpay","unpeg","unpen","unpin","unred","unrid","unrig","unrip","unsaw","unsay","unsee","unsew","unsex","unsod","untax","untin","unwet","unwit","unwon","upbow","upbye","updos","updry","upend","upjet","uplay","upled","uplit","upped","upran","uprun","upsee","upsey","uptak","upter","uptie","uraei","urali","uraos","urare","urari","urase","urate","urbex","urbia","urdee","ureal","ureas","uredo","ureic","urena","urent","urged","urger","urges","urial","urite","urman","urnal","urned","urped","ursae","ursid","urson","urubu","urvas","users","usnea","usque","usure","usury","uteri","uveal","uveas","uvula","vacua","vaded","vades","vagal","vagus","vails","vaire","vairs","vairy","vakas","vakil","vales","valis","valse","vamps","vampy","vanda","vaned","vanes","vangs","vants","vaped","vaper","vapes","varan","varas","vardy","varec","vares","varia","varix","varna","varus","varve","vasal","vases","vasts","vasty","vatic","vatus","vauch","vaute","vauts","vawte","vaxes","veale","veals","vealy","veena","veeps","veers","veery","vegas","veges","vegie","vegos","vehme","veils","veily","veins","veiny","velar","velds","veldt","veles","vells","velum","venae","venal","vends","vendu","veney","venge","venin","vents","venus","verbs","verra","verry","verst","verts","vertu","vespa","vesta","vests","vetch","vexed","vexer","vexes","vexil","vezir","vials","viand","vibes","vibex","vibey","viced","vices","vichy","viers","views","viewy","vifda","viffs","vigas","vigia","vilde","viler","villi","vills","vimen","vinal","vinas","vinca","vined","viner","vines","vinew","vinic","vinos","vints","viold","viols","vired","vireo","vires","virga","virge","virid","virls","virtu","visas","vised","vises","visie","visne","vison","visto","vitae","vitas","vitex","vitro","vitta","vivas","vivat","vivda","viver","vives","vizir","vizor","vleis","vlies","vlogs","voars","vocab","voces","voddy","vodou","vodun","voema","vogie","voids","voile","voips","volae","volar","voled","voles","volet","volks","volta","volte","volti","volts","volva","volve","vomer","voted","votes","vouge","voulu","vowed","vower","voxel","vozhd","vraic","vrils","vroom","vrous","vrouw","vrows","vuggs","vuggy","vughs","vughy","vulgo","vulns","vulva","vutty","waacs","wacke","wacko","wacks","wadds","waddy","waded","wader","wades","wadge","wadis","wadts","waffs","wafts","waged","wages","wagga","wagyu","wahoo","waide","waifs","waift","wails","wains","wairs","waite","waits","wakas","waked","waken","waker","wakes","wakfs","waldo","walds","waled","waler","wales","walie","walis","walks","walla","walls","wally","walty","wamed","wames","wamus","wands","waned","wanes","waney","wangs","wanks","wanky","wanle","wanly","wanna","wants","wanty","wanze","waqfs","warbs","warby","wards","wared","wares","warez","warks","warms","warns","warps","warre","warst","warts","wases","washy","wasms","wasps","waspy","wasts","watap","watts","wauff","waugh","wauks","waulk","wauls","waurs","waved","waves","wavey","wawas","wawes","wawls","waxed","waxer","waxes","wayed","wazir","wazoo","weald","weals","weamb","weans","wears","webby","weber","wecht","wedel","wedgy","weeds","weeke","weeks","weels","weems","weens","weeny","weeps","weepy","weest","weete","weets","wefte","wefts","weids","weils","weirs","weise","weize","wekas","welds","welke","welks","welkt","wells","welly","welts","wembs","wends","wenge","wenny","wents","weros","wersh","wests","wetas","wetly","wexed","wexes","whamo","whams","whang","whaps","whare","whata","whats","whaup","whaur","wheal","whear","wheen","wheep","wheft","whelk","whelm","whens","whets","whews","wheys","whids","whift","whigs","whilk","whims","whins","whios","whips","whipt","whirr","whirs","whish","whiss","whist","whits","whity","whizz","whomp","whoof","whoot","whops","whore","whorl","whort","whoso","whows","whump","whups","whyda","wicca","wicks","wicky","widdy","wides","wiels","wifed","wifes","wifey","wifie","wifty","wigan","wigga","wiggy","wikis","wilco","wilds","wiled","wiles","wilga","wilis","wilja","wills","wilts","wimps","winds","wined","wines","winey","winge","wings","wingy","winks","winna","winns","winos","winze","wiped","wiper","wipes","wired","wirer","wires","wirra","wised","wises","wisha","wisht","wisps","wists","witan","wited","wites","withe","withs","withy","wived","wiver","wives","wizen","wizes","woads","woald","wocks","wodge","woful","wojus","woker","wokka","wolds","wolfs","wolly","wolve","wombs","womby","womyn","wonga","wongi","wonks","wonky","wonts","woods","wooed","woofs","woofy","woold","wools","woons","woops","woopy","woose","woosh","wootz","words","works","worms","wormy","worts","wowed","wowee","woxen","wrang","wraps","wrapt","wrast","wrate","wrawl","wrens","wrick","wried","wrier","wries","writs","wroke","wroot","wroth","wryer","wuddy","wudus","wulls","wurst","wuses","wushu","wussy","wuxia","wyled","wyles","wynds","wynns","wyted","wytes","xebec","xenia","xenic","xenon","xeric","xerox","xerus","xoana","xrays","xylan","xylem","xylic","xylol","xylyl","xysti","xysts","yaars","yabas","yabba","yabby","yacca","yacka","yacks","yaffs","yager","yages","yagis","yahoo","yaird","yakka","yakow","yales","yamen","yampy","yamun","yangs","yanks","yapok","yapon","yapps","yappy","yarak","yarco","yards","yarer","yarfa","yarks","yarns","yarrs","yarta","yarto","yates","yauds","yauld","yaups","yawed","yawey","yawls","yawns","yawny","yawps","ybore","yclad","ycled","ycond","ydrad","ydred","yeads","yeahs","yealm","yeans","yeard","years","yecch","yechs","yechy","yedes","yeeds","yeesh","yeggs","yelks","yells","yelms","yelps","yelts","yenta","yente","yerba","yerds","yerks","yeses","yesks","yests","yesty","yetis","yetts","yeuks","yeuky","yeven","yeves","yewen","yexed","yexes","yfere","yiked","yikes","yills","yince","yipes","yippy","yirds","yirks","yirrs","yirth","yites","yitie","ylems","ylike","ylkes","ymolt","ympes","yobbo","yobby","yocks","yodel","yodhs","yodle","yogas","yogee","yoghs","yogic","yogin","yogis","yoick","yojan","yoked","yokel","yoker","yokes","yokul","yolks","yolky","yomim","yomps","yonic","yonis","yonks","yoofs","yoops","yores","yorks","yorps","youks","yourn","yours","yourt","youse","yowed","yowes","yowie","yowls","yowza","yrapt","yrent","yrivd","yrneh","ysame","ytost","yuans","yucas","yucca","yucch","yucko","yucks","yucky","yufts","yugas","yuked","yukes","yukky","yukos","yulan","yules","yummo","yummy","yumps","yupon","yuppy","yurta","yurts","yuzus","zabra","zacks","zaida","zaidy","zaire","zakat","zaman","zambo","zamia","zanja","zante","zanza","zanze","zappy","zarfs","zaris","zatis","zaxes","zayin","zazen","zeals","zebec","zebub","zebus","zedas","zeins","zendo","zerda","zerks","zeros","zests","zetas","zexes","zezes","zhomo","zibet","ziffs","zigan","zilas","zilch","zilla","zills","zimbi","zimbs","zinco","zincs","zincy","zineb","zines","zings","zingy","zinke","zinky","zippo","zippy","ziram","zitis","zizel","zizit","zlote","zloty","zoaea","zobos","zobus","zocco","zoeae","zoeal","zoeas","zoism","zoist","zombi","zonae","zonda","zoned","zoner","zones","zonks","zooea","zooey","zooid","zooks","zooms","zoons","zooty","zoppa","zoppo","zoril","zoris","zorro","zouks","zowee","zowie","zulus","zupan","zupas","zuppa","zurfs","zuzim","zygal","zygon","zymes","zymic"],Ia="present",Ma="correct",Oa="absent";var Ra={unknown:0,absent:1,present:2,correct:3};function Pa(e,a){var s={};return e.forEach((function(e,t){if(a[t])for(var o=0;o<e.length;o++){var n=e[o],r=a[t][o],i=s[n]||"unknown";Ra[r]>Ra[i]&&(s[n]=r)}})),s}function $a(e){var a=["th","st","nd","rd"],s=e%100;return e+(a[(s-20)%10]||a[s]||a[0])}var Ha=new Date(2021,5,19,0,0,0,0);function Na(e,a){var s=new Date(e),t=new Date(a).setHours(0,0,0,0)-s.setHours(0,0,0,0);return Math.round(t/864e5)}function Da(e){var a,s=Ga(e);return a=s%La.length,La[a]}function Ga(e){return Na(Ha,e)}var Ba="abcdefghijklmnopqrstuvwxyz",Fa=[].concat(g(Ba.split("").slice(13)),g(Ba.split("").slice(0,13)));function Wa(e){for(var a="",s=0;s<e.length;s++){var t=Ba.indexOf(e[s]);a+=t>=0?Fa[t]:"_"}return a}var Ya="statistics",Ja="fail",Ua={currentStreak:0,maxStreak:0,guesses:n({1:0,2:0,3:0,4:0,5:0,6:0},Ja,0),winPercentage:0,gamesPlayed:0,gamesWon:0,averageGuesses:0};function Xa(){var e=window.localStorage.getItem(Ya)||JSON.stringify(Ua);return JSON.parse(e)}function Va(e){var a=e.isWin,s=e.isStreak,t=e.numGuesses,o=Xa();a?(o.guesses[t]+=1,s?o.currentStreak+=1:o.currentStreak=1):(o.currentStreak=0,o.guesses.fail+=1),o.maxStreak=Math.max(o.currentStreak,o.maxStreak),o.gamesPlayed+=1,o.gamesWon+=a?1:0,o.winPercentage=Math.round(o.gamesWon/o.gamesPlayed*100),o.averageGuesses=Math.round(Object.entries(o.guesses).reduce((function(e,a){var s=y(a,2),t=s[0],o=s[1];return t!==Ja?e+=t*o:e}),0)/o.gamesWon),function(e){window.localStorage.setItem(Ya,JSON.stringify(e))}(o)}var Ka=document.createElement("template");Ka.innerHTML="\n <style>\n .toaster {\n position: absolute;\n top: 10%;\n left: 50%;\n transform: translate(-50%, 0);\n pointer-events: none;\n width: fit-content;\n }\n #game-toaster {\n z-index: ".concat(1e3,";\n }\n #system-toaster {\n z-index: ").concat(4e3,';\n }\n\n #game {\n width: 100%;\n max-width: var(--game-max-width);\n margin: 0 auto;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: var(--header-height);\n color: var(--color-tone-1);\n border-bottom: 1px solid var(--color-tone-4);\n }\n header .title {\n font-weight: 700;\n font-size: 36px;\n letter-spacing: 0.2rem;\n text-transform: uppercase;\n text-align: center;\n position: absolute;\n left: 0;\n right: 0;\n pointer-events: none;\n }\n\n @media (max-width: 360px) {\n header .title {\n font-size: 22px;\n letter-spacing: 0.1rem;\n }\n }\n\n #board-container {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-grow: 1;\n overflow: hidden;\n }\n #board {\n display: grid;\n grid-template-rows: repeat(6, 1fr);\n grid-gap: 5px;\n padding:10px;\n box-sizing: border-box;\n }\n button.icon {\n background: none;\n border: none;\n cursor: pointer;\n padding: 0 4px;\n }\n\n #debug-tools {\n position: absolute;\n bottom: 0;\n }\n\n </style>\n <game-theme-manager>\n <div id="game">\n <header>\n <div class="menu">\n <button id="help-button" class="icon" aria-label="help">\n <game-icon icon="help"></game-icon>\n </button>\n </div>\n <div class="title">\n WORDLE\n </div>\n <div class="menu">\n <button id="statistics-button" class="icon" aria-label="statistics">\n <game-icon icon="statistics"></game-icon>\n </button>\n <button id="settings-button" class="icon" aria-label="settings">\n <game-icon icon="settings"></game-icon>\n </button>\n </div>\n </header>\n <div id="board-container">\n <div id="board"></div>\n </div>\n <game-keyboard></game-keyboard>\n <game-modal></game-modal>\n <game-page></game-page>\n <div class="toaster" id="game-toaster"></div>\n <div class="toaster" id="system-toaster"></div>\n </div>\n </game-theme-manager>\n <div id="debug-tools"></div>\n');var Qa=document.createElement("template");Qa.innerHTML='\n<button id="reveal">reveal</button>\n<button id="shake">shake</button>\n<button id="bounce">bounce</button>\n<button id="toast">toast</button>\n<button id="modal">modal</button>\n';var Za="IN_PROGRESS",es="WIN",as="FAIL",ss=["Genius","Magnificent","Impressive","Splendid","Great","Phew"],ts=function(e){r(t,e);var a=h(t);function t(){var e;s(this,t),n(p(e=a.call(this)),"tileIndex",0),n(p(e),"rowIndex",0),n(p(e),"solution",void 0),n(p(e),"boardState",void 0),n(p(e),"evaluations",void 0),n(p(e),"canInput",!0),n(p(e),"gameStatus",Za),n(p(e),"letterEvaluations",{}),n(p(e),"$board",void 0),n(p(e),"$keyboard",void 0),n(p(e),"$game",void 0),n(p(e),"today",void 0),n(p(e),"lastPlayedTs",void 0),n(p(e),"lastCompletedTs",void 0),n(p(e),"hardMode",void 0),n(p(e),"dayOffset",void 0),e.attachShadow({mode:"open"}),e.today=new Date;var o=za();return e.lastPlayedTs=o.lastPlayedTs,!e.lastPlayedTs||Na(new Date(e.lastPlayedTs),e.today)>=1?(e.boardState=new Array(6).fill(""),e.evaluations=new Array(6).fill(null),e.solution=Da(e.today),e.dayOffset=Ga(e.today),e.lastCompletedTs=o.lastCompletedTs,e.hardMode=o.hardMode,e.restoringFromLocalStorage=!1,ja({rowIndex:e.rowIndex,boardState:e.boardState,evaluations:e.evaluations,solution:e.solution,gameStatus:e.gameStatus}),Ca("event","level_start",{level_name:Wa(e.solution)})):(e.boardState=o.boardState,e.evaluations=o.evaluations,e.rowIndex=o.rowIndex,e.solution=o.solution,e.dayOffset=Ga(e.today),e.letterEvaluations=Pa(e.boardState,e.evaluations),e.gameStatus=o.gameStatus,e.lastCompletedTs=o.lastCompletedTs,e.hardMode=o.hardMode,e.gameStatus!==Za&&(e.canInput=!1),e.restoringFromLocalStorage=!0),e}return o(t,[{key:"evaluateRow",value:function(){if(5===this.tileIndex&&!(this.rowIndex>=6)){var e,a=this.$board.querySelectorAll("game-row")[this.rowIndex],s=this.boardState[this.rowIndex];if(e=s,!Ta.includes(e)&&!La.includes(e))return a.setAttribute("invalid",""),void this.addToast("Not in word list");if(this.hardMode){var t=function(e,a,s){if(!e||!a||!s)return{validGuess:!0};for(var t=0;t<s.length;t++)if(s[t]===Ma&&e[t]!==a[t])return{validGuess:!1,errorMessage:"".concat($a(t+1)," letter must be ").concat(a[t].toUpperCase())};for(var o={},n=0;n<s.length;n++)[Ma,Ia].includes(s[n])&&(o[a[n]]?o[a[n]]+=1:o[a[n]]=1);var r=e.split("").reduce((function(e,a){return e[a]?e[a]+=1:e[a]=1,e}),{});for(var i in o)if((r[i]||0)<o[i])return{validGuess:!1,errorMessage:"Guess must contain ".concat(i.toUpperCase())};return{validGuess:!0}}(s,this.boardState[this.rowIndex-1],this.evaluations[this.rowIndex-1]),o=t.validGuess,n=t.errorMessage;if(!o)return a.setAttribute("invalid",""),void this.addToast(n||"Not valid in hard mode")}var r=function(e,a){for(var s=Array(a.length).fill(Oa),t=Array(a.length).fill(!0),o=Array(a.length).fill(!0),n=0;n<e.length;n++)e[n]===a[n]&&o[n]&&(s[n]=Ma,t[n]=!1,o[n]=!1);for(var r=0;r<e.length;r++){var i=e[r];if(t[r])for(var l=0;l<a.length;l++){var d=a[l];if(o[l]&&i===d){s[r]=Ia,o[l]=!1;break}}}return s}(s,this.solution);this.evaluations[this.rowIndex]=r,this.letterEvaluations=Pa(this.boardState,this.evaluations),a.evaluation=this.evaluations[this.rowIndex],this.rowIndex+=1;var i=this.rowIndex>=6,l=r.every((function(e){return"correct"===e}));if(i||l)Va({isWin:l,isStreak:!!this.lastCompletedTs&&1===Na(new Date(this.lastCompletedTs),new Date),numGuesses:this.rowIndex}),ja({lastCompletedTs:Date.now()}),this.gameStatus=l?es:as,Ca("event","level_end",{level_name:Wa(this.solution),num_guesses:this.rowIndex,success:l});this.tileIndex=0,this.canInput=!1,ja({rowIndex:this.rowIndex,boardState:this.boardState,evaluations:this.evaluations,solution:this.solution,gameStatus:this.gameStatus,lastPlayedTs:Date.now()})}}},{key:"addLetter",value:function(e){this.gameStatus===Za&&(this.canInput&&(this.tileIndex>=5||(this.boardState[this.rowIndex]+=e,this.$board.querySelectorAll("game-row")[this.rowIndex].setAttribute("letters",this.boardState[this.rowIndex]),this.tileIndex+=1)))}},{key:"removeLetter",value:function(){if(this.gameStatus===Za&&this.canInput&&!(this.tileIndex<=0)){this.boardState[this.rowIndex]=this.boardState[this.rowIndex].slice(0,this.boardState[this.rowIndex].length-1);var e=this.$board.querySelectorAll("game-row")[this.rowIndex];this.boardState[this.rowIndex]?e.setAttribute("letters",this.boardState[this.rowIndex]):e.removeAttribute("letters"),e.removeAttribute("invalid"),this.tileIndex-=1}}},{key:"submitGuess",value:function(){if(this.gameStatus===Za&&this.canInput){if(5!==this.tileIndex)return this.$board.querySelectorAll("game-row")[this.rowIndex].setAttribute("invalid",""),void this.addToast("Not enough letters");this.evaluateRow()}}},{key:"addToast",value:function(e,a){var s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],t=document.createElement("game-toast");t.setAttribute("text",e),a&&t.setAttribute("duration",a),s?this.shadowRoot.querySelector("#system-toaster").prepend(t):this.shadowRoot.querySelector("#game-toaster").prepend(t)}},{key:"sizeBoard",value:function(){var e=this.shadowRoot.querySelector("#board-container"),a=Math.min(Math.floor(e.clientHeight*(5/6)),350),s=6*Math.floor(a/5);this.$board.style.width="".concat(a,"px"),this.$board.style.height="".concat(s,"px")}},{key:"showStatsModal",value:function(){var e=this.$game.querySelector("game-modal"),a=document.createElement("game-stats");this.gameStatus===es&&this.rowIndex<=6&&a.setAttribute("highlight-guess",this.rowIndex),a.gameApp=this,e.appendChild(a),e.setAttribute("open","")}},{key:"showHelpModal",value:function(){var e=this.$game.querySelector("game-modal");e.appendChild(document.createElement("game-help")),e.setAttribute("open","")}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(Ka.content.cloneNode(!0)),this.$game=this.shadowRoot.querySelector("#game"),this.$board=this.shadowRoot.querySelector("#board"),this.$keyboard=this.shadowRoot.querySelector("game-keyboard"),this.sizeBoard(),this.lastPlayedTs||setTimeout((function(){return e.showHelpModal()}),100);for(var a=0;a<6;a++){var s=document.createElement("game-row");s.setAttribute("letters",this.boardState[a]),s.setAttribute("length",5),this.evaluations[a]&&(s.evaluation=this.evaluations[a]),this.$board.appendChild(s)}this.$game.addEventListener("game-key-press",(function(a){var s=a.detail.key;"←"===s||"Backspace"===s?e.removeLetter():"↵"===s||"Enter"===s?e.submitGuess():Ba.includes(s.toLowerCase())&&e.addLetter(s.toLowerCase())})),this.$game.addEventListener("game-last-tile-revealed-in-row",(function(a){e.$keyboard.letterEvaluations=e.letterEvaluations,e.rowIndex<6&&(e.canInput=!0);var s=e.$board.querySelectorAll("game-row")[e.rowIndex-1];(a.path||a.composedPath&&a.composedPath()).includes(s)&&([es,as].includes(e.gameStatus)&&(e.restoringFromLocalStorage?e.showStatsModal():(e.gameStatus===es&&(s.setAttribute("win",""),e.addToast(ss[e.rowIndex-1],2e3)),e.gameStatus===as&&e.addToast(e.solution.toUpperCase(),1/0),setTimeout((function(){e.showStatsModal()}),2500))),e.restoringFromLocalStorage=!1)})),this.shadowRoot.addEventListener("game-setting-change",(function(a){var s=a.detail,t=s.name,o=s.checked,n=s.disabled;switch(t){case"hard-mode":return void(n?e.addToast("Hard mode can only be enabled at the start of a round",1500,!0):(e.hardMode=o,ja({hardMode:o})))}})),this.shadowRoot.getElementById("settings-button").addEventListener("click",(function(a){var s=e.$game.querySelector("game-page"),t=document.createTextNode("Settings");s.appendChild(t);var o=document.createElement("game-settings");o.setAttribute("slot","content"),o.gameApp=e,s.appendChild(o),s.setAttribute("open","")})),this.shadowRoot.getElementById("help-button").addEventListener("click",(function(a){var s=e.$game.querySelector("game-page"),t=document.createTextNode("How to play");s.appendChild(t);var o=document.createElement("game-help");o.setAttribute("page",""),o.setAttribute("slot","content"),s.appendChild(o),s.setAttribute("open","")})),this.shadowRoot.getElementById("statistics-button").addEventListener("click",(function(a){e.showStatsModal()})),window.addEventListener("resize",this.sizeBoard.bind(this))}},{key:"disconnectedCallback",value:function(){}},{key:"debugTools",value:function(){var e=this;this.shadowRoot.getElementById("debug-tools").appendChild(Qa.content.cloneNode(!0)),this.shadowRoot.getElementById("toast").addEventListener("click",(function(a){e.addToast("hello world")})),this.shadowRoot.getElementById("modal").addEventListener("click",(function(a){var s=e.$game.querySelector("game-modal");s.textContent="hello plz",s.setAttribute("open","")})),this.shadowRoot.getElementById("reveal").addEventListener("click",(function(){e.evaluateRow()})),this.shadowRoot.getElementById("shake").addEventListener("click",(function(){e.$board.querySelectorAll("game-row")[e.rowIndex].setAttribute("invalid","")})),this.shadowRoot.getElementById("bounce").addEventListener("click",(function(){var a=e.$board.querySelectorAll("game-row")[e.rowIndex-1];""===a.getAttribute("win")?a.removeAttribute("win"):a.setAttribute("win","")}))}}]),t}(c(HTMLElement));customElements.define("game-app",ts);var os=document.createElement("template");os.innerHTML="\n <style>\n .overlay {\n display: none;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n justify-content: center;\n align-items: center;\n background-color: var(--opacity-50);\n z-index: ".concat(3e3,';\n }\n\n :host([open]) .overlay {\n display: flex;\n }\n\n .content {\n position: relative;\n border-radius: 8px;\n border: 1px solid var(--color-tone-6);\n background-color: var(--modal-content-bg);\n color: var(--color-tone-1);\n box-shadow: 0 4px 23px 0 rgba(0, 0, 0, 0.2);\n width: 90%;\n max-height: 90%;\n overflow-y: auto;\n animation: SlideIn 200ms;\n max-width: var(--game-max-width);\n padding: 16px;\n box-sizing: border-box;\n }\n\n .content.closing {\n animation: SlideOut 200ms;\n }\n\n .close-icon {\n width: 24px;\n height: 24px;\n position: absolute;\n top: 16px;\n right: 16px;\n }\n\n game-icon {\n position: fixed;\n user-select: none;\n cursor: pointer;\n }\n\n @keyframes SlideIn {\n 0% {\n transform: translateY(30px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0px);\n opacity: 1;\n }\n }\n @keyframes SlideOut {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 90% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n transform: translateY(60px);\n }\n }\n </style>\n <div class="overlay">\n <div class="content">\n <slot></slot>\n <div class="close-icon">\n <game-icon icon="close"></game-icon>\n </div>\n </div>\n </div>\n');var ns=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(os.content.cloneNode(!0)),this.addEventListener("click",(function(a){e.shadowRoot.querySelector(".content").classList.add("closing")})),this.shadowRoot.addEventListener("animationend",(function(a){"SlideOut"===a.animationName&&(e.shadowRoot.querySelector(".content").classList.remove("closing"),e.removeChild(e.firstChild),e.removeAttribute("open"))}))}}]),t}(c(HTMLElement));customElements.define("game-modal",ns);var rs=document.createElement("template");rs.innerHTML="\n <style>\n :host {\n height: var(--keyboard-height);\n }\n #keyboard {\n margin: 0 8px;\n user-select: none;\n }\n \n .row {\n display: flex;\n width: 100%;\n margin: 0 auto 8px;\n /* https://stackoverflow.com/questions/46167604/ios-html-disable-double-tap-to-zoom */\n touch-action: manipulation;\n }\n \n button {\n font-family: inherit;\n font-weight: bold;\n border: 0;\n padding: 0;\n margin: 0 6px 0 0;\n height: 58px;\n border-radius: 4px;\n cursor: pointer;\n user-select: none;\n background-color: var(--key-bg);\n color: var(--key-text-color);\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n -webkit-tap-highlight-color: rgba(0,0,0,0.3);\n }\n\n button:focus {\n outline: none;\n }\n\n button.fade {\n transition: background-color 0.1s ease, color 0.1s ease;\n }\n \n button:last-of-type {\n margin: 0;\n }\n \n .half {\n flex: 0.5;\n }\n \n .one {\n flex: 1;\n }\n\n .one-and-a-half {\n flex: 1.5;\n font-size: 12px;\n }\n \n .two {\n flex: 2;\n }\n\n button[data-state='correct'] {\n background-color: var(--key-bg-correct);\n color: var(--key-evaluated-text-color);\n }\n\n button[data-state='present'] {\n background-color: var(--key-bg-present);\n color: var(--key-evaluated-text-color);\n }\n\n button[data-state='absent'] {\n background-color: var(--key-bg-absent);\n color: var(--key-evaluated-text-color);\n }\n\n </style>\n <div id=\"keyboard\"></div>\n";var is=document.createElement("template");is.innerHTML="\n <button>key</button>\n";var ls=document.createElement("template");ls.innerHTML='\n <div class="spacer"></div>\n';var ds=[["q","w","e","r","t","y","u","i","o","p"],["-","a","s","d","f","g","h","j","k","l","-"],["↵","z","x","c","v","b","n","m","←"]],us=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),n(p(e=a.call(this)),"_letterEvaluations",{}),e.attachShadow({mode:"open"}),e}return o(t,[{key:"letterEvaluations",set:function(e){this._letterEvaluations=e,this._render()}},{key:"dispatchKeyPressEvent",value:function(e){this.dispatchEvent(new CustomEvent("game-key-press",{bubbles:!0,composed:!0,detail:{key:e}}))}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(rs.content.cloneNode(!0)),this.$keyboard=this.shadowRoot.getElementById("keyboard"),this.$keyboard.addEventListener("click",(function(a){var s=a.target.closest("button");s&&e.$keyboard.contains(s)&&e.dispatchKeyPressEvent(s.dataset.key)})),window.addEventListener("keydown",(function(a){if(!0!==a.repeat){var s=a.key,t=a.metaKey,o=a.ctrlKey;t||o||(Ba.includes(s.toLowerCase())||"Backspace"===s||"Enter"===s)&&e.dispatchKeyPressEvent(s)}})),this.$keyboard.addEventListener("transitionend",(function(a){var s=a.target.closest("button");s&&e.$keyboard.contains(s)&&s.classList.remove("fade")})),ds.forEach((function(a){var s=document.createElement("div");s.classList.add("row"),a.forEach((function(e){var a;if(e>="a"&&e<="z"||"←"===e||"↵"===e){if((a=is.content.cloneNode(!0).firstElementChild).dataset.key=e,a.textContent=e,"←"===e){var t=document.createElement("game-icon");t.setAttribute("icon","backspace"),a.textContent="",a.appendChild(t),a.classList.add("one-and-a-half")}"↵"==e&&(a.textContent="enter",a.classList.add("one-and-a-half"))}else(a=ls.content.cloneNode(!0).firstElementChild).classList.add(1===e.length?"half":"one");s.appendChild(a)})),e.$keyboard.appendChild(s)})),this._render()}},{key:"_render",value:function(){for(var e in this._letterEvaluations){var a=this.$keyboard.querySelector('[data-key="'.concat(e,'"]'));a.dataset.state=this._letterEvaluations[e],a.classList.add("fade")}}}]),t}(c(HTMLElement));
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
***************************************************************************** */
|
|
function cs(e,a,s,t){return new(s||(s=Promise))((function(o,n){function r(e){try{l(t.next(e))}catch(e){n(e)}}function i(e){try{l(t.throw(e))}catch(e){n(e)}}function l(e){var a;e.done?o(e.value):(a=e.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,i)}l((t=t.apply(e,a||[])).next())}))}function ps(e,a){var s,t,o,n,r={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return n={next:i(0),throw:i(1),return:i(2)},"function"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function i(n){return function(i){return function(n){if(s)throw new TypeError("Generator is already executing.");for(;r;)try{if(s=1,t&&(o=2&n[0]?t.return:n[0]?t.throw||((o=t.return)&&o.call(t),0):t.next)&&!(o=o.call(t,n[1])).done)return o;switch(t=0,o&&(n=[2&n[0],o.value]),n[0]){case 0:case 1:o=n;break;case 4:return r.label++,{value:n[1],done:!1};case 5:r.label++,t=n[1],n=[0];continue;case 7:n=r.ops.pop(),r.trys.pop();continue;default:if(!((o=(o=r.trys).length>0&&o[o.length-1])||6!==n[0]&&2!==n[0])){r=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){r.label=n[1];break}if(6===n[0]&&r.label<o[1]){r.label=o[1],o=n;break}if(o&&r.label<o[2]){r.label=o[2],r.ops.push(n);break}o[2]&&r.ops.pop(),r.trys.pop();continue}n=a.call(e,r)}catch(e){n=[6,e],t=0}finally{s=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,i])}}}customElements.define("game-keyboard",us),function(){(console.warn||console.log).apply(console,arguments)}.bind("[clipboard-polyfill]");var ms,hs,ys,gs,bs="undefined"==typeof navigator?void 0:navigator,fs=null==bs?void 0:bs.clipboard;null===(ms=null==fs?void 0:fs.read)||void 0===ms||ms.bind(fs),null===(hs=null==fs?void 0:fs.readText)||void 0===hs||hs.bind(fs);var ks=(null===(ys=null==fs?void 0:fs.write)||void 0===ys||ys.bind(fs),null===(gs=null==fs?void 0:fs.writeText)||void 0===gs?void 0:gs.bind(fs)),vs="undefined"==typeof window?void 0:window,ws=(null==vs||vs.ClipboardItem,vs);var xs=function(){this.success=!1};function zs(e,a,s){for(var t in e.success=!0,a){var o=a[t],n=s.clipboardData;n.setData(t,o),"text/plain"===t&&n.getData(t)!==o&&(e.success=!1)}s.preventDefault()}function js(e){var a=new xs,s=zs.bind(this,a,e);document.addEventListener("copy",s);try{document.execCommand("copy")}finally{document.removeEventListener("copy",s)}return a.success}function Ss(e,a){_s(e);var s=js(a);return qs(),s}function _s(e){var a=document.getSelection();if(a){var s=document.createRange();s.selectNodeContents(e),a.removeAllRanges(),a.addRange(s)}}function qs(){var e=document.getSelection();e&&e.removeAllRanges()}function Es(e){return cs(this,void 0,void 0,(function(){var a;return ps(this,(function(s){if(a="text/plain"in e,"undefined"==typeof ClipboardEvent&&void 0!==ws.clipboardData&&void 0!==ws.clipboardData.setData){if(!a)throw new Error("No `text/plain` value was specified.");if(t=e["text/plain"],ws.clipboardData.setData("Text",t))return[2,!0];throw new Error("Copying failed, possibly because the user rejected it.")}var t;return js(e)||navigator.userAgent.indexOf("Edge")>-1||Ss(document.body,e)||function(e){var a=document.createElement("div");a.setAttribute("style","-webkit-user-select: text !important"),a.textContent="temporary element",document.body.appendChild(a);var s=Ss(a,e);return document.body.removeChild(a),s}(e)||function(e){var a=document.createElement("div");a.setAttribute("style","-webkit-user-select: text !important");var s=a;a.attachShadow&&(s=a.attachShadow({mode:"open"}));var t=document.createElement("span");t.innerText=e,s.appendChild(t),document.body.appendChild(a),_s(t);var o=document.execCommand("copy");return qs(),document.body.removeChild(a),o}(e["text/plain"])?[2,!0]:[2,!1]}))}))}function As(e,a,s){try{t=navigator.userAgent||navigator.vendor||window.opera,!/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)&&!/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))||navigator.userAgent.toLowerCase().indexOf("firefox")>-1||void 0===navigator.share||!navigator.canShare||!navigator.canShare(e)?function(e){return cs(this,void 0,void 0,(function(){return ps(this,(function(a){if(ks)return[2,ks(e)];if(!Es(function(e){var a={};return a["text/plain"]=e,a}(e)))throw new Error("writeText() failed");return[2]}))}))}(e.text).then(a,s):navigator.share(e)}catch(e){s()}var t}var Cs=document.createElement("template");Cs.innerHTML='\n <style>\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 16px 0; \n }\n h1 {\n font-weight: 700;\n font-size: 16px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 10px;\n }\n \n #statistics {\n display: flex;\n margin-bottom: \n }\n\n .statistic-container {\n flex: 1;\n }\n\n .statistic-container .statistic {\n font-size: 36px;\n font-weight: 400;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n letter-spacing: 0.05em;\n font-variant-numeric: proportional-nums;\n }\n\n .statistic.timer {\n font-variant-numeric: initial;\n }\n\n .statistic-container .label {\n font-size: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n #guess-distribution {\n width: 80%;\n }\n\n .graph-container {\n width: 100%;\n height: 20px;\n display: flex;\n align-items: center;\n padding-bottom: 4px;\n font-size: 14px;\n line-height: 20px;\n }\n\n .graph-container .graph {\n width: 100%;\n height: 100%;\n padding-left: 4px;\n }\n\n .graph-container .graph .graph-bar {\n height: 100%;\n /* Assume no wins */\n width: 0%;\n position: relative;\n background-color: var(--color-absent);\n display: flex;\n justify-content: center;\n }\n\n .graph-container .graph .graph-bar.highlight {\n background-color: var(--color-correct);\n }\n\n .graph-container .graph .graph-bar.align-right {\n justify-content: flex-end;\n padding-right: 8px;\n }\n\n .graph-container .graph .num-guesses {\n font-weight: bold;\n color: var(--tile-text-color);\n }\n\n #statistics,\n #guess-distribution {\n padding-bottom: 10px;\n }\n\n .footer {\n display: flex;\n width: 100%;\n }\n\n .countdown {\n border-right: 1px solid var(--color-tone-1);\n padding-right: 12px;\n width: 50%;\n }\n\n .share {\n display: flex;\n justify-content: center;\n align-items: center;\n padding-left: 12px;\n width: 50%;\n }\n\n .no-data {\n text-align: center;\n }\n\n button#share-button {\n background-color: var(--key-bg-correct);\n color: var(--key-evaluated-text-color);\n font-family: inherit;\n font-weight: bold;\n border-radius: 4px;\n cursor: pointer;\n border: none;\n user-select: none;\n display: flex;\n justify-content: center;\n align-items: center;\n text-transform: uppercase;\n -webkit-tap-highlight-color: rgba(0,0,0,0.3);\n width: 80%;\n font-size: 20px;\n height: 52px;\n -webkit-filter: brightness(100%);\n }\n button#share-button:hover {\n opacity: 0.9;\n }\n button#share-button game-icon {\n width: 24px;\n height: 24px;\n padding-left: 8px;\n }\n </style>\n\n <div class="container">\n <h1>Statistics</h1>\n <div id="statistics"></div>\n <h1>Guess Distribution</h1>\n <div id="guess-distribution"></div>\n <div class="footer"></div>\n </div>\n';var Ls=document.createElement("template");Ls.innerHTML='\n <div class="statistic-container">\n <div class="statistic"></div>\n <div class="label"></div>\n </div>\n';var Ts=document.createElement("template");Ts.innerHTML='\n <div class="graph-container">\n <div class="guess"></div>\n <div class="graph">\n <div class="graph-bar">\n <div class="num-guesses">\n </div>\n </div>\n </div>\n </div>\n';var Is=document.createElement("template");Is.innerHTML='\n <div class="countdown">\n <h1>Next WORDLE</h1>\n <div id="timer">\n <div class="statistic-container">\n <div class="statistic timer">\n <countdown-timer></countdown-timer>\n </div>\n </div>\n </div>\n </div>\n <div class="share">\n <button id="share-button">\n Share <game-icon icon="share"></game-icon>\n </button>\n </div>\n';var Ms={currentStreak:"Current Streak",maxStreak:"Max Streak",winPercentage:"Win %",gamesPlayed:"Played",gamesWon:"Won",averageGuesses:"Av. Guesses"},Os=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),n(p(e=a.call(this)),"stats",{}),n(p(e),"gameApp",void 0),e.attachShadow({mode:"open"}),e.stats=Xa(),e}return o(t,[{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(Cs.content.cloneNode(!0));var a=this.shadowRoot.getElementById("statistics"),s=this.shadowRoot.getElementById("guess-distribution"),t=Math.max.apply(Math,g(Object.values(this.stats.guesses)));if(Object.values(this.stats.guesses).every((function(e){return 0===e}))){var o=document.createElement("div");o.classList.add("no-data"),o.innerText="No Data",s.appendChild(o)}else for(var n=1;n<Object.keys(this.stats.guesses).length;n++){var r=n,i=this.stats.guesses[n],l=Ts.content.cloneNode(!0),d=Math.max(7,Math.round(i/t*100));l.querySelector(".guess").textContent=r;var u=l.querySelector(".graph-bar");if(u.style.width="".concat(d,"%"),"number"==typeof i){l.querySelector(".num-guesses").textContent=i,i>0&&u.classList.add("align-right");var c=parseInt(this.getAttribute("highlight-guess"),10);c&&n===c&&u.classList.add("highlight")}s.appendChild(l)}if(["gamesPlayed","winPercentage","currentStreak","maxStreak"].forEach((function(s){var t=Ms[s],o=e.stats[s],n=Ls.content.cloneNode(!0);n.querySelector(".label").textContent=t,n.querySelector(".statistic").textContent=o,a.appendChild(n)})),this.gameApp.gameStatus!==Za){var p=this.shadowRoot.querySelector(".footer"),m=Is.content.cloneNode(!0);p.appendChild(m),this.shadowRoot.querySelector("button#share-button").addEventListener("click",(function(a){a.preventDefault(),a.stopPropagation();As(function(e){var a=e.evaluations,s=e.dayOffset,t=e.rowIndex,o=e.isHardMode,n=e.isWin,r=JSON.parse(window.localStorage.getItem(j)),i=JSON.parse(window.localStorage.getItem(S)),l="Wordle ".concat(s);l+=" ".concat(n?t:"X","/").concat(6),o&&(l+="*");var d="";return a.forEach((function(e){e&&(e.forEach((function(e){if(e){var a="";switch(e){case Ma:a=function(e){return e?"🟧":"🟩"}(i);break;case Ia:a=function(e){return e?"🟦":"🟨"}(i);break;case Oa:a=function(e){return e?"⬛":"⬜"}(r)}d+=a}})),d+="\n")})),{text:"".concat(l,"\n\n").concat(d.trimEnd())}}({evaluations:e.gameApp.evaluations,dayOffset:e.gameApp.dayOffset,rowIndex:e.gameApp.rowIndex,isHardMode:e.gameApp.hardMode,isWin:e.gameApp.gameStatus===es}),(function(){e.gameApp.addToast("Copied results to clipboard",2e3,!0)}),(function(){e.gameApp.addToast("Share failed",2e3,!0)}))}))}}}]),t}(c(HTMLElement));customElements.define("game-stats",Os);var Rs=document.createElement("template");Rs.innerHTML='\n <style>\n :host {\n }\n .container {\n display: flex;\n justify-content: space-between;\n }\n .switch {\n height: 20px;\n width: 32px;\n vertical-align: middle;\n /* not quite right */\n background: var(--color-tone-3);\n border-radius: 999px;\n display: block;\n position: relative;\n }\n .knob {\n display: block;\n position: absolute;\n left: 2px;\n top: 2px;\n height: calc(100% - 4px);\n width: 50%;\n border-radius: 8px;\n background: var(--white);\n transform: translateX(0);\n transition: transform 0.3s;\n }\n :host([checked]) .switch {\n background: var(--color-correct);\n }\n :host([checked]) .knob {\n transform: translateX(calc(100% - 4px));\n }\n :host([disabled]) .switch {\n opacity: 0.5;\n }\n </style>\n <div class="container">\n <label><slot></slot></label>\n <div class="switch">\n <span class="knob"></div>\n </div>\n </div>\n';var Ps=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(Rs.content.cloneNode(!0)),this.shadowRoot.querySelector(".container").addEventListener("click",(function(a){a.stopPropagation(),e.hasAttribute("checked")?e.removeAttribute("checked"):e.setAttribute("checked",""),e.dispatchEvent(new CustomEvent("game-switch-change",{bubbles:!0,composed:!0,detail:{name:e.getAttribute("name"),checked:e.hasAttribute("checked"),disabled:e.hasAttribute("disabled")}}))}))}}],[{key:"observedAttributes",get:function(){return["checked"]}}]),t}(c(HTMLElement));customElements.define("game-switch",Ps);var $s=document.createElement("template");$s.innerHTML='\n <style>\n .instructions {\n font-size: 14px;\n color: var(--color-tone-1)\n }\n\n .examples {\n border-bottom: 1px solid var(--color-tone-4);\n border-top: 1px solid var(--color-tone-4);\n }\n\n .example {\n margin-top: 24px;\n margin-bottom: 24px;\n }\n\n game-tile {\n width: 40px;\n height: 40px;\n }\n\n :host([page]) section {\n padding: 16px;\n padding-top: 0px;\n }\n\n </style>\n <section>\n <div class="instructions">\n <p>Guess the <strong>WORDLE</strong> in 6 tries.</p>\n <p>Each guess must be a valid 5 letter word. Hit the enter button to submit.</p>\n <p>After each guess, the color of the tiles will change to show how close your guess was to the word.</p>\n <div class="examples">\n <p><strong>Examples</strong></p>\n <div class="example">\n <div class="row">\n <game-tile letter="w" evaluation="correct" reveal></game-tile>\n <game-tile letter="e"></game-tile>\n <game-tile letter="a"></game-tile>\n <game-tile letter="r"></game-tile>\n <game-tile letter="y"></game-tile>\n </div>\n <p>The letter <strong>W</strong> is in the word and in the correct spot.</p>\n </div>\n <div class="example">\n <div class="row">\n <game-tile letter="p"></game-tile>\n <game-tile letter="i" evaluation="present" reveal></game-tile>\n <game-tile letter="l"></game-tile>\n <game-tile letter="l"></game-tile>\n <game-tile letter="s"></game-tile>\n </div>\n <p>The letter <strong>I</strong> is in the word but in the wrong spot.</p>\n </div>\n <div class="example">\n <div class="row">\n <game-tile letter="v"></game-tile>\n <game-tile letter="a"></game-tile>\n <game-tile letter="g"></game-tile>\n <game-tile letter="u" evaluation="absent" reveal></game-tile>\n <game-tile letter="e"></game-tile>\n </div>\n <p>The letter <strong>U</strong> is not in the word in any spot.</p>\n </div>\n </div>\n <p><strong>A new WORDLE will be available each day!<strong></p>\n </div>\n </section>\n';var Hs=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){this.shadowRoot.appendChild($s.content.cloneNode(!0))}}]),t}(c(HTMLElement));customElements.define("game-help",Hs);var Ns=document.createElement("template");Ns.innerHTML="\n <style>\n .overlay {\n display: none;\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n justify-content: center;\n background-color: var(--color-background);\n animation: SlideIn 100ms linear;\n z-index: ".concat(2e3,';\n }\n\n :host([open]) .overlay {\n display: flex;\n }\n\n .content {\n position: relative;\n color: var(--color-tone-1);\n padding: 0 32px;\n max-width: var(--game-max-width);\n width: 100%;\n overflow-y: auto;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .content-container {\n height: 100%;\n }\n\n .overlay.closing {\n animation: SlideOut 150ms linear;\n }\n\n header {\n display: flex;\n justify-content: center;\n align-items: center;\n position: relative;\n }\n\n h1 {\n font-weight: 700;\n font-size: 16px;\n letter-spacing: 0.5px;\n text-transform: uppercase;\n text-align: center;\n margin-bottom: 10px;\n }\n\n game-icon {\n position: absolute;\n right: 0;\n user-select: none;\n cursor: pointer;\n }\n\n @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {\n .content {\n max-width: 100%;\n padding: 0;\n }\n game-icon {\n padding: 0 16px;\n }\n }\n\n @keyframes SlideIn {\n 0% {\n transform: translateY(30px);\n opacity: 0;\n }\n 100% {\n transform: translateY(0px);\n opacity: 1;\n }\n }\n @keyframes SlideOut {\n 0% {\n transform: translateY(0px);\n opacity: 1;\n }\n 90% {\n opacity: 0;\n }\n 100% {\n opacity: 0;\n transform: translateY(60px);\n }\n }\n </style>\n <div class="overlay">\n <div class="content">\n <header>\n <h1><slot></slot></h1>\n <game-icon icon="close"></game-icon>\n </header>\n <div class="content-container">\n <slot name="content"></slot>\n </div>\n </div>\n </div>\n');var Ds=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(Ns.content.cloneNode(!0)),this.shadowRoot.querySelector("game-icon").addEventListener("click",(function(a){e.shadowRoot.querySelector(".overlay").classList.add("closing")})),this.shadowRoot.addEventListener("animationend",(function(a){"SlideOut"===a.animationName&&(e.shadowRoot.querySelector(".overlay").classList.remove("closing"),Array.from(e.childNodes).forEach((function(a){e.removeChild(a)})),e.removeAttribute("open"))}))}}]),t}(c(HTMLElement));customElements.define("game-page",Ds);var Gs=document.createElement("template");Gs.innerHTML='\n <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24">\n <path fill=var(--color-tone-3) />\n </svg>\n';var Bs={help:"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z",settings:"M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z",backspace:"M22 3H7c-.69 0-1.23.35-1.59.88L0 12l5.41 8.11c.36.53.9.89 1.59.89h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H7.07L2.4 12l4.66-7H22v14zm-11.59-2L14 13.41 17.59 17 19 15.59 15.41 12 19 8.41 17.59 7 14 10.59 10.41 7 9 8.41 12.59 12 9 15.59z",close:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z",share:"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92c0-1.61-1.31-2.92-2.92-2.92zM18 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM6 13c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm12 7.02c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1z",statistics:"M16,11V3H8v6H2v12h20V11H16z M10,5h4v14h-4V5z M4,11h4v8H4V11z M20,19h-4v-6h4V19z"},Fs=function(e){r(t,e);var a=h(t);function t(){var e;return s(this,t),(e=a.call(this)).attachShadow({mode:"open"}),e}return o(t,[{key:"connectedCallback",value:function(){this.shadowRoot.appendChild(Gs.content.cloneNode(!0));var e=this.getAttribute("icon");this.shadowRoot.querySelector("path").setAttribute("d",Bs[e]),"backspace"===e&&this.shadowRoot.querySelector("path").setAttribute("fill","var(--color-tone-1)"),"share"===e&&this.shadowRoot.querySelector("path").setAttribute("fill","var(--white)")}}]),t}(c(HTMLElement));customElements.define("game-icon",Fs);var Ws=document.createElement("template");Ws.innerHTML='\n <div id="timer"></div>\n';var Ys=6e4,Js=36e5,Us=function(e){r(t,e);var a=h(t);function t(){var e;s(this,t),n(p(e=a.call(this)),"targetEpochMS",void 0),n(p(e),"intervalId",void 0),n(p(e),"$timer",void 0),e.attachShadow({mode:"open"});var o=new Date;return o.setDate(o.getDate()+1),o.setHours(0,0,0,0),e.targetEpochMS=o.getTime(),e}return o(t,[{key:"padDigit",value:function(e){return e.toString().padStart(2,"0")}},{key:"updateTimer",value:function(){var e,a=(new Date).getTime(),s=Math.floor(this.targetEpochMS-a);if(s<=0)e="00:00:00";else{var t=Math.floor(s%864e5/Js),o=Math.floor(s%Js/Ys),n=Math.floor(s%Ys/1e3);e="".concat(this.padDigit(t),":").concat(this.padDigit(o),":").concat(this.padDigit(n))}this.$timer.textContent=e}},{key:"connectedCallback",value:function(){var e=this;this.shadowRoot.appendChild(Ws.content.cloneNode(!0)),this.$timer=this.shadowRoot.querySelector("#timer"),this.intervalId=setInterval((function(){e.updateTimer()}),200)}},{key:"disconnectedCallback",value:function(){clearInterval(this.intervalId)}}]),t}(c(HTMLElement));return customElements.define("countdown-timer",Us),e.CountdownTimer=Us,e.GameApp=ts,e.GameHelp=Hs,e.GameIcon=Fs,e.GameKeyboard=us,e.GameModal=ns,e.GamePage=Ds,e.GameRow=x,e.GameSettings=_a,e.GameStats=Os,e.GameSwitch=Ps,e.GameThemeManager=_,e.GameTile=v,e.GameToast=Aa,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
|