From f7c98b03e11a21efec1960ea64cd369d0fc410e1 Mon Sep 17 00:00:00 2001 From: SPWeblate <73763464+SPWeblate@users.noreply.github.com> Date: Sat, 7 Aug 2021 20:42:31 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=2073bc8?= =?UTF-8?q?380e6fe69c72586c07809825123f9638a2d=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 2 +- advancement/index.html | 2 +- assets/{index.a4103251.js => index.47e29d70.js} | 4 ++-- assets/{index.a4103251.js.map => index.47e29d70.js.map} | 2 +- assets/zh-cn.4042c0c5.js | 2 -- assets/zh-cn.4042c0c5.js.map | 1 - assets/zh-cn.82c847ac.js | 2 ++ assets/zh-cn.82c847ac.js.map | 1 + dimension/index.html | 2 +- dimension_type/index.html | 2 +- index.html | 2 +- item_modifier/index.html | 2 +- loot_table/index.html | 2 +- predicate/index.html | 2 +- world/index.html | 2 +- worldgen/biome/index.html | 2 +- worldgen/configured_carver/index.html | 2 +- worldgen/configured_feature/index.html | 2 +- worldgen/configured_structure_feature/index.html | 2 +- worldgen/configured_surface_builder/index.html | 2 +- worldgen/noise_settings/index.html | 2 +- worldgen/processor_list/index.html | 2 +- worldgen/template_pool/index.html | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) rename assets/{index.a4103251.js => index.47e29d70.js} (99%) rename assets/{index.a4103251.js.map => index.47e29d70.js.map} (99%) delete mode 100644 assets/zh-cn.4042c0c5.js delete mode 100644 assets/zh-cn.4042c0c5.js.map create mode 100644 assets/zh-cn.82c847ac.js create mode 100644 assets/zh-cn.82c847ac.js.map diff --git a/404.html b/404.html index ab305e04..1d0927e1 100644 --- a/404.html +++ b/404.html @@ -20,7 +20,7 @@ 404 - + diff --git a/advancement/index.html b/advancement/index.html index eab816c0..86aafc07 100644 --- a/advancement/index.html +++ b/advancement/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/assets/index.a4103251.js b/assets/index.47e29d70.js similarity index 99% rename from assets/index.a4103251.js rename to assets/index.47e29d70.js index 50847f2f..7b3683a5 100644 --- a/assets/index.a4103251.js +++ b/assets/index.47e29d70.js @@ -1,2 +1,2 @@ -var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,s=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&a(e,n,t[n]);if(o)for(var n of o(t))i.call(t,n)&&a(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,s as u,l as h,b as m,j as g,c as p,d as f,g as v,L as _,r as w,e as b,f as y,q as $,N as k,R as C}from"./vendor.57c081fd.js";var x;function V({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function z({icon:e,label:t,active:n,class:o,onClick:r}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}`,onClick:r},e&&A[e],t&&d("span",null,t))}function M({icon:e,label:t,large:n,type:o,doSelect:r,value:i,onChange:a}){const s=void 0===a?()=>{}:e=>{const t=e.target.value;"number"===o&&(t.endsWith(".")||isNaN(Number(t)))||null==a||a(t)},l=u(null);return c((()=>{r&&l.current&&l.current.select()}),[r]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&A[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:i,onKeyUp:s}))}function E({icon:e,label:t,relative:n,children:o}){const[r,i]=h(!1),a=()=>{i(!1)};return c((()=>(r&&document.body.addEventListener("click",a),()=>{document.body.removeEventListener("click",a)})),[r]),d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(z,{icon:e,label:t,onClick:()=>i(!0)}),r&&d("div",{class:"btn-group"},o))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.generatorEvent=function(e,t){o(n,e,t)}}(x||(x={}));const A={archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),chevron_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function L({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},A.x),d("h3",null,e),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}var j=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","refs":{"mcdata_master":"13355f7"}},{"id":"1.16","refs":{"mcdata_master":"1.16.4","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","refs":{"mcdata_master":"master","vanilla_datapack_data":"data","vanilla_datapack_summary":"summary"},"dynamic":true}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"worldgen/template-pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"dimension","dynamic":true},{"id":"dimension_type","dynamic":true},{"id":"enchantment"},{"id":"entity_type"},{"id":"fluid"},{"id":"function","dynamic":true},{"id":"float_provider_type","minVersion":"1.17"},{"id":"item"},{"id":"int_provider_type","minVersion":"1.17"},{"id":"height_provider_type","minVersion":"1.17"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_function_type","minVersion":"1.16"},{"id":"loot_nbt_provider_type","minVersion":"1.17"},{"id":"loot_number_provider_type","minVersion":"1.17"},{"id":"loot_pool_entry_type","minVersion":"1.16"},{"id":"loot_score_provider_type","minVersion":"1.17"},{"id":"loot_table","dynamic":true},{"id":"mob_effect"},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"rule_test","minVersion":"1.16"},{"id":"sound_event"},{"id":"stat_type"},{"id":"structure","dynamic":true},{"id":"tag/block","dynamic":true},{"id":"tag/entity_type","dynamic":true},{"id":"tag/fluid","dynamic":true},{"id":"tag/function","dynamic":true},{"id":"tag/item","dynamic":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16"},{"id":"worldgen/biome_source","minVersion":"1.16"},{"id":"worldgen/carver","minVersion":"1.16"},{"id":"worldgen/chunk_generator","minVersion":"1.16"},{"id":"worldgen/configured_carver","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_decorator","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_structure_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_surface_builder","minVersion":"1.16","dynamic":true},{"id":"worldgen/decorator","minVersion":"1.16"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/processor_list","minVersion":"1.16","dynamic":true},{"id":"worldgen/structure_feature","minVersion":"1.16"},{"id":"worldgen/structure_pool_element","minVersion":"1.16"},{"id":"worldgen/structure_processor","minVersion":"1.16"},{"id":"worldgen/surface_builder","minVersion":"1.16"},{"id":"worldgen/template_pool","minVersion":"1.16","dynamic":true},{"id":"worldgen/tree_decorator_type","minVersion":"1.16"},{"id":"worldgen/trunk_placer_type","minVersion":"1.16"},{"id":"biome","maxVersion":"1.15"},{"id":"worldgen/biome","minVersion":"1.16","path":"processed/reports/biomes"}]}');let P;const D={},O=function(e,t){if(!t)return e();if(void 0===P){const e=document.createElement("link").relList;P=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in D)return;D[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":P,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var I=JSON.parse('{"advancement":"Advancement","button.add":"Add","button.collapse":"Collapse","button.expand":"Expand","button.remove":"Remove","copy":"Copy","dimension_type":"Dimension Type","dimension":"Dimension","download":"Download","fields":"Fields","github":"GitHub","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","loot_table":"Loot Table","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","predicate":"Predicate","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.width":"Width","source_placeholder":"Paste JSON content here","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool"}'),S=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:I});const N={fallback:I};function T(e,t,...n){var o,r,i,a,s;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(s=null!=(a=null!=(i=null==(o=N[e])?void 0:o[t])?i:null==(r=N.en)?void 0:r[t])?a:N.fallback[t])?s:t,n)}async function B(e){const t=j.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return O((()=>import("./de.9324c846.js")),void 0);case"../locales/en.json":return O((()=>Promise.resolve().then((function(){return S}))),void 0);case"../locales/fr.json":return O((()=>import("./fr.cc0e1c18.js")),void 0);case"../locales/it.json":return O((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return O((()=>import("./ja.8c79487c.js")),void 0);case"../locales/pl.json":return O((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return O((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return O((()=>import("./ru.43cf4da1.js")),void 0);case"../locales/sk.json":return O((()=>import("./sk.586a2a32.js")),void 0);case"../locales/zh-cn.json":return O((()=>import("./zh-cn.4042c0c5.js")),void 0);case"../locales/zh-tw.json":return O((()=>import("./zh-tw.bb27fc3b.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return O((()=>import("./de.ba8c635a.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return O((()=>import("./en.6ae73cdb.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return O((()=>import("./fr.c1ebc76d.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return O((()=>import("./it.288ea523.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return O((()=>import("./ja.d68f1cee.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return O((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return O((()=>import("./pt.98ad9b62.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return O((()=>import("./ru.61de7e2f.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return O((()=>import("./zh-cn.655950f4.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return O((()=>import("./zh-tw.a8f28612.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);N[e]=s(s({},n.default),o.default)}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const R="https://raw.githubusercontent.com/Arcensoth/mcdata",H="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",F=[{id:"mcdata_master",hash:"c1adf4f9ba8e81a7683ce775b7f2847bdd118e82",url:R},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:H}];async function W(e,t,n){const o=j.versions.find((t=>t.id===e));o?(console.debug(`[fetchData] ${JSON.stringify(o)}`),o.dynamic&&await Promise.all(F.filter((e=>localStorage.getItem(`cached_${e.id}`)!==e.hash)).map((async e=>{console.debug(`[deleteMatching] ${e.id} '${localStorage.getItem(`cached_${e.id}`)}' < '${e.hash}' ${e.url}/${o.refs[e.id]}`),await async function(e){try{const t=await caches.open("misode-v1");console.debug("[deleteMatching] Opened cache misode-v1");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${t.message}`)}}((t=>t.startsWith(`${e.url}/${o.refs[e.id]}`))),console.debug(`[deleteMatching] Done! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`),localStorage.setItem(`cached_${e.id}`,e.hash),console.debug(`[deleteMatching] Set! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`)}))),await Promise.all([G(o,t),q(o,n),J(o,t)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(j.versions)}`)}async function G(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=j.registries.filter((e=>!e.dynamic)).filter((t=>ee(e.id,t.minVersion,t.maxVersion)));if(ee(e.id,void 0,"1.15")){const r=`${R}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await Y(r,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var o;t.register(n.id,null!=(o=e[n.id])?o:[])}))}catch(o){console.warn("Error occurred while fetching registries:",o)}}else await Promise.all(n.map((async n=>{try{const o=n.path?`${R}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${R}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await Y(o,(e=>e.values)))}catch(o){console.warn(`Error occurred while fetching registry ${n.id}:`,o)}})))}async function q(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),ee(e.id,void 0,"1.16")){const o=ee(e.id,void 0,"1.15")?`${R}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${R}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await Y(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n]={properties:e[n].properties,default:e[n].states.find((e=>e.default)).properties}})),t}));Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}else{const o=`${R}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await Y(o);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}}async function J(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=j.registries.filter((e=>e.dynamic)).filter((t=>ee(e.id,t.minVersion,t.maxVersion)));if(ee(e.id,"1.16")){const r=`${H}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await Y(r);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(o){console.warn("Error occurred while fetching dynamic registries:",o)}}}async function Y(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),i=t(await r.json());return await n.put(e,new Response(JSON.stringify(i))),i}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${n.message}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const U=["1.15","1.16","1.17"],Z={},X={},K={1.15:g,1.16:p,1.17:f};async function Q(e){return Z[e]||(Z[e]=(async()=>{try{const t=K[e].getCollections(),n={};await W(e,t,n);const o=K[e].getSchemas(t);return Z[e]={collections:t,schemas:o,blockStates:n},Z[e]}catch(t){throw new Error(`Cannot get version "${e}": ${t.message}`)}})()),Z[e]}function ee(e,t,n){const o=j.versions.findIndex((t=>t.id===e)),r=t?j.versions.findIndex((e=>e.id===t)):0,i=n?j.versions.findIndex((e=>e.id===n)):j.versions.length-1;return r<=o&&o<=i}const te=e=>("0"+e.toString(16)).substr(-2);function ne(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,te).join("")}function oe(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function re(e){return`/${e}/`.replaceAll("//","/")}function ie(e){const t=e.replace(/^\//,"").replace(/\/$/,"");return j.generators.find((e=>e.url===t))}function ae(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function se(e,t,n){return Math.max(e,Math.min(t,n))}function le(e,t,n){return n<0?e:n>1?t:ce(n,e,t)}function ce(e,t,n){return t+e*(n-t)}function de(e,t,n,o,r,i){return ce(t,ce(e,n,o),ce(e,r,i))}function ue(e){return e*e*e*(e*(6*e-15)+10)}const he={system:"device_desktop",dark:"moon",light:"sun"};function me({lang:e,title:t,version:n,theme:o,changeTheme:r,language:i,changeLanguage:a}){const s=T.bind(null,e),l=ie(v());return d("header",null,d("div",{class:"title"},d(_,{class:"home-link",href:"/"},ge.home),d("h2",null,t),l&&d(E,{icon:"chevron_down"},j.generators.filter((e=>e.category===(null==l?void 0:l.category)&&ee(n,e.minVersion))).map((e=>d(z,{label:s(e.id),active:e.id===l.id,onClick:()=>w(re(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(E,{icon:"globe"},j.languages.map((({code:e,name:t})=>d(z,{label:t,active:e===i,onClick:()=>a(e)}))))),d("li",null,d(E,{icon:he[o]},Object.entries(he).map((([e,t])=>d(z,{icon:t,label:s(`theme.${e}`),active:e===o,onClick:()=>r(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:s("github")},A.mark_github)))))}const ge={home:d("svg",{width:"32",height:"28",viewBox:"0 0 32 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},d("rect",{width:"26",height:"6",rx:"3",fill:"#7CB45C"}),d("rect",{x:"8",width:"18",height:"6",rx:"3",fill:"#4BA041"}),d("rect",{y:"11",width:"32",height:"6",rx:"3",fill:"#AAA8A8"}),d("rect",{x:"11",y:"11",width:"21",height:"6",rx:"3",fill:"#91908F"}),d("rect",{x:"11",y:"22",width:"21",height:"6",rx:"3",fill:"#70B5C3"}),d("rect",{x:"17",y:"22",width:"15",height:"6",rx:"3",fill:"#4D989B"})),report:d("svg",{width:"30",height:"36",viewBox:"0 0 30 36",xmlns:"http://www.w3.org/2000/svg"},d("path",{d:"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z",fill:"#6ACC5D"}),d("path",{d:"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z",fill:"#FF4C4C"}),d("path",{d:"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z",fill:"#E5B442"}),d("path",{d:"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z",fill:"#2BAD1D"}),d("path",{d:"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z",fill:"#C10B0B"}),d("path",{d:"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z",fill:"#CC8E00"})),sounds:d("svg",{width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},d("circle",{cx:"10",cy:"10",r:"10",fill:"#451475"}),d("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z",fill:"#C5A5E6"}))};function pe(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),n.invalidated(),()=>{null==e||e.removeListener(n)})),[e])}function fe(e,t){if(!e)return;const n=u(),o=u(),r=u([0,0]);c((()=>{const i=e=>{o.current=[e.offsetX,e.offsetY]},a=e=>{if(void 0===o.current)return;const i=e.offsetX-o.current[0],a=e.offsetY-o.current[1];0===i&&0===a||(cancelAnimationFrame(n.current),r.current=[r.current[0]+i,r.current[1]+a],n.current=requestAnimationFrame((()=>{t(...r.current),r.current=[0,0]}))),o.current=[e.offsetX,e.offsetY]},s=e=>{o.current=void 0};return e.addEventListener("mousedown",i),e.addEventListener("mousemove",a),document.body.addEventListener("mouseup",s),()=>{e.removeEventListener("mousedown",i),e.removeEventListener("mousemove",a),document.body.removeEventListener("mouseup",s)}}),[e])}const ve=class{constructor(e){this.xo=256*e(),this.yo=256*e(),this.zo=256*e(),this.p=Array(256);for(let t=0;t<256;t+=1)this.p[t]=t;for(let t=0;t<256;t+=1){const n=e.int32()%(256-t),o=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=o}}noise(e,t,n,o,r){const i=e+this.xo,a=t+this.yo,s=n+this.zo,l=Math.floor(i),c=Math.floor(a),d=Math.floor(s),u=i-l,h=a-c,m=s-d,g=ue(u),p=ue(h),f=ue(m);let v=0;return 0!==o&&(v=Math.floor(Math.min(r,h)/o)*o),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,o){const r=ve.GRADIENT[15&e];return r[0]*t+r[1]*n+r[2]*o}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,o,r,i,a,s,l){const c=this.P(e)+t,d=this.P(c)+n,u=this.P(c+1)+n,h=this.P(e+1)+t,m=this.P(h)+n,g=this.P(h+1)+n;return function(e,t,n,o,r,i,a,s,l,c,d){return ce(n,de(e,t,o,r,i,a),de(e,t,s,l,c,d))}(a,s,l,this.gradDot(this.P(d),o,r,i),this.gradDot(this.P(m),o-1,r,i),this.gradDot(this.P(u),o,r-1,i),this.gradDot(this.P(g),o-1,r-1,i),this.gradDot(this.P(d+1),o,r,i-1),this.gradDot(this.P(m+1),o-1,r,i-1),this.gradDot(this.P(u+1),o,r-1,i-1),this.gradDot(this.P(g+1),o-1,r-1,i-1))}};let _e=ve;_e.GRADIENT=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1],[1,1,0],[0,-1,1],[-1,1,0],[0,-1,-1]];class we{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let o=0;o{const r=e[`${t}_noise`];return new be(n.seed+o,r.firstOctave,r.amplitudes)})),a={};e.biomes.forEach((e=>{a[e.biome]=ke(e.biome,n.biomeColors)}));const s=t.data,l=-n.offset[0]-100+n.res/2,c=-n.offset[1]-100+n.res/2,d=4*t.width/n.res,u=4/n.res;for(let h=0;h<200;h+=n.res)for(let t=0;t<200;t+=n.res){const o=t*d+h*u,m=(h+l)*n.scale,g=(t+c)*n.scale,p=Ce(i,e.biomes,m,g),f=null!=(r=a[p])?r:[128,128,128];s[o]=f[0],s[o+1]=f[1],s[o+2]=f[2],s[o+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const o=t.data,r=ke(e.biome,n.biomeColors),i=4*t.width/n.res,a=4/n.res;for(let s=0;s<200;s+=n.res)for(let e=0;e<200;e+=n.res){const t=e*i+s*a;o[t]=r[0],o[t+1]=r[1],o[t+2]=r[2],o[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var o,r,i,a,s,l;const c={};null==(o=e.biomes)||o.forEach((e=>{c[e]=ke(e,n.biomeColors)}));const d=t.data,u=-n.offset[0]-100+n.res/2,h=-n.offset[1]-100+n.res/2,m=4*t.width/n.res,g=4/n.res,p=(null!=(r=e.scale)?r:2)+2,f=null!=(a=null==(i=e.biomes)?void 0:i.length)?a:0;for(let v=0;v<200;v+=n.res)for(let t=0;t<200;t+=n.res){const o=t*m+v*g,r=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,i=null==(s=e.biomes)?void 0:s[r],a=null!=(l=c[i])?l:[128,128,128];d[o]=a[0],d[o+1]=a[1],d[o+2]=a[2],d[o+3]=255}}(e,t,n)}}function ke(e,t){var n;if(!e)return[128,128,128];const o=null!=(n=t[e])?n:Ve[e];return void 0===o?ae(e):o}function Ce(e,t,n,o){if(!Array.isArray(t)||0===t.length)return"";const r=e.map((e=>e.getValue(n,o,0)));let i=1/0,a="";for(const s of t){const e=xe(s.parameters,{altitude:r[0],temperature:r[1],humidity:r[2],weirdness:r[3],offset:0});e{Ie(t,null==e?void 0:e.decorator,n).forEach((t=>Oe(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Oe(t,n.random()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const i of null!=(o=null==e?void 0:e.features)?o:[])if(n.random()<(null!=(r=null==i?void 0:i.chance)?r:0))return void Oe(t,i.feature,n);Oe(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,i;Oe(t,null==(i=null==e?void 0:e.features)?void 0:i[je(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0,n)],n)}},Ne={chance:(e,t,n)=>{var o;return n.random()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(Pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t)},count_extra:(e,t,n)=>{var o,r;let i=null!=(o=null==e?void 0:e.count)?o:1;return n.random(){var o;return new Array(Pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t).map((e=>[e[0]+je(16,n),e[1],e[2]+je(16,n)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),i=n.biomeInfoNoise.getValue(t[0]/r,0,t[2]/r),a=Math.max(0,Math.ceil((i+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(a).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+je(3,n)+t[0];return[r,Math.max(n.seaLevel,Me[se(0,63,r)]),4*Math.floor(o%4)+1+je(3,n)+t[2]]})),decorated:(e,t,n)=>Ie(t,null==e?void 0:e.outer,n).flatMap((t=>Ie(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,i,a;return Le(t,je(null!=(o=null==e?void 0:e.spread)?o:0,n)+je(null!=(r=null==e?void 0:e.spread)?r:0,n)-(null!=(i=e.spread)?i:0)+(null!=(a=null==e?void 0:e.baseline)?a:0))},emerald_ore:(e,t,n)=>{const o=3+je(6,n);return[...new Array(o)].map((()=>[t[0]+je(16,n),4+je(28,n),t[2]+je(16,n)]))},fire:(e,t,n)=>{const o=1+je(je(Pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+je(16,n),je(128,n),t[2]+je(16,n)]))},glowstone:(e,t,n)=>{const o=je(1+je(Pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+je(16,n),je(128,n),t[2]+je(16,n)]))},heightmap:(e,t,n)=>Le(t,Math.max(n.seaLevel,Me[se(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>Le(t,je(2*Math.max(n.seaLevel,Me[se(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>Le(t,Math.max(n.seaLevel,Me[se(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+je(8,n),t[1],t[2]+4+je(8,n)]],lava_lake:(e,t,n)=>{var o,r;if(0===je((null!=(o=e.chance)?o:1)/10,n)){const o=je(je(248,n)+8,n);if(o[t],range:(e,t,n)=>{var o,r,i;return Le(t,je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0))},range_biased:(e,t,n)=>{var o,r,i;return Le(t,je(je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},range_very_biased:(e,t,n)=>{var o,r,i,a;return Le(t,je(je(je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0),n))},spread_32_above:(e,t,n)=>Le(t,je(t[1]+32,n)),top_solid_heightmap:(e,t)=>Le(t,Me[se(0,63,t[0])]),magma:(e,t,n)=>Le(t,je(t[1]+32,n)),square:(e,t,n)=>[[t[0]+je(16,n),t[1],t[2]+je(16,n)]],water_lake:(e,t,n)=>{var o;return 0===je(null!=(o=e.chance)?o:1,n)?[[t[0]+je(16,n),je(256,n),t[2]+je(16,n)]]:[]}};class Te{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0,this.minLimitPerlinNoise=we.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=we.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=we.fromRange(e+"afiwmco",-7,0),this.depthNoise=we.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),i=this.fillNoiseColumn(n+1);for(let a=this.chunkCountY-1;a>=0;a-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[a*this.chunkHeight+e]=de(n,o,r[a],r[a+1],i[a],i[a+1])}return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,i=o/this.settings.sampling.xz_factor,a=r/this.settings.sampling.y_factor,s=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,i,a);const c=((1-2*l/this.chunkCountY+s)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=le(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=le(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.getValue(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,i,a){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=we.wrap(e*o*d),m=we.wrap(t*r*d),g=we.wrap(n*o*d),p=r*d,f=this.minLimitPerlinNoise.getOctaveNoise(u);f&&(s+=f.noise(h,m,g,p,t*p)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.noise(h,m,g,p,t*p)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.noise(we.wrap(e*i*d),we.wrap(t*a*d),we.wrap(n*i*d),a*d,t*a*d)/d)}d/=2}return le(s/512,l/512,(c/10+1)/2)}}function Be(e,t){return e[t]>0?0:e[t+1]>0?150:255}const Re=["dimension","worldgen/noise_settings","worldgen/configured_feature"],He=[{id:"biome-noise",generator:"dimension",path:new m.Path(["generator","biome_source"]),predicate:e=>e.get(new m.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[o,r]=h(2),[i,a]=h(ne()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),f=u(void 0),v=u(),_=u();c((()=>{v.current=(t=4)=>{"multi_noise"!==m&&(t=1);const n=g.current.getContext("2d");g.current.width=200/t,g.current.height=200/t;const r=n.createImageData(g.current.width,g.current.height);$e(e,r,{biomeColors:{},offset:p.current,scale:o,seed:i,res:t}),n.putImageData(r,0,0),1!==t&&(clearTimeout(f.current),f.current=setTimeout((()=>v.current(1)),150))},_.current=(t,n)=>{const r=200*t/g.current.clientWidth,a=200*n/g.current.clientHeight,s=function(e,t,n,o){var r,i,a,s,l;const[c,d]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);switch(null==(r=null==e?void 0:e.type)?void 0:r.replace(/^minecraft:/,"")){case"multi_noise":return Ce(ye.map(((t,n)=>{const r=e[`${t}_noise`];return new be(o.seed+n,r.firstOctave,r.amplitudes)})),e.biomes,c,d);case"fixed":return e.biome;case"checkerboard":const t=(null!=(i=e.scale)?i:2)+2,n=null!=(s=null==(a=e.biomes)?void 0:a.length)?s:0,r=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[r]}}(e,r,a,{biomeColors:{},offset:p.current,scale:o,seed:i,res:1});l(s)}})),fe(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,o=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+o],v.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},o=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",o),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",o)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):_.current(e,t)}));const w=JSON.stringify(e);c((()=>{t&&v.current()}),[w,o,i,t]);const b=e=>{p.current[0]*=o/e,p.current[1]*=o/e,r(e)};return d(y,null,d("div",{class:"controls"},s&&d(z,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(y,null,d(z,{icon:"dash",onClick:()=>b(1.5*o)}),d(z,{icon:"plus",onClick:()=>b(o/1.5)})),"multi_noise"===m&&d(z,{icon:"sync",onClick:()=>a(ne())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise_settings",path:new m.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const o=T.bind(null,e),[r,i]=h(ne()),[a,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),f=u();c((()=>{f.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const o=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const o=new Te(n.seed);o.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const r=t.data,i=4*t.width;for(let a=0;a{const t=e*g.current.width/g.current.clientWidth;p.current=p.current+t,f.current()}));const v=JSON.stringify(t);return c((()=>{n&&f.current()}),[v,a,l,r,n]),d(y,null,d("div",{class:"controls"},d(E,{icon:"gear"},d(M,{type:"number",label:o("preview.depth"),value:`${a}`,onChange:e=>s(Number(e))}),d(M,{type:"number",label:o("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(z,{icon:"sync",onClick:()=>i(ne())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/configured_feature",path:new m.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[o,r]=h(4),[i,a]=h(ne()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*o,s.current.height=16*o;const r=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const o={placements:[],features:[],random:b(n.seed),biomeInfoNoise:new we(n.seed+"frwynup",0,[1]),seaLevel:63,version:n.version};for(let i=0;i=n.size[0]||i[1]>=n.size[1]||i[2]>=n.size[2])continue;const e=i[2]*(4*t.width)+4*i[0],s=a{n&&setTimeout((()=>l.current()))}),[m,o,i,n]),d(y,null,d("div",{class:"controls"},d(z,{icon:"dash",onClick:()=>r(Math.min(16,o+1))}),d(z,{icon:"plus",onClick:()=>r(Math.max(1,o-1))}),d(z,{icon:"sync",onClick:()=>a(ne())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function Fe({lang:e,model:t,version:n,id:o,shown:r}){const[,i]=h(0);return pe(t,(()=>{i((e=>e+1))})),d(y,null,He.filter((e=>e.generator===o)).map((o=>{const i=null==t?void 0:t.get(o.path);return t&&void 0!==i&&o.predicate(t)?o.preview({lang:e,model:t,data:i,version:n,shown:r}):d(y,null)})))}const We={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){return Array.isArray(n)?n.map(((n,r)=>e.hook(this,t.push(r),n,o))):n},map({children:e,config:t},n,o,r){var i,a;if(void 0===o)return;const s="block_state_map"===(null==(i=t.validation)?void 0:i.validator)?null==(a=r.blockStates)?void 0:a[m.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(o).forEach((t=>{var i;s&&!Object.keys(null!=(i=s.properties)?i:{}).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))})),l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},i=e(t);return Object.keys(i).filter((e=>i[e].enabled(t))).forEach((e=>{r[e]=i[e].hook(this,t.push(e),n[e],o)})),r}};var Ge,qe;(qe=Ge||(Ge={})).ID_LANGUAGE="language",qe.ID_THEME="theme",qe.ID_VERSION="schema_version",qe.ID_INDENT="indentation",qe.getLanguage=function(){var e;return null!=(e=localStorage.getItem(qe.ID_LANGUAGE))?e:"en"},qe.getTheme=function(){var e;return null!=(e=localStorage.getItem(qe.ID_THEME))?e:"dark"},qe.getVersion=function(){const e=localStorage.getItem(qe.ID_VERSION);return e&&U.includes(e)?e:"1.17"},qe.getIndent=function(){var e;return null!=(e=localStorage.getItem(qe.ID_INDENT))?e:"2_spaces"},qe.setLanguage=function(e){e&&localStorage.setItem(qe.ID_LANGUAGE,e)},qe.setTheme=function(e){e&&localStorage.setItem(qe.ID_THEME,e)},qe.setVersion=function(e){e&&localStorage.setItem(qe.ID_VERSION,e)},qe.setIndent=function(e){e&&localStorage.setItem(qe.ID_INDENT,e)};const Je={"2_spaces":2,"4_spaces":4,tabs:"\t"};function Ye({lang:e,name:t,model:n,blockStates:o,doCopy:r,doDownload:i,doImport:a,onError:s}){const l=T.bind(null,e),[g,p]=h(Ge.getIndent()),f=u(null),v=u(null),_=u();c((()=>{_.current=()=>{if(n&&o)try{const e={blockStates:null!=o?o:{}},t=n.schema.hook(We,new m.ModelPath(n),n.data,e);f.current.value=JSON.stringify(t,null,Je[g])+"\n"}catch(e){s(`Error getting JSON output: ${e.message}`),console.error(e),f.current.value=""}}})),pe(n,(()=>{_.current()})),c((()=>{_.current()}),[g]);c((()=>{r&&f.current&&(f.current.select(),document.execCommand("copy"))}),[r]),c((()=>{if(i&&f.current&&v.current){const e=encodeURIComponent(f.current.value);v.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),v.current.setAttribute("download",`${t}.json`),v.current.click()}}),[i]),c((()=>{a&&f.current&&(f.current.value="",f.current.select())}),[a]);return d(y,null,d("div",{class:"controls"},d(E,{icon:"gear"},Object.entries(Je).map((([e])=>d(z,{label:l(`indentation.${e}`),active:g===e,onClick:()=>{return t=e,Ge.setIndent(t),void p(t);var t}}))))),d("textarea",{ref:f,class:"source",onChange:()=>{try{const e=JSON.parse(f.current.value);null==n||n.reset(e,!1)}catch(e){s(`Error importing: ${e.message}`)}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:v,style:"display: none;"}))}function Ue({title:e,link:t,icon:n,children:o}){return d("a",{class:"tool-card",href:t},n&&ge[n],d("div",null,d("h3",null,e),o))}class Ze{constructor(){this.registry={}}register(e){const t=ne();return this.registry[t]=e,t}on(e,t){return this.register((n=>{n.addEventListener(e,(e=>{t(n),e.stopPropagation()}))}))}onChange(e){return this.on("change",e)}onClick(e){return this.on("click",e)}mounted(e){e.querySelectorAll("[data-id]").forEach((e=>{var t,n;const o=e.getAttribute("data-id");null==(n=(t=this.registry)[o])||n.call(t,e)})),this.registry={}}}const Xe={chevron_down:'',chevron_up:'',clippy:'',info:'',issue_opened:'',plus_circle:'',trashcan:''},Ke=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type"],Qe=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],et=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element"],tt=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target"],nt=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],ot=new m.DataModel(m.MapNode(m.StringNode(),m.StringNode()),{historyMax:0}),rt={base:()=>["","",""],boolean({node:e},t,n,o){const r=o.mounter.onClick((()=>{t.model.set(t,!(!e.optional()||!1!==n)&&void 0)})),i=o.mounter.onClick((()=>{t.model.set(t,!e.optional()||!0!==n||void 0)}));return["",`${oe(o.loc("false"))}\n\t\t\t${oe(o.loc("true"))}`,""]},choice({choices:e,config:t,switchNode:n},o,r,i){const a=n.activeCase(o,!0),s=(null==t?void 0:t.context)?new m.ModelPath(o.getModel(),new m.Path(o.getArray(),[t.context])):o,l=(null==t?void 0:t.choiceContext)?new m.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new m.Path([],[t.context]):o,[c,d,u]=a.node.hook(this,s,r,i);if(1===e.length)return[c,d,u];return[c,``+d,u]},list({children:e},t,n,o){const r=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])})),i=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])})),a=``;let s="";return Array.isArray(n)&&(s=n.map(((r,i)=>{const a=o.mounter.onClick((()=>t.model.set(t.push(i),void 0))),s=o.mounter.onClick((()=>{[n[i-1],n[i]]=[n[i],n[i-1]],t.model.set(t,n)})),l=o.mounter.onClick((()=>{[n[i+1],n[i]]=[n[i],n[i+1]],t.model.set(t,n)})),c=t.push(i).contextPush("entry"),d=e.category(c),[u,h,m]=e.hook(this,c,r,o);return`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${lt(o.loc,c,o.mounter)}\n\t\t\t\t\t\t${ct(o.loc,c,o.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${n.length<=1?"":`
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
`}\n\t\t\t\t\t\t${u}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${h}\n\t\t\t\t\t
\n\t\t\t\t\t${m?`
${m}
`:""}\n\t\t\t\t\t
\n\t\t\t\t
`})).join(""),n.length>2&&(s+=`
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`)),["",a,s]},map({children:e,keys:t,config:n},o,r,i){var a,s,l,c,d,u;const h=new m.ModelPath(ot,new m.Path([at(o.toString())])),g=i.mounter.onClick((()=>{const t=h.get();o.model.set(o.push(t),e.default())})),p="block_state_map"===(null==(a=n.validation)?void 0:a.validator)?null==(s=i.blockStates)?void 0:s[m.relativePath(o,n.validation.params.id).get()]:null,f=((null==p?void 0:p.properties)?m.StringNode(null,{enum:Object.keys(null!=(l=p.properties)?l:{})}):t).hook(this,h,null!=(c=h.get())?c:"",i)[1]+``;if(p&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(null!=(d=p.properties)?d:{}).map((([e,t])=>[e,m.StringNode(null,{enum:t})]));return Object.entries(null!=(u=p.properties)?u:{}).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),m.ObjectNode(Object.fromEntries(e)).hook(this,o,r,i)}let v="";return"object"==typeof r&&void 0!==r&&(v=Object.keys(r).map((t=>{var n,a,s,l;const c=i.mounter.onClick((()=>o.model.set(o.push(t),void 0))),d=o.modelPush(t),u=e.category(d),h=p?m.StringNode(null,{enum:null!=(a=null==(n=p.properties)?void 0:n[t])?a:[]}):e;(null==(s=null==p?void 0:p.properties)?void 0:s[t])&&!(null==(l=p.properties)?void 0:l[t].includes(r[t]))&&o.model.errors.add(d,"error.invalid_enum_option",r[t]);const[g,f,v]=h.hook(this,d,r[t],i);return`
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${lt(i.loc,d,i.mounter)}\n\t\t\t\t\t\t\t${ct(i.loc,d,i.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${g}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${f}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${v?`
${v}
`:""}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`})).join("")),["",f,v]},number({integer:e,config:t},n,o,{mounter:r}){var i;const a=r.onChange((o=>{const r=o.value,i=(null==t?void 0:t.color)?parseInt(r.slice(1),16):e?parseInt(r):parseFloat(r);n.model.set(n,i)}));if(null==t?void 0:t.color){return["",``,""]}return["",``,""]},object({node:e,getActiveFields:t,getChildModelPath:n},o,r,i){let a="",s="";e.optional()&&(s=void 0===r?``:``);let l="";if("object"==typeof r&&void 0!==r&&(!e.optional()||void 0!==r)){const e=t(o);l=Object.keys(e).filter((t=>e[t].enabled(o))).map((t=>{const l=e[t],c=n(o,t),d=c.getContext().join(".");if(Qe.includes(d))return"";const u=l.category(c),[h,m,g]=l.hook(this,c,r[t],i);if(0===h.length&&0===m.length&&0===g.length)return"";const p="object"===l.type(c)&&et.includes(d),f=tt.includes(d);return p||f?(a+=`${lt(i.loc,c,i.mounter)}${ct(i.loc,c,i.mounter)}${h}`,s+=m,p?g:""):`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${lt(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${ct(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${h}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${m}\n\t\t\t\t\t
\n\t\t\t\t\t${g?`
${g}
`:""}\n\t\t\t\t
`})).join("")}return[a,s,l]},string({node:e,getValues:t,config:n},o,r,i){var a,s;const l=i.mounter.register((e=>{e.value=null!=r?r:"",e.addEventListener("change",(t=>{const n=e.value;o.model.set(o,0===n.length?void 0:n),t.stopPropagation()}))}));let c;const d=t(),u=o.getContext().join(".");if(nt.includes(u)){const e=new m.ModelPath(ot,new m.Path([at(o.toString())]));c=``}else if(it(n)&&!n.additional||Ke.includes(u)){let t=new m.Path([]);it(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):it(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(t=t.contextPush(n.params.pool)),c=``}else if(it(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=ne();c=`\n\t\t\t\t${0===d.length?"":`\n\t\t\t\t\t${d.map((e=>``}`}else{const e=null==(a=i.blockStates)?void 0:a[m.relativePath(o,n.params.id).get()];c=``}return["",c,""]}};function it(e){return!!(null==e?void 0:e.enum)}function at(e){var t,n=0;for(t=0;t`
{e.getElementsByTagName("span")[0].classList.remove("show")}),{capture:!0,once:!0})}))}">\n\t\t${Xe[t]}\n\t\t${n}\n\t
`,ut=(e,t,n)=>`data-id="${n.register((n=>{const o=()=>{var o;const r=document.createElement("div");r.classList.add("node-menu");const i=e(t.contextPush("help").getContext().join("."));i.endsWith(".help")||r.insertAdjacentHTML("beforeend",`${i}`);const a=t.getContext().join(".");r.insertAdjacentHTML("beforeend",`\n\t\t\t\t`),null==(o=r.querySelector(".menu-item .btn"))||o.addEventListener("click",(()=>{const e=document.createElement("input");e.value=a,n.appendChild(e),e.select(),document.execCommand("copy"),n.removeChild(e)})),n.appendChild(r),document.body.addEventListener("click",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0}),document.body.addEventListener("contextmenu",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0})};n.addEventListener("contextmenu",(e=>{o(),e.preventDefault()}));let r=null;n.addEventListener("touchstart",(()=>{r=setTimeout((()=>{o(),r=null}),800)})),n.addEventListener("touchend",(()=>{r&&(clearTimeout(r),r=null)}))}))}"`;function ht({lang:e,model:t,version:n,blockStates:o,onError:r}){const i=u(null),a=u();return c((()=>{a.current=()=>{if(t&&o)try{const r=new Ze,a={loc:T.bind(null,e),version:n,mounter:r,blockStates:o},s=new m.ModelPath(t),l=t.schema.hook(rt,s,t.data,a),c=t.schema.category(s),d=t.schema.type(s);let u=l[2];l[1]&&(u=`
\n\t\t\t\t\t\t
${l[0]}${l[1]}
\n\t\t\t\t\t\t
${l[2]}
\n\t\t\t\t\t
`),i.current.innerHTML=u,r.mounted(i.current)}catch(a){r(`Error rendering the tree: ${a.message}`),console.error(a),i.current.innerHTML=""}}})),pe(t,(()=>{a.current()})),c((()=>{a.current()}),[e,t,o]),d("div",{ref:i,class:"tree"})}function mt({lang:e}){const t=T.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function gt({lang:e,changeTitle:t,version:n,onChangeVersion:o}){var r;const i=T.bind(null,e),[a,u]=h(null),[g,p]=$();if(g)return d("main",null,d(L,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:p}));const f=ie(v());if(!f)return d("main",null,d(L,{error:`Cannot find generator "${v()}"`}));c((()=>{u(null)}),[f.id,n]);const _=j.versions.filter((e=>ee(e.id,f.minVersion))).map((e=>e.id));t(i("title.generator",i(f.id)),_),ee(n,f.minVersion)||u(`The minimum version for this generator is ${f.minVersion}`);const[w,b]=h(null),[k,C]=h(null);c((()=>{b(null),async function(e){return(await Q(e)).blockStates}(n).then((e=>C(e))),async function(e,t){var n;if(!X[t]||X[t].version!==e){const r=await Q(e),i=null==(n=j.generators.find((e=>e.id===t)))?void 0:n.schema;if(!i)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(i),o=new m.DataModel(n);X[t]?o.reset(X[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),X[t]={model:o,version:e}}catch(o){throw new Error(`Cannot get generator "${t}" for version "${e}": ${o.message}`)}}return X[t].model}(n,f.id).then((e=>b(e))).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id]),pe(w,(()=>{u(null)}));const P=e=>{e.ctrlKey&&"z"===e.key?(x.generatorEvent("undo","Hotkey"),null==w||w.undo()):e.ctrlKey&&"y"===e.key&&(x.generatorEvent("redo","Hotkey"),null==w||w.redo())};c((()=>(document.addEventListener("keyup",P),()=>{document.removeEventListener("keyup",P)})),[w]);const[D,O]=h(""),[I,S]=h([]);c((()=>{(async function(e){return(await Q(e)).collections})(n).then((e=>{const t=(null!=D?D:"").trim().split(" "),n=e.get(f.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&S(n)})).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id,D]);const N=e=>{var t;x.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const o=j.versions.find((t=>t.id===e));try{const e=await fetch(`${H}/${o.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(r){console.warn(`Error occurred while fetching ${t} preset ${n}:`,r)}}(n,null!=(t=f.path)?t:f.id,e).then((e=>{null==w||w.reset(e,!1)}))},[B,R]=h(window.innerWidth>820),[F,W]=h(0),[G,q]=h(0),[J,Y]=h(0),[U,Z]=h(!1),K=Re.includes(f.id);let te=1;K&&(te+=1),B&&(te+=2);return d(y,null,d("main",{class:U?"has-preview":""},d(V,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(z,{icon:"upload",label:i("import"),onClick:()=>{x.generatorEvent("import"),R(!0),Y(J+1)}}),d(E,{icon:"archive",label:i("presets"),relative:!1},d(M,{icon:"search",large:!0,value:D,onChange:O,doSelect:1}),d("div",{class:"result-list"},I.map((e=>d(z,{label:e,onClick:()=>N(e)})))),0===I.length&&d(z,{label:i("no_presets")})),d(E,{icon:"tag",label:n},_.reverse().map((e=>d(z,{label:e,active:e===n,onClick:()=>o(e)})))),d(E,{icon:"kebab_horizontal"},d(z,{icon:"history",label:i("reset"),onClick:()=>{x.generatorEvent("reset"),null==w||w.reset(w.schema.default(),!0)}}),d(z,{icon:"arrow_left",label:i("undo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("undo","Menu"),null==w||w.undo()}}),d(z,{icon:"arrow_right",label:i("redo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("redo","Menu"),null==w||w.redo()}}))),a&&d(L,{error:a,onDismiss:()=>u(null)}),d(ht,l(s({},{lang:e,model:w,version:n,blockStates:k}),{onError:u}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*te}px;`},d("div",{class:"popup-action action-preview"+(K?" shown":""),onClick:()=>{x.generatorEvent("toggle-preview",U?"hidden":"visible"),Z(!U)}},U?A.x_circle:A.play),d("div",{class:"popup-action action-download"+(B?" shown":""),onClick:()=>{x.generatorEvent("download"),q(G+1)}},A.download),d("div",{class:"popup-action action-copy"+(B?" shown":""),onClick:()=>{x.generatorEvent("copy"),W(F+1)}},A.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{x.generatorEvent("toggle-output",B?"hidden":"visible"),R(!B),W(0),q(0),Y(0)}},B?A.chevron_right:A.code)),d("div",{class:"popup-preview"+(U?" shown":"")},d(Fe,l(s({},{lang:e,model:w,version:n,id:f.id}),{shown:U,onError:u}))),d("div",{class:"popup-source"+(B?" shown":"")},d(Ye,l(s({},{lang:e,model:w,blockStates:k,doCopy:F,doDownload:G,doImport:J}),{name:null!=(r=f.schema)?r:"data",onError:u}))))}function pt({lang:e,changeTitle:t}){const n=T.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},j.generators.filter((e=>!e.category)).map((e=>d(Ue,{title:n(e.id),link:re(e.url)}))),d(Ue,{title:n("worldgen"),link:"/worldgen/"}),d("hr",null),d(Ue,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/"},d("p",null,"Analyse your performance reports")),d(Ue,{title:"Minecraft Sounds",icon:"sounds",link:"https://misode.github.io/sounds/"},d("p",null,"Browse through and mix all the vanilla sounds")),d(Ue,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/"},d("p",null,"Convert your 1.16 data packs to 1.17"))))}function ft({lang:e,changeTitle:t}){const n=T.bind(null,e);return t(n("title.generator_category",n("worldgen"))),d("main",null,d("div",{class:"home"},j.generators.filter((e=>"worldgen"===e.category)).map((e=>d(Ue,{title:n(e.id),link:re(e.url)})))))}function vt(){const[e,t]=h("en");c((()=>{(async()=>{const e=Ge.getLanguage();await Promise.all([B("en"),..."en"!==e?[B(e)]:[]]),t(e)})()}),[]);const[n,o]=h(Ge.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[r,i]=h(Ge.getVersion()),[a,u]=h(T(e,"title.home")),m=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,u(e)};return d(y,null,d(me,s({},{lang:e,title:a,version:r,theme:n,language:e,changeLanguage:async e=>{N[e]||await B(e),x.setLanguage(e),Ge.setLanguage(e),t(e)},changeTheme:e=>{x.setTheme(e),Ge.setTheme(e),o(e)}})),d(C,{onChange:e=>{setTimeout((()=>x.pageview(re(e.url))))}},d(pt,s({path:"/"},{lang:e,changeTitle:m})),d(mt,s({path:"/settings/fields"},{lang:e,changeTitle:m})),d(ft,s({path:"/worldgen"},{lang:e,changeTitle:m})),d(gt,l(s({default:!0},{lang:e,version:r,changeTitle:m}),{onChangeVersion:e=>{x.setVersion(e),Ge.setVersion(e),i(e)}}))))}k(d(vt,null),document.body); -//# sourceMappingURL=index.a4103251.js.map +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable,a=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,s=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&a(e,n,t[n]);if(o)for(var n of o(t))i.call(t,n)&&a(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,s as u,l as h,b as m,j as g,c as p,d as f,g as v,L as _,r as w,e as b,f as y,q as $,N as k,R as C}from"./vendor.57c081fd.js";var x;function V({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function z({icon:e,label:t,active:n,class:o,onClick:r}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}`,onClick:r},e&&A[e],t&&d("span",null,t))}function M({icon:e,label:t,large:n,type:o,doSelect:r,value:i,onChange:a}){const s=void 0===a?()=>{}:e=>{const t=e.target.value;"number"===o&&(t.endsWith(".")||isNaN(Number(t)))||null==a||a(t)},l=u(null);return c((()=>{r&&l.current&&l.current.select()}),[r]),d("div",{class:"btn btn-input "+(n?"large-input":""),onClick:e=>e.stopPropagation()},e&&A[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:i,onKeyUp:s}))}function E({icon:e,label:t,relative:n,children:o}){const[r,i]=h(!1),a=()=>{i(!1)};return c((()=>(r&&document.body.addEventListener("click",a),()=>{document.body.removeEventListener("click",a)})),[r]),d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(z,{icon:e,label:t,onClick:()=>i(!0)}),r&&d("div",{class:"btn-group"},o))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.generatorEvent=function(e,t){o(n,e,t)}}(x||(x={}));const A={archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),chevron_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function L({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},A.x),d("h3",null,e),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:"https://github.com/misode/misode.github.io/issues/new",target:"_blank"},"on GitHub")))}var j=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","refs":{"mcdata_master":"13355f7"}},{"id":"1.16","refs":{"mcdata_master":"1.16.4","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","refs":{"mcdata_master":"master","vanilla_datapack_data":"data","vanilla_datapack_summary":"summary"},"dynamic":true}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"worldgen/template-pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"dimension","dynamic":true},{"id":"dimension_type","dynamic":true},{"id":"enchantment"},{"id":"entity_type"},{"id":"fluid"},{"id":"function","dynamic":true},{"id":"float_provider_type","minVersion":"1.17"},{"id":"item"},{"id":"int_provider_type","minVersion":"1.17"},{"id":"height_provider_type","minVersion":"1.17"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_condition_type","minVersion":"1.16"},{"id":"loot_function_type","minVersion":"1.16"},{"id":"loot_nbt_provider_type","minVersion":"1.17"},{"id":"loot_number_provider_type","minVersion":"1.17"},{"id":"loot_pool_entry_type","minVersion":"1.16"},{"id":"loot_score_provider_type","minVersion":"1.17"},{"id":"loot_table","dynamic":true},{"id":"mob_effect"},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"rule_test","minVersion":"1.16"},{"id":"sound_event"},{"id":"stat_type"},{"id":"structure","dynamic":true},{"id":"tag/block","dynamic":true},{"id":"tag/entity_type","dynamic":true},{"id":"tag/fluid","dynamic":true},{"id":"tag/function","dynamic":true},{"id":"tag/item","dynamic":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16"},{"id":"worldgen/biome_source","minVersion":"1.16"},{"id":"worldgen/carver","minVersion":"1.16"},{"id":"worldgen/chunk_generator","minVersion":"1.16"},{"id":"worldgen/configured_carver","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_decorator","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_structure_feature","minVersion":"1.16","dynamic":true},{"id":"worldgen/configured_surface_builder","minVersion":"1.16","dynamic":true},{"id":"worldgen/decorator","minVersion":"1.16"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/processor_list","minVersion":"1.16","dynamic":true},{"id":"worldgen/structure_feature","minVersion":"1.16"},{"id":"worldgen/structure_pool_element","minVersion":"1.16"},{"id":"worldgen/structure_processor","minVersion":"1.16"},{"id":"worldgen/surface_builder","minVersion":"1.16"},{"id":"worldgen/template_pool","minVersion":"1.16","dynamic":true},{"id":"worldgen/tree_decorator_type","minVersion":"1.16"},{"id":"worldgen/trunk_placer_type","minVersion":"1.16"},{"id":"biome","maxVersion":"1.15"},{"id":"worldgen/biome","minVersion":"1.16","path":"processed/reports/biomes"}]}');let P;const D={},O=function(e,t){if(!t)return e();if(void 0===P){const e=document.createElement("link").relList;P=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in D)return;D[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":P,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var I=JSON.parse('{"advancement":"Advancement","button.add":"Add","button.collapse":"Collapse","button.expand":"Expand","button.remove":"Remove","copy":"Copy","dimension_type":"Dimension Type","dimension":"Dimension","download":"Download","fields":"Fields","github":"GitHub","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","loot_table":"Loot Table","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","predicate":"Predicate","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.width":"Width","source_placeholder":"Paste JSON content here","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool"}'),S=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:I});const N={fallback:I};function T(e,t,...n){var o,r,i,a,s;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(s=null!=(a=null!=(i=null==(o=N[e])?void 0:o[t])?i:null==(r=N.en)?void 0:r[t])?a:N.fallback[t])?s:t,n)}async function B(e){const t=j.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return O((()=>import("./de.9324c846.js")),void 0);case"../locales/en.json":return O((()=>Promise.resolve().then((function(){return S}))),void 0);case"../locales/fr.json":return O((()=>import("./fr.cc0e1c18.js")),void 0);case"../locales/it.json":return O((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return O((()=>import("./ja.8c79487c.js")),void 0);case"../locales/pl.json":return O((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return O((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return O((()=>import("./ru.43cf4da1.js")),void 0);case"../locales/sk.json":return O((()=>import("./sk.586a2a32.js")),void 0);case"../locales/zh-cn.json":return O((()=>import("./zh-cn.82c847ac.js")),void 0);case"../locales/zh-tw.json":return O((()=>import("./zh-tw.bb27fc3b.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return O((()=>import("./de.ba8c635a.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return O((()=>import("./en.6ae73cdb.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return O((()=>import("./fr.c1ebc76d.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return O((()=>import("./it.288ea523.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return O((()=>import("./ja.d68f1cee.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return O((()=>import("./pl.2f8b352f.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return O((()=>import("./pt.98ad9b62.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return O((()=>import("./ru.61de7e2f.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return O((()=>import("./zh-cn.655950f4.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return O((()=>import("./zh-tw.a8f28612.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);N[e]=s(s({},n.default),o.default)}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const R="https://raw.githubusercontent.com/Arcensoth/mcdata",H="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",F=[{id:"mcdata_master",hash:"c1adf4f9ba8e81a7683ce775b7f2847bdd118e82",url:R},{id:"vanilla_datapack_summary",hash:"8a2f8022eb88840e6871ff6a72f63d6e64afc323",url:H}];async function W(e,t,n){const o=j.versions.find((t=>t.id===e));o?(console.debug(`[fetchData] ${JSON.stringify(o)}`),o.dynamic&&await Promise.all(F.filter((e=>localStorage.getItem(`cached_${e.id}`)!==e.hash)).map((async e=>{console.debug(`[deleteMatching] ${e.id} '${localStorage.getItem(`cached_${e.id}`)}' < '${e.hash}' ${e.url}/${o.refs[e.id]}`),await async function(e){try{const t=await caches.open("misode-v1");console.debug("[deleteMatching] Opened cache misode-v1");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${t.message}`)}}((t=>t.startsWith(`${e.url}/${o.refs[e.id]}`))),console.debug(`[deleteMatching] Done! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`),localStorage.setItem(`cached_${e.id}`,e.hash),console.debug(`[deleteMatching] Set! ${e.id} ${e.hash} '${localStorage.getItem(`cached_${e.id}`)}'`)}))),await Promise.all([G(o,t),q(o,n),J(o,t)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(j.versions)}`)}async function G(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=j.registries.filter((e=>!e.dynamic)).filter((t=>ee(e.id,t.minVersion,t.maxVersion)));if(ee(e.id,void 0,"1.15")){const r=`${R}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await Y(r,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var o;t.register(n.id,null!=(o=e[n.id])?o:[])}))}catch(o){console.warn("Error occurred while fetching registries:",o)}}else await Promise.all(n.map((async n=>{try{const o=n.path?`${R}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${R}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await Y(o,(e=>e.values)))}catch(o){console.warn(`Error occurred while fetching registry ${n.id}:`,o)}})))}async function q(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),ee(e.id,void 0,"1.16")){const o=ee(e.id,void 0,"1.15")?`${R}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${R}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await Y(o,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n]={properties:e[n].properties,default:e[n].states.find((e=>e.default)).properties}})),t}));Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}else{const o=`${R}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await Y(o);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",n)}}}async function J(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=j.registries.filter((e=>e.dynamic)).filter((t=>ee(e.id,t.minVersion,t.maxVersion)));if(ee(e.id,"1.16")){const r=`${H}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await Y(r);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(o){console.warn("Error occurred while fetching dynamic registries:",o)}}}async function Y(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),i=t(await r.json());return await n.put(e,new Response(JSON.stringify(i))),i}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${n.message}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const U=["1.15","1.16","1.17"],Z={},X={},K={1.15:g,1.16:p,1.17:f};async function Q(e){return Z[e]||(Z[e]=(async()=>{try{const t=K[e].getCollections(),n={};await W(e,t,n);const o=K[e].getSchemas(t);return Z[e]={collections:t,schemas:o,blockStates:n},Z[e]}catch(t){throw new Error(`Cannot get version "${e}": ${t.message}`)}})()),Z[e]}function ee(e,t,n){const o=j.versions.findIndex((t=>t.id===e)),r=t?j.versions.findIndex((e=>e.id===t)):0,i=n?j.versions.findIndex((e=>e.id===n)):j.versions.length-1;return r<=o&&o<=i}const te=e=>("0"+e.toString(16)).substr(-2);function ne(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,te).join("")}function oe(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}function re(e){return`/${e}/`.replaceAll("//","/")}function ie(e){const t=e.replace(/^\//,"").replace(/\/$/,"");return j.generators.find((e=>e.url===t))}function ae(e){const t=Math.abs(function(e){let t=0;for(let n=0;n>8)%256,(t>>16)%256]}function se(e,t,n){return Math.max(e,Math.min(t,n))}function le(e,t,n){return n<0?e:n>1?t:ce(n,e,t)}function ce(e,t,n){return t+e*(n-t)}function de(e,t,n,o,r,i){return ce(t,ce(e,n,o),ce(e,r,i))}function ue(e){return e*e*e*(e*(6*e-15)+10)}const he={system:"device_desktop",dark:"moon",light:"sun"};function me({lang:e,title:t,version:n,theme:o,changeTheme:r,language:i,changeLanguage:a}){const s=T.bind(null,e),l=ie(v());return d("header",null,d("div",{class:"title"},d(_,{class:"home-link",href:"/"},ge.home),d("h2",null,t),l&&d(E,{icon:"chevron_down"},j.generators.filter((e=>e.category===(null==l?void 0:l.category)&&ee(n,e.minVersion))).map((e=>d(z,{label:s(e.id),active:e.id===l.id,onClick:()=>w(re(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(E,{icon:"globe"},j.languages.map((({code:e,name:t})=>d(z,{label:t,active:e===i,onClick:()=>a(e)}))))),d("li",null,d(E,{icon:he[o]},Object.entries(he).map((([e,t])=>d(z,{icon:t,label:s(`theme.${e}`),active:e===o,onClick:()=>r(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",title:s("github")},A.mark_github)))))}const ge={home:d("svg",{width:"32",height:"28",viewBox:"0 0 32 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},d("rect",{width:"26",height:"6",rx:"3",fill:"#7CB45C"}),d("rect",{x:"8",width:"18",height:"6",rx:"3",fill:"#4BA041"}),d("rect",{y:"11",width:"32",height:"6",rx:"3",fill:"#AAA8A8"}),d("rect",{x:"11",y:"11",width:"21",height:"6",rx:"3",fill:"#91908F"}),d("rect",{x:"11",y:"22",width:"21",height:"6",rx:"3",fill:"#70B5C3"}),d("rect",{x:"17",y:"22",width:"15",height:"6",rx:"3",fill:"#4D989B"})),report:d("svg",{width:"30",height:"36",viewBox:"0 0 30 36",xmlns:"http://www.w3.org/2000/svg"},d("path",{d:"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z",fill:"#6ACC5D"}),d("path",{d:"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z",fill:"#FF4C4C"}),d("path",{d:"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z",fill:"#E5B442"}),d("path",{d:"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z",fill:"#2BAD1D"}),d("path",{d:"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z",fill:"#C10B0B"}),d("path",{d:"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z",fill:"#CC8E00"})),sounds:d("svg",{width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},d("circle",{cx:"10",cy:"10",r:"10",fill:"#451475"}),d("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z",fill:"#C5A5E6"}))};function pe(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),n.invalidated(),()=>{null==e||e.removeListener(n)})),[e])}function fe(e,t){if(!e)return;const n=u(),o=u(),r=u([0,0]);c((()=>{const i=e=>{o.current=[e.offsetX,e.offsetY]},a=e=>{if(void 0===o.current)return;const i=e.offsetX-o.current[0],a=e.offsetY-o.current[1];0===i&&0===a||(cancelAnimationFrame(n.current),r.current=[r.current[0]+i,r.current[1]+a],n.current=requestAnimationFrame((()=>{t(...r.current),r.current=[0,0]}))),o.current=[e.offsetX,e.offsetY]},s=e=>{o.current=void 0};return e.addEventListener("mousedown",i),e.addEventListener("mousemove",a),document.body.addEventListener("mouseup",s),()=>{e.removeEventListener("mousedown",i),e.removeEventListener("mousemove",a),document.body.removeEventListener("mouseup",s)}}),[e])}const ve=class{constructor(e){this.xo=256*e(),this.yo=256*e(),this.zo=256*e(),this.p=Array(256);for(let t=0;t<256;t+=1)this.p[t]=t;for(let t=0;t<256;t+=1){const n=e.int32()%(256-t),o=this.p[t];this.p[t]=this.p[t+n],this.p[t+n]=o}}noise(e,t,n,o,r){const i=e+this.xo,a=t+this.yo,s=n+this.zo,l=Math.floor(i),c=Math.floor(a),d=Math.floor(s),u=i-l,h=a-c,m=s-d,g=ue(u),p=ue(h),f=ue(m);let v=0;return 0!==o&&(v=Math.floor(Math.min(r,h)/o)*o),this.sampleAndLerp(l,c,d,u,h-v,m,g,p,f)}gradDot(e,t,n,o){const r=ve.GRADIENT[15&e];return r[0]*t+r[1]*n+r[2]*o}P(e){return 255&this.p[255&e]}sampleAndLerp(e,t,n,o,r,i,a,s,l){const c=this.P(e)+t,d=this.P(c)+n,u=this.P(c+1)+n,h=this.P(e+1)+t,m=this.P(h)+n,g=this.P(h+1)+n;return function(e,t,n,o,r,i,a,s,l,c,d){return ce(n,de(e,t,o,r,i,a),de(e,t,s,l,c,d))}(a,s,l,this.gradDot(this.P(d),o,r,i),this.gradDot(this.P(m),o-1,r,i),this.gradDot(this.P(u),o,r-1,i),this.gradDot(this.P(g),o-1,r-1,i),this.gradDot(this.P(d+1),o,r,i-1),this.gradDot(this.P(m+1),o-1,r,i-1),this.gradDot(this.P(u+1),o,r-1,i-1),this.gradDot(this.P(g+1),o-1,r-1,i-1))}};let _e=ve;_e.GRADIENT=[[1,1,0],[-1,1,0],[1,-1,0],[-1,-1,0],[1,0,1],[-1,0,1],[1,0,-1],[-1,0,-1],[0,1,1],[0,-1,1],[0,1,-1],[0,-1,-1],[1,1,0],[0,-1,1],[-1,1,0],[0,-1,-1]];class we{constructor(e,t,n){this.amplitudes=n,this.noiseLevels=Array(this.amplitudes.length);for(let o=0;o{const r=e[`${t}_noise`];return new be(n.seed+o,r.firstOctave,r.amplitudes)})),a={};e.biomes.forEach((e=>{a[e.biome]=ke(e.biome,n.biomeColors)}));const s=t.data,l=-n.offset[0]-100+n.res/2,c=-n.offset[1]-100+n.res/2,d=4*t.width/n.res,u=4/n.res;for(let h=0;h<200;h+=n.res)for(let t=0;t<200;t+=n.res){const o=t*d+h*u,m=(h+l)*n.scale,g=(t+c)*n.scale,p=Ce(i,e.biomes,m,g),f=null!=(r=a[p])?r:[128,128,128];s[o]=f[0],s[o+1]=f[1],s[o+2]=f[2],s[o+3]=255}}(e,t,n);case"fixed":return function(e,t,n){const o=t.data,r=ke(e.biome,n.biomeColors),i=4*t.width/n.res,a=4/n.res;for(let s=0;s<200;s+=n.res)for(let e=0;e<200;e+=n.res){const t=e*i+s*a;o[t]=r[0],o[t+1]=r[1],o[t+2]=r[2],o[t+3]=255}}(e,t,n);case"checkerboard":return function(e,t,n){var o,r,i,a,s,l;const c={};null==(o=e.biomes)||o.forEach((e=>{c[e]=ke(e,n.biomeColors)}));const d=t.data,u=-n.offset[0]-100+n.res/2,h=-n.offset[1]-100+n.res/2,m=4*t.width/n.res,g=4/n.res,p=(null!=(r=e.scale)?r:2)+2,f=null!=(a=null==(i=e.biomes)?void 0:i.length)?a:0;for(let v=0;v<200;v+=n.res)for(let t=0;t<200;t+=n.res){const o=t*m+v*g,r=((((v+u)*n.scale>>p)+((t+h)*n.scale>>p))%f+f)%f,i=null==(s=e.biomes)?void 0:s[r],a=null!=(l=c[i])?l:[128,128,128];d[o]=a[0],d[o+1]=a[1],d[o+2]=a[2],d[o+3]=255}}(e,t,n)}}function ke(e,t){var n;if(!e)return[128,128,128];const o=null!=(n=t[e])?n:Ve[e];return void 0===o?ae(e):o}function Ce(e,t,n,o){if(!Array.isArray(t)||0===t.length)return"";const r=e.map((e=>e.getValue(n,o,0)));let i=1/0,a="";for(const s of t){const e=xe(s.parameters,{altitude:r[0],temperature:r[1],humidity:r[2],weirdness:r[3],offset:0});e{Ie(t,null==e?void 0:e.decorator,n).forEach((t=>Oe(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Oe(t,n.random()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const i of null!=(o=null==e?void 0:e.features)?o:[])if(n.random()<(null!=(r=null==i?void 0:i.chance)?r:0))return void Oe(t,i.feature,n);Oe(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,i;Oe(t,null==(i=null==e?void 0:e.features)?void 0:i[je(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0,n)],n)}},Ne={chance:(e,t,n)=>{var o;return n.random()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(Pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t)},count_extra:(e,t,n)=>{var o,r;let i=null!=(o=null==e?void 0:e.count)?o:1;return n.random(){var o;return new Array(Pe(null!=(o=null==e?void 0:e.count)?o:1,n)).fill(t).map((e=>[e[0]+je(16,n),e[1],e[2]+je(16,n)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.getValue(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),i=n.biomeInfoNoise.getValue(t[0]/r,0,t[2]/r),a=Math.max(0,Math.ceil((i+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(a).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+je(3,n)+t[0];return[r,Math.max(n.seaLevel,Me[se(0,63,r)]),4*Math.floor(o%4)+1+je(3,n)+t[2]]})),decorated:(e,t,n)=>Ie(t,null==e?void 0:e.outer,n).flatMap((t=>Ie(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,i,a;return Le(t,je(null!=(o=null==e?void 0:e.spread)?o:0,n)+je(null!=(r=null==e?void 0:e.spread)?r:0,n)-(null!=(i=e.spread)?i:0)+(null!=(a=null==e?void 0:e.baseline)?a:0))},emerald_ore:(e,t,n)=>{const o=3+je(6,n);return[...new Array(o)].map((()=>[t[0]+je(16,n),4+je(28,n),t[2]+je(16,n)]))},fire:(e,t,n)=>{const o=1+je(je(Pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+je(16,n),je(128,n),t[2]+je(16,n)]))},glowstone:(e,t,n)=>{const o=je(1+je(Pe(null==e?void 0:e.count,n),n),n);return[...new Array(o)].map((()=>[t[0]+je(16,n),je(128,n),t[2]+je(16,n)]))},heightmap:(e,t,n)=>Le(t,Math.max(n.seaLevel,Me[se(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>Le(t,je(2*Math.max(n.seaLevel,Me[se(0,63,t[0])]),n)),heightmap_world_surface:(e,t,n)=>Le(t,Math.max(n.seaLevel,Me[se(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+je(8,n),t[1],t[2]+4+je(8,n)]],lava_lake:(e,t,n)=>{var o,r;if(0===je((null!=(o=e.chance)?o:1)/10,n)){const o=je(je(248,n)+8,n);if(o[t],range:(e,t,n)=>{var o,r,i;return Le(t,je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0))},range_biased:(e,t,n)=>{var o,r,i;return Le(t,je(je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n))},range_very_biased:(e,t,n)=>{var o,r,i,a;return Le(t,je(je(je((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0),n)+(null!=(i=null==e?void 0:e.bottom_offset)?i:0),n)+(null!=(a=null==e?void 0:e.bottom_offset)?a:0),n))},spread_32_above:(e,t,n)=>Le(t,je(t[1]+32,n)),top_solid_heightmap:(e,t)=>Le(t,Me[se(0,63,t[0])]),magma:(e,t,n)=>Le(t,je(t[1]+32,n)),square:(e,t,n)=>[[t[0]+je(16,n),t[1],t[2]+je(16,n)]],water_lake:(e,t,n)=>{var o;return 0===je(null!=(o=e.chance)?o:1,n)?[[t[0]+je(16,n),je(256,n),t[2]+je(16,n)]]:[]}};class Te{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0,this.minLimitPerlinNoise=we.fromRange(e+"djfqnqd",-15,0),this.maxLimitPerlinNoise=we.fromRange(e+"gowdnqs",-15,0),this.mainPerlinNoise=we.fromRange(e+"afiwmco",-7,0),this.depthNoise=we.fromRange(e+"qphnmeo",-15,0)}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),i=this.fillNoiseColumn(n+1);for(let a=this.chunkCountY-1;a>=0;a-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[a*this.chunkHeight+e]=de(n,o,r[a],r[a+1],i[a],i[a+1])}return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,i=o/this.settings.sampling.xz_factor,a=r/this.settings.sampling.y_factor,s=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,i,a);const c=((1-2*l/this.chunkCountY+s)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=le(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=le(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.getValue(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,i,a){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=we.wrap(e*o*d),m=we.wrap(t*r*d),g=we.wrap(n*o*d),p=r*d,f=this.minLimitPerlinNoise.getOctaveNoise(u);f&&(s+=f.noise(h,m,g,p,t*p)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.noise(h,m,g,p,t*p)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.noise(we.wrap(e*i*d),we.wrap(t*a*d),we.wrap(n*i*d),a*d,t*a*d)/d)}d/=2}return le(s/512,l/512,(c/10+1)/2)}}function Be(e,t){return e[t]>0?0:e[t+1]>0?150:255}const Re=["dimension","worldgen/noise_settings","worldgen/configured_feature"],He=[{id:"biome-noise",generator:"dimension",path:new m.Path(["generator","biome_source"]),predicate:e=>e.get(new m.Path(["generator","type"])).endsWith("noise"),preview:({data:e,shown:t})=>{var n;const[o,r]=h(2),[i,a]=h(ne()),[s,l]=h(void 0),m=null==(n=e.type)?void 0:n.replace(/^minecraft:/,""),g=u(null),p=u([0,0]),f=u(void 0),v=u(),_=u();c((()=>{v.current=(t=4)=>{"multi_noise"!==m&&(t=1);const n=g.current.getContext("2d");g.current.width=200/t,g.current.height=200/t;const r=n.createImageData(g.current.width,g.current.height);$e(e,r,{biomeColors:{},offset:p.current,scale:o,seed:i,res:t}),n.putImageData(r,0,0),1!==t&&(clearTimeout(f.current),f.current=setTimeout((()=>v.current(1)),150))},_.current=(t,n)=>{const r=200*t/g.current.clientWidth,a=200*n/g.current.clientHeight,s=function(e,t,n,o){var r,i,a,s,l;const[c,d]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);switch(null==(r=null==e?void 0:e.type)?void 0:r.replace(/^minecraft:/,"")){case"multi_noise":return Ce(ye.map(((t,n)=>{const r=e[`${t}_noise`];return new be(o.seed+n,r.firstOctave,r.amplitudes)})),e.biomes,c,d);case"fixed":return e.biome;case"checkerboard":const t=(null!=(i=e.scale)?i:2)+2,n=null!=(s=null==(a=e.biomes)?void 0:a.length)?s:0,r=(((c>>t)+(d>>t))%n+n)%n;return null==(l=e.biomes)?void 0:l[r]}}(e,r,a,{biomeColors:{},offset:p.current,scale:o,seed:i,res:1});l(s)}})),fe(g.current,((e,t)=>{const n=200*e/g.current.clientWidth,o=200*t/g.current.clientHeight;p.current=[p.current[0]+n,p.current[1]+o],v.current()})),function(e,t){if(!e)return;const n=e=>{t(e.offsetX,e.offsetY)},o=()=>{t(void 0,void 0)};c((()=>(e.addEventListener("mousemove",n),e.addEventListener("mouseleave",o),()=>{e.removeEventListener("mousemove",n),e.removeEventListener("mouseleave",o)})),[e])}(g.current,((e,t)=>{void 0===e||void 0===t?l(void 0):_.current(e,t)}));const w=JSON.stringify(e);c((()=>{t&&v.current()}),[w,o,i,t]);const b=e=>{p.current[0]*=o/e,p.current[1]*=o/e,r(e)};return d(y,null,d("div",{class:"controls"},s&&d(z,{label:s,class:"no-pointer"}),("multi_noise"===m||"checkerboard"===m)&&d(y,null,d(z,{icon:"dash",onClick:()=>b(1.5*o)}),d(z,{icon:"plus",onClick:()=>b(o/1.5)})),"multi_noise"===m&&d(z,{icon:"sync",onClick:()=>a(ne())})),d("canvas",{ref:g,width:"200",height:"200"}))}},{id:"noise-settings",generator:"worldgen/noise_settings",path:new m.Path(["noise"]),predicate:()=>!0,preview:({lang:e,data:t,shown:n})=>{const o=T.bind(null,e),[r,i]=h(ne()),[a,s]=h(.1),[l,m]=h(.2),g=u(null),p=u(0),f=u();c((()=>{f.current=()=>{const e=g.current.getContext("2d"),n=t.height;g.current.width=n,g.current.height=n;const o=e.createImageData(g.current.width,g.current.height);!function(e,t,n){const o=new Te(n.seed);o.reset(e,n.biomeDepth,n.biomeScale,n.offset,200);const r=t.data,i=4*t.width;for(let a=0;a{const t=e*g.current.width/g.current.clientWidth;p.current=p.current+t,f.current()}));const v=JSON.stringify(t);return c((()=>{n&&f.current()}),[v,a,l,r,n]),d(y,null,d("div",{class:"controls"},d(E,{icon:"gear"},d(M,{type:"number",label:o("preview.depth"),value:`${a}`,onChange:e=>s(Number(e))}),d(M,{type:"number",label:o("preview.scale"),value:`${l}`,onChange:e=>m(Number(e))})),d(z,{icon:"sync",onClick:()=>i(ne())})),d("canvas",{ref:g,width:"200",height:t.height}))}},{id:"decorator",generator:"worldgen/configured_feature",path:new m.Path([]),predicate:()=>!0,preview:({data:e,version:t,shown:n})=>{const[o,r]=h(4),[i,a]=h(ne()),s=u(null),l=u();c((()=>{l.current=()=>{const n=s.current.getContext("2d");s.current.width=16*o,s.current.height=16*o;const r=n.createImageData(s.current.width,s.current.height);!function(e,t,n){const o={placements:[],features:[],random:b(n.seed),biomeInfoNoise:new we(n.seed+"frwynup",0,[1]),seaLevel:63,version:n.version};for(let i=0;i=n.size[0]||i[1]>=n.size[1]||i[2]>=n.size[2])continue;const e=i[2]*(4*t.width)+4*i[0],s=a{n&&setTimeout((()=>l.current()))}),[m,o,i,n]),d(y,null,d("div",{class:"controls"},d(z,{icon:"dash",onClick:()=>r(Math.min(16,o+1))}),d(z,{icon:"plus",onClick:()=>r(Math.max(1,o-1))}),d(z,{icon:"sync",onClick:()=>a(ne())})),d("canvas",{ref:s,width:"64",height:"64"}))}}];function Fe({lang:e,model:t,version:n,id:o,shown:r}){const[,i]=h(0);return pe(t,(()=>{i((e=>e+1))})),d(y,null,He.filter((e=>e.generator===o)).map((o=>{const i=null==t?void 0:t.get(o.path);return t&&void 0!==i&&o.predicate(t)?o.preview({lang:e,model:t,data:i,version:n,shown:r}):d(y,null)})))}const We={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){return Array.isArray(n)?n.map(((n,r)=>e.hook(this,t.push(r),n,o))):n},map({children:e,config:t},n,o,r){var i,a;if(void 0===o)return;const s="block_state_map"===(null==(i=t.validation)?void 0:i.validator)?null==(a=r.blockStates)?void 0:a[m.relativePath(n,t.validation.params.id).get()]:null,l={};return Object.keys(o).forEach((t=>{var i;s&&!Object.keys(null!=(i=s.properties)?i:{}).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))})),l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},i=e(t);return Object.keys(i).filter((e=>i[e].enabled(t))).forEach((e=>{r[e]=i[e].hook(this,t.push(e),n[e],o)})),r}};var Ge,qe;(qe=Ge||(Ge={})).ID_LANGUAGE="language",qe.ID_THEME="theme",qe.ID_VERSION="schema_version",qe.ID_INDENT="indentation",qe.getLanguage=function(){var e;return null!=(e=localStorage.getItem(qe.ID_LANGUAGE))?e:"en"},qe.getTheme=function(){var e;return null!=(e=localStorage.getItem(qe.ID_THEME))?e:"dark"},qe.getVersion=function(){const e=localStorage.getItem(qe.ID_VERSION);return e&&U.includes(e)?e:"1.17"},qe.getIndent=function(){var e;return null!=(e=localStorage.getItem(qe.ID_INDENT))?e:"2_spaces"},qe.setLanguage=function(e){e&&localStorage.setItem(qe.ID_LANGUAGE,e)},qe.setTheme=function(e){e&&localStorage.setItem(qe.ID_THEME,e)},qe.setVersion=function(e){e&&localStorage.setItem(qe.ID_VERSION,e)},qe.setIndent=function(e){e&&localStorage.setItem(qe.ID_INDENT,e)};const Je={"2_spaces":2,"4_spaces":4,tabs:"\t"};function Ye({lang:e,name:t,model:n,blockStates:o,doCopy:r,doDownload:i,doImport:a,onError:s}){const l=T.bind(null,e),[g,p]=h(Ge.getIndent()),f=u(null),v=u(null),_=u();c((()=>{_.current=()=>{if(n&&o)try{const e={blockStates:null!=o?o:{}},t=n.schema.hook(We,new m.ModelPath(n),n.data,e);f.current.value=JSON.stringify(t,null,Je[g])+"\n"}catch(e){s(`Error getting JSON output: ${e.message}`),console.error(e),f.current.value=""}}})),pe(n,(()=>{_.current()})),c((()=>{_.current()}),[g]);c((()=>{r&&f.current&&(f.current.select(),document.execCommand("copy"))}),[r]),c((()=>{if(i&&f.current&&v.current){const e=encodeURIComponent(f.current.value);v.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),v.current.setAttribute("download",`${t}.json`),v.current.click()}}),[i]),c((()=>{a&&f.current&&(f.current.value="",f.current.select())}),[a]);return d(y,null,d("div",{class:"controls"},d(E,{icon:"gear"},Object.entries(Je).map((([e])=>d(z,{label:l(`indentation.${e}`),active:g===e,onClick:()=>{return t=e,Ge.setIndent(t),void p(t);var t}}))))),d("textarea",{ref:f,class:"source",onChange:()=>{try{const e=JSON.parse(f.current.value);null==n||n.reset(e,!1)}catch(e){s(`Error importing: ${e.message}`)}},spellcheck:!1,autocorrect:"off",placeholder:l("source_placeholder")}),d("a",{ref:v,style:"display: none;"}))}function Ue({title:e,link:t,icon:n,children:o}){return d("a",{class:"tool-card",href:t},n&&ge[n],d("div",null,d("h3",null,e),o))}class Ze{constructor(){this.registry={}}register(e){const t=ne();return this.registry[t]=e,t}on(e,t){return this.register((n=>{n.addEventListener(e,(e=>{t(n),e.stopPropagation()}))}))}onChange(e){return this.on("change",e)}onClick(e){return this.on("click",e)}mounted(e){e.querySelectorAll("[data-id]").forEach((e=>{var t,n;const o=e.getAttribute("data-id");null==(n=(t=this.registry)[o])||n.call(t,e)})),this.registry={}}}const Xe={chevron_down:'',chevron_up:'',clippy:'',info:'',issue_opened:'',plus_circle:'',trashcan:''},Ke=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type"],Qe=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],et=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element"],tt=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target"],nt=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],ot=new m.DataModel(m.MapNode(m.StringNode(),m.StringNode()),{historyMax:0}),rt={base:()=>["","",""],boolean({node:e},t,n,o){const r=o.mounter.onClick((()=>{t.model.set(t,!(!e.optional()||!1!==n)&&void 0)})),i=o.mounter.onClick((()=>{t.model.set(t,!e.optional()||!0!==n||void 0)}));return["",`${oe(o.loc("false"))}\n\t\t\t${oe(o.loc("true"))}`,""]},choice({choices:e,config:t,switchNode:n},o,r,i){const a=n.activeCase(o,!0),s=(null==t?void 0:t.context)?new m.ModelPath(o.getModel(),new m.Path(o.getArray(),[t.context])):o,l=(null==t?void 0:t.choiceContext)?new m.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new m.Path([],[t.context]):o,[c,d,u]=a.node.hook(this,s,r,i);if(1===e.length)return[c,d,u];return[c,``+d,u]},list({children:e},t,n,o){const r=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[e.default(),...n])})),i=o.mounter.onClick((()=>{Array.isArray(n)||(n=[]),t.model.set(t,[...n,e.default()])})),a=``;let s="";return Array.isArray(n)&&(s=n.map(((r,i)=>{const a=o.mounter.onClick((()=>t.model.set(t.push(i),void 0))),s=o.mounter.onClick((()=>{[n[i-1],n[i]]=[n[i],n[i-1]],t.model.set(t,n)})),l=o.mounter.onClick((()=>{[n[i+1],n[i]]=[n[i],n[i+1]],t.model.set(t,n)})),c=t.push(i).contextPush("entry"),d=e.category(c),[u,h,m]=e.hook(this,c,r,o);return`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${lt(o.loc,c,o.mounter)}\n\t\t\t\t\t\t${ct(o.loc,c,o.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${n.length<=1?"":`
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
`}\n\t\t\t\t\t\t${u}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${h}\n\t\t\t\t\t
\n\t\t\t\t\t${m?`
${m}
`:""}\n\t\t\t\t\t
\n\t\t\t\t
`})).join(""),n.length>2&&(s+=`
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`)),["",a,s]},map({children:e,keys:t,config:n},o,r,i){var a,s,l,c,d,u;const h=new m.ModelPath(ot,new m.Path([at(o.toString())])),g=i.mounter.onClick((()=>{const t=h.get();o.model.set(o.push(t),e.default())})),p="block_state_map"===(null==(a=n.validation)?void 0:a.validator)?null==(s=i.blockStates)?void 0:s[m.relativePath(o,n.validation.params.id).get()]:null,f=((null==p?void 0:p.properties)?m.StringNode(null,{enum:Object.keys(null!=(l=p.properties)?l:{})}):t).hook(this,h,null!=(c=h.get())?c:"",i)[1]+``;if(p&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(null!=(d=p.properties)?d:{}).map((([e,t])=>[e,m.StringNode(null,{enum:t})]));return Object.entries(null!=(u=p.properties)?u:{}).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),m.ObjectNode(Object.fromEntries(e)).hook(this,o,r,i)}let v="";return"object"==typeof r&&void 0!==r&&(v=Object.keys(r).map((t=>{var n,a,s,l;const c=i.mounter.onClick((()=>o.model.set(o.push(t),void 0))),d=o.modelPush(t),u=e.category(d),h=p?m.StringNode(null,{enum:null!=(a=null==(n=p.properties)?void 0:n[t])?a:[]}):e;(null==(s=null==p?void 0:p.properties)?void 0:s[t])&&!(null==(l=p.properties)?void 0:l[t].includes(r[t]))&&o.model.errors.add(d,"error.invalid_enum_option",r[t]);const[g,f,v]=h.hook(this,d,r[t],i);return`
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${lt(i.loc,d,i.mounter)}\n\t\t\t\t\t\t\t${ct(i.loc,d,i.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${g}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${f}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${v?`
${v}
`:""}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`})).join("")),["",f,v]},number({integer:e,config:t},n,o,{mounter:r}){var i;const a=r.onChange((o=>{const r=o.value,i=(null==t?void 0:t.color)?parseInt(r.slice(1),16):e?parseInt(r):parseFloat(r);n.model.set(n,i)}));if(null==t?void 0:t.color){return["",``,""]}return["",``,""]},object({node:e,getActiveFields:t,getChildModelPath:n},o,r,i){let a="",s="";e.optional()&&(s=void 0===r?``:``);let l="";if("object"==typeof r&&void 0!==r&&(!e.optional()||void 0!==r)){const e=t(o);l=Object.keys(e).filter((t=>e[t].enabled(o))).map((t=>{const l=e[t],c=n(o,t),d=c.getContext().join(".");if(Qe.includes(d))return"";const u=l.category(c),[h,m,g]=l.hook(this,c,r[t],i);if(0===h.length&&0===m.length&&0===g.length)return"";const p="object"===l.type(c)&&et.includes(d),f=tt.includes(d);return p||f?(a+=`${lt(i.loc,c,i.mounter)}${ct(i.loc,c,i.mounter)}${h}`,s+=m,p?g:""):`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${lt(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${ct(i.loc,c,i.mounter)}\n\t\t\t\t\t\t${h}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${m}\n\t\t\t\t\t
\n\t\t\t\t\t${g?`
${g}
`:""}\n\t\t\t\t
`})).join("")}return[a,s,l]},string({node:e,getValues:t,config:n},o,r,i){var a,s;const l=i.mounter.register((e=>{e.value=null!=r?r:"",e.addEventListener("change",(t=>{const n=e.value;o.model.set(o,0===n.length?void 0:n),t.stopPropagation()}))}));let c;const d=t(),u=o.getContext().join(".");if(nt.includes(u)){const e=new m.ModelPath(ot,new m.Path([at(o.toString())]));c=``}else if(it(n)&&!n.additional||Ke.includes(u)){let t=new m.Path([]);it(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):it(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool||(t=t.contextPush(n.params.pool)),c=``}else if(it(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=ne();c=`\n\t\t\t\t${0===d.length?"":`\n\t\t\t\t\t${d.map((e=>``}`}else{const e=null==(a=i.blockStates)?void 0:a[m.relativePath(o,n.params.id).get()];c=``}return["",c,""]}};function it(e){return!!(null==e?void 0:e.enum)}function at(e){var t,n=0;for(t=0;t`
{e.getElementsByTagName("span")[0].classList.remove("show")}),{capture:!0,once:!0})}))}">\n\t\t${Xe[t]}\n\t\t${n}\n\t
`,ut=(e,t,n)=>`data-id="${n.register((n=>{const o=()=>{var o;const r=document.createElement("div");r.classList.add("node-menu");const i=e(t.contextPush("help").getContext().join("."));i.endsWith(".help")||r.insertAdjacentHTML("beforeend",`${i}`);const a=t.getContext().join(".");r.insertAdjacentHTML("beforeend",`\n\t\t\t\t`),null==(o=r.querySelector(".menu-item .btn"))||o.addEventListener("click",(()=>{const e=document.createElement("input");e.value=a,n.appendChild(e),e.select(),document.execCommand("copy"),n.removeChild(e)})),n.appendChild(r),document.body.addEventListener("click",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0}),document.body.addEventListener("contextmenu",(()=>{try{n.removeChild(r)}catch(e){}}),{capture:!0,once:!0})};n.addEventListener("contextmenu",(e=>{o(),e.preventDefault()}));let r=null;n.addEventListener("touchstart",(()=>{r=setTimeout((()=>{o(),r=null}),800)})),n.addEventListener("touchend",(()=>{r&&(clearTimeout(r),r=null)}))}))}"`;function ht({lang:e,model:t,version:n,blockStates:o,onError:r}){const i=u(null),a=u();return c((()=>{a.current=()=>{if(t&&o)try{const r=new Ze,a={loc:T.bind(null,e),version:n,mounter:r,blockStates:o},s=new m.ModelPath(t),l=t.schema.hook(rt,s,t.data,a),c=t.schema.category(s),d=t.schema.type(s);let u=l[2];l[1]&&(u=`
\n\t\t\t\t\t\t
${l[0]}${l[1]}
\n\t\t\t\t\t\t
${l[2]}
\n\t\t\t\t\t
`),i.current.innerHTML=u,r.mounted(i.current)}catch(a){r(`Error rendering the tree: ${a.message}`),console.error(a),i.current.innerHTML=""}}})),pe(t,(()=>{a.current()})),c((()=>{a.current()}),[e,t,o]),d("div",{ref:i,class:"tree"})}function mt({lang:e}){const t=T.bind(null,e);return d("main",null,d("div",{class:"settings"},d("p",null,t("settings.fields.description")),d("ul",{class:"field-list"})))}function gt({lang:e,changeTitle:t,version:n,onChangeVersion:o}){var r;const i=T.bind(null,e),[a,u]=h(null),[g,p]=$();if(g)return d("main",null,d(L,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:p}));const f=ie(v());if(!f)return d("main",null,d(L,{error:`Cannot find generator "${v()}"`}));c((()=>{u(null)}),[f.id,n]);const _=j.versions.filter((e=>ee(e.id,f.minVersion))).map((e=>e.id));t(i("title.generator",i(f.id)),_),ee(n,f.minVersion)||u(`The minimum version for this generator is ${f.minVersion}`);const[w,b]=h(null),[k,C]=h(null);c((()=>{b(null),async function(e){return(await Q(e)).blockStates}(n).then((e=>C(e))),async function(e,t){var n;if(!X[t]||X[t].version!==e){const r=await Q(e),i=null==(n=j.generators.find((e=>e.id===t)))?void 0:n.schema;if(!i)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(i),o=new m.DataModel(n);X[t]?o.reset(X[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),X[t]={model:o,version:e}}catch(o){throw new Error(`Cannot get generator "${t}" for version "${e}": ${o.message}`)}}return X[t].model}(n,f.id).then((e=>b(e))).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id]),pe(w,(()=>{u(null)}));const P=e=>{e.ctrlKey&&"z"===e.key?(x.generatorEvent("undo","Hotkey"),null==w||w.undo()):e.ctrlKey&&"y"===e.key&&(x.generatorEvent("redo","Hotkey"),null==w||w.redo())};c((()=>(document.addEventListener("keyup",P),()=>{document.removeEventListener("keyup",P)})),[w]);const[D,O]=h(""),[I,S]=h([]);c((()=>{(async function(e){return(await Q(e)).collections})(n).then((e=>{const t=(null!=D?D:"").trim().split(" "),n=e.get(f.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&S(n)})).catch((e=>{console.error(e),u(e.message)}))}),[n,f.id,D]);const N=e=>{var t;x.generatorEvent("load-preset",e),async function(e,t,n){console.debug(`[fetchPreset] ${n} ${t} ${n}`);const o=j.versions.find((t=>t.id===e));try{const e=await fetch(`${H}/${o.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`);return await e.json()}catch(r){console.warn(`Error occurred while fetching ${t} preset ${n}:`,r)}}(n,null!=(t=f.path)?t:f.id,e).then((e=>{null==w||w.reset(e,!1)}))},[B,R]=h(window.innerWidth>820),[F,W]=h(0),[G,q]=h(0),[J,Y]=h(0),[U,Z]=h(!1),K=Re.includes(f.id);let te=1;K&&(te+=1),B&&(te+=2);return d(y,null,d("main",{class:U?"has-preview":""},d(V,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(z,{icon:"upload",label:i("import"),onClick:()=>{x.generatorEvent("import"),R(!0),Y(J+1)}}),d(E,{icon:"archive",label:i("presets"),relative:!1},d(M,{icon:"search",large:!0,value:D,onChange:O,doSelect:1}),d("div",{class:"result-list"},I.map((e=>d(z,{label:e,onClick:()=>N(e)})))),0===I.length&&d(z,{label:i("no_presets")})),d(E,{icon:"tag",label:n},_.reverse().map((e=>d(z,{label:e,active:e===n,onClick:()=>o(e)})))),d(E,{icon:"kebab_horizontal"},d(z,{icon:"history",label:i("reset"),onClick:()=>{x.generatorEvent("reset"),null==w||w.reset(w.schema.default(),!0)}}),d(z,{icon:"arrow_left",label:i("undo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("undo","Menu"),null==w||w.undo()}}),d(z,{icon:"arrow_right",label:i("redo"),onClick:e=>{e.stopPropagation(),x.generatorEvent("redo","Menu"),null==w||w.redo()}}))),a&&d(L,{error:a,onDismiss:()=>u(null)}),d(ht,l(s({},{lang:e,model:w,version:n,blockStates:k}),{onError:u}))),d("div",{class:"popup-actions",style:`--offset: -${10+50*te}px;`},d("div",{class:"popup-action action-preview"+(K?" shown":""),onClick:()=>{x.generatorEvent("toggle-preview",U?"hidden":"visible"),Z(!U)}},U?A.x_circle:A.play),d("div",{class:"popup-action action-download"+(B?" shown":""),onClick:()=>{x.generatorEvent("download"),q(G+1)}},A.download),d("div",{class:"popup-action action-copy"+(B?" shown":""),onClick:()=>{x.generatorEvent("copy"),W(F+1)}},A.clippy),d("div",{class:"popup-action action-code shown",onClick:()=>{x.generatorEvent("toggle-output",B?"hidden":"visible"),R(!B),W(0),q(0),Y(0)}},B?A.chevron_right:A.code)),d("div",{class:"popup-preview"+(U?" shown":"")},d(Fe,l(s({},{lang:e,model:w,version:n,id:f.id}),{shown:U,onError:u}))),d("div",{class:"popup-source"+(B?" shown":"")},d(Ye,l(s({},{lang:e,model:w,blockStates:k,doCopy:F,doDownload:G,doImport:J}),{name:null!=(r=f.schema)?r:"data",onError:u}))))}function pt({lang:e,changeTitle:t}){const n=T.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},j.generators.filter((e=>!e.category)).map((e=>d(Ue,{title:n(e.id),link:re(e.url)}))),d(Ue,{title:n("worldgen"),link:"/worldgen/"}),d("hr",null),d(Ue,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/"},d("p",null,"Analyse your performance reports")),d(Ue,{title:"Minecraft Sounds",icon:"sounds",link:"https://misode.github.io/sounds/"},d("p",null,"Browse through and mix all the vanilla sounds")),d(Ue,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/"},d("p",null,"Convert your 1.16 data packs to 1.17"))))}function ft({lang:e,changeTitle:t}){const n=T.bind(null,e);return t(n("title.generator_category",n("worldgen"))),d("main",null,d("div",{class:"home"},j.generators.filter((e=>"worldgen"===e.category)).map((e=>d(Ue,{title:n(e.id),link:re(e.url)})))))}function vt(){const[e,t]=h("en");c((()=>{(async()=>{const e=Ge.getLanguage();await Promise.all([B("en"),..."en"!==e?[B(e)]:[]]),t(e)})()}),[]);const[n,o]=h(Ge.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const[r,i]=h(Ge.getVersion()),[a,u]=h(T(e,"title.home")),m=(e,t=["1.15","1.16","1.17"])=>{document.title=`${e} Minecraft ${t.join(", ")}`,u(e)};return d(y,null,d(me,s({},{lang:e,title:a,version:r,theme:n,language:e,changeLanguage:async e=>{N[e]||await B(e),x.setLanguage(e),Ge.setLanguage(e),t(e)},changeTheme:e=>{x.setTheme(e),Ge.setTheme(e),o(e)}})),d(C,{onChange:e=>{setTimeout((()=>x.pageview(re(e.url))))}},d(pt,s({path:"/"},{lang:e,changeTitle:m})),d(mt,s({path:"/settings/fields"},{lang:e,changeTitle:m})),d(ft,s({path:"/worldgen"},{lang:e,changeTitle:m})),d(gt,l(s({default:!0},{lang:e,version:r,changeTitle:m}),{onChangeVersion:e=>{x.setVersion(e),Ge.setVersion(e),i(e)}}))))}k(d(vt,null),document.body); +//# sourceMappingURL=index.47e29d70.js.map diff --git a/assets/index.a4103251.js.map b/assets/index.47e29d70.js.map similarity index 99% rename from assets/index.a4103251.js.map rename to assets/index.47e29d70.js.map index 8996739a..cb0d8de2 100644 --- a/assets/index.a4103251.js.map +++ b/assets/index.47e29d70.js.map @@ -1 +1 @@ -{"version":3,"file":"index.a4103251.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/Utils.ts","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/previews/noise/ImprovedNoise.ts","../../src/app/previews/noise/PerlinNoise.ts","../../src/app/previews/noise/NormalNoise.ts","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/PreviewPanel.tsx","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/hooks/useOnHover.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/schema/transformOutput.ts","../../src/app/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/components/ToolCard.tsx","../../src/app/schema/Mounter.ts","../../src/app/schema/Octicon.ts","../../src/app/schema/renderHtml.ts","../../src/app/components/Tree.tsx","../../src/app/pages/FieldSettings.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Worldgen.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn
\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: class_, onClick }: BtnProps) {\n\treturn
\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t
\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\ttype?: 'number' | 'text',\n\tdoSelect?: number,\n\tvalue?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, type, doSelect, value, onChange }: BtnInputProps) {\n\tconst onKeyUp = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (type !== 'number' || (!value.endsWith('.') && !isNaN(Number(value)))) {\n\t\t\tonChange?.(value)\n\t\t}\n\t}\n\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\treturn
e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t\t\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { useEffect, useState } from 'preact/hooks'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, children }: BtnMenuProps) {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t}\n\t}, [active])\n\n\treturn
\n\t\t setActive(true)} />\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\tunfold: ,\n\tupload: ,\n\tx: ,\n\tx_circle: ,\n}\n","import { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\treturn
\n\t\t{onDismiss &&
{Octicon.x}
}\n\t\t

{error}

\n\t\t

If you think this is a bug, you can report it on GitHub

\n\t
\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import config from '../config.json'\nimport English from '../locales/en.json'\n\nexport type Localize = (key: string, ...params: string[]) => string\n\ninterface Locale {\n\t[key: string]: string\n}\n\nexport const Locales: {\n\t[key: string]: Locale,\n} = {\n\tfallback: English,\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nexport function locale(language: string, key: string, ...params: string[]): string {\n\tconst value: string | undefined = Locales[language]?.[key]\n\t\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nexport async function loadLocale(language: string) {\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n","import type { CollectionRegistry } from '@mcschema/core'\nimport config from '../config.json'\nimport type { BlockStateRegistry, VersionId } from './Schemas'\nimport { checkVersion } from './Schemas'\n\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`))\n\nconst CACHE_NAME = 'misode-v1'\n\ntype VersionRef = 'mcdata_master' | 'vanilla_datapack_summary' | 'vanilla_datapack_data'\n\ntype Version = {\n\tid: string,\n\trefs: Partial<{ [key in VersionRef]: string }>,\n\tdynamic?: boolean,\n}\n\ndeclare var __MCDATA_MASTER_HASH__: string\ndeclare var __VANILLA_DATAPACK_SUMMARY_HASH__: string\n\nconst mcdataUrl = 'https://raw.githubusercontent.com/Arcensoth/mcdata'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\n\nconst refs: {\n\tid: VersionRef,\n\thash: string,\n\turl: string,\n}[] = [\n\t{\n\t\tid: 'mcdata_master',\n\t\thash: __MCDATA_MASTER_HASH__,\n\t\turl: mcdataUrl,\n\t},\n\t{\n\t\tid: 'vanilla_datapack_summary',\n\t\thash: __VANILLA_DATAPACK_SUMMARY_HASH__,\n\t\turl: vanillaDatapackUrl,\n\t},\n]\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\tconsole.debug(`[fetchData] ${JSON.stringify(version)}`)\n\n\tif (version.dynamic) {\n\t\tawait Promise.all(refs\n\t\t\t.filter(r => localStorage.getItem(`cached_${r.id}`) !== r.hash)\n\t\t\t.map(async r => {\n\t\t\t\tconsole.debug(`[deleteMatching] ${r.id} '${localStorage.getItem(`cached_${r.id}`)}' < '${r.hash}' ${r.url}/${version.refs[r.id]}`)\n\t\t\t\tawait deleteMatching(url => url.startsWith(`${r.url}/${version.refs[r.id]}`))\n\t\t\t\tconsole.debug(`[deleteMatching] Done! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t\tlocalStorage.setItem(`cached_${r.id}`, r.hash)\n\t\t\t\tconsole.debug(`[deleteMatching] Set! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t}))\n\t}\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t\tfetchDynamicRegistries(version, collectionTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => !r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, undefined, '1.15')) {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/registries.json`\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: {[id: string]: string[]} = {}\n\t\t\t\tObject.keys(data).forEach(k => {\n\t\t\t\t\tres[k.slice(10)] = Object.keys(data[k].entries)\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id] ?? [])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching registries:', e)\n\t\t}\n\t} else {\n\t\tawait Promise.all(registries.map(async r => {\n\t\t\ttry {\n\t\t\t\tconst url = r.path\n\t\t\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/${r.path}/data.min.json`\n\t\t\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/registries/${r.id}/data.min.json`\n\t\t\t\ttarget.register(r.id, await getData(url, v => v.values))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`Error occurred while fetching registry ${r.id}:`, e)\n\t\t\t}\n\t\t}))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\tif (checkVersion(version.id, undefined, '1.16')) {\n\t\tconst url = (checkVersion(version.id, undefined, '1.15'))\n\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/blocks.json`\n\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/data.min.json`\n\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: BlockStateRegistry = {}\n\t\t\t\tObject.keys(data).forEach(b => {\n\t\t\t\t\tres[b] = {\n\t\t\t\t\t\tproperties: data[b].properties,\n\t\t\t\t\t\tdefault: data[b].states.find((s: any) => s.default).properties,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t} else {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t}\n}\n\nasync function fetchDynamicRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchDynamicRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, '1.16')) {\n\t\tconst url = `${vanillaDatapackUrl}/${version.refs.vanilla_datapack_summary}/summary/flattened.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching dynamic registries:', e)\n\t\t}\n\t}\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${id} ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst res = await fetch(`${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tconsole.warn(`Error occurred while fetching ${registry} preset ${id}:`, e)\n\t}\n}\n\nasync function getData(url: string, fn: (v: any) => T = (v: any) => v): Promise {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\t}\n}\n","import type { CollectionRegistry, SchemaRegistry } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport config from '../config.json'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties?: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault?: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n}\n\nasync function getVersion(id: VersionId): Promise {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${e.message}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\tconst schemaName = config.generators.find(g => g.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema)\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${e.message}`)\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","import config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(//g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = url.replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n","import { getCurrentUrl, Link, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\nimport type { VersionId } from '../Schemas'\nimport { checkVersion } from '../Schemas'\nimport { cleanUrl, getGenerator } from '../Utils'\n\nconst Themes: Record = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\ntype HeaderProps = {\n\tlang: string,\n\ttitle: string,\n\tversion: VersionId,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, version, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn
\n\t\t
\n\t\t\t{Icons.home}\n\t\t\t

{title}

\n\t\t\t{gen && \n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t}\n\t\t
\n\t\t\n\t
\n}\n","export const Icons = {\n\thome: ,\n\treport: ,\n\tsounds: ,\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\tlistener.invalidated()\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import { useEffect, useRef } from 'preact/hooks'\n\nexport function useOnDrag(element: HTMLElement, drag: (dx: number, dy: number) => unknown) {\n\tif (!element) return\n\n\tconst request = useRef()\n\tconst dragStart = useRef<[number, number] | undefined>()\n\tconst pending = useRef<[number, number]>([0, 0])\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tcancelAnimationFrame(request.current)\n\t\t\t\tpending.current = [pending.current[0] + dx, pending.current[1] + dy]\n\t\t\t\trequest.current = requestAnimationFrame(() => {\n\t\t\t\t\tdrag(...pending.current)\n\t\t\t\t\tpending.current = [0, 0]\n\t\t\t\t})\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = (_e: MouseEvent) => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\n\t\telement.addEventListener('mousedown', onMouseDown)\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousedown', onMouseDown)\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [element])\n}\n","import type seedrandom from 'seedrandom'\nimport { lerp3, smoothstep } from '../../Utils'\n\nexport class ImprovedNoise {\n\tprivate static readonly GRADIENT = [[1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1], [1, 1, 0], [0, -1, 1], [-1, 1, 0], [0, -1, -1]]\n\tprivate readonly p: number[]\n\tpublic readonly xo: number\n\tpublic readonly yo: number\n\tpublic readonly zo: number\n\n\tconstructor(random: seedrandom.prng) {\n\t\tthis.xo = random() * 256\n\t\tthis.yo = random() * 256\n\t\tthis.zo = random() * 256\n\t\tthis.p = Array(256)\n\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tthis.p[i] = i\n\t\t}\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tconst n = random.int32() % (256 - i)\n\t\t\tconst b = this.p[i]\n\t\t\tthis.p[i] = this.p[i + n]\n\t\t\tthis.p[i + n] = b\n\t\t}\n\t}\n\n\tpublic noise(x: number, y: number, z: number, a: number, b: number) {\n\t\tconst x2 = x + this.xo\n\t\tconst y2 = y + this.yo\n\t\tconst z2 = z + this.zo\n\t\tconst x3 = Math.floor(x2)\n\t\tconst y3 = Math.floor(y2)\n\t\tconst z3 = Math.floor(z2)\n\t\tconst x4 = x2 - x3\n\t\tconst y4 = y2 - y3\n\t\tconst z4 = z2 - z3\n\t\tconst x5 = smoothstep(x4)\n\t\tconst y5 = smoothstep(y4)\n\t\tconst z5 = smoothstep(z4)\n\n\t\tlet y6 = 0\n\t\tif (a !== 0) {\n\t\t\ty6 = Math.floor(Math.min(b, y4) / a) * a\n\t\t}\n\n\t\treturn this.sampleAndLerp(x3, y3, z3, x4, y4 - y6, z4, x5, y5, z5)\n\t}\n\n\tprivate gradDot(a: number, b: number, c: number, d: number) {\n\t\tconst grad = ImprovedNoise.GRADIENT[a & 15]\n\t\treturn grad[0] * b + grad[1] * c + grad[2] * d\n\t}\n\n\tprivate P(i: number) {\n\t\treturn this.p[i & 255] & 255\n\t}\n\n\tpublic sampleAndLerp(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) {\n\t\tconst j = this.P(a) + b\n\t\tconst k = this.P(j) + c\n\t\tconst l = this.P(j + 1) + c\n\t\tconst m = this.P(a + 1) + b\n\t\tconst n = this.P(m) + c\n\t\tconst o = this.P(m + 1) + c\n\n\t\tconst p = this.gradDot(this.P(k), d, e, f)\n\t\tconst q = this.gradDot(this.P(n), d - 1, e, f)\n\t\tconst r = this.gradDot(this.P(l), d, e - 1, f)\n\t\tconst s = this.gradDot(this.P(o), d - 1, e - 1, f)\n \n\t\tconst t = this.gradDot(this.P(k + 1), d, e, f - 1)\n\t\tconst u = this.gradDot(this.P(n + 1), d - 1, e, f - 1)\n\t\tconst v = this.gradDot(this.P(l + 1), d, e - 1, f - 1)\n\t\tconst w = this.gradDot(this.P(o + 1), d - 1, e - 1, f - 1)\n\n\t\treturn lerp3(g, h, i, p, q, r, s, t, u, v, w)\n\t}\n}\n","import seedrandom from 'seedrandom'\nimport { ImprovedNoise } from './ImprovedNoise'\n\nexport class PerlinNoise {\n\tprivate readonly noiseLevels: ImprovedNoise[]\n\tprivate readonly amplitudes: number[]\n\tprivate readonly lowestFreqValueFactor: number\n\tprivate readonly lowestFreqInputFactor: number\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.amplitudes = amplitudes\n\n\t\tthis.noiseLevels = Array(this.amplitudes.length)\n\t\tfor (let i = 0; i < this.amplitudes.length; i += 1) {\n\t\t\tthis.noiseLevels[i] = new ImprovedNoise(seedrandom(seed))\n\t\t}\n \n\t\tthis.lowestFreqInputFactor = Math.pow(2, firstOctave)\n\t\tthis.lowestFreqValueFactor = Math.pow(2, (amplitudes.length - 1)) / (Math.pow(2, amplitudes.length) - 1)\n\t}\n\n\tpublic static fromRange(seed: string, min: number, max: number) {\n\t\treturn new PerlinNoise(seed, min, Array(max - min + 1).fill(1))\n\t}\n\n\tpublic getValue(x: number, y: number, z: number, a = 0, b = 0, fixY = false) {\n\t\tlet value = 0\n\t\tlet inputF = this.lowestFreqInputFactor\n\t\tlet valueF = this.lowestFreqValueFactor\n\t\tfor (let i = 0; i < this.noiseLevels.length; i += 1) {\n\t\t\tconst noise = this.noiseLevels[i]\n\t\t\tif (noise) {\n\t\t\t\tvalue += this.amplitudes[i] * noise.noise(\n\t\t\t\t\tPerlinNoise.wrap(x * inputF),\n\t\t\t\t\tfixY ? -noise.yo : PerlinNoise.wrap(y * inputF),\n\t\t\t\t\tPerlinNoise.wrap(z * inputF),\n\t\t\t\t\ta * inputF,\n\t\t\t\t\tb * inputF\n\t\t\t\t) * valueF\n\t\t\t}\n\t\t\tinputF *= 2\n\t\t\tvalueF /= 2\n\t\t}\n\t\treturn value\n\t}\n\n\tpublic getOctaveNoise(i: number) {\n\t\treturn this.noiseLevels[this.noiseLevels.length - 1 - i]\n\t}\n\n\tpublic static wrap(value: number) {\n\t\treturn value - Math.floor(value / 3.3554432E7 + 0.5) * 3.3554432E7\n\t}\n}\n","import { PerlinNoise } from './PerlinNoise'\n\nexport class NormalNoise {\n\tprivate readonly valueFactor: number\n\tprivate readonly first: PerlinNoise\n\tprivate readonly second: PerlinNoise\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.first = new PerlinNoise(seed, firstOctave, amplitudes)\n\t\tthis.second = new PerlinNoise(seed + 'a', firstOctave, amplitudes)\n\n\t\tlet min = +Infinity\n\t\tlet max = -Infinity\n\t\tfor (let i = 0; i < amplitudes.length; i += 1) {\n\t\t\tif (amplitudes[i] !== 0) {\n\t\t\t\tmin = Math.min(min, i)\n\t\t\t\tmax = Math.max(max, i)\n\t\t\t}\n\t\t}\n\n\t\tconst expectedDeviation = 0.1 * (1 + 1 / (max - min + 1))\n\t\tthis.valueFactor = (1/6) / expectedDeviation\n\t}\n\n\tgetValue(x: number, y: number, z: number) {\n\t\tconst x2 = x * 1.0181268882175227\n\t\tconst y2 = y * 1.0181268882175227\n\t\tconst z2 = z * 1.0181268882175227\n\t\treturn (this.first.getValue(x, y, z) + this.second.getValue(x2, y2, z2)) * this.valueFactor\n\t}\n}\n","import { stringToColor } from '../Utils'\nimport { NormalNoise } from './noise/NormalNoise'\n\ntype BiomeColors =Record\ntype BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nconst NoiseMaps = ['altitude', 'temperature', 'humidity', 'weirdness']\n\nexport function biomeSource(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise': return multiNoise(state, img, options)\n\t\tcase 'fixed': return fixed(state, img, options)\n\t\tcase 'checkerboard': return checkerboard(state, img, options)\n\t}\n}\n\nfunction fixed(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst data = img.data\n\tconst color = getBiomeColor(state.biome, options.biomeColors)\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction checkerboard(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes?.forEach((b: string) => {\n\t\tbiomeColorCache[b] = getBiomeColor(b, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tconst shift = (state.scale ?? 2) + 2\n\tconst numBiomes = state.biomes?.length ?? 0\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\tconst b = state.biomes?.[j]\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction multiNoise(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tif (state.preset?.replace(/^minecraft:/, '') === 'nether') {\n\t\tstate = NetherPreset\n\t}\n\n\tconst noise = NoiseMaps.map((id, i) => {\n\t\tconst config = state[`${id}_noise`]\n\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t})\n\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes.forEach((b: any) => {\n\t\tbiomeColorCache[b.biome] = getBiomeColor(b.biome, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst b = closestBiome(noise, state.biomes, xx, yy)\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getBiome(state: any, x: number, y: number, options: BiomeSourceOptions): string | undefined {\n\tconst [xx, yy] = toWorld([x, y], options)\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise':\n\t\t\tconst noise = NoiseMaps.map((id, i) => {\n\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t\t\t})\n\t\t\treturn closestBiome(noise, state.biomes, xx, yy)\n\t\tcase 'fixed': return state.biome\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\treturn state.biomes?.[j]\n\t}\n\treturn undefined\n}\n\nexport function getBiomeColor(biome: string, biomeColors: BiomeColors) {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, y]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst yy = (y - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, yy]\n}\n\nfunction closestBiome(noise: NormalNoise[], biomes: any[], x: number, y: number): string {\n\tif (!Array.isArray(biomes) || biomes.length === 0) return ''\n\tconst n = noise.map(n => n.getValue(x, y, 0))\n\tlet minDist = Infinity\n\tlet minBiome = ''\n\tfor (const b of biomes) {\n\t\tconst dist = fitness(b.parameters, {altitude: n[0], temperature: n[1], humidity: n[2], weirdness: n[3], offset: 0})\n\t\tif (dist < minDist) {\n\t\t\tminDist = dist\n\t\t\tminBiome = b.biome\n\t\t}\n\t}\n\treturn minBiome\n}\n\nfunction fitness(a: any, b: any) {\n\treturn (a.altitude - b.altitude) * (a.altitude - b.altitude) + (a.temperature - b.temperature) * (a.temperature - b.temperature) + (a.humidity - b.humidity) * (a.humidity - b.humidity) + (a.weirdness - b.weirdness) * (a.weirdness - b.weirdness) + (a.offset - b.offset) * (a.offset - b.offset)\n}\n\nconst VanillaColors: Record = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n}\n\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\n","import seedrandom from 'seedrandom'\nimport type { VersionId } from '../Schemas'\nimport { clamp, stringToColor } from '../Utils'\nimport { PerlinNoise } from './noise/PerlinNoise'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: seedrandom.prng,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: string,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = seedrandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(options.seed + 'frwynup', 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tgetPlacements([x * 16, 0, z * 16], state, ctx)\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction nextInt(max: number, ctx: PlacementContext): number {\n\treturn Math.floor(ctx.random() * max)\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + nextInt(1 + (value.spread ?? 0), ctx)\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + nextInt(nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx) + 1, ctx)\n\t\t\tcase 'clamped': return Math.max(value.value.min_inclusive, Math.min(value.value.max_inclusive, sampleInt(value.value.source, ctx)))\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.random() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.random() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[nextInt(config?.features?.length ?? 0, ctx)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.random() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.random() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + nextInt(16, ctx),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + nextInt(16, ctx),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + nextInt(3, ctx) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + nextInt(3, ctx) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = nextInt(config?.spread ?? 0, ctx) + nextInt(config?.spread ?? 0, ctx) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + nextInt(6, ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t4 + nextInt(28, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + nextInt(nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = nextInt(1 + nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, nextInt(y * 2, ctx))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + nextInt(8, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + nextInt(8, ctx),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (nextInt((config.chance ?? 1) / 10, ctx) === 0) {\n\t\t\tconst y = nextInt(nextInt(256 - 8, ctx) + 8, ctx)\n\t\t\tif (y < ctx.seaLevel || nextInt((config?.chance ?? 1) / 8, ctx) == 0) {\n\t\t\t\tconst x = nextInt(16, ctx) + pos[0]\n\t\t\t\tconst z = nextInt(16, ctx) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t]]\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (nextInt(config.chance ?? 1, ctx) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t\tnextInt(256, ctx),\n\t\t\t\tpos[2] + nextInt(16, ctx),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { clampedLerp, lerp2 } from '../../Utils'\nimport { PerlinNoise } from './PerlinNoise'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: string) {\n\t\tthis.minLimitPerlinNoise = PerlinNoise.fromRange(seed + 'djfqnqd', -15, 0)\n\t\tthis.maxLimitPerlinNoise = PerlinNoise.fromRange(seed + 'gowdnqs', -15, 0)\n\t\tthis.mainPerlinNoise = PerlinNoise.fromRange(seed + 'afiwmco', -7, 0)\n\t\tthis.depthNoise = PerlinNoise.fromRange(seed + 'qphnmeo', -15, 0)\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0).zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.getValue(x * 200, 10, this.depthNoise.getOctaveNoise(0).zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.noise(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { NoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale: number,\n\tbiomeDepth: number,\n\toffset: number,\n\twidth: number,\n\tseed: string,\n}\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst generator = new NoiseChunkGenerator(options.seed)\n\tgenerator.reset(state, options.biomeDepth, options.biomeScale, options.offset, 200)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport type { FunctionalComponent } from 'preact'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport type { VersionId } from '../Schemas'\nimport { BiomeSourcePreview, DecoratorPreview, NoiseSettingsPreview } from './previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise_settings', 'worldgen/configured_feature']\n\nexport const Previews: {\n\tid: string,\n\tgenerator: string,\n\tpath: Path,\n\tpredicate: (model: DataModel) => boolean,\n\tpreview: FunctionalComponent<{\n\t\tlang: string,\n\t\tmodel: DataModel,\n\t\tdata: any,\n\t\tversion: VersionId,\n\t\tshown: boolean,\n\t}>,\n}[] = [\n\t{\n\t\tid: 'biome-noise',\n\t\tgenerator: 'dimension',\n\t\tpath: new Path(['generator', 'biome_source']),\n\t\tpredicate: model => model.get(new Path(['generator', 'type'])).endsWith('noise'),\n\t\tpreview: BiomeSourcePreview,\n\t},\n\t{\n\t\tid: 'noise-settings',\n\t\tgenerator: 'worldgen/noise_settings',\n\t\tpath: new Path(['noise']),\n\t\tpredicate: () => true,\n\t\tpreview: NoiseSettingsPreview,\n\t},\n\t{\n\t\tid: 'decorator',\n\t\tgenerator: 'worldgen/configured_feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewPanelProps = {\n\tlang: string,\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ lang, model, version, id, shown }: PreviewPanelProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\treturn <>\n\t\t{Previews.filter(p => p.generator === id).map(p => {\n\t\t\tconst data = model?.get(p.path)\n\t\t\tif (!model || data === undefined || !p.predicate(model)) {\n\t\t\t\treturn <>\n\t\t\t}\n\t\t\treturn p.preview({ lang, model: model!, data, version, shown })\n\t\t})}\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { useOnDrag, useOnHover } from '../../hooks'\nimport { biomeSource, getBiome } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype BiomeSourceProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const BiomeSourcePreview = ({ data, shown }: BiomeSourceProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [focused, setFocused] = useState(undefined)\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst redrawTimeout = useRef(undefined)\n\tconst redraw = useRef()\n\tconst refocus = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = (res = 4) => {\n\t\t\tif (type !== 'multi_noise') res = 1\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = 200 / res\n\t\t\tcanvas.current.height = 200 / res\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tbiomeSource(data, img, { biomeColors: {}, offset: offset.current, scale, seed, res })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t\tif (res !== 1) {\n\t\t\t\tclearTimeout(redrawTimeout.current)\n\t\t\t\tredrawTimeout.current = setTimeout(() => redraw.current(1), 150) as any\n\t\t\t}\n\t\t}\n\t\trefocus.current = (x: number, y: number) => {\n\t\t\tconst x2 = x * 200 / canvas.current.clientWidth\n\t\t\tconst y2 = y * 200 / canvas.current.clientHeight\n\t\t\tconst biome = getBiome(data, x2, y2, { biomeColors: {}, offset: offset.current, scale, seed, res: 1 })\n\t\t\tsetFocused(biome)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx, dy) => {\n\t\tconst x = dx * 200 / canvas.current.clientWidth\n\t\tconst y = dy * 200 / canvas.current.clientHeight\n\t\toffset.current = [offset.current[0] + x, offset.current[1] + y]\n\t\tredraw.current()\n\t})\n\n\tuseOnHover(canvas.current, (x, y) => {\n\t\tif (x === undefined || y === undefined) {\n\t\t\tsetFocused(undefined)\n\t\t} else {\n\t\t\trefocus.current(x, y)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] *= scale / newScale\n\t\toffset.current[1] *= scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t changeScale(scale * 1.5)} />\n\t\t\t\t changeScale(scale / 1.5)} />\n\t\t\t}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t setSeed(hexId())} />}\n\t\t
\n\t\t\n\t\n}\n","import { useEffect } from 'preact/hooks'\n\nexport function useOnHover(element: HTMLElement, hover: (x: number | undefined, y: number | undefined) => unknown) {\n\tif (!element) return\n\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\thover(e.offsetX, e.offsetY)\n\t}\n\tconst onMouseLeave = () => {\n\t\thover(undefined, undefined)\n\t}\n\n\tuseEffect(() => {\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\telement.addEventListener('mouseleave', onMouseLeave)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\telement.removeEventListener('mouseleave', onMouseLeave)\n\t\t}\n\t}, [element])\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useOnDrag } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype NoiseSettingsProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const NoiseSettingsPreview = ({ lang, data, shown }: NoiseSettingsProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef(0)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tconst size = data.height\n\t\t\tcanvas.current.width = size\n\t\t\tcanvas.current.height = size\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tnoiseSettings(data, img, { biomeDepth, biomeScale, offset: offset.current, width: size, seed })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx) => {\n\t\tconst x = dx * canvas.current.width / canvas.current.clientWidth\n\t\toffset.current = offset.current + x\n\t\tredraw.current()\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, biomeDepth, biomeScale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { decorator } from '../../previews'\nimport type { VersionId } from '../../Schemas'\nimport { hexId } from '../../Utils'\n\ntype DecoratorProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tversion: VersionId,\n\tshown: boolean,\n}\nexport const DecoratorPreview = ({ data, version, shown }: DecoratorProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(hexId())\n\n\tconst canvas = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = scale * 16\n\t\t\tcanvas.current.height = scale * 16\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tsetTimeout(() => redraw.current())\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t setScale(Math.min(16, scale + 1))} />\n\t\t\t setScale(Math.max(1, scale - 1))} />\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../Schemas'\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\treturn value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj, props)\n\t\t)\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties ?? {}).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tres[f] = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t})\n\t\treturn res\n\t},\n}\n","import type { VersionId } from './Schemas'\nimport { VersionIds } from './Schemas'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.17'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '.'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { transformOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { Store } from '../Store'\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n}\n\ntype SourcePanelProps = {\n\tlang: string,\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst props = { blockStates: blockStates ?? {} }\n\t\t\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, props)\n\t\t\t\tsource.current.value = JSON.stringify(data, null, INDENT[indent]) + '\\n'\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\tsource.current.value = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent])\n\n\tconst onImport = () => {\n\t\ttry {\n\t\t\tconst data = JSON.parse(source.current.value)\n\t\t\tmodel?.reset(data, false)\n\t\t} catch (e) {\n\t\t\tonError(`Error importing: ${e.message}`)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && source.current) {\n\t\t\tsource.current.select()\n\t\t\tdocument.execCommand('copy')\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && source.current && download.current) {\n\t\t\tconst content = encodeURIComponent(source.current.value)\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.json`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && source.current) {\n\t\t\tsource.current.value = ''\n\t\t\tsource.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\treturn <> \n\t\t
\n\t\t\t\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tlink: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, link, icon, children }: ToolCardProps) {\n\treturn \n\t\t{icon && Icons[icon]}\n\t\t
\n\t\t\t

{title}

\n\t\t\t{children}\n\t\t
\n\t
\n}\n","import { hexId } from '../Utils'\n\nexport class Mounter {\n\tprivate registry: { [id: string]: (el: Element) => void } = {}\n\n\tregister(callback: (el: Element) => void): string {\n\t\tconst id = hexId()\n\t\tthis.registry[id] = callback\n\t\treturn id\n\t}\n\n\ton(type: string, callback: (el: Element) => void): string {\n\t\treturn this.register(el => {\n\t\t\tel.addEventListener(type, evt => {\n\t\t\t\tcallback(el)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t}\n\n\tonChange(callback: (el: Element) => void): string {\n\t\treturn this.on('change', callback)\n\t}\n\n\tonClick(callback: (el: Element) => void): string {\n\t\treturn this.on('click', callback)\n\t}\n\n\tmounted(el: Element): void {\n\t\tel.querySelectorAll('[data-id]').forEach(el => {\n\t\t\tconst id = el.getAttribute('data-id')!\n\t\t\tthis.registry[id]?.(el)\n\t\t})\n\t\tthis.registry = {}\n\t}\n}\n","export const Octicon = {\n\tchevron_down: '',\n\tchevron_up: '',\n\tclippy: '',\n\tinfo: '',\n\tissue_opened: '',\n\tplus_circle: '',\n\ttrashcan: '',\n}\n","import type { EnumOption, Hook, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { Localize } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { hexId, htmlEncode } from '../Utils'\nimport type { Mounter } from './Mounter'\nimport { Octicon } from './Octicon'\n\nexport type TreeProps = {\n\tloc: Localize,\n\tmounter: Mounter,\n\tversion: VersionId,\n\tblockStates: BlockStateRegistry,\n}\n\ndeclare var ResizeObserver: any\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\n/**\n * Renders the node and handles events to update the model\n * @returns string HTML representation of this node using the given data\n */\nexport const renderHtml: Hook<[any, TreeProps], [string, string, string]> = {\n\tbase() {\n\t\treturn ['', '', '']\n\t},\n\n\tboolean({ node }, path, value, props) {\n\t\tconst onFalse = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === false ? undefined : false)\n\t\t})\n\t\tconst onTrue = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === true ? undefined : true)\n\t\t})\n\t\treturn ['', `${htmlEncode(props.loc('false'))}\n\t\t\t${htmlEncode(props.loc('true'))}`, '']\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, props) {\n\t\tconst choice = switchNode.activeCase(path, true)\n\t\tconst pathWithContext = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst pathWithChoiceContext = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, pathWithContext, value, props)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = choice.type\n\t\t\tel.addEventListener('change', () => {\n\t\t\t\tconst c = choices.find(c => c.type === (el as HTMLSelectElement).value) ?? choice\n\t\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t\t})\n\t\t})\n\t\tconst inject = ``\n\n\t\treturn [prefix, inject + suffix, body]\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [children.default(), ...value])\n\t\t})\n\t\tconst onAddBottom = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [...value, children.default()])\n\t\t})\n\t\tconst suffix = ``\n\n\t\tlet body = ''\n\t\tif (Array.isArray(value)) {\n\t\t\tbody = value.map((childValue, index) => {\n\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(index), undefined))\n\t\t\t\tconst onMoveUp = props.mounter.onClick(() => {\n\t\t\t\t\t[value[index - 1], value[index]] = [value[index], value[index - 1]]\n\t\t\t\t\tpath.model.set(path, value)\n\t\t\t\t})\n\t\t\t\tconst onMoveDown = props.mounter.onClick(() => {\n\t\t\t\t\t[value[index + 1], value[index]] = [value[index], value[index + 1]]\n\t\t\t\t\tpath.model.set(path, value)\n\t\t\t\t})\n\t\t\t\tconst childPath = path.push(index).contextPush('entry')\n\t\t\t\tconst category = children.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = children.hook(this, childPath, childValue, props)\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${value.length <= 1 ? '' : `
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
`}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}).join('')\n\t\t\tif (value.length > 2) {\n\t\t\t\tbody += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, props) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), children.default())\n\t\t})\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tconst keyRendered = keysSchema.hook(this, keyPath, keyPath.get() ?? '', props)\n\t\tconst suffix = keyRendered[1] + ``\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties ?? {})\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties ?? {}).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, props)\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined) {\n\t\t\tbody = Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(key), undefined))\n\t\t\t\t\tconst childPath = path.modelPush(key)\n\t\t\t\t\tconst category = children.category(childPath)\n\t\t\t\t\tconst childrenSchema = blockState\n\t\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t\t: children\n\t\t\t\t\tif (blockState?.properties?.[key] && !blockState.properties?.[key].includes(value[key])) {\n\t\t\t\t\t\tpath.model.errors.add(childPath, 'error.invalid_enum_option', value[key])\n\t\t\t\t\t}\n\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = childrenSchema.hook(this, childPath, value[key], props)\n\t\t\t\t\treturn `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tnumber({ integer, config }, path, value, { mounter }) {\n\t\tconst onChange = mounter.onChange(el => {\n\t\t\tconst value = (el as HTMLInputElement).value\n\t\t\tconst parsed = config?.color\n\t\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\t\tpath.model.set(path, parsed)\n\t\t})\n\t\tif (config?.color) {\n\t\t\tconst hex = (value?.toString(16).padStart(6, '0') ?? '000000')\n\t\t\treturn ['', ``, '']\n\t\t}\n\t\treturn ['', ``, '']\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, props) {\n\t\tlet prefix = ''\n\t\tlet suffix = ''\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tsuffix = ``\n\t\t\t} else {\n\t\t\t\tsuffix = ``\n\t\t\t}\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined && (!(node.optional() && value === undefined))) {\n\t\t\tconst activeFields = getActiveFields(path)\n\t\t\tconst activeKeys = Object.keys(activeFields)\n\t\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\tbody = activeKeys.map(k => {\n\t\t\t\tconst field = activeFields[k]\n\t\t\t\tconst childPath = getChildModelPath(path, k)\n\t\t\t\tconst context = childPath.getContext().join('.')\n\t\t\t\tif (hiddenFields.includes(context)) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst category = field.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = field.hook(this, childPath, value[k], props)\n\t\t\t\tif (cPrefix.length === 0 && cSuffix.length === 0 && cBody.length === 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst isFlattened = field.type(childPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\tprefix += `${error(props.loc, childPath, props.mounter)}${help(props.loc, childPath, props.mounter)}${cPrefix}`\n\t\t\t\t\tsuffix += cSuffix\n\t\t\t\t\treturn isFlattened ? cBody : ''\n\t\t\t\t}\n\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t
`\n\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring({ node, getValues, config }, path, value, props) {\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = value ?? ''\n\t\t\tel.addEventListener('change', evt => {\n\t\t\t\tconst newValue = (el as HTMLSelectElement).value\n\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t\tlet suffix\n\t\tconst values = getValues()\n\t\tconst context = path.getContext().join('.')\n\t\tif (nbtFields.includes(context)) {\n\t\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\t\tconst textareaId = props.mounter.register(el => {\n\t\t\t\tconst textarea = el as HTMLTextAreaElement\n\t\t\t\ttextarea.value = value ?? ''\n\t\t\t\ttextarea.addEventListener('change', evt => {\n\t\t\t\t\tconst newValue = textarea.value\n\t\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\t\tevt.stopPropagation()\n\t\t\t\t})\n\t\t\t\tconst sizes = keyPath.get()\n\t\t\t\tif (sizes) {\n\t\t\t\t\ttextarea.style.width = `${sizes.split(' ')[0]}px`\n\t\t\t\t\ttextarea.style.height = `${sizes.split(' ')[1]}px`\n\t\t\t\t}\n\t\t\t\tnew ResizeObserver(() => {\n\t\t\t\t\tkeyPath.set(`${textarea.offsetWidth} ${textarea.offsetHeight}`)\n\t\t\t\t}).observe(el)\n\t\t\t})\n\t\t\tsuffix = ``\n\t\t} else if ((isEnum(config) && !config.additional)\n\t\t\t|| selectRegistries.includes(context)\t) {\n\t\t\tlet context = new Path([])\n\t\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\t\tcontext = context.contextPush(config.enum)\n\t\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t\t}\n\t\t\tsuffix = ``\n\t\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\t\tconst blockState = props.blockStates?.[relativePath(path, config.params.id).get()]\n\t\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\t\tsuffix = ``\n\t\t} else {\n\t\t\tconst datalistId = hexId()\n\t\t\tsuffix = `\n\t\t\t\t${values.length === 0 ? '' : `\n\t\t\t\t\t${values.map(v => ``}`\n\t\t}\n\t\treturn ['', suffix, '']\n\t},\n}\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(loc: Localize, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = loc(key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn htmlEncode(ctx[ctx.length - 1])\n}\n\nfunction error(loc: Localize, path: ModelPath, mounter: Mounter) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return ''\n\tconst message = e[0].params ? loc(e[0].error, ...e[0].params) : loc(e[0].error)\n\treturn popupIcon('node-error', 'issue_opened', htmlEncode(message), mounter)\n}\n\nfunction help(loc: Localize, path: Path, mounter: Mounter) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = loc(key)\n\tif (message === key) return ''\n\treturn popupIcon('node-help', 'info', htmlEncode(message), mounter)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string, mounter: Mounter) => {\n\tconst onClick = mounter.onClick(el => {\n\t\tel.getElementsByTagName('span')[0].classList.add('show')\n\t\tdocument.body.addEventListener('click', () => {\n\t\t\tel.getElementsByTagName('span')[0].classList.remove('show')\n\t\t}, { capture: true, once: true })\n\t})\n\treturn `
\n\t\t${Octicon[icon]}\n\t\t${popup}\n\t
`\n}\n\nconst contextMenu = (loc: Localize, path: ModelPath, mounter: Mounter) => {\n\tconst id = mounter.register(el => {\n\t\tconst openMenu = () => {\n\t\t\tconst popup = document.createElement('div')\n\t\t\tpopup.classList.add('node-menu')\n\n\t\t\tconst message = loc(path.contextPush('help').getContext().join('.'))\n\t\t\tif (!message.endsWith('.help')) {\n\t\t\t\tpopup.insertAdjacentHTML('beforeend', `${message}`)\n\t\t\t}\n\n\t\t\tconst context = path.getContext().join('.')\n\t\t\tpopup.insertAdjacentHTML('beforeend', `\n\t\t\t\t
\n\t\t\t\t\t${Octicon.clippy}\n\t\t\t\t\tContext: \n\t\t\t\t\t${context}\n\t\t\t\t
`)\n\t\t\tpopup.querySelector('.menu-item .btn')?.addEventListener('click', () => {\n\t\t\t\tconst inputEl = document.createElement('input')\n\t\t\t\tinputEl.value = context\n\t\t\t\tel.appendChild(inputEl) \n\t\t\t\tinputEl.select()\n\t\t\t\tdocument.execCommand('copy')\n\t\t\t\tel.removeChild(inputEl)\n\t\t\t})\n\n\t\t\tel.appendChild(popup)\n\t\t\tdocument.body.addEventListener('click', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t\tdocument.body.addEventListener('contextmenu', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t}\n\t\tel.addEventListener('contextmenu', evt => {\n\t\t\topenMenu()\n\t\t\tevt.preventDefault()\n\t\t})\n\t\tlet timer: any = null\n\t\tel.addEventListener('touchstart', () => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\topenMenu()\n\t\t\t\ttimer = null\n\t\t\t}, 800)\n\t\t})\n\t\tel.addEventListener('touchend', () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer)\n\t\t\t\ttimer = null\n\t\t\t}\n\t\t})\n\t})\n\treturn `data-id=\"${id}\"`\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { Mounter } from '../schema/Mounter'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\n\ntype TreePanelProps = {\n\tlang: string,\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ lang, model, version, blockStates, onError }: TreePanelProps) {\n\tconst tree = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst mounter = new Mounter()\n\t\t\t\tconst props = { loc: locale.bind(null, lang), version, mounter, blockStates }\n\t\t\t\tconst path = new ModelPath(model)\n\t\t\t\tconst rendered = model.schema.hook(renderHtml, path, model.data, props)\n\t\t\t\tconst category = model.schema.category(path)\n\t\t\t\tconst type = model.schema.type(path)\n\t\t\t\tlet html = rendered[2]\n\t\t\t\tif (rendered[1]) {\n\t\t\t\t\thtml = `
\n\t\t\t\t\t\t
${rendered[0]}${rendered[1]}
\n\t\t\t\t\t\t
${rendered[2]}
\n\t\t\t\t\t
`\n\t\t\t\t}\n\t\t\t\ttree.current.innerHTML = html\n\t\t\t\tmounter.mounted(tree.current)\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\ttree.current.innerHTML = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tredraw.current()\n\t})\n\n\tuseEffect(() => {\n\t\tredraw.current()\n\t}, [lang, model, blockStates])\n\n\treturn
\n}\n","import { locale } from '../Locales'\n\ntype FieldSettingsProps = {\n\tlang: string,\n\tpath?: string,\n}\nexport function FieldSettings({ lang }: FieldSettingsProps) {\n\tconst loc = locale.bind(null, lang)\n\treturn
\n\t\t
\n\t\t\t

{loc('settings.fields.description')}

\n\t\t\t
    \n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { getCurrentUrl } from 'preact-router'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnInput, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SourcePanel, Tree } from '../components'\nimport { fetchPreset } from '../DataFetcher'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\nimport { getGenerator } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn
\n\t}\n\n\tuseEffect(() => {\n\t\tsetError(null)\n\t}, [gen.id, version])\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, gen.id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetError(null)\n\t})\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(model.schema.default(), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t}\n\t}, [model])\n\n\tconst [presetFilter, setPresetFilter] = useState('')\n\tconst [presetResults, setPresetResults] = useState([])\n\tuseEffect(() => {\n\t\tgetCollections(version)\n\t\t\t.then(collections => {\n\t\t\t\tconst terms = (presetFilter ?? '').trim().split(' ')\n\t\t\t\tconst presets = collections.get(gen.id)\n\t\t\t\t\t.map(p => p.slice(10))\n\t\t\t\t\t.filter(p => terms.every(t => p.includes(t)))\n\t\t\t\tif (presets) {\n\t\t\t\t\tsetPresetResults(presets)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, gen.path ?? gen.id, id).then(preset => {\n\t\t\tmodel?.reset(preset, false)\n\t\t})\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\n\tconst hasPreview = HasPreview.includes(gen.id)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{presetResults.map(preset => loadPreset(preset)} />)}\n\t\t\t\t\t
\n\t\t\t\t\t{presetResults.length === 0 && }\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t onChangeVersion(v)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t{error && setError(null)} />}\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.download}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.clippy}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype HomeProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Home({ lang, changeTitle }: HomeProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.home'))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t

Analyse your performance reports

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Browse through and mix all the vanilla sounds

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Convert your 1.16 data packs to 1.17

\n\t\t\t
\n\t\t
\n\t
\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype WorldgenProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Worldgen({ lang, changeTitle }: WorldgenProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.generator_category', loc('worldgen')))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => g.category === 'worldgen').map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { FieldSettings, Generator, Home, Worldgen } from './pages'\nimport type { VersionId } from './Schemas'\nimport { Store } from './Store'\nimport { cleanUrl } from './Utils'\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('en')\n\tconst changeLanguage = async (language: string) => {\n\t\tif (!Locales[language]) {\n\t\t\tawait loadLocale(language)\n\t\t}\n\t\tAnalytics.setLanguage(language)\n\t\tStore.setLanguage(language)\n\t\tsetLanguage(language)\n\t}\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst changeTheme = (theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = (version: VersionId) => {\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions = ['1.15', '1.16', '1.17']) => {\n\t\tdocument.title = `${title} Minecraft ${versions.join(', ')}`\n\t\tsetTitle(title)\n\t}\n\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n}\n\nrender(
, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","class_","onClick","Octicon","large","doSelect","value","onChange","onKeyUp","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","relative","children","setActive","useState","hider","body","addEventListener","removeEventListener","Btn","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","archive","xmlns","viewBox","width","height","fill-rule","d","arrow_left","arrow_right","chevron_down","chevron_right","clippy","code","dash","device_desktop","download","eye","eye_closed","gear","globe","history","kebab_horizontal","link","mark_github","moon","play","plus","search","sun","sync","tag","three_bars","unfold","upload","x","x_circle","error","onDismiss","error2","href","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","forEach","localStorage","removeItem","v","mcdataUrl","vanillaDatapackUrl","refs","hash","url","versionId","collectionTarget","blockStateTarget","versions","debug","JSON","stringify","dynamic","filter","getItem","r","async","matches","cache","caches","open","promises","request","keys","push","delete","length","warn","message","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","k","Object","entries","register","path","values","b","properties","states","s2","assign","vanilla_datapack_summary","fn","cacheResponse","ok","json","fetchResponse","fetch","responseData","put","Response","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","collections","getCollections","blockStates","fetchData","getSchemas","Error","minVersionId","maxVersionId","findIndex","dec2hex","dec","toString","substr","arr","Uint8Array","crypto","getRandomValues","Array","from","join","str","replaceAll","trimmedUrl","generators","g","h","Math","abs","i","imul","charCodeAt","hashString","a2","c","max","min","lerp","f","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","gen","getGenerator","getCurrentUrl","Link","Icons","home","BtnMenu","route","cleanUrl","name","th","fill","rx","y","report","sounds","cx","cy","clip-rule","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","random","xo","yo","zo","p","n","int32","this","y2","z","x2","y22","z2","x3","floor","y3","z3","x4","y4","z4","x5","smoothstep","y5","z5","y6","sampleAndLerp","grad","_ImprovedNoise","GRADIENT","j","P","l2","m","o","lerp2","lerp3","gradDot","ImprovedNoise","seed","firstOctave","amplitudes","noiseLevels","seedrandom","lowestFreqInputFactor","pow","lowestFreqValueFactor","PerlinNoise","fixY","inputF","valueF","noise","wrap","first","second","Infinity","expectedDeviation","valueFactor","getValue","NoiseMaps","state","img","options","preset","NetherPreset","config2","NormalNoise","biomeColorCache","biomes","biome","getBiomeColor","biomeColors","ox","offset","oy","row","col","xx","scale","yy","closestBiome","color","multiNoise","fixed","shift","numBiomes","checkerboard","VanillaColors","stringToColor","isArray","n2","minDist","minBiome","dist","fitness","parameters","altitude","temperature","humidity","weirdness","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_mountains","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:mountains","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_hills","minecraft:wooded_mountains","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","feature","placements","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","biomeInfoNoise","noise_level","below_noise","above_noise","count_noise_biased","factor","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","seaLevel","clamp","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","square","water_lake","minLimitPerlinNoise","fromRange","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","depth","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","noise1","fillNoiseColumn","noise2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","falloff","density_factor","density_offset","top_slide","size","clampedLerp","bottom_slide","minLimitNoise","maxLimitNoise","mainNoise","HasPreview","Previews","generator","Path","predicate","get","shown","setScale","setSeed","hexId","focused","setFocused","canvas","redrawTimeout","redraw","refocus","getContext","createImageData","putImageData","setTimeout","clientWidth","clientHeight","toWorld","getBiome","hover","onMouseLeave","changeScale","newScale","setBiomeDepth","setBiomeScale","NoiseChunkGenerator","reset","iterateNoiseColumn","reverse","getColor","BtnInput","setCount","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","relativePath","includes","getActiveFields","activeFields","enabled","Store","Store2","getLanguage","getTheme","getVersion","getIndent","setIndent","indent","INDENT","2_spaces","4_spaces","tabs","doCopy","doDownload","doImport","onError","retransform","ModelPath","execCommand","content","encodeURIComponent","setAttribute","click","changeIndent","parse","spellcheck","autocorrect","placeholder","style","callback","registry","el","on","querySelectorAll","el2","getAttribute","chevron_up","info","issue_opened","plus_circle","trashcan","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","node","onFalse","mounter","set","optional","onTrue","htmlEncode","choices","choice","activeCase","pathWithContext","context","getModel","getArray","pathWithChoiceContext","choiceContext","prefix","suffix","c2","change","pathLocale","contextPush","onAdd","onAddBottom","childValue","onRemove","onMoveUp","onMoveDown","childPath","cPrefix","cSuffix","cBody","help","contextMenu","keyPath","enum","last","errors","add","ObjectNode","fromEntries","modelPush","childrenSchema","integer","parsed","parseFloat","padStart","getChildModelPath","field","isFlattened","isInlined","getValues","inputId","newValue","textarea","sizes","split","ResizeObserver","offsetWidth","offsetHeight","observe","isEnum","additional","context2","pool","datalistId","result","popupIcon","popup","getElementsByTagName","classList","capture","once","openMenu","insertAdjacentHTML","inputEl","removeChild","preventDefault","timer","tree","Mounter","rendered","html","innerHTML","mounted","changeTitle","onChangeVersion","setError","errorBoundary","errorRetry","useErrorBoundary","ErrorPanel","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","presets","every","t","loadPreset","vanilla_datapack_data","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","__spreadProps","PreviewPanel","SourcePanel","ToolCard","loadLocale","documentElement","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Worldgen","Generator","version2","render","Main"],"mappings":"mjBAAiBA,cCQEC,KAAEA,KAAMC,cAChB,6BACAC,eAAe,sBAAmBC,SACvC,eAAgBC,mBACRC,SAEV,MAEK,MAAD,CAAKC,oBAAkB,mBAAmBC,eAAcP,EAAMQ,MAAM,eAAeP,GAAAA,gBCPvEQ,KAAEA,QAAMC,SAAOC,EAAQH,MAAOI,UAAQC,aACjD,MAAD,CAAKL,MAAO,MAAMG,EAAS,UAAY,KAAKC,EAAS,IAAIA,IAAW,KAAMC,QAAAA,GAC/EJ,GAAQK,EAAQL,GAChBC,KAAU,OAAD,KAAOA,gBCAMD,KAAEA,QAAMC,QAAOK,OAAOf,WAAMgB,QAAUC,WAAOC,UAC/DC,OAAuB,IAAbD,EAAyB,OAAYE,UAC9CC,EAASD,EAAEE,OAA4BL,MAChC,WAATjB,IAAuBqB,EAAME,SAAS,MAASC,MAAMC,OAAOJ,iBACpDA,IAIPK,EAAMC,EAAyB,gBAC3B,KACLX,GAAYU,EAAIE,WACfA,QAAQC,WAEX,CAACb,MAEI,MAAD,CAAKR,MAAO,kBAAiBO,EAAQ,cAAgB,IAAMF,WAAcO,EAAEU,mBAChFrB,GAAQK,EAAQL,GAChBC,KAAU,OAAD,KAAOA,KAChB,QAAD,CAAOgB,IAAAA,EAAU1B,KAAK,OAAOiB,MAAAA,EAAcE,QAAAA,iBCnBrBV,KAAEA,QAAMC,WAAOqB,WAAUC,UACzCrB,EAAQsB,GAAaC,GAAS,GAE/BC,EAAQ,QACH,cAGD,KACLxB,YACMyB,KAAKC,iBAAiB,QAASF,GAElC,cACGC,KAAKE,oBAAoB,QAASH,MAE1C,CAACxB,MAEI,MAAD,CAAKH,MAAO,aAAwB,IAAbuB,EAAqB,eAAiB,OAClEQ,EAAD,CAAK9B,KAAAA,EAAYC,MAAAA,EAAcG,QAAS,IAAMoB,GAAU,KACvDtB,KAAW,MAAD,CAAKH,MAAM,aACpBwB,cJ9BaQ,SACVC,EAAU,OACVC,EAAe,uBAONC,EAAkBC,EAAgBlC,MAC7C,OAAQ,QAASiC,EAAUC,EAAQlC,cAGpBmC,EAAe5B,MAC9B,MAAO,YAAY4B,IAAS5B,KAGhB6B,kBAASC,MACrB,MAAO,OAAQA,MACf,OAAQ,eAGIC,qBAAYC,KAhBP,EAiBIA,KAClBR,EAAS,eAAgBQ,MAGhBC,kBAASC,KAvBP,EAwBIA,KACfV,EAAS,YAAaU,MAGbC,oBAAWC,KA3BP,EA4BIA,KACjBX,EAAc,cAAeW,MAGpBC,oBAAWC,KA9BP,EA+BIA,KACjBb,EAAc,cAAea,MAGpBC,wBAAeZ,EAAgBlC,KACxCgC,EAAcE,EAAQlC,KA3CbX,oBKChB0D,UAAU,MAAD,CAAKC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qcACxHC,aAAa,MAAD,CAAKN,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8JAC3HE,cAAc,MAAD,CAAKP,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,iKAC5HG,eAAe,MAAD,CAAKR,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,oIAC7HI,gBAAgB,MAAD,CAAKT,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,mIAC9HK,SAAS,MAAD,CAAKV,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,gYACvHM,OAAO,MAAD,CAAKX,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,+NACrHO,OAAO,MAAD,CAAKZ,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,wEACrHQ,iBAAiB,MAAD,CAAKb,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,kaAC/HS,WAAW,MAAD,CAAKd,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,wMACzHU,MAAM,MAAD,CAAKf,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,6nBACpHW,aAAa,MAAD,CAAKhB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,4xBAC3HY,OAAO,MAAD,CAAKjB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qvEACrHa,QAAQ,MAAD,CAAKlB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,isBACtHc,UAAU,MAAD,CAAKnB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,ySACxHe,mBAAmB,MAAD,CAAKpB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAME,EAAE,wHAC7GgB,OAAO,MAAD,CAAKrB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qWACrHiB,cAAc,MAAD,CAAKtB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8jBAC5HkB,OAAO,MAAD,CAAKvB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sLACrHmB,OAAO,MAAD,CAAKxB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,kLACrHoB,OAAO,MAAD,CAAKzB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,oIACrHqB,SAAS,MAAD,CAAK1B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sIACvHsB,MAAM,MAAD,CAAK3B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,gtBACpHuB,OAAO,MAAD,CAAK5B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sZACrHwB,MAAM,MAAD,CAAK7B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qWACpHyB,aAAa,MAAD,CAAK9B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sMAC3H0B,SAAS,MAAD,CAAK/B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAME,EAAE,iiBACnG2B,SAAS,MAAD,CAAKhC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qMACvH4B,IAAI,MAAD,CAAKjC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,2LAClH6B,WAAW,MAAD,CAAKlC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8SCxB7F8B,kBAAOC,aAC3B,MAAD,CAAKtF,MAAM,SAChBsF,KAAc,MAAD,CAAKtF,MAAM,gBAAgBK,QAASiF,GAAYhF,EAAQ6E,KACrE,KAAD,KAAKI,KACJ,IAAD,KAAG,mDAA+C,IAAD,CAAGC,KAAK,wDAAwD1E,OAAO,UAAS,2tKCVnI,IAAI2E,EAAU,MAAMC,EAAO,GAAgBC,EAAgB,SAAiBC,EAAYC,OAExDA,SACjBD,YAGO,IAAdH,EAAyB,OAEnBK,EAAUC,SAASC,cAAc,QAAQF,UAG3CA,GAAWA,EAAQG,UAAYH,EAAQG,SAAS,iBAC1C,gBACA,iBAEPC,QAAQC,IAAIN,EAAKO,KAAKC,OAErBA,KAAOX,WAGNW,IAAO,QACNC,EAAQD,EAAItF,SAAS,QACrBwF,EAAcD,EAAQ,qBAAuB,MAE/CP,SAASS,cAAc,cAAcH,MAAQE,kBAI3ChC,EAAOwB,SAASC,cAAc,iBAE/BS,IAAMH,EAAQ,aAAeb,EAC7Ba,MACII,GAAK,WACLC,YAAc,MAElBnB,KAAOa,WAEHO,KAAKC,YAAYtC,GACtB+B,EACO,IAAIJ,SAAQ,CAACY,EAAKC,OAChBlF,iBAAiB,OAAQiF,KACzBjF,iBAAiB,QAASkF,iBAGvCC,MAAK,IAAMpB,smDCnCNqB,EAET,CACHC,SAAUC,cAUY1E,EAAkB2E,KAAgBC,wBAPzD,SAA6B5G,EAAe4G,UACpC5G,EAAM6G,QAAQ,oBACdjF,EAAQkF,SAASC,EAAMC,MAAM,mBACR,sBAAXpF,IAAuBgF,EAAOhF,GAASmF,KAOjDE,CAF2B,SAAA,SAAA,SAAA,WAAQjF,aAAY2E,MAClD,WAAQO,aAAKP,MAAQH,EAAQC,SAASE,MAAQA,EAChBC,oBAGF5E,SAC1BmF,EAAaC,EAAOC,UAAUC,SAAaC,EAAKnE,OAASpB,QAC1DmF,eACCK,4kCAAaC,CAAO,cAAczF,UAClC0F,GAAgC,IAAvBP,EAAWQ,oxCAChBC,CAAO,4CAA4C5F,YACrDA,GAAY6F,OAAKL,EAAKM,SAAYJ,EAAOI,SC7BlD,CAAC,OAAQ,OAAQ,QAAQC,YAAaC,aAAaC,WAAW,SAASC,OAEvE,MAaMC,EAAY,qDACZC,EAAqB,8DAErBC,EAIA,CACL,CACCrJ,GAAI,gBACJsJ,KAAM,2CACNC,IAAKJ,GAEN,CACCnJ,GAAI,2BACJsJ,KAAM,2CACNC,IAAKH,qBAIyBI,EAAmBC,EAAsCC,SAClFtG,EAAUgF,EAAOuB,SAASrB,SAAUY,EAAElJ,KAAOwJ,IAC9CpG,WAIGwG,MAAM,eAAeC,KAAKC,UAAU1G,MAExCA,EAAQ2G,eACLtD,QAAQC,IAAI2C,EAChBW,WAAYhB,aAAaiB,QAAQ,UAAUC,EAAElK,QAAUkK,EAAEZ,OACzD3C,KAAIwD,MAAMD,YACFN,MAAM,oBAAoBM,EAAElK,OAAOgJ,aAAaiB,QAAQ,UAAUC,EAAElK,aAAakK,EAAEZ,SAASY,EAAEX,OAAOnG,EAAQiG,KAAKa,EAAElK,aA4IhImK,eAA8BC,aAEtBC,QAAcC,OAAOC,KA3LV,qBA4LTX,MAAM,iDACRY,EAA+B,aAE1BC,WAAiBJ,EAAMK,OAC7BN,EAAQK,EAAQlB,QACVoB,KAAKN,EAAMO,OAAOH,YAGrBb,MAAM,6BAA6BY,EAASK,iCAC9CpE,QAAQC,IAAI8D,SACVrJ,WACA2J,KAAK,oDAAwD3J,EAAE4J,YAzJ/DC,KAAsBzB,EAAI0B,WAAW,GAAGf,EAAEX,OAAOnG,EAAQiG,KAAKa,EAAElK,iBAC9D4J,MAAM,0BAA0BM,EAAElK,MAAMkK,EAAEZ,SAASN,aAAaiB,QAAQ,UAAUC,EAAElK,uBAC/EkL,QAAQ,UAAUhB,EAAElK,KAAMkK,EAAEZ,cACjCM,MAAM,yBAAyBM,EAAElK,MAAMkK,EAAEZ,SAASN,aAAaiB,QAAQ,UAAUC,EAAElK,oBAIxFyG,QAAQC,IAAI,CACjByE,EAAgB/H,EAASqG,GACzB2B,EAAmBhI,EAASsG,GAC5B2B,EAAuBjI,EAASqG,cApBxB7D,MAAM,+BAA+BxC,QAAcyG,KAAKC,UAAU1B,EAAOuB,aAwBnFQ,iBAA+B/G,EAAkB/B,WACxCuI,MAAM,qBAAqBxG,EAAQpD,YACrCsL,EAAalD,EAAOkD,WACxBtB,YAAaE,EAAEH,UACfC,WAAYuB,GAAanI,EAAQpD,GAAIkK,EAAEsB,WAAYtB,EAAEuB,iBAEnDF,GAAanI,EAAQpD,QAAI,EAAW,QAAS,OAC1CuJ,EAAM,GAAGJ,KAAa/F,EAAQiG,KAAKqC,4DAElClD,QAAamD,EAAQpC,GAAMqC,UAC1BvE,EAAgC,iBAC/BqD,KAAKkB,GAAM7C,eACb8C,EAAE7D,MAAM,KAAO8D,OAAOpB,KAAKkB,EAAKC,GAAGE,YAEjC1E,OAEG0B,qBACHiD,SAAS9B,EAAElK,GAAI,WAAKkK,EAAElK,OAAO,aAE7BmB,WACA2J,KAAK,4CAA6C3J,eAGrDsF,QAAQC,IAAI4E,EAAW3E,KAAIwD,MAAMD,cAE/BX,EAAMW,EAAE+B,KACX,GAAG9C,KAAa/F,EAAQiG,KAAKqC,iBAAiBxB,EAAE+B,qBAChD,GAAG9C,KAAa/F,EAAQiG,KAAKqC,8CAA8CxB,EAAElK,qBACzEgM,SAAS9B,EAAElK,SAAU2L,EAAQpC,MAAUL,EAAEgD,gBACxC/K,WACA2J,KAAK,0CAA0CZ,EAAElK,MAAOmB,QAMpEgJ,iBAAkC/G,EAAkB/B,cAC3CuI,MAAM,wBAAwBxG,EAAQpD,MAC1CuL,GAAanI,EAAQpD,QAAI,EAAW,QAAS,OAC1CuJ,EAAOgC,GAAanI,EAAQpD,QAAI,EAAW,QAC9C,GAAGmJ,KAAa/F,EAAQiG,KAAKqC,8CAC7B,GAAGvC,KAAa/F,EAAQiG,KAAKqC,iEAGzBlD,QAAamD,EAAQpC,GAAMqC,UAC1BvE,EAA0B,iBACzBqD,KAAKkB,GAAM7C,eACboD,GAAK,CACRC,WAAYR,EAAKO,GAAGC,WACpBtD,QAAS8C,EAAKO,GAAGE,OAAO/D,MAAMgE,GAAWA,EAAExD,UAASsD,eAG/C/E,YAEDkF,OAAOlL,EAAQmH,SACdrH,WACA2J,KAAK,iDAAkD3J,QAE1D,OACAoI,EAAM,GAAGJ,KAAa/F,EAAQiG,KAAKqC,4EAElClD,QAAamD,EAAQpC,UACpBgD,OAAOlL,EAAQmH,SACdrH,WACA2J,KAAK,iDAAkD3J,KAKlEgJ,iBAAsC/G,EAAkB/B,WAC/CuI,MAAM,4BAA4BxG,EAAQpD,YAC5CsL,EAAalD,EAAOkD,WACxBtB,WAAYE,EAAEH,UACdC,WAAYuB,GAAanI,EAAQpD,GAAIkK,EAAEsB,WAAYtB,EAAEuB,iBAEnDF,GAAanI,EAAQpD,GAAI,QAAS,OAC/BuJ,EAAM,GAAGH,KAAsBhG,EAAQiG,KAAKmD,gEAE3ChE,QAAamD,EAAQpC,KAChBR,eACHiD,SAAS9B,EAAElK,GAAIwI,EAAK0B,EAAElK,cAEtBmB,WACA2J,KAAK,oDAAqD3J,KAgBrEgJ,iBAAgCZ,EAAakD,EAAoB,CAACvD,GAAWA,cAErEmB,QAAcC,OAAOC,KAjKV,qBAkKTX,MAAM,oCAAwCL,WAChDmD,QAAsBrC,EAAMtC,MAAMwB,MAEpCmD,GAAiBA,EAAcC,kBAC1B/C,MAAM,oCAAoCL,WACrCmD,EAAcE,eAGpBhD,MAAM,2BAA2BL,WACnCsD,QAAsBC,MAAMvD,GAC5BwD,EAAeN,QAASI,EAAcD,qBACtCvC,EAAM2C,IAAIzD,EAAK,IAAI0D,SAASpD,KAAKC,UAAUiD,KAC1CA,QACC5L,WACA2J,KAAK,6CAAiD3J,EAAE4J,mBAExDnB,MAAM,2BAA2BL,WACnCsD,QAAsBC,MAAMvD,UACbkD,QAASI,EAAcD,eCnLjCM,EAAa,CAAC,OAAQ,OAAQ,QAmBrCC,EAA+D,GAM/DC,EAAoC,GAEpCC,EAKF,CACHC,KAAMC,EACNC,KAAMC,EACNC,KAAMC,GAGPxD,iBAA0BnK,UACpBmN,EAASnN,OACJA,wBAED4N,EAAcP,EAAcrN,GAAI6N,iBAChCC,EAAkC,SAClCC,EAAU/N,EAAI4N,EAAaE,SAC3BnF,EAAU0E,EAAcrN,GAAIgO,WAAWJ,YACpC5N,GAAM,CAAE4N,YAAAA,EAAajF,QAAAA,EAASmF,YAAAA,GAChCX,EAASnN,SACRmB,SACF,IAAI8M,MAAM,uBAAuBjO,OAAQmB,EAAE4J,iBAK7CoC,EAASnN,eAqCYwJ,EAAmB0E,EAAkCC,SAC3E/K,EAAUgF,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOwJ,IAClDgC,EAAa0C,EAAe9F,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOkO,IAAgB,EACpFzC,EAAa0C,EAAe/F,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOmO,IAAgB/F,EAAOuB,SAASkB,OAAS,SAC5GW,GAAcpI,GAAWA,GAAWqI,ECjG5C,MAAM4C,GAAWC,QAAuBA,EAAIC,SAAS,KAAKC,uBAEpC3D,EAAS,QAC1B4D,EAAM,IAAIC,WAAW7D,EAAS,iBAC3B8D,OAAOC,gBAAgBH,GACvBI,MAAMC,KAAKL,EAAKJ,IAASU,KAAK,gBAGXC,UACnBA,EAAInH,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QACpEA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,UAAUA,QAAQ,MAAO,sBAUzC0B,SACjB,IAAIA,KAAO0F,WAAW,KAAM,iBAGP1F,SACtB2F,EAAa3F,EAAI1B,QAAQ,MAAO,IAAIA,QAAQ,MAAO,WAClDO,EAAO+G,WAAW7G,SAAU8G,EAAE7F,MAAQ2F,gBAGhBF,SACvBK,EAAIC,KAAKC,aAjBWjD,OACtB+C,EAAI,UACAG,EAAI,EAAGA,EAAIlD,EAAEzB,OAAQ2E,MACxBF,KAAKG,KAAK,GAAIJ,GAAK/C,EAAEoD,WAAWF,GAAK,SACnCH,EAaYM,CAAWX,UACvB,CAACK,EAAI,QAAW,GAAK,QAAW,IAAM,iBAGxBO,EAAWzD,EAAW0D,UACpCP,KAAKQ,IAAIF,EAAGN,KAAKS,IAAI5D,EAAG0D,gBAGJD,EAAWzD,EAAW0D,UAC7CA,EAAI,EACAD,EACGC,EAAI,EACP1D,EAEA6D,GAAKH,EAAGD,EAAGzD,eAICyD,EAAWzD,EAAW0D,UACnC1D,EAAIyD,KAASzD,eAGCyD,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,UACrED,GAAK7D,EAAG6D,GAAKJ,EAAGC,EAAG/L,GAAIkM,GAAKJ,EAAGzO,EAAG8O,gBAOfvK,UACnBA,EAAIA,EAAIA,MAAc,IAAI,IAAM,IC3DxC,MAAMwK,GAA+C,CACpDC,OAAQ,iBACRC,KAAM,OACNC,MAAO,oBAYe9H,KAAEA,QAAM+H,UAAOlN,QAASF,cAAOqN,WAAavN,iBAAUwN,UACtEC,EAAMC,EAAOC,KAAK,KAAMpI,GACxBqI,EAAMC,GAAaC,cAEjB,SAAD,OACL,MAAD,CAAKvQ,MAAM,WACTwQ,EAAD,CAAMxQ,MAAM,YAAYwF,KAAK,KAAKiL,GAAMC,QACvC,KAAD,KAAKX,GACJM,KAAQM,EAAD,CAAS1Q,KAAK,gBACpB4H,EAAO+G,WACNnF,WAAYoF,EAAE1M,6BAAkBA,WAAY6I,GAAanI,EAASgM,EAAE5D,cACpE7E,UACCrE,EAAD,CAAK7B,MAAOgQ,EAAIrB,EAAEpP,IAAKU,OAAQ0O,EAAEpP,KAAO4Q,EAAI5Q,GAAIY,QAAS,IAAMuQ,EAAMC,GAAShC,EAAE7F,cAInF,MAAD,OACE,KAAD,OACE,KAAD,OACE2H,EAAD,CAAS1Q,KAAK,SACZ4H,EAAOC,UAAU1B,KAAI,EAAGvC,KAAAA,EAAMiN,KAAAA,OAC7B/O,EAAD,CAAK7B,MAAO4Q,EAAM3Q,OAAQ0D,IAASpB,EAClCpC,QAAS,IAAM4P,EAAepM,WAIjC,KAAD,OACE8M,EAAD,CAAS1Q,KAAM0P,GAAOhN,IACpB4I,OAAOC,QAAQmE,IAAQvJ,KAAI,EAAE2K,EAAI9Q,OAChC8B,EAAD,CAAK9B,KAAAA,EAAYC,MAAOgQ,EAAI,SAASa,KAAO5Q,OAAQ4Q,IAAOpO,EAC1DtC,QAAS,IAAM2P,EAAYe,WAI9B,KAAD,CAAI/Q,MAAM,YACR,IAAD,CAAGwF,KAAK,6CAA6C1E,OAAO,SAAS2F,IAAI,aAAasJ,MAAOG,EAAI,WAC/F5P,EAAQkE,2BC1DdkM,OAAO,MAAD,CAAKtN,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAY6N,KAAK,OAAO9N,MAAM,gCAA8B,OAAD,CAAME,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,IAAI/B,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAME,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,aACncG,SAAS,MAAD,CAAK/N,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAYD,MAAM,gCAA8B,OAAD,CAAMK,EAAE,6HAA6HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,+HAA+HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,kIAAkIyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,6HAA6HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,sIAAsIyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,sIAAsIyN,KAAK,aACv+BI,SAAS,MAAD,CAAKhO,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAYD,MAAM,gCAA8B,SAAD,CAAQmO,GAAG,KAAKC,GAAG,KAAK3H,EAAE,KAAKqH,KAAK,cAAY,OAAD,CAAM1N,YAAU,UAAUiO,YAAU,UAAUhO,EAAE,utCAAutCyN,KAAK,0BCA93CQ,EAAqCC,SACvDC,EAAW,CAChBC,cACKH,KACSA,QAKL,gBACFI,YAAYF,KACVD,cACF,gBACCI,eAAeH,MAErB,CAACF,gBChBqBM,EAAsBC,OAC1CD,eAEC5H,EAAU/I,IACV6Q,EAAY7Q,IACZ8Q,EAAU9Q,EAAyB,CAAC,EAAG,OAEnC,WACH+Q,EAAetR,MACVQ,QAAU,CAACR,EAAEuR,QAASvR,EAAEwR,UAE7BC,EAAezR,YACM,IAAtBoR,EAAU5Q,qBACRkR,EAAK1R,EAAEuR,QAAUH,EAAU5Q,QAAQ,GACnCmR,EAAK3R,EAAEwR,QAAUJ,EAAU5Q,QAAQ,GAC5B,OAAY,IAAPmR,yBACIrI,EAAQ9I,WACrBA,QAAU,CAAC6Q,EAAQ7Q,QAAQ,GAAKkR,EAAIL,EAAQ7Q,QAAQ,GAAKmR,KACzDnR,QAAUoR,uBAAsB,UAC/BP,EAAQ7Q,WACRA,QAAU,CAAC,EAAG,SAGdA,QAAU,CAACR,EAAEuR,QAASvR,EAAEwR,UAE7BK,EAAaC,MACRtR,aAAU,YAGbS,iBAAiB,YAAaqQ,KAC9BrQ,iBAAiB,YAAawQ,YAC7BzQ,KAAKC,iBAAiB,UAAW4Q,GACnC,OACE3Q,oBAAoB,YAAaoQ,KACjCpQ,oBAAoB,YAAauQ,YAChCzQ,KAAKE,oBAAoB,UAAW2Q,MAE5C,CAACX,ICpCE,eAONH,YAAYgB,QACNC,GAAgB,IAAXD,SACLE,GAAgB,IAAXF,SACLG,GAAgB,IAAXH,SACLI,EAAIzE,MAAM,aAENW,EAAI,EAAGA,EAAI,IAAKA,GAAK,OACxB8D,EAAE9D,GAAKA,UAEJA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,OAC1B+D,EAAIL,EAAOM,aAAiBhE,GAC5BrD,EAAIsH,KAAKH,EAAE9D,QACZ8D,EAAE9D,GAAKiE,KAAKH,EAAE9D,EAAI+D,QAClBD,EAAE9D,EAAI+D,GAAKpH,GAIX+F,MAAMxM,EAAWgO,EAAWC,EAAW/D,EAAWzD,SAClDyH,EAAKlO,EAAI+N,KAAKN,GACdU,EAAKH,EAAID,KAAKL,GACdU,EAAKH,EAAIF,KAAKJ,GACdU,EAAKzE,KAAK0E,MAAMJ,GAChBK,EAAK3E,KAAK0E,MAAMH,GAChBK,EAAK5E,KAAK0E,MAAMF,GAChBK,EAAKP,EAAKG,EACVK,EAAKP,EAAKI,EACVI,EAAKP,EAAKI,EACVI,EAAKC,GAAWJ,GAChBK,EAAKD,GAAWH,GAChBK,EAAKF,GAAWF,OAElBK,EAAK,SACC,IAAN9E,MACEN,KAAK0E,MAAM1E,KAAKS,IAAI5D,EAAGiI,GAAMxE,GAAKA,GAGjC6D,KAAKkB,cAAcZ,EAAIE,EAAIC,EAAIC,EAAIC,EAAKM,EAAIL,EAAIC,EAAIE,EAAIC,GAGxDvC,QAAQtC,EAAWzD,EAAW0D,EAAW/L,SAC1C8Q,EAAOC,GAAcC,SAAa,GAAJlF,UAC7BgF,EAAK,GAAKzI,EAAIyI,EAAK,GAAK/E,EAAI+E,EAAK,GAAK9Q,EAGtCoO,EAAE1C,UACgB,IAAlBiE,KAAKH,EAAM,IAAJ9D,GAGR0C,cAActC,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,EAAWb,EAAWC,EAAWG,SACtGuF,EAAItB,KAAKuB,EAAEpF,GAAKzD,EAChBN,EAAI4H,KAAKuB,EAAED,GAAKlF,EAChBoF,EAAIxB,KAAKuB,EAAED,EAAI,GAAKlF,EACpBqF,EAAIzB,KAAKuB,EAAEpF,EAAI,GAAKzD,EACpBoH,EAAIE,KAAKuB,EAAEE,GAAKrF,EAChBsF,EAAI1B,KAAKuB,EAAEE,EAAI,GAAKrF,kBLFND,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,EAAWb,EAAWC,EAAWG,EAAWuF,EAAWlJ,UAC5HmE,GAAKH,EAAGuF,GAAMxF,EAAGzD,EAAGrI,EAAG3C,EAAG8O,EAAGb,GAAIgG,GAAMxF,EAAGzD,EAAGkD,EAAGG,EAAGuF,EAAGlJ,IKarDwJ,CAAMjG,EAAGC,EAAGG,EAVTiE,KAAK6B,QAAQ7B,KAAKuB,EAAEnJ,GAAI/H,EAAG3C,EAAG8O,GAC9BwD,KAAK6B,QAAQ7B,KAAKuB,EAAEzB,GAAIzP,EAAI,EAAG3C,EAAG8O,GAClCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEC,GAAInR,EAAG3C,EAAI,EAAG8O,GAClCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEG,GAAIrR,EAAI,EAAG3C,EAAI,EAAG8O,GAEtCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEnJ,EAAI,GAAI/H,EAAG3C,EAAG8O,EAAI,GACtCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEzB,EAAI,GAAIzP,EAAI,EAAG3C,EAAG8O,EAAI,GAC1CwD,KAAK6B,QAAQ7B,KAAKuB,EAAEC,EAAI,GAAInR,EAAG3C,EAAI,EAAG8O,EAAI,GAC1CwD,KAAK6B,QAAQ7B,KAAKuB,EAAEG,EAAI,GAAIrR,EAAI,EAAG3C,EAAI,EAAG8O,EAAI,gBAvEnDsF,GACkBT,SAAW,CAAC,CAAC,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,CAAC,KAAO,GAAI,OAAS,GAAI,CAAC,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,CAAC,EAAG,MAAQ,IAAK,MAAQ,CAAC,EAAG,EAAG,GAAI,CAAC,KAAO,GAAI,CAAC,EAAG,MAAQ,CAAC,SAAY,CAAC,EAAG,EAAG,GAAI,CAAC,KAAO,GAAI,IAAK,EAAG,GAAI,CAAC,mBCKxN5C,YAAYsD,EAAcC,EAAqBC,QACzCA,WAAaA,OAEbC,YAAc9G,MAAM4E,KAAKiC,WAAW7K,gBAChC2E,EAAI,EAAGA,EAAIiE,KAAKiC,WAAW7K,OAAQ2E,GAAK,OAC3CmG,YAAYnG,GAAK,IAAI+F,GAAcK,EAAWJ,SAG/CK,sBAAwBvG,KAAKwG,IAAI,EAAGL,QACpCM,sBAAwBzG,KAAKwG,IAAI,EAAIJ,EAAW7K,OAAS,SAAYiL,IAAI,EAAGJ,EAAW7K,QAAU,oBAG/E2K,EAAczF,EAAaD,UAC3C,IAAIkG,GAAYR,EAAMzF,EAAKlB,MAAMiB,EAAMC,EAAM,GAAGwB,KAAK,IAGtDW,SAASxM,EAAWgO,EAAWC,EAAW/D,EAAI,EAAGzD,EAAI,EAAG8J,GAAO,OACjEjV,EAAQ,EACRkV,EAASzC,KAAKoC,sBACdM,EAAS1C,KAAKsC,8BACTvG,EAAI,EAAGA,EAAIiE,KAAKkC,YAAY9K,OAAQ2E,GAAK,EAAG,OAC9C4G,EAAQ3C,KAAKkC,YAAYnG,GAC3B4G,OACM3C,KAAKiC,WAAWlG,GAAK4G,EAAMA,MACnCJ,GAAYK,KAAK3Q,EAAIwQ,GACrBD,GAAQG,EAAMhD,GAAK4C,GAAYK,KAAK3C,EAAIwC,GACxCF,GAAYK,KAAK1C,EAAIuC,GACrBtG,EAAIsG,EACJ/J,EAAI+J,GACDC,MAEK,KACA,SAEJnV,EAGDkR,eAAe1C,UACdiE,KAAKkC,YAAYlC,KAAKkC,YAAY9K,OAAS,EAAI2E,eAGpCxO,UACXA,EAAgD,SAAxCsO,KAAK0E,MAAMhT,EAAQ,SAAc,cC5CjDkR,YAAYsD,EAAcC,EAAqBC,QACzCY,MAAQ,IAAIN,GAAYR,EAAMC,EAAaC,QAC3Ca,OAAS,IAAIP,GAAYR,EAAO,IAAKC,EAAaC,OAEnD3F,EAAMyG,EAAAA,EACN1G,eACKN,EAAI,EAAGA,EAAIkG,EAAW7K,OAAQ2E,GAAK,EACrB,IAAlBkG,EAAWlG,OACRF,KAAKS,IAAIA,EAAKP,KACdF,KAAKQ,IAAIA,EAAKN,UAIhBiH,EAAoB,MAAW,KAAW1G,EAAM,SACjD2G,YAAe,EAAE,EAAKD,EAG5BvE,SAASxM,EAAWgO,EAAWC,SACxBC,EAAS,mBAAJlO,EACLmO,EAAS,mBAAJH,EACLI,EAAS,mBAAJH,cACE2C,MAAMK,SAASjR,EAAGgO,EAAGC,GAAKF,KAAK8C,OAAOI,SAAS/C,EAAIC,EAAIC,IAAOL,KAAKiD,aChBlF,MAAME,GAAY,CAAC,WAAY,cAAe,WAAY,yBAE9BC,EAAYC,EAAgBC,gBAC/C,0BAAOhX,eAAM8H,QAAQ,cAAe,SACtC,qBAmDP,SAAoBgP,EAAYC,EAAgBC,WACE,YAA7C,WAAMC,iBAAQnP,QAAQ,cAAe,SAChCoP,UAGHb,EAAQQ,GAAUjQ,KAAI,CAAC3G,EAAIwP,WAC1B0H,EAASL,EAAM,GAAG7W,kBACjB,IAAImX,GAAYJ,EAAQvB,KAAOhG,EAAG0H,EAAOzB,YAAayB,EAAOxB,eAG/D0B,EAA+B,KAC/BC,OAAOtO,SAASoD,MACLA,EAAEmL,OAASC,GAAcpL,EAAEmL,MAAOP,EAAQS,sBAGrDhP,EAAOsO,EAAItO,KACXiP,GAAMV,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CsQ,GAAMZ,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CuQ,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,YACf3B,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,EAClBC,KAAUL,GAAMV,EAAQgB,MACxBC,KAAUL,GAAMZ,EAAQgB,MACxB5L,EAAI8L,GAAa7B,EAAOS,EAAMQ,OAAQS,EAAIE,GAC1CE,EAAQ,WAAgB/L,MAAM,CAAC,IAAK,IAAK,OAC1CqD,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KAjFY2I,CAAWtB,EAAOC,EAAKC,OAC7C,eAKP,SAAeF,EAAYC,EAAgBC,SACpCvO,EAAOsO,EAAItO,KACX0P,EAAQX,GAAcV,EAAMS,MAAOP,EAAQS,aAC3CI,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,YACf3B,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,IACnBrI,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KAhBM4I,CAAMvB,EAAOC,EAAKC,OAClC,sBAoBP,SAAsBF,EAAYC,EAAgBC,yBAC3CK,EAA+B,cAC/BC,WAAQtO,SAASoD,MACNA,GAAKoL,GAAcpL,EAAG4K,EAAQS,sBAGzChP,EAAOsO,EAAItO,KACXiP,GAAMV,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CsQ,GAAMZ,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CuQ,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,IAClBgR,cAAeN,SAAS,GAAK,EAC7BO,EAAY,SAAA,WAAMjB,iBAAQxM,UAAU,UACjCnF,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,EAGlB9C,QAFU0C,GAAMV,EAAQgB,OAEXM,OADHV,GAAMZ,EAAQgB,OACKM,IAAUC,EAAYA,GAAaA,EAChEnM,EAAI,WAAMkL,iBAAStC,GACnBmD,EAAQ,WAAgB/L,MAAM,CAAC,IAAK,IAAK,OAC1CqD,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KA5Ca+I,CAAa1B,EAAOC,EAAKC,gBAuGzBO,EAAeE,aACvCF,QACG,CAAC,IAAK,IAAK,WAEbY,EAAQ,WAAYZ,MAAUkB,GAAclB,eACpC,IAAVY,EACIO,GAAcnB,GAEfY,EASR,YAAsB9B,EAAsBiB,EAAe3R,EAAWgO,OAChE7E,MAAM6J,QAAQrB,IAA6B,IAAlBA,EAAOxM,aAAqB,SACpD0I,EAAI6C,EAAMzP,QAASgS,EAAEhC,SAASjR,EAAGgO,EAAG,SACtCkF,EAAUpC,EAAAA,EACVqC,EAAW,aACJ1M,KAAKkL,EAAQ,OACjByB,EAAOC,GAAQ5M,EAAE6M,WAAY,CAACC,SAAU1F,EAAE,GAAI2F,YAAa3F,EAAE,GAAI4F,SAAU5F,EAAE,GAAI6F,UAAW7F,EAAE,GAAImE,OAAQ,IAC5GoB,EAAOF,MACAE,IACC3M,EAAEmL,cAGRuB,EAGR,YAAiBjJ,EAAQzD,YACd8M,SAAW9M,EAAE8M,aAAeA,SAAW9M,EAAE8M,aAAeC,YAAc/M,EAAE+M,gBAAkBA,YAAc/M,EAAE+M,gBAAkBC,SAAWhN,EAAEgN,aAAeA,SAAWhN,EAAEgN,aAAeC,UAAYjN,EAAEiN,cAAgBA,UAAYjN,EAAEiN,cAAgB1B,OAASvL,EAAEuL,WAAaA,OAASvL,EAAEuL,QAG9R,MAAMc,GAA0D,CAC/Da,qBAAsB,CAAC,IAAI,GAAG,IAC9BC,6BAA8B,CAAC,IAAI,IAAI,KACvCC,0BAA2B,CAAC,IAAI,IAAI,IACpCC,gCAAiC,CAAC,GAAG,GAAG,IACxCC,0BAA2B,CAAC,GAAG,GAAG,IAClCC,kBAAmB,CAAC,IAAI,IAAI,IAC5BC,yBAA0B,CAAC,GAAG,IAAI,IAClCC,+BAAgC,CAAC,GAAG,GAAG,IACvCC,uBAAwB,CAAC,GAAG,GAAG,KAC/BC,2BAA4B,CAAC,IAAI,EAAE,GACnCC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,8BAA+B,CAAC,IAAI,IAAI,IACxCC,4BAA6B,CAAC,GAAG,GAAG,IACpCC,8BAA+B,CAAC,GAAG,GAAG,KACtCC,gCAAiC,CAAC,EAAE,EAAE,IACtCC,uBAAwB,CAAC,EAAE,EAAE,IAC7BC,4BAA6B,CAAC,EAAE,EAAE,IAClCC,mBAAoB,CAAC,IAAI,IAAI,IAC7BC,yBAA0B,CAAC,IAAI,GAAG,IAClCC,yBAA0B,CAAC,IAAI,IAAI,IACnCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,0BAA2B,CAAC,IAAI,IAAI,KACpCC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,4BAA6B,CAAC,IAAI,IAAI,IACtCC,0BAA2B,CAAC,GAAG,IAAI,IACnCC,mBAAoB,CAAC,EAAE,IAAI,IAC3BC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,+BAAgC,CAAC,IAAI,IAAI,KACzCC,qCAAsC,CAAC,IAAI,IAAI,KAC/CC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,mCAAoC,CAAC,GAAG,GAAG,IAC3CC,+BAAgC,CAAC,IAAI,IAAI,KACzCC,uBAAwB,CAAC,IAAI,IAAI,KACjCC,mBAAoB,CAAC,GAAG,IAAI,GAC5BC,wBAAyB,CAAC,GAAG,IAAI,IACjCC,yBAA0B,CAAC,GAAG,GAAG,GACjCC,2BAA4B,CAAC,EAAE,EAAE,KACjCC,sCAAuC,CAAC,IAAI,IAAI,KAChDC,wCAAyC,CAAC,IAAI,IAAI,KAClDC,4BAA6B,CAAC,IAAI,IAAI,IACtCC,iCAAkC,CAAC,IAAI,IAAI,IAC3CC,6CAA8C,CAAC,IAAI,IAAI,KACvDC,0BAA2B,CAAC,IAAI,IAAI,KACpCC,sBAAuB,CAAC,GAAG,GAAG,IAC9BC,iCAAkC,CAAC,IAAI,EAAE,KACzCC,4BAA6B,CAAC,IAAI,EAAE,KACpCC,0BAA2B,CAAC,IAAI,GAAG,IACnCC,kBAAmB,CAAC,EAAE,EAAE,KACxBC,mBAAoB,CAAC,IAAI,IAAI,IAC7BC,kBAAmB,CAAC,EAAE,EAAE,KACxBC,oBAAqB,CAAC,IAAI,IAAI,IAC9BC,4BAA6B,CAAC,IAAI,IAAI,KACtCC,8BAA+B,CAAC,IAAI,IAAI,KACxCC,sCAAuC,CAAC,IAAI,IAAI,KAChDC,8BAA+B,CAAC,IAAI,IAAI,KACxCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,4BAA6B,CAAC,IAAI,IAAI,KACtCC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,8BAA+B,CAAC,GAAG,GAAG,IACtCC,kCAAmC,CAAC,GAAG,IAAI,KAC3CC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,6BAA8B,CAAC,GAAG,GAAG,IACrCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,6BAA8B,CAAC,IAAI,IAAI,KACvCC,kBAAmB,CAAC,EAAE,IAAI,KAC1BC,wBAAyB,CAAC,GAAG,IAAI,KACjCC,kBAAmB,CAAC,GAAG,IAAI,IAC3BC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,4BAA6B,CAAC,GAAG,IAAI,KACrCC,8BAA+B,CAAC,GAAG,IAAI,KACvCC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,oBAAqB,CAAC,IAAI,IAAI,KAC9BC,qBAAsB,CAAC,EAAE,EAAE,GAC3BC,uBAAwB,CAAC,EAAE,EAAE,KAC7BC,0BAA2B,CAAC,GAAG,IAAI,KACnCC,oCAAqC,CAAC,IAAI,IAAI,KAC9CC,yBAA0B,CAAC,GAAG,GAAG,IACjCC,6BAA8B,CAAC,GAAG,IAAI,KAGjClH,GAAe,CAAClX,KAAK,wBAAwByV,KAAK,EAAE4I,eAAe,CAAC3I,eAAeC,WAAW,CAAC,EAAE,IAAI2I,kBAAkB,CAAC5I,eAAeC,WAAW,CAAC,EAAE,IAAI4I,eAAe,CAAC7I,eAAeC,WAAW,CAAC,EAAE,IAAI6I,gBAAgB,CAAC9I,eAAeC,WAAW,CAAC,EAAE,IAAI2B,OAAO,CAAC,CAACC,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,6BAA6B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,aAAcC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,2BAA2B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,GAAIC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS,GAAIC,UAAU,EAAE1B,OAAO,OAAQ,CAACJ,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,gBAAiBC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,SC9N1xB8G,GAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAEvQC,GAAgB,CACrB,CAAC,IAAK,GAAI,IACV,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,IAAK,IACV,CAAC,IAAK,GAAI,KACV,CAAC,IAAK,IAAK,IACX,CAAC,GAAI,IAAK,MAiDX,YAAmBze,UACXA,EAAGiL,WAAW,cAAgBjL,EAAGgI,MAAM,IAAMhI,EAGrD,YAAmB0e,EAAehL,SAC1B,CAAC,CAAEgL,EAAI,GAAIhL,EAAGgL,EAAI,KAG1B,YAAiB5O,EAAa6O,UACtBrP,KAAK0E,MAAM2K,EAAIzL,SAAWpD,GAGlC,YAAmB9O,EAAY2d,cACT,iBAAV3d,SACHA,KACGA,EAAM4d,YACT,WAAMA,QAAQ,EAAIC,GAAQ,cAAWC,UAAU,GAAIH,UAElDI,GAAU/d,EAAMjB,WAClB,kBAAmBiB,EAAMA,UACzB,iBAAkBA,EAAMA,MAAMge,cAAgBH,GAAQ7d,EAAMA,MAAMie,cAAgBje,EAAMA,MAAMge,cAAgB,EAAGL,OACjH,0BAA2B3d,EAAMA,MAAMge,cAAgBH,GAAQA,GAAQ7d,EAAMA,MAAMie,cAAgBje,EAAMA,MAAMge,cAAgB,EAAGL,GAAO,EAAGA,OAC5I,iBAAkBrP,KAAKQ,IAAI9O,EAAMA,MAAMge,cAAe1P,KAAKS,IAAI/O,EAAMA,MAAMie,cAAeC,GAAUle,EAAMA,MAAMme,OAAQR,YAEvH,EAIT,YAAoBrS,EAAWqS,SACxBnP,EAAImP,EAAIS,SAASC,QAAQ/S,aAC3BkD,EAAgBA,KAChB4P,SAASzU,KAAK2B,GACXqS,EAAIS,SAASvU,OAAS,GAG9B,YAAuB6T,EAAeY,EAAcX,YAC5B,iBAAZW,gBACNC,WAAW5U,KAAK,CAAC+T,EAAKc,GAAWF,EAASX,WAGzC5e,EAAOgf,GAAU,0BAAShf,QAAQ,SAClC0f,EAAYC,GAAS3f,GACvB0f,IACOH,EAAQlX,OAAQsW,EAAKC,KAE3BY,WAAW5U,KAAK,CAAC+T,EAAKc,GAAW3V,KAAKC,UAAUwV,GAAUX,KAIhE,YAAsBD,EAAeiB,EAAgBhB,eAC9C5e,EAAOgf,GAAU,0BAAWhf,QAAQ,QACpC6f,EAAcC,GAAW9f,UAC1B6f,EAGEA,QAAYD,WAAWvX,OAAQsW,EAAKC,GAFnC,CAACD,GAKV,MAAMgB,GAEF,CACHI,UAAW,CAAC5I,EAAQwH,EAAKC,KACNoB,GAAarB,QAAKxH,WAAQ8I,UAAWrB,GAC7C5V,YAAakX,GAAc3M,QAAG4D,WAAQoI,QAASX,MAE1DuB,wBAAyB,CAAChJ,EAAQwH,EAAKC,QAExBD,EADEC,EAAIzL,SAAW,SAAMgE,WAAQiJ,mBAAejJ,WAAQkJ,cACxCzB,IAE7B0B,gBAAiB,CAACnJ,EAAQwH,EAAKC,uBACnB1O,KAAK,0BAAQmP,YAAY,MAC/BT,EAAIzL,oCAAeoN,UAAU,kBAClB5B,EAAKzO,EAAEqP,QAASX,MAIlBD,QAAKxH,WAAQpO,QAAS6V,IAErC4B,uBAAwB,CAACrJ,EAAQwH,EAAKC,kBAEvBD,EADE,0BAAQU,mBAAWP,GAAQ,SAAA,0BAAQO,mBAAUvU,UAAU,EAAG8T,IAC9CA,KAIxBkB,GAEF,CACHS,OAAQ,CAACpJ,EAAQwH,EAAKC,kBACdA,EAAIzL,SAAW,6BAAaoN,UAAU,GAAK,CAAC5B,GAAO,IAE3D8B,MAAO,CAACtJ,EAAQwH,EAAKC,kBACb,IAAI9P,MAAMqQ,GAAU,0BAAQsB,SAAS,EAAG7B,IAAMpN,KAAKmN,IAE3D+B,YAAa,CAACvJ,EAAQwH,EAAKC,iBACtB6B,EAAQ,0BAAQA,SAAS,SACzB7B,EAAIzL,SAAWgE,EAAOwJ,kBAChB,WAAOC,eAAe,GAEzB,IAAI9R,MAAM2R,GAAOjP,KAAKmN,IAE9BkC,iBAAkB,CAAC1J,EAAQwH,EAAKC,kBACxB,IAAI9P,MAAMqQ,GAAU,0BAAQsB,SAAS,EAAG7B,IAAMpN,KAAKmN,GACxD/X,QAAS,CACT2M,EAAE,GAAKuL,GAAQ,GAAIF,GACnBrL,EAAE,GACFA,EAAE,GAAKuL,GAAQ,GAAIF,OAGtBkC,YAAa,CAAC3J,EAAQwH,EAAKC,WAEpB6B,EADQ7B,EAAImC,eAAenK,SAAS+H,EAAI,GAAK,IAAK,EAAGA,EAAI,GAAK,KAC9CxH,EAAO6J,YAAc7J,EAAO8J,YAAc9J,EAAO+J,mBAChE,IAAIpS,MAAM2R,GAAOjP,KAAKmN,IAE9BwC,mBAAoB,CAAChK,EAAQwH,EAAKC,iBAC3BwC,EAAS7R,KAAKQ,IAAI,EAAGoH,EAAOkK,cAC5BhL,EAAQuI,EAAImC,eAAenK,SAAS+H,EAAI,GAAKyC,EAAQ,EAAGzC,EAAI,GAAKyC,GACjEX,EAAQlR,KAAKQ,IAAI,EAAGR,KAAK+R,oBAAsBC,gBAAgB,IAAMpK,EAAOqK,8BAC3E,IAAI1S,MAAM2R,GAAOjP,KAAKmN,IAE9B8C,cAAe,CAACC,EAAS/C,EAAKC,IACtB,IAAI,IAAI9P,MAAM,KAAKlI,KAAI,CAAC+a,EAAGlS,WAC3B9J,EAAwB,EAApB4J,KAAK0E,MAAMxE,EAAI,GAAS,EAAIqP,GAAQ,EAAGF,GAAOD,EAAI,SAGrD,CAAChZ,EAFE4J,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlc,KACxB,EAApB4J,KAAK0E,MAAMxE,EAAI,GAAS,EAAIqP,GAAQ,EAAGF,GAAOD,EAAI,OAI9DoB,UAAW,CAAC5I,EAAQwH,EAAKC,IACjBoB,GAAarB,QAAKxH,WAAQ2K,MAAOlD,GAAKmD,YACrC/B,GAAazM,QAAG4D,WAAQ6K,MAAOpD,KAGxCqD,cAAe,CAAC9K,EAAQwH,EAAKC,wBAErBsD,GAAUvD,EADPG,GAAQ,0BAAQC,UAAU,EAAGH,GAAOE,GAAQ,0BAAQC,UAAU,EAAGH,eAAeG,UAAU,8BAAcoD,YAAY,KAG/HC,YAAa,CAACV,EAAS/C,EAAKC,WACrB6B,EAAQ,EAAI3B,GAAQ,EAAGF,SACtB,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrB,EAAIE,GAAQ,GAAIF,GAChBD,EAAI,GAAKG,GAAQ,GAAIF,OAGvByD,KAAM,CAAClL,EAAQwH,EAAKC,WACb6B,EAAQ,EAAI3B,GAAQA,GAAQK,SAAUhI,WAAQsJ,MAAO7B,GAAMA,GAAMA,SAChE,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,OAGvB0D,UAAW,CAACnL,EAAQwH,EAAKC,WAClB6B,EAAQ3B,GAAQ,EAAIA,GAAQK,SAAUhI,WAAQsJ,MAAO7B,GAAMA,GAAMA,SAChE,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,OAGvB2D,UAAW,CAACb,EAAS/C,EAAKC,IAElBsD,GAAUvD,EADPpP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,OAG3D6D,wBAAyB,CAACd,EAAS/C,EAAKC,IAEhCsD,GAAUvD,EAAKG,GAAY,EADxBvP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,MACrBC,IAEtC6D,wBAAyB,CAACf,EAAS/C,EAAKC,IAEhCsD,GAAUvD,EADPpP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,OAG3D+D,QAAS,CAAChB,EAAS/C,EAAKC,IAChB,CAAC,CACPD,EAAI,GAAK,EAAIG,GAAQ,EAAGF,GACxBD,EAAI,GACJA,EAAI,GAAK,EAAIG,GAAQ,EAAGF,KAG1B+D,UAAW,CAACxL,EAAQwH,EAAKC,gBACwB,IAA5CE,eAAgByB,UAAU,GAAK,GAAI3B,GAAY,OAC5CjL,EAAImL,GAAQA,GAAQ,IAASF,GAAO,EAAGA,MACzCjL,EAAIiL,EAAIgD,UAAuD,GAA3C9C,8BAAiByB,UAAU,GAAK,EAAG3B,GAAW,OAG9D,CAAC,CAFEE,GAAQ,GAAIF,GAAOD,EAAI,GAErBhL,EADFmL,GAAQ,GAAIF,GAAOD,EAAI,YAI5B,IAERiE,KAAM,CAAClB,EAAS/C,IACR,CAACA,GAETkE,MAAO,CAAC1L,EAAQwH,EAAKC,sBAEbsD,GAAUvD,EADPG,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,KAGxGC,aAAc,CAAC9L,EAAQwH,EAAKC,sBAEpBsD,GAAUvD,EADPG,GAAQA,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,GAAIpE,KAGpHsE,kBAAmB,CAAC/L,EAAQwH,EAAKC,wBAEzBsD,GAAUvD,EADPG,GAAQA,GAAQA,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,GAAIpE,8BAAgBoE,iBAAiB,GAAIpE,KAGjKuE,gBAAiB,CAACzB,EAAS/C,EAAKC,IAExBsD,GAAUvD,EADPG,GAAQH,EAAI,GAAK,GAAIC,IAGhCwE,oBAAqB,CAAC1B,EAAS/C,IAEvBuD,GAAUvD,EADPF,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,MAGpC0E,MAAO,CAAC3B,EAAS/C,EAAKC,IAEdsD,GAAUvD,EADPG,GAAQH,EAAI,GAAK,GAAIC,IAGhC0E,OAAQ,CAAC5B,EAAS/C,EAAKC,IACf,CAAC,CACPD,EAAI,GAAKG,GAAQ,GAAIF,GACrBD,EAAI,GACJA,EAAI,GAAKG,GAAQ,GAAIF,KAGvB2E,WAAY,CAACpM,EAAQwH,EAAKC,kBACgB,IAArCE,GAAQ,WAAOyB,UAAU,EAAG3B,GACxB,CAAC,CACPD,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,KAGhB,cC/RRzM,YAAYsD,iBAVY,mBACK,mBACC,mBACA,mBACD,mBACA,yBAEmB,gBACtB,OAGpB+N,oBAAsBvN,GAAYwN,UAAUhO,EAAO,cAAgB,QACnEiO,oBAAsBzN,GAAYwN,UAAUhO,EAAO,cAAgB,QACnEkO,gBAAkB1N,GAAYwN,UAAUhO,EAAO,aAAe,QAC9DmO,WAAa3N,GAAYwN,UAAUhO,EAAO,cAAgB,GAGzDtD,MAAM0R,EAAeC,EAAe9L,EAAe+L,EAAiBngB,QACrEigB,SAAWA,OACXG,WAAwC,EAA3BH,EAASI,qBACtBC,YAAuC,EAAzBL,EAASM,mBACvBC,YAAc7U,KAAK0E,MAAM4P,EAAShgB,OAAS6P,KAAKwQ,aAEjDL,EAASQ,WAAaP,EAAQ,MACzB,EAAY,EAARA,IACJ,EAAY,EAAR9L,QAERsM,WAAa,SAAoB,KAAM,WACvCC,WAAa,IAAgB,KAAM,SAEnCC,iBAAmB1V,MAAMlL,GAAO4N,KAAK,WACrCuS,QAAUA,EAGT5R,mBAAmBxM,SACnB8C,EAAOqG,MAAM4E,KAAK0Q,YAAc1Q,KAAKwQ,aACrCrS,EAAKtC,KAAK0E,MAAMtO,EAAI+N,KAAKsQ,YACzBtM,EAAKnI,KAAK0E,MAAMtO,EAAI+N,KAAKsQ,YAActQ,KAAKsQ,WAC5CS,EAAS/Q,KAAKgR,gBAAgB7S,GAC9B8S,EAASjR,KAAKgR,gBAAgB7S,EAAK,WAEhC8B,EAAID,KAAK0Q,YAAc,EAAGzQ,GAAK,EAAGA,GAAK,UACtCsE,EAAKvE,KAAKwQ,YAAajM,GAAM,EAAGA,GAAM,EAAG,OAC3CL,EAAKK,EAAKvE,KAAKwQ,cACXvQ,EAAID,KAAKwQ,YAAcjM,GACvB5C,GAAMuC,EAAIF,EAAI+M,EAAO9Q,GAAI8Q,EAAO9Q,EAAE,GAAIgR,EAAOhR,GAAIgR,EAAOhR,EAAE,WAG/DlL,EAGA0J,gBAAgBxM,SACjBif,EAAelR,KAAK8Q,iBAAiB7e,EAAI+N,KAAKqQ,YAChDa,SAAqBA,QAEnBnc,EAAOqG,MAAM4E,KAAK0Q,YAAc,GAEhCS,EAAU,QAAUnR,KAAKmQ,SAASiB,SAASC,SAC3CC,EAAS,QAAUtR,KAAKmQ,SAASiB,SAASG,QAC1CC,EAAWL,EAAUnR,KAAKmQ,SAASiB,SAASK,UAC5CC,EAAUJ,EAAStR,KAAKmQ,SAASiB,SAASO,SAC1CC,EAAgB5R,KAAKmQ,SAAS0B,sBAAwB7R,KAAK8R,iBAAiB7f,GAAK,UAE9EgO,EAAI,EAAGA,GAAKD,KAAK0Q,YAAazQ,GAAK,EAAG,KAC1C0C,EAAQ3C,KAAK+R,oBAAoB9f,EAAGgO,EAAGD,KAAKiQ,gBAAgB+B,eAAe,GAAGpS,GAAIuR,EAASG,EAAQE,EAAUE,SAG3GO,IAFU,EAAQ,EAAJhS,EAAQD,KAAK0Q,YAAckB,GACrB5R,KAAKmQ,SAAS+B,eAAiBlS,KAAKmQ,SAASgC,eAC5CnS,KAAK4Q,YAAc5Q,KAAK6Q,cAC1CoB,KAAqB,EAAI,EAAI,GAElCjS,KAAKmQ,SAASiC,UAAUC,KAAO,MAC1BC,GACPtS,KAAKmQ,SAASiC,UAAUxkB,OACxB+U,QACM+N,YAAczQ,EAAKD,KAAKmQ,SAASiC,UAAUnO,QAAYjE,KAAKmQ,SAASiC,UAAUC,OAInFrS,KAAKmQ,SAASoC,aAAaF,KAAO,MAC7BC,GACPtS,KAAKmQ,SAASoC,aAAa3kB,OAC3B+U,KACM3C,KAAKmQ,SAASoC,aAAatO,QAAYjE,KAAKmQ,SAASoC,aAAaF,SAGrEpS,GAAK0C,cAGNmO,iBAAiB7e,EAAI+N,KAAKqQ,SAAWtb,EACnCA,EAGA0J,iBAAiBxM,SAClB0Q,EAAQ3C,KAAKkQ,WAAWhN,SAAa,IAAJjR,EAAS,GAAI+N,KAAKkQ,WAAW8B,eAAe,GAAGpS,GAAI,EAAG,GAAG,GAE1FlH,EAAQ,WADHiK,EAAQ,EAAc,IAARA,EAAcA,GACb,SAClBjK,EAAI,EAAS,oBAAJA,EAA4C,WAAjBmD,KAAKS,IAAI5D,EAAG,GAGjD+F,oBAAoBxM,EAAWgO,EAAWC,EAAWiR,EAAiBG,EAAgBE,EAAkBE,OAC3GvV,EAAI,EACJzD,EAAI,EACJ0D,EAAI,EACJ/L,EAAI,UAEC0L,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,OACzBoE,EAAKoC,GAAYK,KAAK3Q,EAAIkf,EAAU9gB,GACpC+P,EAAKmC,GAAYK,KAAK3C,EAAIqR,EAASjhB,GACnCgQ,EAAKkC,GAAYK,KAAK1C,EAAIiR,EAAU9gB,GACpC3C,EAAI4jB,EAASjhB,EAEbmiB,EAAgBxS,KAAK8P,oBAAoBkC,eAAejW,GAC1DyW,OACEA,EAAc7P,MAAMxC,EAAIC,EAAIC,EAAI3S,EAAGuS,EAAIvS,GAAK2C,SAG5CoiB,EAAgBzS,KAAKgQ,oBAAoBgC,eAAejW,MAC1D0W,OACEA,EAAc9P,MAAMxC,EAAIC,EAAIC,EAAI3S,EAAGuS,EAAIvS,GAAK2C,GAG9C0L,EAAI,EAAG,OACJ2W,EAAY1S,KAAKiQ,gBAAgB+B,eAAejW,GAClD2W,OACEA,EAAU/P,MACdJ,GAAYK,KAAK3Q,EAAIuf,EAAWnhB,GAChCkS,GAAYK,KAAK3C,EAAIyR,EAAUrhB,GAC/BkS,GAAYK,KAAK1C,EAAIsR,EAAWnhB,GAChCqhB,EAAUrhB,EACV4P,EAAIyR,EAAUrhB,GACXA,MAID,SAGCiiB,GAAYnW,EAAI,IAAKzD,EAAI,OAAU,GAAK,GAAK,ICtHtD,YAAkBiK,EAAiB1C,UAC9B0C,EAAM1C,GAAK,EACP,EAEJ0C,EAAM1C,EAAE,GAAK,EACT,IAED,UC3BK0S,GAAa,CAAC,YAAa,0BAA2B,+BAEtDC,GAYP,CACL,CACCrmB,GAAI,cACJsmB,UAAW,YACXra,KAAM,IAAIsa,OAAK,CAAC,YAAa,iBAC7BC,aAAoBzU,EAAM0U,IAAI,IAAIF,OAAK,CAAC,YAAa,UAAUjlB,SAAS,SACxEgC,QCfgC,EAAGkF,KAAAA,EAAMke,MAAAA,kBACnC3O,EAAO4O,GAAY1kB,EAAS,IAC5BuT,EAAMoR,GAAW3kB,EAAS4kB,OAC1BC,EAASC,GAAc9kB,OAA6B,GACrDlC,EAAe,WAAKA,eAAM8H,QAAQ,cAAe,IAEjDmf,EAAStlB,EAA0B,MACnCgW,EAAShW,EAAyB,CAAC,EAAG,IACtCulB,EAAgBvlB,OAAO,GACvBwlB,EAASxlB,IACTylB,EAAUzlB,OAEN,OACFC,QAAU,CAAC0F,EAAM,KACV,gBAATtH,MAA8B,SAC5B4e,EAAMqI,EAAOrlB,QAAQylB,WAAW,QAC/BzlB,QAAQgC,MAAQ,IAAM0D,IACtB1F,QAAQiC,OAAS,IAAMyD,QACxByP,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,WACzD4E,EAAMsO,EAAK,CAAEU,YAAa,GAAIE,OAAQA,EAAO/V,QAASoW,MAAAA,EAAOvC,KAAAA,EAAMnO,IAAAA,MAC3EigB,aAAaxQ,EAAK,EAAG,GACb,IAARzP,iBACU4f,EAActlB,WACbA,QAAU4lB,YAAW,IAAML,EAAOvlB,QAAQ,IAAI,SAGtDA,QAAU,CAAC+D,EAAWgO,WACvBE,EAAS,IAAJlO,EAAUshB,EAAOrlB,QAAQ6lB,YAC9B3T,EAAS,IAAJH,EAAUsT,EAAOrlB,QAAQ8lB,aAC9BnQ,WL4DgBT,EAAYnR,EAAWgO,EAAWqD,uBACnDe,EAAIE,GA6BZ,UAAkBtS,EAAGgO,GAAsBqD,SAGnC,IAFSA,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,GAAK0P,EAAQgB,SACrDhB,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,GAAK0P,EAAQgB,OA/BpD2P,CAAQ,CAAChiB,EAAGgO,GAAIqD,UACzB,0BAAOhX,eAAM8H,QAAQ,cAAe,SACtC,qBAKGoQ,GAJOrB,GAAUjQ,KAAI,CAAC3G,EAAIwP,WAC1B0H,EAASL,EAAM,GAAG7W,kBACjB,IAAImX,GAAYJ,EAAQvB,KAAOhG,EAAG0H,EAAOzB,YAAayB,EAAOxB,eAE1CmB,EAAMQ,OAAQS,EAAIE,OACzC,eAAgBnB,EAAMS,UACtB,qBACEe,cAAeN,SAAS,GAAK,EAC7BO,EAAY,SAAA,WAAMjB,iBAAQxM,UAAU,EACpCkK,QAAasD,OAAgBA,IAAUC,EAAYA,GAAaA,SAC/D,WAAMjB,iBAAStC,IK1ER4S,CAASnf,EAAMoL,EAAIC,EAAI,CAAE2D,YAAa,GAAIE,OAAQA,EAAO/V,QAASoW,MAAAA,EAAOvC,KAAAA,EAAMnO,IAAK,MACvFiQ,UAIH0P,EAAOrlB,SAAS,CAACkR,EAAIC,WACxBpN,EAAS,IAALmN,EAAWmU,EAAOrlB,QAAQ6lB,YAC9B9T,EAAS,IAALZ,EAAWkU,EAAOrlB,QAAQ8lB,eAC7B9lB,QAAU,CAAC+V,EAAO/V,QAAQ,GAAK+D,EAAGgS,EAAO/V,QAAQ,GAAK+R,KACtD/R,sBCjDkB0Q,EAAsBuV,OAC3CvV,eAECO,EAAezR,MACdA,EAAEuR,QAASvR,EAAEwR,UAEdkV,EAAe,YACd,OAAW,OAGR,OACDzlB,iBAAiB,YAAawQ,KAC9BxQ,iBAAiB,aAAcylB,GAChC,OACExlB,oBAAoB,YAAauQ,KACjCvQ,oBAAoB,aAAcwlB,MAEzC,CAACxV,KDmCO2U,EAAOrlB,SAAS,CAAC+D,EAAGgO,UACpB,IAANhO,QAAyB,IAANgO,SACX,KAEH/R,QAAQ+D,EAAGgO,YAIfmD,EAAQhN,KAAKC,UAAUtB,MACnB,KACLke,KACI/kB,YAEN,CAACkV,EAAOkB,EAAOvC,EAAMkR,UAElBoB,EAAeC,MACbpmB,QAAQ,IAAMoW,EAAQgQ,IACtBpmB,QAAQ,IAAMoW,EAAQgQ,IACpBA,sBAIR,MAAD,CAAKxnB,MAAM,YACTumB,KAAYxkB,EAAD,CAAK7B,MAAOqmB,EAASvmB,MAAM,gBAC5B,mBAA0B,iBAATR,eAC1BuC,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMknB,EAAoB,IAAR/P,OAC3CzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMknB,EAAY/P,EAAQ,QAE3C,gBAAThY,KACCuC,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAEzC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,MAAMC,OAAO,WDvDzC,CACC5D,GAAI,iBACJsmB,UAAW,0BACXra,KAAM,IAAIsa,OAAK,CAAC,UAChBC,UAAW,KAAM,EACjBljB,QGrBkC,EAAGiF,KAAAA,EAAMC,KAAAA,EAAMke,MAAAA,YAC5CjW,EAAMC,EAAOC,KAAK,KAAMpI,IACvBiN,EAAMoR,GAAW3kB,EAAS4kB,OAC1BxC,EAAY2D,GAAiB/lB,EAAS,KACtCqiB,EAAY2D,GAAiBhmB,EAAS,IAEvC+kB,EAAStlB,EAA0B,MACnCgW,EAAShW,EAAe,GACxBwlB,EAASxlB,OAEL,OACFC,QAAU,WACVgd,EAAMqI,EAAOrlB,QAAQylB,WAAW,MAChCtB,EAAOtd,EAAK5E,SACXjC,QAAQgC,MAAQmiB,IAChBnkB,QAAQiC,OAASkiB,QAClBhP,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,kBJpB1CiT,EAAYC,EAAgBC,SACnDuP,EAAY,IAAI4B,GAAoBnR,EAAQvB,QACxC2S,MAAMtR,EAAOE,EAAQsN,WAAYtN,EAAQuN,WAAYvN,EAAQW,OAAQ,WACzElP,EAAOsO,EAAItO,KACXoP,EAAkB,EAAZd,EAAInT,cACP+B,EAAI,EAAGA,EAAIqR,EAAQpT,MAAO+B,GAAK,EAAG,OACpC0Q,EAAQkQ,EAAU8B,mBAAmB1iB,EAAIqR,EAAQW,QAAQ2Q,kBACtD3U,EAAI,EAAGA,EAAImD,EAAMjT,OAAQ8P,GAAK,EAAG,OACnClE,EAAIkE,EAAIkE,EAAU,EAAJlS,EACdwS,EAAQoQ,GAASlS,EAAO1C,KACzBlE,GAAK0I,IACL1I,EAAI,GAAK0I,IACT1I,EAAI,GAAK0I,IACT1I,EAAI,GAAK,OIQAhH,EAAMsO,EAAK,CAAEuN,WAAAA,EAAYC,WAAAA,EAAY5M,OAAQA,EAAO/V,QAASgC,MAAOmiB,EAAMtQ,KAAAA,MACpF8R,aAAaxQ,EAAK,EAAG,UAIjBkQ,EAAOrlB,SAAUkR,UACpBnN,EAAImN,EAAKmU,EAAOrlB,QAAQgC,MAAQqjB,EAAOrlB,QAAQ6lB,cAC9C7lB,QAAU+V,EAAO/V,QAAU+D,IAC3B/D,mBAGFkV,EAAQhN,KAAKC,UAAUtB,aACnB,KACLke,KACI/kB,YAEN,CAACkV,EAAOwN,EAAYC,EAAY9O,EAAMkR,eAGvC,MAAD,CAAKnmB,MAAM,cACT2Q,EAAD,CAAS1Q,KAAK,UACZ+nB,EAAD,CAAUxoB,KAAK,SAASU,MAAOgQ,EAAI,iBAAkBzP,MAAO,GAAGqjB,IAAcpjB,YAAe+mB,EAAcxmB,OAAO0H,QAChHqf,EAAD,CAAUxoB,KAAK,SAASU,MAAOgQ,EAAI,iBAAkBzP,MAAO,GAAGsjB,IAAcrjB,YAAegnB,EAAczmB,OAAO0H,SAEjH5G,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAExC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,MAAMC,OAAQ4E,EAAK5E,YHpB/C,CACC5D,GAAI,YACJsmB,UAAW,8BACXra,KAAM,IAAIsa,OAAK,IACfC,UAAW,KAAM,EACjBljB,QI5B8B,EAAGkF,KAAAA,EAAMpF,QAAAA,EAASsjB,MAAAA,YAC1C3O,EAAO4O,GAAY1kB,EAAS,IAC5BuT,EAAMoR,GAAW3kB,EAAS4kB,MAE3BG,EAAStlB,EAA0B,MACnCwlB,EAASxlB,OAEL,OACFC,QAAU,WACVgd,EAAMqI,EAAOrlB,QAAQylB,WAAW,QAC/BzlB,QAAQgC,MAAgB,GAARoU,IAChBpW,QAAQiC,OAAiB,GAARmU,QAClBjB,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,kBPO9CiT,EAAYC,EAAgBC,SAE/C4H,EAAwB,CAC7BY,WAAY,GACZH,SAAU,GACVlM,OAJc0C,EAAWmB,EAAQvB,MAKjCsL,eAAgB,IAAI9K,GAAYe,EAAQvB,KAAO,UAAW,EAAG,CAAC,IAC9DmM,SAAU,GACVve,QAAS2T,EAAQ3T,iBAGTsC,EAAI,EAAGA,EAAIqR,EAAQ+O,KAAK,GAAK,GAAIpgB,GAAK,UACrCiO,EAAI,EAAGA,EAAIoD,EAAQ+O,KAAK,GAAK,GAAInS,GAAK,KAChC,CAAK,GAAJjO,EAAQ,EAAO,GAAJiO,GAASkD,EAAO8H,SAItCnW,EAAOsO,EAAItO,OACbA,KAAK+I,KAAK,eAEFmN,EAAKY,KAAYX,EAAIY,WAAY,IACxCb,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,IAAM3H,EAAQ+O,KAAK,IAAMpH,EAAI,IAAM3H,EAAQ+O,KAAK,IAAMpH,EAAI,IAAM3H,EAAQ+O,KAAK,kBACzHtW,EAAKkP,EAAI,IAAkB,IAAR/a,OAAwB,EAAT+a,EAAI,GACtCxG,EAAQoH,EAAUb,GAAc5T,OAAS4T,GAAca,GAAW7G,GAAckG,EAAIS,SAASE,MAC9F9P,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC1B1I,EAAI,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC9B1I,EAAI,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC9B1I,EAAI,GAAK,YAGN9J,EAAI,EAAGA,EAAIqR,EAAQ+O,KAAK,GAAIpgB,GAAK,UAChCgO,EAAI,EAAGA,EAAIqD,EAAQ+O,KAAK,GAAIpS,GAAK,EAAG,UAClCM,MAAMtO,EAAI,IAAM4J,KAAK0E,MAAMN,EAAI,KAAO,GAAM,iBAChDlE,EAAKkE,GAAiB,IAAR/P,OAAmB,EAAJ+B,UAC1BqP,EAAI,EAAGA,EAAI,EAAGA,GAAK,IACtBvF,EAAIuF,GAAK,IAAOvM,EAAKgH,EAAIuF,KOzCrBvM,EAAMsO,EAAK,CAAEtB,KAAAA,EAAMpS,QAAAA,EAAS0iB,KAAM,CAAS,GAAR/N,EAAY,IAAa,GAARA,OAC1DuP,aAAaxQ,EAAK,EAAG,aAIrBD,EAAQhN,KAAKC,UAAUtB,aACnB,KACLke,eACQ,IAAMQ,EAAOvlB,cAEvB,CAACkV,EAAOkB,EAAOvC,EAAMkR,eAGtB,MAAD,CAAKnmB,MAAM,cACT+B,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAM+lB,EAASrX,KAAKS,IAAI,GAAIgI,EAAQ,QAC7DzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAM+lB,EAASrX,KAAKQ,IAAI,EAAGiI,EAAQ,QAC5DzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAExC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,KAAKC,OAAO,wBJSZ2E,KAAEA,QAAMwJ,UAAO3O,KAASpD,QAAI0mB,WAC/C8B,GAAYvmB,EAAS,aAErB8P,GAAO,WACGyO,EAAQ,gBAIzB6F,GAASrc,WAAYsJ,EAAEgT,YAActmB,IAAI2G,eACnC6B,QAAOuJ,WAAO0U,IAAInT,EAAErH,aACrB8F,QAAkB,IAATvJ,GAAuB8K,EAAEkT,UAAUzU,GAG1CuB,EAAEhQ,QAAQ,CAAEiF,KAAAA,EAAMwJ,MAAAA,EAAevJ,KAAAA,EAAMpF,QAAAA,EAASsjB,MAAAA,wBK5D7C+B,GAAiD,CAC7D7J,SAAS8C,EAAG1gB,IACJA,EAGRkR,QAAOwW,WAAEA,GAAczc,EAAMjL,EAAO2nB,UAC5BD,EAAWE,KAAKnV,KAAMxH,EAAMjL,EAAO2nB,IAG3CzW,MAAKnQ,SAAEA,GAAYkK,EAAMjL,EAAO2nB,UAC1B9Z,MAAM6J,QAAQ1X,GACZA,EAAM2F,KAAI,CAACkiB,EAAKjmB,IACtBb,EAAS6mB,KAAKnV,KAAMxH,EAAKtB,KAAK/H,GAAQimB,EAAKF,KAFV3nB,GAMnCkR,KAAInQ,SAAEA,EAAUqG,UAAU6D,EAAMjL,EAAO2nB,mBACxB,IAAV3nB,eACE8nB,EAA8C,qBAAjC,WAAOC,qBAAYC,WAAiC,WAAMlb,sBAAcmb,eAAahd,EAAMiL,EAAO6R,WAAWnhB,OAAO5H,IAAIymB,OAAS,KAC9Ipf,EAAW,iBACVqD,KAAK1J,GAAO+H,mBACd+f,IACEhd,OAAOpB,KAAK,WAAW0B,cAAc,IAAI8c,SAASjZ,OAEpDA,GAAKlO,EAAS6mB,KAAKnV,KAAMxH,EAAKtB,KAAKsF,GAAIjP,EAAMiP,GAAI0Y,OAE/CthB,GAGR6K,QAAOiX,gBAAEA,GAAmBld,EAAMjL,EAAO2nB,MACpC3nB,MAAAA,GAA0D,iBAAVA,SAC5CA,QAEFqG,EAAW,GACX+hB,EAAeD,EAAgBld,iBAC9BvB,KAAK0e,GACVpf,WAAYof,EAAavd,GAAGwd,QAAQpd,KACpClD,eACIkH,GAAKmZ,EAAanZ,GAAG2Y,KAAKnV,KAAMxH,EAAKtB,KAAKsF,GAAIjP,EAAMiP,GAAI0Y,MAEvDthB,QC5CQiiB,GAAAC,IAAAA,GAAAD,yBACW,uBACH,sBACE,8BACD,iBAETE,oCACR,sBAAavf,QAAQsf,mBAAgB,SAG7BE,iCACR,sBAAaxf,QAAQsf,gBAAa,WAG1BG,4BACTtmB,EAAU4F,aAAaiB,QAAQsf,sBACjCnmB,GAAW8J,EAAWgc,SAAS9lB,GAC3BA,EAED,WAGQumB,kCACR,sBAAa1f,QAAQsf,iBAAc,eAG3BxmB,qBAAYC,GACvBA,gBAAuBkI,QAAQqe,eAAavmB,OAGjCC,kBAASC,GACpBA,gBAAoBgI,QAAQqe,YAAUrmB,OAG3BC,oBAAWC,GACtBA,gBAAsB8H,QAAQqe,cAAYnmB,OAG/BwmB,mBAAUC,GACrBA,gBAAqB3e,QAAQqe,aAAWM,IChC9C,MAAMC,GAA0C,CAC/CC,WAAY,EACZC,WAAY,EACZC,KAAM,mBAaqB1hB,KAAEA,OAAM8I,QAAMU,cAAOjE,SAAaoc,aAAQC,WAAYC,UAAUC,UACrF5Z,EAAMC,EAAOC,KAAK,KAAMpI,IACvBshB,EAAQD,GAAa3nB,EAASqnB,GAAMK,aACrCxK,EAASzd,EAA4B,MACrC6C,EAAW7C,EAA0B,MACrC4oB,EAAc5oB,OAEV,OACGC,QAAU,QAChBoQ,GAAUjE,YAER6a,EAAQ,CAAE7a,kBAAaA,IAAe,IACtCtF,EAAOuJ,EAAMrJ,OAAOkgB,KAAKH,GAAiB,IAAI8B,YAAUxY,GAAQA,EAAMvJ,KAAMmgB,KAC3EhnB,QAAQX,MAAQ6I,KAAKC,UAAUtB,EAAM,KAAMshB,GAAOD,IAAW,WAC5D1oB,KACA,8BAA8BA,EAAE4J,mBAChCnF,MAAMzE,KACPQ,QAAQX,MAAQ,WAKjB+Q,GAAO,OACHpQ,gBAGH,OACGA,YACV,CAACkoB,OAWM,KACLK,GAAU/K,EAAOxd,YACbA,QAAQC,kBACN4oB,YAAY,WAEpB,CAACN,OAEM,QACLC,GAAchL,EAAOxd,SAAW4C,EAAS5C,QAAS,OAC/C8oB,EAAUC,mBAAmBvL,EAAOxd,QAAQX,SACzCW,QAAQgpB,aAAa,OAAQ,gCAAgCF,OAC7D9oB,QAAQgpB,aAAa,WAAY,GAAGtZ,YACpC1P,QAAQipB,WAEhB,CAACT,OAEM,KACLC,GAAYjL,EAAOxd,YACfA,QAAQX,MAAQ,KAChBW,QAAQC,YAEd,CAACwoB,sBAQF,MAAD,CAAK7pB,MAAM,cACT2Q,EAAD,CAAS1Q,KAAK,QACZsL,OAAOC,QAAQ+d,IAAQnjB,KAAI,EAAEgB,OAC5BrF,EAAD,CAAK7B,MAAOgQ,EAAI,eAAe9I,KAAQjH,OAAQmpB,IAAWliB,EACzD/G,QAAS,KAAMiqB,OAVE7pB,EAUW2G,KAT1BiiB,UAAU5oB,UACNA,GAFU,IAACA,WAcpB,WAAD,CAAUS,IAAK0d,EAAQ5e,MAAM,SAASU,SA9CtB,eAETuH,EAAOqB,KAAKihB,MAAM3L,EAAOxd,QAAQX,kBAChCmnB,MAAM3f,GAAM,SACXrH,KACA,oBAAoBA,EAAE4J,aAyC2BggB,YAAY,EAAOC,YAAY,MAAMC,YAAaxa,EAAI,0BAC/G,IAAD,CAAGhP,IAAK8C,EAAU2mB,MAAM,iCC9FD5a,MAAEA,OAAOxL,OAAMtE,WAAMuB,aACrC,IAAD,CAAGxB,MAAM,YAAYwF,KAAMjB,GAChCtE,GAAQwQ,GAAMxQ,KACd,MAAD,OACE,KAAD,KAAK8P,GACJvO,aCZGmQ,4BACsD,GAE5DA,SAASiZ,SACFnrB,EAAK6mB,iBACNuE,SAASprB,GAAMmrB,EACbnrB,EAGRkS,GAAGnS,EAAcorB,UACT1X,KAAKzH,gBACR5J,iBAAiBrC,SACVsrB,KACLxpB,wBAKPqQ,SAASiZ,UACD1X,KAAK6X,GAAG,SAAUH,GAG1BjZ,QAAQiZ,UACA1X,KAAK6X,GAAG,QAASH,GAGzBjZ,QAAQmZ,KACJE,iBAAiB,aAAaxiB,2BAC1B/I,EAAKwrB,EAAGC,aAAa,4BACtBL,UAASprB,cAAMwrB,WAEhBJ,SAAW,UCjCLvqB,GAAU,CACtBoD,aAAc,gQACdynB,WAAY,+PACZvnB,OAAQ,4fACRwnB,KAAM,mWACNC,aAAc,8RACdC,YAAa,6TACbC,SAAU,mfCULC,GAAmB,CAAC,kBAAmB,kBAAmB,oBAAqB,sBAAuB,oBAAqB,2BAA4B,wCAAyC,cAAe,eAAgB,iBAAkB,iCAAkC,4BAA6B,oBAAqB,sBAAuB,sBAAuB,oBAAqB,sBAAuB,uBAAwB,yBAA0B,uBAAwB,2BAA4B,2BAA4B,+BAAgC,gCAAiC,qBAClmBC,GAAe,CAAC,uBAAwB,sBAAuB,oBAAqB,oBAAqB,sBAAuB,wBAChIC,GAAkB,CAAC,iBAAkB,mBAAoB,qBAAsB,uBAAwB,mDAAoD,oDAAqD,kEAAmE,wBAAyB,2BAA4B,yBAA0B,wCAClWC,GAAe,CAAC,kBAAmB,oBAAqB,sBAAuB,oBAAqB,2BAA4B,wCAAyC,eAAgB,iBAAkB,4BAA6B,iCAAkC,oBAAqB,sBAAuB,sBAAuB,oBAAqB,2BAA4B,2BAA4B,gCAAiC,mBAAoB,wBAAyB,sBAAuB,wBAAyB,sBAAuB,uBAC/iBC,GAAY,CAAC,uBAAwB,+BAAgC,4BAA6B,aAAc,YAAa,YAK7HC,GAAY,IAAIC,YAAUC,UAC/BC,eACAA,gBACE,CAAEC,WAAY,IAMJC,GAA+D,CAC3E7N,SACQ,CAAC,GAAI,GAAI,IAGjB1M,SAAQwa,KAAEA,GAAQzgB,EAAMjL,EAAO2nB,SACxBgE,EAAUhE,EAAMiE,QAAQhsB,SAAQ,OAChCmR,MAAM8a,IAAI5gB,KAAMygB,EAAKI,aAAwB,IAAV9rB,SAAkB,MAErD+rB,EAASpE,EAAMiE,QAAQhsB,SAAQ,OAC/BmR,MAAM8a,IAAI5gB,GAAMygB,EAAKI,aAAwB,IAAV9rB,QAAiB,YAEnD,CAAC,GAAI,WAAoB,IAAVA,EAAkB,oBAAsB,0BACjD2rB,MAAYK,GAAWrE,EAAMlY,IAAI,qCAC1B,IAAVzP,EAAiB,oBAAsB,0BACpC+rB,MAAWC,GAAWrE,EAAMlY,IAAI,oBAAqB,KAGnEyB,QAAO+a,QAAEA,EAAS7kB,oBAAQsgB,GAAczc,EAAMjL,EAAO2nB,SAC9CuE,EAASxE,EAAWyE,WAAWlhB,GAAM,GACrCmhB,oBAA2BC,SAAW,IAAI9C,YAAUte,EAAKqhB,WAAY,IAAI/G,OAAKta,EAAKshB,WAAY,CAACrW,EAAOmW,WAAaphB,EACpHuhB,oBAAgCC,eAAgB,IAAIlH,OAAK,GAAI,CAACrP,EAAOuW,kCAA0BJ,SAAU,IAAI9G,OAAK,GAAI,CAACrP,EAAOmW,UAAYphB,GAEzIyhB,EAAQC,EAAQxrB,GAAQ+qB,EAAOR,KAAK9D,KAAKnV,KAAM2Z,EAAiBpsB,EAAO2nB,MACvD,IAAnBsE,EAAQpiB,aACJ,CAAC6iB,EAAQC,EAAQxrB,SAgBlB,CAACurB,EANO,oBAPC/E,EAAMiE,QAAQ5gB,gBACHhL,MAAQksB,EAAOntB,OACtCqC,iBAAiB,UAAU,iBACvByN,EAAI,WAAQvH,SAAUslB,EAAE7tB,OAAUsrB,EAAyBrqB,WAAUksB,IACtEnb,MAAM8a,IAAI5gB,EAAM4D,EAAEge,OAAShe,EAAEge,OAAO7sB,GAAS6O,EAAE6c,KAAK5jB,6BAIxDmkB,EAAQtmB,QAAS,kBAAkBqmB,GAAWnd,EAAE9P,oBAC/CitB,GAAWc,GAAWnF,EAAMlY,IAAK+c,EAAsBO,YAAYle,EAAE9P,6BAC5DgP,KAAK,qBAGO4e,EAAQxrB,IAGlC+P,MAAKnQ,SAAEA,GAAYkK,EAAMjL,EAAO2nB,SACzBqF,EAAQrF,EAAMiE,QAAQhsB,SAAQ,KAC9BiO,MAAM6J,QAAQ1X,OAAgB,MAC9B+Q,MAAM8a,IAAI5gB,EAAM,CAAClK,EAAS+G,aAAc9H,OAExCitB,EAActF,EAAMiE,QAAQhsB,SAAQ,KACpCiO,MAAM6J,QAAQ1X,OAAgB,MAC9B+Q,MAAM8a,IAAI5gB,EAAM,IAAIjL,EAAOe,EAAS+G,eAEpC6kB,EAAS,gCAAgCK,kBAAsBrF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,2BAErG1pB,EAAO,UACP0M,MAAM6J,QAAQ1X,OACVA,EAAM2F,KAAI,CAACunB,EAAYtrB,WACvBurB,EAAWxF,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAKtB,KAAK/H,QAAQ,KACxEwrB,EAAWzF,EAAMiE,QAAQhsB,SAAQ,MACrCI,EAAM4B,EAAQ,GAAI5B,EAAM4B,IAAU,CAAC5B,EAAM4B,GAAQ5B,EAAM4B,EAAQ,MAC3DmP,MAAM8a,IAAI5gB,EAAMjL,MAEhBqtB,EAAa1F,EAAMiE,QAAQhsB,SAAQ,MACvCI,EAAM4B,EAAQ,GAAI5B,EAAM4B,IAAU,CAAC5B,EAAM4B,GAAQ5B,EAAM4B,EAAQ,MAC3DmP,MAAM8a,IAAI5gB,EAAMjL,MAEhBstB,EAAYriB,EAAKtB,KAAK/H,GAAOmrB,YAAY,SACzCrrB,EAAWX,EAASW,SAAS4rB,IAC5BC,EAASC,EAASC,GAAS1sB,EAAS6mB,KAAKnV,KAAM6a,EAAWJ,EAAYvF,SACtE,4CAA4C5mB,EAAShC,KAAKuuB,YAAoB5rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,yDAExIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yDACDuB,kBAAyBxF,EAAMlY,IAAI,qBAAqB5P,GAAQirB,kCAChG9qB,EAAM6J,QAAU,EAAI,GAAK,wEACMujB,MAAuB,IAAVxrB,EAAc,WAAa,MAAM/B,GAAQ6qB,oEACtD2C,MAAezrB,IAAU5B,EAAM6J,OAAS,EAAI,WAAa,MAAMhK,GAAQoD,4DAEtGsqB,yBACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,4BAC9CI,GAAWc,GAAWnF,EAAMlY,IAAK6d,EAAW,GAAG1rB,4CAEhD4rB,kCAEDC,EAAQ,0BAA0BA,UAAgB,0CAGnD1f,KAAK,IACJ/N,EAAM6J,OAAS,OACV,gHAEyBojB,kBAA4BtF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,2DAK5F,CAAC,GAAI8B,EAAQxrB,IAGrB+P,KAAInQ,SAAEA,OAAU2I,EAAMtC,UAAU6D,EAAMjL,EAAO2nB,yBACtCiG,EAAU,IAAIrE,YAAU6B,GAAW,IAAI7F,OAAK,CAAC5W,GAAW1D,EAAKsC,eAC7Dyf,EAAQrF,EAAMiE,QAAQhsB,SAAQ,WAC7B+G,EAAMinB,EAAQnI,QACf1U,MAAM8a,IAAI5gB,EAAKtB,KAAKhD,GAAM5F,EAAS+G,cAEnCggB,EAA8C,qBAAjC,WAAOC,qBAAYC,WAAiC,WAAMlb,sBAAcmb,eAAahd,EAAMiL,EAAO6R,WAAWnhB,OAAO5H,IAAIymB,OAAS,KAK9IkH,qBAJyBvhB,YAC5BmgB,aAAW,KAAO,CAAEsC,KAAM/iB,OAAOpB,KAAK,WAAW0B,cAAc,MAC/D1B,GAC4Bke,KAAKnV,KAAMmb,EAAS,WAAQnI,SAAS,GAAIkC,GAC7C,GAAK,gCAAgCqF,kBAAsBrF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,0BACtH/C,GAA8B,eAAhB7c,EAAK6iB,OAAyB,CAC1B,iBAAV9tB,MAA4B,UACjCoL,EAAaN,OAAOC,QAAQ,WAAWK,cAAc,IACzDzF,KAAI,EAAEgB,EAAKuE,KAAY,CAACvE,EAAK4kB,aAAW,KAAO,CAAEsC,KAAM3iB,qBAClDH,QAAQ,WAAWK,cAAc,IAAIrD,SAAQ,EAAEpB,EAAKuE,MAChC,iBAAflL,EAAM2G,KACXoK,MAAMgd,OAAOC,IAAI/iB,EAAKtB,KAAKhD,GAAM,yBAC3BuE,EAAOgd,SAASloB,EAAM2G,OAC5BoK,MAAMgd,OAAOC,IAAI/iB,EAAKtB,KAAKhD,GAAM,4BAA6B3G,EAAM2G,OAGpEsnB,aAAWnjB,OAAOojB,YAAY9iB,IAAawc,KAAKnV,KAAMxH,EAAMjL,EAAO2nB,OAEvExmB,EAAO,SACU,iBAAVnB,QAAgC,IAAVA,MACzB8K,OAAOpB,KAAK1J,GACjB2F,2BACMwnB,EAAWxF,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAKtB,KAAKhD,QAAM,KACtE2mB,EAAYriB,EAAKkjB,UAAUxnB,GAC3BjF,EAAWX,EAASW,SAAS4rB,GAC7Bc,EAAiBtG,EACpByD,aAAW,KAAO,CAAEsC,KAAM,SAAA,WAAWziB,qBAAazE,MAAQ,KAC1D5F,GACC,0BAAYqK,qBAAazE,OAAS,WAAWyE,qBAAazE,GAAKuhB,SAASloB,EAAM2G,QAC5EoK,MAAMgd,OAAOC,IAAIV,EAAW,4BAA6BttB,EAAM2G,UAE9D4mB,EAASC,EAASC,GAASW,EAAexG,KAAKnV,KAAM6a,EAAWttB,EAAM2G,GAAMghB,SAC5E,4CAA4C5mB,EAAShC,KAAKuuB,YAAoB5rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,6DAExIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,2BAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,2DACDuB,kBAAyBxF,EAAMlY,IAAI,qBAAqB5P,GAAQirB,oCAChGyC,2BACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,8BAC9CI,GAAWrlB,6CAEZ6mB,sCAEDC,EAAQ,0BAA0BA,UAAgB,8CAIrD1f,KAAK,KAED,CAAC,GAAI4e,EAAQxrB,IAGrB+P,QAAOmd,QAAEA,EAASjnB,UAAU6D,EAAMjL,GAAO4rB,QAAEA,gBACpC3rB,EAAW2rB,EAAQ3rB,oBAClBG,EAASiqB,EAAwBrqB,MACjCsuB,oBAAiBpX,OACpBpQ,SAAS1G,EAAM4G,MAAM,GAAI,IACzBqnB,EAAUvnB,SAAS1G,GAASmuB,WAAWnuB,KACrC2Q,MAAM8a,IAAI5gB,EAAMqjB,eAElBpY,WAAQgB,MAAO,OAEX,CAAC,GAAI,gCAAgCjX,cAD/B,0BAAOsN,SAAS,IAAIihB,SAAS,EAAG,QAAQ,aACqB,UAEpE,CAAC,GAAI,mBAAmBvuB,mBAAoBD,IAAS,OAAQ,KAGrEkR,QAAOwa,KAAEA,kBAAMvD,oBAAiBsG,GAAqBxjB,EAAMjL,EAAO2nB,OAC7D+E,EAAS,GACTC,EAAS,GACTjB,EAAKI,oBACM,IAAV9rB,EACM,4CAA4C2nB,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAMygB,EAAK5jB,6BAA4B6f,EAAMlY,IAAI,qBAAqB5P,GAAQgrB,uBAErK,0CAA0ClD,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,OAAM,qBAA4B0c,EAAMlY,IAAI,uBAAuB5P,GAAQirB,yBAGvK3pB,EAAO,MACU,iBAAVnB,QAAgC,IAAVA,OAA+B8rB,iBAAwB,IAAV9rB,GAAuB,OAC9FooB,EAAeD,EAAgBld,KAClBH,OAAOpB,KAAK0e,GAC7Bpf,WAAYof,EAAavd,GAAGwd,QAAQpd,KACpBtF,eACX+oB,EAAQtG,EAAavd,GACrByiB,EAAYmB,EAAkBxjB,EAAMJ,GACpCwhB,EAAUiB,EAAUlH,aAAarY,KAAK,QACxCid,GAAa9C,SAASmE,SAClB,SAGF3qB,EAAWgtB,EAAMhtB,SAAS4rB,IACzBC,EAASC,EAASC,GAASiB,EAAM9G,KAAKnV,KAAM6a,EAAWttB,EAAM6K,GAAI8c,MACjD,IAAnB4F,EAAQ1jB,QAAmC,IAAnB2jB,EAAQ3jB,QAAiC,IAAjB4jB,EAAM5jB,aAClD,SAGF8kB,EAAwC,WAA1BD,EAAM3vB,KAAKuuB,IAA2BrC,GAAgB/C,SAASmE,GAC7EuC,EAAY1D,GAAahD,SAASmE,UACpCsC,GAAeC,MACR,GAAGhqB,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,WAAW8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,WAAW2B,OAC5FC,EACHmB,EAAclB,EAAQ,IAGvB,oBAAoBiB,EAAM3vB,KAAKuuB,WAAmBG,EAAQ,GAAK,cAAc/rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,yDAEvIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBACjC2B,yBACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,4BAC9CkB,GAAWnF,EAAMlY,IAAK6d,yCAEvBE,kCAEDC,EAAQ,0BAA0BA,UAAgB,wBAGpD1f,KAAK,UAED,CAAC2e,EAAQC,EAAQxrB,IAGzB+P,QAAOwa,KAAEA,YAAMmD,EAAWznB,UAAU6D,EAAMjL,EAAO2nB,iBAC1CmH,EAAUnH,EAAMiE,QAAQ5gB,gBACHhL,YAAQA,IAAS,KACxCoB,iBAAiB,oBACb2tB,EAAY1E,EAAyBrqB,QACtC+Q,MAAM8a,IAAI5gB,EAA0B,IAApB8jB,EAASllB,YAAe,EAAYklB,KACrDluB,4BAGF8rB,QACEzhB,EAAS2jB,IACTxC,EAAUphB,EAAKmb,aAAarY,KAAK,QACnCod,GAAUjD,SAASmE,GAAU,OAC1BuB,EAAU,IAAIrE,YAAU6B,GAAW,IAAI7F,OAAK,CAAC5W,GAAW1D,EAAKsC,iBAkB1D,sBAjBUoa,EAAMiE,QAAQ5gB,oBAC1BgkB,EAAW3E,IACRrqB,YAAQA,IAAS,KACjBoB,iBAAiB,oBACnB2tB,EAAWC,EAAShvB,QACrB+Q,MAAM8a,IAAI5gB,EAA0B,IAApB8jB,EAASllB,YAAe,EAAYklB,KACrDluB,2BAECouB,EAAQrB,EAAQnI,MAClBwJ,MACM/E,MAAMvnB,MAAQ,GAAGssB,EAAMC,MAAM,KAAK,SAClChF,MAAMtnB,OAAS,GAAGqsB,EAAMC,MAAM,KAAK,YAEzCC,gBAAe,OACVtD,IAAI,GAAGmD,EAASI,eAAeJ,EAASK,mBAC9CC,QAAQjF,6BAGDkF,GAAOrZ,KAAYA,EAAOsZ,YAClCzE,GAAiB7C,SAASmE,GAAW,KACpCoD,EAAU,IAAIlK,OAAK,IACnBgK,GAAOrZ,IAAkC,iBAAhBA,EAAO2X,OACzB4B,EAAQ1C,YAAY7W,EAAO2X,MAC1B0B,GAAOrZ,IAAiC,+BAAd8R,YAA0D,iBAAvB9R,EAAOtP,OAAO8oB,SAC5ED,EAAQ1C,YAAY7W,EAAOtP,OAAO8oB,SAEpC,oBAAoBZ,gBAC1BpD,EAAKI,WAAa,oBAAoBnE,EAAMlY,IAAI,oBAAsB,eACtEvE,EAAOvF,QAAS,kBAAkBqmB,GAAW9jB,mBAC5C4kB,GAAWnF,EAAMlY,IAAKggB,EAAQ1C,YAAY7kB,EAAErB,QAAQ,cAAe,6BAC1DkH,KAAK,+BAEPwhB,GAAOrZ,IAAiC,sCAAd8R,WAM/B,OACA2H,EAAa9J,OACV,mBAAmBiJ,MAA8B,IAAlB5jB,EAAOrB,OAAe,GAAK,SAAS8lB,kBACvD,IAAlBzkB,EAAOrB,OAAe,GAAK,iBAAiB8lB,kBAC3CzkB,EAAOvF,QAAS,kBAAkBqmB,GAAW9jB,SAAQ6F,KAAK,iCAVQ,OAChE+Z,EAAa,WAAMhb,sBAAcmb,eAAahd,EAAMiL,EAAOtP,OAAO5H,IAAIymB,SAEnE,oBAAoBqJ,gBADdhkB,OAAOpB,KAAK,0BAAY0B,cAAc,IAE3CzF,QAAS,WAAWuC,eAAc6F,KAAK,6BAS3C,CAAC,GAAI4e,EAAQ,MAItB,YAAgB3sB,6BACU6tB,MAG1B,YAAoB7f,OACLQ,EAAVlG,EAAO,MACNkG,EAAI,EAAGA,EAAIR,EAAInE,OAAQ2E,UAEV,GAAKlG,EADhB0F,EAAIU,WAAWF,MAEb,SAEFlG,EAGR,YAAoBmH,EAAexE,KAAerE,SAC3C+W,EAAM1S,EAAKmb,qBACR5X,EAAI,EAAGA,EAAImP,EAAI9T,OAAQ2E,GAAK,EAAG,OACjC7H,EAAMgX,EAAI3W,MAAMwH,GAAGT,KAAK,KACxB6hB,EAASngB,EAAI9I,KAAQC,MACvBD,IAAQipB,SACJA,SAGF5D,GAAWrO,EAAIA,EAAI9T,OAAS,IAGpC,YAAe4F,EAAexE,EAAiB2gB,SACxCzrB,EAAI8K,EAAK8F,MAAMgd,OAAOtI,IAAIxa,GAAM,MACrB,IAAb9K,EAAE0J,aAAqB,SACrBE,EAAU5J,EAAE,GAAGyG,OAAS6I,EAAItP,EAAE,GAAGyE,SAAUzE,EAAE,GAAGyG,QAAU6I,EAAItP,EAAE,GAAGyE,cAClEirB,GAAU,aAAc,eAAgB7D,GAAWjiB,GAAU6hB,GAGrE,YAAcnc,EAAexE,EAAY2gB,SAClCjlB,EAAMsE,EAAK8hB,YAAY,QAAQ3G,aAAarY,KAAK,KACjDhE,EAAU0F,EAAI9I,UAChBoD,IAAYpD,EAAY,GACrBkpB,GAAU,YAAa,OAAQ7D,GAAWjiB,GAAU6hB,GAG5D,MAAMiE,GAAY,CAAC9wB,EAAcS,EAA4BswB,EAAelE,IAOpE,yBAAyB7sB,eANhB6sB,EAAQhsB,eACpBmwB,qBAAqB,QAAQ,GAAGC,UAAUhC,IAAI,iBACxC7sB,KAAKC,iBAAiB,SAAS,OACpC2uB,qBAAqB,QAAQ,GAAGC,UAAU9wB,OAAO,UAClD,CAAE+wB,SAAS,EAAMC,MAAM,iBAGxBrwB,GAAQL,oCACiBswB,qBAIvBnC,GAAc,CAACle,EAAexE,EAAiB2gB,IAqD7C,YApDIA,EAAQ5gB,oBACZmlB,EAAW,iBACVL,EAAQxqB,SAASC,cAAc,SAC/ByqB,UAAUhC,IAAI,mBAEdjkB,EAAU0F,EAAIxE,EAAK8hB,YAAY,QAAQ3G,aAAarY,KAAK,MAC1DhE,EAAQzJ,SAAS,YACf8vB,mBAAmB,YAAa,qCAAqCrmB,kBAGtEsiB,EAAUphB,EAAKmb,aAAarY,KAAK,OACjCqiB,mBAAmB,YAAa,kEAEhBvwB,GAAQsD,qFAEMkpB,uCAE9BtmB,cAAc,uBAAoB3E,iBAAiB,SAAS,WAC3DivB,EAAU/qB,SAASC,cAAc,WAC/BvF,MAAQqsB,IACbjmB,YAAYiqB,KACPzvB,kBACC4oB,YAAY,UAClB8G,YAAYD,QAGbjqB,YAAY0pB,YACN3uB,KAAKC,iBAAiB,SAAS,WAC/BkvB,YAAYR,SAAe3vB,OACjC,CAAE8vB,SAAS,EAAMC,MAAM,aACjB/uB,KAAKC,iBAAiB,eAAe,WACrCkvB,YAAYR,SAAe3vB,OACjC,CAAE8vB,SAAS,EAAMC,MAAM,OAExB9uB,iBAAiB,yBAEfmvB,wBAEDC,EAAa,OACdpvB,iBAAiB,cAAc,OACzBmlB,YAAW,WAEV,OACN,UAEDnlB,iBAAiB,YAAY,KAC3BovB,iBACUA,KACL,4BC7ZSjpB,KAAEA,QAAMwJ,UAAO3O,cAAS0K,UAAauc,UACnDoH,EAAO/vB,EAAuB,MAC9BwlB,EAASxlB,cAEL,OACFC,QAAU,QACXoQ,GAAUjE,YAER8e,EAAU,IAAI8E,GACd/I,EAAQ,CAAElY,IAAKC,EAAOC,KAAK,KAAMpI,GAAOnF,QAAAA,EAASwpB,QAAAA,EAAS9e,YAAAA,GAC1D7B,EAAO,IAAIse,YAAUxY,GACrB4f,EAAW5f,EAAMrJ,OAAOkgB,KAAK6D,GAAYxgB,EAAM8F,EAAMvJ,KAAMmgB,GAC3DjmB,EAAWqP,EAAMrJ,OAAOhG,SAASuJ,GACjClM,EAAOgS,EAAMrJ,OAAO3I,KAAKkM,OAC3B2lB,EAAOD,EAAS,GAChBA,EAAS,OACL,oBAAoB5xB,WAAc2C,EAAW,kBAAkBA,KAAc,6CACxDivB,EAAS,KAAKA,EAAS,gDACzBA,EAAS,gCAG/BhwB,QAAQkwB,UAAYD,IACjBE,QAAQL,EAAK9vB,eACbR,KACA,6BAA6BA,EAAE4J,mBAC/BnF,MAAMzE,KACTQ,QAAQkwB,UAAY,WAKnB9f,GAAO,OACRpQ,gBAGE,OACFA,YACL,CAAC4G,EAAMwJ,EAAOjE,MAET,MAAD,CAAKrM,IAAKgwB,EAAMlxB,MAAM,sBCjDAgI,KAAEA,UACzBkI,EAAMC,EAAOC,KAAK,KAAMpI,YACtB,OAAD,OACL,MAAD,CAAKhI,MAAM,cACT,IAAD,KAAIkQ,EAAI,kCACP,KAAD,CAAIlQ,MAAM,8BCSagI,KAAEA,cAAMwpB,UAAa3uB,kBAAS4uB,gBACjDvhB,EAAMC,EAAOC,KAAK,KAAMpI,IACvBzC,EAAOmsB,GAAYhwB,EAAwB,OAC3CiwB,EAAeC,GAAcC,OAChCF,WACK,OAAD,OAAOG,EAAD,CAAYzsB,MAAO,iDAAiDssB,EAAcnnB,UAAWlF,UAAWssB,WAGhHvhB,EAAMC,GAAaC,SACpBF,WACI,OAAD,OAAOyhB,EAAD,CAAYzsB,MAAO,0BAA0BkL,aAGjD,OACA,QACP,CAACF,EAAI5Q,GAAIoD,UAENkvB,EAAkBlqB,EAAOuB,SAC7BK,WAAYuB,GAAarC,EAAElJ,GAAI4Q,EAAIpF,cACnC7E,QAASuC,EAAElJ,OAEDyQ,EAAI,kBAAmBA,EAAIG,EAAI5Q,KAAMsyB,GAE5C/mB,GAAanI,EAASwN,EAAIpF,eACrB,6CAA6CoF,EAAIpF,oBAGpDuG,EAAOwgB,GAAYtwB,EAA2B,OAC9C6L,EAAa0kB,GAAkBvwB,EAAoC,SAChE,OACA,qB3B4C0BmB,gBACVsmB,EAAWtmB,IAClB0K,a2B7CH1K,GACbmE,SAAUirB,EAAermB,oB3BaE/I,EAAoBpD,aAC7CoN,EAAOpN,IAAOoN,EAAOpN,GAAIoD,UAAYA,EAAS,OAC5CqvB,QAAoB/I,EAAWtmB,GAC/BsvB,EAAa,WAAOvjB,WAAW7G,SAAU8G,EAAEpP,KAAOA,cAAK0I,WACxDgqB,QACE,IAAIzkB,MAAM,qBAAqBjO,eAG/B0I,EAAS+pB,EAAY9pB,QAAQ8d,IAAIiM,GACjC3gB,EAAQ,IAAIsa,YAAU3jB,GACxB0E,EAAOpN,KACJmoB,MAAM/a,EAAOpN,GAAI+R,MAAMvJ,MAAM,MAE7BmqB,UAAS,KACT/tB,QAAU,CAACiF,KAAKC,UAAUiI,EAAMvJ,UAEhCxI,GAAM,CAAE+R,MAAAA,EAAO3O,QAAAA,SACdjC,SACF,IAAI8M,MAAM,yBAAyBjO,mBAAoBoD,OAAajC,EAAE4J,mBAGvEqC,EAAOpN,GAAI+R,O2BjCR3O,EAASwN,EAAI5Q,IACpBuH,SAAUgrB,EAASrd,KACnB0d,mBAAqBhtB,MAAMzE,KAAaA,EAAE4J,cAC1C,CAAC3H,EAASwN,EAAI5Q,QAER+R,GAAO,OACN,eAkBJ7Q,EAAWC,IACZA,EAAE0xB,SAAqB,MAAV1xB,EAAEwG,OACRpE,eAAe,OAAQ,qBAC1BuvB,QACG3xB,EAAE0xB,SAAqB,MAAV1xB,EAAEwG,QACfpE,eAAe,OAAQ,qBAC1BwvB,YAGC,cACA3wB,iBAAiB,QAASlB,GAC5B,cACGmB,oBAAoB,QAASnB,MAErC,CAAC6Q,UAEGihB,EAAcC,GAAmBhxB,EAAS,KAC1CixB,EAAeC,GAAoBlxB,EAAmB,OACnD,qB3BN0BmB,gBACVsmB,EAAWtmB,IAClBwK,c2BKHxK,GACbmE,gBACM6rB,aAAyB,IAAIC,OAAOnD,MAAM,KAC1CoD,EAAU1lB,EAAY6Y,IAAI7V,EAAI5Q,IAClC2G,QAAS2M,EAAEtL,MAAM,MACjBgC,WAAYopB,EAAMG,UAAWjgB,EAAE4V,SAASsK,OACtCF,KACcA,MAGlBV,mBAAqBhtB,MAAMzE,KAAaA,EAAE4J,cAC1C,CAAC3H,EAASwN,EAAI5Q,GAAIgzB,UAEfS,EAAczzB,YACTuD,eAAe,cAAevD,kB5B6CRoD,EAAoBgoB,EAAkBprB,WAC/D4J,MAAM,iBAAiB5J,KAAMorB,KAAYprB,WAC3CyyB,EAAcrqB,EAAOuB,SAASrB,SAAUY,EAAElJ,KAAOoD,cAEhDiE,QAAYyF,MAAM,GAAG1D,KAAsBqpB,EAAYppB,KAAKqqB,wCAAwCtI,KAAYprB,uBACzGqH,EAAIuF,aACTzL,WACA2J,KAAK,iCAAiCsgB,YAAmBprB,KAAOmB,K4BnD5DiC,EAAS,WAAI6I,QAAQ2E,EAAI5Q,GAAIA,GAAIuH,qBACrC4gB,MAAMnR,GAAQ,QAIhB2c,EAAaC,GAAkB3xB,EAAS9B,OAAO0zB,WAAa,MAC5D3J,EAAQ4J,GAAW7xB,EAAS,IAC5BkoB,EAAY4J,GAAe9xB,EAAS,IACpCmoB,EAAU4J,GAAa/xB,EAAS,IAuBhCgyB,EAAcC,GAAmBjyB,GAAS,GAE3CkyB,EAAa/N,GAAW8C,SAAStY,EAAI5Q,QACvCo0B,GAAe,EACfD,QAA4B,GAC5BR,QAA6B,qBAQ/B,OAAD,CAAMpzB,MAAO0zB,EAAe,cAAgB,MAC1CI,EAAD,CAAIr0B,GAAG,sBAAsBD,KAAK,WACjC,MAAD,CAAKQ,MAAM,cACT+B,EAAD,CAAK9B,KAAK,SAASC,MAAOgQ,EAAI,UAAW7P,QA7BvB,OACV2C,eAAe,aACV,KACL6mB,EAAW,QA2BlBlZ,EAAD,CAAS1Q,KAAK,UAAUC,MAAOgQ,EAAI,WAAY3O,UAAU,KACvDymB,EAAD,CAAU/nB,KAAK,SAASM,OAAK,EAACE,MAAOgyB,EAAc/xB,SAAUgyB,EAAiBlyB,SAAU,MACvF,MAAD,CAAKR,MAAM,eACT2yB,EAAcvsB,UAAerE,EAAD,CAAK7B,MAAOuW,EAAQpW,QAAS,IAAM6yB,EAAWzc,QAElD,IAAzBkc,EAAcroB,UAAiBvI,EAAD,CAAK7B,MAAOgQ,EAAI,mBAE/CS,EAAD,CAAS1Q,KAAK,MAAMC,MAAO2C,GACzBkvB,EAAgBjK,UAAU1hB,UACzBrE,EAAD,CAAK7B,MAAOyI,EAAGxI,OAAQwI,IAAM9F,EAASxC,QAAS,IAAMoxB,EAAgB9oB,UAGtEgI,EAAD,CAAS1Q,KAAK,sBACZ8B,EAAD,CAAK9B,KAAK,UAAUC,MAAOgQ,EAAI,SAAU7P,QA9G/B,OACH2C,eAAe,oBAClB4kB,MAAMpW,EAAMrJ,OAAOI,WAAW,QA6GjCxG,EAAD,CAAK9B,KAAK,aAAaC,MAAOgQ,EAAI,QAAS7P,QA3GjCO,MACXU,oBACQ0B,eAAe,OAAQ,mBAC1BuvB,YAyGHxwB,EAAD,CAAK9B,KAAK,cAAcC,MAAOgQ,EAAI,QAAS7P,QAvGlCO,MACXU,oBACQ0B,eAAe,OAAQ,mBAC1BwvB,YAuGLjtB,KAAUusB,EAAD,CAAYzsB,QAAcC,UAAW,IAAMosB,EAAS,UAC7DqC,GAADC,OAAU,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAO3O,QAAAA,EAAS0K,YAAAA,IAAjC,CAA+Cuc,QAAS4H,QAExD,MAAD,CAAK1xB,MAAM,gBAAgB2qB,MAAO,cAAc,GAAoB,GAAfkJ,WACnD,MAAD,CAAK7zB,MAAO,+BAA8B4zB,EAAa,SAAW,IAAMvzB,QAhCpD,OACX2C,eAAe,iBAAmB0wB,EAA2B,SAAZ,cAC1CA,KA+BdA,EAAepzB,EAAQ8E,SAAW9E,EAAQoE,QAE3C,MAAD,CAAK1E,MAAO,gCAA+BozB,EAAc,SAAW,IAAM/yB,QA3DrD,OACZ2C,eAAe,cACb4mB,EAAa,KA0DtBtpB,EAAQ0D,YAET,MAAD,CAAKhE,MAAO,4BAA2BozB,EAAc,SAAW,IAAM/yB,QAlErD,OACR2C,eAAe,UACjB2mB,EAAS,KAiEdrpB,EAAQsD,UAET,MAAD,CAAK5D,MAAO,iCAAkCK,QAxD3B,OACV2C,eAAe,gBAAkBowB,EAA0B,SAAZ,cACzCA,KACR,KACI,KACF,KAoDPA,EAAc9yB,EAAQqD,cAAgBrD,EAAQuD,SAGhD,MAAD,CAAK7D,MAAO,iBAAgB0zB,EAAe,SAAW,OACpDO,GAADD,OAAkB,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAO3O,QAAAA,EAASpD,GAAI4Q,EAAI5Q,KAAjD,CAAsD0mB,MAAOuN,EAAc5J,QAAS4H,QAEpF,MAAD,CAAK1xB,MAAO,gBAAeozB,EAAc,SAAW,OAClDc,GAADF,OAAiB,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAOjE,YAAAA,EAAaoc,OAAAA,EAAQC,WAAAA,EAAYC,SAAAA,IAAhE,CAA2E/Y,KAAM,WAAI3I,UAAU,OAAQ2hB,QAAS4H,oBC5L9F1pB,KAAEA,cAAMwpB,UACtBthB,EAAMC,EAAOC,KAAK,KAAMpI,YAClBkI,EAAI,iBACR,OAAD,OACL,MAAD,CAAKlQ,MAAM,QACT6H,EAAO+G,WAAWnF,YAAaoF,EAAE1M,WAAUiE,UAC1C+tB,GAAD,CAAUpkB,MAAOG,EAAIrB,EAAEpP,IAAK8E,KAAMsM,GAAShC,EAAE7F,WAE7CmrB,GAAD,CAAUpkB,MAAOG,EAAI,YAAa3L,KAAK,iBACtC,KAAD,QACC4vB,GAAD,CAAUpkB,MAAM,mBAAmB9P,KAAK,SAASsE,KAAK,sCACpD,IAAD,KAAG,uCAEH4vB,GAAD,CAAUpkB,MAAM,mBAAmB9P,KAAK,SAASsE,KAAK,sCACpD,IAAD,KAAG,oDAEH4vB,GAAD,CAAUpkB,MAAM,qBAAqBxL,KAAK,wCACxC,IAAD,KAAG,wDCjBkByD,KAAEA,cAAMwpB,UAC1BthB,EAAMC,EAAOC,KAAK,KAAMpI,YAClBkI,EAAI,2BAA4BA,EAAI,gBACxC,OAAD,OACL,MAAD,CAAKlQ,MAAM,QACT6H,EAAO+G,WAAWnF,WAA2B,aAAfoF,EAAE1M,WAAyBiE,UACxD+tB,GAAD,CAAUpkB,MAAOG,EAAIrB,EAAEpP,IAAK8E,KAAMsM,GAAShC,EAAE7F,WCFjD,oBACQhB,EAAMxF,GAAed,EAAiB,SASnC,sBAEFZ,EAASioB,GAAME,oBACf/iB,QAAQC,IAAI,CACjBiuB,EAAW,SACI,OAAXtzB,EAAkB,CAACszB,EAAWtzB,IAAW,OAElCA,SAEX,UAEI6B,EAAOD,GAAYhB,EAAiBqnB,GAAMG,eAMvC,cACAmL,gBAAgBjK,aAAa,aAAcznB,KAClD,CAACA,UAEGE,EAASD,GAAclB,EAAoBqnB,GAAMI,eAOjDpZ,EAAOukB,GAAY5yB,EAAiByO,EAAOnI,EAAM,eAClDwpB,EAAc,CAAC+C,EAAenrB,EAAW,CAAC,OAAQ,OAAQ,oBACtD2G,MAAQ,GAAGwkB,eAAmBnrB,EAASoF,KAAK,UAC5C+lB,sBASRC,GAADlsB,KAAY,CAACN,KAAAA,EAAM+H,MAAAA,EAAOlN,QAAAA,EAASF,MAAAA,EAAOF,SAAUuF,EAAMiI,eAhDpCrG,MAAOnH,IACxBwE,EAAQxE,UACN2xB,EAAW3xB,KAERD,YAAYC,MAChBD,YAAYC,KACNA,IA0C8DuN,YA5BtDykB,MACV/xB,SAAS+xB,MACb/xB,SAAS+xB,KACNA,SA0BRC,EAAD,CAAQh0B,SAPYE,gBAET,IAAMrB,EAAU+C,SAASuO,GAASjQ,EAAEoI,YAM7C2rB,GAADrsB,GAAMoD,KAAK,KAAQ,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACzBoD,GAADtsB,GAAeoD,KAAK,oBAAuB,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACjDqD,GAADvsB,GAAUoD,KAAK,aAAgB,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACrCsD,GAADd,KAAWzrB,SAAO,GAAK,CAACP,KAAAA,EAAMnF,QAAAA,EAAS2uB,YAAAA,IAAvC,CAAqDC,gBAvBhCsD,MACZnyB,WAAWmyB,MACfnyB,WAAWmyB,KACNA,SAyBbC,IAAQC,GAAD,MAAUlvB,SAASnE"} \ No newline at end of file +{"version":3,"file":"index.47e29d70.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/DataFetcher.ts","../../src/app/Schemas.ts","../../src/app/Utils.ts","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/hooks/useModel.ts","../../src/app/hooks/useOnDrag.ts","../../src/app/previews/noise/ImprovedNoise.ts","../../src/app/previews/noise/PerlinNoise.ts","../../src/app/previews/noise/NormalNoise.ts","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/PreviewPanel.tsx","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/hooks/useOnHover.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/schema/transformOutput.ts","../../src/app/Store.ts","../../src/app/components/SourcePanel.tsx","../../src/app/components/ToolCard.tsx","../../src/app/schema/Mounter.ts","../../src/app/schema/Octicon.ts","../../src/app/schema/renderHtml.ts","../../src/app/components/Tree.tsx","../../src/app/pages/FieldSettings.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Worldgen.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn
\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: class_, onClick }: BtnProps) {\n\treturn
\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t
\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\ttype?: 'number' | 'text',\n\tdoSelect?: number,\n\tvalue?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, type, doSelect, value, onChange }: BtnInputProps) {\n\tconst onKeyUp = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (type !== 'number' || (!value.endsWith('.') && !isNaN(Number(value)))) {\n\t\t\tonChange?.(value)\n\t\t}\n\t}\n\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\treturn
e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t\t\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { useEffect, useState } from 'preact/hooks'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, children }: BtnMenuProps) {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t}\n\t}, [active])\n\n\treturn
\n\t\t setActive(true)} />\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tsearch: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tthree_bars: ,\n\tunfold: ,\n\tupload: ,\n\tx: ,\n\tx_circle: ,\n}\n","import { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\treturn
\n\t\t{onDismiss &&
{Octicon.x}
}\n\t\t

{error}

\n\t\t

If you think this is a bug, you can report it on GitHub

\n\t
\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import config from '../config.json'\nimport English from '../locales/en.json'\n\nexport type Localize = (key: string, ...params: string[]) => string\n\ninterface Locale {\n\t[key: string]: string\n}\n\nexport const Locales: {\n\t[key: string]: Locale,\n} = {\n\tfallback: English,\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nexport function locale(language: string, key: string, ...params: string[]): string {\n\tconst value: string | undefined = Locales[language]?.[key]\n\t\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nexport async function loadLocale(language: string) {\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n","import type { CollectionRegistry } from '@mcschema/core'\nimport config from '../config.json'\nimport type { BlockStateRegistry, VersionId } from './Schemas'\nimport { checkVersion } from './Schemas'\n\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`))\n\nconst CACHE_NAME = 'misode-v1'\n\ntype VersionRef = 'mcdata_master' | 'vanilla_datapack_summary' | 'vanilla_datapack_data'\n\ntype Version = {\n\tid: string,\n\trefs: Partial<{ [key in VersionRef]: string }>,\n\tdynamic?: boolean,\n}\n\ndeclare var __MCDATA_MASTER_HASH__: string\ndeclare var __VANILLA_DATAPACK_SUMMARY_HASH__: string\n\nconst mcdataUrl = 'https://raw.githubusercontent.com/Arcensoth/mcdata'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\n\nconst refs: {\n\tid: VersionRef,\n\thash: string,\n\turl: string,\n}[] = [\n\t{\n\t\tid: 'mcdata_master',\n\t\thash: __MCDATA_MASTER_HASH__,\n\t\turl: mcdataUrl,\n\t},\n\t{\n\t\tid: 'vanilla_datapack_summary',\n\t\thash: __VANILLA_DATAPACK_SUMMARY_HASH__,\n\t\turl: vanillaDatapackUrl,\n\t},\n]\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\tconsole.debug(`[fetchData] ${JSON.stringify(version)}`)\n\n\tif (version.dynamic) {\n\t\tawait Promise.all(refs\n\t\t\t.filter(r => localStorage.getItem(`cached_${r.id}`) !== r.hash)\n\t\t\t.map(async r => {\n\t\t\t\tconsole.debug(`[deleteMatching] ${r.id} '${localStorage.getItem(`cached_${r.id}`)}' < '${r.hash}' ${r.url}/${version.refs[r.id]}`)\n\t\t\t\tawait deleteMatching(url => url.startsWith(`${r.url}/${version.refs[r.id]}`))\n\t\t\t\tconsole.debug(`[deleteMatching] Done! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t\tlocalStorage.setItem(`cached_${r.id}`, r.hash)\n\t\t\t\tconsole.debug(`[deleteMatching] Set! ${r.id} ${r.hash} '${localStorage.getItem(`cached_${r.id}`)}'`)\n\t\t\t}))\n\t}\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t\tfetchDynamicRegistries(version, collectionTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => !r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, undefined, '1.15')) {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/registries.json`\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: {[id: string]: string[]} = {}\n\t\t\t\tObject.keys(data).forEach(k => {\n\t\t\t\t\tres[k.slice(10)] = Object.keys(data[k].entries)\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id] ?? [])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching registries:', e)\n\t\t}\n\t} else {\n\t\tawait Promise.all(registries.map(async r => {\n\t\t\ttry {\n\t\t\t\tconst url = r.path\n\t\t\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/${r.path}/data.min.json`\n\t\t\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/registries/${r.id}/data.min.json`\n\t\t\t\ttarget.register(r.id, await getData(url, v => v.values))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.warn(`Error occurred while fetching registry ${r.id}:`, e)\n\t\t\t}\n\t\t}))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\tif (checkVersion(version.id, undefined, '1.16')) {\n\t\tconst url = (checkVersion(version.id, undefined, '1.15'))\n\t\t\t? `${mcdataUrl}/${version.refs.mcdata_master}/generated/reports/blocks.json`\n\t\t\t: `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/data.min.json`\n\n\t\ttry {\n\t\t\tconst data = await getData(url, (data) => {\n\t\t\t\tconst res: BlockStateRegistry = {}\n\t\t\t\tObject.keys(data).forEach(b => {\n\t\t\t\t\tres[b] = {\n\t\t\t\t\t\tproperties: data[b].properties,\n\t\t\t\t\t\tdefault: data[b].states.find((s: any) => s.default).properties,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\treturn res\n\t\t\t})\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t} else {\n\t\tconst url = `${mcdataUrl}/${version.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tObject.assign(target, data)\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching block state map:', e)\n\t\t}\n\t}\n}\n\nasync function fetchDynamicRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchDynamicRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.dynamic)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tif (checkVersion(version.id, '1.16')) {\n\t\tconst url = `${vanillaDatapackUrl}/${version.refs.vanilla_datapack_summary}/summary/flattened.min.json`\n\t\ttry {\n\t\t\tconst data = await getData(url)\n\t\t\tregistries.forEach(r => {\n\t\t\t\ttarget.register(r.id, data[r.id])\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.warn('Error occurred while fetching dynamic registries:', e)\n\t\t}\n\t}\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${id} ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst res = await fetch(`${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tconsole.warn(`Error occurred while fetching ${registry} preset ${id}:`, e)\n\t}\n}\n\nasync function getData(url: string, fn: (v: any) => T = (v: any) => v): Promise {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${e.message}`)\n\t}\n}\n","import type { CollectionRegistry, SchemaRegistry } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport config from '../config.json'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties?: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault?: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n}\n\nasync function getVersion(id: VersionId): Promise {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${e.message}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\tconst schemaName = config.generators.find(g => g.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema)\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tthrow new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${e.message}`)\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","import config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(//g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = url.replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n","import { getCurrentUrl, Link, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { locale } from '../Locales'\nimport type { VersionId } from '../Schemas'\nimport { checkVersion } from '../Schemas'\nimport { cleanUrl, getGenerator } from '../Utils'\n\nconst Themes: Record = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\ntype HeaderProps = {\n\tlang: string,\n\ttitle: string,\n\tversion: VersionId,\n\ttheme: string,\n\tchangeTheme: (theme: string) => unknown,\n\tlanguage: string,\n\tchangeLanguage: (language: string) => unknown,\n}\nexport function Header({ lang, title, version, theme, changeTheme, language, changeLanguage }: HeaderProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn
\n\t\t
\n\t\t\t{Icons.home}\n\t\t\t

{title}

\n\t\t\t{gen && \n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t}\n\t\t
\n\t\t\n\t
\n}\n","export const Icons = {\n\thome: ,\n\treport: ,\n\tsounds: ,\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\tlistener.invalidated()\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import { useEffect, useRef } from 'preact/hooks'\n\nexport function useOnDrag(element: HTMLElement, drag: (dx: number, dy: number) => unknown) {\n\tif (!element) return\n\n\tconst request = useRef()\n\tconst dragStart = useRef<[number, number] | undefined>()\n\tconst pending = useRef<[number, number]>([0, 0])\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tcancelAnimationFrame(request.current)\n\t\t\t\tpending.current = [pending.current[0] + dx, pending.current[1] + dy]\n\t\t\t\trequest.current = requestAnimationFrame(() => {\n\t\t\t\t\tdrag(...pending.current)\n\t\t\t\t\tpending.current = [0, 0]\n\t\t\t\t})\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = (_e: MouseEvent) => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\n\t\telement.addEventListener('mousedown', onMouseDown)\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousedown', onMouseDown)\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [element])\n}\n","import type seedrandom from 'seedrandom'\nimport { lerp3, smoothstep } from '../../Utils'\n\nexport class ImprovedNoise {\n\tprivate static readonly GRADIENT = [[1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0], [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1], [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1], [1, 1, 0], [0, -1, 1], [-1, 1, 0], [0, -1, -1]]\n\tprivate readonly p: number[]\n\tpublic readonly xo: number\n\tpublic readonly yo: number\n\tpublic readonly zo: number\n\n\tconstructor(random: seedrandom.prng) {\n\t\tthis.xo = random() * 256\n\t\tthis.yo = random() * 256\n\t\tthis.zo = random() * 256\n\t\tthis.p = Array(256)\n\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tthis.p[i] = i\n\t\t}\n\t\tfor (let i = 0; i < 256; i += 1) {\n\t\t\tconst n = random.int32() % (256 - i)\n\t\t\tconst b = this.p[i]\n\t\t\tthis.p[i] = this.p[i + n]\n\t\t\tthis.p[i + n] = b\n\t\t}\n\t}\n\n\tpublic noise(x: number, y: number, z: number, a: number, b: number) {\n\t\tconst x2 = x + this.xo\n\t\tconst y2 = y + this.yo\n\t\tconst z2 = z + this.zo\n\t\tconst x3 = Math.floor(x2)\n\t\tconst y3 = Math.floor(y2)\n\t\tconst z3 = Math.floor(z2)\n\t\tconst x4 = x2 - x3\n\t\tconst y4 = y2 - y3\n\t\tconst z4 = z2 - z3\n\t\tconst x5 = smoothstep(x4)\n\t\tconst y5 = smoothstep(y4)\n\t\tconst z5 = smoothstep(z4)\n\n\t\tlet y6 = 0\n\t\tif (a !== 0) {\n\t\t\ty6 = Math.floor(Math.min(b, y4) / a) * a\n\t\t}\n\n\t\treturn this.sampleAndLerp(x3, y3, z3, x4, y4 - y6, z4, x5, y5, z5)\n\t}\n\n\tprivate gradDot(a: number, b: number, c: number, d: number) {\n\t\tconst grad = ImprovedNoise.GRADIENT[a & 15]\n\t\treturn grad[0] * b + grad[1] * c + grad[2] * d\n\t}\n\n\tprivate P(i: number) {\n\t\treturn this.p[i & 255] & 255\n\t}\n\n\tpublic sampleAndLerp(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) {\n\t\tconst j = this.P(a) + b\n\t\tconst k = this.P(j) + c\n\t\tconst l = this.P(j + 1) + c\n\t\tconst m = this.P(a + 1) + b\n\t\tconst n = this.P(m) + c\n\t\tconst o = this.P(m + 1) + c\n\n\t\tconst p = this.gradDot(this.P(k), d, e, f)\n\t\tconst q = this.gradDot(this.P(n), d - 1, e, f)\n\t\tconst r = this.gradDot(this.P(l), d, e - 1, f)\n\t\tconst s = this.gradDot(this.P(o), d - 1, e - 1, f)\n \n\t\tconst t = this.gradDot(this.P(k + 1), d, e, f - 1)\n\t\tconst u = this.gradDot(this.P(n + 1), d - 1, e, f - 1)\n\t\tconst v = this.gradDot(this.P(l + 1), d, e - 1, f - 1)\n\t\tconst w = this.gradDot(this.P(o + 1), d - 1, e - 1, f - 1)\n\n\t\treturn lerp3(g, h, i, p, q, r, s, t, u, v, w)\n\t}\n}\n","import seedrandom from 'seedrandom'\nimport { ImprovedNoise } from './ImprovedNoise'\n\nexport class PerlinNoise {\n\tprivate readonly noiseLevels: ImprovedNoise[]\n\tprivate readonly amplitudes: number[]\n\tprivate readonly lowestFreqValueFactor: number\n\tprivate readonly lowestFreqInputFactor: number\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.amplitudes = amplitudes\n\n\t\tthis.noiseLevels = Array(this.amplitudes.length)\n\t\tfor (let i = 0; i < this.amplitudes.length; i += 1) {\n\t\t\tthis.noiseLevels[i] = new ImprovedNoise(seedrandom(seed))\n\t\t}\n \n\t\tthis.lowestFreqInputFactor = Math.pow(2, firstOctave)\n\t\tthis.lowestFreqValueFactor = Math.pow(2, (amplitudes.length - 1)) / (Math.pow(2, amplitudes.length) - 1)\n\t}\n\n\tpublic static fromRange(seed: string, min: number, max: number) {\n\t\treturn new PerlinNoise(seed, min, Array(max - min + 1).fill(1))\n\t}\n\n\tpublic getValue(x: number, y: number, z: number, a = 0, b = 0, fixY = false) {\n\t\tlet value = 0\n\t\tlet inputF = this.lowestFreqInputFactor\n\t\tlet valueF = this.lowestFreqValueFactor\n\t\tfor (let i = 0; i < this.noiseLevels.length; i += 1) {\n\t\t\tconst noise = this.noiseLevels[i]\n\t\t\tif (noise) {\n\t\t\t\tvalue += this.amplitudes[i] * noise.noise(\n\t\t\t\t\tPerlinNoise.wrap(x * inputF),\n\t\t\t\t\tfixY ? -noise.yo : PerlinNoise.wrap(y * inputF),\n\t\t\t\t\tPerlinNoise.wrap(z * inputF),\n\t\t\t\t\ta * inputF,\n\t\t\t\t\tb * inputF\n\t\t\t\t) * valueF\n\t\t\t}\n\t\t\tinputF *= 2\n\t\t\tvalueF /= 2\n\t\t}\n\t\treturn value\n\t}\n\n\tpublic getOctaveNoise(i: number) {\n\t\treturn this.noiseLevels[this.noiseLevels.length - 1 - i]\n\t}\n\n\tpublic static wrap(value: number) {\n\t\treturn value - Math.floor(value / 3.3554432E7 + 0.5) * 3.3554432E7\n\t}\n}\n","import { PerlinNoise } from './PerlinNoise'\n\nexport class NormalNoise {\n\tprivate readonly valueFactor: number\n\tprivate readonly first: PerlinNoise\n\tprivate readonly second: PerlinNoise\n\n\tconstructor(seed: string, firstOctave: number, amplitudes: number[]) {\n\t\tthis.first = new PerlinNoise(seed, firstOctave, amplitudes)\n\t\tthis.second = new PerlinNoise(seed + 'a', firstOctave, amplitudes)\n\n\t\tlet min = +Infinity\n\t\tlet max = -Infinity\n\t\tfor (let i = 0; i < amplitudes.length; i += 1) {\n\t\t\tif (amplitudes[i] !== 0) {\n\t\t\t\tmin = Math.min(min, i)\n\t\t\t\tmax = Math.max(max, i)\n\t\t\t}\n\t\t}\n\n\t\tconst expectedDeviation = 0.1 * (1 + 1 / (max - min + 1))\n\t\tthis.valueFactor = (1/6) / expectedDeviation\n\t}\n\n\tgetValue(x: number, y: number, z: number) {\n\t\tconst x2 = x * 1.0181268882175227\n\t\tconst y2 = y * 1.0181268882175227\n\t\tconst z2 = z * 1.0181268882175227\n\t\treturn (this.first.getValue(x, y, z) + this.second.getValue(x2, y2, z2)) * this.valueFactor\n\t}\n}\n","import { stringToColor } from '../Utils'\nimport { NormalNoise } from './noise/NormalNoise'\n\ntype BiomeColors =Record\ntype BiomeSourceOptions = {\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: string,\n}\n\nconst NoiseMaps = ['altitude', 'temperature', 'humidity', 'weirdness']\n\nexport function biomeSource(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise': return multiNoise(state, img, options)\n\t\tcase 'fixed': return fixed(state, img, options)\n\t\tcase 'checkerboard': return checkerboard(state, img, options)\n\t}\n}\n\nfunction fixed(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst data = img.data\n\tconst color = getBiomeColor(state.biome, options.biomeColors)\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction checkerboard(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes?.forEach((b: string) => {\n\t\tbiomeColorCache[b] = getBiomeColor(b, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tconst shift = (state.scale ?? 2) + 2\n\tconst numBiomes = state.biomes?.length ?? 0\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\tconst b = state.biomes?.[j]\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction multiNoise(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tif (state.preset?.replace(/^minecraft:/, '') === 'nether') {\n\t\tstate = NetherPreset\n\t}\n\n\tconst noise = NoiseMaps.map((id, i) => {\n\t\tconst config = state[`${id}_noise`]\n\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t})\n\n\tconst biomeColorCache: BiomeColors = {}\n\tstate.biomes.forEach((b: any) => {\n\t\tbiomeColorCache[b.biome] = getBiomeColor(b.biome, options.biomeColors)\n\t})\n\n\tconst data = img.data\n\tconst ox = -options.offset[0] - 100 + options.res / 2\n\tconst oy = -options.offset[1] - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let y = 0; y < 200; y += options.res) {\n\t\t\tconst i = y * row + x * col\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oy) * options.scale\n\t\t\tconst b = closestBiome(noise, state.biomes, xx, yy)\n\t\t\tconst color = biomeColorCache[b] ?? [128, 128, 128]\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getBiome(state: any, x: number, y: number, options: BiomeSourceOptions): string | undefined {\n\tconst [xx, yy] = toWorld([x, y], options)\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'multi_noise':\n\t\t\tconst noise = NoiseMaps.map((id, i) => {\n\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\treturn new NormalNoise(options.seed + i, config.firstOctave, config.amplitudes)\n\t\t\t})\n\t\t\treturn closestBiome(noise, state.biomes, xx, yy)\n\t\tcase 'fixed': return state.biome\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\tconst j = (((xx >> shift) + (yy >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\treturn state.biomes?.[j]\n\t}\n\treturn undefined\n}\n\nexport function getBiomeColor(biome: string, biomeColors: BiomeColors) {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, y]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst yy = (y - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, yy]\n}\n\nfunction closestBiome(noise: NormalNoise[], biomes: any[], x: number, y: number): string {\n\tif (!Array.isArray(biomes) || biomes.length === 0) return ''\n\tconst n = noise.map(n => n.getValue(x, y, 0))\n\tlet minDist = Infinity\n\tlet minBiome = ''\n\tfor (const b of biomes) {\n\t\tconst dist = fitness(b.parameters, {altitude: n[0], temperature: n[1], humidity: n[2], weirdness: n[3], offset: 0})\n\t\tif (dist < minDist) {\n\t\t\tminDist = dist\n\t\t\tminBiome = b.biome\n\t\t}\n\t}\n\treturn minBiome\n}\n\nfunction fitness(a: any, b: any) {\n\treturn (a.altitude - b.altitude) * (a.altitude - b.altitude) + (a.temperature - b.temperature) * (a.temperature - b.temperature) + (a.humidity - b.humidity) * (a.humidity - b.humidity) + (a.weirdness - b.weirdness) * (a.weirdness - b.weirdness) + (a.offset - b.offset) * (a.offset - b.offset)\n}\n\nconst VanillaColors: Record = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n}\n\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\n","import seedrandom from 'seedrandom'\nimport type { VersionId } from '../Schemas'\nimport { clamp, stringToColor } from '../Utils'\nimport { PerlinNoise } from './noise/PerlinNoise'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: seedrandom.prng,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: string,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = seedrandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(options.seed + 'frwynup', 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tgetPlacements([x * 16, 0, z * 16], state, ctx)\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction nextInt(max: number, ctx: PlacementContext): number {\n\treturn Math.floor(ctx.random() * max)\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + nextInt(1 + (value.spread ?? 0), ctx)\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + nextInt(nextInt(value.value.max_inclusive - value.value.min_inclusive + 1, ctx) + 1, ctx)\n\t\t\tcase 'clamped': return Math.max(value.value.min_inclusive, Math.min(value.value.max_inclusive, sampleInt(value.value.source, ctx)))\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.random() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.random() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[nextInt(config?.features?.length ?? 0, ctx)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.random() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.random() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(sampleInt(config?.count ?? 1, ctx)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + nextInt(16, ctx),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + nextInt(16, ctx),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.getValue(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + nextInt(3, ctx) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + nextInt(3, ctx) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = nextInt(config?.spread ?? 0, ctx) + nextInt(config?.spread ?? 0, ctx) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + nextInt(6, ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t4 + nextInt(28, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + nextInt(nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = nextInt(1 + nextInt(sampleInt(config?.count, ctx), ctx), ctx)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tnextInt(128, ctx),\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, nextInt(y * 2, ctx))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + nextInt(8, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + nextInt(8, ctx),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (nextInt((config.chance ?? 1) / 10, ctx) === 0) {\n\t\t\tconst y = nextInt(nextInt(256 - 8, ctx) + 8, ctx)\n\t\t\tif (y < ctx.seaLevel || nextInt((config?.chance ?? 1) / 8, ctx) == 0) {\n\t\t\t\tconst x = nextInt(16, ctx) + pos[0]\n\t\t\t\tconst z = nextInt(16, ctx) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = nextInt(nextInt(nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx) + (config?.bottom_offset ?? 0), ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = nextInt(pos[1] + 32, ctx)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\tpos[1],\n\t\t\tpos[2] + nextInt(16, ctx),\n\t\t]]\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (nextInt(config.chance ?? 1, ctx) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + nextInt(16, ctx),\n\t\t\t\tnextInt(256, ctx),\n\t\t\t\tpos[2] + nextInt(16, ctx),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { clampedLerp, lerp2 } from '../../Utils'\nimport { PerlinNoise } from './PerlinNoise'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: string) {\n\t\tthis.minLimitPerlinNoise = PerlinNoise.fromRange(seed + 'djfqnqd', -15, 0)\n\t\tthis.maxLimitPerlinNoise = PerlinNoise.fromRange(seed + 'gowdnqs', -15, 0)\n\t\tthis.mainPerlinNoise = PerlinNoise.fromRange(seed + 'afiwmco', -7, 0)\n\t\tthis.depthNoise = PerlinNoise.fromRange(seed + 'qphnmeo', -15, 0)\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0).zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.getValue(x * 200, 10, this.depthNoise.getOctaveNoise(0).zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.noise(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.noise(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { NoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale: number,\n\tbiomeDepth: number,\n\toffset: number,\n\twidth: number,\n\tseed: string,\n}\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst generator = new NoiseChunkGenerator(options.seed)\n\tgenerator.reset(state, options.biomeDepth, options.biomeScale, options.offset, 200)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport type { FunctionalComponent } from 'preact'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport type { VersionId } from '../Schemas'\nimport { BiomeSourcePreview, DecoratorPreview, NoiseSettingsPreview } from './previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise_settings', 'worldgen/configured_feature']\n\nexport const Previews: {\n\tid: string,\n\tgenerator: string,\n\tpath: Path,\n\tpredicate: (model: DataModel) => boolean,\n\tpreview: FunctionalComponent<{\n\t\tlang: string,\n\t\tmodel: DataModel,\n\t\tdata: any,\n\t\tversion: VersionId,\n\t\tshown: boolean,\n\t}>,\n}[] = [\n\t{\n\t\tid: 'biome-noise',\n\t\tgenerator: 'dimension',\n\t\tpath: new Path(['generator', 'biome_source']),\n\t\tpredicate: model => model.get(new Path(['generator', 'type'])).endsWith('noise'),\n\t\tpreview: BiomeSourcePreview,\n\t},\n\t{\n\t\tid: 'noise-settings',\n\t\tgenerator: 'worldgen/noise_settings',\n\t\tpath: new Path(['noise']),\n\t\tpredicate: () => true,\n\t\tpreview: NoiseSettingsPreview,\n\t},\n\t{\n\t\tid: 'decorator',\n\t\tgenerator: 'worldgen/configured_feature',\n\t\tpath: new Path([]),\n\t\tpredicate: () => true,\n\t\tpreview: DecoratorPreview,\n\t},\n]\n\ntype PreviewPanelProps = {\n\tlang: string,\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ lang, model, version, id, shown }: PreviewPanelProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\treturn <>\n\t\t{Previews.filter(p => p.generator === id).map(p => {\n\t\t\tconst data = model?.get(p.path)\n\t\t\tif (!model || data === undefined || !p.predicate(model)) {\n\t\t\t\treturn <>\n\t\t\t}\n\t\t\treturn p.preview({ lang, model: model!, data, version, shown })\n\t\t})}\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { useOnDrag, useOnHover } from '../../hooks'\nimport { biomeSource, getBiome } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype BiomeSourceProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const BiomeSourcePreview = ({ data, shown }: BiomeSourceProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [focused, setFocused] = useState(undefined)\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst redrawTimeout = useRef(undefined)\n\tconst redraw = useRef()\n\tconst refocus = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = (res = 4) => {\n\t\t\tif (type !== 'multi_noise') res = 1\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = 200 / res\n\t\t\tcanvas.current.height = 200 / res\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tbiomeSource(data, img, { biomeColors: {}, offset: offset.current, scale, seed, res })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t\tif (res !== 1) {\n\t\t\t\tclearTimeout(redrawTimeout.current)\n\t\t\t\tredrawTimeout.current = setTimeout(() => redraw.current(1), 150) as any\n\t\t\t}\n\t\t}\n\t\trefocus.current = (x: number, y: number) => {\n\t\t\tconst x2 = x * 200 / canvas.current.clientWidth\n\t\t\tconst y2 = y * 200 / canvas.current.clientHeight\n\t\t\tconst biome = getBiome(data, x2, y2, { biomeColors: {}, offset: offset.current, scale, seed, res: 1 })\n\t\t\tsetFocused(biome)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx, dy) => {\n\t\tconst x = dx * 200 / canvas.current.clientWidth\n\t\tconst y = dy * 200 / canvas.current.clientHeight\n\t\toffset.current = [offset.current[0] + x, offset.current[1] + y]\n\t\tredraw.current()\n\t})\n\n\tuseOnHover(canvas.current, (x, y) => {\n\t\tif (x === undefined || y === undefined) {\n\t\t\tsetFocused(undefined)\n\t\t} else {\n\t\t\trefocus.current(x, y)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] *= scale / newScale\n\t\toffset.current[1] *= scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t changeScale(scale * 1.5)} />\n\t\t\t\t changeScale(scale / 1.5)} />\n\t\t\t}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t setSeed(hexId())} />}\n\t\t
\n\t\t\n\t\n}\n","import { useEffect } from 'preact/hooks'\n\nexport function useOnHover(element: HTMLElement, hover: (x: number | undefined, y: number | undefined) => unknown) {\n\tif (!element) return\n\n\tconst onMouseMove = (e: MouseEvent) => {\n\t\thover(e.offsetX, e.offsetY)\n\t}\n\tconst onMouseLeave = () => {\n\t\thover(undefined, undefined)\n\t}\n\n\tuseEffect(() => {\n\t\telement.addEventListener('mousemove', onMouseMove)\n\t\telement.addEventListener('mouseleave', onMouseLeave)\n\t\treturn () => {\n\t\t\telement.removeEventListener('mousemove', onMouseMove)\n\t\t\telement.removeEventListener('mouseleave', onMouseLeave)\n\t\t}\n\t}, [element])\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useOnDrag } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { hexId } from '../../Utils'\n\ntype NoiseSettingsProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tshown: boolean,\n}\nexport const NoiseSettingsPreview = ({ lang, data, shown }: NoiseSettingsProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(hexId())\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\n\tconst canvas = useRef(null)\n\tconst offset = useRef(0)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tconst size = data.height\n\t\t\tcanvas.current.width = size\n\t\t\tcanvas.current.height = size\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tnoiseSettings(data, img, { biomeDepth, biomeScale, offset: offset.current, width: size, seed })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tuseOnDrag(canvas.current, (dx) => {\n\t\tconst x = dx * canvas.current.width / canvas.current.clientWidth\n\t\toffset.current = offset.current + x\n\t\tredraw.current()\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw.current()\n\t\t}\n\t}, [state, biomeDepth, biomeScale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn } from '..'\nimport { decorator } from '../../previews'\nimport type { VersionId } from '../../Schemas'\nimport { hexId } from '../../Utils'\n\ntype DecoratorProps = {\n\tlang: string,\n\tmodel: DataModel,\n\tdata: any,\n\tversion: VersionId,\n\tshown: boolean,\n}\nexport const DecoratorPreview = ({ data, version, shown }: DecoratorProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(hexId())\n\n\tconst canvas = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tconst ctx = canvas.current.getContext('2d')!\n\t\t\tcanvas.current.width = scale * 16\n\t\t\tcanvas.current.height = scale * 16\n\t\t\tconst img = ctx.createImageData(canvas.current.width, canvas.current.height)\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tsetTimeout(() => redraw.current())\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t setScale(Math.min(16, scale + 1))} />\n\t\t\t setScale(Math.max(1, scale - 1))} />\n\t\t\t setSeed(hexId())} />\n\t\t
\n\t\t\n\t\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../Schemas'\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\treturn value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj, props)\n\t\t)\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties ?? {}).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tres[f] = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t})\n\t\treturn res\n\t},\n}\n","import type { VersionId } from './Schemas'\nimport { VersionIds } from './Schemas'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.17'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '.'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { transformOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry } from '../Schemas'\nimport { Store } from '../Store'\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n}\n\ntype SourcePanelProps = {\n\tlang: string,\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst props = { blockStates: blockStates ?? {} }\n\t\t\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, props)\n\t\t\t\tsource.current.value = JSON.stringify(data, null, INDENT[indent]) + '\\n'\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\tsource.current.value = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent])\n\n\tconst onImport = () => {\n\t\ttry {\n\t\t\tconst data = JSON.parse(source.current.value)\n\t\t\tmodel?.reset(data, false)\n\t\t} catch (e) {\n\t\t\tonError(`Error importing: ${e.message}`)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && source.current) {\n\t\t\tsource.current.select()\n\t\t\tdocument.execCommand('copy')\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && source.current && download.current) {\n\t\t\tconst content = encodeURIComponent(source.current.value)\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.json`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && source.current) {\n\t\t\tsource.current.value = ''\n\t\t\tsource.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\treturn <> \n\t\t
\n\t\t\t\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tlink: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, link, icon, children }: ToolCardProps) {\n\treturn \n\t\t{icon && Icons[icon]}\n\t\t
\n\t\t\t

{title}

\n\t\t\t{children}\n\t\t
\n\t
\n}\n","import { hexId } from '../Utils'\n\nexport class Mounter {\n\tprivate registry: { [id: string]: (el: Element) => void } = {}\n\n\tregister(callback: (el: Element) => void): string {\n\t\tconst id = hexId()\n\t\tthis.registry[id] = callback\n\t\treturn id\n\t}\n\n\ton(type: string, callback: (el: Element) => void): string {\n\t\treturn this.register(el => {\n\t\t\tel.addEventListener(type, evt => {\n\t\t\t\tcallback(el)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t}\n\n\tonChange(callback: (el: Element) => void): string {\n\t\treturn this.on('change', callback)\n\t}\n\n\tonClick(callback: (el: Element) => void): string {\n\t\treturn this.on('click', callback)\n\t}\n\n\tmounted(el: Element): void {\n\t\tel.querySelectorAll('[data-id]').forEach(el => {\n\t\t\tconst id = el.getAttribute('data-id')!\n\t\t\tthis.registry[id]?.(el)\n\t\t})\n\t\tthis.registry = {}\n\t}\n}\n","export const Octicon = {\n\tchevron_down: '',\n\tchevron_up: '',\n\tclippy: '',\n\tinfo: '',\n\tissue_opened: '',\n\tplus_circle: '',\n\ttrashcan: '',\n}\n","import type { EnumOption, Hook, ValidationOption } from '@mcschema/core'\nimport { DataModel, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { Localize } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { hexId, htmlEncode } from '../Utils'\nimport type { Mounter } from './Mounter'\nimport { Octicon } from './Octicon'\n\nexport type TreeProps = {\n\tloc: Localize,\n\tmounter: Mounter,\n\tversion: VersionId,\n\tblockStates: BlockStateRegistry,\n}\n\ndeclare var ResizeObserver: any\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\n/**\n * Renders the node and handles events to update the model\n * @returns string HTML representation of this node using the given data\n */\nexport const renderHtml: Hook<[any, TreeProps], [string, string, string]> = {\n\tbase() {\n\t\treturn ['', '', '']\n\t},\n\n\tboolean({ node }, path, value, props) {\n\t\tconst onFalse = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === false ? undefined : false)\n\t\t})\n\t\tconst onTrue = props.mounter.onClick(() => {\n\t\t\tpath.model.set(path, node.optional() && value === true ? undefined : true)\n\t\t})\n\t\treturn ['', `${htmlEncode(props.loc('false'))}\n\t\t\t${htmlEncode(props.loc('true'))}`, '']\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, props) {\n\t\tconst choice = switchNode.activeCase(path, true)\n\t\tconst pathWithContext = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst pathWithChoiceContext = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, pathWithContext, value, props)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = choice.type\n\t\t\tel.addEventListener('change', () => {\n\t\t\t\tconst c = choices.find(c => c.type === (el as HTMLSelectElement).value) ?? choice\n\t\t\t\tpath.model.set(path, c.change ? c.change(value) : c.node.default())\n\t\t\t})\n\t\t})\n\t\tconst inject = ``\n\n\t\treturn [prefix, inject + suffix, body]\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [children.default(), ...value])\n\t\t})\n\t\tconst onAddBottom = props.mounter.onClick(() => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tpath.model.set(path, [...value, children.default()])\n\t\t})\n\t\tconst suffix = ``\n\n\t\tlet body = ''\n\t\tif (Array.isArray(value)) {\n\t\t\tbody = value.map((childValue, index) => {\n\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(index), undefined))\n\t\t\t\tconst onMoveUp = props.mounter.onClick(() => {\n\t\t\t\t\t[value[index - 1], value[index]] = [value[index], value[index - 1]]\n\t\t\t\t\tpath.model.set(path, value)\n\t\t\t\t})\n\t\t\t\tconst onMoveDown = props.mounter.onClick(() => {\n\t\t\t\t\t[value[index + 1], value[index]] = [value[index], value[index + 1]]\n\t\t\t\t\tpath.model.set(path, value)\n\t\t\t\t})\n\t\t\t\tconst childPath = path.push(index).contextPush('entry')\n\t\t\t\tconst category = children.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = children.hook(this, childPath, childValue, props)\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${value.length <= 1 ? '' : `
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
`}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}).join('')\n\t\t\tif (value.length > 2) {\n\t\t\t\tbody += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, props) {\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = props.mounter.onClick(() => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), children.default())\n\t\t})\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tconst keyRendered = keysSchema.hook(this, keyPath, keyPath.get() ?? '', props)\n\t\tconst suffix = keyRendered[1] + ``\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties ?? {})\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties ?? {}).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, props)\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined) {\n\t\t\tbody = Object.keys(value)\n\t\t\t\t.map(key => {\n\t\t\t\t\tconst onRemove = props.mounter.onClick(() => path.model.set(path.push(key), undefined))\n\t\t\t\t\tconst childPath = path.modelPush(key)\n\t\t\t\t\tconst category = children.category(childPath)\n\t\t\t\t\tconst childrenSchema = blockState\n\t\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t\t: children\n\t\t\t\t\tif (blockState?.properties?.[key] && !blockState.properties?.[key].includes(value[key])) {\n\t\t\t\t\t\tpath.model.errors.add(childPath, 'error.invalid_enum_option', value[key])\n\t\t\t\t\t}\n\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = childrenSchema.hook(this, childPath, value[key], props)\n\t\t\t\t\treturn `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t\t\t
\n\t\t\t\t\t
`\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn ['', suffix, body]\n\t},\n\n\tnumber({ integer, config }, path, value, { mounter }) {\n\t\tconst onChange = mounter.onChange(el => {\n\t\t\tconst value = (el as HTMLInputElement).value\n\t\t\tconst parsed = config?.color\n\t\t\t\t? parseInt(value.slice(1), 16)\n\t\t\t\t: integer ? parseInt(value) : parseFloat(value)\n\t\t\tpath.model.set(path, parsed)\n\t\t})\n\t\tif (config?.color) {\n\t\t\tconst hex = (value?.toString(16).padStart(6, '0') ?? '000000')\n\t\t\treturn ['', ``, '']\n\t\t}\n\t\treturn ['', ``, '']\n\t},\n\n\tobject({ node, getActiveFields, getChildModelPath }, path, value, props) {\n\t\tlet prefix = ''\n\t\tlet suffix = ''\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tsuffix = ``\n\t\t\t} else {\n\t\t\t\tsuffix = ``\n\t\t\t}\n\t\t}\n\t\tlet body = ''\n\t\tif (typeof value === 'object' && value !== undefined && (!(node.optional() && value === undefined))) {\n\t\t\tconst activeFields = getActiveFields(path)\n\t\t\tconst activeKeys = Object.keys(activeFields)\n\t\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\tbody = activeKeys.map(k => {\n\t\t\t\tconst field = activeFields[k]\n\t\t\t\tconst childPath = getChildModelPath(path, k)\n\t\t\t\tconst context = childPath.getContext().join('.')\n\t\t\t\tif (hiddenFields.includes(context)) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst category = field.category(childPath)\n\t\t\t\tconst [cPrefix, cSuffix, cBody] = field.hook(this, childPath, value[k], props)\n\t\t\t\tif (cPrefix.length === 0 && cSuffix.length === 0 && cBody.length === 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tconst isFlattened = field.type(childPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\tprefix += `${error(props.loc, childPath, props.mounter)}${help(props.loc, childPath, props.mounter)}${cPrefix}`\n\t\t\t\t\tsuffix += cSuffix\n\t\t\t\t\treturn isFlattened ? cBody : ''\n\t\t\t\t}\n\n\t\t\t\treturn `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${error(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${help(props.loc, childPath, props.mounter)}\n\t\t\t\t\t\t${cPrefix}\n\t\t\t\t\t\t\n\t\t\t\t\t\t${cSuffix}\n\t\t\t\t\t
\n\t\t\t\t\t${cBody ? `
${cBody}
` : ''}\n\t\t\t\t
`\n\t\t\t})\n\t\t\t\t.join('')\n\t\t}\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring({ node, getValues, config }, path, value, props) {\n\t\tconst inputId = props.mounter.register(el => {\n\t\t\t(el as HTMLSelectElement).value = value ?? ''\n\t\t\tel.addEventListener('change', evt => {\n\t\t\t\tconst newValue = (el as HTMLSelectElement).value\n\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\tevt.stopPropagation()\n\t\t\t})\n\t\t})\n\t\tlet suffix\n\t\tconst values = getValues()\n\t\tconst context = path.getContext().join('.')\n\t\tif (nbtFields.includes(context)) {\n\t\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\t\tconst textareaId = props.mounter.register(el => {\n\t\t\t\tconst textarea = el as HTMLTextAreaElement\n\t\t\t\ttextarea.value = value ?? ''\n\t\t\t\ttextarea.addEventListener('change', evt => {\n\t\t\t\t\tconst newValue = textarea.value\n\t\t\t\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t\t\t\t\tevt.stopPropagation()\n\t\t\t\t})\n\t\t\t\tconst sizes = keyPath.get()\n\t\t\t\tif (sizes) {\n\t\t\t\t\ttextarea.style.width = `${sizes.split(' ')[0]}px`\n\t\t\t\t\ttextarea.style.height = `${sizes.split(' ')[1]}px`\n\t\t\t\t}\n\t\t\t\tnew ResizeObserver(() => {\n\t\t\t\t\tkeyPath.set(`${textarea.offsetWidth} ${textarea.offsetHeight}`)\n\t\t\t\t}).observe(el)\n\t\t\t})\n\t\t\tsuffix = ``\n\t\t} else if ((isEnum(config) && !config.additional)\n\t\t\t|| selectRegistries.includes(context)\t) {\n\t\t\tlet context = new Path([])\n\t\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\t\tcontext = context.contextPush(config.enum)\n\t\t\t} else if (!isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string') {\n\t\t\t\tcontext = context.contextPush(config.params.pool)\n\t\t\t}\n\t\t\tsuffix = ``\n\t\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\t\tconst blockState = props.blockStates?.[relativePath(path, config.params.id).get()]\n\t\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\t\tsuffix = ``\n\t\t} else {\n\t\t\tconst datalistId = hexId()\n\t\t\tsuffix = `\n\t\t\t\t${values.length === 0 ? '' : `\n\t\t\t\t\t${values.map(v => ``}`\n\t\t}\n\t\treturn ['', suffix, '']\n\t},\n}\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(loc: Localize, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = loc(key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn htmlEncode(ctx[ctx.length - 1])\n}\n\nfunction error(loc: Localize, path: ModelPath, mounter: Mounter) {\n\tconst e = path.model.errors.get(path, true)\n\tif (e.length === 0) return ''\n\tconst message = e[0].params ? loc(e[0].error, ...e[0].params) : loc(e[0].error)\n\treturn popupIcon('node-error', 'issue_opened', htmlEncode(message), mounter)\n}\n\nfunction help(loc: Localize, path: Path, mounter: Mounter) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = loc(key)\n\tif (message === key) return ''\n\treturn popupIcon('node-help', 'info', htmlEncode(message), mounter)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string, mounter: Mounter) => {\n\tconst onClick = mounter.onClick(el => {\n\t\tel.getElementsByTagName('span')[0].classList.add('show')\n\t\tdocument.body.addEventListener('click', () => {\n\t\t\tel.getElementsByTagName('span')[0].classList.remove('show')\n\t\t}, { capture: true, once: true })\n\t})\n\treturn `
\n\t\t${Octicon[icon]}\n\t\t${popup}\n\t
`\n}\n\nconst contextMenu = (loc: Localize, path: ModelPath, mounter: Mounter) => {\n\tconst id = mounter.register(el => {\n\t\tconst openMenu = () => {\n\t\t\tconst popup = document.createElement('div')\n\t\t\tpopup.classList.add('node-menu')\n\n\t\t\tconst message = loc(path.contextPush('help').getContext().join('.'))\n\t\t\tif (!message.endsWith('.help')) {\n\t\t\t\tpopup.insertAdjacentHTML('beforeend', `${message}`)\n\t\t\t}\n\n\t\t\tconst context = path.getContext().join('.')\n\t\t\tpopup.insertAdjacentHTML('beforeend', `\n\t\t\t\t
\n\t\t\t\t\t${Octicon.clippy}\n\t\t\t\t\tContext: \n\t\t\t\t\t${context}\n\t\t\t\t
`)\n\t\t\tpopup.querySelector('.menu-item .btn')?.addEventListener('click', () => {\n\t\t\t\tconst inputEl = document.createElement('input')\n\t\t\t\tinputEl.value = context\n\t\t\t\tel.appendChild(inputEl) \n\t\t\t\tinputEl.select()\n\t\t\t\tdocument.execCommand('copy')\n\t\t\t\tel.removeChild(inputEl)\n\t\t\t})\n\n\t\t\tel.appendChild(popup)\n\t\t\tdocument.body.addEventListener('click', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t\tdocument.body.addEventListener('contextmenu', () => {\n\t\t\t\ttry {el.removeChild(popup)} catch (e) {}\n\t\t\t}, { capture: true, once: true })\n\t\t}\n\t\tel.addEventListener('contextmenu', evt => {\n\t\t\topenMenu()\n\t\t\tevt.preventDefault()\n\t\t})\n\t\tlet timer: any = null\n\t\tel.addEventListener('touchstart', () => {\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\topenMenu()\n\t\t\t\ttimer = null\n\t\t\t}, 800)\n\t\t})\n\t\tel.addEventListener('touchend', () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer)\n\t\t\t\ttimer = null\n\t\t\t}\n\t\t})\n\t})\n\treturn `data-id=\"${id}\"`\n}\n","import type { DataModel } from '@mcschema/core'\nimport { ModelPath } from '@mcschema/core'\nimport { useEffect, useRef } from 'preact/hooks'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport { Mounter } from '../schema/Mounter'\nimport { renderHtml } from '../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\n\ntype TreePanelProps = {\n\tlang: string,\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ lang, model, version, blockStates, onError }: TreePanelProps) {\n\tconst tree = useRef(null)\n\tconst redraw = useRef()\n\n\tuseEffect(() => {\n\t\tredraw.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst mounter = new Mounter()\n\t\t\t\tconst props = { loc: locale.bind(null, lang), version, mounter, blockStates }\n\t\t\t\tconst path = new ModelPath(model)\n\t\t\t\tconst rendered = model.schema.hook(renderHtml, path, model.data, props)\n\t\t\t\tconst category = model.schema.category(path)\n\t\t\t\tconst type = model.schema.type(path)\n\t\t\t\tlet html = rendered[2]\n\t\t\t\tif (rendered[1]) {\n\t\t\t\t\thtml = `
\n\t\t\t\t\t\t
${rendered[0]}${rendered[1]}
\n\t\t\t\t\t\t
${rendered[2]}
\n\t\t\t\t\t
`\n\t\t\t\t}\n\t\t\t\ttree.current.innerHTML = html\n\t\t\t\tmounter.mounted(tree.current)\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\t\t\tconsole.error(e)\n\t\t\t\ttree.current.innerHTML = ''\n\t\t\t}\n\t\t}\n\t})\n\n\tuseModel(model, () => {\n\t\tredraw.current()\n\t})\n\n\tuseEffect(() => {\n\t\tredraw.current()\n\t}, [lang, model, blockStates])\n\n\treturn
\n}\n","import { locale } from '../Locales'\n\ntype FieldSettingsProps = {\n\tlang: string,\n\tpath?: string,\n}\nexport function FieldSettings({ lang }: FieldSettingsProps) {\n\tconst loc = locale.bind(null, lang)\n\treturn
\n\t\t
\n\t\t\t

{loc('settings.fields.description')}

\n\t\t\t
    \n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { getCurrentUrl } from 'preact-router'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnInput, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SourcePanel, Tree } from '../components'\nimport { fetchPreset } from '../DataFetcher'\nimport { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../Schemas'\nimport { checkVersion, getBlockStates, getCollections, getModel } from '../Schemas'\nimport { getGenerator } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: string[]) => unknown,\n\tversion: VersionId,\n\tonChangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, onChangeVersion }: GeneratorProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\treturn
\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn
\n\t}\n\n\tuseEffect(() => {\n\t\tsetError(null)\n\t}, [gen.id, version])\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tchangeTitle(loc('title.generator', loc(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, gen.id)\n\t\t\t.then(m => setModel(m))\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetError(null)\n\t})\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(model.schema.default(), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t}\n\t}, [model])\n\n\tconst [presetFilter, setPresetFilter] = useState('')\n\tconst [presetResults, setPresetResults] = useState([])\n\tuseEffect(() => {\n\t\tgetCollections(version)\n\t\t\t.then(collections => {\n\t\t\t\tconst terms = (presetFilter ?? '').trim().split(' ')\n\t\t\t\tconst presets = collections.get(gen.id)\n\t\t\t\t\t.map(p => p.slice(10))\n\t\t\t\t\t.filter(p => terms.every(t => p.includes(t)))\n\t\t\t\tif (presets) {\n\t\t\t\t\tsetPresetResults(presets)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e.message) })\n\t}, [version, gen.id, presetFilter])\n\n\tconst loadPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tfetchPreset(version, gen.path ?? gen.id, id).then(preset => {\n\t\t\tmodel?.reset(preset, false)\n\t\t})\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\n\tconst hasPreview = HasPreview.includes(gen.id)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{presetResults.map(preset => loadPreset(preset)} />)}\n\t\t\t\t\t
\n\t\t\t\t\t{presetResults.length === 0 && }\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t onChangeVersion(v)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t{error && setError(null)} />}\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t
\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.download}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{Octicon.clippy}\n\t\t\t
\n\t\t\t
\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype HomeProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Home({ lang, changeTitle }: HomeProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.home'))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t\t\n\t\t\t
\n\t\t\t\n\t\t\t\t

Analyse your performance reports

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Browse through and mix all the vanilla sounds

\n\t\t\t
\n\t\t\t\n\t\t\t\t

Convert your 1.16 data packs to 1.17

\n\t\t\t
\n\t\t
\n\t
\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype WorldgenProps = {\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Worldgen({ lang, changeTitle }: WorldgenProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.generator_category', loc('worldgen')))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => g.category === 'worldgen').map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { FieldSettings, Generator, Home, Worldgen } from './pages'\nimport type { VersionId } from './Schemas'\nimport { Store } from './Store'\nimport { cleanUrl } from './Utils'\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('en')\n\tconst changeLanguage = async (language: string) => {\n\t\tif (!Locales[language]) {\n\t\t\tawait loadLocale(language)\n\t\t}\n\t\tAnalytics.setLanguage(language)\n\t\tStore.setLanguage(language)\n\t\tsetLanguage(language)\n\t}\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst changeTheme = (theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = (version: VersionId) => {\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions = ['1.15', '1.16', '1.17']) => {\n\t\tdocument.title = `${title} Minecraft ${versions.join(', ')}`\n\t\tsetTitle(title)\n\t}\n\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\n}\n\nrender(
, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","class_","onClick","Octicon","large","doSelect","value","onChange","onKeyUp","e","value2","target","endsWith","isNaN","Number","ref","useRef","current","select","stopPropagation","relative","children","setActive","useState","hider","body","addEventListener","removeEventListener","Btn","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","generatorEvent","archive","xmlns","viewBox","width","height","fill-rule","d","arrow_left","arrow_right","chevron_down","chevron_right","clippy","code","dash","device_desktop","download","eye","eye_closed","gear","globe","history","kebab_horizontal","link","mark_github","moon","play","plus","search","sun","sync","tag","three_bars","unfold","upload","x","x_circle","error","onDismiss","error2","href","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","key","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","__spreadValues","default","forEach","localStorage","removeItem","v","mcdataUrl","vanillaDatapackUrl","refs","hash","url","versionId","collectionTarget","blockStateTarget","versions","debug","JSON","stringify","dynamic","filter","getItem","r","async","matches","cache","caches","open","promises","request","keys","push","delete","length","warn","message","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","registries","checkVersion","minVersion","maxVersion","mcdata_master","getData","data2","k","Object","entries","register","path","values","b","properties","states","s2","assign","vanilla_datapack_summary","fn","cacheResponse","ok","json","fetchResponse","fetch","responseData","put","Response","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","collections","getCollections","blockStates","fetchData","getSchemas","Error","minVersionId","maxVersionId","findIndex","dec2hex","dec","toString","substr","arr","Uint8Array","crypto","getRandomValues","Array","from","join","str","replaceAll","trimmedUrl","generators","g","h","Math","abs","i","imul","charCodeAt","hashString","a2","c","max","min","lerp","f","Themes","system","dark","light","title","changeTheme","changeLanguage","loc","locale","bind","gen","getGenerator","getCurrentUrl","Link","Icons","home","BtnMenu","route","cleanUrl","name","th","fill","rx","y","report","sounds","cx","cy","clip-rule","model","invalidated","listener","[object Object]","addListener","removeListener","element","drag","dragStart","pending","onMouseDown","offsetX","offsetY","onMouseMove","dx","dy","requestAnimationFrame","onMouseUp","_e","random","xo","yo","zo","p","n","int32","this","y2","z","x2","y22","z2","x3","floor","y3","z3","x4","y4","z4","x5","smoothstep","y5","z5","y6","sampleAndLerp","grad","_ImprovedNoise","GRADIENT","j","P","l2","m","o","lerp2","lerp3","gradDot","ImprovedNoise","seed","firstOctave","amplitudes","noiseLevels","seedrandom","lowestFreqInputFactor","pow","lowestFreqValueFactor","PerlinNoise","fixY","inputF","valueF","noise","wrap","first","second","Infinity","expectedDeviation","valueFactor","getValue","NoiseMaps","state","img","options","preset","NetherPreset","config2","NormalNoise","biomeColorCache","biomes","biome","getBiomeColor","biomeColors","ox","offset","oy","row","col","xx","scale","yy","closestBiome","color","multiNoise","fixed","shift","numBiomes","checkerboard","VanillaColors","stringToColor","isArray","n2","minDist","minBiome","dist","fitness","parameters","altitude","temperature","humidity","weirdness","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_mountains","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:mountains","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_hills","minecraft:wooded_mountains","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","pos","ctx","base","nextInt","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","features","indexOf","feature","placements","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","biomeInfoNoise","noise_level","below_noise","above_noise","count_noise_biased","factor","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","seaLevel","clamp","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","square","water_lake","minLimitPerlinNoise","fromRange","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","depth","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","noise1","fillNoiseColumn","noise2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","falloff","density_factor","density_offset","top_slide","size","clampedLerp","bottom_slide","minLimitNoise","maxLimitNoise","mainNoise","HasPreview","Previews","generator","Path","predicate","get","shown","setScale","setSeed","hexId","focused","setFocused","canvas","redrawTimeout","redraw","refocus","getContext","createImageData","putImageData","setTimeout","clientWidth","clientHeight","toWorld","getBiome","hover","onMouseLeave","changeScale","newScale","setBiomeDepth","setBiomeScale","NoiseChunkGenerator","reset","iterateNoiseColumn","reverse","getColor","BtnInput","setCount","transformOutput","switchNode","props","hook","obj","blockState","validation","validator","relativePath","includes","getActiveFields","activeFields","enabled","Store","Store2","getLanguage","getTheme","getVersion","getIndent","setIndent","indent","INDENT","2_spaces","4_spaces","tabs","doCopy","doDownload","doImport","onError","retransform","ModelPath","execCommand","content","encodeURIComponent","setAttribute","click","changeIndent","parse","spellcheck","autocorrect","placeholder","style","callback","registry","el","on","querySelectorAll","el2","getAttribute","chevron_up","info","issue_opened","plus_circle","trashcan","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","keysModel","DataModel","MapNode","StringNode","historyMax","renderHtml","node","onFalse","mounter","set","optional","onTrue","htmlEncode","choices","choice","activeCase","pathWithContext","context","getModel","getArray","pathWithChoiceContext","choiceContext","prefix","suffix","c2","change","pathLocale","contextPush","onAdd","onAddBottom","childValue","onRemove","onMoveUp","onMoveDown","childPath","cPrefix","cSuffix","cBody","help","contextMenu","keyPath","enum","last","errors","add","ObjectNode","fromEntries","modelPush","childrenSchema","integer","parsed","parseFloat","padStart","getChildModelPath","field","isFlattened","isInlined","getValues","inputId","newValue","textarea","sizes","split","ResizeObserver","offsetWidth","offsetHeight","observe","isEnum","additional","context2","pool","datalistId","result","popupIcon","popup","getElementsByTagName","classList","capture","once","openMenu","insertAdjacentHTML","inputEl","removeChild","preventDefault","timer","tree","Mounter","rendered","html","innerHTML","mounted","changeTitle","onChangeVersion","setError","errorBoundary","errorRetry","useErrorBoundary","ErrorPanel","allowedVersions","setModel","setBlockStates","versionData","schemaName","validate","catch","ctrlKey","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","trim","presets","every","t","loadPreset","vanilla_datapack_data","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Ad","Tree","__spreadProps","PreviewPanel","SourcePanel","ToolCard","loadLocale","documentElement","setTitle","title2","Header","theme2","Router","Home","FieldSettings","Worldgen","Generator","version2","render","Main"],"mappings":"mjBAAiBA,cCQEC,KAAEA,KAAMC,cAChB,6BACAC,eAAe,sBAAmBC,SACvC,eAAgBC,mBACRC,SAEV,MAEK,MAAD,CAAKC,oBAAkB,mBAAmBC,eAAcP,EAAMQ,MAAM,eAAeP,GAAAA,gBCPvEQ,KAAEA,QAAMC,SAAOC,EAAQH,MAAOI,UAAQC,aACjD,MAAD,CAAKL,MAAO,MAAMG,EAAS,UAAY,KAAKC,EAAS,IAAIA,IAAW,KAAMC,QAAAA,GAC/EJ,GAAQK,EAAQL,GAChBC,KAAU,OAAD,KAAOA,gBCAMD,KAAEA,QAAMC,QAAOK,OAAOf,WAAMgB,QAAUC,WAAOC,UAC/DC,OAAuB,IAAbD,EAAyB,OAAYE,UAC9CC,EAASD,EAAEE,OAA4BL,MAChC,WAATjB,IAAuBqB,EAAME,SAAS,MAASC,MAAMC,OAAOJ,iBACpDA,IAIPK,EAAMC,EAAyB,gBAC3B,KACLX,GAAYU,EAAIE,WACfA,QAAQC,WAEX,CAACb,MAEI,MAAD,CAAKR,MAAO,kBAAiBO,EAAQ,cAAgB,IAAMF,WAAcO,EAAEU,mBAChFrB,GAAQK,EAAQL,GAChBC,KAAU,OAAD,KAAOA,KAChB,QAAD,CAAOgB,IAAAA,EAAU1B,KAAK,OAAOiB,MAAAA,EAAcE,QAAAA,iBCnBrBV,KAAEA,QAAMC,WAAOqB,WAAUC,UACzCrB,EAAQsB,GAAaC,GAAS,GAE/BC,EAAQ,QACH,cAGD,KACLxB,YACMyB,KAAKC,iBAAiB,QAASF,GAElC,cACGC,KAAKE,oBAAoB,QAASH,MAE1C,CAACxB,MAEI,MAAD,CAAKH,MAAO,aAAwB,IAAbuB,EAAqB,eAAiB,OAClEQ,EAAD,CAAK9B,KAAAA,EAAYC,MAAAA,EAAcG,QAAS,IAAMoB,GAAU,KACvDtB,KAAW,MAAD,CAAKH,MAAM,aACpBwB,cJ9BaQ,SACVC,EAAU,OACVC,EAAe,uBAONC,EAAkBC,EAAgBlC,MAC7C,OAAQ,QAASiC,EAAUC,EAAQlC,cAGpBmC,EAAe5B,MAC9B,MAAO,YAAY4B,IAAS5B,KAGhB6B,kBAASC,MACrB,MAAO,OAAQA,MACf,OAAQ,eAGIC,qBAAYC,KAhBP,EAiBIA,KAClBR,EAAS,eAAgBQ,MAGhBC,kBAASC,KAvBP,EAwBIA,KACfV,EAAS,YAAaU,MAGbC,oBAAWC,KA3BP,EA4BIA,KACjBX,EAAc,cAAeW,MAGpBC,oBAAWC,KA9BP,EA+BIA,KACjBb,EAAc,cAAea,MAGpBC,wBAAeZ,EAAgBlC,KACxCgC,EAAcE,EAAQlC,KA3CbX,oBKChB0D,UAAU,MAAD,CAAKC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qcACxHC,aAAa,MAAD,CAAKN,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8JAC3HE,cAAc,MAAD,CAAKP,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,iKAC5HG,eAAe,MAAD,CAAKR,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,oIAC7HI,gBAAgB,MAAD,CAAKT,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,mIAC9HK,SAAS,MAAD,CAAKV,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,gYACvHM,OAAO,MAAD,CAAKX,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,+NACrHO,OAAO,MAAD,CAAKZ,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,wEACrHQ,iBAAiB,MAAD,CAAKb,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,kaAC/HS,WAAW,MAAD,CAAKd,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,wMACzHU,MAAM,MAAD,CAAKf,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,6nBACpHW,aAAa,MAAD,CAAKhB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,4xBAC3HY,OAAO,MAAD,CAAKjB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qvEACrHa,QAAQ,MAAD,CAAKlB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,isBACtHc,UAAU,MAAD,CAAKnB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,ySACxHe,mBAAmB,MAAD,CAAKpB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAME,EAAE,wHAC7GgB,OAAO,MAAD,CAAKrB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qWACrHiB,cAAc,MAAD,CAAKtB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8jBAC5HkB,OAAO,MAAD,CAAKvB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sLACrHmB,OAAO,MAAD,CAAKxB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,kLACrHoB,OAAO,MAAD,CAAKzB,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,oIACrHqB,SAAS,MAAD,CAAK1B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sIACvHsB,MAAM,MAAD,CAAK3B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,gtBACpHuB,OAAO,MAAD,CAAK5B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sZACrHwB,MAAM,MAAD,CAAK7B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qWACpHyB,aAAa,MAAD,CAAK9B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,sMAC3H0B,SAAS,MAAD,CAAK/B,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAME,EAAE,iiBACnG2B,SAAS,MAAD,CAAKhC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,qMACvH4B,IAAI,MAAD,CAAKjC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,2LAClH6B,WAAW,MAAD,CAAKlC,MAAM,6BAA6BC,QAAQ,YAAYC,MAAM,KAAKC,OAAO,QAAM,OAAD,CAAMC,YAAU,UAAUC,EAAE,8SCxB7F8B,kBAAOC,aAC3B,MAAD,CAAKtF,MAAM,SAChBsF,KAAc,MAAD,CAAKtF,MAAM,gBAAgBK,QAASiF,GAAYhF,EAAQ6E,KACrE,KAAD,KAAKI,KACJ,IAAD,KAAG,mDAA+C,IAAD,CAAGC,KAAK,wDAAwD1E,OAAO,UAAS,2tKCVnI,IAAI2E,EAAU,MAAMC,EAAO,GAAgBC,EAAgB,SAAiBC,EAAYC,OAExDA,SACjBD,YAGO,IAAdH,EAAyB,OAEnBK,EAAUC,SAASC,cAAc,QAAQF,UAG3CA,GAAWA,EAAQG,UAAYH,EAAQG,SAAS,iBAC1C,gBACA,iBAEPC,QAAQC,IAAIN,EAAKO,KAAKC,OAErBA,KAAOX,WAGNW,IAAO,QACNC,EAAQD,EAAItF,SAAS,QACrBwF,EAAcD,EAAQ,qBAAuB,MAE/CP,SAASS,cAAc,cAAcH,MAAQE,kBAI3ChC,EAAOwB,SAASC,cAAc,iBAE/BS,IAAMH,EAAQ,aAAeb,EAC7Ba,MACII,GAAK,WACLC,YAAc,MAElBnB,KAAOa,WAEHO,KAAKC,YAAYtC,GACtB+B,EACO,IAAIJ,SAAQ,CAACY,EAAKC,OAChBlF,iBAAiB,OAAQiF,KACzBjF,iBAAiB,QAASkF,iBAGvCC,MAAK,IAAMpB,smDCnCNqB,EAET,CACHC,SAAUC,cAUY1E,EAAkB2E,KAAgBC,wBAPzD,SAA6B5G,EAAe4G,UACpC5G,EAAM6G,QAAQ,oBACdjF,EAAQkF,SAASC,EAAMC,MAAM,mBACR,sBAAXpF,IAAuBgF,EAAOhF,GAASmF,KAOjDE,CAF2B,SAAA,SAAA,SAAA,WAAQjF,aAAY2E,MAClD,WAAQO,aAAKP,MAAQH,EAAQC,SAASE,MAAQA,EAChBC,oBAGF5E,SAC1BmF,EAAaC,EAAOC,UAAUC,SAAaC,EAAKnE,OAASpB,QAC1DmF,eACCK,4kCAAaC,CAAO,cAAczF,UAClC0F,GAAgC,IAAvBP,EAAWQ,oxCAChBC,CAAO,4CAA4C5F,YACrDA,GAAY6F,OAAKL,EAAKM,SAAYJ,EAAOI,SC7BlD,CAAC,OAAQ,OAAQ,QAAQC,YAAaC,aAAaC,WAAW,SAASC,OAEvE,MAaMC,EAAY,qDACZC,EAAqB,8DAErBC,EAIA,CACL,CACCrJ,GAAI,gBACJsJ,KAAM,2CACNC,IAAKJ,GAEN,CACCnJ,GAAI,2BACJsJ,KAAM,2CACNC,IAAKH,qBAIyBI,EAAmBC,EAAsCC,SAClFtG,EAAUgF,EAAOuB,SAASrB,SAAUY,EAAElJ,KAAOwJ,IAC9CpG,WAIGwG,MAAM,eAAeC,KAAKC,UAAU1G,MAExCA,EAAQ2G,eACLtD,QAAQC,IAAI2C,EAChBW,WAAYhB,aAAaiB,QAAQ,UAAUC,EAAElK,QAAUkK,EAAEZ,OACzD3C,KAAIwD,MAAMD,YACFN,MAAM,oBAAoBM,EAAElK,OAAOgJ,aAAaiB,QAAQ,UAAUC,EAAElK,aAAakK,EAAEZ,SAASY,EAAEX,OAAOnG,EAAQiG,KAAKa,EAAElK,aA4IhImK,eAA8BC,aAEtBC,QAAcC,OAAOC,KA3LV,qBA4LTX,MAAM,iDACRY,EAA+B,aAE1BC,WAAiBJ,EAAMK,OAC7BN,EAAQK,EAAQlB,QACVoB,KAAKN,EAAMO,OAAOH,YAGrBb,MAAM,6BAA6BY,EAASK,iCAC9CpE,QAAQC,IAAI8D,SACVrJ,WACA2J,KAAK,oDAAwD3J,EAAE4J,YAzJ/DC,KAAsBzB,EAAI0B,WAAW,GAAGf,EAAEX,OAAOnG,EAAQiG,KAAKa,EAAElK,iBAC9D4J,MAAM,0BAA0BM,EAAElK,MAAMkK,EAAEZ,SAASN,aAAaiB,QAAQ,UAAUC,EAAElK,uBAC/EkL,QAAQ,UAAUhB,EAAElK,KAAMkK,EAAEZ,cACjCM,MAAM,yBAAyBM,EAAElK,MAAMkK,EAAEZ,SAASN,aAAaiB,QAAQ,UAAUC,EAAElK,oBAIxFyG,QAAQC,IAAI,CACjByE,EAAgB/H,EAASqG,GACzB2B,EAAmBhI,EAASsG,GAC5B2B,EAAuBjI,EAASqG,cApBxB7D,MAAM,+BAA+BxC,QAAcyG,KAAKC,UAAU1B,EAAOuB,aAwBnFQ,iBAA+B/G,EAAkB/B,WACxCuI,MAAM,qBAAqBxG,EAAQpD,YACrCsL,EAAalD,EAAOkD,WACxBtB,YAAaE,EAAEH,UACfC,WAAYuB,GAAanI,EAAQpD,GAAIkK,EAAEsB,WAAYtB,EAAEuB,iBAEnDF,GAAanI,EAAQpD,QAAI,EAAW,QAAS,OAC1CuJ,EAAM,GAAGJ,KAAa/F,EAAQiG,KAAKqC,4DAElClD,QAAamD,EAAQpC,GAAMqC,UAC1BvE,EAAgC,iBAC/BqD,KAAKkB,GAAM7C,eACb8C,EAAE7D,MAAM,KAAO8D,OAAOpB,KAAKkB,EAAKC,GAAGE,YAEjC1E,OAEG0B,qBACHiD,SAAS9B,EAAElK,GAAI,WAAKkK,EAAElK,OAAO,aAE7BmB,WACA2J,KAAK,4CAA6C3J,eAGrDsF,QAAQC,IAAI4E,EAAW3E,KAAIwD,MAAMD,cAE/BX,EAAMW,EAAE+B,KACX,GAAG9C,KAAa/F,EAAQiG,KAAKqC,iBAAiBxB,EAAE+B,qBAChD,GAAG9C,KAAa/F,EAAQiG,KAAKqC,8CAA8CxB,EAAElK,qBACzEgM,SAAS9B,EAAElK,SAAU2L,EAAQpC,MAAUL,EAAEgD,gBACxC/K,WACA2J,KAAK,0CAA0CZ,EAAElK,MAAOmB,QAMpEgJ,iBAAkC/G,EAAkB/B,cAC3CuI,MAAM,wBAAwBxG,EAAQpD,MAC1CuL,GAAanI,EAAQpD,QAAI,EAAW,QAAS,OAC1CuJ,EAAOgC,GAAanI,EAAQpD,QAAI,EAAW,QAC9C,GAAGmJ,KAAa/F,EAAQiG,KAAKqC,8CAC7B,GAAGvC,KAAa/F,EAAQiG,KAAKqC,iEAGzBlD,QAAamD,EAAQpC,GAAMqC,UAC1BvE,EAA0B,iBACzBqD,KAAKkB,GAAM7C,eACboD,GAAK,CACRC,WAAYR,EAAKO,GAAGC,WACpBtD,QAAS8C,EAAKO,GAAGE,OAAO/D,MAAMgE,GAAWA,EAAExD,UAASsD,eAG/C/E,YAEDkF,OAAOlL,EAAQmH,SACdrH,WACA2J,KAAK,iDAAkD3J,QAE1D,OACAoI,EAAM,GAAGJ,KAAa/F,EAAQiG,KAAKqC,4EAElClD,QAAamD,EAAQpC,UACpBgD,OAAOlL,EAAQmH,SACdrH,WACA2J,KAAK,iDAAkD3J,KAKlEgJ,iBAAsC/G,EAAkB/B,WAC/CuI,MAAM,4BAA4BxG,EAAQpD,YAC5CsL,EAAalD,EAAOkD,WACxBtB,WAAYE,EAAEH,UACdC,WAAYuB,GAAanI,EAAQpD,GAAIkK,EAAEsB,WAAYtB,EAAEuB,iBAEnDF,GAAanI,EAAQpD,GAAI,QAAS,OAC/BuJ,EAAM,GAAGH,KAAsBhG,EAAQiG,KAAKmD,gEAE3ChE,QAAamD,EAAQpC,KAChBR,eACHiD,SAAS9B,EAAElK,GAAIwI,EAAK0B,EAAElK,cAEtBmB,WACA2J,KAAK,oDAAqD3J,KAgBrEgJ,iBAAgCZ,EAAakD,EAAoB,CAACvD,GAAWA,cAErEmB,QAAcC,OAAOC,KAjKV,qBAkKTX,MAAM,oCAAwCL,WAChDmD,QAAsBrC,EAAMtC,MAAMwB,MAEpCmD,GAAiBA,EAAcC,kBAC1B/C,MAAM,oCAAoCL,WACrCmD,EAAcE,eAGpBhD,MAAM,2BAA2BL,WACnCsD,QAAsBC,MAAMvD,GAC5BwD,EAAeN,QAASI,EAAcD,qBACtCvC,EAAM2C,IAAIzD,EAAK,IAAI0D,SAASpD,KAAKC,UAAUiD,KAC1CA,QACC5L,WACA2J,KAAK,6CAAiD3J,EAAE4J,mBAExDnB,MAAM,2BAA2BL,WACnCsD,QAAsBC,MAAMvD,UACbkD,QAASI,EAAcD,eCnLjCM,EAAa,CAAC,OAAQ,OAAQ,QAmBrCC,EAA+D,GAM/DC,EAAoC,GAEpCC,EAKF,CACHC,KAAMC,EACNC,KAAMC,EACNC,KAAMC,GAGPxD,iBAA0BnK,UACpBmN,EAASnN,OACJA,wBAED4N,EAAcP,EAAcrN,GAAI6N,iBAChCC,EAAkC,SAClCC,EAAU/N,EAAI4N,EAAaE,SAC3BnF,EAAU0E,EAAcrN,GAAIgO,WAAWJ,YACpC5N,GAAM,CAAE4N,YAAAA,EAAajF,QAAAA,EAASmF,YAAAA,GAChCX,EAASnN,SACRmB,SACF,IAAI8M,MAAM,uBAAuBjO,OAAQmB,EAAE4J,iBAK7CoC,EAASnN,eAqCYwJ,EAAmB0E,EAAkCC,SAC3E/K,EAAUgF,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOwJ,IAClDgC,EAAa0C,EAAe9F,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOkO,IAAgB,EACpFzC,EAAa0C,EAAe/F,EAAOuB,SAASyE,cAAelF,EAAElJ,KAAOmO,IAAgB/F,EAAOuB,SAASkB,OAAS,SAC5GW,GAAcpI,GAAWA,GAAWqI,ECjG5C,MAAM4C,GAAWC,QAAuBA,EAAIC,SAAS,KAAKC,uBAEpC3D,EAAS,QAC1B4D,EAAM,IAAIC,WAAW7D,EAAS,iBAC3B8D,OAAOC,gBAAgBH,GACvBI,MAAMC,KAAKL,EAAKJ,IAASU,KAAK,gBAGXC,UACnBA,EAAInH,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QACpEA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,UAAUA,QAAQ,MAAO,sBAUzC0B,SACjB,IAAIA,KAAO0F,WAAW,KAAM,iBAGP1F,SACtB2F,EAAa3F,EAAI1B,QAAQ,MAAO,IAAIA,QAAQ,MAAO,WAClDO,EAAO+G,WAAW7G,SAAU8G,EAAE7F,MAAQ2F,gBAGhBF,SACvBK,EAAIC,KAAKC,aAjBWjD,OACtB+C,EAAI,UACAG,EAAI,EAAGA,EAAIlD,EAAEzB,OAAQ2E,MACxBF,KAAKG,KAAK,GAAIJ,GAAK/C,EAAEoD,WAAWF,GAAK,SACnCH,EAaYM,CAAWX,UACvB,CAACK,EAAI,QAAW,GAAK,QAAW,IAAM,iBAGxBO,EAAWzD,EAAW0D,UACpCP,KAAKQ,IAAIF,EAAGN,KAAKS,IAAI5D,EAAG0D,gBAGJD,EAAWzD,EAAW0D,UAC7CA,EAAI,EACAD,EACGC,EAAI,EACP1D,EAEA6D,GAAKH,EAAGD,EAAGzD,eAICyD,EAAWzD,EAAW0D,UACnC1D,EAAIyD,KAASzD,eAGCyD,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,UACrED,GAAK7D,EAAG6D,GAAKJ,EAAGC,EAAG/L,GAAIkM,GAAKJ,EAAGzO,EAAG8O,gBAOfvK,UACnBA,EAAIA,EAAIA,MAAc,IAAI,IAAM,IC3DxC,MAAMwK,GAA+C,CACpDC,OAAQ,iBACRC,KAAM,OACNC,MAAO,oBAYe9H,KAAEA,QAAM+H,UAAOlN,QAASF,cAAOqN,WAAavN,iBAAUwN,UACtEC,EAAMC,EAAOC,KAAK,KAAMpI,GACxBqI,EAAMC,GAAaC,cAEjB,SAAD,OACL,MAAD,CAAKvQ,MAAM,WACTwQ,EAAD,CAAMxQ,MAAM,YAAYwF,KAAK,KAAKiL,GAAMC,QACvC,KAAD,KAAKX,GACJM,KAAQM,EAAD,CAAS1Q,KAAK,gBACpB4H,EAAO+G,WACNnF,WAAYoF,EAAE1M,6BAAkBA,WAAY6I,GAAanI,EAASgM,EAAE5D,cACpE7E,UACCrE,EAAD,CAAK7B,MAAOgQ,EAAIrB,EAAEpP,IAAKU,OAAQ0O,EAAEpP,KAAO4Q,EAAI5Q,GAAIY,QAAS,IAAMuQ,EAAMC,GAAShC,EAAE7F,cAInF,MAAD,OACE,KAAD,OACE,KAAD,OACE2H,EAAD,CAAS1Q,KAAK,SACZ4H,EAAOC,UAAU1B,KAAI,EAAGvC,KAAAA,EAAMiN,KAAAA,OAC7B/O,EAAD,CAAK7B,MAAO4Q,EAAM3Q,OAAQ0D,IAASpB,EAClCpC,QAAS,IAAM4P,EAAepM,WAIjC,KAAD,OACE8M,EAAD,CAAS1Q,KAAM0P,GAAOhN,IACpB4I,OAAOC,QAAQmE,IAAQvJ,KAAI,EAAE2K,EAAI9Q,OAChC8B,EAAD,CAAK9B,KAAAA,EAAYC,MAAOgQ,EAAI,SAASa,KAAO5Q,OAAQ4Q,IAAOpO,EAC1DtC,QAAS,IAAM2P,EAAYe,WAI9B,KAAD,CAAI/Q,MAAM,YACR,IAAD,CAAGwF,KAAK,6CAA6C1E,OAAO,SAAS2F,IAAI,aAAasJ,MAAOG,EAAI,WAC/F5P,EAAQkE,2BC1DdkM,OAAO,MAAD,CAAKtN,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAY6N,KAAK,OAAO9N,MAAM,gCAA8B,OAAD,CAAME,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,IAAI/B,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAME,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,cAAY,OAAD,CAAM7L,EAAE,KAAK+L,EAAE,KAAK9N,MAAM,KAAKC,OAAO,IAAI4N,GAAG,IAAID,KAAK,aACncG,SAAS,MAAD,CAAK/N,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAYD,MAAM,gCAA8B,OAAD,CAAMK,EAAE,6HAA6HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,+HAA+HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,kIAAkIyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,6HAA6HyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,sIAAsIyN,KAAK,cAAY,OAAD,CAAMzN,EAAE,sIAAsIyN,KAAK,aACv+BI,SAAS,MAAD,CAAKhO,MAAM,KAAKC,OAAO,KAAKF,QAAQ,YAAYD,MAAM,gCAA8B,SAAD,CAAQmO,GAAG,KAAKC,GAAG,KAAK3H,EAAE,KAAKqH,KAAK,cAAY,OAAD,CAAM1N,YAAU,UAAUiO,YAAU,UAAUhO,EAAE,utCAAutCyN,KAAK,0BCA93CQ,EAAqCC,SACvDC,EAAW,CAChBC,cACKH,KACSA,QAKL,gBACFI,YAAYF,KACVD,cACF,gBACCI,eAAeH,MAErB,CAACF,gBChBqBM,EAAsBC,OAC1CD,eAEC5H,EAAU/I,IACV6Q,EAAY7Q,IACZ8Q,EAAU9Q,EAAyB,CAAC,EAAG,OAEnC,WACH+Q,EAAetR,MACVQ,QAAU,CAACR,EAAEuR,QAASvR,EAAEwR,UAE7BC,EAAezR,YACM,IAAtBoR,EAAU5Q,qBACRkR,EAAK1R,EAAEuR,QAAUH,EAAU5Q,QAAQ,GACnCmR,EAAK3R,EAAEwR,QAAUJ,EAAU5Q,QAAQ,GAC5B,OAAY,IAAPmR,yBACIrI,EAAQ9I,WACrBA,QAAU,CAAC6Q,EAAQ7Q,QAAQ,GAAKkR,EAAIL,EAAQ7Q,QAAQ,GAAKmR,KACzDnR,QAAUoR,uBAAsB,UAC/BP,EAAQ7Q,WACRA,QAAU,CAAC,EAAG,SAGdA,QAAU,CAACR,EAAEuR,QAASvR,EAAEwR,UAE7BK,EAAaC,MACRtR,aAAU,YAGbS,iBAAiB,YAAaqQ,KAC9BrQ,iBAAiB,YAAawQ,YAC7BzQ,KAAKC,iBAAiB,UAAW4Q,GACnC,OACE3Q,oBAAoB,YAAaoQ,KACjCpQ,oBAAoB,YAAauQ,YAChCzQ,KAAKE,oBAAoB,UAAW2Q,MAE5C,CAACX,ICpCE,eAONH,YAAYgB,QACNC,GAAgB,IAAXD,SACLE,GAAgB,IAAXF,SACLG,GAAgB,IAAXH,SACLI,EAAIzE,MAAM,aAENW,EAAI,EAAGA,EAAI,IAAKA,GAAK,OACxB8D,EAAE9D,GAAKA,UAEJA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,OAC1B+D,EAAIL,EAAOM,aAAiBhE,GAC5BrD,EAAIsH,KAAKH,EAAE9D,QACZ8D,EAAE9D,GAAKiE,KAAKH,EAAE9D,EAAI+D,QAClBD,EAAE9D,EAAI+D,GAAKpH,GAIX+F,MAAMxM,EAAWgO,EAAWC,EAAW/D,EAAWzD,SAClDyH,EAAKlO,EAAI+N,KAAKN,GACdU,EAAKH,EAAID,KAAKL,GACdU,EAAKH,EAAIF,KAAKJ,GACdU,EAAKzE,KAAK0E,MAAMJ,GAChBK,EAAK3E,KAAK0E,MAAMH,GAChBK,EAAK5E,KAAK0E,MAAMF,GAChBK,EAAKP,EAAKG,EACVK,EAAKP,EAAKI,EACVI,EAAKP,EAAKI,EACVI,EAAKC,GAAWJ,GAChBK,EAAKD,GAAWH,GAChBK,EAAKF,GAAWF,OAElBK,EAAK,SACC,IAAN9E,MACEN,KAAK0E,MAAM1E,KAAKS,IAAI5D,EAAGiI,GAAMxE,GAAKA,GAGjC6D,KAAKkB,cAAcZ,EAAIE,EAAIC,EAAIC,EAAIC,EAAKM,EAAIL,EAAIC,EAAIE,EAAIC,GAGxDvC,QAAQtC,EAAWzD,EAAW0D,EAAW/L,SAC1C8Q,EAAOC,GAAcC,SAAa,GAAJlF,UAC7BgF,EAAK,GAAKzI,EAAIyI,EAAK,GAAK/E,EAAI+E,EAAK,GAAK9Q,EAGtCoO,EAAE1C,UACgB,IAAlBiE,KAAKH,EAAM,IAAJ9D,GAGR0C,cAActC,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,EAAWb,EAAWC,EAAWG,SACtGuF,EAAItB,KAAKuB,EAAEpF,GAAKzD,EAChBN,EAAI4H,KAAKuB,EAAED,GAAKlF,EAChBoF,EAAIxB,KAAKuB,EAAED,EAAI,GAAKlF,EACpBqF,EAAIzB,KAAKuB,EAAEpF,EAAI,GAAKzD,EACpBoH,EAAIE,KAAKuB,EAAEE,GAAKrF,EAChBsF,EAAI1B,KAAKuB,EAAEE,EAAI,GAAKrF,kBLFND,EAAWzD,EAAW0D,EAAW/L,EAAW3C,EAAW8O,EAAWb,EAAWC,EAAWG,EAAWuF,EAAWlJ,UAC5HmE,GAAKH,EAAGuF,GAAMxF,EAAGzD,EAAGrI,EAAG3C,EAAG8O,EAAGb,GAAIgG,GAAMxF,EAAGzD,EAAGkD,EAAGG,EAAGuF,EAAGlJ,IKarDwJ,CAAMjG,EAAGC,EAAGG,EAVTiE,KAAK6B,QAAQ7B,KAAKuB,EAAEnJ,GAAI/H,EAAG3C,EAAG8O,GAC9BwD,KAAK6B,QAAQ7B,KAAKuB,EAAEzB,GAAIzP,EAAI,EAAG3C,EAAG8O,GAClCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEC,GAAInR,EAAG3C,EAAI,EAAG8O,GAClCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEG,GAAIrR,EAAI,EAAG3C,EAAI,EAAG8O,GAEtCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEnJ,EAAI,GAAI/H,EAAG3C,EAAG8O,EAAI,GACtCwD,KAAK6B,QAAQ7B,KAAKuB,EAAEzB,EAAI,GAAIzP,EAAI,EAAG3C,EAAG8O,EAAI,GAC1CwD,KAAK6B,QAAQ7B,KAAKuB,EAAEC,EAAI,GAAInR,EAAG3C,EAAI,EAAG8O,EAAI,GAC1CwD,KAAK6B,QAAQ7B,KAAKuB,EAAEG,EAAI,GAAIrR,EAAI,EAAG3C,EAAI,EAAG8O,EAAI,gBAvEnDsF,GACkBT,SAAW,CAAC,CAAC,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,CAAC,KAAO,GAAI,OAAS,GAAI,CAAC,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,CAAC,EAAG,MAAQ,IAAK,MAAQ,CAAC,EAAG,EAAG,GAAI,CAAC,KAAO,GAAI,CAAC,EAAG,MAAQ,CAAC,SAAY,CAAC,EAAG,EAAG,GAAI,CAAC,KAAO,GAAI,IAAK,EAAG,GAAI,CAAC,mBCKxN5C,YAAYsD,EAAcC,EAAqBC,QACzCA,WAAaA,OAEbC,YAAc9G,MAAM4E,KAAKiC,WAAW7K,gBAChC2E,EAAI,EAAGA,EAAIiE,KAAKiC,WAAW7K,OAAQ2E,GAAK,OAC3CmG,YAAYnG,GAAK,IAAI+F,GAAcK,EAAWJ,SAG/CK,sBAAwBvG,KAAKwG,IAAI,EAAGL,QACpCM,sBAAwBzG,KAAKwG,IAAI,EAAIJ,EAAW7K,OAAS,SAAYiL,IAAI,EAAGJ,EAAW7K,QAAU,oBAG/E2K,EAAczF,EAAaD,UAC3C,IAAIkG,GAAYR,EAAMzF,EAAKlB,MAAMiB,EAAMC,EAAM,GAAGwB,KAAK,IAGtDW,SAASxM,EAAWgO,EAAWC,EAAW/D,EAAI,EAAGzD,EAAI,EAAG8J,GAAO,OACjEjV,EAAQ,EACRkV,EAASzC,KAAKoC,sBACdM,EAAS1C,KAAKsC,8BACTvG,EAAI,EAAGA,EAAIiE,KAAKkC,YAAY9K,OAAQ2E,GAAK,EAAG,OAC9C4G,EAAQ3C,KAAKkC,YAAYnG,GAC3B4G,OACM3C,KAAKiC,WAAWlG,GAAK4G,EAAMA,MACnCJ,GAAYK,KAAK3Q,EAAIwQ,GACrBD,GAAQG,EAAMhD,GAAK4C,GAAYK,KAAK3C,EAAIwC,GACxCF,GAAYK,KAAK1C,EAAIuC,GACrBtG,EAAIsG,EACJ/J,EAAI+J,GACDC,MAEK,KACA,SAEJnV,EAGDkR,eAAe1C,UACdiE,KAAKkC,YAAYlC,KAAKkC,YAAY9K,OAAS,EAAI2E,eAGpCxO,UACXA,EAAgD,SAAxCsO,KAAK0E,MAAMhT,EAAQ,SAAc,cC5CjDkR,YAAYsD,EAAcC,EAAqBC,QACzCY,MAAQ,IAAIN,GAAYR,EAAMC,EAAaC,QAC3Ca,OAAS,IAAIP,GAAYR,EAAO,IAAKC,EAAaC,OAEnD3F,EAAMyG,EAAAA,EACN1G,eACKN,EAAI,EAAGA,EAAIkG,EAAW7K,OAAQ2E,GAAK,EACrB,IAAlBkG,EAAWlG,OACRF,KAAKS,IAAIA,EAAKP,KACdF,KAAKQ,IAAIA,EAAKN,UAIhBiH,EAAoB,MAAW,KAAW1G,EAAM,SACjD2G,YAAe,EAAE,EAAKD,EAG5BvE,SAASxM,EAAWgO,EAAWC,SACxBC,EAAS,mBAAJlO,EACLmO,EAAS,mBAAJH,EACLI,EAAS,mBAAJH,cACE2C,MAAMK,SAASjR,EAAGgO,EAAGC,GAAKF,KAAK8C,OAAOI,SAAS/C,EAAIC,EAAIC,IAAOL,KAAKiD,aChBlF,MAAME,GAAY,CAAC,WAAY,cAAe,WAAY,yBAE9BC,EAAYC,EAAgBC,gBAC/C,0BAAOhX,eAAM8H,QAAQ,cAAe,SACtC,qBAmDP,SAAoBgP,EAAYC,EAAgBC,WACE,YAA7C,WAAMC,iBAAQnP,QAAQ,cAAe,SAChCoP,UAGHb,EAAQQ,GAAUjQ,KAAI,CAAC3G,EAAIwP,WAC1B0H,EAASL,EAAM,GAAG7W,kBACjB,IAAImX,GAAYJ,EAAQvB,KAAOhG,EAAG0H,EAAOzB,YAAayB,EAAOxB,eAG/D0B,EAA+B,KAC/BC,OAAOtO,SAASoD,MACLA,EAAEmL,OAASC,GAAcpL,EAAEmL,MAAOP,EAAQS,sBAGrDhP,EAAOsO,EAAItO,KACXiP,GAAMV,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CsQ,GAAMZ,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CuQ,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,YACf3B,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,EAClBC,KAAUL,GAAMV,EAAQgB,MACxBC,KAAUL,GAAMZ,EAAQgB,MACxB5L,EAAI8L,GAAa7B,EAAOS,EAAMQ,OAAQS,EAAIE,GAC1CE,EAAQ,WAAgB/L,MAAM,CAAC,IAAK,IAAK,OAC1CqD,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KAjFY2I,CAAWtB,EAAOC,EAAKC,OAC7C,eAKP,SAAeF,EAAYC,EAAgBC,SACpCvO,EAAOsO,EAAItO,KACX0P,EAAQX,GAAcV,EAAMS,MAAOP,EAAQS,aAC3CI,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,YACf3B,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,IACnBrI,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KAhBM4I,CAAMvB,EAAOC,EAAKC,OAClC,sBAoBP,SAAsBF,EAAYC,EAAgBC,yBAC3CK,EAA+B,cAC/BC,WAAQtO,SAASoD,MACNA,GAAKoL,GAAcpL,EAAG4K,EAAQS,sBAGzChP,EAAOsO,EAAItO,KACXiP,GAAMV,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CsQ,GAAMZ,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,EAC9CuQ,EAAkB,EAAZd,EAAInT,MAAYoT,EAAQ1P,IAC9BwQ,EAAM,EAAId,EAAQ1P,IAClBgR,cAAeN,SAAS,GAAK,EAC7BO,EAAY,SAAA,WAAMjB,iBAAQxM,UAAU,UACjCnF,EAAI,EAAGA,EAAI,IAAKA,GAAKqR,EAAQ1P,YAC5BqM,EAAI,EAAGA,EAAI,IAAKA,GAAKqD,EAAQ1P,IAAK,OACpCmI,EAAIkE,EAAIkE,EAAMlS,EAAImS,EAGlB9C,QAFU0C,GAAMV,EAAQgB,OAEXM,OADHV,GAAMZ,EAAQgB,OACKM,IAAUC,EAAYA,GAAaA,EAChEnM,EAAI,WAAMkL,iBAAStC,GACnBmD,EAAQ,WAAgB/L,MAAM,CAAC,IAAK,IAAK,OAC1CqD,GAAK0I,EAAM,KACX1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK0I,EAAM,KACf1I,EAAI,GAAK,KA5Ca+I,CAAa1B,EAAOC,EAAKC,gBAuGzBO,EAAeE,aACvCF,QACG,CAAC,IAAK,IAAK,WAEbY,EAAQ,WAAYZ,MAAUkB,GAAclB,eACpC,IAAVY,EACIO,GAAcnB,GAEfY,EASR,YAAsB9B,EAAsBiB,EAAe3R,EAAWgO,OAChE7E,MAAM6J,QAAQrB,IAA6B,IAAlBA,EAAOxM,aAAqB,SACpD0I,EAAI6C,EAAMzP,QAASgS,EAAEhC,SAASjR,EAAGgO,EAAG,SACtCkF,EAAUpC,EAAAA,EACVqC,EAAW,aACJ1M,KAAKkL,EAAQ,OACjByB,EAAOC,GAAQ5M,EAAE6M,WAAY,CAACC,SAAU1F,EAAE,GAAI2F,YAAa3F,EAAE,GAAI4F,SAAU5F,EAAE,GAAI6F,UAAW7F,EAAE,GAAImE,OAAQ,IAC5GoB,EAAOF,MACAE,IACC3M,EAAEmL,cAGRuB,EAGR,YAAiBjJ,EAAQzD,YACd8M,SAAW9M,EAAE8M,aAAeA,SAAW9M,EAAE8M,aAAeC,YAAc/M,EAAE+M,gBAAkBA,YAAc/M,EAAE+M,gBAAkBC,SAAWhN,EAAEgN,aAAeA,SAAWhN,EAAEgN,aAAeC,UAAYjN,EAAEiN,cAAgBA,UAAYjN,EAAEiN,cAAgB1B,OAASvL,EAAEuL,WAAaA,OAASvL,EAAEuL,QAG9R,MAAMc,GAA0D,CAC/Da,qBAAsB,CAAC,IAAI,GAAG,IAC9BC,6BAA8B,CAAC,IAAI,IAAI,KACvCC,0BAA2B,CAAC,IAAI,IAAI,IACpCC,gCAAiC,CAAC,GAAG,GAAG,IACxCC,0BAA2B,CAAC,GAAG,GAAG,IAClCC,kBAAmB,CAAC,IAAI,IAAI,IAC5BC,yBAA0B,CAAC,GAAG,IAAI,IAClCC,+BAAgC,CAAC,GAAG,GAAG,IACvCC,uBAAwB,CAAC,GAAG,GAAG,KAC/BC,2BAA4B,CAAC,IAAI,EAAE,GACnCC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,8BAA+B,CAAC,IAAI,IAAI,IACxCC,4BAA6B,CAAC,GAAG,GAAG,IACpCC,8BAA+B,CAAC,GAAG,GAAG,KACtCC,gCAAiC,CAAC,EAAE,EAAE,IACtCC,uBAAwB,CAAC,EAAE,EAAE,IAC7BC,4BAA6B,CAAC,EAAE,EAAE,IAClCC,mBAAoB,CAAC,IAAI,IAAI,IAC7BC,yBAA0B,CAAC,IAAI,GAAG,IAClCC,yBAA0B,CAAC,IAAI,IAAI,IACnCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,0BAA2B,CAAC,IAAI,IAAI,KACpCC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,4BAA6B,CAAC,IAAI,IAAI,IACtCC,0BAA2B,CAAC,GAAG,IAAI,IACnCC,mBAAoB,CAAC,EAAE,IAAI,IAC3BC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,+BAAgC,CAAC,IAAI,IAAI,KACzCC,qCAAsC,CAAC,IAAI,IAAI,KAC/CC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,mCAAoC,CAAC,GAAG,GAAG,IAC3CC,+BAAgC,CAAC,IAAI,IAAI,KACzCC,uBAAwB,CAAC,IAAI,IAAI,KACjCC,mBAAoB,CAAC,GAAG,IAAI,GAC5BC,wBAAyB,CAAC,GAAG,IAAI,IACjCC,yBAA0B,CAAC,GAAG,GAAG,GACjCC,2BAA4B,CAAC,EAAE,EAAE,KACjCC,sCAAuC,CAAC,IAAI,IAAI,KAChDC,wCAAyC,CAAC,IAAI,IAAI,KAClDC,4BAA6B,CAAC,IAAI,IAAI,IACtCC,iCAAkC,CAAC,IAAI,IAAI,IAC3CC,6CAA8C,CAAC,IAAI,IAAI,KACvDC,0BAA2B,CAAC,IAAI,IAAI,KACpCC,sBAAuB,CAAC,GAAG,GAAG,IAC9BC,iCAAkC,CAAC,IAAI,EAAE,KACzCC,4BAA6B,CAAC,IAAI,EAAE,KACpCC,0BAA2B,CAAC,IAAI,GAAG,IACnCC,kBAAmB,CAAC,EAAE,EAAE,KACxBC,mBAAoB,CAAC,IAAI,IAAI,IAC7BC,kBAAmB,CAAC,EAAE,EAAE,KACxBC,oBAAqB,CAAC,IAAI,IAAI,IAC9BC,4BAA6B,CAAC,IAAI,IAAI,KACtCC,8BAA+B,CAAC,IAAI,IAAI,KACxCC,sCAAuC,CAAC,IAAI,IAAI,KAChDC,8BAA+B,CAAC,IAAI,IAAI,KACxCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,4BAA6B,CAAC,IAAI,IAAI,KACtCC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,8BAA+B,CAAC,GAAG,GAAG,IACtCC,kCAAmC,CAAC,GAAG,IAAI,KAC3CC,yBAA0B,CAAC,IAAI,IAAI,KACnCC,6BAA8B,CAAC,GAAG,GAAG,IACrCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,6BAA8B,CAAC,IAAI,IAAI,KACvCC,kBAAmB,CAAC,EAAE,IAAI,KAC1BC,wBAAyB,CAAC,GAAG,IAAI,KACjCC,kBAAmB,CAAC,GAAG,IAAI,IAC3BC,wBAAyB,CAAC,GAAG,GAAG,IAChCC,4BAA6B,CAAC,GAAG,IAAI,KACrCC,8BAA+B,CAAC,GAAG,IAAI,KACvCC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,oBAAqB,CAAC,IAAI,IAAI,KAC9BC,qBAAsB,CAAC,EAAE,EAAE,GAC3BC,uBAAwB,CAAC,EAAE,EAAE,KAC7BC,0BAA2B,CAAC,GAAG,IAAI,KACnCC,oCAAqC,CAAC,IAAI,IAAI,KAC9CC,yBAA0B,CAAC,GAAG,GAAG,IACjCC,6BAA8B,CAAC,GAAG,IAAI,KAGjClH,GAAe,CAAClX,KAAK,wBAAwByV,KAAK,EAAE4I,eAAe,CAAC3I,eAAeC,WAAW,CAAC,EAAE,IAAI2I,kBAAkB,CAAC5I,eAAeC,WAAW,CAAC,EAAE,IAAI4I,eAAe,CAAC7I,eAAeC,WAAW,CAAC,EAAE,IAAI6I,gBAAgB,CAAC9I,eAAeC,WAAW,CAAC,EAAE,IAAI2B,OAAO,CAAC,CAACC,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,6BAA6B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,aAAcC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,2BAA2B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,GAAIC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,IAAI,CAACJ,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,YAAY,EAAEC,SAAS,GAAIC,UAAU,EAAE1B,OAAO,OAAQ,CAACJ,MAAM,0BAA0B0B,WAAW,CAACC,SAAS,EAAEC,gBAAiBC,SAAS,EAAEC,UAAU,EAAE1B,OAAO,SC9N1xB8G,GAAU,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAEvQC,GAAgB,CACrB,CAAC,IAAK,GAAI,IACV,CAAC,GAAI,IAAK,KACV,CAAC,GAAI,IAAK,IACV,CAAC,IAAK,GAAI,KACV,CAAC,IAAK,IAAK,IACX,CAAC,GAAI,IAAK,MAiDX,YAAmBze,UACXA,EAAGiL,WAAW,cAAgBjL,EAAGgI,MAAM,IAAMhI,EAGrD,YAAmB0e,EAAehL,SAC1B,CAAC,CAAEgL,EAAI,GAAIhL,EAAGgL,EAAI,KAG1B,YAAiB5O,EAAa6O,UACtBrP,KAAK0E,MAAM2K,EAAIzL,SAAWpD,GAGlC,YAAmB9O,EAAY2d,cACT,iBAAV3d,SACHA,KACGA,EAAM4d,YACT,WAAMA,QAAQ,EAAIC,GAAQ,cAAWC,UAAU,GAAIH,UAElDI,GAAU/d,EAAMjB,WAClB,kBAAmBiB,EAAMA,UACzB,iBAAkBA,EAAMA,MAAMge,cAAgBH,GAAQ7d,EAAMA,MAAMie,cAAgBje,EAAMA,MAAMge,cAAgB,EAAGL,OACjH,0BAA2B3d,EAAMA,MAAMge,cAAgBH,GAAQA,GAAQ7d,EAAMA,MAAMie,cAAgBje,EAAMA,MAAMge,cAAgB,EAAGL,GAAO,EAAGA,OAC5I,iBAAkBrP,KAAKQ,IAAI9O,EAAMA,MAAMge,cAAe1P,KAAKS,IAAI/O,EAAMA,MAAMie,cAAeC,GAAUle,EAAMA,MAAMme,OAAQR,YAEvH,EAIT,YAAoBrS,EAAWqS,SACxBnP,EAAImP,EAAIS,SAASC,QAAQ/S,aAC3BkD,EAAgBA,KAChB4P,SAASzU,KAAK2B,GACXqS,EAAIS,SAASvU,OAAS,GAG9B,YAAuB6T,EAAeY,EAAcX,YAC5B,iBAAZW,gBACNC,WAAW5U,KAAK,CAAC+T,EAAKc,GAAWF,EAASX,WAGzC5e,EAAOgf,GAAU,0BAAShf,QAAQ,SAClC0f,EAAYC,GAAS3f,GACvB0f,IACOH,EAAQlX,OAAQsW,EAAKC,KAE3BY,WAAW5U,KAAK,CAAC+T,EAAKc,GAAW3V,KAAKC,UAAUwV,GAAUX,KAIhE,YAAsBD,EAAeiB,EAAgBhB,eAC9C5e,EAAOgf,GAAU,0BAAWhf,QAAQ,QACpC6f,EAAcC,GAAW9f,UAC1B6f,EAGEA,QAAYD,WAAWvX,OAAQsW,EAAKC,GAFnC,CAACD,GAKV,MAAMgB,GAEF,CACHI,UAAW,CAAC5I,EAAQwH,EAAKC,KACNoB,GAAarB,QAAKxH,WAAQ8I,UAAWrB,GAC7C5V,YAAakX,GAAc3M,QAAG4D,WAAQoI,QAASX,MAE1DuB,wBAAyB,CAAChJ,EAAQwH,EAAKC,QAExBD,EADEC,EAAIzL,SAAW,SAAMgE,WAAQiJ,mBAAejJ,WAAQkJ,cACxCzB,IAE7B0B,gBAAiB,CAACnJ,EAAQwH,EAAKC,uBACnB1O,KAAK,0BAAQmP,YAAY,MAC/BT,EAAIzL,oCAAeoN,UAAU,kBAClB5B,EAAKzO,EAAEqP,QAASX,MAIlBD,QAAKxH,WAAQpO,QAAS6V,IAErC4B,uBAAwB,CAACrJ,EAAQwH,EAAKC,kBAEvBD,EADE,0BAAQU,mBAAWP,GAAQ,SAAA,0BAAQO,mBAAUvU,UAAU,EAAG8T,IAC9CA,KAIxBkB,GAEF,CACHS,OAAQ,CAACpJ,EAAQwH,EAAKC,kBACdA,EAAIzL,SAAW,6BAAaoN,UAAU,GAAK,CAAC5B,GAAO,IAE3D8B,MAAO,CAACtJ,EAAQwH,EAAKC,kBACb,IAAI9P,MAAMqQ,GAAU,0BAAQsB,SAAS,EAAG7B,IAAMpN,KAAKmN,IAE3D+B,YAAa,CAACvJ,EAAQwH,EAAKC,iBACtB6B,EAAQ,0BAAQA,SAAS,SACzB7B,EAAIzL,SAAWgE,EAAOwJ,kBAChB,WAAOC,eAAe,GAEzB,IAAI9R,MAAM2R,GAAOjP,KAAKmN,IAE9BkC,iBAAkB,CAAC1J,EAAQwH,EAAKC,kBACxB,IAAI9P,MAAMqQ,GAAU,0BAAQsB,SAAS,EAAG7B,IAAMpN,KAAKmN,GACxD/X,QAAS,CACT2M,EAAE,GAAKuL,GAAQ,GAAIF,GACnBrL,EAAE,GACFA,EAAE,GAAKuL,GAAQ,GAAIF,OAGtBkC,YAAa,CAAC3J,EAAQwH,EAAKC,WAEpB6B,EADQ7B,EAAImC,eAAenK,SAAS+H,EAAI,GAAK,IAAK,EAAGA,EAAI,GAAK,KAC9CxH,EAAO6J,YAAc7J,EAAO8J,YAAc9J,EAAO+J,mBAChE,IAAIpS,MAAM2R,GAAOjP,KAAKmN,IAE9BwC,mBAAoB,CAAChK,EAAQwH,EAAKC,iBAC3BwC,EAAS7R,KAAKQ,IAAI,EAAGoH,EAAOkK,cAC5BhL,EAAQuI,EAAImC,eAAenK,SAAS+H,EAAI,GAAKyC,EAAQ,EAAGzC,EAAI,GAAKyC,GACjEX,EAAQlR,KAAKQ,IAAI,EAAGR,KAAK+R,oBAAsBC,gBAAgB,IAAMpK,EAAOqK,8BAC3E,IAAI1S,MAAM2R,GAAOjP,KAAKmN,IAE9B8C,cAAe,CAACC,EAAS/C,EAAKC,IACtB,IAAI,IAAI9P,MAAM,KAAKlI,KAAI,CAAC+a,EAAGlS,WAC3B9J,EAAwB,EAApB4J,KAAK0E,MAAMxE,EAAI,GAAS,EAAIqP,GAAQ,EAAGF,GAAOD,EAAI,SAGrD,CAAChZ,EAFE4J,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlc,KACxB,EAApB4J,KAAK0E,MAAMxE,EAAI,GAAS,EAAIqP,GAAQ,EAAGF,GAAOD,EAAI,OAI9DoB,UAAW,CAAC5I,EAAQwH,EAAKC,IACjBoB,GAAarB,QAAKxH,WAAQ2K,MAAOlD,GAAKmD,YACrC/B,GAAazM,QAAG4D,WAAQ6K,MAAOpD,KAGxCqD,cAAe,CAAC9K,EAAQwH,EAAKC,wBAErBsD,GAAUvD,EADPG,GAAQ,0BAAQC,UAAU,EAAGH,GAAOE,GAAQ,0BAAQC,UAAU,EAAGH,eAAeG,UAAU,8BAAcoD,YAAY,KAG/HC,YAAa,CAACV,EAAS/C,EAAKC,WACrB6B,EAAQ,EAAI3B,GAAQ,EAAGF,SACtB,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrB,EAAIE,GAAQ,GAAIF,GAChBD,EAAI,GAAKG,GAAQ,GAAIF,OAGvByD,KAAM,CAAClL,EAAQwH,EAAKC,WACb6B,EAAQ,EAAI3B,GAAQA,GAAQK,SAAUhI,WAAQsJ,MAAO7B,GAAMA,GAAMA,SAChE,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,OAGvB0D,UAAW,CAACnL,EAAQwH,EAAKC,WAClB6B,EAAQ3B,GAAQ,EAAIA,GAAQK,SAAUhI,WAAQsJ,MAAO7B,GAAMA,GAAMA,SAChE,IAAI,IAAI9P,MAAM2R,IAAQ7Z,KAAI,IAAM,CACtC+X,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,OAGvB2D,UAAW,CAACb,EAAS/C,EAAKC,IAElBsD,GAAUvD,EADPpP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,OAG3D6D,wBAAyB,CAACd,EAAS/C,EAAKC,IAEhCsD,GAAUvD,EAAKG,GAAY,EADxBvP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,MACrBC,IAEtC6D,wBAAyB,CAACf,EAAS/C,EAAKC,IAEhCsD,GAAUvD,EADPpP,KAAKQ,IAAI6O,EAAIgD,SAAUnD,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,OAG3D+D,QAAS,CAAChB,EAAS/C,EAAKC,IAChB,CAAC,CACPD,EAAI,GAAK,EAAIG,GAAQ,EAAGF,GACxBD,EAAI,GACJA,EAAI,GAAK,EAAIG,GAAQ,EAAGF,KAG1B+D,UAAW,CAACxL,EAAQwH,EAAKC,gBACwB,IAA5CE,eAAgByB,UAAU,GAAK,GAAI3B,GAAY,OAC5CjL,EAAImL,GAAQA,GAAQ,IAASF,GAAO,EAAGA,MACzCjL,EAAIiL,EAAIgD,UAAuD,GAA3C9C,8BAAiByB,UAAU,GAAK,EAAG3B,GAAW,OAG9D,CAAC,CAFEE,GAAQ,GAAIF,GAAOD,EAAI,GAErBhL,EADFmL,GAAQ,GAAIF,GAAOD,EAAI,YAI5B,IAERiE,KAAM,CAAClB,EAAS/C,IACR,CAACA,GAETkE,MAAO,CAAC1L,EAAQwH,EAAKC,sBAEbsD,GAAUvD,EADPG,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,KAGxGC,aAAc,CAAC9L,EAAQwH,EAAKC,sBAEpBsD,GAAUvD,EADPG,GAAQA,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,GAAIpE,KAGpHsE,kBAAmB,CAAC/L,EAAQwH,EAAKC,wBAEzBsD,GAAUvD,EADPG,GAAQA,GAAQA,8BAAiBgE,WAAW,8BAAcC,cAAc,GAAInE,8BAAgBoE,iBAAiB,GAAIpE,8BAAgBoE,iBAAiB,GAAIpE,KAGjKuE,gBAAiB,CAACzB,EAAS/C,EAAKC,IAExBsD,GAAUvD,EADPG,GAAQH,EAAI,GAAK,GAAIC,IAGhCwE,oBAAqB,CAAC1B,EAAS/C,IAEvBuD,GAAUvD,EADPF,GAAQoD,GAAM,EAAG,GAAIlD,EAAI,MAGpC0E,MAAO,CAAC3B,EAAS/C,EAAKC,IAEdsD,GAAUvD,EADPG,GAAQH,EAAI,GAAK,GAAIC,IAGhC0E,OAAQ,CAAC5B,EAAS/C,EAAKC,IACf,CAAC,CACPD,EAAI,GAAKG,GAAQ,GAAIF,GACrBD,EAAI,GACJA,EAAI,GAAKG,GAAQ,GAAIF,KAGvB2E,WAAY,CAACpM,EAAQwH,EAAKC,kBACgB,IAArCE,GAAQ,WAAOyB,UAAU,EAAG3B,GACxB,CAAC,CACPD,EAAI,GAAKG,GAAQ,GAAIF,GACrBE,GAAQ,IAAKF,GACbD,EAAI,GAAKG,GAAQ,GAAIF,KAGhB,cC/RRzM,YAAYsD,iBAVY,mBACK,mBACC,mBACA,mBACD,mBACA,yBAEmB,gBACtB,OAGpB+N,oBAAsBvN,GAAYwN,UAAUhO,EAAO,cAAgB,QACnEiO,oBAAsBzN,GAAYwN,UAAUhO,EAAO,cAAgB,QACnEkO,gBAAkB1N,GAAYwN,UAAUhO,EAAO,aAAe,QAC9DmO,WAAa3N,GAAYwN,UAAUhO,EAAO,cAAgB,GAGzDtD,MAAM0R,EAAeC,EAAe9L,EAAe+L,EAAiBngB,QACrEigB,SAAWA,OACXG,WAAwC,EAA3BH,EAASI,qBACtBC,YAAuC,EAAzBL,EAASM,mBACvBC,YAAc7U,KAAK0E,MAAM4P,EAAShgB,OAAS6P,KAAKwQ,aAEjDL,EAASQ,WAAaP,EAAQ,MACzB,EAAY,EAARA,IACJ,EAAY,EAAR9L,QAERsM,WAAa,SAAoB,KAAM,WACvCC,WAAa,IAAgB,KAAM,SAEnCC,iBAAmB1V,MAAMlL,GAAO4N,KAAK,WACrCuS,QAAUA,EAGT5R,mBAAmBxM,SACnB8C,EAAOqG,MAAM4E,KAAK0Q,YAAc1Q,KAAKwQ,aACrCrS,EAAKtC,KAAK0E,MAAMtO,EAAI+N,KAAKsQ,YACzBtM,EAAKnI,KAAK0E,MAAMtO,EAAI+N,KAAKsQ,YAActQ,KAAKsQ,WAC5CS,EAAS/Q,KAAKgR,gBAAgB7S,GAC9B8S,EAASjR,KAAKgR,gBAAgB7S,EAAK,WAEhC8B,EAAID,KAAK0Q,YAAc,EAAGzQ,GAAK,EAAGA,GAAK,UACtCsE,EAAKvE,KAAKwQ,YAAajM,GAAM,EAAGA,GAAM,EAAG,OAC3CL,EAAKK,EAAKvE,KAAKwQ,cACXvQ,EAAID,KAAKwQ,YAAcjM,GACvB5C,GAAMuC,EAAIF,EAAI+M,EAAO9Q,GAAI8Q,EAAO9Q,EAAE,GAAIgR,EAAOhR,GAAIgR,EAAOhR,EAAE,WAG/DlL,EAGA0J,gBAAgBxM,SACjBif,EAAelR,KAAK8Q,iBAAiB7e,EAAI+N,KAAKqQ,YAChDa,SAAqBA,QAEnBnc,EAAOqG,MAAM4E,KAAK0Q,YAAc,GAEhCS,EAAU,QAAUnR,KAAKmQ,SAASiB,SAASC,SAC3CC,EAAS,QAAUtR,KAAKmQ,SAASiB,SAASG,QAC1CC,EAAWL,EAAUnR,KAAKmQ,SAASiB,SAASK,UAC5CC,EAAUJ,EAAStR,KAAKmQ,SAASiB,SAASO,SAC1CC,EAAgB5R,KAAKmQ,SAAS0B,sBAAwB7R,KAAK8R,iBAAiB7f,GAAK,UAE9EgO,EAAI,EAAGA,GAAKD,KAAK0Q,YAAazQ,GAAK,EAAG,KAC1C0C,EAAQ3C,KAAK+R,oBAAoB9f,EAAGgO,EAAGD,KAAKiQ,gBAAgB+B,eAAe,GAAGpS,GAAIuR,EAASG,EAAQE,EAAUE,SAG3GO,IAFU,EAAQ,EAAJhS,EAAQD,KAAK0Q,YAAckB,GACrB5R,KAAKmQ,SAAS+B,eAAiBlS,KAAKmQ,SAASgC,eAC5CnS,KAAK4Q,YAAc5Q,KAAK6Q,cAC1CoB,KAAqB,EAAI,EAAI,GAElCjS,KAAKmQ,SAASiC,UAAUC,KAAO,MAC1BC,GACPtS,KAAKmQ,SAASiC,UAAUxkB,OACxB+U,QACM+N,YAAczQ,EAAKD,KAAKmQ,SAASiC,UAAUnO,QAAYjE,KAAKmQ,SAASiC,UAAUC,OAInFrS,KAAKmQ,SAASoC,aAAaF,KAAO,MAC7BC,GACPtS,KAAKmQ,SAASoC,aAAa3kB,OAC3B+U,KACM3C,KAAKmQ,SAASoC,aAAatO,QAAYjE,KAAKmQ,SAASoC,aAAaF,SAGrEpS,GAAK0C,cAGNmO,iBAAiB7e,EAAI+N,KAAKqQ,SAAWtb,EACnCA,EAGA0J,iBAAiBxM,SAClB0Q,EAAQ3C,KAAKkQ,WAAWhN,SAAa,IAAJjR,EAAS,GAAI+N,KAAKkQ,WAAW8B,eAAe,GAAGpS,GAAI,EAAG,GAAG,GAE1FlH,EAAQ,WADHiK,EAAQ,EAAc,IAARA,EAAcA,GACb,SAClBjK,EAAI,EAAS,oBAAJA,EAA4C,WAAjBmD,KAAKS,IAAI5D,EAAG,GAGjD+F,oBAAoBxM,EAAWgO,EAAWC,EAAWiR,EAAiBG,EAAgBE,EAAkBE,OAC3GvV,EAAI,EACJzD,EAAI,EACJ0D,EAAI,EACJ/L,EAAI,UAEC0L,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,OACzBoE,EAAKoC,GAAYK,KAAK3Q,EAAIkf,EAAU9gB,GACpC+P,EAAKmC,GAAYK,KAAK3C,EAAIqR,EAASjhB,GACnCgQ,EAAKkC,GAAYK,KAAK1C,EAAIiR,EAAU9gB,GACpC3C,EAAI4jB,EAASjhB,EAEbmiB,EAAgBxS,KAAK8P,oBAAoBkC,eAAejW,GAC1DyW,OACEA,EAAc7P,MAAMxC,EAAIC,EAAIC,EAAI3S,EAAGuS,EAAIvS,GAAK2C,SAG5CoiB,EAAgBzS,KAAKgQ,oBAAoBgC,eAAejW,MAC1D0W,OACEA,EAAc9P,MAAMxC,EAAIC,EAAIC,EAAI3S,EAAGuS,EAAIvS,GAAK2C,GAG9C0L,EAAI,EAAG,OACJ2W,EAAY1S,KAAKiQ,gBAAgB+B,eAAejW,GAClD2W,OACEA,EAAU/P,MACdJ,GAAYK,KAAK3Q,EAAIuf,EAAWnhB,GAChCkS,GAAYK,KAAK3C,EAAIyR,EAAUrhB,GAC/BkS,GAAYK,KAAK1C,EAAIsR,EAAWnhB,GAChCqhB,EAAUrhB,EACV4P,EAAIyR,EAAUrhB,GACXA,MAID,SAGCiiB,GAAYnW,EAAI,IAAKzD,EAAI,OAAU,GAAK,GAAK,ICtHtD,YAAkBiK,EAAiB1C,UAC9B0C,EAAM1C,GAAK,EACP,EAEJ0C,EAAM1C,EAAE,GAAK,EACT,IAED,UC3BK0S,GAAa,CAAC,YAAa,0BAA2B,+BAEtDC,GAYP,CACL,CACCrmB,GAAI,cACJsmB,UAAW,YACXra,KAAM,IAAIsa,OAAK,CAAC,YAAa,iBAC7BC,aAAoBzU,EAAM0U,IAAI,IAAIF,OAAK,CAAC,YAAa,UAAUjlB,SAAS,SACxEgC,QCfgC,EAAGkF,KAAAA,EAAMke,MAAAA,kBACnC3O,EAAO4O,GAAY1kB,EAAS,IAC5BuT,EAAMoR,GAAW3kB,EAAS4kB,OAC1BC,EAASC,GAAc9kB,OAA6B,GACrDlC,EAAe,WAAKA,eAAM8H,QAAQ,cAAe,IAEjDmf,EAAStlB,EAA0B,MACnCgW,EAAShW,EAAyB,CAAC,EAAG,IACtCulB,EAAgBvlB,OAAO,GACvBwlB,EAASxlB,IACTylB,EAAUzlB,OAEN,OACFC,QAAU,CAAC0F,EAAM,KACV,gBAATtH,MAA8B,SAC5B4e,EAAMqI,EAAOrlB,QAAQylB,WAAW,QAC/BzlB,QAAQgC,MAAQ,IAAM0D,IACtB1F,QAAQiC,OAAS,IAAMyD,QACxByP,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,WACzD4E,EAAMsO,EAAK,CAAEU,YAAa,GAAIE,OAAQA,EAAO/V,QAASoW,MAAAA,EAAOvC,KAAAA,EAAMnO,IAAAA,MAC3EigB,aAAaxQ,EAAK,EAAG,GACb,IAARzP,iBACU4f,EAActlB,WACbA,QAAU4lB,YAAW,IAAML,EAAOvlB,QAAQ,IAAI,SAGtDA,QAAU,CAAC+D,EAAWgO,WACvBE,EAAS,IAAJlO,EAAUshB,EAAOrlB,QAAQ6lB,YAC9B3T,EAAS,IAAJH,EAAUsT,EAAOrlB,QAAQ8lB,aAC9BnQ,WL4DgBT,EAAYnR,EAAWgO,EAAWqD,uBACnDe,EAAIE,GA6BZ,UAAkBtS,EAAGgO,GAAsBqD,SAGnC,IAFSA,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,GAAK0P,EAAQgB,SACrDhB,EAAQW,OAAO,GAAK,IAAMX,EAAQ1P,IAAM,GAAK0P,EAAQgB,OA/BpD2P,CAAQ,CAAChiB,EAAGgO,GAAIqD,UACzB,0BAAOhX,eAAM8H,QAAQ,cAAe,SACtC,qBAKGoQ,GAJOrB,GAAUjQ,KAAI,CAAC3G,EAAIwP,WAC1B0H,EAASL,EAAM,GAAG7W,kBACjB,IAAImX,GAAYJ,EAAQvB,KAAOhG,EAAG0H,EAAOzB,YAAayB,EAAOxB,eAE1CmB,EAAMQ,OAAQS,EAAIE,OACzC,eAAgBnB,EAAMS,UACtB,qBACEe,cAAeN,SAAS,GAAK,EAC7BO,EAAY,SAAA,WAAMjB,iBAAQxM,UAAU,EACpCkK,QAAasD,OAAgBA,IAAUC,EAAYA,GAAaA,SAC/D,WAAMjB,iBAAStC,IK1ER4S,CAASnf,EAAMoL,EAAIC,EAAI,CAAE2D,YAAa,GAAIE,OAAQA,EAAO/V,QAASoW,MAAAA,EAAOvC,KAAAA,EAAMnO,IAAK,MACvFiQ,UAIH0P,EAAOrlB,SAAS,CAACkR,EAAIC,WACxBpN,EAAS,IAALmN,EAAWmU,EAAOrlB,QAAQ6lB,YAC9B9T,EAAS,IAALZ,EAAWkU,EAAOrlB,QAAQ8lB,eAC7B9lB,QAAU,CAAC+V,EAAO/V,QAAQ,GAAK+D,EAAGgS,EAAO/V,QAAQ,GAAK+R,KACtD/R,sBCjDkB0Q,EAAsBuV,OAC3CvV,eAECO,EAAezR,MACdA,EAAEuR,QAASvR,EAAEwR,UAEdkV,EAAe,YACd,OAAW,OAGR,OACDzlB,iBAAiB,YAAawQ,KAC9BxQ,iBAAiB,aAAcylB,GAChC,OACExlB,oBAAoB,YAAauQ,KACjCvQ,oBAAoB,aAAcwlB,MAEzC,CAACxV,KDmCO2U,EAAOrlB,SAAS,CAAC+D,EAAGgO,UACpB,IAANhO,QAAyB,IAANgO,SACX,KAEH/R,QAAQ+D,EAAGgO,YAIfmD,EAAQhN,KAAKC,UAAUtB,MACnB,KACLke,KACI/kB,YAEN,CAACkV,EAAOkB,EAAOvC,EAAMkR,UAElBoB,EAAeC,MACbpmB,QAAQ,IAAMoW,EAAQgQ,IACtBpmB,QAAQ,IAAMoW,EAAQgQ,IACpBA,sBAIR,MAAD,CAAKxnB,MAAM,YACTumB,KAAYxkB,EAAD,CAAK7B,MAAOqmB,EAASvmB,MAAM,gBAC5B,mBAA0B,iBAATR,eAC1BuC,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMknB,EAAoB,IAAR/P,OAC3CzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMknB,EAAY/P,EAAQ,QAE3C,gBAAThY,KACCuC,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAEzC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,MAAMC,OAAO,WDvDzC,CACC5D,GAAI,iBACJsmB,UAAW,0BACXra,KAAM,IAAIsa,OAAK,CAAC,UAChBC,UAAW,KAAM,EACjBljB,QGrBkC,EAAGiF,KAAAA,EAAMC,KAAAA,EAAMke,MAAAA,YAC5CjW,EAAMC,EAAOC,KAAK,KAAMpI,IACvBiN,EAAMoR,GAAW3kB,EAAS4kB,OAC1BxC,EAAY2D,GAAiB/lB,EAAS,KACtCqiB,EAAY2D,GAAiBhmB,EAAS,IAEvC+kB,EAAStlB,EAA0B,MACnCgW,EAAShW,EAAe,GACxBwlB,EAASxlB,OAEL,OACFC,QAAU,WACVgd,EAAMqI,EAAOrlB,QAAQylB,WAAW,MAChCtB,EAAOtd,EAAK5E,SACXjC,QAAQgC,MAAQmiB,IAChBnkB,QAAQiC,OAASkiB,QAClBhP,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,kBJpB1CiT,EAAYC,EAAgBC,SACnDuP,EAAY,IAAI4B,GAAoBnR,EAAQvB,QACxC2S,MAAMtR,EAAOE,EAAQsN,WAAYtN,EAAQuN,WAAYvN,EAAQW,OAAQ,WACzElP,EAAOsO,EAAItO,KACXoP,EAAkB,EAAZd,EAAInT,cACP+B,EAAI,EAAGA,EAAIqR,EAAQpT,MAAO+B,GAAK,EAAG,OACpC0Q,EAAQkQ,EAAU8B,mBAAmB1iB,EAAIqR,EAAQW,QAAQ2Q,kBACtD3U,EAAI,EAAGA,EAAImD,EAAMjT,OAAQ8P,GAAK,EAAG,OACnClE,EAAIkE,EAAIkE,EAAU,EAAJlS,EACdwS,EAAQoQ,GAASlS,EAAO1C,KACzBlE,GAAK0I,IACL1I,EAAI,GAAK0I,IACT1I,EAAI,GAAK0I,IACT1I,EAAI,GAAK,OIQAhH,EAAMsO,EAAK,CAAEuN,WAAAA,EAAYC,WAAAA,EAAY5M,OAAQA,EAAO/V,QAASgC,MAAOmiB,EAAMtQ,KAAAA,MACpF8R,aAAaxQ,EAAK,EAAG,UAIjBkQ,EAAOrlB,SAAUkR,UACpBnN,EAAImN,EAAKmU,EAAOrlB,QAAQgC,MAAQqjB,EAAOrlB,QAAQ6lB,cAC9C7lB,QAAU+V,EAAO/V,QAAU+D,IAC3B/D,mBAGFkV,EAAQhN,KAAKC,UAAUtB,aACnB,KACLke,KACI/kB,YAEN,CAACkV,EAAOwN,EAAYC,EAAY9O,EAAMkR,eAGvC,MAAD,CAAKnmB,MAAM,cACT2Q,EAAD,CAAS1Q,KAAK,UACZ+nB,EAAD,CAAUxoB,KAAK,SAASU,MAAOgQ,EAAI,iBAAkBzP,MAAO,GAAGqjB,IAAcpjB,YAAe+mB,EAAcxmB,OAAO0H,QAChHqf,EAAD,CAAUxoB,KAAK,SAASU,MAAOgQ,EAAI,iBAAkBzP,MAAO,GAAGsjB,IAAcrjB,YAAegnB,EAAczmB,OAAO0H,SAEjH5G,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAExC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,MAAMC,OAAQ4E,EAAK5E,YHpB/C,CACC5D,GAAI,YACJsmB,UAAW,8BACXra,KAAM,IAAIsa,OAAK,IACfC,UAAW,KAAM,EACjBljB,QI5B8B,EAAGkF,KAAAA,EAAMpF,QAAAA,EAASsjB,MAAAA,YAC1C3O,EAAO4O,GAAY1kB,EAAS,IAC5BuT,EAAMoR,GAAW3kB,EAAS4kB,MAE3BG,EAAStlB,EAA0B,MACnCwlB,EAASxlB,OAEL,OACFC,QAAU,WACVgd,EAAMqI,EAAOrlB,QAAQylB,WAAW,QAC/BzlB,QAAQgC,MAAgB,GAARoU,IAChBpW,QAAQiC,OAAiB,GAARmU,QAClBjB,EAAM6H,EAAI0I,gBAAgBL,EAAOrlB,QAAQgC,MAAOqjB,EAAOrlB,QAAQiC,kBPO9CiT,EAAYC,EAAgBC,SAE/C4H,EAAwB,CAC7BY,WAAY,GACZH,SAAU,GACVlM,OAJc0C,EAAWmB,EAAQvB,MAKjCsL,eAAgB,IAAI9K,GAAYe,EAAQvB,KAAO,UAAW,EAAG,CAAC,IAC9DmM,SAAU,GACVve,QAAS2T,EAAQ3T,iBAGTsC,EAAI,EAAGA,EAAIqR,EAAQ+O,KAAK,GAAK,GAAIpgB,GAAK,UACrCiO,EAAI,EAAGA,EAAIoD,EAAQ+O,KAAK,GAAK,GAAInS,GAAK,KAChC,CAAK,GAAJjO,EAAQ,EAAO,GAAJiO,GAASkD,EAAO8H,SAItCnW,EAAOsO,EAAItO,OACbA,KAAK+I,KAAK,eAEFmN,EAAKY,KAAYX,EAAIY,WAAY,IACxCb,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,IAAM3H,EAAQ+O,KAAK,IAAMpH,EAAI,IAAM3H,EAAQ+O,KAAK,IAAMpH,EAAI,IAAM3H,EAAQ+O,KAAK,kBACzHtW,EAAKkP,EAAI,IAAkB,IAAR/a,OAAwB,EAAT+a,EAAI,GACtCxG,EAAQoH,EAAUb,GAAc5T,OAAS4T,GAAca,GAAW7G,GAAckG,EAAIS,SAASE,MAC9F9P,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC1B1I,EAAI,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC9B1I,EAAI,GAAKoS,GAAM,GAAI,IAAK1J,EAAM,MAC9B1I,EAAI,GAAK,YAGN9J,EAAI,EAAGA,EAAIqR,EAAQ+O,KAAK,GAAIpgB,GAAK,UAChCgO,EAAI,EAAGA,EAAIqD,EAAQ+O,KAAK,GAAIpS,GAAK,EAAG,UAClCM,MAAMtO,EAAI,IAAM4J,KAAK0E,MAAMN,EAAI,KAAO,GAAM,iBAChDlE,EAAKkE,GAAiB,IAAR/P,OAAmB,EAAJ+B,UAC1BqP,EAAI,EAAGA,EAAI,EAAGA,GAAK,IACtBvF,EAAIuF,GAAK,IAAOvM,EAAKgH,EAAIuF,KOzCrBvM,EAAMsO,EAAK,CAAEtB,KAAAA,EAAMpS,QAAAA,EAAS0iB,KAAM,CAAS,GAAR/N,EAAY,IAAa,GAARA,OAC1DuP,aAAaxQ,EAAK,EAAG,aAIrBD,EAAQhN,KAAKC,UAAUtB,aACnB,KACLke,eACQ,IAAMQ,EAAOvlB,cAEvB,CAACkV,EAAOkB,EAAOvC,EAAMkR,eAGtB,MAAD,CAAKnmB,MAAM,cACT+B,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAM+lB,EAASrX,KAAKS,IAAI,GAAIgI,EAAQ,QAC7DzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAM+lB,EAASrX,KAAKQ,IAAI,EAAGiI,EAAQ,QAC5DzV,EAAD,CAAK9B,KAAK,OAAOI,QAAS,IAAMgmB,EAAQC,WAExC,SAAD,CAAQplB,IAAKulB,EAAQrjB,MAAM,KAAKC,OAAO,wBJSZ2E,KAAEA,QAAMwJ,UAAO3O,KAASpD,QAAI0mB,WAC/C8B,GAAYvmB,EAAS,aAErB8P,GAAO,WACGyO,EAAQ,gBAIzB6F,GAASrc,WAAYsJ,EAAEgT,YAActmB,IAAI2G,eACnC6B,QAAOuJ,WAAO0U,IAAInT,EAAErH,aACrB8F,QAAkB,IAATvJ,GAAuB8K,EAAEkT,UAAUzU,GAG1CuB,EAAEhQ,QAAQ,CAAEiF,KAAAA,EAAMwJ,MAAAA,EAAevJ,KAAAA,EAAMpF,QAAAA,EAASsjB,MAAAA,wBK5D7C+B,GAAiD,CAC7D7J,SAAS8C,EAAG1gB,IACJA,EAGRkR,QAAOwW,WAAEA,GAAczc,EAAMjL,EAAO2nB,UAC5BD,EAAWE,KAAKnV,KAAMxH,EAAMjL,EAAO2nB,IAG3CzW,MAAKnQ,SAAEA,GAAYkK,EAAMjL,EAAO2nB,UAC1B9Z,MAAM6J,QAAQ1X,GACZA,EAAM2F,KAAI,CAACkiB,EAAKjmB,IACtBb,EAAS6mB,KAAKnV,KAAMxH,EAAKtB,KAAK/H,GAAQimB,EAAKF,KAFV3nB,GAMnCkR,KAAInQ,SAAEA,EAAUqG,UAAU6D,EAAMjL,EAAO2nB,mBACxB,IAAV3nB,eACE8nB,EAA8C,qBAAjC,WAAOC,qBAAYC,WAAiC,WAAMlb,sBAAcmb,eAAahd,EAAMiL,EAAO6R,WAAWnhB,OAAO5H,IAAIymB,OAAS,KAC9Ipf,EAAW,iBACVqD,KAAK1J,GAAO+H,mBACd+f,IACEhd,OAAOpB,KAAK,WAAW0B,cAAc,IAAI8c,SAASjZ,OAEpDA,GAAKlO,EAAS6mB,KAAKnV,KAAMxH,EAAKtB,KAAKsF,GAAIjP,EAAMiP,GAAI0Y,OAE/CthB,GAGR6K,QAAOiX,gBAAEA,GAAmBld,EAAMjL,EAAO2nB,MACpC3nB,MAAAA,GAA0D,iBAAVA,SAC5CA,QAEFqG,EAAW,GACX+hB,EAAeD,EAAgBld,iBAC9BvB,KAAK0e,GACVpf,WAAYof,EAAavd,GAAGwd,QAAQpd,KACpClD,eACIkH,GAAKmZ,EAAanZ,GAAG2Y,KAAKnV,KAAMxH,EAAKtB,KAAKsF,GAAIjP,EAAMiP,GAAI0Y,MAEvDthB,QC5CQiiB,GAAAC,IAAAA,GAAAD,yBACW,uBACH,sBACE,8BACD,iBAETE,oCACR,sBAAavf,QAAQsf,mBAAgB,SAG7BE,iCACR,sBAAaxf,QAAQsf,gBAAa,WAG1BG,4BACTtmB,EAAU4F,aAAaiB,QAAQsf,sBACjCnmB,GAAW8J,EAAWgc,SAAS9lB,GAC3BA,EAED,WAGQumB,kCACR,sBAAa1f,QAAQsf,iBAAc,eAG3BxmB,qBAAYC,GACvBA,gBAAuBkI,QAAQqe,eAAavmB,OAGjCC,kBAASC,GACpBA,gBAAoBgI,QAAQqe,YAAUrmB,OAG3BC,oBAAWC,GACtBA,gBAAsB8H,QAAQqe,cAAYnmB,OAG/BwmB,mBAAUC,GACrBA,gBAAqB3e,QAAQqe,aAAWM,IChC9C,MAAMC,GAA0C,CAC/CC,WAAY,EACZC,WAAY,EACZC,KAAM,mBAaqB1hB,KAAEA,OAAM8I,QAAMU,cAAOjE,SAAaoc,aAAQC,WAAYC,UAAUC,UACrF5Z,EAAMC,EAAOC,KAAK,KAAMpI,IACvBshB,EAAQD,GAAa3nB,EAASqnB,GAAMK,aACrCxK,EAASzd,EAA4B,MACrC6C,EAAW7C,EAA0B,MACrC4oB,EAAc5oB,OAEV,OACGC,QAAU,QAChBoQ,GAAUjE,YAER6a,EAAQ,CAAE7a,kBAAaA,IAAe,IACtCtF,EAAOuJ,EAAMrJ,OAAOkgB,KAAKH,GAAiB,IAAI8B,YAAUxY,GAAQA,EAAMvJ,KAAMmgB,KAC3EhnB,QAAQX,MAAQ6I,KAAKC,UAAUtB,EAAM,KAAMshB,GAAOD,IAAW,WAC5D1oB,KACA,8BAA8BA,EAAE4J,mBAChCnF,MAAMzE,KACPQ,QAAQX,MAAQ,WAKjB+Q,GAAO,OACHpQ,gBAGH,OACGA,YACV,CAACkoB,OAWM,KACLK,GAAU/K,EAAOxd,YACbA,QAAQC,kBACN4oB,YAAY,WAEpB,CAACN,OAEM,QACLC,GAAchL,EAAOxd,SAAW4C,EAAS5C,QAAS,OAC/C8oB,EAAUC,mBAAmBvL,EAAOxd,QAAQX,SACzCW,QAAQgpB,aAAa,OAAQ,gCAAgCF,OAC7D9oB,QAAQgpB,aAAa,WAAY,GAAGtZ,YACpC1P,QAAQipB,WAEhB,CAACT,OAEM,KACLC,GAAYjL,EAAOxd,YACfA,QAAQX,MAAQ,KAChBW,QAAQC,YAEd,CAACwoB,sBAQF,MAAD,CAAK7pB,MAAM,cACT2Q,EAAD,CAAS1Q,KAAK,QACZsL,OAAOC,QAAQ+d,IAAQnjB,KAAI,EAAEgB,OAC5BrF,EAAD,CAAK7B,MAAOgQ,EAAI,eAAe9I,KAAQjH,OAAQmpB,IAAWliB,EACzD/G,QAAS,KAAMiqB,OAVE7pB,EAUW2G,KAT1BiiB,UAAU5oB,UACNA,GAFU,IAACA,WAcpB,WAAD,CAAUS,IAAK0d,EAAQ5e,MAAM,SAASU,SA9CtB,eAETuH,EAAOqB,KAAKihB,MAAM3L,EAAOxd,QAAQX,kBAChCmnB,MAAM3f,GAAM,SACXrH,KACA,oBAAoBA,EAAE4J,aAyC2BggB,YAAY,EAAOC,YAAY,MAAMC,YAAaxa,EAAI,0BAC/G,IAAD,CAAGhP,IAAK8C,EAAU2mB,MAAM,iCC9FD5a,MAAEA,OAAOxL,OAAMtE,WAAMuB,aACrC,IAAD,CAAGxB,MAAM,YAAYwF,KAAMjB,GAChCtE,GAAQwQ,GAAMxQ,KACd,MAAD,OACE,KAAD,KAAK8P,GACJvO,aCZGmQ,4BACsD,GAE5DA,SAASiZ,SACFnrB,EAAK6mB,iBACNuE,SAASprB,GAAMmrB,EACbnrB,EAGRkS,GAAGnS,EAAcorB,UACT1X,KAAKzH,gBACR5J,iBAAiBrC,SACVsrB,KACLxpB,wBAKPqQ,SAASiZ,UACD1X,KAAK6X,GAAG,SAAUH,GAG1BjZ,QAAQiZ,UACA1X,KAAK6X,GAAG,QAASH,GAGzBjZ,QAAQmZ,KACJE,iBAAiB,aAAaxiB,2BAC1B/I,EAAKwrB,EAAGC,aAAa,4BACtBL,UAASprB,cAAMwrB,WAEhBJ,SAAW,UCjCLvqB,GAAU,CACtBoD,aAAc,gQACdynB,WAAY,+PACZvnB,OAAQ,4fACRwnB,KAAM,mWACNC,aAAc,8RACdC,YAAa,6TACbC,SAAU,mfCULC,GAAmB,CAAC,kBAAmB,kBAAmB,oBAAqB,sBAAuB,oBAAqB,2BAA4B,wCAAyC,cAAe,eAAgB,iBAAkB,iCAAkC,4BAA6B,oBAAqB,sBAAuB,sBAAuB,oBAAqB,sBAAuB,uBAAwB,yBAA0B,uBAAwB,2BAA4B,2BAA4B,+BAAgC,gCAAiC,qBAClmBC,GAAe,CAAC,uBAAwB,sBAAuB,oBAAqB,oBAAqB,sBAAuB,wBAChIC,GAAkB,CAAC,iBAAkB,mBAAoB,qBAAsB,uBAAwB,mDAAoD,oDAAqD,kEAAmE,wBAAyB,2BAA4B,yBAA0B,wCAClWC,GAAe,CAAC,kBAAmB,oBAAqB,sBAAuB,oBAAqB,2BAA4B,wCAAyC,eAAgB,iBAAkB,4BAA6B,iCAAkC,oBAAqB,sBAAuB,sBAAuB,oBAAqB,2BAA4B,2BAA4B,gCAAiC,mBAAoB,wBAAyB,sBAAuB,wBAAyB,sBAAuB,uBAC/iBC,GAAY,CAAC,uBAAwB,+BAAgC,4BAA6B,aAAc,YAAa,YAK7HC,GAAY,IAAIC,YAAUC,UAC/BC,eACAA,gBACE,CAAEC,WAAY,IAMJC,GAA+D,CAC3E7N,SACQ,CAAC,GAAI,GAAI,IAGjB1M,SAAQwa,KAAEA,GAAQzgB,EAAMjL,EAAO2nB,SACxBgE,EAAUhE,EAAMiE,QAAQhsB,SAAQ,OAChCmR,MAAM8a,IAAI5gB,KAAMygB,EAAKI,aAAwB,IAAV9rB,SAAkB,MAErD+rB,EAASpE,EAAMiE,QAAQhsB,SAAQ,OAC/BmR,MAAM8a,IAAI5gB,GAAMygB,EAAKI,aAAwB,IAAV9rB,QAAiB,YAEnD,CAAC,GAAI,WAAoB,IAAVA,EAAkB,oBAAsB,0BACjD2rB,MAAYK,GAAWrE,EAAMlY,IAAI,qCAC1B,IAAVzP,EAAiB,oBAAsB,0BACpC+rB,MAAWC,GAAWrE,EAAMlY,IAAI,oBAAqB,KAGnEyB,QAAO+a,QAAEA,EAAS7kB,oBAAQsgB,GAAczc,EAAMjL,EAAO2nB,SAC9CuE,EAASxE,EAAWyE,WAAWlhB,GAAM,GACrCmhB,oBAA2BC,SAAW,IAAI9C,YAAUte,EAAKqhB,WAAY,IAAI/G,OAAKta,EAAKshB,WAAY,CAACrW,EAAOmW,WAAaphB,EACpHuhB,oBAAgCC,eAAgB,IAAIlH,OAAK,GAAI,CAACrP,EAAOuW,kCAA0BJ,SAAU,IAAI9G,OAAK,GAAI,CAACrP,EAAOmW,UAAYphB,GAEzIyhB,EAAQC,EAAQxrB,GAAQ+qB,EAAOR,KAAK9D,KAAKnV,KAAM2Z,EAAiBpsB,EAAO2nB,MACvD,IAAnBsE,EAAQpiB,aACJ,CAAC6iB,EAAQC,EAAQxrB,SAgBlB,CAACurB,EANO,oBAPC/E,EAAMiE,QAAQ5gB,gBACHhL,MAAQksB,EAAOntB,OACtCqC,iBAAiB,UAAU,iBACvByN,EAAI,WAAQvH,SAAUslB,EAAE7tB,OAAUsrB,EAAyBrqB,WAAUksB,IACtEnb,MAAM8a,IAAI5gB,EAAM4D,EAAEge,OAAShe,EAAEge,OAAO7sB,GAAS6O,EAAE6c,KAAK5jB,6BAIxDmkB,EAAQtmB,QAAS,kBAAkBqmB,GAAWnd,EAAE9P,oBAC/CitB,GAAWc,GAAWnF,EAAMlY,IAAK+c,EAAsBO,YAAYle,EAAE9P,6BAC5DgP,KAAK,qBAGO4e,EAAQxrB,IAGlC+P,MAAKnQ,SAAEA,GAAYkK,EAAMjL,EAAO2nB,SACzBqF,EAAQrF,EAAMiE,QAAQhsB,SAAQ,KAC9BiO,MAAM6J,QAAQ1X,OAAgB,MAC9B+Q,MAAM8a,IAAI5gB,EAAM,CAAClK,EAAS+G,aAAc9H,OAExCitB,EAActF,EAAMiE,QAAQhsB,SAAQ,KACpCiO,MAAM6J,QAAQ1X,OAAgB,MAC9B+Q,MAAM8a,IAAI5gB,EAAM,IAAIjL,EAAOe,EAAS+G,eAEpC6kB,EAAS,gCAAgCK,kBAAsBrF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,2BAErG1pB,EAAO,UACP0M,MAAM6J,QAAQ1X,OACVA,EAAM2F,KAAI,CAACunB,EAAYtrB,WACvBurB,EAAWxF,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAKtB,KAAK/H,QAAQ,KACxEwrB,EAAWzF,EAAMiE,QAAQhsB,SAAQ,MACrCI,EAAM4B,EAAQ,GAAI5B,EAAM4B,IAAU,CAAC5B,EAAM4B,GAAQ5B,EAAM4B,EAAQ,MAC3DmP,MAAM8a,IAAI5gB,EAAMjL,MAEhBqtB,EAAa1F,EAAMiE,QAAQhsB,SAAQ,MACvCI,EAAM4B,EAAQ,GAAI5B,EAAM4B,IAAU,CAAC5B,EAAM4B,GAAQ5B,EAAM4B,EAAQ,MAC3DmP,MAAM8a,IAAI5gB,EAAMjL,MAEhBstB,EAAYriB,EAAKtB,KAAK/H,GAAOmrB,YAAY,SACzCrrB,EAAWX,EAASW,SAAS4rB,IAC5BC,EAASC,EAASC,GAAS1sB,EAAS6mB,KAAKnV,KAAM6a,EAAWJ,EAAYvF,SACtE,4CAA4C5mB,EAAShC,KAAKuuB,YAAoB5rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,yDAExIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yDACDuB,kBAAyBxF,EAAMlY,IAAI,qBAAqB5P,GAAQirB,kCAChG9qB,EAAM6J,QAAU,EAAI,GAAK,wEACMujB,MAAuB,IAAVxrB,EAAc,WAAa,MAAM/B,GAAQ6qB,oEACtD2C,MAAezrB,IAAU5B,EAAM6J,OAAS,EAAI,WAAa,MAAMhK,GAAQoD,4DAEtGsqB,yBACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,4BAC9CI,GAAWc,GAAWnF,EAAMlY,IAAK6d,EAAW,GAAG1rB,4CAEhD4rB,kCAEDC,EAAQ,0BAA0BA,UAAgB,0CAGnD1f,KAAK,IACJ/N,EAAM6J,OAAS,OACV,gHAEyBojB,kBAA4BtF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,2DAK5F,CAAC,GAAI8B,EAAQxrB,IAGrB+P,KAAInQ,SAAEA,OAAU2I,EAAMtC,UAAU6D,EAAMjL,EAAO2nB,yBACtCiG,EAAU,IAAIrE,YAAU6B,GAAW,IAAI7F,OAAK,CAAC5W,GAAW1D,EAAKsC,eAC7Dyf,EAAQrF,EAAMiE,QAAQhsB,SAAQ,WAC7B+G,EAAMinB,EAAQnI,QACf1U,MAAM8a,IAAI5gB,EAAKtB,KAAKhD,GAAM5F,EAAS+G,cAEnCggB,EAA8C,qBAAjC,WAAOC,qBAAYC,WAAiC,WAAMlb,sBAAcmb,eAAahd,EAAMiL,EAAO6R,WAAWnhB,OAAO5H,IAAIymB,OAAS,KAK9IkH,qBAJyBvhB,YAC5BmgB,aAAW,KAAO,CAAEsC,KAAM/iB,OAAOpB,KAAK,WAAW0B,cAAc,MAC/D1B,GAC4Bke,KAAKnV,KAAMmb,EAAS,WAAQnI,SAAS,GAAIkC,GAC7C,GAAK,gCAAgCqF,kBAAsBrF,EAAMlY,IAAI,kBAAkB5P,GAAQgrB,0BACtH/C,GAA8B,eAAhB7c,EAAK6iB,OAAyB,CAC1B,iBAAV9tB,MAA4B,UACjCoL,EAAaN,OAAOC,QAAQ,WAAWK,cAAc,IACzDzF,KAAI,EAAEgB,EAAKuE,KAAY,CAACvE,EAAK4kB,aAAW,KAAO,CAAEsC,KAAM3iB,qBAClDH,QAAQ,WAAWK,cAAc,IAAIrD,SAAQ,EAAEpB,EAAKuE,MAChC,iBAAflL,EAAM2G,KACXoK,MAAMgd,OAAOC,IAAI/iB,EAAKtB,KAAKhD,GAAM,yBAC3BuE,EAAOgd,SAASloB,EAAM2G,OAC5BoK,MAAMgd,OAAOC,IAAI/iB,EAAKtB,KAAKhD,GAAM,4BAA6B3G,EAAM2G,OAGpEsnB,aAAWnjB,OAAOojB,YAAY9iB,IAAawc,KAAKnV,KAAMxH,EAAMjL,EAAO2nB,OAEvExmB,EAAO,SACU,iBAAVnB,QAAgC,IAAVA,MACzB8K,OAAOpB,KAAK1J,GACjB2F,2BACMwnB,EAAWxF,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAKtB,KAAKhD,QAAM,KACtE2mB,EAAYriB,EAAKkjB,UAAUxnB,GAC3BjF,EAAWX,EAASW,SAAS4rB,GAC7Bc,EAAiBtG,EACpByD,aAAW,KAAO,CAAEsC,KAAM,SAAA,WAAWziB,qBAAazE,MAAQ,KAC1D5F,GACC,0BAAYqK,qBAAazE,OAAS,WAAWyE,qBAAazE,GAAKuhB,SAASloB,EAAM2G,QAC5EoK,MAAMgd,OAAOC,IAAIV,EAAW,4BAA6BttB,EAAM2G,UAE9D4mB,EAASC,EAASC,GAASW,EAAexG,KAAKnV,KAAM6a,EAAWttB,EAAM2G,GAAMghB,SAC5E,4CAA4C5mB,EAAShC,KAAKuuB,YAAoB5rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,6DAExIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,2BAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,2DACDuB,kBAAyBxF,EAAMlY,IAAI,qBAAqB5P,GAAQirB,oCAChGyC,2BACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,8BAC9CI,GAAWrlB,6CAEZ6mB,sCAEDC,EAAQ,0BAA0BA,UAAgB,8CAIrD1f,KAAK,KAED,CAAC,GAAI4e,EAAQxrB,IAGrB+P,QAAOmd,QAAEA,EAASjnB,UAAU6D,EAAMjL,GAAO4rB,QAAEA,gBACpC3rB,EAAW2rB,EAAQ3rB,oBAClBG,EAASiqB,EAAwBrqB,MACjCsuB,oBAAiBpX,OACpBpQ,SAAS1G,EAAM4G,MAAM,GAAI,IACzBqnB,EAAUvnB,SAAS1G,GAASmuB,WAAWnuB,KACrC2Q,MAAM8a,IAAI5gB,EAAMqjB,eAElBpY,WAAQgB,MAAO,OAEX,CAAC,GAAI,gCAAgCjX,cAD/B,0BAAOsN,SAAS,IAAIihB,SAAS,EAAG,QAAQ,aACqB,UAEpE,CAAC,GAAI,mBAAmBvuB,mBAAoBD,IAAS,OAAQ,KAGrEkR,QAAOwa,KAAEA,kBAAMvD,oBAAiBsG,GAAqBxjB,EAAMjL,EAAO2nB,OAC7D+E,EAAS,GACTC,EAAS,GACTjB,EAAKI,oBACM,IAAV9rB,EACM,4CAA4C2nB,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,EAAMygB,EAAK5jB,6BAA4B6f,EAAMlY,IAAI,qBAAqB5P,GAAQgrB,uBAErK,0CAA0ClD,EAAMiE,QAAQhsB,SAAQ,IAAMqL,EAAK8F,MAAM8a,IAAI5gB,OAAM,qBAA4B0c,EAAMlY,IAAI,uBAAuB5P,GAAQirB,yBAGvK3pB,EAAO,MACU,iBAAVnB,QAAgC,IAAVA,OAA+B8rB,iBAAwB,IAAV9rB,GAAuB,OAC9FooB,EAAeD,EAAgBld,KAClBH,OAAOpB,KAAK0e,GAC7Bpf,WAAYof,EAAavd,GAAGwd,QAAQpd,KACpBtF,eACX+oB,EAAQtG,EAAavd,GACrByiB,EAAYmB,EAAkBxjB,EAAMJ,GACpCwhB,EAAUiB,EAAUlH,aAAarY,KAAK,QACxCid,GAAa9C,SAASmE,SAClB,SAGF3qB,EAAWgtB,EAAMhtB,SAAS4rB,IACzBC,EAASC,EAASC,GAASiB,EAAM9G,KAAKnV,KAAM6a,EAAWttB,EAAM6K,GAAI8c,MACjD,IAAnB4F,EAAQ1jB,QAAmC,IAAnB2jB,EAAQ3jB,QAAiC,IAAjB4jB,EAAM5jB,aAClD,SAGF8kB,EAAwC,WAA1BD,EAAM3vB,KAAKuuB,IAA2BrC,GAAgB/C,SAASmE,GAC7EuC,EAAY1D,GAAahD,SAASmE,UACpCsC,GAAeC,MACR,GAAGhqB,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,WAAW8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,WAAW2B,OAC5FC,EACHmB,EAAclB,EAAQ,IAGvB,oBAAoBiB,EAAM3vB,KAAKuuB,WAAmBG,EAAQ,GAAK,cAAc/rB,EAAW,kBAAkBsqB,GAAWtqB,MAAe,yDAEvIkD,GAAM+iB,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBAClC8B,GAAK/F,EAAMlY,IAAK6d,EAAW3F,EAAMiE,yBACjC2B,yBACOI,GAAYhG,EAAMlY,IAAK6d,EAAW3F,EAAMiE,4BAC9CkB,GAAWnF,EAAMlY,IAAK6d,yCAEvBE,kCAEDC,EAAQ,0BAA0BA,UAAgB,wBAGpD1f,KAAK,UAED,CAAC2e,EAAQC,EAAQxrB,IAGzB+P,QAAOwa,KAAEA,YAAMmD,EAAWznB,UAAU6D,EAAMjL,EAAO2nB,iBAC1CmH,EAAUnH,EAAMiE,QAAQ5gB,gBACHhL,YAAQA,IAAS,KACxCoB,iBAAiB,oBACb2tB,EAAY1E,EAAyBrqB,QACtC+Q,MAAM8a,IAAI5gB,EAA0B,IAApB8jB,EAASllB,YAAe,EAAYklB,KACrDluB,4BAGF8rB,QACEzhB,EAAS2jB,IACTxC,EAAUphB,EAAKmb,aAAarY,KAAK,QACnCod,GAAUjD,SAASmE,GAAU,OAC1BuB,EAAU,IAAIrE,YAAU6B,GAAW,IAAI7F,OAAK,CAAC5W,GAAW1D,EAAKsC,iBAkB1D,sBAjBUoa,EAAMiE,QAAQ5gB,oBAC1BgkB,EAAW3E,IACRrqB,YAAQA,IAAS,KACjBoB,iBAAiB,oBACnB2tB,EAAWC,EAAShvB,QACrB+Q,MAAM8a,IAAI5gB,EAA0B,IAApB8jB,EAASllB,YAAe,EAAYklB,KACrDluB,2BAECouB,EAAQrB,EAAQnI,MAClBwJ,MACM/E,MAAMvnB,MAAQ,GAAGssB,EAAMC,MAAM,KAAK,SAClChF,MAAMtnB,OAAS,GAAGqsB,EAAMC,MAAM,KAAK,YAEzCC,gBAAe,OACVtD,IAAI,GAAGmD,EAASI,eAAeJ,EAASK,mBAC9CC,QAAQjF,6BAGDkF,GAAOrZ,KAAYA,EAAOsZ,YAClCzE,GAAiB7C,SAASmE,GAAW,KACpCoD,EAAU,IAAIlK,OAAK,IACnBgK,GAAOrZ,IAAkC,iBAAhBA,EAAO2X,OACzB4B,EAAQ1C,YAAY7W,EAAO2X,MAC1B0B,GAAOrZ,IAAiC,+BAAd8R,YAA0D,iBAAvB9R,EAAOtP,OAAO8oB,SAC5ED,EAAQ1C,YAAY7W,EAAOtP,OAAO8oB,SAEpC,oBAAoBZ,gBAC1BpD,EAAKI,WAAa,oBAAoBnE,EAAMlY,IAAI,oBAAsB,eACtEvE,EAAOvF,QAAS,kBAAkBqmB,GAAW9jB,mBAC5C4kB,GAAWnF,EAAMlY,IAAKggB,EAAQ1C,YAAY7kB,EAAErB,QAAQ,cAAe,6BAC1DkH,KAAK,+BAEPwhB,GAAOrZ,IAAiC,sCAAd8R,WAM/B,OACA2H,EAAa9J,OACV,mBAAmBiJ,MAA8B,IAAlB5jB,EAAOrB,OAAe,GAAK,SAAS8lB,kBACvD,IAAlBzkB,EAAOrB,OAAe,GAAK,iBAAiB8lB,kBAC3CzkB,EAAOvF,QAAS,kBAAkBqmB,GAAW9jB,SAAQ6F,KAAK,iCAVQ,OAChE+Z,EAAa,WAAMhb,sBAAcmb,eAAahd,EAAMiL,EAAOtP,OAAO5H,IAAIymB,SAEnE,oBAAoBqJ,gBADdhkB,OAAOpB,KAAK,0BAAY0B,cAAc,IAE3CzF,QAAS,WAAWuC,eAAc6F,KAAK,6BAS3C,CAAC,GAAI4e,EAAQ,MAItB,YAAgB3sB,6BACU6tB,MAG1B,YAAoB7f,OACLQ,EAAVlG,EAAO,MACNkG,EAAI,EAAGA,EAAIR,EAAInE,OAAQ2E,UAEV,GAAKlG,EADhB0F,EAAIU,WAAWF,MAEb,SAEFlG,EAGR,YAAoBmH,EAAexE,KAAerE,SAC3C+W,EAAM1S,EAAKmb,qBACR5X,EAAI,EAAGA,EAAImP,EAAI9T,OAAQ2E,GAAK,EAAG,OACjC7H,EAAMgX,EAAI3W,MAAMwH,GAAGT,KAAK,KACxB6hB,EAASngB,EAAI9I,KAAQC,MACvBD,IAAQipB,SACJA,SAGF5D,GAAWrO,EAAIA,EAAI9T,OAAS,IAGpC,YAAe4F,EAAexE,EAAiB2gB,SACxCzrB,EAAI8K,EAAK8F,MAAMgd,OAAOtI,IAAIxa,GAAM,MACrB,IAAb9K,EAAE0J,aAAqB,SACrBE,EAAU5J,EAAE,GAAGyG,OAAS6I,EAAItP,EAAE,GAAGyE,SAAUzE,EAAE,GAAGyG,QAAU6I,EAAItP,EAAE,GAAGyE,cAClEirB,GAAU,aAAc,eAAgB7D,GAAWjiB,GAAU6hB,GAGrE,YAAcnc,EAAexE,EAAY2gB,SAClCjlB,EAAMsE,EAAK8hB,YAAY,QAAQ3G,aAAarY,KAAK,KACjDhE,EAAU0F,EAAI9I,UAChBoD,IAAYpD,EAAY,GACrBkpB,GAAU,YAAa,OAAQ7D,GAAWjiB,GAAU6hB,GAG5D,MAAMiE,GAAY,CAAC9wB,EAAcS,EAA4BswB,EAAelE,IAOpE,yBAAyB7sB,eANhB6sB,EAAQhsB,eACpBmwB,qBAAqB,QAAQ,GAAGC,UAAUhC,IAAI,iBACxC7sB,KAAKC,iBAAiB,SAAS,OACpC2uB,qBAAqB,QAAQ,GAAGC,UAAU9wB,OAAO,UAClD,CAAE+wB,SAAS,EAAMC,MAAM,iBAGxBrwB,GAAQL,oCACiBswB,qBAIvBnC,GAAc,CAACle,EAAexE,EAAiB2gB,IAqD7C,YApDIA,EAAQ5gB,oBACZmlB,EAAW,iBACVL,EAAQxqB,SAASC,cAAc,SAC/ByqB,UAAUhC,IAAI,mBAEdjkB,EAAU0F,EAAIxE,EAAK8hB,YAAY,QAAQ3G,aAAarY,KAAK,MAC1DhE,EAAQzJ,SAAS,YACf8vB,mBAAmB,YAAa,qCAAqCrmB,kBAGtEsiB,EAAUphB,EAAKmb,aAAarY,KAAK,OACjCqiB,mBAAmB,YAAa,kEAEhBvwB,GAAQsD,qFAEMkpB,uCAE9BtmB,cAAc,uBAAoB3E,iBAAiB,SAAS,WAC3DivB,EAAU/qB,SAASC,cAAc,WAC/BvF,MAAQqsB,IACbjmB,YAAYiqB,KACPzvB,kBACC4oB,YAAY,UAClB8G,YAAYD,QAGbjqB,YAAY0pB,YACN3uB,KAAKC,iBAAiB,SAAS,WAC/BkvB,YAAYR,SAAe3vB,OACjC,CAAE8vB,SAAS,EAAMC,MAAM,aACjB/uB,KAAKC,iBAAiB,eAAe,WACrCkvB,YAAYR,SAAe3vB,OACjC,CAAE8vB,SAAS,EAAMC,MAAM,OAExB9uB,iBAAiB,yBAEfmvB,wBAEDC,EAAa,OACdpvB,iBAAiB,cAAc,OACzBmlB,YAAW,WAEV,OACN,UAEDnlB,iBAAiB,YAAY,KAC3BovB,iBACUA,KACL,4BC7ZSjpB,KAAEA,QAAMwJ,UAAO3O,cAAS0K,UAAauc,UACnDoH,EAAO/vB,EAAuB,MAC9BwlB,EAASxlB,cAEL,OACFC,QAAU,QACXoQ,GAAUjE,YAER8e,EAAU,IAAI8E,GACd/I,EAAQ,CAAElY,IAAKC,EAAOC,KAAK,KAAMpI,GAAOnF,QAAAA,EAASwpB,QAAAA,EAAS9e,YAAAA,GAC1D7B,EAAO,IAAIse,YAAUxY,GACrB4f,EAAW5f,EAAMrJ,OAAOkgB,KAAK6D,GAAYxgB,EAAM8F,EAAMvJ,KAAMmgB,GAC3DjmB,EAAWqP,EAAMrJ,OAAOhG,SAASuJ,GACjClM,EAAOgS,EAAMrJ,OAAO3I,KAAKkM,OAC3B2lB,EAAOD,EAAS,GAChBA,EAAS,OACL,oBAAoB5xB,WAAc2C,EAAW,kBAAkBA,KAAc,6CACxDivB,EAAS,KAAKA,EAAS,gDACzBA,EAAS,gCAG/BhwB,QAAQkwB,UAAYD,IACjBE,QAAQL,EAAK9vB,eACbR,KACA,6BAA6BA,EAAE4J,mBAC/BnF,MAAMzE,KACTQ,QAAQkwB,UAAY,WAKnB9f,GAAO,OACRpQ,gBAGE,OACFA,YACL,CAAC4G,EAAMwJ,EAAOjE,MAET,MAAD,CAAKrM,IAAKgwB,EAAMlxB,MAAM,sBCjDAgI,KAAEA,UACzBkI,EAAMC,EAAOC,KAAK,KAAMpI,YACtB,OAAD,OACL,MAAD,CAAKhI,MAAM,cACT,IAAD,KAAIkQ,EAAI,kCACP,KAAD,CAAIlQ,MAAM,8BCSagI,KAAEA,cAAMwpB,UAAa3uB,kBAAS4uB,gBACjDvhB,EAAMC,EAAOC,KAAK,KAAMpI,IACvBzC,EAAOmsB,GAAYhwB,EAAwB,OAC3CiwB,EAAeC,GAAcC,OAChCF,WACK,OAAD,OAAOG,EAAD,CAAYzsB,MAAO,iDAAiDssB,EAAcnnB,UAAWlF,UAAWssB,WAGhHvhB,EAAMC,GAAaC,SACpBF,WACI,OAAD,OAAOyhB,EAAD,CAAYzsB,MAAO,0BAA0BkL,aAGjD,OACA,QACP,CAACF,EAAI5Q,GAAIoD,UAENkvB,EAAkBlqB,EAAOuB,SAC7BK,WAAYuB,GAAarC,EAAElJ,GAAI4Q,EAAIpF,cACnC7E,QAASuC,EAAElJ,OAEDyQ,EAAI,kBAAmBA,EAAIG,EAAI5Q,KAAMsyB,GAE5C/mB,GAAanI,EAASwN,EAAIpF,eACrB,6CAA6CoF,EAAIpF,oBAGpDuG,EAAOwgB,GAAYtwB,EAA2B,OAC9C6L,EAAa0kB,GAAkBvwB,EAAoC,SAChE,OACA,qB3B4C0BmB,gBACVsmB,EAAWtmB,IAClB0K,a2B7CH1K,GACbmE,SAAUirB,EAAermB,oB3BaE/I,EAAoBpD,aAC7CoN,EAAOpN,IAAOoN,EAAOpN,GAAIoD,UAAYA,EAAS,OAC5CqvB,QAAoB/I,EAAWtmB,GAC/BsvB,EAAa,WAAOvjB,WAAW7G,SAAU8G,EAAEpP,KAAOA,cAAK0I,WACxDgqB,QACE,IAAIzkB,MAAM,qBAAqBjO,eAG/B0I,EAAS+pB,EAAY9pB,QAAQ8d,IAAIiM,GACjC3gB,EAAQ,IAAIsa,YAAU3jB,GACxB0E,EAAOpN,KACJmoB,MAAM/a,EAAOpN,GAAI+R,MAAMvJ,MAAM,MAE7BmqB,UAAS,KACT/tB,QAAU,CAACiF,KAAKC,UAAUiI,EAAMvJ,UAEhCxI,GAAM,CAAE+R,MAAAA,EAAO3O,QAAAA,SACdjC,SACF,IAAI8M,MAAM,yBAAyBjO,mBAAoBoD,OAAajC,EAAE4J,mBAGvEqC,EAAOpN,GAAI+R,O2BjCR3O,EAASwN,EAAI5Q,IACpBuH,SAAUgrB,EAASrd,KACnB0d,mBAAqBhtB,MAAMzE,KAAaA,EAAE4J,cAC1C,CAAC3H,EAASwN,EAAI5Q,QAER+R,GAAO,OACN,eAkBJ7Q,EAAWC,IACZA,EAAE0xB,SAAqB,MAAV1xB,EAAEwG,OACRpE,eAAe,OAAQ,qBAC1BuvB,QACG3xB,EAAE0xB,SAAqB,MAAV1xB,EAAEwG,QACfpE,eAAe,OAAQ,qBAC1BwvB,YAGC,cACA3wB,iBAAiB,QAASlB,GAC5B,cACGmB,oBAAoB,QAASnB,MAErC,CAAC6Q,UAEGihB,EAAcC,GAAmBhxB,EAAS,KAC1CixB,EAAeC,GAAoBlxB,EAAmB,OACnD,qB3BN0BmB,gBACVsmB,EAAWtmB,IAClBwK,c2BKHxK,GACbmE,gBACM6rB,aAAyB,IAAIC,OAAOnD,MAAM,KAC1CoD,EAAU1lB,EAAY6Y,IAAI7V,EAAI5Q,IAClC2G,QAAS2M,EAAEtL,MAAM,MACjBgC,WAAYopB,EAAMG,UAAWjgB,EAAE4V,SAASsK,OACtCF,KACcA,MAGlBV,mBAAqBhtB,MAAMzE,KAAaA,EAAE4J,cAC1C,CAAC3H,EAASwN,EAAI5Q,GAAIgzB,UAEfS,EAAczzB,YACTuD,eAAe,cAAevD,kB5B6CRoD,EAAoBgoB,EAAkBprB,WAC/D4J,MAAM,iBAAiB5J,KAAMorB,KAAYprB,WAC3CyyB,EAAcrqB,EAAOuB,SAASrB,SAAUY,EAAElJ,KAAOoD,cAEhDiE,QAAYyF,MAAM,GAAG1D,KAAsBqpB,EAAYppB,KAAKqqB,wCAAwCtI,KAAYprB,uBACzGqH,EAAIuF,aACTzL,WACA2J,KAAK,iCAAiCsgB,YAAmBprB,KAAOmB,K4BnD5DiC,EAAS,WAAI6I,QAAQ2E,EAAI5Q,GAAIA,GAAIuH,qBACrC4gB,MAAMnR,GAAQ,QAIhB2c,EAAaC,GAAkB3xB,EAAS9B,OAAO0zB,WAAa,MAC5D3J,EAAQ4J,GAAW7xB,EAAS,IAC5BkoB,EAAY4J,GAAe9xB,EAAS,IACpCmoB,EAAU4J,GAAa/xB,EAAS,IAuBhCgyB,EAAcC,GAAmBjyB,GAAS,GAE3CkyB,EAAa/N,GAAW8C,SAAStY,EAAI5Q,QACvCo0B,GAAe,EACfD,QAA4B,GAC5BR,QAA6B,qBAQ/B,OAAD,CAAMpzB,MAAO0zB,EAAe,cAAgB,MAC1CI,EAAD,CAAIr0B,GAAG,sBAAsBD,KAAK,WACjC,MAAD,CAAKQ,MAAM,cACT+B,EAAD,CAAK9B,KAAK,SAASC,MAAOgQ,EAAI,UAAW7P,QA7BvB,OACV2C,eAAe,aACV,KACL6mB,EAAW,QA2BlBlZ,EAAD,CAAS1Q,KAAK,UAAUC,MAAOgQ,EAAI,WAAY3O,UAAU,KACvDymB,EAAD,CAAU/nB,KAAK,SAASM,OAAK,EAACE,MAAOgyB,EAAc/xB,SAAUgyB,EAAiBlyB,SAAU,MACvF,MAAD,CAAKR,MAAM,eACT2yB,EAAcvsB,UAAerE,EAAD,CAAK7B,MAAOuW,EAAQpW,QAAS,IAAM6yB,EAAWzc,QAElD,IAAzBkc,EAAcroB,UAAiBvI,EAAD,CAAK7B,MAAOgQ,EAAI,mBAE/CS,EAAD,CAAS1Q,KAAK,MAAMC,MAAO2C,GACzBkvB,EAAgBjK,UAAU1hB,UACzBrE,EAAD,CAAK7B,MAAOyI,EAAGxI,OAAQwI,IAAM9F,EAASxC,QAAS,IAAMoxB,EAAgB9oB,UAGtEgI,EAAD,CAAS1Q,KAAK,sBACZ8B,EAAD,CAAK9B,KAAK,UAAUC,MAAOgQ,EAAI,SAAU7P,QA9G/B,OACH2C,eAAe,oBAClB4kB,MAAMpW,EAAMrJ,OAAOI,WAAW,QA6GjCxG,EAAD,CAAK9B,KAAK,aAAaC,MAAOgQ,EAAI,QAAS7P,QA3GjCO,MACXU,oBACQ0B,eAAe,OAAQ,mBAC1BuvB,YAyGHxwB,EAAD,CAAK9B,KAAK,cAAcC,MAAOgQ,EAAI,QAAS7P,QAvGlCO,MACXU,oBACQ0B,eAAe,OAAQ,mBAC1BwvB,YAuGLjtB,KAAUusB,EAAD,CAAYzsB,QAAcC,UAAW,IAAMosB,EAAS,UAC7DqC,GAADC,OAAU,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAO3O,QAAAA,EAAS0K,YAAAA,IAAjC,CAA+Cuc,QAAS4H,QAExD,MAAD,CAAK1xB,MAAM,gBAAgB2qB,MAAO,cAAc,GAAoB,GAAfkJ,WACnD,MAAD,CAAK7zB,MAAO,+BAA8B4zB,EAAa,SAAW,IAAMvzB,QAhCpD,OACX2C,eAAe,iBAAmB0wB,EAA2B,SAAZ,cAC1CA,KA+BdA,EAAepzB,EAAQ8E,SAAW9E,EAAQoE,QAE3C,MAAD,CAAK1E,MAAO,gCAA+BozB,EAAc,SAAW,IAAM/yB,QA3DrD,OACZ2C,eAAe,cACb4mB,EAAa,KA0DtBtpB,EAAQ0D,YAET,MAAD,CAAKhE,MAAO,4BAA2BozB,EAAc,SAAW,IAAM/yB,QAlErD,OACR2C,eAAe,UACjB2mB,EAAS,KAiEdrpB,EAAQsD,UAET,MAAD,CAAK5D,MAAO,iCAAkCK,QAxD3B,OACV2C,eAAe,gBAAkBowB,EAA0B,SAAZ,cACzCA,KACR,KACI,KACF,KAoDPA,EAAc9yB,EAAQqD,cAAgBrD,EAAQuD,SAGhD,MAAD,CAAK7D,MAAO,iBAAgB0zB,EAAe,SAAW,OACpDO,GAADD,OAAkB,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAO3O,QAAAA,EAASpD,GAAI4Q,EAAI5Q,KAAjD,CAAsD0mB,MAAOuN,EAAc5J,QAAS4H,QAEpF,MAAD,CAAK1xB,MAAO,gBAAeozB,EAAc,SAAW,OAClDc,GAADF,OAAiB,CAAChsB,KAAAA,EAAMwJ,MAAAA,EAAOjE,YAAAA,EAAaoc,OAAAA,EAAQC,WAAAA,EAAYC,SAAAA,IAAhE,CAA2E/Y,KAAM,WAAI3I,UAAU,OAAQ2hB,QAAS4H,oBC5L9F1pB,KAAEA,cAAMwpB,UACtBthB,EAAMC,EAAOC,KAAK,KAAMpI,YAClBkI,EAAI,iBACR,OAAD,OACL,MAAD,CAAKlQ,MAAM,QACT6H,EAAO+G,WAAWnF,YAAaoF,EAAE1M,WAAUiE,UAC1C+tB,GAAD,CAAUpkB,MAAOG,EAAIrB,EAAEpP,IAAK8E,KAAMsM,GAAShC,EAAE7F,WAE7CmrB,GAAD,CAAUpkB,MAAOG,EAAI,YAAa3L,KAAK,iBACtC,KAAD,QACC4vB,GAAD,CAAUpkB,MAAM,mBAAmB9P,KAAK,SAASsE,KAAK,sCACpD,IAAD,KAAG,uCAEH4vB,GAAD,CAAUpkB,MAAM,mBAAmB9P,KAAK,SAASsE,KAAK,sCACpD,IAAD,KAAG,oDAEH4vB,GAAD,CAAUpkB,MAAM,qBAAqBxL,KAAK,wCACxC,IAAD,KAAG,wDCjBkByD,KAAEA,cAAMwpB,UAC1BthB,EAAMC,EAAOC,KAAK,KAAMpI,YAClBkI,EAAI,2BAA4BA,EAAI,gBACxC,OAAD,OACL,MAAD,CAAKlQ,MAAM,QACT6H,EAAO+G,WAAWnF,WAA2B,aAAfoF,EAAE1M,WAAyBiE,UACxD+tB,GAAD,CAAUpkB,MAAOG,EAAIrB,EAAEpP,IAAK8E,KAAMsM,GAAShC,EAAE7F,WCFjD,oBACQhB,EAAMxF,GAAed,EAAiB,SASnC,sBAEFZ,EAASioB,GAAME,oBACf/iB,QAAQC,IAAI,CACjBiuB,EAAW,SACI,OAAXtzB,EAAkB,CAACszB,EAAWtzB,IAAW,OAElCA,SAEX,UAEI6B,EAAOD,GAAYhB,EAAiBqnB,GAAMG,eAMvC,cACAmL,gBAAgBjK,aAAa,aAAcznB,KAClD,CAACA,UAEGE,EAASD,GAAclB,EAAoBqnB,GAAMI,eAOjDpZ,EAAOukB,GAAY5yB,EAAiByO,EAAOnI,EAAM,eAClDwpB,EAAc,CAAC+C,EAAenrB,EAAW,CAAC,OAAQ,OAAQ,oBACtD2G,MAAQ,GAAGwkB,eAAmBnrB,EAASoF,KAAK,UAC5C+lB,sBASRC,GAADlsB,KAAY,CAACN,KAAAA,EAAM+H,MAAAA,EAAOlN,QAAAA,EAASF,MAAAA,EAAOF,SAAUuF,EAAMiI,eAhDpCrG,MAAOnH,IACxBwE,EAAQxE,UACN2xB,EAAW3xB,KAERD,YAAYC,MAChBD,YAAYC,KACNA,IA0C8DuN,YA5BtDykB,MACV/xB,SAAS+xB,MACb/xB,SAAS+xB,KACNA,SA0BRC,EAAD,CAAQh0B,SAPYE,gBAET,IAAMrB,EAAU+C,SAASuO,GAASjQ,EAAEoI,YAM7C2rB,GAADrsB,GAAMoD,KAAK,KAAQ,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACzBoD,GAADtsB,GAAeoD,KAAK,oBAAuB,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACjDqD,GAADvsB,GAAUoD,KAAK,aAAgB,CAAC1D,KAAAA,EAAMwpB,YAAAA,OACrCsD,GAADd,KAAWzrB,SAAO,GAAK,CAACP,KAAAA,EAAMnF,QAAAA,EAAS2uB,YAAAA,IAAvC,CAAqDC,gBAvBhCsD,MACZnyB,WAAWmyB,MACfnyB,WAAWmyB,KACNA,SAyBbC,IAAQC,GAAD,MAAUlvB,SAASnE"} \ No newline at end of file diff --git a/assets/zh-cn.4042c0c5.js b/assets/zh-cn.4042c0c5.js deleted file mode 100644 index 7e0f950e..00000000 --- a/assets/zh-cn.4042c0c5.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=JSON.parse('{"advancement":"进度","copy":"复制","dimension":"维度","dimension_type":"维度类型","download":"下载","fields":"字段","indentation.2_spaces":"2 空格缩进","indentation.4_spaces":"4 空格缩进","indentation.tabs":"Tab 缩进","item_modifier":"物品修饰器","language":"语言","loot_table":"战利品表","predicate":"断言","preview":"可视化","preview.depth":"深度","preview.scale":"比例","preview.width":"宽度","redo":"重做","reset":"重置","settings.fields.description":"自定义高级字段设置","settings.fields.name":"名称","settings.fields.path":"上下文","share":"分享","title.generator":"%0% 生成器","title.home":"数据包生成器","undo":"撤销","world":"世界设置","worldgen/biome":"生物群系","worldgen/configured_carver":"地形雕刻器","worldgen/configured_feature":"地物","worldgen/configured_structure_feature":"结构地物","worldgen/configured_surface_builder":"地表生成器","worldgen/noise_settings":"噪声设置","worldgen/processor_list":"处理器列表","worldgen/template_pool":"模板池"}');export default e; -//# sourceMappingURL=zh-cn.4042c0c5.js.map diff --git a/assets/zh-cn.4042c0c5.js.map b/assets/zh-cn.4042c0c5.js.map deleted file mode 100644 index 9c783f28..00000000 --- a/assets/zh-cn.4042c0c5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"zh-cn.4042c0c5.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/zh-cn.82c847ac.js b/assets/zh-cn.82c847ac.js new file mode 100644 index 00000000..3d58c460 --- /dev/null +++ b/assets/zh-cn.82c847ac.js @@ -0,0 +1,2 @@ +var e=JSON.parse('{"advancement":"进度","button.add":"添加","button.collapse":"折叠","button.expand":"展开","button.remove":"移除","copy":"复制","dimension":"维度","dimension_type":"维度类型","download":"下载","fields":"字段","github":"GitHub","home":"主页","import":"导入","indentation.2_spaces":"2 空格缩进","indentation.4_spaces":"4 空格缩进","indentation.tabs":"Tab 缩进","item_modifier":"物品修饰器","language":"语言","loot_table":"战利品表","no_presets":"无预设","not_found.description":"你所查找的页面不存在。","predicate":"谓词","presets":"预设","preview":"可视化","preview.depth":"深度","preview.scale":"比例","preview.width":"宽度","redo":"重做","reset":"重置","settings":"设置","settings.fields.description":"自定义高级字段设置","settings.fields.name":"名称","settings.fields.path":"上下文","share":"分享","source_placeholder":"在此粘贴 JSON 格式文本","theme.dark":"暗黑","theme.light":"明亮","theme.system":"系统","title.generator":"%0% 生成器","title.generator_category":"%0% 生成器","title.home":"数据包生成器","undo":"撤销","world":"世界设置","worldgen":"世界生成","worldgen/biome":"生物群系","worldgen/configured_carver":"洞穴生成","worldgen/configured_feature":"特征","worldgen/configured_structure_feature":"结构特征","worldgen/configured_surface_builder":"地表生成器","worldgen/noise_settings":"噪声设置","worldgen/processor_list":"处理器列表","worldgen/template_pool":"模板池"}');export default e; +//# sourceMappingURL=zh-cn.82c847ac.js.map diff --git a/assets/zh-cn.82c847ac.js.map b/assets/zh-cn.82c847ac.js.map new file mode 100644 index 00000000..bc025eff --- /dev/null +++ b/assets/zh-cn.82c847ac.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zh-cn.82c847ac.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/dimension/index.html b/dimension/index.html index 0d7e44e7..0b5a889e 100644 --- a/dimension/index.html +++ b/dimension/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/dimension_type/index.html b/dimension_type/index.html index 0d7e44e7..0b5a889e 100644 --- a/dimension_type/index.html +++ b/dimension_type/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/index.html b/index.html index 8d26a645..000a3f2f 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@ Data Pack Generators Minecraft 1.15, 1.16, 1.17 - + diff --git a/item_modifier/index.html b/item_modifier/index.html index 72c6d034..4c5bb91d 100644 --- a/item_modifier/index.html +++ b/item_modifier/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.17 - + diff --git a/loot_table/index.html b/loot_table/index.html index eab816c0..86aafc07 100644 --- a/loot_table/index.html +++ b/loot_table/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/predicate/index.html b/predicate/index.html index eab816c0..86aafc07 100644 --- a/predicate/index.html +++ b/predicate/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.15, 1.16, 1.17 - + diff --git a/world/index.html b/world/index.html index 0d7e44e7..0b5a889e 100644 --- a/world/index.html +++ b/world/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/biome/index.html b/worldgen/biome/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/biome/index.html +++ b/worldgen/biome/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_carver/index.html b/worldgen/configured_carver/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/configured_carver/index.html +++ b/worldgen/configured_carver/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_feature/index.html b/worldgen/configured_feature/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/configured_feature/index.html +++ b/worldgen/configured_feature/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_structure_feature/index.html b/worldgen/configured_structure_feature/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/configured_structure_feature/index.html +++ b/worldgen/configured_structure_feature/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/configured_surface_builder/index.html b/worldgen/configured_surface_builder/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/configured_surface_builder/index.html +++ b/worldgen/configured_surface_builder/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/noise_settings/index.html b/worldgen/noise_settings/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/noise_settings/index.html +++ b/worldgen/noise_settings/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/processor_list/index.html b/worldgen/processor_list/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/processor_list/index.html +++ b/worldgen/processor_list/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - + diff --git a/worldgen/template_pool/index.html b/worldgen/template_pool/index.html index 0d7e44e7..0b5a889e 100644 --- a/worldgen/template_pool/index.html +++ b/worldgen/template_pool/index.html @@ -20,7 +20,7 @@ undefined Generator Minecraft 1.16, 1.17 - +