diff --git a/404.html b/404.html index 46208b81..97de9c53 100644 --- a/404.html +++ b/404.html @@ -20,7 +20,7 @@ 404 - + diff --git a/advancement/index.html b/advancement/index.html index 15fc3e50..9b99e975 100644 --- a/advancement/index.html +++ b/advancement/index.html @@ -20,7 +20,7 @@ Advancement Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/assets/blockstate/index.html b/assets/blockstate/index.html index 43d39fe7..4aa08ef9 100644 --- a/assets/blockstate/index.html +++ b/assets/blockstate/index.html @@ -20,7 +20,7 @@ Blockstate Generator Minecraft 1.18 - + diff --git a/assets/index.d5e10217.js b/assets/index.ef17db4b.js similarity index 83% rename from assets/index.d5e10217.js rename to assets/index.ef17db4b.js index b746cc1b..4a8e2def 100644 --- a/assets/index.d5e10217.js +++ b/assets/index.ef17db4b.js @@ -1,2 +1,2 @@ -var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,s=(e,t)=>{for(var n in t||(t={}))a.call(t,n)&&i(e,n,t[n]);if(r)for(var n of r(t))o.call(t,n)&&i(e,n,t[n]);return e},l=(e,r)=>t(e,n(r));import{y as c,a as d,s as u,l as m,r as h,b as f,g as p,c as g,j as _,d as v,e as w,f as y,h as b,i as k,m as x,k as C,L as A,G as M,V as z,O as j,n as $,w as V,Z as E,o as I,z as O,T as L,E as P,C as S,p as D,A as T,q as N,t as B,u as H,v as R,x as F,B as W,D as J,F as U,N as G,R as Y}from"./vendor.eebec09d.js";var q,Z=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","latest":"1.15.2","refs":{"mcdata_master":"13355f7","mcassets":"1.15.2"}},{"id":"1.16","latest":"1.16.5","refs":{"mcdata_master":"1.16.4","mcassets":"1.16.5","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","latest":"1.17.1","refs":{"mcdata_master":"1.17.1","mcassets":"1.17.1","vanilla_datapack_data":"1.17.1-data","vanilla_datapack_summary":"1.17.1-summary"}},{"id":"1.18","refs":{"mcdata_master":"master","mcassets":"21w44a","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":"recipe","url":"recipe","path":"recipes","schema":"recipe"},{"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/placed_feature","url":"worldgen/placed-feature","category":"worldgen","schema":"placed_feature","minVersion":"1.18"},{"id":"worldgen/noise","url":"worldgen/noise","category":"worldgen","schema":"noise_parameters","minVersion":"1.18"},{"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","maxVersion":"1.17"},{"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"},{"id":"block_definition","url":"assets/blockstate","path":"blockstates","category":"assets","schema":"block_definition","minVersion":"1.18"},{"id":"model","url":"assets/model","path":"models","category":"assets","schema":"model","minVersion":"1.18"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"block_definition","path":"blockstates","asset":true},{"id":"block_entity_type","minVersion":"1.18"},{"id":"block_predicate_type","minVersion":"1.18"},{"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":"model","path":"models","asset":true},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"recipe_serializer"},{"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":"texture","path":"textures","asset":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16","maxVersion":"1.17"},{"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","maxVersion":"1.17"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/material_condition","minVersion":"1.18"},{"id":"worldgen/material_rule","minVersion":"1.18"},{"id":"worldgen/noise","minVersion":"1.18","dynamic":true},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/placed_feature","minVersion":"1.18","dynamic":true},{"id":"worldgen/placement_modifier_type","minVersion":"1.18"},{"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","maxVersion":"1.17"},{"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","maxVersion":"1.17","path":"processed/reports/biomes"},{"id":"worldgen/biome","minVersion":"1.18","path":"processed/reports/worldgen/minecraft/worldgen/biome"}]}');function K({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 X({icon:e,label:t,active:n,class:r,tooltip:a,tooltipLoc:o,onClick:i}){return d("div",{class:`btn${n?" active":""}${r?` ${r}`:""}${a?` tooltipped tip-${null!=o?o:"sw"}`:""}`,onClick:i,"aria-label":a},e&&ae[e],t&&d("span",null,t))}function Q({icon:e,label:t,large:n,doSelect:r,value:a,placeholder:o,onChange:i}){const s=void 0===i?()=>{}:e=>{const t=e.target.value;null==i||i(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&&ae[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:a,onChange:s,placeholder:o}))}function ee({size:e,draw:t,onDrag:n,onHover:r,onLeave:a},o){const i=u(null),s=u(),l=u(),d=u([0,0]),m=u(!1);c((()=>{const e=e=>{s.current=[e.offsetX,e.offsetY]},t=e=>{if(void 0===s.current){const t=e.offsetX/i.current.clientWidth,n=e.offsetY/i.current.clientHeight;return void(null==r||r(t,n))}if(!n)return;const t=e.offsetX-s.current[0],a=e.offsetY-s.current[1];0===t&&0===a||(d.current=[d.current[0]+t,d.current[1]+a],m.current||(cancelAnimationFrame(l.current),l.current=requestAnimationFrame((async()=>{m.current=!0;const e=d.current[0]/i.current.clientWidth,t=d.current[1]/i.current.clientHeight;d.current=[0,0],await(null==n?void 0:n(e,t)),m.current=!1})))),s.current=[e.offsetX,e.offsetY]},o=()=>{s.current=void 0},c=()=>{null==a||a()};return i.current.addEventListener("mousedown",e),i.current.addEventListener("mousemove",t),i.current.addEventListener("mouseleave",c),document.body.addEventListener("mouseup",o),()=>{var n,r,a;null==(n=i.current)||n.removeEventListener("mousedown",e),null==(r=i.current)||r.removeEventListener("mousemove",t),null==(a=i.current)||a.removeEventListener("mouseleave",c),document.body.removeEventListener("mouseup",o)}}),[...null!=o?o:[],i.current]);const h=u(),f=u(0);return h.current=async()=>{const n=i.current.getContext("2d"),r=e();i.current.width=r[0],i.current.height=r[1];const a=n.getImageData(0,0,r[0],r[1]),o=f.current+=1;await t(a),o===f.current&&n.putImageData(a,0,0)},{canvas:i,redraw:h.current}}function te(){const[e,t]=m(!1),n=()=>{t(!1)};return c((()=>(e&&(document.body.addEventListener("click",n),document.body.addEventListener("contextmenu",n)),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("contextmenu",n)})),[e]),[e,()=>t(!0)]}function ne(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function re({icon:e,label:t,relative:n,tooltip:r,children:a}){const[o,i]=te();return d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(X,l(s({},{icon:e,label:t,tooltip:r}),{onClick:i})),o&&d("div",{class:"btn-group"},a))}!function(e){const t="Site",n="Generator";function r(e,t,n){ga("send","event",e,t,n)}function a(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){a(4,e),r(t,"set-language",e)},e.setTheme=function(e){a(1,e),r(t,"set-theme",e)},e.setVersion=function(e){a(3,e),r(n,"set-version",e)},e.setPreview=function(e){a(5,e),r(n,"set-preview",e)},e.setGenerator=function(e){a(6,e)},e.generatorEvent=function(e,t){r(n,e,t)}}(q||(q={}));const ae={alert: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 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"})),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"})),check:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"})),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"})),chevron_up: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.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),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"})),duplicate:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z"}),d("path",{"fill-rule":"evenodd",d:"M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z"}),d("path",{d:"M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.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"})),info: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),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"})),link_external:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z"})),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"})),plus_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:"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 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),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"})),sort_asc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z"})),sort_desc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z"}),d("path",{d:"M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z"})),stack: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.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z"})),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"})),terminal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"})),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"})),trashcan: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.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),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 oe({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},ae.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")))}function ie(e,t,n){const r=e=>{const r=e.onChange&&(t=>{var r;const a=t.target.value;null==(r=e.onChange)||r.call(e,n(a))}),a=e.onEnter&&(t=>{var r;if("Enter"===t.key){const a=t.target.value;null==(r=e.onEnter)||r.call(e,n(a))}});return d("input",s(s({},e),{type:t,onChange:r,onKeyDown:a}))};return r.displayName=e,r}const se=ie("TextInput","text",(e=>e)),le=ie("NumberInput","number",(e=>Number(e))),ce=ie("RangeInput","range",(e=>Number(e)));let de;const ue={},me=function(e,t){if(!t)return e();if(void 0===de){const e=document.createElement("link").relList;de=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in ue)return;ue[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const r=document.createElement("link");return r.rel=t?"stylesheet":de,t||(r.as="script",r.crossOrigin=""),r.href=e,document.head.appendChild(r),t?new Promise(((e,t)=>{r.addEventListener("load",e),r.addEventListener("error",t)})):void 0}))).then((()=>e()))};var he=JSON.parse('{"add":"Add","add_bottom":"Add to bottom","add_top":"Add to top","advancement":"Advancement","assets":"Assets","block_definition":"Blockstate","changelog.search":"Search changes","collapse":"Collapse","collapse_all":"Hold %0% to collapse all","configure_layers":"Configure layers","copy":"Copy","copied":"Copied!","copy_context":"Copy context","dimension_type":"Dimension Type","dimension":"Dimension","disabled":"Disabled","download":"Download","duplicate":"Duplicate","enabled":"Enabled","entries_hidden":"%0% entries hidden","entries_hidden.more":"Show %0% more","entries_hidden.all":"Show all","expand":"Expand","expand_all":"Hold %0% to expand all","feature.decorated.decorators":"Decorators","feature.decorated.decorators.entry":"Decorator","follow_reference":"Follow reference","format.json":"JSON","format.yaml":"YAML","fields":"Fields","generate_new_seed":"Generate new seed","github":"GitHub","hide_output":"Hide output","hide_preview":"Hide preview","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.minified":"Minified","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","layer.biomes":"Biomes","layer.temperature":"Temperature","layer.humidity":"Humidity","layer.continentalness":"Continentalness","layer.erosion":"Erosion","layer.weirdness":"Weirdness","layer.offset":"Offset","layer.factor":"Factor","layer.jaggedness":"Jaggedness","loot_table":"Loot Table","model":"Model","more":"More","move_down":"Move down","move_up":"Move up","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","output_settings":"Output settings","predicate":"Predicate","recipe":"Recipe","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme":"Theme","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.changelog":"Technical Changelog","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","title.sounds":"Sound Explorer","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.factor":"Factor","preview.offset":"Offset","preview.peaks":"Peaks","preview.width":"Width","remove":"Remove","search":"Search","show_output":"Show output","show_preview":"Show preview","sounds.play":"Play","sounds.play_sound":"Play sound","sounds.play_all":"Play all","sounds.search":"Search sounds","sounds.download_function":"Download Mcfunction","sounds.delay":"Delay","sounds.pitch":"Pitch","sounds.volume":"Volume","sounds.copy_command":"Copy command","sounds.add_sound":"Add sound","sounds.remove_sound":"Remove sound","sounds.unknown_sound":"Unknown sound","sounds.loading_sound":"Loading sound","source_placeholder":"Paste raw content here","switch_generator":"Switch generator","terrain_settings":"Terrain settings","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/placed_feature":"Placed Feature","worldgen/noise":"Noise","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","zoom_in":"Zoom in","zoom_out":"Zoom out"}'),fe=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:he});const pe={fallback:he};function ge(e,t,...n){var r,a,o,i,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!=(i=null!=(o=null==(r=pe[e])?void 0:r[t])?o:null==(a=pe.en)?void 0:a[t])?i:pe.fallback[t])?s:t,n)}async function _e(e){const t=Z.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return me((()=>import("./de.1d005dc8.js")),void 0);case"../locales/en.json":return me((()=>Promise.resolve().then((function(){return fe}))),void 0);case"../locales/es.json":return me((()=>import("./es.d3abba45.js")),void 0);case"../locales/fr.json":return me((()=>import("./fr.f5531eea.js")),void 0);case"../locales/it.json":return me((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return me((()=>import("./ja.2d7ab812.js")),void 0);case"../locales/pl.json":return me((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return me((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return me((()=>import("./ru.3104e71e.js")),void 0);case"../locales/sk.json":return me((()=>import("./sk.69c71daa.js")),void 0);case"../locales/zh-cn.json":return me((()=>import("./zh-cn.b233fc7e.js")),void 0);case"../locales/zh-tw.json":return me((()=>import("./zh-tw.298bd51e.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),r=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return me((()=>import("./de.f9c3209c.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return me((()=>import("./en.1c2631bd.js")),void 0);case"../../node_modules/@mcschema/locales/src/es.json":return me((()=>import("./es.c83d9c73.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return me((()=>import("./fr.e316b1e2.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return me((()=>import("./it.7ff123cd.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return me((()=>import("./ja.49e40b08.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return me((()=>import("./pl.ae1f6791.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return me((()=>import("./pt.31e14993.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return me((()=>import("./ru.92df5b59.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return me((()=>import("./zh-cn.4129665a.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return me((()=>import("./zh-tw.292626d0.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);pe[e]=s(s({},n.default),r.default)}function ve(e){return"object"==typeof e&&null!==e}const we=e=>("0"+e.toString(16)).substr(-2);function ye(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,we).join("")}function be(){return BigInt(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER))}function ke(e){const t=Math.floor(4294967296*Math.random())-2147483648,n=e.get(new f.Path(["dimensions"]));e.set(new f.Path(["seed"]),t,!0),"object"==typeof n&&null!==n&&Object.keys(n).forEach((n=>{e.set(new f.Path(["dimensions",n,"generator","seed"]),t,!0),e.set(new f.Path(["dimensions",n,"generator","biome_source","seed"]),t,!0)})),e.set(new f.Path(["generator","seed"]),t,!0),e.set(new f.Path(["generator","biome_source","seed"]),t)}function xe(e){let t=0;for(let n=0;n=0&&(e=e.slice(0,t)),Ce(e)}function Me(e){const t=Ae(e).replace(/^\//,"").replace(/\/$/,"");return Z.generators.find((e=>e.url===t))}function ze(e){const t=e.indexOf("?");return t>=0?(e=e.slice(t+1),new Map(e.split("&").map((e=>{const t=e.indexOf("=");return-1===t?[e,"true"]:[decodeURIComponent(e.slice(0,t)),decodeURIComponent(e.slice(t+1))]})))):new Map}function je(e,t){const n=p(),r=ze(n);Object.entries(e).forEach((([e,t])=>{void 0===t?r.delete(e):r.set(e,t)}));const a=Array.from(r).map((([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`));g(`${t?Ce(t):Ae(n)}${0===a.length?"":`?${a.join("&")}`}`,!0)}function $e(e){const t=Math.abs(xe(e));return[t%256,(t>>8)%256,(t>>16)%256]}function Ve(e){return e*e}function Ee(e,t,n){return Math.max(e,Math.min(t,n))}function Ie(e,t,n){return n<0?e:n>1?t:Oe(n,e,t)}function Oe(e,t,n){return t+e*(n-t)}function Le(e){return e instanceof Error?e.message:`${e}`}const Pe=h();function Se(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor!==t.constructor)return!1;let n,r;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=0;rasync function(e,t){const n=await(await fetch(`${Te}/${e.id}/index.json`)).json();return(await Promise.all(n.map(((n,r)=>async function(e,t,n,r){return function(e){return e.split("\n\n").map((e=>{const t=e.indexOf("|");return{tags:e.substring(0,t).trim().split(" "),content:e.slice(t+1).trim().replaceAll("->","→").replaceAll("\n...\n","\n\n")}}))}(await(await fetch(`${Te}/${e.id}/${t.id}.md`)).text()).map((a=>s({version:t,group:e,order:1e3*n+r},a)))}(e,He(n),t,r))))).flat()}(He(e),t))))).flat().map((e=>l(s({},e),{tags:[e.group.id,...e.tags]})))}return Ne}function He(e){return"string"==typeof e?{id:e,article:e.match(/\d\dw\d\d[a-z]/)?"minecraft-snapshot-"+e:e.match(/\d+\.\d+(\.\d+)?-pre[0-9]+/)?"minecraft-"+e.replaceAll(".","-").replaceAll("pre","pre-release-"):null}:ve(e)?e:{id:"unknown",article:null}}const Re=["1.15","1.16","1.17","1.18"],Fe={},We={},Je={1.15:_,1.16:v,1.17:w,1.18:y};let Ue,Ge;async function Ye(e){return Fe[e]||(Fe[e]=(async()=>{try{const t=Je[e].getCollections(),n={};await async function(e,t,n){const r=Z.versions.find((t=>t.id===e));if(!r)return void console.error(`[fetchData] Unknown version ${r} in ${JSON.stringify(Z.versions)}`);console.debug(`[fetchData] ${JSON.stringify(r)}`),r.dynamic&&await Promise.all(Qe.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}/${r.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 r of await t.keys())e(r.url)&&n.push(t.delete(r));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${Le(t)}`)}}((t=>t.startsWith(`${e.url}/${r.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([et(r,t),tt(r,n),nt(r,t),rt(r,t)])}(e,t,n);const r=Je[e].getSchemas(t);return Fe[e]={collections:t,schemas:r,blockStates:n},Fe[e]}catch(t){throw new Error(`Cannot get version "${e}": ${Le(t)}`)}})()),Fe[e]}function qe(e,t,n){const r=Z.versions.findIndex((t=>t.id===e)),a=t?Z.versions.findIndex((e=>e.id===t)):0,o=n?Z.versions.findIndex((e=>e.id===n)):Z.versions.length-1;return a<=r&&r<=o}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const Ze="https://raw.githubusercontent.com/Arcensoth/mcdata",Ke="https://raw.githubusercontent.com/InventivetalentDev/minecraft-assets",Xe="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",Qe=[{id:"mcdata_master",hash:"fb6debdfdffac93686074cc523734f4aed626045",url:Ze},{id:"vanilla_datapack_summary",hash:"d2b06eedd26642f6d93c369b263aca491ec40459",url:Xe}];async function et(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=Z.registries.filter((e=>!e.dynamic&&!e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));if(qe(e.id,void 0,"1.15")){const a=`${Ze}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await it(a,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var r;t.register(n.id,null!=(r=e[n.id])?r:[])}))}catch(r){console.warn("Error occurred while fetching registries:",Le(r))}}else await Promise.all(n.map((async n=>{try{const r=n.path?`${Ze}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${Ze}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await it(r,(e=>e.values)))}catch(r){console.warn(`Error occurred while fetching registry ${n.id}:`,Le(r))}})))}async function tt(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),qe(e.id,void 0,"1.16")){const r=qe(e.id,void 0,"1.15")?`${Ze}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${Ze}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await it(r,(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:",Le(n))}}else{const r=`${Ze}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await it(r);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",Le(n))}}}async function nt(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=Z.registries.filter((e=>e.dynamic&&!e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));if(qe(e.id,"1.16")){const a=`${Xe}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await it(a);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(r){console.warn("Error occurred while fetching dynamic registries:",Le(r))}}qe(e.id,"1.18")&&(t.register("worldgen/noise",st),t.register("worldgen/placed_feature",lt))}async function rt(e,t){console.debug(`[fetchAssetsRegistries] ${e.id}`);const n=Z.registries.filter((e=>e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));await Promise.all(n.map((async n=>{var r;try{const a=async t=>{const n=`${Ke}/${e.refs.mcassets}/assets/minecraft/${t}/_list.json`,r=await it(n);if(0===r.directories.length)return r.files;const o=await Promise.all(r.directories.map((async e=>(await a(`${t}/${e}`)).map((t=>`${e}/${t}`)))));return[...r.files,...o.flat()]},o=(await a(null!=(r=n.path)?r:n.id)).filter((e=>e.endsWith(".json")||e.endsWith(".png"))).map((e=>`minecraft:${e.replace(/\.(json|png)$/,"")}`));t.register(n.id,o)}catch(a){console.warn(`Error occurred while fetching assets registry ${n.id}:`,Le(a))}})))}async function at(e,t,n){console.debug(`[fetchPreset] ${t} ${n}`);const r=Z.versions.find((t=>t.id===e));try{const a=["blockstates","models"].includes(t)?`${Ke}/${r.refs.mcassets}/assets/minecraft/${t}/${n}.json`:`${Xe}/${r.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`,o=await fetch(a);if("worldgen/noise_settings"===t&&"1.18"===e){let e=await o.text();e=e.replaceAll('"max_threshold": Infinity','"max_threshold": 100');const t=JSON.parse(e);return"overworld"!==n&&"large_biomes"!==n&&(t.noise.terrain_shaper={offset:0,factor:0,jaggedness:0}),t}return await o.json()}catch(a){throw new Error(`Error occurred while fetching ${t} preset ${n}: ${Le(a)}`)}}function ot(e){return`https://misode-cors-anywhere.herokuapp.com/https://resources.download.minecraft.net/${e.slice(0,2)}/${e}`}async function it(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const r=await n.match(e);if(r&&r.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await r.json();console.debug(`[getData] fetching data ${e}`);const a=await fetch(e),o=t(await a.json());return await n.put(e,new Response(JSON.stringify(o))),o}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${Le(n)}`),console.debug(`[getData] fetching data ${e}`);const r=await fetch(e);return t(await r.json())}}const st=["minecraft:aquifer_barrier","minecraft:aquifer_fluid_level_floodedness","minecraft:aquifer_fluid_level_spread","minecraft:aquifer_lava","minecraft:badlands_pillar","minecraft:badlands_pillar_roof","minecraft:badlands_surface","minecraft:calcite","minecraft:cave_cheese","minecraft:cave_entrance","minecraft:cave_layer","minecraft:clay_bands_offset","minecraft:continentalness","minecraft:continentalness_large","minecraft:erosion","minecraft:erosion_large","minecraft:gravel","minecraft:gravel_layer","minecraft:ice","minecraft:iceberg_pillar","minecraft:iceberg_pillar_roof","minecraft:iceberg_surface","minecraft:jagged","minecraft:nether_state_selector","minecraft:nether_wart","minecraft:netherrack","minecraft:noodle","minecraft:noodle_ridge_a","minecraft:noodle_ridge_b","minecraft:noodle_thickness","minecraft:offset","minecraft:ore_gap","minecraft:ore_vein_a","minecraft:ore_vein_b","minecraft:ore_veininess","minecraft:packed_ice","minecraft:patch","minecraft:pillar","minecraft:pillar_rareness","minecraft:pillar_thickness","minecraft:powder_snow","minecraft:ridge","minecraft:soul_sand_layer","minecraft:spaghetti_2d","minecraft:spaghetti_2d_elevation","minecraft:spaghetti_2d_modulator","minecraft:spaghetti_2d_thickness","minecraft:spaghetti_3d_1","minecraft:spaghetti_3d_2","minecraft:spaghetti_3d_rarity","minecraft:spaghetti_3d_thickness","minecraft:spaghetti_roughness","minecraft:spaghetti_roughness_modulator","minecraft:surface","minecraft:surface_secondary","minecraft:surface_swamp","minecraft:temperature","minecraft:temperature_large","minecraft:vegetation","minecraft:vegetation_large"],lt=["minecraft:acacia_checked","minecraft:amethyst_geode","minecraft:bamboo","minecraft:bamboo_light","minecraft:bamboo_vegetation","minecraft:basalt_blobs","minecraft:basalt_pillar","minecraft:birch_bees_0002","minecraft:birch_bees_002","minecraft:birch_checked","minecraft:birch_tall","minecraft:blackstone_blobs","minecraft:blue_ice","minecraft:brown_mushroom_nether","minecraft:brown_mushroom_normal","minecraft:brown_mushroom_old_growth","minecraft:brown_mushroom_swamp","minecraft:brown_mushroom_taiga","minecraft:cave_vines","minecraft:chorus_plant","minecraft:classic_vines_cave_feature","minecraft:crimson_forest_vegetation","minecraft:crimson_fungi","minecraft:dark_forest_vegetation","minecraft:dark_oak_checked","minecraft:delta","minecraft:desert_well","minecraft:disk_clay","minecraft:disk_gravel","minecraft:disk_sand","minecraft:dripstone_cluster","minecraft:end_gateway_return","minecraft:end_island_decorated","minecraft:end_spike","minecraft:fancy_oak_bees","minecraft:fancy_oak_bees_0002","minecraft:fancy_oak_bees_002","minecraft:fancy_oak_checked","minecraft:flower_default","minecraft:flower_flower_forest","minecraft:flower_forest_flowers","minecraft:flower_meadow","minecraft:flower_plain","minecraft:flower_swamp","minecraft:flower_warm","minecraft:forest_flowers","minecraft:forest_rock","minecraft:fossil_lower","minecraft:fossil_upper","minecraft:freeze_top_layer","minecraft:glow_lichen","minecraft:glowstone","minecraft:glowstone_extra","minecraft:grass_bonemeal","minecraft:ice_patch","minecraft:ice_spike","minecraft:iceberg_blue","minecraft:iceberg_packed","minecraft:jungle_bush","minecraft:jungle_tree","minecraft:kelp_cold","minecraft:kelp_warm","minecraft:lake_lava_surface","minecraft:lake_lava_underground","minecraft:large_basalt_columns","minecraft:large_dripstone","minecraft:lush_caves_ceiling_vegetation","minecraft:lush_caves_clay","minecraft:lush_caves_vegetation","minecraft:mega_jungle_tree_checked","minecraft:mega_pine_checked","minecraft:mega_spruce_checked","minecraft:monster_room","minecraft:monster_room_deep","minecraft:mushroom_island_vegetation","minecraft:nether_sprouts","minecraft:oak_bees_0002","minecraft:oak_bees_002","minecraft:oak_checked","minecraft:ore_ancient_debris_large","minecraft:ore_andesite_lower","minecraft:ore_andesite_upper","minecraft:ore_blackstone","minecraft:ore_clay","minecraft:ore_coal_lower","minecraft:ore_coal_upper","minecraft:ore_copper","minecraft:ore_copper_large","minecraft:ore_debris_small","minecraft:ore_diamond","minecraft:ore_diamond_buried","minecraft:ore_diamond_large","minecraft:ore_diorite_lower","minecraft:ore_diorite_upper","minecraft:ore_dirt","minecraft:ore_emerald","minecraft:ore_gold","minecraft:ore_gold_deltas","minecraft:ore_gold_extra","minecraft:ore_gold_lower","minecraft:ore_gold_nether","minecraft:ore_granite_lower","minecraft:ore_granite_upper","minecraft:ore_gravel","minecraft:ore_gravel_nether","minecraft:ore_infested","minecraft:ore_iron_middle","minecraft:ore_iron_small","minecraft:ore_iron_upper","minecraft:ore_lapis","minecraft:ore_lapis_buried","minecraft:ore_magma","minecraft:ore_quartz_deltas","minecraft:ore_quartz_nether","minecraft:ore_redstone","minecraft:ore_redstone_lower","minecraft:ore_soul_sand","minecraft:ore_tuff","minecraft:patch_berry_common","minecraft:patch_berry_rare","minecraft:patch_cactus_decorated","minecraft:patch_cactus_desert","minecraft:patch_crimson_roots","minecraft:patch_dead_bush","minecraft:patch_dead_bush_2","minecraft:patch_dead_bush_badlands","minecraft:patch_fire","minecraft:patch_grass_badlands","minecraft:patch_grass_forest","minecraft:patch_grass_jungle","minecraft:patch_grass_normal","minecraft:patch_grass_plain","minecraft:patch_grass_savanna","minecraft:patch_grass_taiga","minecraft:patch_grass_taiga_2","minecraft:patch_large_fern","minecraft:patch_melon","minecraft:patch_pumpkin","minecraft:patch_soul_fire","minecraft:patch_sugar_cane","minecraft:patch_sugar_cane_badlands","minecraft:patch_sugar_cane_desert","minecraft:patch_sugar_cane_swamp","minecraft:patch_sunflower","minecraft:patch_tall_grass","minecraft:patch_tall_grass_2","minecraft:patch_waterlily","minecraft:pine_checked","minecraft:pine_on_snow","minecraft:pointed_dripstone","minecraft:red_mushroom_nether","minecraft:red_mushroom_normal","minecraft:red_mushroom_old_growth","minecraft:red_mushroom_swamp","minecraft:red_mushroom_taiga","minecraft:rooted_azalea_tree","minecraft:sea_pickle","minecraft:seagrass_cold","minecraft:seagrass_deep","minecraft:seagrass_deep_cold","minecraft:seagrass_deep_warm","minecraft:seagrass_normal","minecraft:seagrass_river","minecraft:seagrass_simple","minecraft:seagrass_swamp","minecraft:seagrass_warm","minecraft:small_basalt_columns","minecraft:spore_blossom","minecraft:spring_closed","minecraft:spring_closed_double","minecraft:spring_delta","minecraft:spring_lava","minecraft:spring_lava_frozen","minecraft:spring_open","minecraft:spring_water","minecraft:spruce_checked","minecraft:spruce_on_snow","minecraft:super_birch_bees","minecraft:super_birch_bees_0002","minecraft:trees_badlands","minecraft:trees_birch","minecraft:trees_birch_and_oak","minecraft:trees_flower_forest","minecraft:trees_grove","minecraft:trees_jungle","minecraft:trees_meadow","minecraft:trees_old_growth_pine_taiga","minecraft:trees_old_growth_spruce_taiga","minecraft:trees_plains","minecraft:trees_savanna","minecraft:trees_snowy","minecraft:trees_sparse_jungle","minecraft:trees_swamp","minecraft:trees_taiga","minecraft:trees_water","minecraft:trees_windswept_forest","minecraft:trees_windswept_hills","minecraft:trees_windswept_savanna","minecraft:twisting_vines","minecraft:underwater_magma","minecraft:vines","minecraft:void_start_platform","minecraft:warm_ocean_vegetation","minecraft:warped_forest_vegetation","minecraft:warped_fungi","minecraft:weeping_vines"];let ct=null;const dt={},ut={};async function mt(){return ct||(ct=async function(){try{const e=await fetch("https://launchermeta.mojang.com/mc/game/version_manifest.json");return await e.json()}catch(e){throw new Error(`Error occurred while fetching version manifest: ${Le(e)}`)}}()),ct}async function ht(e){return dt[e]||(dt[e]=(async()=>{const t=await mt();return await async function(e,t){var n;const r=Z.versions.find((t=>t.id===e)),a=null!=(n=null==r?void 0:r.latest)?n:t.latest.snapshot;try{const e=await it(t.versions.find((e=>e.id===a)).url);return(await it(e.assetIndex.url)).objects}catch(o){throw new Error(`Error occurred while fetching assets for ${r}: ${Le(o)}`)}}(e,t)})()),dt[e]}async function ft(e){return ut[e]||(ut[e]=(async()=>{const t=await ht(e);return await async function(e,t){try{const e=t["minecraft/sounds.json"].hash;return await it(ot(e))}catch(n){throw new Error(`Error occurred while fetching sounds for ${e}: ${Le(n)}`)}}(e,t)})()),ut[e]}let pt=!1;const gt={temperature:[-1,1],humidity:[-1,1],continentalness:[-1.1,1],erosion:[-1,1],weirdness:[-1,1],offset:[-1,1],factor:[0,12],jaggedness:[0,1]};let _t,vt;async function wt(e,t){const n=[e,t.octaves,t.shaper.toJson(),`${t.seed}`,t.version];return Se(n,_t)||(_t=Pe(n),vt=await async function(e,t){var n,r,a,o,i;switch(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,"")){case"fixed":return new j(e.biome);case"checkerboard":const n=(null!=(r=e.scale)?r:2)+2,l=null!=(o=null==(a=e.biomes)?void 0:a.length)?o:0;return{getBiome(t,r,a){var o;const i=(((t>>n)+(a>>n))%l+l)%l;return null==(o=e.biomes)?void 0:o[i].node}};case"multi_noise":switch(null==(i=e.preset)?void 0:i.replace(/^minecraft:/,"")){case"nether":e="1.18"===t.version?xt:kt;break;case"overworld":e="1.18"===t.version?await async function(){return(await at("1.18","dimension","overworld")).generator.biome_source}():e}if(e=f.DataModel.unwrapLists(e),"1.18"===t.version){await async function(){pt||(await $(V),pt=!0,console.debug(`Loaded deepslate-rs from "${V}"`))}();const n=new De,r=e=>"number"==typeof e?[e,e]:e,[a,o,i,l,c,d,u,m,h,f,p,g,_,v]=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];for(const t of e.biomes){const{temperature:e,humidity:s,continentalness:w,erosion:y,weirdness:b,depth:k,offset:x}=t.parameters;a.push(r(e)[0]),o.push(r(e)[1]),i.push(r(s)[0]),l.push(r(s)[1]),c.push(r(w)[0]),d.push(r(w)[1]),u.push(r(y)[0]),m.push(r(y)[1]),h.push(r(b)[0]),f.push(r(b)[1]),p.push(r(k)[0]),g.push(r(k)[1]),_.push(x),v.push(n.getOrPut(t.biome,Math.floor(2147483647*Math.random())))}const w=b(new Float64Array(a),new Float64Array(o),new Float64Array(i),new Float64Array(l),new Float64Array(c),new Float64Array(d),new Float64Array(u),new Float64Array(m),new Float64Array(h),new Float64Array(f),new Float64Array(p),new Float64Array(g),new Float64Array(_),new Int32Array(v)),y=k(t.seed,t.octaves.temperature.firstOctave,new Float64Array(t.octaves.temperature.amplitudes),t.octaves.humidity.firstOctave,new Float64Array(t.octaves.humidity.amplitudes),t.octaves.continentalness.firstOctave,new Float64Array(t.octaves.continentalness.amplitudes),t.octaves.erosion.firstOctave,new Float64Array(t.octaves.erosion.amplitudes),t.octaves.weirdness.firstOctave,new Float64Array(t.octaves.weirdness.amplitudes),t.octaves.shift.firstOctave,new Float64Array(t.octaves.shift.amplitudes));return{getBiome(e,t,r){var a;const o=x(w,y,e,e+1,1,t,t+1,1,r,r+1,1);return null!=(a=n.getA(o[0]))?a:"unknown"},getBiomes:(e,t,r,a,o,i,s,l,c)=>[...x(w,y,e,t,r,a,o,i,s,l,c)].map((e=>{var t;return null!=(t=n.getA(e))?t:"unknown"})),getClimate(e,n,r,a,o,i,l,c,d,u){const m=C(y,n,r,a,o,i,l,c,d,u),h=[];for(let f=0;f{var a;const o=e[`${n}_noise`];return o.firstOctave=Ee(null!=(a=o.firstOctave)?a:-7,-100,-1),new M(new z(t.seed+BigInt(r)),o)}));return Array.isArray(e.biomes)&&0!==e.biomes.length?{getBiome(t,r,a){const o=n.map((e=>e.sample(t,a,0)));let i=1/0,s="";for(const{biome:n,parameters:l}of e.biomes){const e=Ve(l.altitude-o[0])+Ve(l.temperature-o[1])+Ve(l.humidity-o[2])+Ve(l.weirdness-o[3])+Ve(l.offset);er.nextFloat(),nextInt:e=>r.nextInt(e),sampleInt(e){return $t(e,this)}};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],r=s{It(t,null==e?void 0:e.decorator,n).forEach((t=>Et(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Et(t,n.nextFloat()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var r,a;for(const o of null!=(r=null==e?void 0:e.features)?r:[])if(n.nextFloat()<(null!=(a=null==o?void 0:o.chance)?a:0))return void Et(t,o.feature,n);Et(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var r,a,o;Et(t,null==(o=null==e?void 0:e.features)?void 0:o[n.nextInt(null!=(a=null==(r=null==e?void 0:e.features)?void 0:r.length)?a:0)],n)}},Lt={chance:(e,t,n)=>{var r;return n.nextFloat()<1/(null!=(r=null==e?void 0:e.chance)?r:1)?[t]:[]},count:(e,t,n)=>{var r;return new Array(n.sampleInt(null!=(r=null==e?void 0:e.count)?r:1)).fill(t)},count_extra:(e,t,n)=>{var r,a;let o=null!=(r=null==e?void 0:e.count)?r:1;return n.nextFloat(){var r;return new Array(n.sampleInt(null!=(r=null==e?void 0:e.count)?r:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)]))},count_noise:(e,t,n)=>{const r=n.biomeInfoNoise.sample(t[0]/200,0,t[2]/200){var r;const a=Math.max(1,e.noise_factor),o=n.biomeInfoNoise.sample(t[0]/a,0,t[2]/a),i=Math.max(0,Math.ceil((o+(null!=(r=e.noise_offset)?r:0))*e.noise_to_count_ratio));return new Array(i).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,r)=>{const a=4*Math.floor(r/4)+1+n.nextInt(3)+t[0];return[a,Math.max(n.seaLevel,Ct[Ee(0,63,a)]),4*Math.floor(r%4)+1+n.nextInt(3)+t[2]]})),decorated:(e,t,n)=>It(t,null==e?void 0:e.outer,n).flatMap((t=>It(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var r,a,o,i;return jt(t,n.nextInt(null!=(r=null==e?void 0:e.spread)?r:0)+n.nextInt(null!=(a=null==e?void 0:e.spread)?a:0)-(null!=(o=e.spread)?o:0)+(null!=(i=null==e?void 0:e.baseline)?i:0))},emerald_ore:(e,t,n)=>{const r=3+n.nextInt(6);return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),4+n.nextInt(28),t[2]+n.nextInt(16)]))},fire:(e,t,n)=>{const r=1+n.nextInt(n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},glowstone:(e,t,n)=>{const r=n.nextInt(1+n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},heightmap:(e,t,n)=>jt(t,Math.max(n.seaLevel,Ct[Ee(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>{const r=Math.max(n.seaLevel,Ct[Ee(0,63,t[0])]);return jt(t,n.nextInt(2*r))},heightmap_world_surface:(e,t,n)=>jt(t,Math.max(n.seaLevel,Ct[Ee(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+n.nextInt(8),t[1],t[2]+4+n.nextInt(8)]],lava_lake:(e,t,n)=>{var r,a;if(0===n.nextInt((null!=(r=e.chance)?r:1)/10)){const r=n.nextInt(n.nextInt(248)+8);if(r[t],range:(e,t,n)=>{var r,a,o;return jt(t,n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0))},range_biased:(e,t,n)=>{var r,a,o;return jt(t,n.nextInt(n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0)))},range_very_biased:(e,t,n)=>{var r,a,o,i;return jt(t,n.nextInt(n.nextInt(n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0))+(null!=(i=null==e?void 0:e.bottom_offset)?i:0)))},spread_32_above:(e,t,n)=>jt(t,n.nextInt(t[1]+32)),top_solid_heightmap:(e,t)=>jt(t,Ct[Ee(0,63,t[0])]),magma:(e,t,n)=>jt(t,n.nextInt(t[1]+32)),square:(e,t,n)=>[[t[0]+n.nextInt(16),t[1],t[2]+n.nextInt(16)]],surface_relative_threshold:(e,t)=>{var n,r;const a=Ct[Ee(0,63,t[0])],o=a+(null!=(n=null==e?void 0:e.min_inclusive)?n:-1/0),i=a+(null!=(r=null==e?void 0:e.max_inclusive)?r:1/0);return t[1]i?[t]:[]},water_lake:(e,t,n)=>{var r;return 0===n.nextInt(null!=(r=e.chance)?r:1)?[[t[0]+n.nextInt(16),n.nextInt(256),t[2]+n.nextInt(16)]]:[]}};class Pt{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0;const t=new z(e);this.minLimitPerlinNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.maxLimitPerlinNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.mainPerlinNoise=new E(t,-7,[1,1,1,1,1,1,1,1]),this.depthNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])}reset(e,t,n,r,a){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(a).fill(null),this.xOffset=r}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),r=Math.floor(e%this.chunkWidth)/this.chunkWidth,a=this.fillNoiseColumn(n),o=this.fillNoiseColumn(n+1);for(let m=this.chunkCountY-1;m>=0;m-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[m*this.chunkHeight+e]=(i=n,s=r,l=a[m],c=a[m+1],d=o[m],u=o[m+1],Oe(s,Oe(i,l,c),Oe(i,d,u)))}var i,s,l,c,d,u;return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),r=684.412*this.settings.sampling.xz_scale,a=684.412*this.settings.sampling.y_scale,o=r/this.settings.sampling.xz_factor,i=a/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,r,a,o,i);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=Ie(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=Ie(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.sample(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,r,a,o,i){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const m=E.wrap(e*r*d),h=E.wrap(t*a*d),f=E.wrap(n*r*d),p=a*d,g=this.minLimitPerlinNoise.getOctaveNoise(u);g&&(s+=g.sample(m,h,f,p,t*p)/d);const _=this.maxLimitPerlinNoise.getOctaveNoise(u);if(_&&(l+=_.sample(m,h,f,p,t*p)/d),u<8){const r=this.mainPerlinNoise.getOctaveNoise(u);r&&(c+=r.sample(E.wrap(e*o*d),E.wrap(t*i*d),E.wrap(n*o*d),i*d,t*i*d)/d)}d/=2}return Ie(s/512,l/512,(c/10+1)/2)}}const St={"minecraft:air":[150,160,170],"minecraft:water":[20,80,170],"minecraft:lava":[200,100,0],"minecraft:stone":[50,50,50],"minecraft:netherrack":[100,40,40],"minecraft:end_stone":[200,200,140]};let Dt,Tt,Nt=[];function Bt(e,t,n){var r,a,o;if(qe(n.version,"1.18")){const{settings:a,generator:o}=function(e,t){const n=I.fromJson(f.DataModel.unwrapLists(e));n.octaves=Ut(n);const r=[e,`${t.seed}`];if(!Se(r,Dt)){Dt=Pe(r),Nt=[];const e=new j("unknown");Tt=new O(t.seed,e,n)}return{settings:n,generator:Tt}}(e,n),i=new Rt(-n.offset,n.width,a.noise.minY,a.noise.height);i.fill(o);const s=t.data;for(let e=0;e0?0:e[t+1]>0?150:255}class Rt{constructor(e,t,n,r){this.minX=e,this.filled=[],this.chunks=[...Array(Math.ceil(t/16)+1)].map(((t,a)=>{const o=(e>>4)+a,i=Nt.find((e=>e.pos[0]===o));return i?(this.filled[a]=!0,i):new L(n,r,P.create(o,0))}))}fill(e){this.chunks.forEach(((t,n)=>{this.filled[n]||(e.fill(t),this.filled[n]=!0,Nt.push(t))}))}getBlockState(e){const t=(e[0]>>4)-(this.minX>>4);return this.chunks[t].getBlockState(e)}}const Ft=["biomes","temperature","humidity","continentalness","erosion","weirdness","offset","factor","jaggedness"],Wt=A.overworld(),Jt=({model:e,data:t,shown:n,lang:r,version:a})=>{var o;const[i,s]=m(2),[l,h]=m(void 0),[p,g]=m(new Set(["biomes"])),_=u([0,0]),v=u(1),w=u(void 0),y=BigInt(e.get(new f.Path(["generator","seed"]))),b=Ut(e.get(new f.Path(["generator","settings"]))),k=function(e){var t;if("string"==typeof e)switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return Wt;default:return A.fromJson({offset:0,factor:0,jaggedness:0})}return A.fromJson(f.DataModel.unwrapLists(null==(t=null==e?void 0:e.noise)?void 0:t.terrain_shaper))}(e.get(new f.Path(["generator","settings"]))),x=n?function(e,t,n){return JSON.stringify([e,t,n.toJson()])}(t,b,k):"",C=null==(o=t.type)?void 0:o.replace(/^minecraft:/,""),{canvas:M,redraw:z}=ee({size:()=>[200/v.current,200/v.current],async draw(e){const n={octaves:b,shaper:k,biomeColors:{},layers:p,offset:_.current,scale:i,seed:y,res:v.current,version:a};await async function(e,t,n){var r,a,o;const{biomeSource:i}=await wt(e,n),s=t.data,l=-Math.round(n.offset[0])-100+n.res/2,c=-Math.round(n.offset[1])-100+n.res/2,d=4*t.width/n.res,u=4/n.res,m=[l*n.scale,(200+l)*n.scale,n.res*n.scale],h=[c*n.scale,(200+c)*n.scale,n.res*n.scale],f=n.layers.has("biomes")?null==(r=i.getBiomes)?void 0:r.call(i,...m,64,65,1,...h):void 0,p=[...n.layers].filter((e=>"biomes"!==e)),g=0===p.length||null==(a=i.getClimate)?void 0:a.call(i,new Set(p),...m,64,65,1,...h);for(let _=0;_<200;_+=n.res)for(let e=0;e<200;e+=n.res){const t=e*d+_*u,r=_/n.res*200/n.res+e/n.res,a=(_+l)*n.scale,m=(e+c)*n.scale;let h=[50,50,50];if(n.layers.has("biomes"))h=yt(null!=(o=null==f?void 0:f[r])?o:i.getBiome(a,64,m),n.biomeColors);else if(g&&p[0]){const e=g[r][p[0]],[t,n]=gt[p[0]],a=(e-t)/(n-t)*256;h=[a,a,a]}s[t]=h[0],s[t+1]=h[1],s[t+2]=h[2],s[t+3]=255}}(t,e,n),4===v.current&&(clearTimeout(w.current),w.current=setTimeout((()=>{v.current=1,z()}),150))},async onDrag(e,t){_.current[0]=_.current[0]+200*e,_.current[1]=_.current[1]+200*t,clearTimeout(w.current),v.current="multi_noise"===C?4:1,z()},async onHover(e,n){const r={octaves:b,shaper:k,biomeColors:{},layers:p,offset:_.current,scale:i,seed:y,res:1,version:a},o=await async function(e,t,n,r){const{biomeSource:a}=await wt(e,r),[o,i]=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],r);return a.getBiome(o,64,i)}(t,Math.floor(200*e),Math.floor(200*n),r);h(o)},onLeave(){h(void 0)}},[x,i,y,p]);c((()=>{n&&(v.current="multi_noise"===C?4:1,z())}),[x,i,y,p,n]);const j=e=>{_.current[0]=_.current[0]*i/e,_.current[1]=_.current[1]*i/e,s(e)};return d(D,null,d("div",{class:"controls"},l&&d(X,{label:l,class:"no-pointer"}),"multi_noise"===C&&d(re,{icon:"stack",tooltip:ge(r,"configure_layers")},Ft.map((e=>{const t=p.has(e);return d(X,{label:ge(r,`layer.${e}`),active:t,tooltip:ge(r,t?"enabled":"disabled"),onClick:t=>{g(new Set([e])),t.stopPropagation()}})}))),("multi_noise"===C||"checkerboard"===C)&&d(D,null,d(X,{icon:"dash",tooltip:ge(r,"zoom_out"),onClick:()=>j(1.5*i)}),d(X,{icon:"plus",tooltip:ge(r,"zoom_in"),onClick:()=>j(i/1.5)})),"multi_noise"===C&&d(X,{icon:"sync",tooltip:ge(r,"generate_new_seed"),onClick:()=>ke(e)})),d("canvas",{ref:M,width:"200",height:"200"}))};function Ut(e){if("string"!=typeof e){const t=I.fromJson(f.DataModel.unwrapLists(e));e=0===t.noise.densityFactor&&-.030078125===t.noise.densityOffset?"minecraft:nether":"minecraft:overworld"}switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return{temperature:{firstOctave:-9,amplitudes:[1.5,0,1,0,0,0]},humidity:{firstOctave:-7,amplitudes:[1,1,0,0,0,0]},continentalness:{firstOctave:-9,amplitudes:[1,1,2,2,2,1,1,1,1]},erosion:{firstOctave:-9,amplitudes:[1,1,0,1,1]},weirdness:{firstOctave:-7,amplitudes:[1,2,1,0,0,0]},shift:{firstOctave:-3,amplitudes:[1,1,1,0]}};case"end":case"floating_islands":return{temperature:{firstOctave:0,amplitudes:[0]},humidity:{firstOctave:0,amplitudes:[0]},continentalness:{firstOctave:0,amplitudes:[0]},erosion:{firstOctave:0,amplitudes:[0]},weirdness:{firstOctave:0,amplitudes:[0]},shift:{firstOctave:0,amplitudes:[0]}};default:return{temperature:{firstOctave:-7,amplitudes:[1,1]},humidity:{firstOctave:-7,amplitudes:[1,1]},continentalness:{firstOctave:-7,amplitudes:[1,1]},erosion:{firstOctave:-7,amplitudes:[1,1]},weirdness:{firstOctave:-7,amplitudes:[1,1]},shift:{firstOctave:0,amplitudes:[0]}}}}const Gt=({data:e,version:t,shown:n,lang:r})=>{const[a,o]=m(4),[i,s]=m(be()),{canvas:l,redraw:u}=ee({size:()=>[16*a,16*a],async draw(n){Mt(e,n,{seed:i,version:t,size:[16*a,128,16*a]})}}),h=JSON.stringify(e);return c((()=>{n&&u()}),[h,a,i,n]),d(D,null,d("div",{class:"controls"},d(X,{icon:"dash",tooltip:ge(r,"zoom_out"),onClick:()=>o(Math.min(16,a+1))}),d(X,{icon:"plus",tooltip:ge(r,"zoom_in"),onClick:()=>o(Math.max(1,a-1))}),d(X,{icon:"sync",tooltip:ge(r,"generate_new_seed"),onClick:()=>s(be())})),d("canvas",{ref:l,width:"64",height:"64"}))},Yt=({lang:e,data:t,shown:n,version:r})=>{const[a,o]=m(be()),[i,s]=m(2),l=u([0,0]),h=JSON.stringify([t]),{canvas:p,redraw:g}=ee({size:()=>[256,256],async draw(e){const n={offset:l.current,scale:i,seed:a,version:r};!function(e,t,n){const r=new z(n.seed),a=S.fromJson(f.DataModel.unwrapLists(e)),o=new M(r,a),i=-n.offset[0]-100,s=-n.offset[1]-100,l=t.data;for(let c=0;c<256;c+=1)for(let e=0;e<256;e+=1){const t=4*c+4*e*256,r=(c+i)*n.scale,a=(e+s)*n.scale,d=128*(o.sample(r,a,0)+1);l[t]=d,l[t+1]=d,l[t+2]=d,l[t+3]=255}}(t,e,n)},async onDrag(e,t){l.current[0]=l.current[0]+256*e,l.current[1]=l.current[1]+256*t,g()}},[h,i,a]);c((()=>{n&&g()}),[h,i,a,n]);const _=e=>{l.current[0]=l.current[0]*i/e,l.current[1]=l.current[1]*i/e,s(e)};return d(D,null,d("div",{class:"controls"},d(X,{icon:"dash",tooltip:ge(e,"zoom_out"),onClick:()=>_(1.5*i)}),d(X,{icon:"plus",tooltip:ge(e,"zoom_in"),onClick:()=>_(i/1.5)}),d(X,{icon:"sync",tooltip:ge(e,"generate_new_seed"),onClick:()=>o(be())})),d("canvas",{ref:p,width:"256",height:"256"}))},qt=({lang:e,data:t,shown:n,version:r})=>{var a,o;const i=ge.bind(null,e),[s,l]=m(be()),[h,f]=m(.2),[p,g]=m(.1),[_,v]=m(void 0),w=u(0),y=JSON.stringify([t,h,p]),b=null!=(o=null==(a=null==t?void 0:t.noise)?void 0:a.height)?o:256,{canvas:k,redraw:x}=ee({size:()=>[b,b],async draw(e){const n={biomeDepth:p,biomeScale:h,offset:w.current,width:e.width,seed:s,version:r};Bt(t,e,n)},async onDrag(e){w.current+=e*b,x()},async onHover(e,n){var r,a;const o=b-Math.max(1,Math.ceil(n*b))+(null!=(a=null==(r=null==t?void 0:t.noise)?void 0:r.min_y)?a:0);v(`${o}`)},onLeave(){v(void 0)}},[y,s]);return c((()=>{n&&x()}),[y,s,n]),d(D,null,d("div",{class:"controls"},_&&d(X,{label:`Y = ${_}`,class:"no-pointer"}),qe(r,void 0,"1.17")&&d(re,{icon:"gear",tooltip:ge(e,"terrain_settings")},d(Q,{label:i("preview.scale"),value:`${h}`,onChange:e=>f(Number(e))}),d(Q,{label:i("preview.depth"),value:`${p}`,onChange:e=>g(Number(e))})),d(X,{icon:"sync",tooltip:ge(e,"generate_new_seed"),onClick:()=>l(be())})),d("canvas",{ref:k,width:b,height:b}))},Zt=["dimension","worldgen/noise","worldgen/noise_settings","worldgen/configured_feature"];function Kt({lang:e,model:t,version:n,id:r,shown:a}){var o;const[,i]=m(0);if(ne(t,(()=>{i((e=>e+1))})),"dimension"===r&&(null==(o=null==t?void 0:t.get(new f.Path(["generator","type"])))?void 0:o.endsWith("noise"))){const r=t.get(new f.Path(["generator","biome_source"]));if(r)return d(Jt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/noise"===r&&t){const r=t.get(new f.Path([]));if(r)return d(Yt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/noise_settings"===r&&t){const r=t.get(new f.Path([]));if(r)return d(qt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/configured_feature"===r&&t){const r=t.get(new f.Path([]));if(r)return d(Gt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}return d(D,null)}const Xt={base:({},e,t)=>t,choice({switchNode:e},t,n,r){return e.hook(this,t,n,r)},list({children:e},t,n,r){if(!Array.isArray(n))return n;const a=n.map(((n,a)=>e.hook(this,t.push(a),n.node,r)));for(const o of Object.getOwnPropertySymbols(n))a[o]=n[o];return a},map({children:e,config:t},n,r,a){var o,i;if(void 0===r)return;const s="block_state_map"===(null==(o=t.validation)?void 0:o.validator)?null==(i=a.blockStates)?void 0:i[f.relativePath(n,t.validation.params.id).get()]:null,l={};Object.keys(r).forEach((t=>{var o;s&&!Object.keys(null!=(o=s.properties)?o:{}).includes(t)||(l[t]=e.hook(this,n.push(t),r[t],a))}));for(const c of Object.getOwnPropertySymbols(r))l[c]=r[c];return l},object({getActiveFields:e},t,n,r){if(null==n||"object"!=typeof n)return n;const a={},o=e(t);Object.keys(o).filter((e=>o[e].enabled(t))).forEach((e=>{const i=o[e].hook(this,t.push(e),n[e],r);null!=i&&(a[e]=i)}));for(const i of Object.getOwnPropertySymbols(n))a[i]=n[i];return a}};var Qt,en;(en=Qt||(Qt={})).ID_LANGUAGE="language",en.ID_THEME="theme",en.ID_VERSION="schema_version",en.ID_INDENT="indentation",en.ID_FORMAT="output_format",en.ID_SOUNDS_VERSION="minecraft_sounds_version",en.getLanguage=function(){var e;return null!=(e=localStorage.getItem(en.ID_LANGUAGE))?e:"en"},en.getTheme=function(){var e;return null!=(e=localStorage.getItem(en.ID_THEME))?e:"dark"},en.getVersion=function(){const e=localStorage.getItem(en.ID_VERSION);return e&&Re.includes(e)?e:"1.17"},en.getIndent=function(){var e;return null!=(e=localStorage.getItem(en.ID_INDENT))?e:"2_spaces"},en.getFormat=function(){var e;return null!=(e=localStorage.getItem(en.ID_FORMAT))?e:"json"},en.getSoundsVersion=function(){var e;return null!=(e=localStorage.getItem(en.ID_SOUNDS_VERSION))?e:"latest"},en.setLanguage=function(e){e&&localStorage.setItem(en.ID_LANGUAGE,e)},en.setTheme=function(e){e&&localStorage.setItem(en.ID_THEME,e)},en.setVersion=function(e){e&&localStorage.setItem(en.ID_VERSION,e)},en.setIndent=function(e){e&&localStorage.setItem(en.ID_INDENT,e)},en.setFormat=function(e){e&&localStorage.setItem(en.ID_FORMAT,e)},en.setSoundsVersion=function(e){e&&localStorage.setItem(en.ID_SOUNDS_VERSION,e)};const tn={"2_spaces":2,"4_spaces":4,tabs:"\t",minified:void 0},nn={json:{parse:N.parse,stringify:(e,t)=>N.stringify(e,null,t)},yaml:{parse:B.load,stringify:(e,t)=>B.dump(e,{flowLevel:void 0===t?0:-1,indent:"string"==typeof t?4:t})}};function rn({lang:e,name:t,model:n,blockStates:r,doCopy:a,doDownload:o,doImport:i,copySuccess:s,onError:l}){const h=ge.bind(null,e),[p,g]=m(Qt.getIndent()),[_,v]=m(Qt.getFormat()),w=u(null),y=u(null),b=u(),k=T(((e,t)=>{const n=e.schema.hook(Xt,new f.ModelPath(e),e.data,{blockStates:t});return nn[_].stringify(n,tn[p])+"\n"}),[p,_]);c((()=>{b.current=()=>{if(n&&r)try{const e=k(n,r);e.length>=1e4?w.current.value=e.slice(0,1e4)+"\n\nOutput is too large to display (+10000 chars)\nExport to view complete output\n\n":w.current.value=e}catch(e){l(`Error getting JSON output: ${Le(e)}`),console.error(e),w.current.value=""}}})),ne(n,(()=>{b.current()})),c((()=>{n&&b.current()}),[n]),c((()=>{b.current()}),[p,_]);c((()=>{a&&n&&r&&navigator.clipboard.writeText(k(n,r)).then((()=>{s()}))}),[a]),c((()=>{if(o&&n&&r&&y.current){const e=encodeURIComponent(k(n,r));y.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),y.current.setAttribute("download",`${t}.${_}`),y.current.click()}}),[o]),c((()=>{i&&w.current&&(w.current.value="",w.current.select())}),[i]);return d(D,null,d("div",{class:"controls"},d(re,{icon:"gear",tooltip:h("output_settings")},Object.entries(tn).map((([e])=>d(X,{label:h(`indentation.${e}`),active:p===e,onClick:()=>{return t=e,Qt.setIndent(t),void g(t);var t}}))),d("hr",null),Object.keys(nn).map((e=>d(X,{label:h(`format.${e}`),active:_===e,onClick:()=>{return t=e,Qt.setFormat(t),void v(t);var t}}))))),d("textarea",{ref:w,class:"source",onBlur:()=>{if(0!==w.current.value.length)try{const e=nn[_].parse(w.current.value);null==n||n.reset(f.DataModel.wrapLists(e),!1)}catch(e){l(`Error importing: ${Le(e)}`),console.error(e)}},spellcheck:!1,autocorrect:"off",placeholder:h("source_placeholder")}),d("a",{ref:y,style:"display: none;"}))}class an extends f.DataModel{constructor(e,t,n,r){super(e),this.mapper=t,this.getter=n,this.setter=r}map(e){return this.mapper(e)}get(e){return this.getter(e)}set(e,t,n){return this.setter(e,t,n)}}const on=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","recipe.type","dimension.generator.type","dimension.generator.biome_source.type","dimension.generator.biome_source.preset","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","block_predicate.type","material_rule.type","material_condition.type"],sn=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],ln=["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","decorator.block_survives_filter.state","material_rule.block.result_state"],cn=["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","generator_biome.biome","block_predicate.type","material_rule.type","material_condition.type"],dn=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],un=["generator_biome.parameters.temperature","generator_biome.parameters.humidity","generator_biome.parameters.continentalness","generator_biome.parameters.erosion","generator_biome.parameters.depth","generator_biome.parameters.weirdness","feature.end_spike.crystal_beam_target","feature.end_gateway.exit","decorator.block_filter.offset","block_predicate.matching_blocks.offset","block_predicate.matching_fluids.offset","model_element.from","model_element.to","model_element.rotation.origin","model_element.faces.uv","item_transform.rotation","item_transform.translation","item_transform.scale"],mn=["noise_settings.surface_rule","noise_settings.noise.terrain_shaper"],hn=new f.DataModel(f.MapNode(f.StringNode(),f.StringNode()),{historyMax:0});function fn({model:e,lang:t,version:n,blockStates:r}){var a;const o=new f.ModelPath(e),[i,s,l]=e.schema.hook(pn,o,Pe(e.data),t,n,r,{});return(null==(a=null==s?void 0:s.props)?void 0:a.children.some((e=>e)))?d("div",{class:`node ${e.schema.type(o)}-node`,"data-category":e.schema.category(o)},d("div",{class:"node-header"},i,s),d("div",{class:"node-body"},l)):l}const pn={base:()=>[null,null,null],boolean:(e,t,n,r,a,o,i)=>[null,d(vn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null],choice({choices:e,config:t,switchNode:n},r,a,o,i,s,l){const c=n.activeCase(r,!0),u=(null==t?void 0:t.context)?new f.ModelPath(r.getModel(),new f.Path(r.getArray(),[t.context])):r,[m,h,p]=c.node.hook(this,u,a,o,i,s,l);if(1===e.length)return[m,h,p];const g=(null==t?void 0:t.choiceContext)?new f.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new f.Path([],[t.context]):r,_=d("select",{value:c.type,onChange:n=>(n=>{var o;const i=null!=(o=e.find((e=>e.type===n)))?o:c,s=i.node.default(),l=i.change?i.change(f.DataModel.unwrapLists(a)):"feature"===t.choiceContext&&"minecraft:decorated"===(null==s?void 0:s.type)?s.config.feature:s;r.model.set(r,f.DataModel.wrapLists(l))})(n.target.value)},e.map((e=>d("option",{value:e.type},Cn(o,g.contextPush(e.type))))));return[m,d(D,null,_,h),p]},list({children:e,config:t},n,r,a,o,i,c){const{expand:u,collapse:h,isToggled:p}=_n(),[g,_]=m(50),v=n.getContext().join(".");if(un.includes(v)){return[d(D,null,[...Array(t.maxLength)].map(((e,t)=>d(An,{lang:a,path:n.modelPush(t)}))),d("div",{class:"fixed-list"})),d(D,null,[...Array(t.maxLength)].map(((t,s)=>{var l;return e.hook(this,n.modelPush(s),null==(l=null==r?void 0:r[s])?void 0:l.node,a,o,i,c)[1]}))),null]}return[null,d("button",{class:"add tooltipped tip-se","aria-label":ge(a,"add_top"),onClick:()=>{Array.isArray(r)||(r=[]);const t=f.DataModel.wrapLists(e.default());n.model.set(n,[{node:t,id:ye()},...r])}},ae.plus_circle),d(D,null,r&&Array.isArray(r)&&r.map((({node:t,id:m},f)=>{if(f===g)return d("div",{class:"node node-header"},d("label",null,ge(a,"entries_hidden",""+(r.length-g))),d("button",{onClick:()=>_(Math.min(g+50,r.length))},ge(a,"entries_hidden.more","50")),d("button",{onClick:()=>_(r.length)},ge(a,"entries_hidden.all")));if(f>g)return null;const v=n.push(f).contextPush("entry"),w="object"===e.type(v),y=p(m);if(w&&(!1===y||void 0===y&&r.length>20))return d("div",{class:"node node-header","data-category":e.category(v)},d(An,{lang:a,path:v,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(a,"expand")}\n${ge(a,"expand_all","Ctrl")}`,onClick:u(m)},ae.chevron_right),d("label",null,Cn(a,v,`${f}`)),d(gn,{key:m,path:v,value:t,schema:e}));return d(bn,l(s({key:m,path:v,schema:e,value:t},{lang:a,version:o,states:i,actions:[{icon:"duplicate",label:"duplicate",onSelect:()=>{const e=[...n.get()];e.splice(f,0,{id:ye(),node:Pe(t)}),n.model.set(n,e)}}]}),{ctx:l(s({},c),{index:(0===f?1:0)+(f===r.length-1?2:0)})}),w&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(a,"collapse")}\n${ge(a,"collapse_all","Ctrl")}`,onClick:h(m)},ae.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":ge(a,"remove"),onClick:()=>v.set(void 0)},ae.trashcan),r.length>1&&d("div",{class:"node-move"},d("button",{class:"move tooltipped tip-se","aria-label":ge(a,"move_up"),onClick:()=>{const e=[...n.get()];[e[f-1],e[f]]=[e[f],e[f-1]],n.model.set(n,e)},disabled:0===f},ae.chevron_up),d("button",{class:"move tooltipped tip-se","aria-label":ge(a,"move_down"),onClick:()=>{const e=[...n.get()];[e[f+1],e[f]]=[e[f],e[f+1]],n.model.set(n,e)},disabled:f===r.length-1},ae.chevron_down)))})),r&&r.length>0&&r.length<=g&&d("div",{class:"node node-header"},d("button",{class:"add tooltipped tip-se","aria-label":ge(a,"add_bottom"),onClick:()=>{Array.isArray(r)||(r=[]);const t=f.DataModel.wrapLists(e.default());n.model.set(n,[...r,{node:t,id:ye()}])}},ae.plus_circle)))]},map({children:e,keys:t,config:n},r,a,o,i,c,u){var m,h,p,g,_;const{expand:v,collapse:w,isToggled:y}=_n(),b=new f.ModelPath(hn,new f.Path([xn(r.toString())])),k="block_state_map"===(null==(m=n.validation)?void 0:m.validator)?null==c?void 0:c[f.relativePath(r,n.validation.params.id).get()]:null,x=(null==k?void 0:k.properties)?f.StringNode(null,{enum:Object.keys(null!=(h=k.properties)?h:{})}):t;if(k&&"Properties"===r.last()){"object"!=typeof a&&(a={});const e=Object.entries(null!=(p=k.properties)?p:{}).map((([e,t])=>[e,f.StringNode(null,{enum:t})]));return Object.entries(null!=(g=k.properties)?g:{}).forEach((([e,t])=>{"string"!=typeof a[e]?r.model.errors.add(r.push(e),"error.expected_string"):t.includes(a[e])||r.model.errors.add(r.push(e),"error.invalid_enum_option",a[e])})),f.ObjectNode(Object.fromEntries(e)).hook(this,r,a,o,i,c,u)}return[null,d(D,null,x.hook(this,b,null!=(_=b.get())?_:"",o,i,c,u)[1],d("button",{class:"add tooltipped tip-se","aria-label":ge(o,"add"),onClick:()=>{const t=b.get();r.model.set(r.push(t),f.DataModel.wrapLists(e.default()))}},ae.plus_circle)),d(D,null,"object"==typeof a&&Object.entries(a).map((([t,n])=>{var m,h,p,g;const _=r.modelPush(t),b="object"===e.type(_),x=y(t);if(b&&(!1===x||void 0===x&&a.length>20))return d("div",{class:"node node-header","data-category":e.category(_)},d(An,{lang:o,path:_,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(o,"expand")}\n${ge(o,"expand_all","Ctrl")}`,onClick:v(t)},ae.chevron_right),d("label",null,t),d(gn,{key:t,path:_,value:n,schema:e}));const C=k?f.StringNode(null,{enum:null!=(h=null==(m=k.properties)?void 0:m[t])?h:[]}):e;(null==(p=null==k?void 0:k.properties)?void 0:p[t])&&"string"==typeof n&&!(null==(g=k.properties)?void 0:g[t].includes(n))&&r.model.errors.add(_,"error.invalid_enum_option",n);return d(bn,l(s({key:t,schema:C,path:_,value:n},{lang:o,version:i,states:c,ctx:u}),{label:t}),b&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(o,"collapse")}\n${ge(o,"collapse_all","Ctrl")}`,onClick:w(t)},ae.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":ge(o,"remove"),onClick:()=>_.set(void 0)},ae.trashcan))})))]},number:(e,t,n,r,a,o,i)=>[null,d(wn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null],object({node:e,config:t,getActiveFields:n,getChildModelPath:r},a,o,i,c,u,m){var h;const{expand:p,collapse:g,isToggled:_}=_n();if(0==a.getArray().length&&function(e,t){var n;return"feature"===e&&"decorated"===(null==(n=null==t?void 0:t.type)?void 0:n.replace(/^minecraft:/,""))&&ve(null==t?void 0:t.config)}(t.context,o)){const{wrapper:e,fields:t}=function(e,t,n){const r=[],a=jn(n,r),o={type:e.type,config:f.ObjectNode({decorators:f.ListNode(Ue),feature:Ge},{context:"feature.decorated"})},i=f.ObjectNode(o,{context:"feature"}),s=new f.Path(["config","feature"]),l=new f.Path(["config","decorators"]),c=t.getModel(),d=new an(i,(e=>{if(e.startsWith(s))return new f.Path([...[...Array(r.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);if(e.startsWith(l)){if(2===e.modelArr.length)return new f.Path([]);const t=e.modelArr[2];if("number"==typeof t)return new f.Path([...[...Array(t)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)])}return e}),(e=>{if(e.equals(l)){const e=[];return jn(c.data,e),e}return c.get(d.map(e))}),((e,t,n)=>{if(e.startsWith(s)){const r=[];jn(c.data,r);const a=new f.Path([...[...Array(r.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);return c.set(a,t,n)}if(e.startsWith(l)){const r=e.modelArr[2];if(2===e.modelArr.length){const e=d.get(s);return c.set(new f.Path,$n(e,t),n)}if("number"==typeof r){if(3===e.modelArr.length&&void 0===t){const e=d.get(s),t=[];jn(c.data,t),t.splice(r,1);const a=$n(e,t);return c.set(new f.Path,a,n)}{const a=new f.Path([...[...Array(r)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)]);return c.set(a,t,n)}}}c.set(e,t,n)}));return d.data={type:c.data.type,config:{decorators:r,feature:a}},d.errors=c.errors,{fields:o,wrapper:d}}(n(a),a,o);o=e.data,n=()=>t,r=(t,n)=>new f.ModelPath(e,new f.Path(t.getArray(),["feature"])).push(n)}let v=null,w=null;if(e.optional())if(void 0===o){const t=()=>a.set(f.DataModel.wrapLists(e.default()));w=d("button",{class:"collapse closed tooltipped tip-se","aria-label":ge(i,"expand"),onClick:t},ae.plus_circle)}else{const e=()=>a.set(void 0);w=d("button",{class:"collapse open tooltipped tip-se","aria-label":ge(i,"remove"),onClick:e},ae.trashcan)}const y=a.getContext().join(".");if(mn.includes(y)){const e=_("");if(v=d(D,null,d("button",{class:"toggle tooltipped tip-se","aria-label":ge(i,e?"collapse":"expand"),onClick:e?g(""):p("")},e?ae.chevron_down:ae.chevron_right)),!e)return[v,w,null]}const b="object"==typeof o&&null!==o&&(null==(h=e.default())?void 0:h.pools)?l(s({},m),{loot:null==o?void 0:o.type}):m,k=d(D,null,"object"==typeof o&&null!==o&&!(e.optional()&&void 0===o)&&Object.entries(n(a)).filter((([e,t])=>t.enabled(a))).map((([e,t])=>{var n,l,m;const h=r(a,e),f=h.getContext().join(".");if(sn.includes(f))return null;const[p,g,_]=t.hook(this,h,o[e],i,c,u,b);if(!(p||g||(null!=(m=null==(l=null==(n=null==_?void 0:_.props)?void 0:n.children)?void 0:l.length)?m:0)>0))return null;const y="object"===t.type(h)&&ln.includes(f),k=cn.includes(f);return y||k?(v=d(D,null,v,d(An,{lang:i,path:h}),d(Mn,{lang:i,path:h}),p),w=d(D,null,w,g),y?_:null):d(bn,s({key:e,schema:t,path:h,value:o[e]},{lang:i,version:c,states:u,ctx:b}))})));return[v,w,k]},string:(e,t,n,r,a,o,i)=>[null,d(yn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null]};function gn({path:e,value:t}){var n,r,a,o,i;switch(e.getContext().join(".")){case"loot_table.pools.entry":return d("label",null,null!=(r=null==(n=null==t?void 0:t.entries)?void 0:n.length)?r:0," entries");case"function.set_contents.entries.entry":case"loot_pool.entries.entry":return d("label",null,null!=(i=null==(a=null==t?void 0:t.name)?void 0:a.replace(/^minecraft:/,""))?i:null==(o=null==t?void 0:t.type)?void 0:o.replace(/^minecraft:/,""))}for(const s of Object.values(null!=t?t:{}))if("string"==typeof s)return d("label",null,s.replace(/^minecraft:/,""));return null}function _n(){const[e,t]=m(new Map),[n,r]=m(void 0);return{expand:e=>n=>{n.ctrlKey?(t(new Map),r(!0)):t((t=>new Map(t.set(e,!0))))},collapse:e=>n=>{n.ctrlKey?(t(new Map),r(!1)):t((t=>new Map(t.set(e,!1))))},isToggled:t=>{var r;return e instanceof Map&&(null!=(r=e.get(t))?r:n)}}}function vn({path:e,node:t,value:n,lang:r}){const a=r=>{e.model.set(e,t.optional()&&n===r?void 0:r)};return d(D,null,d("button",{class:!1===n?"selected":"",onClick:()=>a(!1)},ge(r,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>a(!0)},ge(r,"true")))}function wn({path:e,config:t,integer:n,value:r,lang:a}){var o;const i=t=>{const r=t.target.value,a=n?parseInt(r):parseFloat(r);e.model.set(e,a)};return d(D,null,d("input",{type:"text",value:null!=r?r:"",onBlur:i,onKeyDown:e=>{"Enter"===e.key&&i(e)}}),(null==t?void 0:t.color)&&d("input",{type:"color",value:"#"+(null!=(o=null==r?void 0:r.toString(16).padStart(6,"0"))?o:"000000"),onChange:t=>{const n=t.target.value,r=parseInt(n.slice(1),16);e.model.set(e,r)}}),["dimension.generator.seed","dimension.generator.biome_source.seed","world_settings.seed"].includes(e.getContext().join("."))&&d("button",{onClick:()=>ke(e.model),class:"tooltipped tip-se","aria-label":ge(a,"generate_new_seed")},ae.sync))}function yn({path:e,getValues:t,config:n,node:r,value:a,lang:o,version:i,states:s}){var l;const c=t=>{t.stopPropagation();const n=t.target.value;n!==a&&e.model.set(e,0===n.length?void 0:n)},u=t(),m=e.getContext().join("."),h=kn(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool?void 0:n.params.pool;if(dn.includes(m))return d("textarea",{value:null!=a?a:"",onBlur:c});if(kn(n)&&!n.additional||on.includes(m)){let t=new f.Path([]);return kn(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):h?t=t.contextPush(h):kn(n)&&(t=e),d("select",{value:null!=a?a:"",onChange:c},r.optional()&&d("option",{value:""},ge(o,"unset")),u.map((e=>d("option",{value:e},Cn(o,t.contextPush(e.replace(/^minecraft:/,"")))))))}if(kn(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=ye(),t=h?(e=>Z.generators.find((t=>t.id===e.replace(/^\$/,""))))(h):void 0;return console.log(h,t),d(D,null,d("input",{value:null!=a?a:"",onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(e)},list:u.length>0?e:""}),u.length>0&&d("datalist",{id:e},u.map((e=>d("option",{value:e})))),t&&u.includes(a)&&a.startsWith("minecraft:")&&d("a",{href:`/${t.url}/?version=${i}&preset=${a.replace(/^minecraft:/,"")}`,class:"tooltipped tip-se","aria-label":ge(o,"follow_reference")},ae.link_external))}{const t=null==s?void 0:s[f.relativePath(e,n.params.id).get()],r=Object.keys(null!=(l=null==t?void 0:t.properties)?l:{});return d("select",{value:null!=a?a:"",onChange:c},r.map((e=>d("option",null,e))))}}const bn=H((function({label:e,schema:t,path:n,value:r,lang:a,version:o,states:i,ctx:c,actions:u,children:m}){var h;const f=t.type(n),p=t.category(n),g=n.getContext().join("."),[_,v]=te(),w=l(s({},c),{depth:(null!=(h=c.depth)?h:0)+1});delete w.index;const[y,b,k]=t.hook(pn,n,r,a,o,i,w);return d("div",{class:`node ${f}-node`,"data-category":p},d("div",{class:"node-header",onContextMenu:e=>{e.preventDefault(),v()}},d(An,{lang:a,path:n}),d(Mn,{lang:a,path:n}),m,y,d("label",null,null!=e?e:Cn(a,n,`${n.last()}`),_&&d("div",{class:"node-menu"},null==u?void 0:u.map((e=>{var t;return d("div",{key:e.label,class:"menu-item"},d(X,{icon:e.icon,tooltip:ge(a,e.label),tooltipLoc:"se",onClick:()=>e.onSelect()}),d("span",null,null!=(t=e.description)?t:ge(a,e.label)))})),d("div",{class:"menu-item"},d(X,{icon:"clippy",tooltip:ge(a,"copy_context"),tooltipLoc:"se",onClick:()=>navigator.clipboard.writeText(g)}),d("span",null,g)))),b),k&&d("div",{class:"node-body"},k))}),((e,t)=>e.schema===t.schema&&e.lang===t.lang&&e.path.equals(t.path)&&Se(e.ctx,t.ctx)&&Se(e.value,t.value)));function kn(e){return!!(null==e?void 0:e.enum)}function xn(e){var t,n=0;for(t=0;te.path.startsWith(t))):t.model.errors.get(t,!0);if(0===a.length)return null;const o=ge(e,a[0].error,...null!=(r=a[0].params)?r:[]);return zn("node-error","issue_opened",o)}function Mn({lang:e,path:t}){const n=t.contextPush("help").getContext().join("."),r=ge(e,n);return r===n?null:zn("node-help","info",r)}const zn=(e,t,n)=>{const[r,a]=te();return d("div",{class:`node-icon ${e}${r?" show":""}`,onClick:a},ae[t],d("span",{class:"icon-popup"},n))};function jn(e,t){var n,r;return"decorated"!==(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,""))?e:ve(null==e?void 0:e.config)?(t.push({id:t.length,node:e.config.decorator}),jn(null!=(r=e.config.feature)?r:"",t)):e}function $n(e,t){return 0===t.length?e:{type:"minecraft:decorated",config:{decorator:t.shift().node,feature:$n(e,t)}}}function Vn({lang:e,version:t,model:n,blockStates:r,onError:a}){if(!n||!r||"none"===e)return d(D,null);const[o]=R((e=>{a(`Error rendering the tree: ${e.message}`),console.error(e)}));if(o)return d(D,null);const[,i]=m(0);return ne(n,(()=>{i((e=>e+1))})),d("div",{class:"tree"},d(fn,s({},{model:n,lang:e,version:t,blockStates:r})))}const En={system:"device_desktop",dark:"moon",light:"sun"};function In({lang:e,title:t,version:n,theme:r,changeTheme:a,language:o,changeLanguage:i}){const s=ge.bind(null,e),l=Me(p());return d("header",null,d("div",{class:"title"},d(F,{class:"home-link",href:"/","aria-label":s("home")},On.home),d("h1",null,t),l&&d(re,{icon:"chevron_down",tooltip:s("switch_generator")},Z.generators.filter((e=>e.category===(null==l?void 0:l.category)&&qe(n,e.minVersion))).map((e=>d(X,{label:s(e.id),active:e.id===l.id,onClick:()=>g(Ce(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(re,{icon:"globe",tooltip:s("language")},Z.languages.map((({code:e,name:t})=>d(X,{label:t,active:e===o,onClick:()=>i(e)}))))),d("li",null,d(re,{icon:En[r],tooltip:s("theme")},Object.entries(En).map((([e,t])=>d(X,{icon:t,label:s(`theme.${e}`),active:e===r,onClick:()=>a(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",class:"tooltipped tip-sw","aria-label":s("github")},ae.mark_github)))))}const On={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 Ln({lang:e,assets:t,sounds:n,sound:r,delay:a,pitch:o,volume:i,onEdit:s,onDelete:l,delayedPlay:h}){const f=ge.bind(null,e),[p,g]=m(!0),[_,v]=m(!1),[w,y]=m(!1),b=u([]),k=`playsound minecraft:${r} master @s ~ ~ ~ ${i} ${o}`;c((()=>{var e,a,s;const l=n[r];y(0===(null!=(a=null==(e=null==l?void 0:l.sounds)?void 0:e.length)?a:0)),b.current.forEach((e=>e.stop())),b.current=(null!=(s=null==l?void 0:l.sounds)?s:[]).map((e=>{const n="string"==typeof e?e:e.name,r=ot(t[`minecraft/sounds/${n}.ogg`].hash),a=new W.Howl({src:[r],format:["ogg"],volume:i,rate:o});a.on("end",(()=>{v(!1)}));const s=()=>{p&&b.current.every((e=>"loaded"===e.state()))&&g(!1)};return"loaded"===a.state()?setTimeout((()=>s())):a.on("load",(()=>{s()})),a})),g(!0)}),[r,n]),c((()=>{b.current.forEach((e=>e.rate(o)))}),[o]),c((()=>{b.current.forEach((e=>e.volume(i)))}),[i]);const x=()=>{if(p||w)return;C();const e=Math.floor(Math.random()*b.current.length);b.current[e].play(),v(!0)},C=()=>{b.current.forEach((e=>e.stop()))};c((()=>{h&&setTimeout((()=>x()),50*a)}),[h]),c((()=>()=>C()),[]);const[A,M]=m(!1),z=u(void 0);return d("div",{class:`sound-config${p?" loading":_?" playing":""}${w?" invalid":""}`},d(X,{class:"play",icon:w?"alert":p?"sync":"play",label:f("sounds.play"),onClick:x,tooltip:f(w?"sounds.unknown_sound":p?"sounds.loading_sound":"sounds.play_sound"),tooltipLoc:"se"}),d(se,{class:"btn btn-input sound",list:"sound-list",spellcheck:!1,value:r,onChange:e=>s({sound:e})}),d("label",{class:"delay-label"},f("sounds.delay"),": "),d(le,{class:"btn btn-input delay",min:0,value:a,onChange:e=>s({delay:e})}),d("label",{class:"pitch-label"},f("sounds.pitch"),": "),d(ce,{class:"pitch tooltipped tip-s",min:.5,max:2,step:.01,"aria-label":o.toFixed(2),style:`--x: ${100/1.5*(o-.5)}%`,value:o,onChange:e=>s({pitch:e})}),d("label",{class:"volume-label"},f("sounds.volume"),": "),d(ce,{class:"volume tooltipped tip-s",min:0,max:1,step:.01,"aria-label":i.toFixed(2),style:`--x: ${100*i}%`,value:i,onChange:e=>s({volume:e})}),d(X,{class:"copy"+(A?" active":""),icon:A?"check":"terminal",label:f("copy"),tooltip:f(A?"copied":"sounds.copy_command"),onClick:()=>{navigator.clipboard.writeText(k),M(!0),void 0!==z.current&&clearTimeout(z.current),z.current=setTimeout((()=>{M(!1)}),2e3)}}),d(X,{class:"remove",icon:"trashcan",tooltip:f("sounds.remove_sound"),onClick:()=>{l(),C()}}))}function Pn({title:e,desc:t,link:n,icon:r,children:a}){const o=d(D,null,d("div",{class:"tool-head"},r&&On[r],d("div",null,d("h3",null,e),d("p",null,t))),a&&d("div",{class:"tool-body"},a));return n?d("a",{class:"tool-card",href:n},o):d("div",{class:"tool-card"},o)}function Sn({category:e,lang:t,changeTitle:n}){const r=ge.bind(null,t);return n(r("title.generator_category",r(e))),d("main",null,d("div",{class:"category"},Z.generators.filter((t=>t.category===e)).map((e=>d(Pn,{title:r(e.id),link:Ce(e.url)})))))}function Dn({lang:e,changeTitle:t}){const n=ge.bind(null,e),[r,a]=m(null);t(n("title.changelog"));const[o,i]=m([]);c((()=>{Be().then((e=>i(e))).catch((e=>{console.error(e),a(e)}))}),[]);const[s,l]=m(""),[u,h]=m([]),f=e=>{u.includes(e)?h(u.filter((t=>t!==e))):h([...u,e])},p=J((()=>{const e=s.split(" ").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0));return 0===e.length&&0===u.length?o:o.filter((t=>{if(!u.every((e=>t.tags.includes(e))))return!1;const n=t.tags.join(" ")+" "+t.content.toLowerCase();return e.every((e=>e.startsWith("!")?1===e.length||!n.includes(e.slice(1)):n.includes(e)))}))}),[o,s,u]),[g,_]=m(!0),v=J((()=>p.sort(((e,t)=>g?t.order-e.order:e.order-t.order))),[p,g]);return d("main",null,d(K,{type:"text",id:"changelog"}),r&&d(oe,{error:r,onDismiss:()=>a(null)}),d("div",{class:"changelog-controls"},d("div",{class:"changelog-query"},d(se,{class:"btn btn-input changelog-search",list:"sound-list",placeholder:n("changelog.search"),value:s,onChange:l}),d(X,{icon:g?"sort_desc":"sort_asc",label:g?"Newest first":"Oldest first",onClick:()=>_(!g)})),u.length>0&&d("div",{class:"changelog-tags"},u.map((e=>d(Bn,{label:e,onClick:()=>h(u.filter((t=>t!==e)))}))))),d("div",{class:"changelog"},v.map((e=>d(Tn,{change:e,activeTags:u,toggleTag:f})))))}function Tn({change:e,activeTags:t,toggleTag:n}){return d("div",{class:"changelog-entry"},d("div",{class:"changelog-version"},d(Nn,s({},e.version)),d(Nn,s({},e.group))),d("div",{class:"changelog-tags"},e.tags.map((e=>d(Bn,{label:e,onClick:()=>n(e),active:t.includes(e)})))),d("div",{class:"changelog-content",dangerouslySetInnerHTML:{__html:U(e.content)}}))}function Nn({id:e,article:t}){return null===t?d("span",null,e):d("a",{href:`https://www.minecraft.net/en-us/article/${t}`,target:"_blank"},e)}function Bn({label:e,active:t,onClick:n}){const r="breaking"===e?5:xe(e)%360;return d("div",{class:`changelog-tag${t?" active":""}${n?" clickable":""}`,style:`--tint: ${r}`,onClick:n},"breaking"===e&&ae.alert,e)}function Hn({lang:e,changeTitle:t,version:n,changeVersion:r}){var a;const o=ge.bind(null,e),[i,h]=m(null),[g,_]=R();if(g)return d("main",null,d(oe,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:_}));const v=Me(p());if(!v)return d("main",null,d(oe,{error:`Cannot find generator "${p()}"`}));const w=Z.versions.filter((e=>qe(e.id,v.minVersion,v.maxVersion))).map((e=>e.id));t(o("title.generator",o(v.id)),w),qe(n,v.minVersion)||h(`The minimum version for this generator is ${v.minVersion}`);const y=ze(p()).get("preset"),[b,k]=m(null),[x,C]=m(null);c((()=>{h(null),k(null),async function(e){return(await Ye(e)).blockStates}(n).then((e=>C(e))),async function(e,t){var n;if(!We[t]||We[t].version!==e){const a=await Ye(e);Ue=f.Reference(a.schemas,"configured_decorator"),Ge=f.ChoiceNode([{type:"string",node:f.StringNode(a.collections,{validator:"resource",params:{pool:"$worldgen/configured_feature"}})},{type:"object",node:f.Reference(a.schemas,"configured_feature")}],{choiceContext:"feature"});const o=null==(n=Z.generators.find((e=>e.id===t)))?void 0:n.schema;if(!o)throw new Error(`Cannot find model ${t}`);try{const n=a.schemas.get(o),r=new f.DataModel(n,{wrapLists:!0});We[t]?r.reset(We[t].model.data,!1):(r.validate(!0),r.history=[JSON.stringify(r.data)]),We[t]={model:r,version:e}}catch(r){const n=new Error(`Cannot get generator "${t}" for version "${e}": ${Le(r)}`);throw r instanceof Error&&(n.stack=r.stack),n}}return We[t].model}(n,v.id).then((async e=>{if(q.setGenerator(v.id),y){const t=await V(y);e.reset(f.DataModel.wrapLists(t),!1)}k(e)})).catch((e=>{console.error(e),h(Le(e))}))}),[n,v.id]),ne(b,(()=>{je({version:void 0,preset:void 0}),h(null)}));const A=e=>{e.ctrlKey&&"z"===e.key?(q.generatorEvent("undo","Hotkey"),null==b||b.undo()):e.ctrlKey&&"y"===e.key&&(q.generatorEvent("redo","Hotkey"),null==b||b.redo())};c((()=>(document.addEventListener("keyup",A),()=>{document.removeEventListener("keyup",A)})),[b]);const[M,z]=m(""),[j,$]=m([]);c((()=>{(async function(e){return(await Ye(e)).collections})(n).then((e=>{const t=(null!=M?M:"").trim().split(" "),n=e.get(v.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&$(n)})).catch((e=>{console.error(e),h(e.message)}))}),[n,v.id,M]);const V=async e=>{var t,r,a;q.generatorEvent("load-preset",e);try{const o=await at(n,null!=(t=v.path)?t:v.id,e),i=null==b?void 0:b.get(new f.Path(["generator","seed"]));return void 0!==(null==(r=null==o?void 0:o.generator)?void 0:r.seed)&&void 0!==i&&(o.generator.seed=i,void 0!==(null==(a=o.generator.biome_source)?void 0:a.seed)&&(o.generator.biome_source.seed=i)),o}catch(o){h(Le(o))}},[E,I]=m(window.innerWidth>820),[O,L]=m(0),[P,S]=m(0),[T,N]=m(0),[B,H]=m(!1),F=u(void 0),[W,J]=m(!1),U=Zt.includes(v.id);W&&!U&&J(!1);let G=1;U&&(G+=1),E&&(G+=2);return d(D,null,d("main",{class:W?"has-preview":""},d(K,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(X,{icon:"upload",label:o("import"),onClick:()=>{q.generatorEvent("import"),I(!0),N(T+1)}}),d(re,{icon:"archive",label:o("presets"),relative:!1},d(Q,{icon:"search",large:!0,value:M,onChange:z,doSelect:1,placeholder:o("search")}),d("div",{class:"result-list"},j.map((e=>d(X,{label:e,onClick:()=>{var t;V(t=e).then((e=>{null==b||b.reset(f.DataModel.wrapLists(e),!1),je({version:n,preset:t})}))}})))),0===j.length&&d(X,{label:o("no_presets")})),d(re,{icon:"tag",label:n},w.reverse().map((e=>d(X,{label:e,active:e===n,onClick:()=>r(e)})))),d(re,{icon:"kebab_horizontal",tooltip:o("more")},d(X,{icon:"history",label:o("reset"),onClick:()=>{q.generatorEvent("reset"),null==b||b.reset(f.DataModel.wrapLists(b.schema.default()),!0)}}),d(X,{icon:"arrow_left",label:o("undo"),onClick:e=>{e.stopPropagation(),q.generatorEvent("undo","Menu"),null==b||b.undo()}}),d(X,{icon:"arrow_right",label:o("redo"),onClick:e=>{e.stopPropagation(),q.generatorEvent("redo","Menu"),null==b||b.redo()}}))),i&&d(oe,{error:i,onDismiss:()=>h(null)}),d(Vn,l(s({},{lang:e,model:b,version:n,blockStates:x}),{onError:h}))),d("div",{class:"popup-actions",style:`--offset: -${8+50*G}px;`},d("div",{class:`popup-action action-preview${U?" shown":""} tooltipped tip-nw`,"aria-label":o(W?"hide_preview":"show_preview"),onClick:()=>{q.generatorEvent("toggle-preview",W?"hidden":"visible"),J(!W)}},W?ae.x_circle:ae.play),d("div",{class:`popup-action action-download${E?" shown":""} tooltipped tip-nw`,"aria-label":o("download"),onClick:()=>{q.generatorEvent("download"),S(P+1)}},ae.download),d("div",{class:`popup-action action-copy${E?" shown":""}${B?" active":""} tooltipped tip-nw`,"aria-label":o(B?"copied":"copy"),onClick:()=>{q.generatorEvent("copy"),L(O+1)}},B?ae.check:ae.clippy),d("div",{class:"popup-action action-code shown tooltipped tip-nw","aria-label":o(E?"hide_output":"show_output"),onClick:()=>{q.generatorEvent("toggle-output",E?"hidden":"visible"),I(!E),L(0),S(0),N(0)}},E?ae.chevron_right:ae.code)),d("div",{class:"popup-preview"+(W?" shown":"")},d(Kt,l(s({},{lang:e,model:b,version:n,id:v.id}),{shown:W,onError:h}))),d("div",{class:"popup-source"+(E?" shown":"")},d(rn,l(s({},{lang:e,model:b,blockStates:x,doCopy:O,doDownload:P,doImport:T}),{name:null!=(a=v.schema)?a:"data",copySuccess:()=>{H(!0),void 0!==F.current&&clearTimeout(F.current),F.current=setTimeout((()=>{H(!1)}),2e3)},onError:h}))))}function Rn({lang:e,changeTitle:t}){const n=ge.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},d(Pn,{title:"Data packs"},Z.generators.filter((e=>!e.category)).map((e=>d(Pn,{title:n(e.id),link:Ce(e.url)}))),d(Pn,{title:n("worldgen"),link:"/worldgen/"})),d(Pn,{title:"Resource packs"},Z.generators.filter((e=>"assets"===e.category)).map((e=>d(Pn,{title:n(e.id),link:Ce(e.url)})))),d(Pn,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/",desc:"Analyse your performance reports"}),d(Pn,{title:"Minecraft Sounds",icon:"sounds",link:"/sounds/",desc:"Browse through and mix all the vanilla sounds"}),d(Pn,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/",desc:"Convert your 1.16 data packs to 1.17"}),d(Pn,{title:"Technical Changelog",link:"/changelog/"})))}function Fn({lang:e,changeTitle:t,version:n,changeVersion:r}){const a=ge.bind(null,e),[o,i]=m(null);t(a("title.sounds"));const[h,f]=m({}),[p,g]=m({}),_=Object.keys(null!=p?p:{});c((()=>{ht(n).then((e=>(f(e),ft(n)))).then((e=>{e&&g(e)})).catch((e=>{console.error(e),i(Le(e))}))}),[n]);const[v,w]=m(""),[y,b]=m([]),k=()=>{b([{id:ye(),sound:v,delay:0,pitch:1,volume:1},...y])},x=e=>()=>{b(y.filter((t=>t.id!==e)))},[C,A]=m(0),M=u(null);return d("main",null,d(K,{type:"text",id:"sounds"}),o&&d(oe,{error:o,onDismiss:()=>i(null)}),_.length>0&&d(D,null,d("div",{class:"controls sounds-controls"},d("div",{class:"sound-search-group"},d(se,{class:"btn btn-input sound-search",list:"sound-list",placeholder:a("sounds.search"),value:v,onChange:w,onEnter:k}),d(X,{icon:"plus",tooltip:a("sounds.add_sound"),class:"add-sound",onClick:k})),y.length>1&&d(X,{icon:"play",label:a("sounds.play_all"),class:"play-all-sounds",onClick:()=>{A(C+1)}}),d("div",{class:"spacer"}),d(X,{icon:"download",label:a("download"),tooltip:a("sounds.download_function"),class:"download-sounds",onClick:()=>{const e=y.some((e=>e.delay>0)),t=y.sort(((e,t)=>e.delay-t.delay)).map((t=>`${e?`execute if score @s delay matches ${t.delay} run `:""}playsound minecraft:${t.sound} master @s ~ ~ ~ ${t.volume} ${t.pitch}`)).join("\n");M.current.setAttribute("href","data:text/plain;charset=utf-8,"+t+"%0A"),M.current.setAttribute("download","sounds.mcfunction"),M.current.click()}}),d(re,{icon:"tag",label:n},Z.versions.reverse().map((e=>d(X,{label:e.id,active:e.id===n,onClick:()=>r(e.id)}))))),d("div",{class:"sounds"},y.map((t=>{return d(Ln,l(s(s({key:t.id},t),{lang:e,assets:h,sounds:p,delayedPlay:C}),{onEdit:(n=t.id,e=>{b(y.map((t=>t.id===n?s(s({},t),e):t)))}),onDelete:x(t.id)}));var n}))),d("a",{ref:M,style:"display: none;"})),d("datalist",{id:"sound-list"},_.map((e=>d("option",{key:e,value:e})))))}function Wn(){const[e,t]=m("none");c((()=>{(async()=>{const e=Qt.getLanguage();await Promise.all([_e("en"),..."en"!==e?[_e(e)]:[]]),t(e)})()}),[]);const[n,r]=m(Qt.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const a=ze(p()).get("version"),[o,i]=m(Qt.getVersion()),l=T((e=>{ze(p()).has("version")&&je({version:e}),q.setVersion(e),Qt.setVersion(e),i(e)}),[a]);c((()=>{Re.includes(a)&&o!==a&&i(a)}),[o,a]);const[u,h]=m(ge(e,"title.home")),f=(e,t)=>{null!=t||(t=Z.versions.map((e=>e.id)));const n=t.slice(t.length-3);document.title=`${e} Minecraft ${n.join(", ")}`,h(e)};return d(D,null,d(In,s({},{lang:e,title:u,version:o,theme:n,language:e,changeLanguage:async e=>{pe[e]||await _e(e),q.setLanguage(e),Qt.setLanguage(e),t(e)},changeTheme:e=>{q.setTheme(e),Qt.setTheme(e),r(e)}})),d(Y,{onChange:e=>{setTimeout((()=>q.pageview(Ce(e.url))))}},d(Rn,s({path:"/"},{lang:e,changeTitle:f})),d(Sn,s({path:"/worldgen",category:"worldgen"},{lang:e,changeTitle:f})),d(Sn,s({path:"/assets",category:"assets"},{lang:e,changeTitle:f})),d(Fn,s({path:"/sounds"},{lang:e,version:o,changeTitle:f,changeVersion:l})),d(Dn,s({path:"/changelog"},{lang:e,changeTitle:f})),d(Hn,s({default:!0},{lang:e,version:o,changeTitle:f,changeVersion:l}))))}G(d(Wn,null),document.body); -//# sourceMappingURL=index.d5e10217.js.map +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,s=(e,t)=>{for(var n in t||(t={}))a.call(t,n)&&i(e,n,t[n]);if(r)for(var n of r(t))o.call(t,n)&&i(e,n,t[n]);return e},l=(e,r)=>t(e,n(r));import{y as c,a as d,s as u,l as m,r as h,b as f,g as p,c as g,j as _,d as v,e as w,f as y,h as b,i as k,m as x,k as C,L as A,G as M,V as z,O as j,n as $,w as V,Z as E,o as I,z as O,T as L,E as P,C as S,p as D,A as T,q as N,t as B,u as H,v as R,x as F,B as W,D as J,F as U,N as G,R as Y}from"./vendor.eebec09d.js";var q,Z=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","latest":"1.15.2","refs":{"mcdata_master":"13355f7","mcassets":"1.15.2"}},{"id":"1.16","latest":"1.16.5","refs":{"mcdata_master":"1.16.4","mcassets":"1.16.5","vanilla_datapack_data":"1.16.4-data","vanilla_datapack_summary":"1.16.4-summary"}},{"id":"1.17","latest":"1.17.1","refs":{"mcdata_master":"1.17.1","mcassets":"1.17.1","vanilla_datapack_data":"1.17.1-data","vanilla_datapack_summary":"1.17.1-summary"}},{"id":"1.18","refs":{"mcdata_master":"master","mcassets":"21w44a","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":"recipe","url":"recipe","path":"recipes","schema":"recipe"},{"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/placed_feature","url":"worldgen/placed-feature","category":"worldgen","schema":"placed_feature","minVersion":"1.18"},{"id":"worldgen/noise","url":"worldgen/noise","category":"worldgen","schema":"noise_parameters","minVersion":"1.18"},{"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","maxVersion":"1.17"},{"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"},{"id":"block_definition","url":"assets/blockstate","path":"blockstates","category":"assets","schema":"block_definition","minVersion":"1.18"},{"id":"model","url":"assets/model","path":"models","category":"assets","schema":"model","minVersion":"1.18"}],"registries":[{"id":"advancement","dynamic":true},{"id":"attribute","minVersion":"1.16"},{"id":"block"},{"id":"block_definition","path":"blockstates","asset":true},{"id":"block_entity_type","minVersion":"1.18"},{"id":"block_predicate_type","minVersion":"1.18"},{"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":"model","path":"models","asset":true},{"id":"pos_rule_test","minVersion":"1.16"},{"id":"potion","minVersion":"1.15"},{"id":"predicate","dynamic":true},{"id":"recipe","dynamic":true},{"id":"recipe_serializer"},{"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":"texture","path":"textures","asset":true},{"id":"worldgen/biome","dynamic":true},{"id":"worldgen/block_state_provider_type","minVersion":"1.16"},{"id":"worldgen/block_placer_type","minVersion":"1.16","maxVersion":"1.17"},{"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","maxVersion":"1.17"},{"id":"worldgen/feature","minVersion":"1.16"},{"id":"worldgen/feature_size_type","minVersion":"1.16"},{"id":"worldgen/foliage_placer_type","minVersion":"1.16"},{"id":"worldgen/material_condition","minVersion":"1.18"},{"id":"worldgen/material_rule","minVersion":"1.18"},{"id":"worldgen/noise","minVersion":"1.18","dynamic":true},{"id":"worldgen/noise_settings","minVersion":"1.16","dynamic":true},{"id":"worldgen/placed_feature","minVersion":"1.18","dynamic":true},{"id":"worldgen/placement_modifier_type","minVersion":"1.18"},{"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","maxVersion":"1.17"},{"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","maxVersion":"1.17","path":"processed/reports/biomes"},{"id":"worldgen/biome","minVersion":"1.18","path":"processed/reports/worldgen/minecraft/worldgen/biome"}]}');function K({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 X({icon:e,label:t,active:n,class:r,tooltip:a,tooltipLoc:o,onClick:i}){return d("div",{class:`btn${n?" active":""}${r?` ${r}`:""}${a?` tooltipped tip-${null!=o?o:"sw"}`:""}`,onClick:i,"aria-label":a},e&&ae[e],t&&d("span",null,t))}function Q({icon:e,label:t,large:n,doSelect:r,value:a,placeholder:o,onChange:i}){const s=void 0===i?()=>{}:e=>{const t=e.target.value;null==i||i(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&&ae[e],t&&d("span",null,t),d("input",{ref:l,type:"text",value:a,onChange:s,placeholder:o}))}function ee({size:e,draw:t,onDrag:n,onHover:r,onLeave:a},o){const i=u(null),s=u(),l=u(),d=u([0,0]),m=u(!1);c((()=>{const e=e=>{s.current=[e.offsetX,e.offsetY]},t=e=>{if(void 0===s.current){const t=e.offsetX/i.current.clientWidth,n=e.offsetY/i.current.clientHeight;return void(null==r||r(t,n))}if(!n)return;const t=e.offsetX-s.current[0],a=e.offsetY-s.current[1];0===t&&0===a||(d.current=[d.current[0]+t,d.current[1]+a],m.current||(cancelAnimationFrame(l.current),l.current=requestAnimationFrame((async()=>{m.current=!0;const e=d.current[0]/i.current.clientWidth,t=d.current[1]/i.current.clientHeight;d.current=[0,0],await(null==n?void 0:n(e,t)),m.current=!1})))),s.current=[e.offsetX,e.offsetY]},o=()=>{s.current=void 0},c=()=>{null==a||a()};return i.current.addEventListener("mousedown",e),i.current.addEventListener("mousemove",t),i.current.addEventListener("mouseleave",c),document.body.addEventListener("mouseup",o),()=>{var n,r,a;null==(n=i.current)||n.removeEventListener("mousedown",e),null==(r=i.current)||r.removeEventListener("mousemove",t),null==(a=i.current)||a.removeEventListener("mouseleave",c),document.body.removeEventListener("mouseup",o)}}),[...null!=o?o:[],i.current]);const h=u(),f=u(0);return h.current=async()=>{const n=i.current.getContext("2d"),r=e();i.current.width=r[0],i.current.height=r[1];const a=n.getImageData(0,0,r[0],r[1]),o=f.current+=1;await t(a),o===f.current&&n.putImageData(a,0,0)},{canvas:i,redraw:h.current}}function te(){const[e,t]=m(!1),n=()=>{t(!1)};return c((()=>(e&&(document.body.addEventListener("click",n),document.body.addEventListener("contextmenu",n)),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("contextmenu",n)})),[e]),[e,()=>t(!0)]}function ne(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function re({icon:e,label:t,relative:n,tooltip:r,children:a}){const[o,i]=te();return d("div",{class:"btn-menu"+(!1===n?" no-relative":"")},d(X,l(s({},{icon:e,label:t,tooltip:r}),{onClick:i})),o&&d("div",{class:"btn-group"},a))}!function(e){const t="Site",n="Generator";function r(e,t,n){ga("send","event",e,t,n)}function a(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){a(4,e),r(t,"set-language",e)},e.setTheme=function(e){a(1,e),r(t,"set-theme",e)},e.setVersion=function(e){a(3,e),r(n,"set-version",e)},e.setPreview=function(e){a(5,e),r(n,"set-preview",e)},e.setGenerator=function(e){a(6,e)},e.generatorEvent=function(e,t){r(n,e,t)}}(q||(q={}));const ae={alert: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 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"})),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"})),check:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"})),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"})),chevron_up: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.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),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"})),duplicate:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z"}),d("path",{"fill-rule":"evenodd",d:"M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z"}),d("path",{d:"M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.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"})),info: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened: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 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),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"})),link_external:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z"})),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"})),plus_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:"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 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),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"})),sort_asc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z"})),sort_desc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z"}),d("path",{d:"M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z"})),stack: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.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z"})),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"})),terminal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"})),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"})),trashcan: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.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),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 oe({error:e,onDismiss:t}){return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},ae.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")))}function ie(e,t,n){const r=e=>{const r=e.onChange&&(t=>{var r;const a=t.target.value;null==(r=e.onChange)||r.call(e,n(a))}),a=e.onEnter&&(t=>{var r;if("Enter"===t.key){const a=t.target.value;null==(r=e.onEnter)||r.call(e,n(a))}});return d("input",s(s({},e),{type:t,onChange:r,onKeyDown:a}))};return r.displayName=e,r}const se=ie("TextInput","text",(e=>e)),le=ie("NumberInput","number",(e=>Number(e))),ce=ie("RangeInput","range",(e=>Number(e)));let de;const ue={},me=function(e,t){if(!t)return e();if(void 0===de){const e=document.createElement("link").relList;de=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in ue)return;ue[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const r=document.createElement("link");return r.rel=t?"stylesheet":de,t||(r.as="script",r.crossOrigin=""),r.href=e,document.head.appendChild(r),t?new Promise(((e,t)=>{r.addEventListener("load",e),r.addEventListener("error",t)})):void 0}))).then((()=>e()))};var he=JSON.parse('{"add":"Add","add_bottom":"Add to bottom","add_top":"Add to top","advancement":"Advancement","assets":"Assets","block_definition":"Blockstate","changelog.search":"Search changes","collapse":"Collapse","collapse_all":"Hold %0% to collapse all","configure_layers":"Configure layers","copy":"Copy","copied":"Copied!","copy_context":"Copy context","dimension_type":"Dimension Type","dimension":"Dimension","disabled":"Disabled","download":"Download","duplicate":"Duplicate","enabled":"Enabled","entries_hidden":"%0% entries hidden","entries_hidden.more":"Show %0% more","entries_hidden.all":"Show all","expand":"Expand","expand_all":"Hold %0% to expand all","feature.decorated.decorators":"Decorators","feature.decorated.decorators.entry":"Decorator","follow_reference":"Follow reference","format.json":"JSON","format.yaml":"YAML","fields":"Fields","generate_new_seed":"Generate new seed","github":"GitHub","hide_output":"Hide output","hide_preview":"Hide preview","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.minified":"Minified","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","layer.biomes":"Biomes","layer.temperature":"Temperature","layer.humidity":"Humidity","layer.continentalness":"Continentalness","layer.erosion":"Erosion","layer.weirdness":"Weirdness","layer.offset":"Offset","layer.factor":"Factor","layer.jaggedness":"Jaggedness","loot_table":"Loot Table","model":"Model","more":"More","move_down":"Move down","move_up":"Move up","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","output_settings":"Output settings","predicate":"Predicate","recipe":"Recipe","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme":"Theme","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.changelog":"Technical Changelog","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","title.sounds":"Sound Explorer","presets":"Presets","preview":"Visualize","preview.scale":"Scale","preview.depth":"Depth","preview.factor":"Factor","preview.offset":"Offset","preview.peaks":"Peaks","preview.width":"Width","remove":"Remove","search":"Search","show_output":"Show output","show_preview":"Show preview","sounds.play":"Play","sounds.play_sound":"Play sound","sounds.play_all":"Play all","sounds.search":"Search sounds","sounds.download_function":"Download Mcfunction","sounds.delay":"Delay","sounds.pitch":"Pitch","sounds.volume":"Volume","sounds.copy_command":"Copy command","sounds.add_sound":"Add sound","sounds.remove_sound":"Remove sound","sounds.unknown_sound":"Unknown sound","sounds.loading_sound":"Loading sound","source_placeholder":"Paste raw content here","switch_generator":"Switch generator","terrain_settings":"Terrain settings","undo":"Undo","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/placed_feature":"Placed Feature","worldgen/noise":"Noise","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","zoom_in":"Zoom in","zoom_out":"Zoom out"}'),fe=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:he});const pe={fallback:he};function ge(e,t,...n){var r,a,o,i,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!=(i=null!=(o=null==(r=pe[e])?void 0:r[t])?o:null==(a=pe.en)?void 0:a[t])?i:pe.fallback[t])?s:t,n)}async function _e(e){const t=Z.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../locales/de.json":return me((()=>import("./de.1d005dc8.js")),void 0);case"../locales/en.json":return me((()=>Promise.resolve().then((function(){return fe}))),void 0);case"../locales/es.json":return me((()=>import("./es.d3abba45.js")),void 0);case"../locales/fr.json":return me((()=>import("./fr.f5531eea.js")),void 0);case"../locales/it.json":return me((()=>import("./it.fd9a8268.js")),void 0);case"../locales/ja.json":return me((()=>import("./ja.2d7ab812.js")),void 0);case"../locales/pl.json":return me((()=>import("./pl.3a9fb38c.js")),void 0);case"../locales/pt.json":return me((()=>import("./pt.689bba1d.js")),void 0);case"../locales/ru.json":return me((()=>import("./ru.3104e71e.js")),void 0);case"../locales/sk.json":return me((()=>import("./sk.69c71daa.js")),void 0);case"../locales/zh-cn.json":return me((()=>import("./zh-cn.b233fc7e.js")),void 0);case"../locales/zh-tw.json":return me((()=>import("./zh-tw.298bd51e.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../locales/${e}.json`),r=!1!==t.schemas&&await function(e){switch(e){case"../../node_modules/@mcschema/locales/src/de.json":return me((()=>import("./de.f9c3209c.js")),void 0);case"../../node_modules/@mcschema/locales/src/en.json":return me((()=>import("./en.1c2631bd.js")),void 0);case"../../node_modules/@mcschema/locales/src/es.json":return me((()=>import("./es.c83d9c73.js")),void 0);case"../../node_modules/@mcschema/locales/src/fr.json":return me((()=>import("./fr.e316b1e2.js")),void 0);case"../../node_modules/@mcschema/locales/src/it.json":return me((()=>import("./it.7ff123cd.js")),void 0);case"../../node_modules/@mcschema/locales/src/ja.json":return me((()=>import("./ja.49e40b08.js")),void 0);case"../../node_modules/@mcschema/locales/src/pl.json":return me((()=>import("./pl.ae1f6791.js")),void 0);case"../../node_modules/@mcschema/locales/src/pt.json":return me((()=>import("./pt.31e14993.js")),void 0);case"../../node_modules/@mcschema/locales/src/ru.json":return me((()=>import("./ru.92df5b59.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-cn.json":return me((()=>import("./zh-cn.4129665a.js")),void 0);case"../../node_modules/@mcschema/locales/src/zh-tw.json":return me((()=>import("./zh-tw.292626d0.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../node_modules/@mcschema/locales/src/${e}.json`);pe[e]=s(s({},n.default),r.default)}function ve(e){return"object"==typeof e&&null!==e}const we=e=>("0"+e.toString(16)).substr(-2);function ye(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,we).join("")}function be(){return BigInt(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER))}function ke(e){const t=Math.floor(4294967296*Math.random())-2147483648,n=e.get(new f.Path(["dimensions"]));e.set(new f.Path(["seed"]),t,!0),"object"==typeof n&&null!==n&&Object.keys(n).forEach((n=>{e.set(new f.Path(["dimensions",n,"generator","seed"]),t,!0),e.set(new f.Path(["dimensions",n,"generator","biome_source","seed"]),t,!0)})),e.set(new f.Path(["generator","seed"]),t,!0),e.set(new f.Path(["generator","biome_source","seed"]),t)}function xe(e){let t=0;for(let n=0;n=0&&(e=e.slice(0,t)),Ce(e)}function Me(e){const t=Ae(e).replace(/^\//,"").replace(/\/$/,"");return Z.generators.find((e=>e.url===t))}function ze(e){const t=e.indexOf("?");return t>=0?(e=e.slice(t+1),new Map(e.split("&").map((e=>{const t=e.indexOf("=");return-1===t?[e,"true"]:[decodeURIComponent(e.slice(0,t)),decodeURIComponent(e.slice(t+1))]})))):new Map}function je(e,t){const n=p(),r=ze(n);Object.entries(e).forEach((([e,t])=>{void 0===t?r.delete(e):r.set(e,t)}));const a=Array.from(r).map((([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`));g(`${t?Ce(t):Ae(n)}${0===a.length?"":`?${a.join("&")}`}`,!0)}function $e(e){const t=Math.abs(xe(e));return[t%256,(t>>8)%256,(t>>16)%256]}function Ve(e){return e*e}function Ee(e,t,n){return Math.max(e,Math.min(t,n))}function Ie(e,t,n){return n<0?e:n>1?t:Oe(n,e,t)}function Oe(e,t,n){return t+e*(n-t)}function Le(e){return e instanceof Error?e.message:`${e}`}const Pe=h();function Se(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor!==t.constructor)return!1;let n,r;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(r=0;rasync function(e,t){const n=await(await fetch(`${Te}/${e.id}/index.json`)).json();return(await Promise.all(n.map(((n,r)=>async function(e,t,n,r){return function(e){return e.split("\n\n").map((e=>{const t=e.indexOf("|");return{tags:e.substring(0,t).trim().split(" "),content:e.slice(t+1).trim().replaceAll("->","→").replaceAll("\n...\n","\n\n")}}))}(await(await fetch(`${Te}/${e.id}/${t.id}.md`)).text()).map((a=>s({version:t,group:e,order:1e3*n+r},a)))}(e,He(n),t,r))))).flat()}(He(e),t))))).flat().map((e=>l(s({},e),{tags:[e.group.id,...e.tags]})))}return Ne}function He(e){return"string"==typeof e?{id:e,article:e.match(/\d\dw\d\d[a-z]/)?"minecraft-snapshot-"+e:e.match(/\d+\.\d+(\.\d+)?-pre[0-9]+/)?"minecraft-"+e.replaceAll(".","-").replaceAll("pre","pre-release-"):null}:ve(e)?e:{id:"unknown",article:null}}const Re=["1.15","1.16","1.17","1.18"],Fe={},We={},Je={1.15:_,1.16:v,1.17:w,1.18:y};let Ue,Ge;async function Ye(e){return Fe[e]||(Fe[e]=(async()=>{try{const t=Je[e].getCollections(),n={};await async function(e,t,n){const r=Z.versions.find((t=>t.id===e));if(!r)return void console.error(`[fetchData] Unknown version ${r} in ${JSON.stringify(Z.versions)}`);console.debug(`[fetchData] ${JSON.stringify(r)}`),r.dynamic&&await Promise.all(Qe.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}/${r.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 r of await t.keys())e(r.url)&&n.push(t.delete(r));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v1: ${Le(t)}`)}}((t=>t.startsWith(`${e.url}/${r.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([et(r,t),tt(r,n),nt(r,t),rt(r,t)])}(e,t,n);const r=Je[e].getSchemas(t);return Fe[e]={collections:t,schemas:r,blockStates:n},Fe[e]}catch(t){throw new Error(`Cannot get version "${e}": ${Le(t)}`)}})()),Fe[e]}function qe(e,t,n){const r=Z.versions.findIndex((t=>t.id===e)),a=t?Z.versions.findIndex((e=>e.id===t)):0,o=n?Z.versions.findIndex((e=>e.id===n)):Z.versions.length-1;return a<=r&&r<=o}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`)));const Ze="https://raw.githubusercontent.com/Arcensoth/mcdata",Ke="https://raw.githubusercontent.com/InventivetalentDev/minecraft-assets",Xe="https://raw.githubusercontent.com/SPGoding/vanilla-datapack",Qe=[{id:"mcdata_master",hash:"fb6debdfdffac93686074cc523734f4aed626045",url:Ze},{id:"vanilla_datapack_summary",hash:"d2b06eedd26642f6d93c369b263aca491ec40459",url:Xe}];async function et(e,t){console.debug(`[fetchRegistries] ${e.id}`);const n=Z.registries.filter((e=>!e.dynamic&&!e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));if(qe(e.id,void 0,"1.15")){const a=`${Ze}/${e.refs.mcdata_master}/generated/reports/registries.json`;try{const e=await it(a,(e=>{const t={};return Object.keys(e).forEach((n=>{t[n.slice(10)]=Object.keys(e[n].entries)})),t}));n.forEach((n=>{var r;t.register(n.id,null!=(r=e[n.id])?r:[])}))}catch(r){console.warn("Error occurred while fetching registries:",Le(r))}}else await Promise.all(n.map((async n=>{try{const r=n.path?`${Ze}/${e.refs.mcdata_master}/${n.path}/data.min.json`:`${Ze}/${e.refs.mcdata_master}/processed/reports/registries/${n.id}/data.min.json`;t.register(n.id,await it(r,(e=>e.values)))}catch(r){console.warn(`Error occurred while fetching registry ${n.id}:`,Le(r))}})))}async function tt(e,t){if(console.debug(`[fetchBlockStateMap] ${e.id}`),qe(e.id,void 0,"1.16")){const r=qe(e.id,void 0,"1.15")?`${Ze}/${e.refs.mcdata_master}/generated/reports/blocks.json`:`${Ze}/${e.refs.mcdata_master}/processed/reports/blocks/data.min.json`;try{const e=await it(r,(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:",Le(n))}}else{const r=`${Ze}/${e.refs.mcdata_master}/processed/reports/blocks/simplified/data.min.json`;try{const e=await it(r);Object.assign(t,e)}catch(n){console.warn("Error occurred while fetching block state map:",Le(n))}}}async function nt(e,t){console.debug(`[fetchDynamicRegistries] ${e.id}`);const n=Z.registries.filter((e=>e.dynamic&&!e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));if(qe(e.id,"1.16")){const a=`${Xe}/${e.refs.vanilla_datapack_summary}/summary/flattened.min.json`;try{const e=await it(a);n.forEach((n=>{t.register(n.id,e[n.id])}))}catch(r){console.warn("Error occurred while fetching dynamic registries:",Le(r))}}qe(e.id,"1.18")&&(t.register("worldgen/noise",st),t.register("worldgen/placed_feature",lt))}async function rt(e,t){console.debug(`[fetchAssetsRegistries] ${e.id}`);const n=Z.registries.filter((e=>e.asset)).filter((t=>qe(e.id,t.minVersion,t.maxVersion)));await Promise.all(n.map((async n=>{var r;try{const a=async t=>{const n=`${Ke}/${e.refs.mcassets}/assets/minecraft/${t}/_list.json`,r=await it(n);if(0===r.directories.length)return r.files;const o=await Promise.all(r.directories.map((async e=>(await a(`${t}/${e}`)).map((t=>`${e}/${t}`)))));return[...r.files,...o.flat()]},o=(await a(null!=(r=n.path)?r:n.id)).filter((e=>e.endsWith(".json")||e.endsWith(".png"))).map((e=>`minecraft:${e.replace(/\.(json|png)$/,"")}`));t.register(n.id,o)}catch(a){console.warn(`Error occurred while fetching assets registry ${n.id}:`,Le(a))}})))}async function at(e,t,n){console.debug(`[fetchPreset] ${t} ${n}`);const r=Z.versions.find((t=>t.id===e));try{const a=["blockstates","models"].includes(t)?`${Ke}/${r.refs.mcassets}/assets/minecraft/${t}/${n}.json`:`${Xe}/${r.refs.vanilla_datapack_data}/data/minecraft/${t}/${n}.json`,o=await fetch(a);if("worldgen/noise_settings"===t&&"1.18"===e){let e=await o.text();e=e.replaceAll('"max_threshold": Infinity','"max_threshold": 100');const t=JSON.parse(e);return"overworld"!==n&&"large_biomes"!==n&&(t.noise.terrain_shaper={offset:0,factor:0,jaggedness:0}),t}return await o.json()}catch(a){throw new Error(`Error occurred while fetching ${t} preset ${n}: ${Le(a)}`)}}function ot(e){return`https://misode-cors-anywhere.herokuapp.com/https://resources.download.minecraft.net/${e.slice(0,2)}/${e}`}async function it(e,t=(e=>e)){try{const n=await caches.open("misode-v1");console.debug(`[getData] Opened cache misode-v1 ${e}`);const r=await n.match(e);if(r&&r.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await r.json();console.debug(`[getData] fetching data ${e}`);const a=await fetch(e),o=t(await a.json());return await n.put(e,new Response(JSON.stringify(o))),o}catch(n){console.warn(`[getData] Failed to open cache misode-v1: ${Le(n)}`),console.debug(`[getData] fetching data ${e}`);const r=await fetch(e);return t(await r.json())}}const st=["minecraft:aquifer_barrier","minecraft:aquifer_fluid_level_floodedness","minecraft:aquifer_fluid_level_spread","minecraft:aquifer_lava","minecraft:badlands_pillar","minecraft:badlands_pillar_roof","minecraft:badlands_surface","minecraft:calcite","minecraft:cave_cheese","minecraft:cave_entrance","minecraft:cave_layer","minecraft:clay_bands_offset","minecraft:continentalness","minecraft:continentalness_large","minecraft:erosion","minecraft:erosion_large","minecraft:gravel","minecraft:gravel_layer","minecraft:ice","minecraft:iceberg_pillar","minecraft:iceberg_pillar_roof","minecraft:iceberg_surface","minecraft:jagged","minecraft:nether_state_selector","minecraft:nether_wart","minecraft:netherrack","minecraft:noodle","minecraft:noodle_ridge_a","minecraft:noodle_ridge_b","minecraft:noodle_thickness","minecraft:offset","minecraft:ore_gap","minecraft:ore_vein_a","minecraft:ore_vein_b","minecraft:ore_veininess","minecraft:packed_ice","minecraft:patch","minecraft:pillar","minecraft:pillar_rareness","minecraft:pillar_thickness","minecraft:powder_snow","minecraft:ridge","minecraft:soul_sand_layer","minecraft:spaghetti_2d","minecraft:spaghetti_2d_elevation","minecraft:spaghetti_2d_modulator","minecraft:spaghetti_2d_thickness","minecraft:spaghetti_3d_1","minecraft:spaghetti_3d_2","minecraft:spaghetti_3d_rarity","minecraft:spaghetti_3d_thickness","minecraft:spaghetti_roughness","minecraft:spaghetti_roughness_modulator","minecraft:surface","minecraft:surface_secondary","minecraft:surface_swamp","minecraft:temperature","minecraft:temperature_large","minecraft:vegetation","minecraft:vegetation_large"],lt=["minecraft:acacia_checked","minecraft:amethyst_geode","minecraft:bamboo","minecraft:bamboo_light","minecraft:bamboo_vegetation","minecraft:basalt_blobs","minecraft:basalt_pillar","minecraft:birch_bees_0002","minecraft:birch_bees_002","minecraft:birch_checked","minecraft:birch_tall","minecraft:blackstone_blobs","minecraft:blue_ice","minecraft:brown_mushroom_nether","minecraft:brown_mushroom_normal","minecraft:brown_mushroom_old_growth","minecraft:brown_mushroom_swamp","minecraft:brown_mushroom_taiga","minecraft:cave_vines","minecraft:chorus_plant","minecraft:classic_vines_cave_feature","minecraft:crimson_forest_vegetation","minecraft:crimson_fungi","minecraft:dark_forest_vegetation","minecraft:dark_oak_checked","minecraft:delta","minecraft:desert_well","minecraft:disk_clay","minecraft:disk_gravel","minecraft:disk_sand","minecraft:dripstone_cluster","minecraft:end_gateway_return","minecraft:end_island_decorated","minecraft:end_spike","minecraft:fancy_oak_bees","minecraft:fancy_oak_bees_0002","minecraft:fancy_oak_bees_002","minecraft:fancy_oak_checked","minecraft:flower_default","minecraft:flower_flower_forest","minecraft:flower_forest_flowers","minecraft:flower_meadow","minecraft:flower_plain","minecraft:flower_swamp","minecraft:flower_warm","minecraft:forest_flowers","minecraft:forest_rock","minecraft:fossil_lower","minecraft:fossil_upper","minecraft:freeze_top_layer","minecraft:glow_lichen","minecraft:glowstone","minecraft:glowstone_extra","minecraft:grass_bonemeal","minecraft:ice_patch","minecraft:ice_spike","minecraft:iceberg_blue","minecraft:iceberg_packed","minecraft:jungle_bush","minecraft:jungle_tree","minecraft:kelp_cold","minecraft:kelp_warm","minecraft:lake_lava_surface","minecraft:lake_lava_underground","minecraft:large_basalt_columns","minecraft:large_dripstone","minecraft:lush_caves_ceiling_vegetation","minecraft:lush_caves_clay","minecraft:lush_caves_vegetation","minecraft:mega_jungle_tree_checked","minecraft:mega_pine_checked","minecraft:mega_spruce_checked","minecraft:monster_room","minecraft:monster_room_deep","minecraft:mushroom_island_vegetation","minecraft:nether_sprouts","minecraft:oak_bees_0002","minecraft:oak_bees_002","minecraft:oak_checked","minecraft:ore_ancient_debris_large","minecraft:ore_andesite_lower","minecraft:ore_andesite_upper","minecraft:ore_blackstone","minecraft:ore_clay","minecraft:ore_coal_lower","minecraft:ore_coal_upper","minecraft:ore_copper","minecraft:ore_copper_large","minecraft:ore_debris_small","minecraft:ore_diamond","minecraft:ore_diamond_buried","minecraft:ore_diamond_large","minecraft:ore_diorite_lower","minecraft:ore_diorite_upper","minecraft:ore_dirt","minecraft:ore_emerald","minecraft:ore_gold","minecraft:ore_gold_deltas","minecraft:ore_gold_extra","minecraft:ore_gold_lower","minecraft:ore_gold_nether","minecraft:ore_granite_lower","minecraft:ore_granite_upper","minecraft:ore_gravel","minecraft:ore_gravel_nether","minecraft:ore_infested","minecraft:ore_iron_middle","minecraft:ore_iron_small","minecraft:ore_iron_upper","minecraft:ore_lapis","minecraft:ore_lapis_buried","minecraft:ore_magma","minecraft:ore_quartz_deltas","minecraft:ore_quartz_nether","minecraft:ore_redstone","minecraft:ore_redstone_lower","minecraft:ore_soul_sand","minecraft:ore_tuff","minecraft:patch_berry_common","minecraft:patch_berry_rare","minecraft:patch_cactus_decorated","minecraft:patch_cactus_desert","minecraft:patch_crimson_roots","minecraft:patch_dead_bush","minecraft:patch_dead_bush_2","minecraft:patch_dead_bush_badlands","minecraft:patch_fire","minecraft:patch_grass_badlands","minecraft:patch_grass_forest","minecraft:patch_grass_jungle","minecraft:patch_grass_normal","minecraft:patch_grass_plain","minecraft:patch_grass_savanna","minecraft:patch_grass_taiga","minecraft:patch_grass_taiga_2","minecraft:patch_large_fern","minecraft:patch_melon","minecraft:patch_pumpkin","minecraft:patch_soul_fire","minecraft:patch_sugar_cane","minecraft:patch_sugar_cane_badlands","minecraft:patch_sugar_cane_desert","minecraft:patch_sugar_cane_swamp","minecraft:patch_sunflower","minecraft:patch_tall_grass","minecraft:patch_tall_grass_2","minecraft:patch_waterlily","minecraft:pine_checked","minecraft:pine_on_snow","minecraft:pointed_dripstone","minecraft:red_mushroom_nether","minecraft:red_mushroom_normal","minecraft:red_mushroom_old_growth","minecraft:red_mushroom_swamp","minecraft:red_mushroom_taiga","minecraft:rooted_azalea_tree","minecraft:sea_pickle","minecraft:seagrass_cold","minecraft:seagrass_deep","minecraft:seagrass_deep_cold","minecraft:seagrass_deep_warm","minecraft:seagrass_normal","minecraft:seagrass_river","minecraft:seagrass_simple","minecraft:seagrass_swamp","minecraft:seagrass_warm","minecraft:small_basalt_columns","minecraft:spore_blossom","minecraft:spring_closed","minecraft:spring_closed_double","minecraft:spring_delta","minecraft:spring_lava","minecraft:spring_lava_frozen","minecraft:spring_open","minecraft:spring_water","minecraft:spruce_checked","minecraft:spruce_on_snow","minecraft:super_birch_bees","minecraft:super_birch_bees_0002","minecraft:trees_badlands","minecraft:trees_birch","minecraft:trees_birch_and_oak","minecraft:trees_flower_forest","minecraft:trees_grove","minecraft:trees_jungle","minecraft:trees_meadow","minecraft:trees_old_growth_pine_taiga","minecraft:trees_old_growth_spruce_taiga","minecraft:trees_plains","minecraft:trees_savanna","minecraft:trees_snowy","minecraft:trees_sparse_jungle","minecraft:trees_swamp","minecraft:trees_taiga","minecraft:trees_water","minecraft:trees_windswept_forest","minecraft:trees_windswept_hills","minecraft:trees_windswept_savanna","minecraft:twisting_vines","minecraft:underwater_magma","minecraft:vines","minecraft:void_start_platform","minecraft:warm_ocean_vegetation","minecraft:warped_forest_vegetation","minecraft:warped_fungi","minecraft:weeping_vines"];let ct=null;const dt={},ut={};async function mt(){return ct||(ct=async function(){try{const e=await fetch("https://launchermeta.mojang.com/mc/game/version_manifest.json");return await e.json()}catch(e){throw new Error(`Error occurred while fetching version manifest: ${Le(e)}`)}}()),ct}async function ht(e){return dt[e]||(dt[e]=(async()=>{const t=await mt();return await async function(e,t){var n;const r=Z.versions.find((t=>t.id===e)),a=null!=(n=null==r?void 0:r.latest)?n:t.latest.snapshot;try{const e=await it(t.versions.find((e=>e.id===a)).url);return(await it(e.assetIndex.url)).objects}catch(o){throw new Error(`Error occurred while fetching assets for ${r}: ${Le(o)}`)}}(e,t)})()),dt[e]}async function ft(e){return ut[e]||(ut[e]=(async()=>{const t=await ht(e);return await async function(e,t){try{const e=t["minecraft/sounds.json"].hash;return await it(ot(e))}catch(n){throw new Error(`Error occurred while fetching sounds for ${e}: ${Le(n)}`)}}(e,t)})()),ut[e]}let pt=!1;const gt={temperature:[-1,1],humidity:[-1,1],continentalness:[-1.1,1],erosion:[-1,1],weirdness:[-1,1],offset:[-1,1],factor:[0,12],jaggedness:[0,1]};let _t,vt;async function wt(e,t){const n=[e,t.octaves,t.shaper.toJson(),`${t.seed}`,t.version];return Se(n,_t)||(_t=Pe(n),vt=await async function(e,t){var n,r,a,o,i;switch(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,"")){case"fixed":return new j(e.biome);case"checkerboard":const n=(null!=(r=e.scale)?r:2)+2,l=null!=(o=null==(a=e.biomes)?void 0:a.length)?o:0;return{getBiome(t,r,a){var o;const i=(((t>>n)+(a>>n))%l+l)%l;return null==(o=e.biomes)?void 0:o[i].node}};case"multi_noise":switch(null==(i=e.preset)?void 0:i.replace(/^minecraft:/,"")){case"nether":e="1.18"===t.version?xt:kt;break;case"overworld":e="1.18"===t.version?await async function(){return(await at("1.18","dimension","overworld")).generator.biome_source}():e}if(e=f.DataModel.unwrapLists(e),"1.18"===t.version){await async function(){pt||(await $(V),pt=!0,console.debug(`Loaded deepslate-rs from "${V}"`))}();const n=new De,r=e=>"number"==typeof e?[e,e]:e,[a,o,i,l,c,d,u,m,h,f,p,g,_,v]=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];for(const t of e.biomes){const{temperature:e,humidity:s,continentalness:w,erosion:y,weirdness:b,depth:k,offset:x}=t.parameters;a.push(r(e)[0]),o.push(r(e)[1]),i.push(r(s)[0]),l.push(r(s)[1]),c.push(r(w)[0]),d.push(r(w)[1]),u.push(r(y)[0]),m.push(r(y)[1]),h.push(r(b)[0]),f.push(r(b)[1]),p.push(r(k)[0]),g.push(r(k)[1]),_.push(x),v.push(n.getOrPut(t.biome,Math.floor(2147483647*Math.random())))}const w=b(new Float64Array(a),new Float64Array(o),new Float64Array(i),new Float64Array(l),new Float64Array(c),new Float64Array(d),new Float64Array(u),new Float64Array(m),new Float64Array(h),new Float64Array(f),new Float64Array(p),new Float64Array(g),new Float64Array(_),new Int32Array(v)),y=k(t.seed,t.octaves.temperature.firstOctave,new Float64Array(t.octaves.temperature.amplitudes),t.octaves.humidity.firstOctave,new Float64Array(t.octaves.humidity.amplitudes),t.octaves.continentalness.firstOctave,new Float64Array(t.octaves.continentalness.amplitudes),t.octaves.erosion.firstOctave,new Float64Array(t.octaves.erosion.amplitudes),t.octaves.weirdness.firstOctave,new Float64Array(t.octaves.weirdness.amplitudes),t.octaves.shift.firstOctave,new Float64Array(t.octaves.shift.amplitudes));return{getBiome(e,t,r){var a;const o=x(w,y,e,e+1,1,t,t+1,1,r,r+1,1);return null!=(a=n.getA(o[0]))?a:"unknown"},getBiomes:(e,t,r,a,o,i,s,l,c)=>[...x(w,y,e,t,r,a,o,i,s,l,c)].map((e=>{var t;return null!=(t=n.getA(e))?t:"unknown"})),getClimate(e,n,r,a,o,i,l,c,d,u){const m=C(y,n,r,a,o,i,l,c,d,u),h=[];for(let f=0;f{var a;const o=e[`${n}_noise`];return o.firstOctave=Ee(null!=(a=o.firstOctave)?a:-7,-100,-1),new M(new z(t.seed+BigInt(r)),o)}));return Array.isArray(e.biomes)&&0!==e.biomes.length?{getBiome(t,r,a){const o=n.map((e=>e.sample(t,a,0)));let i=1/0,s="";for(const{biome:n,parameters:l}of e.biomes){const e=Ve(l.altitude-o[0])+Ve(l.temperature-o[1])+Ve(l.humidity-o[2])+Ve(l.weirdness-o[3])+Ve(l.offset);er.nextFloat(),nextInt:e=>r.nextInt(e),sampleInt(e){return $t(e,this)}};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],r=s{It(t,null==e?void 0:e.decorator,n).forEach((t=>Et(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{Et(t,n.nextFloat()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var r,a;for(const o of null!=(r=null==e?void 0:e.features)?r:[])if(n.nextFloat()<(null!=(a=null==o?void 0:o.chance)?a:0))return void Et(t,o.feature,n);Et(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var r,a,o;Et(t,null==(o=null==e?void 0:e.features)?void 0:o[n.nextInt(null!=(a=null==(r=null==e?void 0:e.features)?void 0:r.length)?a:0)],n)}},Lt={chance:(e,t,n)=>{var r;return n.nextFloat()<1/(null!=(r=null==e?void 0:e.chance)?r:1)?[t]:[]},count:(e,t,n)=>{var r;return new Array(n.sampleInt(null!=(r=null==e?void 0:e.count)?r:1)).fill(t)},count_extra:(e,t,n)=>{var r,a;let o=null!=(r=null==e?void 0:e.count)?r:1;return n.nextFloat(){var r;return new Array(n.sampleInt(null!=(r=null==e?void 0:e.count)?r:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)]))},count_noise:(e,t,n)=>{const r=n.biomeInfoNoise.sample(t[0]/200,0,t[2]/200){var r;const a=Math.max(1,e.noise_factor),o=n.biomeInfoNoise.sample(t[0]/a,0,t[2]/a),i=Math.max(0,Math.ceil((o+(null!=(r=e.noise_offset)?r:0))*e.noise_to_count_ratio));return new Array(i).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,r)=>{const a=4*Math.floor(r/4)+1+n.nextInt(3)+t[0];return[a,Math.max(n.seaLevel,Ct[Ee(0,63,a)]),4*Math.floor(r%4)+1+n.nextInt(3)+t[2]]})),decorated:(e,t,n)=>It(t,null==e?void 0:e.outer,n).flatMap((t=>It(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var r,a,o,i;return jt(t,n.nextInt(null!=(r=null==e?void 0:e.spread)?r:0)+n.nextInt(null!=(a=null==e?void 0:e.spread)?a:0)-(null!=(o=e.spread)?o:0)+(null!=(i=null==e?void 0:e.baseline)?i:0))},emerald_ore:(e,t,n)=>{const r=3+n.nextInt(6);return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),4+n.nextInt(28),t[2]+n.nextInt(16)]))},fire:(e,t,n)=>{const r=1+n.nextInt(n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},glowstone:(e,t,n)=>{const r=n.nextInt(1+n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(r)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},heightmap:(e,t,n)=>jt(t,Math.max(n.seaLevel,Ct[Ee(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>{const r=Math.max(n.seaLevel,Ct[Ee(0,63,t[0])]);return jt(t,n.nextInt(2*r))},heightmap_world_surface:(e,t,n)=>jt(t,Math.max(n.seaLevel,Ct[Ee(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+n.nextInt(8),t[1],t[2]+4+n.nextInt(8)]],lava_lake:(e,t,n)=>{var r,a;if(0===n.nextInt((null!=(r=e.chance)?r:1)/10)){const r=n.nextInt(n.nextInt(248)+8);if(r[t],range:(e,t,n)=>{var r,a,o;return jt(t,n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0))},range_biased:(e,t,n)=>{var r,a,o;return jt(t,n.nextInt(n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0)))},range_very_biased:(e,t,n)=>{var r,a,o,i;return jt(t,n.nextInt(n.nextInt(n.nextInt((null!=(r=null==e?void 0:e.maximum)?r:1)-(null!=(a=null==e?void 0:e.top_offset)?a:0))+(null!=(o=null==e?void 0:e.bottom_offset)?o:0))+(null!=(i=null==e?void 0:e.bottom_offset)?i:0)))},spread_32_above:(e,t,n)=>jt(t,n.nextInt(t[1]+32)),top_solid_heightmap:(e,t)=>jt(t,Ct[Ee(0,63,t[0])]),magma:(e,t,n)=>jt(t,n.nextInt(t[1]+32)),square:(e,t,n)=>[[t[0]+n.nextInt(16),t[1],t[2]+n.nextInt(16)]],surface_relative_threshold:(e,t)=>{var n,r;const a=Ct[Ee(0,63,t[0])],o=a+(null!=(n=null==e?void 0:e.min_inclusive)?n:-1/0),i=a+(null!=(r=null==e?void 0:e.max_inclusive)?r:1/0);return t[1]i?[t]:[]},water_lake:(e,t,n)=>{var r;return 0===n.nextInt(null!=(r=e.chance)?r:1)?[[t[0]+n.nextInt(16),n.nextInt(256),t[2]+n.nextInt(16)]]:[]}};class Pt{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0;const t=new z(e);this.minLimitPerlinNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.maxLimitPerlinNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.mainPerlinNoise=new E(t,-7,[1,1,1,1,1,1,1,1]),this.depthNoise=new E(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])}reset(e,t,n,r,a){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(a).fill(null),this.xOffset=r}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),r=Math.floor(e%this.chunkWidth)/this.chunkWidth,a=this.fillNoiseColumn(n),o=this.fillNoiseColumn(n+1);for(let m=this.chunkCountY-1;m>=0;m-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[m*this.chunkHeight+e]=(i=n,s=r,l=a[m],c=a[m+1],d=o[m],u=o[m+1],Oe(s,Oe(i,l,c),Oe(i,d,u)))}var i,s,l,c,d,u;return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),r=684.412*this.settings.sampling.xz_scale,a=684.412*this.settings.sampling.y_scale,o=r/this.settings.sampling.xz_factor,i=a/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,r,a,o,i);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=Ie(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=Ie(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.sample(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,r,a,o,i){let s=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const m=E.wrap(e*r*d),h=E.wrap(t*a*d),f=E.wrap(n*r*d),p=a*d,g=this.minLimitPerlinNoise.getOctaveNoise(u);g&&(s+=g.sample(m,h,f,p,t*p)/d);const _=this.maxLimitPerlinNoise.getOctaveNoise(u);if(_&&(l+=_.sample(m,h,f,p,t*p)/d),u<8){const r=this.mainPerlinNoise.getOctaveNoise(u);r&&(c+=r.sample(E.wrap(e*o*d),E.wrap(t*i*d),E.wrap(n*o*d),i*d,t*i*d)/d)}d/=2}return Ie(s/512,l/512,(c/10+1)/2)}}const St={"minecraft:air":[150,160,170],"minecraft:water":[20,80,170],"minecraft:lava":[200,100,0],"minecraft:stone":[50,50,50],"minecraft:netherrack":[100,40,40],"minecraft:end_stone":[200,200,140]};let Dt,Tt,Nt=[];function Bt(e,t,n){var r,a,o;if(qe(n.version,"1.18")){const{settings:a,generator:o}=function(e,t){const n=I.fromJson(f.DataModel.unwrapLists(e));n.octaves=Ut(n);const r=[e,`${t.seed}`];if(!Se(r,Dt)){Dt=Pe(r),Nt=[];const e=new j("unknown");Tt=new O(t.seed,e,n)}return{settings:n,generator:Tt}}(e,n),i=new Rt(-n.offset,n.width,a.noise.minY,a.noise.height);i.fill(o);const s=t.data;for(let e=0;e0?0:e[t+1]>0?150:255}class Rt{constructor(e,t,n,r){this.minX=e,this.filled=[],this.chunks=[...Array(Math.ceil(t/16)+1)].map(((t,a)=>{const o=(e>>4)+a,i=Nt.find((e=>e.pos[0]===o));return i?(this.filled[a]=!0,i):new L(n,r,P.create(o,0))}))}fill(e){this.chunks.forEach(((t,n)=>{this.filled[n]||(e.fill(t),this.filled[n]=!0,Nt.push(t))}))}getBlockState(e){const t=(e[0]>>4)-(this.minX>>4);return this.chunks[t].getBlockState(e)}}const Ft=["biomes","temperature","humidity","continentalness","erosion","weirdness","offset","factor","jaggedness"],Wt=A.overworld(),Jt=({model:e,data:t,shown:n,lang:r,version:a})=>{var o;const[i,s]=m(2),[l,h]=m(void 0),[p,g]=m(new Set(["biomes"])),_=u([0,0]),v=u(1),w=u(void 0),y=BigInt(e.get(new f.Path(["generator","seed"]))),b=Ut(e.get(new f.Path(["generator","settings"]))),k=function(e){var t;if("string"==typeof e)switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return Wt;default:return A.fromJson({offset:0,factor:0,jaggedness:0})}return A.fromJson(f.DataModel.unwrapLists(null==(t=null==e?void 0:e.noise)?void 0:t.terrain_shaper))}(e.get(new f.Path(["generator","settings"]))),x=n?function(e,t,n){return JSON.stringify([e,t,n.toJson()])}(t,b,k):"",C=null==(o=t.type)?void 0:o.replace(/^minecraft:/,""),{canvas:M,redraw:z}=ee({size:()=>[200/v.current,200/v.current],async draw(e){const n={octaves:b,shaper:k,biomeColors:{},layers:p,offset:_.current,scale:i,seed:y,res:v.current,version:a};await async function(e,t,n){var r,a,o;const{biomeSource:i}=await wt(e,n),s=t.data,l=-Math.round(n.offset[0])-100+n.res/2,c=-Math.round(n.offset[1])-100+n.res/2,d=4*t.width/n.res,u=4/n.res,m=[l*n.scale,(200+l)*n.scale,n.res*n.scale],h=[c*n.scale,(200+c)*n.scale,n.res*n.scale],f=n.layers.has("biomes")?null==(r=i.getBiomes)?void 0:r.call(i,...m,64,65,1,...h):void 0,p=[...n.layers].filter((e=>"biomes"!==e)),g=0===p.length||null==(a=i.getClimate)?void 0:a.call(i,new Set(p),...m,64,65,1,...h);for(let _=0;_<200;_+=n.res)for(let e=0;e<200;e+=n.res){const t=e*d+_*u,r=_/n.res*200/n.res+e/n.res,a=(_+l)*n.scale,m=(e+c)*n.scale;let h=[50,50,50];if(n.layers.has("biomes"))h=yt(null!=(o=null==f?void 0:f[r])?o:i.getBiome(a,64,m),n.biomeColors);else if(g&&p[0]){const e=g[r][p[0]],[t,n]=gt[p[0]],a=(e-t)/(n-t)*256;h=[a,a,a]}s[t]=h[0],s[t+1]=h[1],s[t+2]=h[2],s[t+3]=255}}(t,e,n),4===v.current&&(clearTimeout(w.current),w.current=setTimeout((()=>{v.current=1,z()}),150))},async onDrag(e,t){_.current[0]=_.current[0]+200*e,_.current[1]=_.current[1]+200*t,clearTimeout(w.current),v.current="multi_noise"===C?4:1,z()},async onHover(e,n){const r={octaves:b,shaper:k,biomeColors:{},layers:p,offset:_.current,scale:i,seed:y,res:1,version:a},o=await async function(e,t,n,r){const{biomeSource:a}=await wt(e,r),[o,i]=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],r);return a.getBiome(o,64,i)}(t,Math.floor(200*e),Math.floor(200*n),r);h(o)},onLeave(){h(void 0)}},[x,i,y,p]);c((()=>{n&&(v.current="multi_noise"===C?4:1,z())}),[x,i,y,p,n]);const j=e=>{_.current[0]=_.current[0]*i/e,_.current[1]=_.current[1]*i/e,s(e)};return d(D,null,d("div",{class:"controls"},l&&d(X,{label:l,class:"no-pointer"}),"multi_noise"===C&&d(re,{icon:"stack",tooltip:ge(r,"configure_layers")},Ft.map((e=>{const t=p.has(e);return d(X,{label:ge(r,`layer.${e}`),active:t,tooltip:ge(r,t?"enabled":"disabled"),onClick:t=>{g(new Set([e])),t.stopPropagation()}})}))),("multi_noise"===C||"checkerboard"===C)&&d(D,null,d(X,{icon:"dash",tooltip:ge(r,"zoom_out"),onClick:()=>j(1.5*i)}),d(X,{icon:"plus",tooltip:ge(r,"zoom_in"),onClick:()=>j(i/1.5)})),"multi_noise"===C&&d(X,{icon:"sync",tooltip:ge(r,"generate_new_seed"),onClick:()=>ke(e)})),d("canvas",{ref:M,width:"200",height:"200"}))};function Ut(e){if("string"!=typeof e){const t=I.fromJson(f.DataModel.unwrapLists(e));e=0===t.noise.densityFactor&&-.030078125===t.noise.densityOffset?"minecraft:nether":"minecraft:overworld"}switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return{temperature:{firstOctave:-9,amplitudes:[1.5,0,1,0,0,0]},humidity:{firstOctave:-7,amplitudes:[1,1,0,0,0,0]},continentalness:{firstOctave:-9,amplitudes:[1,1,2,2,2,1,1,1,1]},erosion:{firstOctave:-9,amplitudes:[1,1,0,1,1]},weirdness:{firstOctave:-7,amplitudes:[1,2,1,0,0,0]},shift:{firstOctave:-3,amplitudes:[1,1,1,0]}};case"end":case"floating_islands":return{temperature:{firstOctave:0,amplitudes:[0]},humidity:{firstOctave:0,amplitudes:[0]},continentalness:{firstOctave:0,amplitudes:[0]},erosion:{firstOctave:0,amplitudes:[0]},weirdness:{firstOctave:0,amplitudes:[0]},shift:{firstOctave:0,amplitudes:[0]}};default:return{temperature:{firstOctave:-7,amplitudes:[1,1]},humidity:{firstOctave:-7,amplitudes:[1,1]},continentalness:{firstOctave:-7,amplitudes:[1,1]},erosion:{firstOctave:-7,amplitudes:[1,1]},weirdness:{firstOctave:-7,amplitudes:[1,1]},shift:{firstOctave:0,amplitudes:[0]}}}}const Gt=({data:e,version:t,shown:n,lang:r})=>{const[a,o]=m(4),[i,s]=m(be()),{canvas:l,redraw:u}=ee({size:()=>[16*a,16*a],async draw(n){Mt(e,n,{seed:i,version:t,size:[16*a,128,16*a]})}}),h=JSON.stringify(e);return c((()=>{n&&u()}),[h,a,i,n]),d(D,null,d("div",{class:"controls"},d(X,{icon:"dash",tooltip:ge(r,"zoom_out"),onClick:()=>o(Math.min(16,a+1))}),d(X,{icon:"plus",tooltip:ge(r,"zoom_in"),onClick:()=>o(Math.max(1,a-1))}),d(X,{icon:"sync",tooltip:ge(r,"generate_new_seed"),onClick:()=>s(be())})),d("canvas",{ref:l,width:"64",height:"64"}))},Yt=({lang:e,data:t,shown:n,version:r})=>{const[a,o]=m(be()),[i,s]=m(2),l=u([0,0]),h=JSON.stringify([t]),{canvas:p,redraw:g}=ee({size:()=>[256,256],async draw(e){const n={offset:l.current,scale:i,seed:a,version:r};!function(e,t,n){const r=new z(n.seed),a=S.fromJson(f.DataModel.unwrapLists(e)),o=new M(r,a),i=-n.offset[0]-100,s=-n.offset[1]-100,l=t.data;for(let c=0;c<256;c+=1)for(let e=0;e<256;e+=1){const t=4*c+4*e*256,r=(c+i)*n.scale,a=(e+s)*n.scale,d=128*(o.sample(r,a,0)+1);l[t]=d,l[t+1]=d,l[t+2]=d,l[t+3]=255}}(t,e,n)},async onDrag(e,t){l.current[0]=l.current[0]+256*e,l.current[1]=l.current[1]+256*t,g()}},[h,i,a]);c((()=>{n&&g()}),[h,i,a,n]);const _=e=>{l.current[0]=l.current[0]*i/e,l.current[1]=l.current[1]*i/e,s(e)};return d(D,null,d("div",{class:"controls"},d(X,{icon:"dash",tooltip:ge(e,"zoom_out"),onClick:()=>_(1.5*i)}),d(X,{icon:"plus",tooltip:ge(e,"zoom_in"),onClick:()=>_(i/1.5)}),d(X,{icon:"sync",tooltip:ge(e,"generate_new_seed"),onClick:()=>o(be())})),d("canvas",{ref:p,width:"256",height:"256"}))},qt=({lang:e,data:t,shown:n,version:r})=>{var a,o;const i=ge.bind(null,e),[s,l]=m(be()),[h,f]=m(.2),[p,g]=m(.1),[_,v]=m(void 0),w=u(0),y=JSON.stringify([t,h,p]),b=null!=(o=null==(a=null==t?void 0:t.noise)?void 0:a.height)?o:256,{canvas:k,redraw:x}=ee({size:()=>[b,b],async draw(e){const n={biomeDepth:p,biomeScale:h,offset:w.current,width:e.width,seed:s,version:r};Bt(t,e,n)},async onDrag(e){w.current+=e*b,x()},async onHover(e,n){var r,a;const o=b-Math.max(1,Math.ceil(n*b))+(null!=(a=null==(r=null==t?void 0:t.noise)?void 0:r.min_y)?a:0);v(`${o}`)},onLeave(){v(void 0)}},[y,s]);return c((()=>{n&&x()}),[y,s,n]),d(D,null,d("div",{class:"controls"},_&&d(X,{label:`Y = ${_}`,class:"no-pointer"}),qe(r,void 0,"1.17")&&d(re,{icon:"gear",tooltip:ge(e,"terrain_settings")},d(Q,{label:i("preview.scale"),value:`${h}`,onChange:e=>f(Number(e))}),d(Q,{label:i("preview.depth"),value:`${p}`,onChange:e=>g(Number(e))})),d(X,{icon:"sync",tooltip:ge(e,"generate_new_seed"),onClick:()=>l(be())})),d("canvas",{ref:k,width:b,height:b}))},Zt=["dimension","worldgen/noise","worldgen/noise_settings","worldgen/configured_feature"];function Kt({lang:e,model:t,version:n,id:r,shown:a}){var o;const[,i]=m(0);if(ne(t,(()=>{i((e=>e+1))})),"dimension"===r&&(null==(o=null==t?void 0:t.get(new f.Path(["generator","type"])))?void 0:o.endsWith("noise"))){const r=t.get(new f.Path(["generator","biome_source"]));if(r)return d(Jt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/noise"===r&&t){const r=t.get(new f.Path([]));if(r)return d(Yt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/noise_settings"===r&&t){const r=t.get(new f.Path([]));if(r)return d(qt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}if("worldgen/configured_feature"===r&&t){const r=t.get(new f.Path([]));if(r)return d(Gt,s({},{lang:e,model:t,version:n,shown:a,data:r}))}return d(D,null)}const Xt={base:({},e,t)=>t,choice({switchNode:e},t,n,r){return e.hook(this,t,n,r)},list({children:e},t,n,r){if(!Array.isArray(n))return n;const a=n.map(((n,a)=>e.hook(this,t.push(a),n.node,r)));for(const o of Object.getOwnPropertySymbols(n))a[o]=n[o];return a},map({children:e,config:t},n,r,a){var o,i;if(void 0===r)return;const s="block_state_map"===(null==(o=t.validation)?void 0:o.validator)?null==(i=a.blockStates)?void 0:i[f.relativePath(n,t.validation.params.id).get()]:null,l={};Object.keys(r).forEach((t=>{var o;s&&!Object.keys(null!=(o=s.properties)?o:{}).includes(t)||(l[t]=e.hook(this,n.push(t),r[t],a))}));for(const c of Object.getOwnPropertySymbols(r))l[c]=r[c];return l},object({getActiveFields:e},t,n,r){if(null==n||"object"!=typeof n)return n;const a={},o=e(t);Object.keys(o).filter((e=>o[e].enabled(t))).forEach((e=>{const i=o[e].hook(this,t.push(e),n[e],r);null!=i&&(a[e]=i)}));for(const i of Object.getOwnPropertySymbols(n))a[i]=n[i];return a}};var Qt,en;(en=Qt||(Qt={})).ID_LANGUAGE="language",en.ID_THEME="theme",en.ID_VERSION="schema_version",en.ID_INDENT="indentation",en.ID_FORMAT="output_format",en.ID_SOUNDS_VERSION="minecraft_sounds_version",en.getLanguage=function(){var e;return null!=(e=localStorage.getItem(en.ID_LANGUAGE))?e:"en"},en.getTheme=function(){var e;return null!=(e=localStorage.getItem(en.ID_THEME))?e:"dark"},en.getVersion=function(){const e=localStorage.getItem(en.ID_VERSION);return e&&Re.includes(e)?e:"1.17"},en.getIndent=function(){var e;return null!=(e=localStorage.getItem(en.ID_INDENT))?e:"2_spaces"},en.getFormat=function(){var e;return null!=(e=localStorage.getItem(en.ID_FORMAT))?e:"json"},en.getSoundsVersion=function(){var e;return null!=(e=localStorage.getItem(en.ID_SOUNDS_VERSION))?e:"latest"},en.setLanguage=function(e){e&&localStorage.setItem(en.ID_LANGUAGE,e)},en.setTheme=function(e){e&&localStorage.setItem(en.ID_THEME,e)},en.setVersion=function(e){e&&localStorage.setItem(en.ID_VERSION,e)},en.setIndent=function(e){e&&localStorage.setItem(en.ID_INDENT,e)},en.setFormat=function(e){e&&localStorage.setItem(en.ID_FORMAT,e)},en.setSoundsVersion=function(e){e&&localStorage.setItem(en.ID_SOUNDS_VERSION,e)};const tn={"2_spaces":2,"4_spaces":4,tabs:"\t",minified:void 0},nn={json:{parse:N.parse,stringify:(e,t)=>N.stringify(e,null,t)},yaml:{parse:B.load,stringify:(e,t)=>B.dump(e,{flowLevel:void 0===t?0:-1,indent:"string"==typeof t?4:t})}};function rn({lang:e,name:t,model:n,blockStates:r,doCopy:a,doDownload:o,doImport:i,copySuccess:s,onError:l}){const h=ge.bind(null,e),[p,g]=m(Qt.getIndent()),[_,v]=m(Qt.getFormat()),w=u(null),y=u(null),b=u(),k=T(((e,t)=>{const n=e.schema.hook(Xt,new f.ModelPath(e),e.data,{blockStates:t});return nn[_].stringify(n,tn[p])+"\n"}),[p,_]);c((()=>{b.current=()=>{if(n&&r)try{const e=k(n,r);e.length>=1e4?w.current.value=e.slice(0,1e4)+"\n\nOutput is too large to display (+10000 chars)\nExport to view complete output\n\n":w.current.value=e}catch(e){l(`Error getting JSON output: ${Le(e)}`),console.error(e),w.current.value=""}}})),ne(n,(()=>{b.current()})),c((()=>{n&&b.current()}),[n]),c((()=>{b.current()}),[p,_]);c((()=>{a&&n&&r&&navigator.clipboard.writeText(k(n,r)).then((()=>{s()}))}),[a]),c((()=>{if(o&&n&&r&&y.current){const e=encodeURIComponent(k(n,r));y.current.setAttribute("href",`data:text/json;charset=utf-8,${e}`),y.current.setAttribute("download",`${t}.${_}`),y.current.click()}}),[o]),c((()=>{i&&w.current&&(w.current.value="",w.current.select())}),[i]);return d(D,null,d("div",{class:"controls"},d(re,{icon:"gear",tooltip:h("output_settings")},Object.entries(tn).map((([e])=>d(X,{label:h(`indentation.${e}`),active:p===e,onClick:()=>{return t=e,Qt.setIndent(t),void g(t);var t}}))),d("hr",null),Object.keys(nn).map((e=>d(X,{label:h(`format.${e}`),active:_===e,onClick:()=>{return t=e,Qt.setFormat(t),void v(t);var t}}))))),d("textarea",{ref:w,class:"source",onBlur:()=>{if(0!==w.current.value.length)try{const e=nn[_].parse(w.current.value);null==n||n.reset(f.DataModel.wrapLists(e),!1)}catch(e){l(`Error importing: ${Le(e)}`),console.error(e)}},spellcheck:!1,autocorrect:"off",placeholder:h("source_placeholder")}),d("a",{ref:y,style:"display: none;"}))}class an extends f.DataModel{constructor(e,t,n,r){super(e),this.mapper=t,this.getter=n,this.setter=r}map(e){return this.mapper(e)}get(e){return this.getter(e)}set(e,t,n){return this.setter(e,t,n)}}const on=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","recipe.type","dimension.generator.type","dimension.generator.biome_source.type","dimension.generator.biome_source.preset","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","block_predicate.type","material_rule.type","material_condition.type"],sn=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],ln=["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","decorator.block_survives_filter.state","material_rule.block.result_state"],cn=["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","generator_biome.biome","block_predicate.type","material_rule.type","material_condition.type"],dn=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],un=["generator_biome.parameters.temperature","generator_biome.parameters.humidity","generator_biome.parameters.continentalness","generator_biome.parameters.erosion","generator_biome.parameters.depth","generator_biome.parameters.weirdness","feature.end_spike.crystal_beam_target","feature.end_gateway.exit","decorator.block_filter.offset","block_predicate.matching_blocks.offset","block_predicate.matching_fluids.offset","model_element.from","model_element.to","model_element.rotation.origin","model_element.faces.uv","item_transform.rotation","item_transform.translation","item_transform.scale"],mn=["noise_settings.surface_rule","noise_settings.noise.terrain_shaper"],hn=new f.DataModel(f.MapNode(f.StringNode(),f.StringNode()),{historyMax:0});function fn({model:e,lang:t,version:n,blockStates:r}){var a;const o=new f.ModelPath(e),[i,s,l]=e.schema.hook(pn,o,Pe(e.data),t,n,r,{});return(null==(a=null==s?void 0:s.props)?void 0:a.children.some((e=>e)))?d("div",{class:`node ${e.schema.type(o)}-node`,"data-category":e.schema.category(o)},d("div",{class:"node-header"},i,s),d("div",{class:"node-body"},l)):l}const pn={base:()=>[null,null,null],boolean:(e,t,n,r,a,o,i)=>[null,d(vn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null],choice({choices:e,config:t,switchNode:n},r,a,o,i,s,l){const c=n.activeCase(r,!0),u=(null==t?void 0:t.context)?new f.ModelPath(r.getModel(),new f.Path(r.getArray(),[t.context])):r,[m,h,p]=c.node.hook(this,u,a,o,i,s,l);if(1===e.length)return[m,h,p];const g=(null==t?void 0:t.choiceContext)?new f.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new f.Path([],[t.context]):r,_=d("select",{value:c.type,onChange:n=>(n=>{var o;const i=null!=(o=e.find((e=>e.type===n)))?o:c,s=i.node.default(),l=i.change?i.change(f.DataModel.unwrapLists(a)):"feature"===t.choiceContext&&"minecraft:decorated"===(null==s?void 0:s.type)?s.config.feature:s;r.model.set(r,f.DataModel.wrapLists(l))})(n.target.value)},e.map((e=>d("option",{value:e.type},Cn(o,g.contextPush(e.type))))));return[m,d(D,null,_,h),p]},list({children:e,config:t},n,r,a,o,i,c){const{expand:u,collapse:h,isToggled:p}=_n(),[g,_]=m(50),v=n.getContext().join(".");if(un.includes(v)){return[d(D,null,[...Array(t.maxLength)].map(((e,t)=>d(An,{lang:a,path:n.modelPush(t)}))),d("div",{class:"fixed-list"})),d(D,null,[...Array(t.maxLength)].map(((t,s)=>{var l;return e.hook(this,n.modelPush(s),null==(l=null==r?void 0:r[s])?void 0:l.node,a,o,i,c)[1]}))),null]}return[null,d("button",{class:"add tooltipped tip-se","aria-label":ge(a,"add_top"),onClick:()=>{Array.isArray(r)||(r=[]);const t=f.DataModel.wrapLists(e.default());n.model.set(n,[{node:t,id:ye()},...r])}},ae.plus_circle),d(D,null,r&&Array.isArray(r)&&r.map((({node:t,id:m},f)=>{if(f===g)return d("div",{class:"node node-header"},d("label",null,ge(a,"entries_hidden",""+(r.length-g))),d("button",{onClick:()=>_(Math.min(g+50,r.length))},ge(a,"entries_hidden.more","50")),d("button",{onClick:()=>_(r.length)},ge(a,"entries_hidden.all")));if(f>g)return null;const v=n.push(f).contextPush("entry"),w="object"===e.type(v),y=p(m);if(w&&(!1===y||void 0===y&&r.length>20))return d("div",{class:"node node-header","data-category":e.category(v)},d(An,{lang:a,path:v,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(a,"expand")}\n${ge(a,"expand_all","Ctrl")}`,onClick:u(m)},ae.chevron_right),d("label",null,Cn(a,v,`${f}`)),d(gn,{key:m,path:v,value:t,schema:e}));return d(bn,l(s({key:m,path:v,schema:e,value:t},{lang:a,version:o,states:i,actions:[{icon:"duplicate",label:"duplicate",onSelect:()=>{const e=[...n.get()];e.splice(f,0,{id:ye(),node:Pe(t)}),n.model.set(n,e)}}]}),{ctx:l(s({},c),{index:(0===f?1:0)+(f===r.length-1?2:0)})}),w&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(a,"collapse")}\n${ge(a,"collapse_all","Ctrl")}`,onClick:h(m)},ae.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":ge(a,"remove"),onClick:()=>v.set(void 0)},ae.trashcan),r.length>1&&d("div",{class:"node-move"},d("button",{class:"move tooltipped tip-se","aria-label":ge(a,"move_up"),onClick:()=>{const e=[...n.get()];[e[f-1],e[f]]=[e[f],e[f-1]],n.model.set(n,e)},disabled:0===f},ae.chevron_up),d("button",{class:"move tooltipped tip-se","aria-label":ge(a,"move_down"),onClick:()=>{const e=[...n.get()];[e[f+1],e[f]]=[e[f],e[f+1]],n.model.set(n,e)},disabled:f===r.length-1},ae.chevron_down)))})),r&&r.length>0&&r.length<=g&&d("div",{class:"node node-header"},d("button",{class:"add tooltipped tip-se","aria-label":ge(a,"add_bottom"),onClick:()=>{Array.isArray(r)||(r=[]);const t=f.DataModel.wrapLists(e.default());n.model.set(n,[...r,{node:t,id:ye()}])}},ae.plus_circle)))]},map({children:e,keys:t,config:n},r,a,o,i,c,u){var m,h,p,g,_;const{expand:v,collapse:w,isToggled:y}=_n(),b=new f.ModelPath(hn,new f.Path([xn(r.toString())])),k="block_state_map"===(null==(m=n.validation)?void 0:m.validator)?null==c?void 0:c[f.relativePath(r,n.validation.params.id).get()]:null,x=(null==k?void 0:k.properties)?f.StringNode(null,{enum:Object.keys(null!=(h=k.properties)?h:{})}):t;if(k&&"Properties"===r.last()){"object"!=typeof a&&(a={});const e=Object.entries(null!=(p=k.properties)?p:{}).map((([e,t])=>[e,f.StringNode(null,{enum:t})]));return Object.entries(null!=(g=k.properties)?g:{}).forEach((([e,t])=>{"string"!=typeof a[e]?r.model.errors.add(r.push(e),"error.expected_string"):t.includes(a[e])||r.model.errors.add(r.push(e),"error.invalid_enum_option",a[e])})),f.ObjectNode(Object.fromEntries(e)).hook(this,r,a,o,i,c,u)}return[null,d(D,null,x.hook(this,b,null!=(_=b.get())?_:"",o,i,c,u)[1],d("button",{class:"add tooltipped tip-se","aria-label":ge(o,"add"),onClick:()=>{const t=b.get();r.model.set(r.push(t),f.DataModel.wrapLists(e.default()))}},ae.plus_circle)),d(D,null,"object"==typeof a&&Object.entries(a).map((([t,n])=>{var m,h,p,g;const _=r.modelPush(t),b="object"===e.type(_),x=y(t);if(b&&(!1===x||void 0===x&&a.length>20))return d("div",{class:"node node-header","data-category":e.category(_)},d(An,{lang:o,path:_,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(o,"expand")}\n${ge(o,"expand_all","Ctrl")}`,onClick:v(t)},ae.chevron_right),d("label",null,t),d(gn,{key:t,path:_,value:n,schema:e}));const C=k?f.StringNode(null,{enum:null!=(h=null==(m=k.properties)?void 0:m[t])?h:[]}):e;(null==(p=null==k?void 0:k.properties)?void 0:p[t])&&"string"==typeof n&&!(null==(g=k.properties)?void 0:g[t].includes(n))&&r.model.errors.add(_,"error.invalid_enum_option",n);return d(bn,l(s({key:t,schema:C,path:_,value:n},{lang:o,version:i,states:c,ctx:u}),{label:t}),b&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${ge(o,"collapse")}\n${ge(o,"collapse_all","Ctrl")}`,onClick:w(t)},ae.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":ge(o,"remove"),onClick:()=>_.set(void 0)},ae.trashcan))})))]},number:(e,t,n,r,a,o,i)=>[null,d(wn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null],object({node:e,config:t,getActiveFields:n,getChildModelPath:r},a,o,i,c,u,m){var h;const{expand:p,collapse:g,isToggled:_}=_n();if(0==a.getArray().length&&function(e,t){var n;return"feature"===e&&"decorated"===(null==(n=null==t?void 0:t.type)?void 0:n.replace(/^minecraft:/,""))&&ve(null==t?void 0:t.config)}(t.context,o)){const{wrapper:e,fields:t}=function(e,t,n){const r=[],a=jn(n,r),o={type:e.type,config:f.ObjectNode({decorators:f.ListNode(Ue),feature:Ge},{context:"feature.decorated"})},i=f.ObjectNode(o,{context:"feature"}),s=new f.Path(["config","feature"]),l=new f.Path(["config","decorators"]),c=t.getModel(),d=new an(i,(e=>{if(e.startsWith(s))return new f.Path([...[...Array(r.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);if(e.startsWith(l)){if(2===e.modelArr.length)return new f.Path([]);const t=e.modelArr[2];if("number"==typeof t)return new f.Path([...[...Array(t)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)])}return e}),(e=>{if(e.equals(l)){const e=[];return jn(c.data,e),e}return c.get(d.map(e))}),((e,t,n)=>{if(e.startsWith(s)){const r=[];jn(c.data,r);const a=new f.Path([...[...Array(r.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);return c.set(a,t,n)}if(e.startsWith(l)){const r=e.modelArr[2];if(2===e.modelArr.length){const e=d.get(s);return c.set(new f.Path,$n(e,t),n)}if("number"==typeof r){if(3===e.modelArr.length&&void 0===t){const e=d.get(s),t=[];jn(c.data,t),t.splice(r,1);const a=$n(e,t);return c.set(new f.Path,a,n)}{const a=new f.Path([...[...Array(r)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)]);return c.set(a,t,n)}}}c.set(e,t,n)}));return d.data={type:c.data.type,config:{decorators:r,feature:a}},d.errors=c.errors,{fields:o,wrapper:d}}(n(a),a,o);o=e.data,n=()=>t,r=(t,n)=>new f.ModelPath(e,new f.Path(t.getArray(),["feature"])).push(n)}let v=null,w=null;if(e.optional())if(void 0===o){const t=()=>a.set(f.DataModel.wrapLists(e.default()));w=d("button",{class:"collapse closed tooltipped tip-se","aria-label":ge(i,"expand"),onClick:t},ae.plus_circle)}else{const e=()=>a.set(void 0);w=d("button",{class:"collapse open tooltipped tip-se","aria-label":ge(i,"remove"),onClick:e},ae.trashcan)}const y=a.getContext().join(".");if(mn.includes(y)){const e=_("");if(v=d(D,null,d("button",{class:"toggle tooltipped tip-se","aria-label":ge(i,e?"collapse":"expand"),onClick:e?g(""):p("")},e?ae.chevron_down:ae.chevron_right)),!e)return[v,w,null]}const b="object"==typeof o&&null!==o&&(null==(h=e.default())?void 0:h.pools)?l(s({},m),{loot:null==o?void 0:o.type}):m,k=d(D,null,"object"==typeof o&&null!==o&&!(e.optional()&&void 0===o)&&Object.entries(n(a)).filter((([e,t])=>t.enabled(a))).map((([e,t])=>{var n,l,m;const h=r(a,e),f=h.getContext().join(".");if(sn.includes(f))return null;const[p,g,_]=t.hook(this,h,o[e],i,c,u,b);if(!(p||g||(null!=(m=null==(l=null==(n=null==_?void 0:_.props)?void 0:n.children)?void 0:l.length)?m:0)>0))return null;const y="object"===t.type(h)&&ln.includes(f),k=cn.includes(f);return y||k?(v=d(D,null,v,d(An,{lang:i,path:h}),d(Mn,{lang:i,path:h}),p),w=d(D,null,w,g),y?_:null):d(bn,s({key:e,schema:t,path:h,value:o[e]},{lang:i,version:c,states:u,ctx:b}))})));return[v,w,k]},string:(e,t,n,r,a,o,i)=>[null,d(yn,s({},l(s({},e),{path:t,value:n,lang:r,version:a,states:o,ctx:i}))),null]};function gn({path:e,value:t}){var n,r,a,o,i;switch(e.getContext().join(".")){case"loot_table.pools.entry":return d("label",null,null!=(r=null==(n=null==t?void 0:t.entries)?void 0:n.length)?r:0," entries");case"function.set_contents.entries.entry":case"loot_pool.entries.entry":return d("label",null,null!=(i=null==(a=null==t?void 0:t.name)?void 0:a.replace(/^minecraft:/,""))?i:null==(o=null==t?void 0:t.type)?void 0:o.replace(/^minecraft:/,""))}for(const s of Object.values(null!=t?t:{}))if("string"==typeof s)return d("label",null,s.replace(/^minecraft:/,""));return null}function _n(){const[e,t]=m(new Map),[n,r]=m(void 0);return{expand:e=>n=>{n.ctrlKey?(t(new Map),r(!0)):t((t=>new Map(t.set(e,!0))))},collapse:e=>n=>{n.ctrlKey?(t(new Map),r(!1)):t((t=>new Map(t.set(e,!1))))},isToggled:t=>{var r;return e instanceof Map&&(null!=(r=e.get(t))?r:n)}}}function vn({path:e,node:t,value:n,lang:r}){const a=r=>{e.model.set(e,t.optional()&&n===r?void 0:r)};return d(D,null,d("button",{class:!1===n?"selected":"",onClick:()=>a(!1)},ge(r,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>a(!0)},ge(r,"true")))}function wn({path:e,config:t,integer:n,value:r,lang:a}){var o;const i=t=>{const r=t.target.value,a=n?parseInt(r):parseFloat(r);e.model.set(e,a)};return d(D,null,d("input",{type:"text",value:null!=r?r:"",onBlur:i,onKeyDown:e=>{"Enter"===e.key&&i(e)}}),(null==t?void 0:t.color)&&d("input",{type:"color",value:"#"+(null!=(o=null==r?void 0:r.toString(16).padStart(6,"0"))?o:"000000"),onChange:t=>{const n=t.target.value,r=parseInt(n.slice(1),16);e.model.set(e,r)}}),["dimension.generator.seed","dimension.generator.biome_source.seed","world_settings.seed"].includes(e.getContext().join("."))&&d("button",{onClick:()=>ke(e.model),class:"tooltipped tip-se","aria-label":ge(a,"generate_new_seed")},ae.sync))}function yn({path:e,getValues:t,config:n,node:r,value:a,lang:o,version:i,states:s}){var l;const c=t=>{t.stopPropagation();const n=t.target.value;n!==a&&e.model.set(e,0===n.length?void 0:n)},u=t(),m=e.getContext().join("."),h=kn(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool?void 0:n.params.pool;if(dn.includes(m))return d("textarea",{value:null!=a?a:"",onBlur:c});if(kn(n)&&!n.additional||on.includes(m)){let t=new f.Path([]);return kn(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):h?t=t.contextPush(h):kn(n)&&(t=e),d("select",{value:null!=a?a:"",onChange:c},r.optional()&&d("option",{value:""},ge(o,"unset")),u.map((e=>d("option",{value:e},Cn(o,t.contextPush(e.replace(/^minecraft:/,"")))))))}if(kn(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=ye(),t=h?(e=>Z.generators.find((t=>t.id===e.replace(/^\$/,""))))(h):void 0;return d(D,null,d("input",{value:null!=a?a:"",onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(e)},list:u.length>0?e:""}),u.length>0&&d("datalist",{id:e},u.map((e=>d("option",{value:e})))),t&&u.includes(a)&&a.startsWith("minecraft:")&&d("a",{href:`/${t.url}/?version=${i}&preset=${a.replace(/^minecraft:/,"")}`,class:"tooltipped tip-se","aria-label":ge(o,"follow_reference")},ae.link_external))}{const t=null==s?void 0:s[f.relativePath(e,n.params.id).get()],r=Object.keys(null!=(l=null==t?void 0:t.properties)?l:{});return d("select",{value:null!=a?a:"",onChange:c},r.map((e=>d("option",null,e))))}}const bn=H((function({label:e,schema:t,path:n,value:r,lang:a,version:o,states:i,ctx:c,actions:u,children:m}){var h;const f=t.type(n),p=t.category(n),g=n.getContext().join("."),[_,v]=te(),w=l(s({},c),{depth:(null!=(h=c.depth)?h:0)+1});delete w.index;const[y,b,k]=t.hook(pn,n,r,a,o,i,w);return d("div",{class:`node ${f}-node`,"data-category":p},d("div",{class:"node-header",onContextMenu:e=>{e.preventDefault(),v()}},d(An,{lang:a,path:n}),d(Mn,{lang:a,path:n}),m,y,d("label",null,null!=e?e:Cn(a,n,`${n.last()}`),_&&d("div",{class:"node-menu"},null==u?void 0:u.map((e=>{var t;return d("div",{key:e.label,class:"menu-item"},d(X,{icon:e.icon,tooltip:ge(a,e.label),tooltipLoc:"se",onClick:()=>e.onSelect()}),d("span",null,null!=(t=e.description)?t:ge(a,e.label)))})),d("div",{class:"menu-item"},d(X,{icon:"clippy",tooltip:ge(a,"copy_context"),tooltipLoc:"se",onClick:()=>navigator.clipboard.writeText(g)}),d("span",null,g)))),b),k&&d("div",{class:"node-body"},k))}),((e,t)=>e.schema===t.schema&&e.lang===t.lang&&e.path.equals(t.path)&&Se(e.ctx,t.ctx)&&Se(e.value,t.value)));function kn(e){return!!(null==e?void 0:e.enum)}function xn(e){var t,n=0;for(t=0;te.path.startsWith(t))):t.model.errors.get(t,!0);if(0===a.length)return null;const o=ge(e,a[0].error,...null!=(r=a[0].params)?r:[]);return zn("node-error","issue_opened",o)}function Mn({lang:e,path:t}){const n=t.contextPush("help").getContext().join("."),r=ge(e,n);return r===n?null:zn("node-help","info",r)}const zn=(e,t,n)=>{const[r,a]=te();return d("div",{class:`node-icon ${e}${r?" show":""}`,onClick:a},ae[t],d("span",{class:"icon-popup"},n))};function jn(e,t){var n,r;return"decorated"!==(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,""))?e:ve(null==e?void 0:e.config)?(t.push({id:t.length,node:e.config.decorator}),jn(null!=(r=e.config.feature)?r:"",t)):e}function $n(e,t){return 0===t.length?e:{type:"minecraft:decorated",config:{decorator:t.shift().node,feature:$n(e,t)}}}function Vn({lang:e,version:t,model:n,blockStates:r,onError:a}){if(!n||!r||"none"===e)return d(D,null);const[o]=R((e=>{a(`Error rendering the tree: ${e.message}`),console.error(e)}));if(o)return d(D,null);const[,i]=m(0);return ne(n,(()=>{i((e=>e+1))})),d("div",{class:"tree"},d(fn,s({},{model:n,lang:e,version:t,blockStates:r})))}const En={system:"device_desktop",dark:"moon",light:"sun"};function In({lang:e,title:t,version:n,theme:r,changeTheme:a,language:o,changeLanguage:i}){const s=ge.bind(null,e),l=Me(p());return d("header",null,d("div",{class:"title"},d(F,{class:"home-link",href:"/","aria-label":s("home")},On.home),d("h1",null,t),l&&d(re,{icon:"chevron_down",tooltip:s("switch_generator")},Z.generators.filter((e=>e.category===(null==l?void 0:l.category)&&qe(n,e.minVersion))).map((e=>d(X,{label:s(e.id),active:e.id===l.id,onClick:()=>g(Ce(e.url))}))))),d("nav",null,d("ul",null,d("li",null,d(re,{icon:"globe",tooltip:s("language")},Z.languages.map((({code:e,name:t})=>d(X,{label:t,active:e===o,onClick:()=>i(e)}))))),d("li",null,d(re,{icon:En[r],tooltip:s("theme")},Object.entries(En).map((([e,t])=>d(X,{icon:t,label:s(`theme.${e}`),active:e===r,onClick:()=>a(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",class:"tooltipped tip-sw","aria-label":s("github")},ae.mark_github)))))}const On={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 Ln({lang:e,assets:t,sounds:n,sound:r,delay:a,pitch:o,volume:i,onEdit:s,onDelete:l,delayedPlay:h}){const f=ge.bind(null,e),[p,g]=m(!0),[_,v]=m(!1),[w,y]=m(!1),b=u([]),k=`playsound minecraft:${r} master @s ~ ~ ~ ${i} ${o}`;c((()=>{var e,a,s;const l=n[r];y(0===(null!=(a=null==(e=null==l?void 0:l.sounds)?void 0:e.length)?a:0)),b.current.forEach((e=>e.stop())),b.current=(null!=(s=null==l?void 0:l.sounds)?s:[]).map((e=>{const n="string"==typeof e?e:e.name,r=ot(t[`minecraft/sounds/${n}.ogg`].hash),a=new W.Howl({src:[r],format:["ogg"],volume:i,rate:o});a.on("end",(()=>{v(!1)}));const s=()=>{p&&b.current.every((e=>"loaded"===e.state()))&&g(!1)};return"loaded"===a.state()?setTimeout((()=>s())):a.on("load",(()=>{s()})),a})),g(!0)}),[r,n]),c((()=>{b.current.forEach((e=>e.rate(o)))}),[o]),c((()=>{b.current.forEach((e=>e.volume(i)))}),[i]);const x=()=>{if(p||w)return;C();const e=Math.floor(Math.random()*b.current.length);b.current[e].play(),v(!0)},C=()=>{b.current.forEach((e=>e.stop()))};c((()=>{h&&setTimeout((()=>x()),50*a)}),[h]),c((()=>()=>C()),[]);const[A,M]=m(!1),z=u(void 0);return d("div",{class:`sound-config${p?" loading":_?" playing":""}${w?" invalid":""}`},d(X,{class:"play",icon:w?"alert":p?"sync":"play",label:f("sounds.play"),onClick:x,tooltip:f(w?"sounds.unknown_sound":p?"sounds.loading_sound":"sounds.play_sound"),tooltipLoc:"se"}),d(se,{class:"btn btn-input sound",list:"sound-list",spellcheck:!1,value:r,onChange:e=>s({sound:e})}),d("label",{class:"delay-label"},f("sounds.delay"),": "),d(le,{class:"btn btn-input delay",min:0,value:a,onChange:e=>s({delay:e})}),d("label",{class:"pitch-label"},f("sounds.pitch"),": "),d(ce,{class:"pitch tooltipped tip-s",min:.5,max:2,step:.01,"aria-label":o.toFixed(2),style:`--x: ${100/1.5*(o-.5)}%`,value:o,onChange:e=>s({pitch:e})}),d("label",{class:"volume-label"},f("sounds.volume"),": "),d(ce,{class:"volume tooltipped tip-s",min:0,max:1,step:.01,"aria-label":i.toFixed(2),style:`--x: ${100*i}%`,value:i,onChange:e=>s({volume:e})}),d(X,{class:"copy"+(A?" active":""),icon:A?"check":"terminal",label:f("copy"),tooltip:f(A?"copied":"sounds.copy_command"),onClick:()=>{navigator.clipboard.writeText(k),M(!0),void 0!==z.current&&clearTimeout(z.current),z.current=setTimeout((()=>{M(!1)}),2e3)}}),d(X,{class:"remove",icon:"trashcan",tooltip:f("sounds.remove_sound"),onClick:()=>{l(),C()}}))}function Pn({title:e,desc:t,link:n,icon:r,children:a}){const o=d(D,null,d("div",{class:"tool-head"},r&&On[r],d("div",null,d("h3",null,e),d("p",null,t))),a&&d("div",{class:"tool-body"},a));return n?d("a",{class:"tool-card",href:n},o):d("div",{class:"tool-card"},o)}function Sn({category:e,lang:t,changeTitle:n}){const r=ge.bind(null,t);return n(r("title.generator_category",r(e))),d("main",null,d("div",{class:"category"},Z.generators.filter((t=>t.category===e)).map((e=>d(Pn,{title:r(e.id),link:Ce(e.url)})))))}function Dn({lang:e,changeTitle:t}){const n=ge.bind(null,e),[r,a]=m(null);t(n("title.changelog"));const[o,i]=m([]);c((()=>{Be().then((e=>i(e))).catch((e=>{console.error(e),a(e)}))}),[]);const[s,l]=m(""),[u,h]=m([]),f=e=>{u.includes(e)?h(u.filter((t=>t!==e))):h([...u,e])},p=J((()=>{const e=s.split(" ").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0));return 0===e.length&&0===u.length?o:o.filter((t=>{if(!u.every((e=>t.tags.includes(e))))return!1;const n=t.tags.join(" ")+" "+t.content.toLowerCase();return e.every((e=>e.startsWith("!")?1===e.length||!n.includes(e.slice(1)):n.includes(e)))}))}),[o,s,u]),[g,_]=m(!0),v=J((()=>p.sort(((e,t)=>g?t.order-e.order:e.order-t.order))),[p,g]);return d("main",null,d(K,{type:"text",id:"changelog"}),r&&d(oe,{error:r,onDismiss:()=>a(null)}),d("div",{class:"changelog-controls"},d("div",{class:"changelog-query"},d(se,{class:"btn btn-input changelog-search",list:"sound-list",placeholder:n("changelog.search"),value:s,onChange:l}),d(X,{icon:g?"sort_desc":"sort_asc",label:g?"Newest first":"Oldest first",onClick:()=>_(!g)})),u.length>0&&d("div",{class:"changelog-tags"},u.map((e=>d(Bn,{label:e,onClick:()=>h(u.filter((t=>t!==e)))}))))),d("div",{class:"changelog"},v.map((e=>d(Tn,{change:e,activeTags:u,toggleTag:f})))))}function Tn({change:e,activeTags:t,toggleTag:n}){return d("div",{class:"changelog-entry"},d("div",{class:"changelog-version"},d(Nn,s({},e.version)),d(Nn,s({},e.group))),d("div",{class:"changelog-tags"},e.tags.map((e=>d(Bn,{label:e,onClick:()=>n(e),active:t.includes(e)})))),d("div",{class:"changelog-content",dangerouslySetInnerHTML:{__html:U(e.content)}}))}function Nn({id:e,article:t}){return null===t?d("span",null,e):d("a",{href:`https://www.minecraft.net/en-us/article/${t}`,target:"_blank"},e)}function Bn({label:e,active:t,onClick:n}){const r="breaking"===e?5:xe(e)%360;return d("div",{class:`changelog-tag${t?" active":""}${n?" clickable":""}`,style:`--tint: ${r}`,onClick:n},"breaking"===e&&ae.alert,e)}function Hn({lang:e,changeTitle:t,version:n,changeVersion:r}){var a;const o=ge.bind(null,e),[i,h]=m(null),[g,_]=R();if(g)return d("main",null,d(oe,{error:`Something went wrong rendering the generator: ${g.message}`,onDismiss:_}));const v=Me(p());if(!v)return d("main",null,d(oe,{error:`Cannot find generator "${p()}"`}));const w=Z.versions.filter((e=>qe(e.id,v.minVersion,v.maxVersion))).map((e=>e.id));t(o("title.generator",o(v.id)),w),qe(n,v.minVersion)||h(`The minimum version for this generator is ${v.minVersion}`);const y=ze(p()).get("preset");c((()=>{b&&y&&V(y)}),[y]);const[b,k]=m(null),[x,C]=m(null);c((()=>{h(null),k(null),async function(e){return(await Ye(e)).blockStates}(n).then((e=>C(e))),async function(e,t){var n;if(!We[t]||We[t].version!==e){const a=await Ye(e);Ue=f.Reference(a.schemas,"configured_decorator"),Ge=f.ChoiceNode([{type:"string",node:f.StringNode(a.collections,{validator:"resource",params:{pool:"$worldgen/configured_feature"}})},{type:"object",node:f.Reference(a.schemas,"configured_feature")}],{choiceContext:"feature"});const o=null==(n=Z.generators.find((e=>e.id===t)))?void 0:n.schema;if(!o)throw new Error(`Cannot find model ${t}`);try{const n=a.schemas.get(o),r=new f.DataModel(n,{wrapLists:!0});We[t]?r.reset(We[t].model.data,!1):(r.validate(!0),r.history=[JSON.stringify(r.data)]),We[t]={model:r,version:e}}catch(r){const n=new Error(`Cannot get generator "${t}" for version "${e}": ${Le(r)}`);throw r instanceof Error&&(n.stack=r.stack),n}}return We[t].model}(n,v.id).then((async e=>{if(q.setGenerator(v.id),y){const t=await E(y);e.reset(f.DataModel.wrapLists(t),!1)}k(e)})).catch((e=>{console.error(e),h(Le(e))}))}),[n,v.id]),ne(b,(()=>{je({version:void 0,preset:void 0}),h(null)}));const A=e=>{e.ctrlKey&&"z"===e.key?(q.generatorEvent("undo","Hotkey"),null==b||b.undo()):e.ctrlKey&&"y"===e.key&&(q.generatorEvent("redo","Hotkey"),null==b||b.redo())};c((()=>(document.addEventListener("keyup",A),()=>{document.removeEventListener("keyup",A)})),[b]);const[M,z]=m(""),[j,$]=m([]);c((()=>{(async function(e){return(await Ye(e)).collections})(n).then((e=>{const t=(null!=M?M:"").trim().split(" "),n=e.get(v.id).map((e=>e.slice(10))).filter((e=>t.every((t=>e.includes(t)))));n&&$(n)})).catch((e=>{console.error(e),h(e.message)}))}),[n,v.id,M]);const V=e=>{E(e).then((t=>{null==b||b.reset(f.DataModel.wrapLists(t),!1),je({version:n,preset:e})}))},E=async e=>{var t,r,a;q.generatorEvent("load-preset",e);try{const o=await at(n,null!=(t=v.path)?t:v.id,e),i=null==b?void 0:b.get(new f.Path(["generator","seed"]));return void 0!==(null==(r=null==o?void 0:o.generator)?void 0:r.seed)&&void 0!==i&&(o.generator.seed=i,void 0!==(null==(a=o.generator.biome_source)?void 0:a.seed)&&(o.generator.biome_source.seed=i)),o}catch(o){h(Le(o))}},[I,O]=m(window.innerWidth>820),[L,P]=m(0),[S,T]=m(0),[N,B]=m(0),[H,F]=m(!1),W=u(void 0),[J,U]=m(!1),G=Zt.includes(v.id);J&&!G&&U(!1);let Y=1;G&&(Y+=1),I&&(Y+=2);return d(D,null,d("main",{class:J?"has-preview":""},d(K,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d(X,{icon:"upload",label:o("import"),onClick:()=>{q.generatorEvent("import"),O(!0),B(N+1)}}),d(re,{icon:"archive",label:o("presets"),relative:!1},d(Q,{icon:"search",large:!0,value:M,onChange:z,doSelect:1,placeholder:o("search")}),d("div",{class:"result-list"},j.map((e=>d(X,{label:e,onClick:()=>V(e)})))),0===j.length&&d(X,{label:o("no_presets")})),d(re,{icon:"tag",label:n},w.reverse().map((e=>d(X,{label:e,active:e===n,onClick:()=>r(e)})))),d(re,{icon:"kebab_horizontal",tooltip:o("more")},d(X,{icon:"history",label:o("reset"),onClick:()=>{q.generatorEvent("reset"),null==b||b.reset(f.DataModel.wrapLists(b.schema.default()),!0)}}),d(X,{icon:"arrow_left",label:o("undo"),onClick:e=>{e.stopPropagation(),q.generatorEvent("undo","Menu"),null==b||b.undo()}}),d(X,{icon:"arrow_right",label:o("redo"),onClick:e=>{e.stopPropagation(),q.generatorEvent("redo","Menu"),null==b||b.redo()}}))),i&&d(oe,{error:i,onDismiss:()=>h(null)}),d(Vn,l(s({},{lang:e,model:b,version:n,blockStates:x}),{onError:h}))),d("div",{class:"popup-actions",style:`--offset: -${8+50*Y}px;`},d("div",{class:`popup-action action-preview${G?" shown":""} tooltipped tip-nw`,"aria-label":o(J?"hide_preview":"show_preview"),onClick:()=>{q.generatorEvent("toggle-preview",J?"hidden":"visible"),U(!J)}},J?ae.x_circle:ae.play),d("div",{class:`popup-action action-download${I?" shown":""} tooltipped tip-nw`,"aria-label":o("download"),onClick:()=>{q.generatorEvent("download"),T(S+1)}},ae.download),d("div",{class:`popup-action action-copy${I?" shown":""}${H?" active":""} tooltipped tip-nw`,"aria-label":o(H?"copied":"copy"),onClick:()=>{q.generatorEvent("copy"),P(L+1)}},H?ae.check:ae.clippy),d("div",{class:"popup-action action-code shown tooltipped tip-nw","aria-label":o(I?"hide_output":"show_output"),onClick:()=>{q.generatorEvent("toggle-output",I?"hidden":"visible"),O(!I),P(0),T(0),B(0)}},I?ae.chevron_right:ae.code)),d("div",{class:"popup-preview"+(J?" shown":"")},d(Kt,l(s({},{lang:e,model:b,version:n,id:v.id}),{shown:J,onError:h}))),d("div",{class:"popup-source"+(I?" shown":"")},d(rn,l(s({},{lang:e,model:b,blockStates:x,doCopy:L,doDownload:S,doImport:N}),{name:null!=(a=v.schema)?a:"data",copySuccess:()=>{F(!0),void 0!==W.current&&clearTimeout(W.current),W.current=setTimeout((()=>{F(!1)}),2e3)},onError:h}))))}function Rn({lang:e,changeTitle:t}){const n=ge.bind(null,e);return t(n("title.home")),d("main",null,d("div",{class:"home"},d(Pn,{title:"Data packs"},Z.generators.filter((e=>!e.category)).map((e=>d(Pn,{title:n(e.id),link:Ce(e.url)}))),d(Pn,{title:n("worldgen"),link:"/worldgen/"})),d(Pn,{title:"Resource packs"},Z.generators.filter((e=>"assets"===e.category)).map((e=>d(Pn,{title:n(e.id),link:Ce(e.url)})))),d(Pn,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/",desc:"Analyse your performance reports"}),d(Pn,{title:"Minecraft Sounds",icon:"sounds",link:"/sounds/",desc:"Browse through and mix all the vanilla sounds"}),d(Pn,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/",desc:"Convert your 1.16 data packs to 1.17"}),d(Pn,{title:"Technical Changelog",link:"/changelog/"})))}function Fn({lang:e,changeTitle:t,version:n,changeVersion:r}){const a=ge.bind(null,e),[o,i]=m(null);t(a("title.sounds"));const[h,f]=m({}),[p,g]=m({}),_=Object.keys(null!=p?p:{});c((()=>{ht(n).then((e=>(f(e),ft(n)))).then((e=>{e&&g(e)})).catch((e=>{console.error(e),i(Le(e))}))}),[n]);const[v,w]=m(""),[y,b]=m([]),k=()=>{b([{id:ye(),sound:v,delay:0,pitch:1,volume:1},...y])},x=e=>()=>{b(y.filter((t=>t.id!==e)))},[C,A]=m(0),M=u(null);return d("main",null,d(K,{type:"text",id:"sounds"}),o&&d(oe,{error:o,onDismiss:()=>i(null)}),_.length>0&&d(D,null,d("div",{class:"controls sounds-controls"},d("div",{class:"sound-search-group"},d(se,{class:"btn btn-input sound-search",list:"sound-list",placeholder:a("sounds.search"),value:v,onChange:w,onEnter:k}),d(X,{icon:"plus",tooltip:a("sounds.add_sound"),class:"add-sound",onClick:k})),y.length>1&&d(X,{icon:"play",label:a("sounds.play_all"),class:"play-all-sounds",onClick:()=>{A(C+1)}}),d("div",{class:"spacer"}),d(X,{icon:"download",label:a("download"),tooltip:a("sounds.download_function"),class:"download-sounds",onClick:()=>{const e=y.some((e=>e.delay>0)),t=y.sort(((e,t)=>e.delay-t.delay)).map((t=>`${e?`execute if score @s delay matches ${t.delay} run `:""}playsound minecraft:${t.sound} master @s ~ ~ ~ ${t.volume} ${t.pitch}`)).join("\n");M.current.setAttribute("href","data:text/plain;charset=utf-8,"+t+"%0A"),M.current.setAttribute("download","sounds.mcfunction"),M.current.click()}}),d(re,{icon:"tag",label:n},Z.versions.reverse().map((e=>d(X,{label:e.id,active:e.id===n,onClick:()=>r(e.id)}))))),d("div",{class:"sounds"},y.map((t=>{return d(Ln,l(s(s({key:t.id},t),{lang:e,assets:h,sounds:p,delayedPlay:C}),{onEdit:(n=t.id,e=>{b(y.map((t=>t.id===n?s(s({},t),e):t)))}),onDelete:x(t.id)}));var n}))),d("a",{ref:M,style:"display: none;"})),d("datalist",{id:"sound-list"},_.map((e=>d("option",{key:e,value:e})))))}function Wn(){const[e,t]=m("none");c((()=>{(async()=>{const e=Qt.getLanguage();await Promise.all([_e("en"),..."en"!==e?[_e(e)]:[]]),t(e)})()}),[]);const[n,r]=m(Qt.getTheme());c((()=>{document.documentElement.setAttribute("data-theme",n)}),[n]);const a=ze(p()).get("version"),[o,i]=m(Qt.getVersion()),l=T((e=>{ze(p()).has("version")&&je({version:e}),q.setVersion(e),Qt.setVersion(e),i(e)}),[a]);c((()=>{Re.includes(a)&&o!==a&&i(a)}),[o,a]);const[u,h]=m(ge(e,"title.home")),f=(e,t)=>{null!=t||(t=Z.versions.map((e=>e.id)));const n=t.slice(t.length-3);document.title=`${e} Minecraft ${n.join(", ")}`,h(e)};return d(D,null,d(In,s({},{lang:e,title:u,version:o,theme:n,language:e,changeLanguage:async e=>{pe[e]||await _e(e),q.setLanguage(e),Qt.setLanguage(e),t(e)},changeTheme:e=>{q.setTheme(e),Qt.setTheme(e),r(e)}})),d(Y,{onChange:e=>{setTimeout((()=>q.pageview(Ce(e.url))))}},d(Rn,s({path:"/"},{lang:e,changeTitle:f})),d(Sn,s({path:"/worldgen",category:"worldgen"},{lang:e,changeTitle:f})),d(Sn,s({path:"/assets",category:"assets"},{lang:e,changeTitle:f})),d(Fn,s({path:"/sounds"},{lang:e,version:o,changeTitle:f,changeVersion:l})),d(Dn,s({path:"/changelog"},{lang:e,changeTitle:f})),d(Hn,s({default:!0},{lang:e,version:o,changeTitle:f,changeVersion:l}))))}G(d(Wn,null),document.body); +//# sourceMappingURL=index.ef17db4b.js.map diff --git a/assets/index.d5e10217.js.map b/assets/index.ef17db4b.js.map similarity index 52% rename from assets/index.d5e10217.js.map rename to assets/index.ef17db4b.js.map index bc106829..500a8da3 100644 --- a/assets/index.d5e10217.js.map +++ b/assets/index.ef17db4b.js.map @@ -1 +1 @@ -{"version":3,"file":"index.d5e10217.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useCanvas.ts","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useModel.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../src/app/components/forms/Input.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/Utils.ts","../../src/app/services/Changelogs.ts","../../src/app/services/Schemas.ts","../../src/app/services/DataFetcher.ts","../../src/app/services/Manifest.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/previews/BiomeSourcePreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/components/previews/NoisePreview.tsx","../../src/app/previews/NormalNoise.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/generator/PreviewPanel.tsx","../../src/app/schema/transformOutput.ts","../../src/app/Store.ts","../../src/app/components/generator/SourcePanel.tsx","../../src/app/schema/ModelWrapper.ts","../../src/app/schema/renderHtml.tsx","../../src/app/components/generator/Tree.tsx","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/components/sounds/SoundConfig.tsx","../../src/app/components/ToolCard.tsx","../../src/app/pages/Category.tsx","../../src/app/pages/Changelog.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Sounds.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\tconst DIM_GENERATOR = 6\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 setGenerator(generator: string) {\n\t\tdimension(DIM_GENERATOR, generator)\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\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: clazz, tooltip, tooltipLoc, 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\tdoSelect?: number,\n\tvalue?: string,\n\tplaceholder?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, doSelect, value, placeholder, onChange }: BtnInputProps) {\n\tconst onInput = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tonChange?.(value)\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 { Inputs } from 'preact/hooks'\nimport { useEffect, useRef } from 'preact/hooks'\n\ntype Vec2 = [number, number]\n\nexport function useCanvas({ size, draw, onDrag, onHover, onLeave }: {\n\tsize: () => Vec2,\n\tdraw: (img: ImageData) => Promise,\n\tonDrag?: (dx: number, dy: number) => Promise,\n\tonHover?: (x: number, y: number) => unknown,\n\tonLeave?: () => unknown,\n}, inputs?: Inputs) {\n\tconst canvas = useRef(null)\n\n\tconst dragStart = useRef()\n\tconst dragRequest = useRef()\n\tconst dragPending = useRef([0, 0])\n\tconst dragBusy = useRef(false)\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) {\n\t\t\t\tconst x = e.offsetX / canvas.current.clientWidth\n\t\t\t\tconst y = e.offsetY / canvas.current.clientHeight\n\t\t\t\tonHover?.(x, y)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!onDrag) 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\tdragPending.current = [dragPending.current[0] + dx, dragPending.current[1] + dy]\n\t\t\t\tif (!dragBusy.current) {\n\t\t\t\t\tcancelAnimationFrame(dragRequest.current)\n\t\t\t\t\tdragRequest.current = requestAnimationFrame(async () => {\n\t\t\t\t\t\tdragBusy.current = true\n\t\t\t\t\t\tconst dx = dragPending.current[0] / canvas.current.clientWidth\n\t\t\t\t\t\tconst dy = dragPending.current[1] / canvas.current.clientHeight\n\t\t\t\t\t\tdragPending.current = [0, 0]\n\t\t\t\t\t\tawait onDrag?.(dx, dy)\n\t\t\t\t\t\tdragBusy.current = false\n\t\t\t\t\t})\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 = () => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\t\tconst onMouseLeave = () => {\n\t\t\tonLeave?.()\n\t\t}\n\n\t\tcanvas.current.addEventListener('mousedown', onMouseDown)\n\t\tcanvas.current.addEventListener('mousemove', onMouseMove)\n\t\tcanvas.current.addEventListener('mouseleave', onMouseLeave)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\n\t\treturn () => {\n\t\t\tcanvas.current?.removeEventListener('mousedown', onMouseDown)\n\t\t\tcanvas.current?.removeEventListener('mousemove', onMouseMove)\n\t\t\tcanvas.current?.removeEventListener('mouseleave', onMouseLeave)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [...inputs ?? [], canvas.current])\n\n\tconst redraw = useRef<() => Promise>()\n\tconst redrawCount = useRef(0)\n\tredraw.current = async () => {\n\t\tconst ctx = canvas.current.getContext('2d')!\n\t\tconst s = size()\n\t\tcanvas.current.width = s[0]\n\t\tcanvas.current.height = s[1]\n\t\tconst img = ctx.getImageData(0, 0, s[0], s[1])\n\t\tconst ownCount = redrawCount.current += 1\n\t\tawait draw(img)\n\t\tif (ownCount === redrawCount.current) {\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas,\n\t\tredraw: redraw.current,\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\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\tdocument.body.addEventListener('contextmenu', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t\tdocument.body.removeEventListener('contextmenu', hider)\n\t\t}\n\t}, [active])\n\n\treturn [active, () => setActive(true)]\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\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import type { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\ttooltip?: string,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, tooltip, children }: BtnMenuProps) {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\talert: ,\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tcheck: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tchevron_up: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\tduplicate: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tinfo: ,\n\tissue_opened: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tlink_external: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tplus_circle: ,\n\tsearch: ,\n\tsort_asc: ,\n\tsort_desc: ,\n\tstack: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tterminal: ,\n\tthree_bars: ,\n\ttrashcan: ,\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","import type { JSXInternal } from 'preact/src/jsx'\n\ntype InputProps = JSXInternal.HTMLAttributes\n\ntype BaseInputProps = Omit & {\n\tonChange?: (value: T) => unknown,\n\tonEnter?: (value: T) => unknown,\n}\nfunction BaseInput(name: string, type: string, fn: (value: string) => T) {\n\tconst component = (props: BaseInputProps) => {\n\t\tconst onChange = props.onChange && ((evt: Event) => {\n\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\tprops.onChange?.(fn(value))\n\t\t})\n\t\tconst onKeyDown = props.onEnter && ((evt: KeyboardEvent) => {\n\t\t\tif (evt.key === 'Enter') {\n\t\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\t\tprops.onEnter?.(fn(value))\n\t\t\t}\n\t\t})\n\t\treturn \n\t}\n\tcomponent.displayName = name\n\treturn component\n}\n\nexport const TextInput = BaseInput('TextInput', 'text', v => v)\n\nexport const NumberInput = BaseInput('NumberInput', 'number', v => Number(v))\n\nexport const RangeInput = BaseInput('RangeInput', 'range', v => Number(v))\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 { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport rfdc from 'rfdc'\nimport config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nexport function isObject(obj: any) {\n\treturn typeof obj === 'object' && obj !== null\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 randomSeed() {\n\treturn BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))\n}\n\nexport function newSeed(model: DataModel) {\n\tconst seed = Math.floor(Math.random() * (4294967296)) - 2147483648\n\tconst dimensions = model.get(new Path(['dimensions']))\n\tmodel.set(new Path(['seed']), seed, true)\n\tif (typeof dimensions === 'object' && dimensions !== null) {\n\t\tObject.keys(dimensions).forEach(id => {\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'seed']), seed, true)\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'biome_source', 'seed']), seed, true)\n\t\t})\n\t}\n\tmodel.set(new Path(['generator', 'seed']), seed, true)\n\tmodel.set(new Path(['generator', 'biome_source', 'seed']), seed)\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 getPath(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(0, searchIndex)\n\t}\n\treturn cleanUrl(url)\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = getPath(url).replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function getSearchParams(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(searchIndex + 1)\n\t\treturn new Map(url.split('&').map<[string, string]>(param => {\n\t\t\tconst index = param.indexOf('=')\n\t\t\tif (index === -1) return [param, 'true']\n\t\t\treturn [decodeURIComponent(param.slice(0, index)), decodeURIComponent(param.slice(index + 1))]\n\t\t}))\n\t}\n\treturn new Map()\n}\n\nexport function setSeachParams(modifications: Record, newPath?: string) {\n\tconst url = getCurrentUrl()\n\tconst searchParams = getSearchParams(url)\n\tObject.entries(modifications).forEach(([key, value]) => {\n\t\tif (value === undefined) searchParams.delete(key)\n\t\telse searchParams.set(key, value)\n\t})\n\tconst search = Array.from(searchParams).map(([key, value]) =>\n\t\t`${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n\troute(`${newPath ? cleanUrl(newPath) : getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true)\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 square(a: number) {\n\treturn a * a\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\nexport function message(e: unknown): string {\n\tif (e instanceof Error) return e.message\n\treturn `${e}`\n}\n\nexport const deepClone = rfdc()\n\n/**\n * MIT License\n * \n * Copyright (c) 2017 Evgeny Poberezkin\n * \n * https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE\n */\nexport function deepEqual(a: any, b: any) {\n\tif (a === b) return true\n\n\tif (a && b && typeof a == 'object' && typeof b == 'object') {\n\t\tif (a.constructor !== b.constructor) return false\n\t\tlet length, i\n\t\tif (Array.isArray(a)) {\n\t\t\tlength = a.length\n\t\t\tif (length != b.length) return false\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tif (!deepEqual(a[i], b[i])) return false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()\n\t\tif (a.toString !== Object.prototype.toString) return a.toString() === b.toString()\n\t\tconst keys = Object.keys(a)\n\t\tlength = keys.length\n\t\tif (length !== Object.keys(b).length) return false\n\t\tfor (i = length; i-- !== 0;)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false\n\t\tfor (i = length; i-- !== 0;) {\n\t\t\tconst key = keys[i]\n\t\t\tif (!deepEqual(a[key], b[key])) return false\n\t\t}\n\t\treturn true\n\t}\n\treturn a !== a && b !== b\n}\n\nexport class BiMap {\n\tprivate readonly forward: Map\n\tprivate readonly backward: Map\n\n\tconstructor() {\n\t\tthis.forward = new Map()\n\t\tthis.backward = new Map()\n\t}\n\n\tpublic set(a: A, b: B) {\n\t\tthis.forward.set(a, b)\n\t\tthis.backward.set(b, a)\n\t}\n\n\tpublic getA(key: B) {\n\t\treturn this.backward.get(key)\n\t}\n\n\tpublic getB(key: A) {\n\t\treturn this.forward.get(key)\n\t}\n\n\tpublic getOrPut(key: A, defaultValue: B) {\n\t\tconst b = this.forward.get(key)\n\t\tif (b === undefined) {\n\t\t\tthis.set(key, defaultValue)\n\t\t\treturn defaultValue\n\t\t}\n\t\treturn b\n\t}\n}\n","import { isObject } from '../Utils'\n\nconst repo = 'https://raw.githubusercontent.com/misode/technical-changes/main'\n\nexport type ChangelogEntry = {\n\tgroup: ChangelogVersion,\n\tversion: ChangelogVersion,\n\torder: number,\n\ttags: string[],\n\tcontent: string,\n}\n\nexport type ChangelogVersion = {\n\tid: string,\n\tarticle: string | null,\n}\n\nlet Changelogs: ChangelogEntry[] | Promise | null = null\n\nexport async function getChangelogs() {\n\tif (!Changelogs) {\n\t\tconst index = await (await fetch(`${repo}/index.json`)).json() as string[]\n\t\tChangelogs = (await Promise.all(\n\t\t\tindex.map((group, i) => fetchGroup(parseVersion(group), i))\n\t\t)).flat().map(change => ({\n\t\t\t...change,\n\t\t\ttags: [change.group.id, ...change.tags],\n\t\t}))\n\t}\n\treturn Changelogs\n}\n\nasync function fetchGroup(group: ChangelogVersion, groupIndex: number) {\n\tconst index = await (await fetch(`${repo}/${group.id}/index.json`)).json() as string[]\n\treturn (await Promise.all(\n\t\tindex.map((version, i) => fetchChangelog(group, parseVersion(version), groupIndex, i))\n\t)).flat()\n}\n\nasync function fetchChangelog(group: ChangelogVersion, version: ChangelogVersion, groupIndex: number, versionIndex: number) {\n\tconst text = await (await fetch(`${repo}/${group.id}/${version.id}.md`)).text()\n\treturn parseChangelog(text).map(change => ({\n\t\tversion,\n\t\tgroup,\n\t\torder: groupIndex * 1000 + versionIndex,\n\t\t...change,\n\t}))\n}\n\nfunction parseChangelog(text: string) {\n\treturn text.split('\\n\\n')\n\t\t.map(entry => {\n\t\t\tconst i = entry.indexOf('|')\n\t\t\treturn {\n\t\t\t\ttags: entry.substring(0, i).trim().split(' '),\n\t\t\t\tcontent: entry.slice(i + 1).trim()\n\t\t\t\t\t.replaceAll('->', '→')\n\t\t\t\t\t.replaceAll('\\n...\\n', '\\n\\n'),\n\t\t\t}\n\t\t})\n}\n\nfunction parseVersion(version: unknown): ChangelogVersion {\n\tif (typeof version === 'string') {\n\t\treturn {\n\t\t\tid: version,\n\t\t\tarticle: version.match(/\\d\\dw\\d\\d[a-z]/) ? 'minecraft-snapshot-' + version : version.match(/\\d+\\.\\d+(\\.\\d+)?-pre[0-9]+/) ? 'minecraft-' + version.replaceAll('.', '-').replaceAll('pre', 'pre-release-') : null,\n\t\t}\n\t} else if (isObject(version)) {\n\t\treturn version as ChangelogVersion\n\t}\n\treturn { id: 'unknown', article: null }\n}\n","import type { CollectionRegistry, INode, SchemaRegistry } from '@mcschema/core'\nimport { ChoiceNode, DataModel, Reference, StringNode } 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 * as java18 from '@mcschema/java-1.18'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17', '1.18'] 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\t1.18: java18,\n}\n\nexport let CachedDecorator: INode\nexport let CachedFeature: INode\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}\": ${message(e)}`)\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\t\n\t\tCachedDecorator = Reference(versionData.schemas, 'configured_decorator')\n\t\tCachedFeature = ChoiceNode([\n\t\t\t{\n\t\t\t\ttype: 'string',\n\t\t\t\tnode: StringNode(versionData.collections, { validator: 'resource', params: { pool: '$worldgen/configured_feature' } }),\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tnode: Reference(versionData.schemas, 'configured_feature'),\n\t\t\t},\n\t\t], { choiceContext: 'feature' })\n\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, { wrapLists: true })\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\tconst err = new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${message(e)}`)\n\t\t\tif (e instanceof Error) err.stack = e.stack\n\t\t\tthrow err\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 type { CollectionRegistry } from '@mcschema/core'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport type { VersionAssets, VersionManifest } from './Manifest'\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' | 'mcassets' | '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 mcassetsUrl = 'https://raw.githubusercontent.com/InventivetalentDev/minecraft-assets'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\nconst manifestUrl = 'https://launchermeta.mojang.com/mc/game/version_manifest.json'\nconst resourceUrl = 'https://resources.download.minecraft.net/'\nconst corsUrl = 'https://misode-cors-anywhere.herokuapp.com/'\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\tfetchAssetsRegistries(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 && !r.asset)\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:', message(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}:`, message(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:', message(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:', message(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 && !r.asset)\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:', message(e))\n\t\t}\n\t}\n\tif (checkVersion(version.id, '1.18')) {\n\t\ttarget.register('worldgen/noise', Noises)\n\t\ttarget.register('worldgen/placed_feature', PlacedFeatures)\n\t}\n}\n\nexport async function fetchAssetsRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchAssetsRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.asset)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tawait Promise.all(registries.map(async r => {\n\t\ttry {\n\t\t\tconst fetchFolder = async (path: string): Promise => {\n\t\t\t\tconst url = `${mcassetsUrl}/${version.refs.mcassets}/assets/minecraft/${path}/_list.json`\n\t\t\t\tconst data = await getData(url)\n\t\t\t\tif (data.directories.length === 0) {\n\t\t\t\t\treturn data.files\n\t\t\t\t}\n\t\t\t\tconst directories = await Promise.all(data.directories.map(async (d: string) => {\n\t\t\t\t\tconst files = await fetchFolder(`${path}/${d}`)\n\t\t\t\t\treturn files.map(v => `${d}/${v}`)\n\t\t\t\t}))\n\t\t\t\treturn [...data.files, ...directories.flat()]\n\t\t\t}\n\t\t\tconst ids = (await fetchFolder(r.path ?? r.id))\t\n\t\t\t\t.filter((v: string) => v.endsWith('.json') || v.endsWith('.png'))\n\t\t\t\t.map(v => `minecraft:${v.replace(/\\.(json|png)$/, '')}`)\n\t\t\ttarget.register(r.id, ids)\n\t\t} catch (e) {\n\t\t\tconsole.warn(`Error occurred while fetching assets registry ${r.id}:`, message(e))\n\t\t}\n\t}))\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst url = ['blockstates', 'models'].includes(registry)\n\t\t\t?\t`${mcassetsUrl}/${versionData.refs.mcassets}/assets/minecraft/${registry}/${id}.json`\n\t\t\t: `${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`\n\t\tconst res = await fetch(url)\n\t\tif (registry === 'worldgen/noise_settings' && version === '1.18') {\n\t\t\tlet text = await res.text()\n\t\t\ttext = text.replaceAll('\"max_threshold\": Infinity', '\"max_threshold\": 100')\n\t\t\tconst data = JSON.parse(text)\n\t\t\tif (id !== 'overworld' && id !== 'large_biomes') {\n\t\t\t\tdata.noise.terrain_shaper = { offset: 0, factor: 0, jaggedness: 0 }\n\t\t\t}\n\t\t\treturn data\n\t\t}\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchManifest() {\n\ttry {\n\t\tconst res = await fetch(manifestUrl)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching version manifest: ${message(e)}`)\n\t}\n}\n\nexport async function fetchAssets(versionId: VersionId, manifest: VersionManifest) {\n\tconst version = config.versions.find(v => v.id === versionId)\n\tconst id = version?.latest ?? manifest.latest.snapshot\n\ttry {\n\t\tconst versionMeta = await getData(manifest.versions.find(v => v.id === id)!.url)\n\t\n\t\treturn (await getData(versionMeta.assetIndex.url)).objects\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching assets for ${version}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchSounds(version: VersionId, assets: VersionAssets) {\n\ttry {\n\t\tconst hash = assets['minecraft/sounds.json'].hash\n\t\treturn await getData(getResourceUrl(hash))\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching sounds for ${version}: ${message(e)}`)\n\t}\n}\n\nexport function getResourceUrl(hash: string) {\n\treturn `${corsUrl}${resourceUrl}${hash.slice(0, 2)}/${hash}`\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}: ${message(e)}`)\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}: ${message(e)}`)\n\t}\n}\n\nconst Noises = [\n\t'minecraft:aquifer_barrier',\n\t'minecraft:aquifer_fluid_level_floodedness',\n\t'minecraft:aquifer_fluid_level_spread',\n\t'minecraft:aquifer_lava',\n\t'minecraft:badlands_pillar',\n\t'minecraft:badlands_pillar_roof',\n\t'minecraft:badlands_surface',\n\t'minecraft:calcite',\n\t'minecraft:cave_cheese',\n\t'minecraft:cave_entrance',\n\t'minecraft:cave_layer',\n\t'minecraft:clay_bands_offset',\n\t'minecraft:continentalness',\n\t'minecraft:continentalness_large',\n\t'minecraft:erosion',\n\t'minecraft:erosion_large',\n\t'minecraft:gravel',\n\t'minecraft:gravel_layer',\n\t'minecraft:ice',\n\t'minecraft:iceberg_pillar',\n\t'minecraft:iceberg_pillar_roof',\n\t'minecraft:iceberg_surface',\n\t'minecraft:jagged',\n\t'minecraft:nether_state_selector',\n\t'minecraft:nether_wart',\n\t'minecraft:netherrack',\n\t'minecraft:noodle',\n\t'minecraft:noodle_ridge_a',\n\t'minecraft:noodle_ridge_b',\n\t'minecraft:noodle_thickness',\n\t'minecraft:offset',\n\t'minecraft:ore_gap',\n\t'minecraft:ore_vein_a',\n\t'minecraft:ore_vein_b',\n\t'minecraft:ore_veininess',\n\t'minecraft:packed_ice',\n\t'minecraft:patch',\n\t'minecraft:pillar',\n\t'minecraft:pillar_rareness',\n\t'minecraft:pillar_thickness',\n\t'minecraft:powder_snow',\n\t'minecraft:ridge',\n\t'minecraft:soul_sand_layer',\n\t'minecraft:spaghetti_2d',\n\t'minecraft:spaghetti_2d_elevation',\n\t'minecraft:spaghetti_2d_modulator',\n\t'minecraft:spaghetti_2d_thickness',\n\t'minecraft:spaghetti_3d_1',\n\t'minecraft:spaghetti_3d_2',\n\t'minecraft:spaghetti_3d_rarity',\n\t'minecraft:spaghetti_3d_thickness',\n\t'minecraft:spaghetti_roughness',\n\t'minecraft:spaghetti_roughness_modulator',\n\t'minecraft:surface',\n\t'minecraft:surface_secondary',\n\t'minecraft:surface_swamp',\n\t'minecraft:temperature',\n\t'minecraft:temperature_large',\n\t'minecraft:vegetation',\n\t'minecraft:vegetation_large',\n]\n\nconst PlacedFeatures = [\n\t'minecraft:acacia_checked',\n\t'minecraft:amethyst_geode',\n\t'minecraft:bamboo',\n\t'minecraft:bamboo_light',\n\t'minecraft:bamboo_vegetation',\n\t'minecraft:basalt_blobs',\n\t'minecraft:basalt_pillar',\n\t'minecraft:birch_bees_0002',\n\t'minecraft:birch_bees_002',\n\t'minecraft:birch_checked',\n\t'minecraft:birch_tall',\n\t'minecraft:blackstone_blobs',\n\t'minecraft:blue_ice',\n\t'minecraft:brown_mushroom_nether',\n\t'minecraft:brown_mushroom_normal',\n\t'minecraft:brown_mushroom_old_growth',\n\t'minecraft:brown_mushroom_swamp',\n\t'minecraft:brown_mushroom_taiga',\n\t'minecraft:cave_vines',\n\t'minecraft:chorus_plant',\n\t'minecraft:classic_vines_cave_feature',\n\t'minecraft:crimson_forest_vegetation',\n\t'minecraft:crimson_fungi',\n\t'minecraft:dark_forest_vegetation',\n\t'minecraft:dark_oak_checked',\n\t'minecraft:delta',\n\t'minecraft:desert_well',\n\t'minecraft:disk_clay',\n\t'minecraft:disk_gravel',\n\t'minecraft:disk_sand',\n\t'minecraft:dripstone_cluster',\n\t'minecraft:end_gateway_return',\n\t'minecraft:end_island_decorated',\n\t'minecraft:end_spike',\n\t'minecraft:fancy_oak_bees',\n\t'minecraft:fancy_oak_bees_0002',\n\t'minecraft:fancy_oak_bees_002',\n\t'minecraft:fancy_oak_checked',\n\t'minecraft:flower_default',\n\t'minecraft:flower_flower_forest',\n\t'minecraft:flower_forest_flowers',\n\t'minecraft:flower_meadow',\n\t'minecraft:flower_plain',\n\t'minecraft:flower_swamp',\n\t'minecraft:flower_warm',\n\t'minecraft:forest_flowers',\n\t'minecraft:forest_rock',\n\t'minecraft:fossil_lower',\n\t'minecraft:fossil_upper',\n\t'minecraft:freeze_top_layer',\n\t'minecraft:glow_lichen',\n\t'minecraft:glowstone',\n\t'minecraft:glowstone_extra',\n\t'minecraft:grass_bonemeal',\n\t'minecraft:ice_patch',\n\t'minecraft:ice_spike',\n\t'minecraft:iceberg_blue',\n\t'minecraft:iceberg_packed',\n\t'minecraft:jungle_bush',\n\t'minecraft:jungle_tree',\n\t'minecraft:kelp_cold',\n\t'minecraft:kelp_warm',\n\t'minecraft:lake_lava_surface',\n\t'minecraft:lake_lava_underground',\n\t'minecraft:large_basalt_columns',\n\t'minecraft:large_dripstone',\n\t'minecraft:lush_caves_ceiling_vegetation',\n\t'minecraft:lush_caves_clay',\n\t'minecraft:lush_caves_vegetation',\n\t'minecraft:mega_jungle_tree_checked',\n\t'minecraft:mega_pine_checked',\n\t'minecraft:mega_spruce_checked',\n\t'minecraft:monster_room',\n\t'minecraft:monster_room_deep',\n\t'minecraft:mushroom_island_vegetation',\n\t'minecraft:nether_sprouts',\n\t'minecraft:oak_bees_0002',\n\t'minecraft:oak_bees_002',\n\t'minecraft:oak_checked',\n\t'minecraft:ore_ancient_debris_large',\n\t'minecraft:ore_andesite_lower',\n\t'minecraft:ore_andesite_upper',\n\t'minecraft:ore_blackstone',\n\t'minecraft:ore_clay',\n\t'minecraft:ore_coal_lower',\n\t'minecraft:ore_coal_upper',\n\t'minecraft:ore_copper',\n\t'minecraft:ore_copper_large',\n\t'minecraft:ore_debris_small',\n\t'minecraft:ore_diamond',\n\t'minecraft:ore_diamond_buried',\n\t'minecraft:ore_diamond_large',\n\t'minecraft:ore_diorite_lower',\n\t'minecraft:ore_diorite_upper',\n\t'minecraft:ore_dirt',\n\t'minecraft:ore_emerald',\n\t'minecraft:ore_gold',\n\t'minecraft:ore_gold_deltas',\n\t'minecraft:ore_gold_extra',\n\t'minecraft:ore_gold_lower',\n\t'minecraft:ore_gold_nether',\n\t'minecraft:ore_granite_lower',\n\t'minecraft:ore_granite_upper',\n\t'minecraft:ore_gravel',\n\t'minecraft:ore_gravel_nether',\n\t'minecraft:ore_infested',\n\t'minecraft:ore_iron_middle',\n\t'minecraft:ore_iron_small',\n\t'minecraft:ore_iron_upper',\n\t'minecraft:ore_lapis',\n\t'minecraft:ore_lapis_buried',\n\t'minecraft:ore_magma',\n\t'minecraft:ore_quartz_deltas',\n\t'minecraft:ore_quartz_nether',\n\t'minecraft:ore_redstone',\n\t'minecraft:ore_redstone_lower',\n\t'minecraft:ore_soul_sand',\n\t'minecraft:ore_tuff',\n\t'minecraft:patch_berry_common',\n\t'minecraft:patch_berry_rare',\n\t'minecraft:patch_cactus_decorated',\n\t'minecraft:patch_cactus_desert',\n\t'minecraft:patch_crimson_roots',\n\t'minecraft:patch_dead_bush',\n\t'minecraft:patch_dead_bush_2',\n\t'minecraft:patch_dead_bush_badlands',\n\t'minecraft:patch_fire',\n\t'minecraft:patch_grass_badlands',\n\t'minecraft:patch_grass_forest',\n\t'minecraft:patch_grass_jungle',\n\t'minecraft:patch_grass_normal',\n\t'minecraft:patch_grass_plain',\n\t'minecraft:patch_grass_savanna',\n\t'minecraft:patch_grass_taiga',\n\t'minecraft:patch_grass_taiga_2',\n\t'minecraft:patch_large_fern',\n\t'minecraft:patch_melon',\n\t'minecraft:patch_pumpkin',\n\t'minecraft:patch_soul_fire',\n\t'minecraft:patch_sugar_cane',\n\t'minecraft:patch_sugar_cane_badlands',\n\t'minecraft:patch_sugar_cane_desert',\n\t'minecraft:patch_sugar_cane_swamp',\n\t'minecraft:patch_sunflower',\n\t'minecraft:patch_tall_grass',\n\t'minecraft:patch_tall_grass_2',\n\t'minecraft:patch_waterlily',\n\t'minecraft:pine_checked',\n\t'minecraft:pine_on_snow',\n\t'minecraft:pointed_dripstone',\n\t'minecraft:red_mushroom_nether',\n\t'minecraft:red_mushroom_normal',\n\t'minecraft:red_mushroom_old_growth',\n\t'minecraft:red_mushroom_swamp',\n\t'minecraft:red_mushroom_taiga',\n\t'minecraft:rooted_azalea_tree',\n\t'minecraft:sea_pickle',\n\t'minecraft:seagrass_cold',\n\t'minecraft:seagrass_deep',\n\t'minecraft:seagrass_deep_cold',\n\t'minecraft:seagrass_deep_warm',\n\t'minecraft:seagrass_normal',\n\t'minecraft:seagrass_river',\n\t'minecraft:seagrass_simple',\n\t'minecraft:seagrass_swamp',\n\t'minecraft:seagrass_warm',\n\t'minecraft:small_basalt_columns',\n\t'minecraft:spore_blossom',\n\t'minecraft:spring_closed',\n\t'minecraft:spring_closed_double',\n\t'minecraft:spring_delta',\n\t'minecraft:spring_lava',\n\t'minecraft:spring_lava_frozen',\n\t'minecraft:spring_open',\n\t'minecraft:spring_water',\n\t'minecraft:spruce_checked',\n\t'minecraft:spruce_on_snow',\n\t'minecraft:super_birch_bees',\n\t'minecraft:super_birch_bees_0002',\n\t'minecraft:trees_badlands',\n\t'minecraft:trees_birch',\n\t'minecraft:trees_birch_and_oak',\n\t'minecraft:trees_flower_forest',\n\t'minecraft:trees_grove',\n\t'minecraft:trees_jungle',\n\t'minecraft:trees_meadow',\n\t'minecraft:trees_old_growth_pine_taiga',\n\t'minecraft:trees_old_growth_spruce_taiga',\n\t'minecraft:trees_plains',\n\t'minecraft:trees_savanna',\n\t'minecraft:trees_snowy',\n\t'minecraft:trees_sparse_jungle',\n\t'minecraft:trees_swamp',\n\t'minecraft:trees_taiga',\n\t'minecraft:trees_water',\n\t'minecraft:trees_windswept_forest',\n\t'minecraft:trees_windswept_hills',\n\t'minecraft:trees_windswept_savanna',\n\t'minecraft:twisting_vines',\n\t'minecraft:underwater_magma',\n\t'minecraft:vines',\n\t'minecraft:void_start_platform',\n\t'minecraft:warm_ocean_vegetation',\n\t'minecraft:warped_forest_vegetation',\n\t'minecraft:warped_fungi',\n\t'minecraft:weeping_vines',\n]\n","import { fetchAssets, fetchManifest, fetchSounds } from './DataFetcher'\nimport type { VersionId } from './Schemas'\n\nexport type VersionManifest = {\n\tlatest: {\n\t\trelease: string,\n\t\tsnapshot: string,\n\t},\n\tversions: {\n\t\tid: string,\n\t\ttype: string,\n\t\turl: string,\n\t}[],\n}\nlet Manifest: VersionManifest | Promise | null = null\n\nexport type VersionAssets = {\n\t[key: string]: {\n\t\thash: string,\n\t},\n}\nconst VersionAssets: Record> = {}\n\nexport type SoundEvents = {\n\t[key: string]: {\n\t\tsounds: (string | { name: string })[],\n\t},\n}\nconst SoundEvents: Record> = {}\n\nexport async function getManifest() {\n\tif (!Manifest) {\n\t\tManifest = fetchManifest()\n\t}\n\treturn Manifest\n}\n\nexport async function getAssets(version: VersionId) {\n\tif (!VersionAssets[version]) {\n\t\tVersionAssets[version] = (async () => {\n\t\t\tconst manifest = await getManifest()\n\t\t\treturn await fetchAssets(version, manifest)\n\t\t})()\n\t}\n\treturn VersionAssets[version]\n}\n\nexport async function getSounds(version: VersionId) {\n\tif (!SoundEvents[version]) {\n\t\tSoundEvents[version] = (async () => {\n\t\t\tconst assets = await getAssets(version)\n\t\t\treturn await fetchSounds(version, assets)\n\t\t})()\n\t}\n\treturn SoundEvents[version]\n}\n","import { DataModel } from '@mcschema/core'\nimport type { NoiseOctaves } from 'deepslate'\nimport { FixedBiome, LegacyRandom, NormalNoise, TerrainShaper } from 'deepslate'\nimport init, { biome_parameters, climate_noise, climate_sampler, multi_noise } from 'deepslate-rs'\n// @ts-expect-error\nimport wasm from 'deepslate-rs/deepslate_rs_bg.wasm?url'\nimport type { VersionId } from '../services'\nimport { fetchPreset } from '../services'\nimport { BiMap, clamp, deepClone, deepEqual, square, stringToColor } from '../Utils'\n\nlet ready = false\nasync function loadWasm() {\n\tif (ready) return\n\tawait init(wasm)\n\tready = true\n\tconsole.debug(`Loaded deepslate-rs from \"${wasm}\"`)\n}\n\nconst LAYERS = {\n\ttemperature: [-1, 1],\n\thumidity: [-1, 1],\n\tcontinentalness: [-1.1, 1],\n\terosion: [-1, 1],\n\tweirdness: [-1, 1],\n\toffset: [-1, 1],\n\tfactor: [0, 12],\n\tjaggedness: [0, 1],\n}\n\ntype Triple = [number, number, number]\ntype BiomeColors = Record\ntype BiomeSourceOptions = {\n\toctaves: NoiseOctaves,\n\tshaper: TerrainShaper,\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: bigint,\n\tversion: VersionId,\n\tlayers: Set,\n}\n\ninterface CachedBiomeSource {\n\tgetBiome(x: number, y: number, z: number): string\n\tgetBiomes?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): string[]\n\tgetClimate?(layers: Set, xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): {[k: string]: number}[]\n}\n\nlet cacheState: any\nlet biomeSourceCache: CachedBiomeSource\n\nexport async function biomeMap(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst data = img.data\n\tconst ox = -Math.round(options.offset[0]) - 100 + options.res / 2\n\tconst oz = -Math.round(options.offset[1]) - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\n\tconst xRange: Triple = [ox * options.scale, (200 + ox) * options.scale, options.res * options.scale]\n\tconst zRange: Triple = [oz * options.scale, (200 + oz) * options.scale, options.res * options.scale]\n\n\tconst biomes = !options.layers.has('biomes') ? undefined : biomeSource.getBiomes?.(...xRange, 64, 65, 1, ...zRange)\n\tconst layers = [...options.layers].filter(l => l !== 'biomes') as (keyof typeof LAYERS)[]\n\tconst noise = layers.length === 0 ? undefined : biomeSource.getClimate?.(new Set(layers), ...xRange, 64, 65, 1, ...zRange)\n\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let z = 0; z < 200; z += options.res) {\n\t\t\tconst i = z * row + x * col\n\t\t\tconst j = (x / options.res) * 200 / options.res + z / options.res\n\t\t\tconst worldX = (x + ox) * options.scale\n\t\t\tconst worldZ = (z + oz) * options.scale\n\t\t\tlet color: Triple = [50, 50, 50]\n\t\t\tif (options.layers.has('biomes')) {\n\t\t\t\tconst biome = biomes?.[j] ?? biomeSource.getBiome(worldX, 64, worldZ)\n\t\t\t\tcolor = getBiomeColor(biome, options.biomeColors)\n\t\t\t} else if (noise && layers[0]) {\n\t\t\t\tconst value = noise[j][layers[0]]\n\t\t\t\tconst [min, max] = LAYERS[layers[0]]\n\t\t\t\tconst brightness = (value - min) / (max - min) * 256\n\t\t\t\tcolor = [brightness, brightness, brightness]\n\t\t\t}\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 async function getBiome(state: any, x: number, z: number, options: BiomeSourceOptions): Promise {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst [xx, zz] = toWorld([x, z], options)\n\treturn biomeSource.getBiome(xx, 64, zz)\n}\n\nasync function getCached(state: any, options: BiomeSourceOptions): Promise<{ biomeSource: CachedBiomeSource}> {\n\tconst newState = [state, options.octaves, options.shaper.toJson(), `${options.seed}`, options.version]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\n\t\tbiomeSourceCache = await getBiomeSource(state, options)\n\t}\n\treturn {\n\t\tbiomeSource: biomeSourceCache,\n\t} \n}\n\nasync function getBiomeSource(state: any, options: BiomeSourceOptions): Promise {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'fixed':\n\t\t\treturn new FixedBiome(state.biome as string)\n\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\treturn {\n\t\t\t\tgetBiome(x: number, _y: number, z: number) {\n\t\t\t\t\tconst i = (((x >> shift) + (z >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\t\t\treturn (state.biomes?.[i].node as string)\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase 'multi_noise':\n\t\t\tswitch(state.preset?.replace(/^minecraft:/, '')) {\n\t\t\t\tcase 'nether':\n\t\t\t\t\tstate = options.version === '1.18' ? NetherPreset18 : NetherPreset\n\t\t\t\t\tbreak\n\t\t\t\tcase 'overworld':\n\t\t\t\t\tstate = options.version === '1.18' ? await OverworldPreset18() : state\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tstate = DataModel.unwrapLists(state)\n\t\t\tif (options.version === '1.18') {\n\t\t\t\tawait loadWasm()\n\t\t\t\tconst BiomeIds = new BiMap()\n\t\t\t\tconst param = (p: number | number[]) => {\n\t\t\t\t\treturn typeof p === 'number' ? [p, p] : p\n\t\t\t\t}\n\t\t\t\tconst [t0, t1, h0, h1, c0, c1, e0, e1, w0, w1, d0, d1, o, b] = [[], [], [], [], [], [], [], [], [], [], [], [], [], []] as number[][]\n\t\t\t\tfor (const i of state.biomes) {\n\t\t\t\t\tconst { temperature, humidity, continentalness, erosion, weirdness, depth, offset } = i.parameters\n\t\t\t\t\tt0.push(param(temperature)[0])\n\t\t\t\t\tt1.push(param(temperature)[1])\n\t\t\t\t\th0.push(param(humidity)[0])\n\t\t\t\t\th1.push(param(humidity)[1])\n\t\t\t\t\tc0.push(param(continentalness)[0])\n\t\t\t\t\tc1.push(param(continentalness)[1])\n\t\t\t\t\te0.push(param(erosion)[0])\n\t\t\t\t\te1.push(param(erosion)[1])\n\t\t\t\t\tw0.push(param(weirdness)[0])\n\t\t\t\t\tw1.push(param(weirdness)[1])\n\t\t\t\t\td0.push(param(depth)[0])\n\t\t\t\t\td1.push(param(depth)[1])\n\t\t\t\t\to.push(offset)\n\t\t\t\t\tb.push(BiomeIds.getOrPut(i.biome, Math.floor(Math.random() * 2147483647)))\n\t\t\t\t}\n\t\t\t\tconst parameters = biome_parameters(new Float64Array(t0), new Float64Array(t1), new Float64Array(h0), new Float64Array(h1), new Float64Array(c0), new Float64Array(c1), new Float64Array(e0), new Float64Array(e1), new Float64Array(w0), new Float64Array(w1), new Float64Array(d0), new Float64Array(d1), new Float64Array(o), new Int32Array(b))\n\t\t\t\tconst sampler = climate_sampler(options.seed, options.octaves.temperature.firstOctave, new Float64Array(options.octaves.temperature.amplitudes), options.octaves.humidity.firstOctave, new Float64Array(options.octaves.humidity.amplitudes), options.octaves.continentalness.firstOctave, new Float64Array(options.octaves.continentalness.amplitudes), options.octaves.erosion.firstOctave, new Float64Array(options.octaves.erosion.amplitudes), options.octaves.weirdness.firstOctave, new Float64Array(options.octaves.weirdness.amplitudes), options.octaves.shift.firstOctave, new Float64Array(options.octaves.shift.amplitudes))\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x, y, z) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\treturn BiomeIds.getA(ids[0]) ?? 'unknown'\n\t\t\t\t\t},\n\t\t\t\t\tgetBiomes(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\treturn [...ids].map(id => BiomeIds.getA(id) ?? 'unknown')\n\t\t\t\t\t},\n\t\t\t\t\tgetClimate(layers, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\tconst result = []\n\t\t\t\t\t\tfor (let i = 0; i < climate.length; i += 7) {\n\t\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(i, i + 5)\n\t\t\t\t\t\t\tconst point = TerrainShaper.point(c, e, w)\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t\t\t...layers.has('offset') && { offset: options.shaper.offset(point) },\n\t\t\t\t\t\t\t\t...layers.has('factor') && { factor: options.shaper.factor(point) },\n\t\t\t\t\t\t\t\t...layers.has('jaggedness') && { jaggedness: options.shaper.jaggedness(point) },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst noise = ['altitude', 'temperature', 'humidity', 'weirdness']\n\t\t\t\t\t.map((id, i) => {\n\t\t\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\t\t\tconfig.firstOctave = clamp(config.firstOctave ?? -7, -100, -1)\n\t\t\t\t\t\treturn new NormalNoise(new LegacyRandom(options.seed + BigInt(i)), config)\n\t\t\t\t\t})\n\t\t\t\tif (!Array.isArray(state.biomes) || state.biomes.length === 0) {\n\t\t\t\t\treturn new FixedBiome('unknown')\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x: number, _y: number, z: number): string {\n\t\t\t\t\t\tconst n = noise.map(n => n.sample(x, z, 0))\n\t\t\t\t\t\tlet minDist = Infinity\n\t\t\t\t\t\tlet minBiome = ''\n\t\t\t\t\t\tfor (const { biome, parameters: p } of state.biomes) {\n\t\t\t\t\t\t\tconst dist = square(p.altitude - n[0]) + square(p.temperature - n[1]) + square(p.humidity - n[2]) + square(p.weirdness - n[3]) + square(p.offset)\n\t\t\t\t\t\t\tif (dist < minDist) {\n\t\t\t\t\t\t\t\tminDist = dist\n\t\t\t\t\t\t\t\tminBiome = biome\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn minBiome\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t}\n\tthrow new Error('Unknown biome source')\n}\n\nfunction getBiomeColor(biome: string, biomeColors: BiomeColors): Triple {\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, z]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst zz = (z - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, zz]\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:old_growth_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:old_growth_pine_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_hills': [136,136,136],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:windswept_gravelly_hills': [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:sparse_jungle': [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:extreme_hills': [96,96,96],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:windswept_hills': [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:windswept_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:snowy_plains': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:stony_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:old_growth_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_badlands': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n\t'minecraft:windswept_forest': [80,112,80],\n\t'minecraft:snowy_slopes': [140, 195, 222],\n\t'minecraft:lofty_peaks': [196, 168, 193],\n\t'minecraft:jagged_peaks': [196, 168, 193],\n\t'minecraft:snowcapped_peaks': [200, 198, 200],\n\t'minecraft:frozen_peaks': [200, 198, 200],\n\t'minecraft:stony_peaks': [82, 92, 103],\n\t'minecraft:grove': [150, 150, 189],\n\t'minecraft:meadow': [169, 197, 80],\n\t'minecraft:lush_caves': [112, 255, 79],\n\t'minecraft:dripstone_caves': [140, 124, 0],\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\nconst NetherPreset18 = {type:'minecraft:multi_noise',biomes:[{biome:'minecraft:nether_wastes',parameters:{temperature:0,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{temperature:0,humidity:-0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{temperature:0.4,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{temperature:0,humidity:0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{temperature:-0.5,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.175}}]}\n\nasync function OverworldPreset18() {\n\tconst overworld = await fetchPreset('1.18', 'dimension', 'overworld')\n\treturn overworld.generator.biome_source\n}\n","import { DataModel } from '@mcschema/core'\nimport type { Random } from 'deepslate'\nimport { LegacyRandom, PerlinNoise } from 'deepslate'\nimport type { VersionId } from '../services'\nimport { clamp, stringToColor } from '../Utils'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: Random,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n\tnextFloat(): number,\n\tnextInt(max: number): number,\n\tsampleInt(provider: any): number,\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: bigint,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(random.fork(), 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t\tnextFloat: () => random.nextFloat(),\n\t\tnextInt: (max: number) => random.nextInt(max),\n\t\tsampleInt(value) { return sampleInt(value, this) },\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], DataModel.unwrapLists(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 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 + ctx.nextInt(1 + (value.spread ?? 0))\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 + ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + ctx.nextInt(ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1) + 1)\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.nextFloat() < 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.nextFloat() < (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?.[ctx.nextInt(config?.features?.length ?? 0)]\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.nextFloat() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.nextFloat() < 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(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(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.sample(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 + ctx.nextInt(3) + 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 + ctx.nextInt(3) + 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 = ctx.nextInt(config?.spread ?? 0) + ctx.nextInt(config?.spread ?? 0) - (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 + ctx.nextInt(6)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t4 + ctx.nextInt(28),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + ctx.nextInt(ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = ctx.nextInt(1 + ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\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, ctx.nextInt(y * 2))\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 + ctx.nextInt(8),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + ctx.nextInt(8),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt((config.chance ?? 1) / 10) === 0) {\n\t\t\tconst y = ctx.nextInt(ctx.nextInt(256 - 8) + 8)\n\t\t\tif (y < ctx.seaLevel || ctx.nextInt((config?.chance ?? 1) / 8) == 0) {\n\t\t\t\tconst x = ctx.nextInt(16) + pos[0]\n\t\t\t\tconst z = ctx.nextInt(16) + 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 = ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\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 = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tsurface_relative_threshold: (config, pos) => {\n\t\tconst height = terrain[clamp(0, 63, pos[0])]\n\t\tconst min = height + (config?.min_inclusive ?? -Infinity)\n\t\tconst max = height + (config?.max_inclusive ?? Infinity)\n\t\treturn (pos[1] < min || pos[1] > max) ? [pos] : []\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt(config.chance ?? 1) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t\tctx.nextInt(256),\n\t\t\t\tpos[2] + ctx.nextInt(16),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { LegacyRandom, PerlinNoise } from 'deepslate'\nimport { clampedLerp, lerp2 } from '../../Utils'\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: bigint) {\n\t\tconst random = new LegacyRandom(seed)\n\t\tthis.minLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.maxLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.mainPerlinNoise = new PerlinNoise(random, -7, [1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.depthNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\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.sample(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.sample(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.sample(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.sample(\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 { DataModel } from '@mcschema/core'\nimport type { BlockPos, BlockState } from 'deepslate'\nimport { Chunk, ChunkPos, FixedBiome, NoiseChunkGenerator, NoiseGeneratorSettings } from 'deepslate'\nimport { getOctaves } from '../components'\nimport type { VersionId } from '../services'\nimport { checkVersion } from '../services'\nimport { deepClone, deepEqual } from '../Utils'\nimport { NoiseChunkGenerator as OldNoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale?: number,\n\tbiomeDepth?: number,\n\toffset: number,\n\twidth: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nconst Z = 0\n\nconst colors: Record = {\n\t'minecraft:air': [150, 160, 170],\n\t'minecraft:water': [20, 80, 170],\n\t'minecraft:lava': [200, 100, 0],\n\t'minecraft:stone': [50, 50, 50],\n\t'minecraft:netherrack': [100, 40, 40],\n\t'minecraft:end_stone': [200, 200, 140],\n}\n\nlet cacheState: any\nlet generatorCache: NoiseChunkGenerator\nlet chunkCache: Chunk[] = []\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tif (checkVersion(options.version, '1.18')) {\n\t\tconst { settings, generator } = getCached(state, options)\n\n\t\tconst slice = new LevelSlice(-options.offset, options.width, settings.noise.minY, settings.noise.height)\n\t\tslice.fill(generator)\n\n\t\tconst data = img.data\n\t\tfor (let x = 0; x < options.width; x += 1) {\n\t\t\tfor (let y = 0; y < settings.noise.height; y += 1) {\n\t\t\t\tconst i = x * 4 + (settings.noise.height-y-1) * 4 * img.width\n\t\t\t\tconst state = slice.getBlockState([x - options.offset, y, Z])\n\t\t\t\tconst color = colors[state.getName()] ?? [0, 0, 0]\n\t\t\t\tdata[i] = color[0]\n\t\t\t\tdata[i + 1] = color[1]\n\t\t\t\tdata[i + 2] = color[2]\n\t\t\t\tdata[i + 3] = 255\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tconst generator = new OldNoiseChunkGenerator(options.seed)\n\tgenerator.reset(state.noise, options.biomeDepth ?? 0, options.biomeScale ?? 0, options.offset, options.width)\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.noise.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 getCached(state: unknown, options: NoiseSettingsOptions) {\n\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(state))\n\tsettings.octaves = getOctaves(settings)\n\n\tconst newState = [state, `${options.seed}`]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\t\tchunkCache = []\n\t\tconst biomeSource = new FixedBiome('unknown')\n\t\tgeneratorCache = new NoiseChunkGenerator(options.seed, biomeSource, settings)\n\t}\n\treturn {\n\t\tsettings,\n\t\tgenerator: generatorCache,\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\nclass LevelSlice {\n\tprivate readonly chunks: Chunk[]\n\tprivate readonly filled: boolean[]\n\n\tconstructor(\n\t\tprivate readonly minX: number,\n\t\twidth: number,\n\t\tminY: number,\n\t\theight: number,\n\t) {\n\t\tthis.filled = []\n\t\tthis.chunks = [...Array(Math.ceil(width / 16) + 1)]\n\t\t\t.map((_, i) => {\n\t\t\t\tconst x = (minX >> 4) + i\n\t\t\t\tconst cached = chunkCache.find(c => c.pos[0] === x)\n\t\t\t\tif (cached) {\n\t\t\t\t\tthis.filled[i] = true\n\t\t\t\t\treturn cached\n\t\t\t\t}\n\t\t\t\treturn new Chunk(minY, height, ChunkPos.create(x, Z >> 4))\n\t\t\t})\n\t}\n\n\tpublic fill(generator: NoiseChunkGenerator) {\n\t\tthis.chunks.forEach((chunk, i) => {\n\t\t\tif (!this.filled[i]) {\n\t\t\t\tgenerator.fill(chunk)\n\t\t\t\tthis.filled[i] = true\n\t\t\t\tchunkCache.push(chunk)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic getBlockState(pos: BlockPos): BlockState {\n\t\tconst chunkIndex = (pos[0] >> 4) - (this.minX >> 4)\n\t\treturn this.chunks[chunkIndex].getBlockState(pos)\n\t}\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport type { NoiseOctaves } from 'deepslate'\nimport { NoiseGeneratorSettings, TerrainShaper } from 'deepslate'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { biomeMap, getBiome } from '../../previews'\nimport { newSeed } from '../../Utils'\n\nconst LAYERS = ['biomes', 'temperature', 'humidity', 'continentalness', 'erosion', 'weirdness', 'offset', 'factor', 'jaggedness'] as const\n\nconst OverworldShaper = TerrainShaper.overworld()\n\nexport const BiomeSourcePreview = ({ model, data, shown, lang, version }: PreviewProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [focused, setFocused] = useState(undefined)\n\tconst [layers, setLayers] = useState(new Set(['biomes']))\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst res = useRef(1)\n\tconst refineTimeout = useRef(undefined)\n\n\tconst seed = BigInt(model.get(new Path(['generator', 'seed'])))\n\tconst octaves = getOctaves(model.get(new Path(['generator', 'settings'])))\n\tconst shaper = getShaper(model.get(new Path(['generator', 'settings'])))\n\tconst state = shown ? calculateState(data, octaves, shaper) : ''\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [200 / res.current, 200 / res.current]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { octaves, shaper, biomeColors: {}, layers, offset: offset.current, scale, seed, res: res.current, version }\n\t\t\tawait biomeMap(data, img, options)\n\t\t\tif (res.current === 4) {\n\t\t\t\tclearTimeout(refineTimeout.current)\n\t\t\t\trefineTimeout.current = setTimeout(() => {\n\t\t\t\t\tres.current = 1\n\t\t\t\t\tredraw()\n\t\t\t\t}, 150) as any\n\t\t\t}\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 200\n\t\t\toffset.current[1] = offset.current[1] + dy * 200\n\t\t\tclearTimeout(refineTimeout.current)\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst options = { octaves, shaper, biomeColors: {}, layers, offset: offset.current, scale, seed, res: 1, version }\n\t\t\tconst biome = await getBiome(data, Math.floor(x * 200), Math.floor(y * 200), options)\n\t\t\tsetFocused(biome)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, scale, seed, layers])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, layers, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.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' &&\n\t\t\t\t\n\t\t\t\t\t{LAYERS.map(name => {\n\t\t\t\t\t\tconst enabled = layers.has(name)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsetLayers(new Set([name]))\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t}} />\n\t\t\t\t\t})}\n\t\t\t\t}\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 newSeed(model)} />}\n\t\t
\n\t\t\n\t\n}\n\nfunction calculateState(data: any, octaves: NoiseOctaves, shaper: TerrainShaper) {\n\treturn JSON.stringify([data, octaves, shaper.toJson()])\n}\n\nexport function getOctaves(obj: any): NoiseOctaves {\n\tif (typeof obj !== 'string') {\n\t\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(obj))\n\t\tobj = settings.noise.densityFactor === 0 && settings.noise.densityOffset === -0.030078125\n\t\t\t? 'minecraft:nether' : 'minecraft:overworld'\n\t}\n\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\tcase 'overworld':\n\t\tcase 'amplified':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -9, amplitudes: [1.5, 0, 1, 0, 0, 0] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1, 0, 0, 0, 0] },\n\t\t\t\tcontinentalness: { firstOctave: -9, amplitudes: [1, 1, 2, 2, 2, 1, 1, 1, 1] },\n\t\t\t\terosion: { firstOctave: -9, amplitudes: [1, 1, 0, 1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 2, 1, 0, 0, 0] },\n\t\t\t\tshift: { firstOctave: -3, amplitudes: [1, 1, 1, 0] },\n\t\t\t}\n\t\tcase 'end':\n\t\tcase 'floating_islands':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\thumidity: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tcontinentalness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\terosion: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tweirdness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tcontinentalness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\terosion: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t}\n}\n\nexport function getShaper(obj: any): TerrainShaper {\n\tif (typeof obj === 'string') {\n\t\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\t\tcase 'overworld':\n\t\t\tcase 'amplified':\n\t\t\t\treturn OverworldShaper\n\t\t\tdefault:\n\t\t\t\treturn TerrainShaper.fromJson({ offset: 0, factor: 0, jaggedness: 0 })\n\t\t}\n\t}\n\treturn TerrainShaper.fromJson(DataModel.unwrapLists(obj?.noise?.terrain_shaper))\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { decorator } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DecoratorPreview = ({ data, version, shown, lang }: PreviewProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(randomSeed())\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [scale * 16, scale * 16]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t},\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\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(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { normalNoise } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const NoisePreview = ({ lang, data, shown, version }: PreviewProps) => {\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [scale, setScale] = useState(2)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst state = JSON.stringify([data])\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [256, 256]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, scale, seed, version }\n\t\t\tnormalNoise(data, img, options)\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 256\n\t\t\toffset.current[1] = offset.current[1] + dy * 256\n\t\t\tredraw()\n\t\t},\n\t}, [state, scale, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t changeScale(scale * 1.5)} />\n\t\t\t changeScale(scale / 1.5)} />\n\t\t\t setSeed(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import { DataModel } from '@mcschema/core'\nimport { LegacyRandom, NoiseParameters, NormalNoise } from 'deepslate'\nimport type { VersionId } from '../services'\n\nexport type NoiseOptions = {\n\toffset: [number, number],\n\tscale: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nexport function normalNoise(state: any, img: ImageData, options: NoiseOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst params = NoiseParameters.fromJson(DataModel.unwrapLists(state))\n\tconst noise = new NormalNoise(random, params)\n\n\tconst ox = -options.offset[0] - 100\n\tconst oz = -options.offset[1] - 100\n\tconst data = img.data\n\tfor (let x = 0; x < 256; x += 1) {\n\t\tfor (let y = 0; y < 256; y += 1) {\n\t\t\tconst i = x * 4 + y * 4 * 256\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oz) * options.scale\n\t\t\tconst color = (noise.sample(xx, yy, 0) + 1) * 128\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","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { checkVersion } from '../../services'\nimport { randomSeed } from '../../Utils'\n\nexport const NoiseSettingsPreview = ({ lang, data, shown, version }: PreviewProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [focused, setFocused] = useState(undefined)\n\tconst offset = useRef(0)\n\tconst state = JSON.stringify([data, biomeScale, biomeDepth])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { biomeDepth, biomeScale, offset: offset.current, width: img.width, seed, version }\n\t\t\tnoiseSettings(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(_, y) {\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tsetFocused(`${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{checkVersion(version, undefined, '1.17') &&\n\t\t\t\t\n\t\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t\n\t\t\t}\n\t\t\t setSeed(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport type { VersionId } from '../../services'\nimport { BiomeSourcePreview, DecoratorPreview, NoisePreview, NoiseSettingsPreview } from '../previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise', 'worldgen/noise_settings', 'worldgen/configured_feature']\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\tif (id === 'dimension' && model?.get(new Path(['generator', 'type']))?.endsWith('noise')) {\n\t\tconst data = model.get(new Path(['generator', 'biome_source']))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/noise' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/noise_settings' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/configured_feature' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\treturn <>\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../services'\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\tconst res = value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj.node, props)\n\t\t)\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a as any]\n\t\t}\n\t\treturn res\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\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\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\tconst out = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t\tif (out !== undefined && out !== null) {\n\t\t\t\t\tres[f] = out\n\t\t\t\t}\n\t\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n}\n","import type { VersionId } from './services'\nimport { VersionIds } from './services'\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\texport const ID_FORMAT = 'output_format'\n\texport const ID_SOUNDS_VERSION = 'minecraft_sounds_version'\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 getFormat() {\n\t\treturn localStorage.getItem(ID_FORMAT) ?? 'json'\n\t}\n\n\texport function getSoundsVersion() {\n\t\treturn localStorage.getItem(ID_SOUNDS_VERSION) ?? 'latest'\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 | undefined) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n\n\texport function setFormat(format: string | undefined) {\n\t\tif (format) localStorage.setItem(ID_FORMAT, format)\n\t}\n\n\texport function setSoundsVersion(version: string | undefined) {\n\t\tif (version) localStorage.setItem(ID_SOUNDS_VERSION, version)\n\t}\n}\n","import { DataModel, ModelPath } from '@mcschema/core'\nimport json from 'comment-json'\nimport yaml from 'js-yaml'\nimport { useCallback, 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 '../../services'\nimport { Store } from '../../Store'\nimport { message } from '../../Utils'\n\nconst OUTPUT_CHARS_LIMIT = 10000\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n\tminified: undefined,\n}\n\nconst FORMATS: Record any,\n\tstringify: (v: any, indentation: string | number | undefined) => string,\n}> = {\n\tjson: {\n\t\tparse: json.parse,\n\t\tstringify: (v, i) => json.stringify(v, null, i),\n\t},\n\tyaml: {\n\t\tparse: yaml.load,\n\t\tstringify: (v, i) => yaml.dump(v, {\n\t\t\tflowLevel: i === undefined ? 0 : -1,\n\t\t\tindent: typeof i === 'string' ? 4 : i,\n\t\t}),\n\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\tcopySuccess: () => unknown,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst [format, setFormat] = useState(Store.getFormat())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tconst getOutput = useCallback((model: DataModel, blockStates: BlockStateRegistry) => {\n\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, { blockStates })\n\t\treturn FORMATS[format].stringify(data, INDENT[indent]) + '\\n'\n\t}, [indent, format])\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst output = getOutput(model, blockStates)\n\t\t\t\tif (output.length >= OUTPUT_CHARS_LIMIT) {\n\t\t\t\t\tsource.current.value = output.slice(0, OUTPUT_CHARS_LIMIT) + `\\n\\nOutput is too large to display (+${OUTPUT_CHARS_LIMIT} chars)\\nExport to view complete output\\n\\n`\n\t\t\t\t} else {\n\t\t\t\t\tsource.current.value = output\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${message(e)}`)\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\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent, format])\n\n\tconst onImport = () => {\n\t\tif (source.current.value.length === 0) return\n\t\ttry {\n\t\t\tconst data = FORMATS[format].parse(source.current.value)\n\t\t\tmodel?.reset(DataModel.wrapLists(data), false)\n\t\t} catch (e) {\n\t\t\tonError(`Error importing: ${message(e)}`)\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && model && blockStates) {\n\t\t\tnavigator.clipboard.writeText(getOutput(model, blockStates)).then(() => {\n\t\t\t\tcopySuccess()\n\t\t\t})\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && model && blockStates && download.current) {\n\t\t\tconst content = encodeURIComponent(getOutput(model, blockStates))\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.${format}`)\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\tconst changeFormat = (value: string) => {\n\t\tStore.setFormat(value)\n\t\tsetFormat(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\t
\n\t\t\t\t{Object.keys(FORMATS).map(key =>\n\t\t\t\t\t changeFormat(key)} />)}\n\t\t\t
\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import type { INode, Path } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\n\nexport class ModelWrapper extends DataModel {\n\tconstructor(\n\t\tschema: INode,\n\t\tprivate readonly mapper: (path: Path) => Path,\n\t\tprivate readonly getter: (path: Path) => any,\n\t\tprivate readonly setter: (path: Path, value: any, silent?: boolean) => any,\n\t) {\n\t\tsuper(schema)\n\t}\n\n\tmap(path: Path) {\n\t\treturn this.mapper(path)\n\t}\n\n\tget(path: Path) {\n\t\treturn this.getter(path)\n\t}\n\n\tset(path: Path, value: any, silent?: boolean) {\n\t\treturn this.setter(path, value, silent)\n\t}\n}\n","import type { BooleanHookParams, EnumOption, Hook, INode, NodeChildren, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, ListNode, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { memo } from 'preact/compat'\nimport { useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, Octicon } from '../components'\nimport { useFocus } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { CachedDecorator, CachedFeature } from '../services'\nimport { deepClone, deepEqual, hexId, isObject, newSeed } from '../Utils'\nimport { ModelWrapper } from './ModelWrapper'\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'recipe.type', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'dimension.generator.biome_source.preset', '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', 'block_predicate.type', 'material_rule.type', 'material_condition.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', 'decorator.block_survives_filter.state', 'material_rule.block.result_state']\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', 'generator_biome.biome', 'block_predicate.type', 'material_rule.type', 'material_condition.type']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\nconst fixedLists = ['generator_biome.parameters.temperature', 'generator_biome.parameters.humidity', 'generator_biome.parameters.continentalness', 'generator_biome.parameters.erosion', 'generator_biome.parameters.depth', 'generator_biome.parameters.weirdness', 'feature.end_spike.crystal_beam_target', 'feature.end_gateway.exit', 'decorator.block_filter.offset', 'block_predicate.matching_blocks.offset', 'block_predicate.matching_fluids.offset', 'model_element.from', 'model_element.to', 'model_element.rotation.origin', 'model_element.faces.uv', 'item_transform.rotation', 'item_transform.translation', 'item_transform.scale']\nconst collapsedFields = ['noise_settings.surface_rule', 'noise_settings.noise.terrain_shaper']\n\nconst findGenerator = (id: string) => {\n\treturn config.generators.find(g => g.id === id.replace(/^\\$/, ''))\n}\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\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, VersionId, BlockStateRegistry, Record], JSXTriple>\n\ntype NodeProps = T & {\n\tnode: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record,\n}\n\nexport function FullNode({ model, lang, version, blockStates }: { model: DataModel, lang: string, version: VersionId, blockStates: BlockStateRegistry }) {\n\tconst path = new ModelPath(model)\n\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, deepClone(model.data), lang, version, blockStates, {})\n\treturn suffix?.props?.children.some((c: any) => c) ?
\n\t\t
{prefix}{suffix}
\n\t\t
{body}
\n\t
: body\n}\n\nconst renderHtml: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, version, states, ctx) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, version, states, ctx)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (type: string) => {\n\t\t\tconst c = choices.find(c => c.type === type) ?? choice\n\t\t\tconst def = c.node.default()\n\t\t\tconst newValue = c.change\n\t\t\t\t? c.change(DataModel.unwrapLists(value))\n\t\t\t\t: config.choiceContext === 'feature' && def?.type === 'minecraft:decorated' ? def.config.feature : def\n\t\t\tpath.model.set(path, DataModel.wrapLists(newValue))\n\t\t}\n\t\tconst inject = \n\t\treturn [prefix, <>{inject}{suffix}, body]\n\t},\n\n\tlist({ children, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\t\tconst [maxShown, setMaxShown] = useState(50)\n\n\t\tconst context = path.getContext().join('.')\n\t\tif (fixedLists.includes(context)) {\n\t\t\tconst prefix = <>\n\t\t\t\t{[...Array(config.maxLength!)].map((_, i) =>\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\n\t\t\tconst suffix = <>{[...Array(config.maxLength)].map((_, i) => {\n\t\t\t\tconst child = children.hook(this, path.modelPush(i), value?.[i]?.node, lang, version, states, ctx)\n\t\t\t\treturn child[1]\n\t\t\t})}\n\t\t\treturn [prefix, suffix, null]\n\t\t}\n\n\t\tconst onAdd = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [{ node, id: hexId() }, ...value])\n\t\t}\n\t\tconst onAddBottom = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [...value, { node, id: hexId() }])\n\t\t}\n\t\tconst suffix = \n\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map(({ node: cValue, id: cId }, index) => {\n\t\t\t\tif (index === maxShown) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\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\tif (index > maxShown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(cId)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst actions: MenuAction[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'duplicate',\n\t\t\t\t\t\tlabel: 'duplicate',\n\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\tconst v = [...path.get()]\n\t\t\t\t\t\t\tv.splice(index, 0, { id: hexId(), node: deepClone(cValue) })\n\t\t\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\treturn \n\t\t\t\t\t{canToggle && }\n\t\t\t\t\t\n\t\t\t\t\t{value.length > 1 &&
\n\t\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\t{(value && value.length > 0 && value.length <= maxShown) &&
\n\t\t\t\t\n\t\t\t
}\n\t\t\n\t\treturn [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), DataModel.wrapLists(children.default()))\n\t\t}\n\t\tconst blockState = config.validation?.validator === 'block_state_map' ? states?.[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\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, lang, version, states, ctx)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, version, states, ctx)[1]}\n\t\t\t\n\t\t\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(key)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\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\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn \n\t\t\t\t\t{canToggle && }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t})}\n\t\t\n\t\treturn [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n\n\tobject({ node, config, getActiveFields, getChildModelPath }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tif (path.getArray().length == 0 && isDecorated(config.context, value)) {\n\t\t\tconst { wrapper, fields } = createDecoratorsWrapper(getActiveFields(path), path, value)\n\t\t\tvalue = wrapper.data\n\t\t\tgetActiveFields = () => fields\n\t\t\tgetChildModelPath = (path, key) => new ModelPath(wrapper, new Path(path.getArray(), ['feature'])).push(key)\n\t\t}\n\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(DataModel.wrapLists(node.default()))\n\t\t\t\tsuffix = \n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = \n\t\t\t}\n\t\t}\n\t\tconst context = path.getContext().join('.')\n\t\tif (collapsedFields.includes(context)) {\n\t\t\tconst toggled = isToggled('')\n\t\t\tprefix = <>\n\t\t\t\t\n\t\t\t\n\t\t\tif (!toggled) {\n\t\t\t\treturn [prefix, suffix, null]\n\t\t\t}\n\t\t}\n\n\t\tconst newCtx = (typeof value === 'object' && value !== null && node.default()?.pools)\n\t\t\t? { ...ctx, loot: value?.type } : ctx\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && value !== null && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, version, states, newCtx)\n\t\t\t\t\t\tif (!cPrefix && !cSuffix && !((cBody?.props?.children?.length ?? 0) > 0)) return null\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}{cPrefix}\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \n\t\t\t\t\t})\n\t\t\t}\n\t\t\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n}\n\nfunction Collapsed({ path, value }: { path: ModelPath, value: any, schema: INode }) {\n\tconst context = path.getContext().join('.')\n\tswitch (context) {\n\t\tcase 'loot_table.pools.entry':\n\t\t\treturn \n\t\tcase 'function.set_contents.entries.entry':\n\t\tcase 'loot_pool.entries.entry':\n\t\t\treturn \n\t}\n\tfor (const child of Object.values(value ?? {})) {\n\t\tif (typeof child === 'string') {\n\t\t\treturn \n\t\t}\n\t}\n\treturn null\n}\n\nfunction useToggles() {\n\tconst [toggleState, setToggleState] = useState(new Map())\n\tconst [toggleAll, setToggleAll] = useState(undefined)\n\n\tconst expand = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(true)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, true)))\n\t\t}\n\t}\n\tconst collapse = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(false)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, false)))\n\t\t}\n\t}\n\t\n\tconst isToggled = (key: string) => {\n\t\tif (!(toggleState instanceof Map)) return false\n\t\treturn toggleState.get(key) ?? toggleAll\n\t}\n\n\treturn { expand, collapse, isToggled }\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t\n\t\t\n\t\n}\n\nfunction NumberSuffix({ path, config, integer, value, lang }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\tconst onColor = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = parseInt(value.slice(1), 16)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn <>\n\t\t {if (evt.key === 'Enter') onChange(evt)}} />\n\t\t{config?.color && }\n\t\t{['dimension.generator.seed', 'dimension.generator.biome_source.seed', 'world_settings.seed'].includes(path.getContext().join('.')) && }\n\t\n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, version, states }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tevt.stopPropagation()\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tif (newValue === value) return\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tconst id = !isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string' ? config.params.pool : undefined\n\n\tif (nbtFields.includes(context)) {\n\t\treturn \n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (id) {\n\t\t\tcontext = context.contextPush(id)\n\t\t} else if (isEnum(config)) {\n\t\t\tcontext = path\n\t\t}\n\t\treturn \n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn \n\t} else {\n\t\tconst datalistId = hexId()\n\t\tconst gen = id ? findGenerator(id) : undefined\n\t\tconsole.log(id, gen)\n\t\treturn <>\n\t\t\t {if (evt.key === 'Enter') onChange(evt)}}\n\t\t\t\tlist={values.length > 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && \n\t\t\t\t{values.map(v => }\n\t\t\t{gen && values.includes(value) && value.startsWith('minecraft:') &&\n\t\t\t\t{Octicon.link_external}}\n\t\t\n\t}\n}\n\ntype MenuAction = {\n\tlabel: string,\n\tdescription?: string,\n\ticon: keyof typeof Octicon,\n\tonSelect: () => unknown,\n}\n\ntype TreeNodeProps = {\n\tschema: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record,\n\tcompare?: any,\n\tlabel?: string,\n\tactions?: MenuAction[],\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, version, states, ctx, actions, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst context = path.getContext().join('.')\n\n\tconst [active, setActive] = useFocus()\n\tconst onContextMenu = (evt: MouseEvent) => {\n\t\tevt.preventDefault()\n\t\tsetActive()\n\t}\n\n\tconst newCtx: Record = { ...ctx, depth: (ctx.depth ?? 0) + 1 }\n\tdelete newCtx.index\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, version, states, newCtx)\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t\n\t\t\t{suffix}\n\t\t
\n\t\t{body &&
{body}
}\n\t
\n}\n\nconst MemoedTreeNode = memo(TreeNode, (prev, next) => {\n\treturn prev.schema === next.schema\n\t\t&& prev.lang === next.lang\n\t\t&& prev.path.equals(next.path)\n\t\t&& deepEqual(prev.ctx, next.ctx)\n\t\t&& deepEqual(prev.value, next.value)\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(lang: string, 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 = locale(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path, nested }: { lang: string, path: ModelPath, nested?: boolean }) {\n\tif (path.model instanceof ModelWrapper) {\n\t\tpath = path.model.map(path).withModel(path.model)\n\t}\n\tconst e = nested\n\t\t?\tpath.model.errors.getAll().filter(e => e.path.startsWith(path))\n\t\t: path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = locale(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = locale(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t{Octicon[icon]}\n\t\t{popup}\n\t
\n}\n\nfunction isDecorated(context: string | undefined, value: any) {\n\treturn context === 'feature'\n\t\t&& value?.type?.replace(/^minecraft:/, '') === 'decorated'\n\t\t&& isObject(value?.config)\n}\n\nfunction createDecoratorsWrapper(originalFields: NodeChildren, path: ModelPath, value: any) {\n\tconst decorators: any[] = []\n\tconst feature = iterateNestedDecorators(value, decorators)\n\tconst fields = {\n\t\ttype: originalFields.type,\n\t\tconfig: ObjectNode({\n\t\t\tdecorators: ListNode(CachedDecorator),\n\t\t\tfeature: CachedFeature,\n\t\t}, { context: 'feature.decorated' }),\n\t}\n\tconst schema = ObjectNode(fields, { context: 'feature' })\n\tconst featurePath = new Path(['config', 'feature'])\n\tconst decoratorsPath = new Path(['config', 'decorators'])\n\tconst model = path.getModel()\n\tconst wrapper: ModelWrapper = new ModelWrapper(schema, path => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\treturn new Path([...[...Array(decorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\treturn new Path([])\n\t\t\t}\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (typeof index === 'number') {\n\t\t\t\treturn new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t}\n\t\t}\n\t\treturn path\n\t}, path => {\n\t\tif (path.equals(decoratorsPath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\treturn newDecorators\n\t\t}\n\t\treturn model.get(wrapper.map(path))\n\t}, (path, value, silent) => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\tconst newPath =new Path([...[...Array(newDecorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t\treturn model.set(newPath, value, silent)\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\treturn model.set(new Path(), produceNestedDecorators(feature, value), silent)\n\t\t\t} else if (typeof index === 'number') {\n\t\t\t\tif (path.modelArr.length === 3 && value === undefined) {\n\t\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\t\tconst newDecorators: any[] = []\n\t\t\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\t\t\tnewDecorators.splice(index, 1)\n\t\t\t\t\tconst newValue = produceNestedDecorators(feature, newDecorators)\n\t\t\t\t\treturn model.set(new Path(), newValue, silent)\n\t\t\t\t} else {\n\t\t\t\t\tconst newPath = new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t\t\treturn model.set(newPath, value, silent)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tmodel.set(path, value, silent)\n\t})\n\twrapper.data = {\n\t\ttype: model.data.type,\n\t\tconfig: {\n\t\t\tdecorators,\n\t\t\tfeature,\n\t\t},\n\t}\n\twrapper.errors = model.errors\n\treturn { fields, wrapper }\n}\n\nfunction iterateNestedDecorators(value: any, decorators: any[]): any {\n\tif (value?.type?.replace(/^minecraft:/, '') !== 'decorated') {\n\t\treturn value\n\t}\n\tif (!isObject(value?.config)) {\n\t\treturn value\n\t}\n\tdecorators.push({ id: decorators.length, node: value.config.decorator })\n\treturn iterateNestedDecorators(value.config.feature ?? '', decorators)\n}\n\nfunction produceNestedDecorators(feature: any, decorators: any[]): any {\n\tif (decorators.length === 0) return feature\n\treturn {\n\t\ttype: 'minecraft:decorated',\n\t\tconfig: {\n\t\t\tdecorator: decorators.shift().node,\n\t\t\tfeature: produceNestedDecorators(feature, decorators),\n\t\t},\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useErrorBoundary, useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport { FullNode } from '../../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../../services'\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, version, model, blockStates, onError }: TreePanelProps) {\n\tif (!model || !blockStates || lang === 'none') return <>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <>\n\n\tconst [, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\treturn
\n\t\t\n\t
\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 '../services'\nimport { checkVersion } from '../services'\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 { Howl } from 'howler'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, NumberInput, RangeInput, TextInput } from '..'\nimport { locale } from '../../Locales'\nimport type { SoundEvents, VersionAssets } from '../../services'\nimport { getResourceUrl } from '../../services'\n\nexport interface SoundConfig {\n\tid: string,\n\tsound: string,\n\tdelay: number,\n\tpitch: number,\n\tvolume: number,\n}\ntype SoundConfigProps = SoundConfig & {\n\tlang: string,\n\tassets: VersionAssets,\n\tsounds: SoundEvents,\n\tonEdit: (changes: Partial) => unknown,\n\tonDelete: () => unknown,\n\tdelayedPlay?: number,\n}\nexport function SoundConfig({ lang, assets, sounds, sound, delay, pitch, volume, onEdit, onDelete, delayedPlay }: SoundConfigProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [loading, setLoading] = useState(true)\n\tconst [playing, setPlaying] = useState(false)\n\tconst [invalid, setInvalid] = useState(false)\n\tconst howls = useRef([])\n\tconst command = `playsound minecraft:${sound} master @s ~ ~ ~ ${volume} ${pitch}`\n\n\tuseEffect(() => {\n\t\tconst soundEvent = sounds[sound]\n\t\tsetInvalid((soundEvent?.sounds?.length ?? 0) === 0)\n\t\thowls.current.forEach(h => h.stop())\n\t\thowls.current = (soundEvent?.sounds ?? []).map(entry => {\n\t\t\tconst soundPath = typeof entry === 'string' ? entry : entry.name\n\t\t\tconst hash = assets[`minecraft/sounds/${soundPath}.ogg`].hash\n\t\t\tconst url = getResourceUrl(hash)\n\t\t\tconst howl = new Howl({\n\t\t\t\tsrc: [url],\n\t\t\t\tformat: ['ogg'],\n\t\t\t\tvolume,\n\t\t\t\trate: pitch,\n\t\t\t})\n\t\t\thowl.on('end', () => {\n\t\t\t\tsetPlaying(false)\n\t\t\t})\n\t\t\tconst completed = () => {\n\t\t\t\tif (loading && howls.current.every(h => h.state() === 'loaded')) {\n\t\t\t\t\tsetLoading(false)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (howl.state() === 'loaded') {\n\t\t\t\tsetTimeout(() => completed())\n\t\t\t} else {\n\t\t\t\thowl.on('load', () => {\n\t\t\t\t\tcompleted()\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn howl\n\t\t})\n\t\tsetLoading(true)\n\t}, [sound, sounds])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.rate(pitch))\n\t}, [pitch])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.volume(volume))\n\t}, [volume])\n\n\tconst play = () => {\n\t\tif (loading || invalid) return\n\t\tstop()\n\t\tconst howl = Math.floor(Math.random() * howls.current.length)\n\t\thowls.current[howl].play()\n\t\tsetPlaying(true)\n\t}\n\tconst stop = () => {\n\t\thowls.current.forEach(h => h.stop())\n\t}\n\tuseEffect(() => {\n\t\tif (delayedPlay) setTimeout(() => play(), delay * 50)\n\t}, [delayedPlay])\n\n\tuseEffect(() => {\n\t\treturn () => stop()\n\t}, [])\n\n\tconst [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef(undefined)\n\tconst copy = () => {\n\t\tnavigator.clipboard.writeText(command)\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\treturn
\n\t\t\n\t\t onEdit({ sound })} />\n\t\t\n\t\t onEdit({ delay })} />\n\t\t\n\t\t onEdit({ pitch })} />\n\t\t\n\t\t onEdit({ volume })} />\n\t\t\n\t\t {onDelete(); stop()}} />\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tdesc?: string,\n\tlink?: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, desc, link, icon, children }: ToolCardProps) {\n\tconst content = <>\n\t\t
\n\t\t\t{icon && Icons[icon]}\n\t\t\t
\n\t\t\t\t

{title}

\n\t\t\t\t

{desc}

\n\t\t\t
\n\t\t
\n\t\t{children &&
\n\t\t\t{children}\n\t\t
}\n\t\n\treturn link\n\t\t? {content}\n\t\t:
{content}
\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype WorldgenProps = {\n\tcategory: string,\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Category({ category, lang, changeTitle }: WorldgenProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.generator_category', loc(category)))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => g.category === category).map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t
\n}\n","import marked from 'marked'\nimport { useEffect, useMemo, useState } from 'preact/hooks'\nimport { Ad, Btn, ErrorPanel, Octicon, TextInput } from '../components'\nimport { locale } from '../Locales'\nimport type { ChangelogEntry, ChangelogVersion, VersionId } from '../services'\nimport { getChangelogs } from '../services'\nimport { hashString } from '../Utils'\n\ntype ChangelogProps = {\n\tpath?: string,\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n}\nexport function Changelog({ lang, changeTitle }: ChangelogProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tchangeTitle(loc('title.changelog'))\n\n\tconst [changelogs, setChangelogs] = useState([])\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(changelogs))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\tconst [search, setSearch] = useState('')\n\tconst [tags, setTags] = useState([])\n\tconst toggleTag = (tag: string) => {\n\t\tif (!tags.includes(tag)) {\n\t\t\tsetTags([...tags, tag])\n\t\t} else {\n\t\t\tsetTags(tags.filter(t => t !== tag))\n\t\t}\n\t}\n\n\tconst filteredChangelogs = useMemo(() => {\n\t\tconst query = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)\n\t\tif (query.length === 0 && tags.length === 0) return changelogs\n\t\treturn changelogs.filter(change => {\n\t\t\tif (!tags.every(tag => change.tags.includes(tag))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst content = change.tags.join(' ') + ' ' + change.content.toLowerCase()\n\t\t\treturn query.every(q => {\n\t\t\t\tif (q.startsWith('!')) {\n\t\t\t\t\treturn q.length === 1 || !content.includes(q.slice(1))\n\t\t\t\t}\n\t\t\t\treturn content.includes(q)\n\t\t\t})\n\t\t})\n\t}, [changelogs, search, tags])\n\n\tconst [sort, setSort] = useState(true)\n\n\tconst sortedChangelogs = useMemo(() => {\n\t\treturn filteredChangelogs.sort((a, b) => sort ? b.order - a.order : a.order - b.order)\n\t}, [filteredChangelogs, sort])\n\n\treturn
\n\t\t\n\t\t{error && setError(null)} />}\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t setSort(!sort)} />\n\t\t\t
\n\t\t\t{tags.length > 0 &&
\n\t\t\t\t{tags.map(tag => setTags(tags.filter(t => t !== tag))} />)}\n\t\t\t
}\n\t\t
\n\t\t
\n\t\t\t{sortedChangelogs.map(change =>\n\t\t\t\t)}\n\t\t
\n\t
\n}\n\ntype ChangeProps = {\n\tchange: ChangelogEntry,\n\tactiveTags: string[],\n\ttoggleTag: (tag: string) => unknown,\n}\nfunction Change({ change, activeTags, toggleTag }: ChangeProps) {\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t{change.tags.map(tag => toggleTag(tag)} active={activeTags.includes(tag)} />)}\n\t\t
\n\t\t
\n\t
\n}\n\nfunction ArticleLink({ id, article }: ChangelogVersion) {\n\treturn article === null\n\t\t? {id}\n\t\t: {id}\n}\n\ntype TagProps = {\n\tlabel: string,\n\tactive?: boolean,\n\tonClick?: () => unknown,\n}\nfunction Tag({ label, active, onClick }: TagProps) {\n\tconst color = label === 'breaking' ? 5 : hashString(label) % 360\n\treturn
\n\t\t{label === 'breaking' && Octicon.alert}\n\t\t{label}\n\t
\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport { getCurrentUrl } from 'preact-router'\nimport { useEffect, useErrorBoundary, useRef, 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 { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { checkVersion, fetchPreset, getBlockStates, getCollections, getModel } from '../services'\nimport { getGenerator, getSearchParams, message, setSeachParams } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, changeVersion }: 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\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion, gen.maxVersion))\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 searchParams = getSearchParams(getCurrentUrl())\n\tconst currentPreset = searchParams.get('preset')\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetError(null)\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(async m => {\n\t\t\t\tAnalytics.setGenerator(gen.id)\n\t\t\t\tif (currentPreset) {\n\t\t\t\t\tconst preset = await loadPreset(currentPreset)\n\t\t\t\t\tm.reset(DataModel.wrapLists(preset), false)\n\t\t\t\t}\n\t\t\t\tsetModel(m)\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(message(e)) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetSeachParams({ version: undefined, preset: undefined })\n\t\tsetError(null)\n\t})\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(DataModel.wrapLists(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 selectPreset = (id: string) => {\n\t\tloadPreset(id).then(preset => {\n\t\t\tmodel?.reset(DataModel.wrapLists(preset), false)\n\t\t\tsetSeachParams({ version, preset: id })\n\t\t})\n\t}\n\n\tconst loadPreset = async (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\ttry {\n\t\t\tconst preset = await fetchPreset(version, gen.path ?? gen.id, id)\n\t\t\tconst seed = model?.get(new Path(['generator', 'seed']))\n\t\t\tif (preset?.generator?.seed !== undefined && seed !== undefined) {\n\t\t\t\tpreset.generator.seed = seed\n\t\t\t\tif (preset.generator.biome_source?.seed !== undefined) {\n\t\t\t\t\tpreset.generator.biome_source.seed = seed\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn preset\n\t\t} catch (e) {\n\t\t\tsetError(message(e))\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 [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef(undefined)\n\tconst copySuccess = () => {\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\tconst hasPreview = HasPreview.includes(gen.id)\n\tif (previewShown && !hasPreview) setPreviewShown(false)\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 => selectPreset(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 changeVersion(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{copyActive ? Octicon.check : 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\n\t\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{config.generators.filter(g => g.category === 'assets').map(g =>\n\t\t\t\t\t\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\n\t\t
\n\t
\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Ad, Btn, BtnMenu, ErrorPanel, SoundConfig, TextInput } from '../components'\nimport { locale } from '../Locales'\nimport type { SoundEvents, VersionAssets, VersionId } from '../services'\nimport { getAssets, getSounds } from '../services'\nimport { hexId, message } from '../Utils'\n\ntype SoundsProps = {\n\tpath?: string,\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n}\nexport function Sounds({ lang, changeTitle, version, changeVersion }: SoundsProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tchangeTitle(loc('title.sounds'))\n\n\tconst [assets, setAssets] = useState({})\n\tconst [sounds, setSounds] = useState({})\n\tconst soundKeys = Object.keys(sounds ?? {})\n\tuseEffect(() => {\n\t\tgetAssets(version)\n\t\t\t.then(assets => { setAssets(assets); return getSounds(version) })\n\t\t\t.then(sounds => { if (sounds) setSounds(sounds) })\n\t\t\t.catch(e => { console.error(e); setError(message(e)) })\n\t}, [version])\n\n\tconst [search, setSearch] = useState('')\n\tconst [configs, setConfigs] = useState([])\n\tconst addConfig = () => {\n\t\tsetConfigs([{ id: hexId(), sound: search, delay: 0, pitch: 1, volume: 1 }, ...configs])\n\t}\n\tconst editConfig = (id: string) => (changes: Partial) => {\n\t\tsetConfigs(configs.map(c => c.id === id ? { ...c, ...changes } : c))\n\t}\n\tconst deleteConfig = (id: string) => () => {\n\t\tsetConfigs(configs.filter(c => c.id !== id))\n\t}\n\n\tconst [delayedPlay, setDelayedPlay] = useState(0)\n\tconst playAll = () => {\n\t\tsetDelayedPlay(delayedPlay + 1)\n\t}\n\n\tconst download = useRef(null)\n\tconst downloadFunction = () => {\n\t\tconst hasDelay = configs.some(c => c.delay > 0)\n\t\tconst content = configs\n\t\t\t.sort((a, b) => a.delay - b.delay)\n\t\t\t.map(c => `${hasDelay ? `execute if score @s delay matches ${c.delay} run ` : ''}playsound minecraft:${c.sound} master @s ~ ~ ~ ${c.volume} ${c.pitch}`)\n\t\t\t.join('\\n')\n\t\tdownload.current.setAttribute('href', 'data:text/plain;charset=utf-8,' + content + '%0A')\n\t\tdownload.current.setAttribute('download', 'sounds.mcfunction')\n\t\tdownload.current.click()\n\t}\n\n\treturn
\n\t\t\n\t\t{error && setError(null)} />}\n\t\t{soundKeys.length > 0 && <>\n\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
\n\t\t\t\t{configs.length > 1 && }\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{config.versions.reverse().map(v =>\n\t\t\t\t\t\t changeVersion(v.id as VersionId)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t{configs.map(c => )}\n\t\t\t
\n\t\t\t\n\t\t}\n\t\t\n\t\t\t{soundKeys.map(s => \n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { getCurrentUrl, Router } from 'preact-router'\nimport { useCallback, useEffect, useState } from 'preact/hooks'\nimport config from '../config.json'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { Category, Changelog, Generator, Home, Sounds } from './pages'\nimport type { VersionId } from './services'\nimport { VersionIds } from './services'\nimport { Store } from './Store'\nimport { cleanUrl, getSearchParams, setSeachParams } from './Utils'\n\nconst VERSIONS_IN_TITLE = 3\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('none')\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 searchParams = getSearchParams(getCurrentUrl())\n\tconst targetVersion = searchParams.get('version')\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = useCallback((version: VersionId) => {\n\t\tif (getSearchParams(getCurrentUrl()).has('version')) {\n\t\t\tsetSeachParams({ version })\n\t\t}\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}, [targetVersion])\n\tuseEffect(() => {\n\t\tif (VersionIds.includes(targetVersion as VersionId) && version !== targetVersion) {\n\t\t\tsetVersion(targetVersion as VersionId)\n\t\t}\n\t}, [version, targetVersion])\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions?: VersionId[]) => {\n\t\tversions ??= config.versions.map(v => v.id as VersionId)\n\t\tconst titleVersions = versions.slice(versions.length - VERSIONS_IN_TITLE)\n\t\tdocument.title = `${title} Minecraft ${titleVersions.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\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","clazz","tooltip","tooltipLoc","onClick","aria-label","Octicon","large","doSelect","value","placeholder","onChange","onInput","e","value2","target","ref","useRef","current","select","stopPropagation","size","draw","onDrag","onHover","onLeave","inputs","canvas","dragStart","dragRequest","dragPending","dragBusy","onMouseDown","offsetX","offsetY","onMouseMove","x","clientWidth","y2","clientHeight","dx","dy","requestAnimationFrame","async","dx2","dy2","onMouseUp","onMouseLeave","addEventListener","body","removeEventListener","redraw","redrawCount","ctx","getContext","s2","width","height","img","getImageData","ownCount","putImageData","setActive","useState","hider","model","invalidated","listener","[object Object]","addListener","removeListener","relative","children","useFocus","Btn","__spreadProps","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","setGenerator","generator","generatorEvent","alert","xmlns","viewBox","fill-rule","d","archive","arrow_left","arrow_right","check","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","download","duplicate","eye","eye_closed","gear","globe","history","info","issue_opened","kebab_horizontal","link","link_external","mark_github","moon","play","plus","plus_circle","search","sort_asc","sort_desc","stack","sun","sync","tag","terminal","three_bars","trashcan","unfold","upload","x_circle","error","onDismiss","href","component","props","evt","fn","onKeyDown","onEnter","key","__spreadValues","displayName","name","TextInput","BaseInput","v","NumberInput","Number","RangeInput","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","endsWith","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","default","obj","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","BigInt","Math","floor","random","MAX_SAFE_INTEGER","seed","dimensions","get","Path","set","keys","forEach","h","i","imul","charCodeAt","url","replaceAll","searchIndex","indexOf","cleanUrl","trimmedUrl","getPath","generators","g2","Map","split","param","decodeURIComponent","modifications","newPath","getCurrentUrl","searchParams","getSearchParams","entries","delete","encodeURIComponent","str","abs","hashString","a2","b","c","max","min","lerp","Error","message","deepClone","rfdc","constructor","isArray","deepEqual","valueOf","Object","prototype","hasOwnProperty","call","forward","backward","this","defaultValue","repo","Changelogs","fetch","json","group","groupIndex","versionIndex","text","entry","tags","substring","trim","content","parseChangelog","order","change","fetchChangelog","parseVersion","flat","fetchGroup","article","isObject","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","1.18","java18","CachedDecorator","CachedFeature","collections","getCollections","blockStates","versionId","collectionTarget","blockStateTarget","versions","JSON","stringify","debug","dynamic","refs","filter","localStorage","getItem","r","hash","matches","cache","caches","open","promises","request","push","warn","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","fetchAssetsRegistries","fetchData","getSchemas","minVersionId","maxVersionId","findIndex","minVersion","maxVersion","removeItem","mcdataUrl","mcassetsUrl","vanillaDatapackUrl","registries","asset","checkVersion","mcdata_master","getData","data2","k","register","path","values","properties","states","assign","vanilla_datapack_summary","Noises","PlacedFeatures","fetchFolder","mcassets","directories","files","d2","ids","registry","versionData","includes","vanilla_datapack_data","parse","noise","terrain_shaper","offset","factor","jaggedness","cacheResponse","ok","fetchResponse","responseData","put","Response","Manifest","VersionAssets","SoundEvents","fetchManifest","manifest","getManifest","latest","snapshot","versionMeta","assetIndex","objects","fetchAssets","assets","getAssets","getResourceUrl","fetchSounds","ready","LAYERS","temperature","humidity","continentalness","erosion","weirdness","cacheState","biomeSourceCache","state","options","newState","octaves","shaper","toJson","FixedBiome","biome","shift","scale","numBiomes","biomes","_y","z","node","preset","NetherPreset18","NetherPreset","fetchPreset","biome_source","OverworldPreset18","DataModel","unwrapLists","init","wasm","loadWasm","BiomeIds","BiMap","p","t0","t1","h0","h1","c0","c1","e0","e1","w0","w1","d0","d1","o","depth","parameters","getOrPut","biome_parameters","Float64Array","Int32Array","sampler","climate_sampler","firstOctave","amplitudes","multi_noise","getA","getBiomes","xFrom","xTo","xStep","yFrom","yTo","yStep","zFrom","zTo","zStep","layers","climate","climate_noise","result","t","w","point","TerrainShaper","has","config2","clamp","NormalNoise","LegacyRandom","n","n2","sample","minDist","Infinity","minBiome","dist","square","altitude","getBiomeSource","biomeSource","biomeColors","color","VanillaColors","stringToColor","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:old_growth_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:old_growth_pine_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_hills","minecraft:gravelly_mountains","minecraft:windswept_gravelly_hills","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:sparse_jungle","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:extreme_hills","minecraft:mountains","minecraft:windswept_hills","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:windswept_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:snowy_plains","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:stony_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:old_growth_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_badlands","minecraft:wooded_hills","minecraft:wooded_mountains","minecraft:windswept_forest","minecraft:snowy_slopes","minecraft:lofty_peaks","minecraft:jagged_peaks","minecraft:snowcapped_peaks","minecraft:frozen_peaks","minecraft:stony_peaks","minecraft:grove","minecraft:meadow","minecraft:lush_caves","minecraft:dripstone_caves","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","placements","features","biomeInfoNoise","PerlinNoise","fork","seaLevel","nextFloat","nextInt","sampleInt","fill","pos","feature","j","base","spread","normalize","min_inclusive","max_inclusive","source","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","f","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","noise_level","below_noise","above_noise","count_noise_biased","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","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","surface_relative_threshold","water_lake","minLimitPerlinNoise","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","cx","ox","noise1","fillNoiseColumn","noise2","yy","oy","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","zo","falloff","density_factor","density_offset","top_slide","clampedLerp","bottom_slide","x2","wrap","y22","z2","minLimitNoise","maxLimitNoise","mainNoise","colors","minecraft:air","minecraft:water","minecraft:lava","minecraft:stone","minecraft:netherrack","minecraft:end_stone","generatorCache","chunkCache","NoiseGeneratorSettings","fromJson","getOctaves","NoiseChunkGenerator","getCached","LevelSlice","minY","generator2","state2","getBlockState","getName","OldNoiseChunkGenerator","reset","row","iterateNoiseColumn","reverse","getColor","minX","filled","chunks","cached","Chunk","ChunkPos","create","Z","chunk","chunkIndex","OverworldShaper","overworld","BiomeSourcePreview","shown","setScale","focused","setFocused","setLayers","Set","refineTimeout","getShaper","calculateState","useCanvas","round","oz","col","xRange","zRange","l2","getClimate","worldX","worldZ","getBiomeColor","getBiome","brightness","biomeMap","setTimeout","xx","zz","toWorld","changeScale","newScale","BtnMenu","locale","enabled","newSeed","densityFactor","densityOffset","DecoratorPreview","setSeed","randomSeed","NoisePreview","NoiseParameters","NoiseSettingsPreview","loc","bind","setBiomeScale","setBiomeDepth","worldY","min_y","BtnInput","HasPreview","setCount","transformOutput","switchNode","hook","getOwnPropertySymbols","blockState","validation","validator","relativePath","getActiveFields","activeFields","out","Store","Store2","getLanguage","getTheme","getVersion","getIndent","getFormat","getSoundsVersion","setIndent","indent","setFormat","format","setSoundsVersion","INDENT","2_spaces","4_spaces","tabs","minified","FORMATS","yaml","dump","flowLevel","doCopy","doDownload","doImport","copySuccess","onError","retransform","getOutput","useCallback","model2","blockStates2","ModelPath","output","clipboard","writeText","setAttribute","click","changeIndent","changeFormat","onBlur","wrapLists","spellcheck","autocorrect","style","mapper","getter","setter","silent","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","fixedLists","collapsedFields","keysModel","MapNode","StringNode","historyMax","prefix","suffix","renderHtml","some","data-category","boolean","BooleanSuffix","choices","choice","activeCase","contextPath","context","getModel","getArray","choiceContextPath","choiceContext","inject","c2","def","newValue","pathLocale","contextPush","expand","collapse","isToggled","useToggles","maxShown","setMaxShown","maxLength","ErrorPopup","modelPush","hexId","cValue","cId","cPath","canToggle","toggle","nested","Collapsed","MemoedTreeNode","actions","onSelect","splice","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","cSchema","number","NumberSuffix","getChildModelPath","isDecorated","wrapper","fields","originalFields","decorators","iterateNestedDecorators","ListNode","featurePath","decoratorsPath","ModelWrapper","path2","modelArr","equals","newDecorators","feature2","produceNestedDecorators","createDecoratorsWrapper","optional","onExpand","onCollapse","toggled","newCtx","pools","loot","child","context2","cPrefix","cSuffix","cBody","isFlattened","isInlined","HelpPopup","string","StringSuffix","toggleState","setToggleState","toggleAll","setToggleAll","ctrlKey","integer","parsed","parseFloat","padStart","getValues","isEnum","pool","additional","datalistId","gen","findGenerator","log","list","values2","memo","onContextMenu","preventDefault","a","description","navigator","prev","next","withModel","getAll","e2","message2","popupIcon","popup","useErrorBoundary","setState","FullNode","Themes","system","dark","light","title","changeTheme","changeLanguage","getGenerator","Link","Icons","home","route","th","rx","y","report","sounds","cy","clip-rule","sound","delay","pitch","volume","onEdit","onDelete","delayedPlay","loading","setLoading","playing","setPlaying","invalid","setInvalid","howls","command","soundEvent","h2","stop","soundPath","howl","Howl","src","rate","on","completed","every","copyActive","setCopyActive","copyTimeout","step","toFixed","desc","changeTitle","ToolCard","setError","changelogs","setChangelogs","changelogs2","catch","setSearch","setTags","toggleTag","filteredChangelogs","useMemo","query","q2","toLowerCase","sort","setSort","sortedChangelogs","Ad","ErrorPanel","Tag","Change","activeTags","ArticleLink","dangerouslySetInnerHTML","__html","marked","changeVersion","errorBoundary","errorRetry","allowedVersions","currentPreset","setModel","setBlockStates","Reference","ChoiceNode","schemaName","validate","err","m","loadPreset","onKeyUp","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","presets","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Tree","PreviewPanel","SourcePanel","setAssets","setSounds","soundKeys","assets2","getSounds","sounds2","configs","setConfigs","addConfig","deleteConfig","setDelayedPlay","hasDelay","SoundConfig","changes","loadLocale","documentElement","targetVersion","version2","setTitle","title2","titleVersions","Header","theme2","Router","Home","Category","Sounds","Changelog","Generator","render","Main"],"mappings":"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BACA,uBACA,kBACA,mBACA,4BACA,6BACA,wBACA,kBACA,4BACA,yBACA,mCACA,mCACA,mCACA,2BACA,2BACA,gCACA,mCACA,gCACA,0CACA,oBACA,8BACA,0BACA,wBACA,8BACA,uBACA,8BAGKC,GAAiB,CACtB,2BACA,2BACA,mBACA,yBACA,8BACA,yBACA,0BACA,4BACA,2BACA,0BACA,uBACA,6BACA,qBACA,kCACA,kCACA,sCACA,iCACA,iCACA,uBACA,yBACA,uCACA,sCACA,0BACA,mCACA,6BACA,kBACA,wBACA,sBACA,wBACA,sBACA,8BACA,+BACA,iCACA,sBACA,2BACA,gCACA,+BACA,8BACA,2BACA,iCACA,kCACA,0BACA,yBACA,yBACA,wBACA,2BACA,wBACA,yBACA,yBACA,6BACA,wBACA,sBACA,4BACA,2BACA,sBACA,sBACA,yBACA,2BACA,wBACA,wBACA,sBACA,sBACA,8BACA,kCACA,iCACA,4BACA,0CACA,4BACA,kCACA,qCACA,8BACA,gCACA,yBACA,8BACA,uCACA,2BACA,0BACA,yBACA,wBACA,qCACA,+BACA,+BACA,2BACA,qBACA,2BACA,2BACA,uBACA,6BACA,6BACA,wBACA,+BACA,8BACA,8BACA,8BACA,qBACA,wBACA,qBACA,4BACA,2BACA,2BACA,4BACA,8BACA,8BACA,uBACA,8BACA,yBACA,4BACA,2BACA,2BACA,sBACA,6BACA,sBACA,8BACA,8BACA,yBACA,+BACA,0BACA,qBACA,+BACA,6BACA,mCACA,gCACA,gCACA,4BACA,8BACA,qCACA,uBACA,iCACA,+BACA,+BACA,+BACA,8BACA,gCACA,8BACA,gCACA,6BACA,wBACA,0BACA,4BACA,6BACA,sCACA,oCACA,mCACA,4BACA,6BACA,+BACA,4BACA,yBACA,yBACA,8BACA,gCACA,gCACA,oCACA,+BACA,+BACA,+BACA,uBACA,0BACA,0BACA,+BACA,+BACA,4BACA,2BACA,4BACA,2BACA,0BACA,iCACA,0BACA,0BACA,iCACA,yBACA,wBACA,+BACA,wBACA,yBACA,2BACA,2BACA,6BACA,kCACA,2BACA,wBACA,gCACA,gCACA,wBACA,yBACA,yBACA,wCACA,0CACA,yBACA,0BACA,wBACA,gCACA,wBACA,wBACA,wBACA,mCACA,kCACA,oCACA,2BACA,6BACA,kBACA,gCACA,kCACA,qCACA,yBACA,2BCxiBD,IAAIuB,GAA8D,KAOlE,MAAMC,GAAwE,GAOxEC,GAAkE,8BAGlEF,mCD8LExN,QAAYqG,MApMA,8EAqMLrG,EAAIsG,aACT/Q,SACF,IAAI4P,MAAM,mDAAmDC,GAAQ7P,OChMhEoY,IAELH,qBAGwBrT,UAC1BsT,GAActT,QACJA,oBACPyT,QAAiBC,iCD4LQnF,EAAsBkF,eACjDzT,EAAU2G,EAAO+H,SAAS7H,SAAU1C,EAAEtK,KAAO0U,IAC7C1U,EAAK,0BAAS8Z,UAAUF,EAASE,OAAOC,mBAEvCC,QAAoB1C,GAAQsC,EAAS/E,SAAS7H,SAAU1C,EAAEtK,KAAOA,IAAKqP,kBAE9DiI,GAAQ0C,EAAYC,WAAW5K,MAAM6K,cAC3C3Y,SACF,IAAI4P,MAAM,4CAA4ChL,MAAYiL,GAAQ7P,OCnMlE4Y,CAAYhU,EAASyT,QAG7BH,GAActT,qBAGUA,UAC1BuT,GAAYvT,QACJA,oBACLiU,QAAeC,GAAUlU,+BD8LAA,EAAoBiU,aAE9C7E,EAAO6E,EAAO,yBAAyB7E,kBAChC+B,GAAQgD,GAAe/E,UAC5BhU,SACF,IAAI4P,MAAM,4CAA4ChL,MAAYiL,GAAQ7P,OClMlEgZ,CAAYpU,EAASiU,QAG7BV,GAAYvT,GC5CpB,IAAIqU,IAAQ,EAQZ,MAAMC,GAAS,CACdC,YAAa,IAAK,GAClBC,SAAU,IAAK,GACfC,gBAAiB,MAAO,GACxBC,QAAS,IAAK,GACdC,UAAW,IAAK,GAChB/B,OAAQ,IAAK,GACbC,OAAQ,CAAC,EAAG,IACZC,WAAY,CAAC,EAAG,IAuBjB,IAAI8B,GACAC,GAiDJ3X,kBAAyB4X,EAAYC,SAC9BC,EAAW,CAACF,EAAOC,EAAQE,QAASF,EAAQG,OAAOC,SAAU,GAAGJ,EAAQxM,OAAQwM,EAAQ/U,gBACzFsL,GAAU0J,EAAUJ,SACX1J,GAAU8J,YASzB9X,eAA8B4X,EAAYC,wBACjC,0BAAOnb,eAAMwM,QAAQ,cAAe,SACtC,eACG,IAAIgP,EAAWN,EAAMO,WAExB,qBACEC,cAAeC,SAAS,GAAK,EAC7BC,EAAY,SAAA,WAAMC,iBAAQ/N,UAAU,QACnC,CACN/I,SAAShC,EAAW+Y,EAAYC,eACzB5M,QAAYuM,OAAeA,IAAUE,EAAYA,GAAaA,SAC5D,WAAMC,iBAAS1M,GAAG6M,WAIxB,qBACG,WAAMC,iBAAQzP,QAAQ,cAAe,SACtC,WACwB,SAApB2O,EAAQ/U,QAAqB8V,GAAiBC,aAElD,cACwB,SAApBhB,EAAQ/U,cAuNrB9C,8BACyB8Y,GAAY,OAAQ,YAAa,cACxC5V,UAAU6V,aAzNoBC,GAAsBpB,OAG3DqB,YAAUC,YAAYtB,GACN,SAApBC,EAAQ/U,QAAoB,OA7HnC9C,iBACKmX,WACEgC,EAAKC,OACH,UACAzH,MAAM,6BAA6ByH,OA0HlCC,SACAC,EAAW,IAAIC,GACf5M,EAAS6M,GACM,iBAANA,EAAiB,CAACA,EAAGA,GAAKA,GAElCC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAG5M,GAAK,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,cACzG5B,KAAK+L,EAAMW,OAAQ,OACvBlB,YAAEA,WAAaC,kBAAUC,UAAiBC,YAASC,QAAW6C,SAAO5E,GAAW7J,EAAE0O,aACrF9H,KAAK9F,EAAM0K,GAAa,MACxB5E,KAAK9F,EAAM0K,GAAa,MACxB5E,KAAK9F,EAAM2K,GAAU,MACrB7E,KAAK9F,EAAM2K,GAAU,MACrB7E,KAAK9F,EAAM4K,GAAiB,MAC5B9E,KAAK9F,EAAM4K,GAAiB,MAC5B9E,KAAK9F,EAAM6K,GAAS,MACpB/E,KAAK9F,EAAM6K,GAAS,MACpB/E,KAAK9F,EAAM8K,GAAW,MACtBhF,KAAK9F,EAAM8K,GAAW,MACtBhF,KAAK9F,EAAM2N,GAAO,MAClB7H,KAAK9F,EAAM2N,GAAO,MACnB7H,KAAKiD,KACLjD,KAAK6G,EAASkB,SAAS3O,EAAEsM,MAAOlN,KAAKC,MAAsB,WAAhBD,KAAKE,kBAE7CoP,EAAaE,EAAiB,IAAIC,aAAajB,GAAK,IAAIiB,aAAahB,GAAK,IAAIgB,aAAaf,GAAK,IAAIe,aAAad,GAAK,IAAIc,aAAab,GAAK,IAAIa,aAAaZ,GAAK,IAAIY,aAAaX,GAAK,IAAIW,aAAaV,GAAK,IAAIU,aAAaT,GAAK,IAAIS,aAAaR,GAAK,IAAIQ,aAAaP,GAAK,IAAIO,aAAaN,GAAK,IAAIM,aAAaL,GAAI,IAAIM,WAAWlN,IAC1UmN,EAAUC,EAAgBhD,EAAQxM,KAAMwM,EAAQE,QAAQV,YAAYyD,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQV,YAAY0D,YAAalD,EAAQE,QAAQT,SAASwD,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQT,SAASyD,YAAalD,EAAQE,QAAQR,gBAAgBuD,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQR,gBAAgBwD,YAAalD,EAAQE,QAAQP,QAAQsD,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQP,QAAQuD,YAAalD,EAAQE,QAAQN,UAAUqD,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQN,UAAUsD,YAAalD,EAAQE,QAAQK,MAAM0C,YAAa,IAAIJ,aAAa7C,EAAQE,QAAQK,MAAM2C,mBACtlB,CACNtZ,SAAShC,EAAGE,EAAG8Y,eACRvD,EAAM8F,EAAYT,EAAYK,EAASnb,EAAGA,EAAI,EAAG,EAAGE,EAAGA,EAAI,EAAG,EAAG8Y,EAAGA,EAAI,EAAG,UAC1E,WAASwC,KAAK/F,EAAI,OAAO,WAEjCgG,WAAUC,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,IAEpD,IADKX,EAAYT,EAAYK,EAASO,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,IAC/E3T,sBAAU,WAASiT,KAAKte,MAAO,aAEhD8E,WAAWma,EAAQT,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,SAC9DE,EAAUC,EAAclB,EAASO,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,EAAOC,EAAOC,EAAKC,GACnFI,EAAS,WACNlQ,EAAI,EAAGA,EAAIgQ,EAAQrR,OAAQqB,GAAK,EAAG,OACpCmQ,EAAGpQ,EAAG8B,EAAGxP,EAAG+d,GAAKJ,EAAQxS,MAAMwC,EAAGA,EAAI,GACvCqQ,EAAQC,EAAcD,MAAMxO,EAAGxP,EAAG+d,KACjCxJ,KAAK7L,OACXyQ,YAAa2E,EACb1E,SAAU1L,EACV2L,gBAAiB7J,EACjB8J,QAAStZ,EACTuZ,UAAWwE,GACRL,EAAOQ,IAAI,WAAa,CAAE1G,OAAQmC,EAAQG,OAAOtC,OAAOwG,KACxDN,EAAOQ,IAAI,WAAa,CAAEzG,OAAQkC,EAAQG,OAAOrC,OAAOuG,KACxDN,EAAOQ,IAAI,eAAiB,CAAExG,WAAYiC,EAAQG,OAAOpC,WAAWsG,aAGlEH,IAGH,OACAvG,EAAQ,CAAC,WAAY,cAAe,WAAY,aACpDxN,KAAI,CAACrL,EAAIkP,iBACHwQ,EAASzE,EAAM,GAAGjb,oBACjBme,YAAcwB,GAAM,WAAOxB,2BAC3B,IAAIyB,EAAY,IAAIC,EAAa3E,EAAQxM,KAAOL,OAAOa,IAAKwQ,aAEhExR,MAAMsD,QAAQyJ,EAAMW,SAAmC,IAAxBX,EAAMW,OAAO/N,OAG1C,CACN/I,SAAShC,EAAW+Y,EAAYC,SACzBgE,EAAIjH,EAAMxN,QAAS0U,EAAEC,OAAOld,EAAGgZ,EAAG,SACpCmE,EAAUC,EAAAA,EACVC,EAAW,aACJ3E,MAAEA,EAAOoC,WAAYf,KAAO5B,EAAMW,OAAQ,OAC9CwE,EAAOC,GAAOxD,EAAEyD,SAAWR,EAAE,IAAMO,GAAOxD,EAAEnC,YAAcoF,EAAE,IAAMO,GAAOxD,EAAElC,SAAWmF,EAAE,IAAMO,GAAOxD,EAAE/B,UAAYgF,EAAE,IAAMO,GAAOxD,EAAE9D,QACtIqH,EAAOH,MACAG,IACC5E,UAGN2E,IAdD,IAAI5E,EAAW,kBAmBpB,IAAIpK,MAAM,wBAlHUoP,CAAetF,EAAOC,IAEzC,CACNsF,YAAaxF,IAkHf,YAAuBQ,EAAeiF,aAChCjF,QACG,CAAC,IAAK,IAAK,WAEbkF,EAAQ,WAAYlF,MAAUmF,GAAcnF,eACpC,IAAVkF,EACIE,GAAcpF,GAEfkF,EASR,MAAMC,GAAwC,CAC7CE,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,oCAAqC,CAAC,IAAI,IAAI,KAC9CC,qCAAsC,CAAC,IAAI,IAAI,KAC/CC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,kCAAmC,CAAC,GAAG,IAAI,IAC3CC,mCAAoC,CAAC,GAAG,GAAG,IAC3CC,2BAA4B,CAAC,IAAI,IAAI,KACrCC,+BAAgC,CAAC,IAAI,IAAI,KACzCC,qCAAsC,CAAC,IAAI,IAAI,KAC/CC,uBAAwB,CAAC,IAAI,IAAI,KACjCC,mBAAoB,CAAC,GAAG,IAAI,GAC5BC,wBAAyB,CAAC,GAAG,IAAI,IACjCC,0BAA2B,CAAC,GAAG,IAAI,IACnCC,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,0BAA2B,CAAC,GAAG,GAAG,IAClCC,sBAAuB,CAAC,GAAG,GAAG,IAC9BC,4BAA6B,CAAC,GAAG,GAAG,IACpCC,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,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,yBAA0B,CAAC,IAAI,IAAI,KACnCC,6BAA8B,CAAC,GAAG,GAAG,IACrCC,wBAAyB,CAAC,IAAI,IAAI,KAClCC,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,oCAAqC,CAAC,GAAG,IAAI,KAC7CC,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,4BAA6B,CAAC,IAAI,IAAI,KACtCC,yBAA0B,CAAC,GAAG,GAAG,IACjCC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,6BAA8B,CAAC,GAAG,IAAI,IACtCC,yBAA0B,CAAC,IAAK,IAAK,KACrCC,wBAAyB,CAAC,IAAK,IAAK,KACpCC,yBAA0B,CAAC,IAAK,IAAK,KACrCC,6BAA8B,CAAC,IAAK,IAAK,KACzCC,yBAA0B,CAAC,IAAK,IAAK,KACrCC,wBAAyB,CAAC,GAAI,GAAI,KAClCC,kBAAmB,CAAC,IAAK,IAAK,KAC9BC,mBAAoB,CAAC,IAAK,IAAK,IAC/BC,uBAAwB,CAAC,IAAK,IAAK,IACnCC,4BAA6B,CAAC,IAAK,IAAK,IAGnChL,GAAe,CAACnc,KAAK,wBAAwB2O,KAAK,EAAEyY,eAAe,CAAChJ,eAAeC,WAAW,CAAC,EAAE,IAAIgJ,kBAAkB,CAACjJ,eAAeC,WAAW,CAAC,EAAE,IAAIiJ,eAAe,CAAClJ,eAAeC,WAAW,CAAC,EAAE,IAAIkJ,gBAAgB,CAACnJ,eAAeC,WAAW,CAAC,EAAE,IAAIxC,OAAO,CAAC,CAACJ,MAAM,0BAA0BoC,WAAW,CAAC0C,SAAS,EAAE5F,YAAY,EAAEC,SAAS,EAAEG,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,6BAA6BoC,WAAW,CAAC0C,SAAS,EAAE5F,YAAY,EAAEC,aAAcG,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,2BAA2BoC,WAAW,CAAC0C,SAAS,EAAE5F,YAAY,GAAIC,SAAS,EAAEG,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,0BAA0BoC,WAAW,CAAC0C,SAAS,EAAE5F,YAAY,EAAEC,SAAS,GAAIG,UAAU,EAAE/B,OAAO,OAAQ,CAACyC,MAAM,0BAA0BoC,WAAW,CAAC0C,SAAS,EAAE5F,gBAAiBC,SAAS,EAAEG,UAAU,EAAE/B,OAAO,SAE1xBkD,GAAiB,CAAClc,KAAK,wBAAwB6b,OAAO,CAAC,CAACJ,MAAM,0BAA0BoC,WAAW,CAAClD,YAAY,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,QAAQ,EAAE8C,MAAM,EAAE7C,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,6BAA6BoC,WAAW,CAAClD,YAAY,EAAEC,aAAcC,gBAAgB,EAAEC,QAAQ,EAAE8C,MAAM,EAAE7C,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,2BAA2BoC,WAAW,CAAClD,YAAY,GAAIC,SAAS,EAAEC,gBAAgB,EAAEC,QAAQ,EAAE8C,MAAM,EAAE7C,UAAU,EAAE/B,OAAO,IAAI,CAACyC,MAAM,0BAA0BoC,WAAW,CAAClD,YAAY,EAAEC,SAAS,GAAIC,gBAAgB,EAAEC,QAAQ,EAAE8C,MAAM,EAAE7C,UAAU,EAAE/B,OAAO,OAAQ,CAACyC,MAAM,0BAA0BoC,WAAW,CAAClD,gBAAiBC,SAAS,EAAEC,gBAAgB,EAAEC,QAAQ,EAAE8C,MAAM,EAAE7C,UAAU,EAAE/B,OAAO,SCpUhtB,MAAMwO,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,kBAQevM,EAAY7W,EAAgB8W,SAC/C1M,EAAS,IAAIqR,EAAa3E,EAAQxM,MAClC3K,EAAwB,CAC7B0jB,WAAY,GACZC,SAAU,GACVlZ,OAAAA,EACAmZ,eAAgB,IAAIC,EAAYpZ,EAAOqZ,OAAQ,EAAG,CAAC,IACnDC,SAAU,GACV3hB,QAAS+U,EAAQ/U,QACjB4hB,UAAW,IAAMvZ,EAAOuZ,YACxBC,QAAUhX,GAAgBxC,EAAOwZ,QAAQhX,GACzClM,UAAU3D,UAAgB8mB,GAAU9mB,EAAO8Q,gBAGnCnP,EAAI,EAAGA,EAAIoY,EAAQnZ,KAAK,GAAK,GAAIe,GAAK,UACrCgZ,EAAI,EAAGA,EAAIZ,EAAQnZ,KAAK,GAAK,GAAI+Z,GAAK,KAChC,CAAK,GAAJhZ,EAAQ,EAAO,GAAJgZ,GAASQ,YAAUC,YAAYtB,GAAQlX,SAI7DmJ,EAAO9I,EAAI8I,OACbA,KAAKgb,KAAK,eAEFC,EAAKC,KAAYrkB,EAAI0jB,WAAY,IACxCU,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,GAAK,GAAKA,EAAI,IAAMjN,EAAQnZ,KAAK,IAAMomB,EAAI,IAAMjN,EAAQnZ,KAAK,IAAMomB,EAAI,IAAMjN,EAAQnZ,KAAK,kBACzHmN,EAAKiZ,EAAI,IAAkB,IAARjkB,OAAwB,EAATikB,EAAI,GACtCzH,EAAQ0H,EAAUZ,GAAc3Z,OAAS2Z,GAAcY,GAAWxH,GAAc7c,EAAI2jB,SAASU,MAC9FlZ,GAAKyQ,GAAM,GAAI,IAAKe,EAAM,MAC1BxR,EAAI,GAAKyQ,GAAM,GAAI,IAAKe,EAAM,MAC9BxR,EAAI,GAAKyQ,GAAM,GAAI,IAAKe,EAAM,MAC9BxR,EAAI,GAAK,YAGNpM,EAAI,EAAGA,EAAIoY,EAAQnZ,KAAK,GAAIe,GAAK,UAChCE,EAAI,EAAGA,EAAIkY,EAAQnZ,KAAK,GAAIiB,GAAK,EAAG,UAClCuL,MAAMzL,EAAI,IAAMwL,KAAKC,MAAMvL,EAAI,KAAO,GAAM,iBAChDkM,EAAKlM,GAAiB,IAARkB,OAAmB,EAAJpB,UAC1BulB,EAAI,EAAGA,EAAI,EAAGA,GAAK,IACtBnZ,EAAImZ,GAAK,IAAOnb,EAAKgC,EAAImZ,IAMlC,YAAmBroB,UACXA,EAAGiW,WAAW,cAAgBjW,EAAG0M,MAAM,IAAM1M,EAGrD,YAAmBmoB,EAAenlB,SAC1B,CAAC,CAAEmlB,EAAI,GAAInlB,EAAGmlB,EAAI,KAG1B,YAAmBhnB,EAAY4C,cACT,iBAAV5C,SACHA,KACGA,EAAMmnB,YACT,WAAMA,QAAQ,EAAIvkB,EAAIikB,QAAQ,cAAWO,UAAU,WAElDC,GAAUrnB,EAAMpB,WAClB,kBAAmBoB,EAAMA,UACzB,iBAAkBA,EAAMA,MAAMsnB,cAAgB1kB,EAAIikB,QAAQ7mB,EAAMA,MAAMunB,cAAgBvnB,EAAMA,MAAMsnB,cAAgB,OAClH,0BAA2BtnB,EAAMA,MAAMsnB,cAAgB1kB,EAAIikB,QAAQjkB,EAAIikB,QAAQ7mB,EAAMA,MAAMunB,cAAgBvnB,EAAMA,MAAMsnB,cAAgB,GAAK,OAC5I,iBAAkBna,KAAK0C,IAAI7P,EAAMA,MAAMsnB,cAAena,KAAK2C,IAAI9P,EAAMA,MAAMunB,cAAeT,GAAU9mB,EAAMA,MAAMwnB,OAAQ5kB,YAEvH,EAIT,YAAoBE,EAAWF,SACxBmL,EAAInL,EAAI2jB,SAASlY,QAAQvL,aAC3BiL,EAAgBA,KAChBwY,SAAS5R,KAAK7R,GACXF,EAAI2jB,SAAS7Z,OAAS,GAG9B,YAAuBsa,EAAeC,EAAcrkB,YAC5B,iBAAZqkB,gBACNX,WAAW3R,KAAK,CAACqS,EAAKS,GAAWR,EAASrkB,WAGzChE,EAAOyoB,GAAU,0BAASzoB,QAAQ,SAClC8oB,EAAYC,GAAS/oB,GACvB8oB,IACOT,EAAQtb,OAAQqb,EAAKpkB,KAE3B0jB,WAAW3R,KAAK,CAACqS,EAAKS,GAAW9T,KAAKC,UAAUqT,GAAUrkB,KAIhE,YAAsBokB,EAAeY,EAAgBhlB,eAC9ChE,EAAOyoB,GAAU,0BAAWzoB,QAAQ,QACpCipB,EAAcC,GAAWlpB,UAC1BipB,EAGEA,QAAYD,WAAWjc,OAAQqb,EAAKpkB,GAFnC,CAACokB,GAKV,MAAMW,GAEF,CACHI,UAAW,CAACxJ,EAAQyI,EAAKpkB,KACNolB,GAAahB,QAAKzI,WAAQ0J,UAAWrlB,GAC7CiL,YAAaqa,GAAcxM,QAAG6C,WAAQ0I,QAASrkB,MAE1DulB,wBAAyB,CAAC5J,EAAQyI,EAAKpkB,QAExBokB,EADEpkB,EAAIgkB,YAAc,SAAMrI,WAAQ6J,mBAAe7J,WAAQ8J,cAC3CzlB,IAE7B0lB,gBAAiB,CAAC/J,EAAQyI,EAAKpkB,uBACnB2lB,KAAK,0BAAQhC,YAAY,MAC/B3jB,EAAIgkB,uCAAkB4B,UAAU,kBACrBxB,EAAKuB,EAAEtB,QAASrkB,MAIlBokB,QAAKzI,WAAQnS,QAASxJ,IAErC6lB,uBAAwB,CAAClK,EAAQyI,EAAKpkB,kBAEvBokB,EADE,0BAAQT,mBAAW3jB,EAAIikB,QAAQ,SAAA,0BAAQN,mBAAU7Z,UAAU,IAC/C9J,KAIxBklB,GAEF,CACHU,OAAQ,CAACjK,EAAQyI,EAAKpkB,kBACdA,EAAIgkB,YAAc,6BAAa4B,UAAU,GAAK,CAACxB,GAAO,IAE9D0B,MAAO,CAACnK,EAAQyI,EAAKpkB,kBACb,IAAImK,MAAMnK,EAAIkkB,UAAU,0BAAQ4B,SAAS,IAAI3B,KAAKC,IAE1D2B,YAAa,CAACpK,EAAQyI,EAAKpkB,iBACtB8lB,EAAQ,0BAAQA,SAAS,SACzB9lB,EAAIgkB,YAAcrI,EAAOqK,kBACnB,WAAOC,eAAe,GAEzB,IAAI9b,MAAM2b,GAAO3B,KAAKC,IAE9B8B,iBAAkB,CAACvK,EAAQyI,EAAKpkB,kBACxB,IAAImK,MAAMnK,EAAIkkB,UAAU,0BAAQ4B,SAAS,IAAI3B,KAAKC,GACvD9c,QAAS,CACTwR,EAAE,GAAK9Y,EAAIikB,QAAQ,IACnBnL,EAAE,GACFA,EAAE,GAAK9Y,EAAIikB,QAAQ,QAGtBkC,YAAa,CAACxK,EAAQyI,EAAKpkB,WAEpB8lB,EADQ9lB,EAAI4jB,eAAe3H,OAAOmI,EAAI,GAAK,IAAK,EAAGA,EAAI,GAAK,KAC5CzI,EAAOyK,YAAczK,EAAO0K,YAAc1K,EAAO2K,mBAChE,IAAInc,MAAM2b,GAAO3B,KAAKC,IAE9BmC,mBAAoB,CAAC5K,EAAQyI,EAAKpkB,iBAC3BiV,EAAS1K,KAAK0C,IAAI,EAAG0O,EAAO6K,cAC5B1R,EAAQ9U,EAAI4jB,eAAe3H,OAAOmI,EAAI,GAAKnP,EAAQ,EAAGmP,EAAI,GAAKnP,GAC/D6Q,EAAQvb,KAAK0C,IAAI,EAAG1C,KAAKkc,oBAAsBC,gBAAgB,IAAM/K,EAAOgL,8BAC3E,IAAIxc,MAAM2b,GAAO3B,KAAKC,IAE9BwC,cAAe,CAACC,EAASzC,EAAKpkB,IACtB,IAAI,IAAImK,MAAM,KAAK7C,KAAI,CAACwf,EAAG3b,WAC3BpM,EAAwB,EAApBwL,KAAKC,MAAMW,EAAI,GAAS,EAAInL,EAAIikB,QAAQ,GAAKG,EAAI,SAGpD,CAACrlB,EAFEwL,KAAK0C,IAAIjN,EAAI+jB,SAAUP,GAAQ5H,GAAM,EAAG,GAAI7c,KACxB,EAApBwL,KAAKC,MAAMW,EAAI,GAAS,EAAInL,EAAIikB,QAAQ,GAAKG,EAAI,OAI7De,UAAW,CAACxJ,EAAQyI,EAAKpkB,IACjBolB,GAAahB,QAAKzI,WAAQoL,MAAO/mB,GAAKgnB,YACrC5B,GAAatM,QAAG6C,WAAQsL,MAAOjnB,KAGxCknB,cAAe,CAACvL,EAAQyI,EAAKpkB,wBAErBmnB,GAAU/C,EADPpkB,EAAIikB,QAAQ,0BAAQO,UAAU,GAAKxkB,EAAIikB,QAAQ,0BAAQO,UAAU,eAAaA,UAAU,8BAAc4C,YAAY,KAG7HC,YAAa,CAACR,EAASzC,EAAKpkB,WACrB8lB,EAAQ,EAAI9lB,EAAIikB,QAAQ,SACvB,IAAI,IAAI9Z,MAAM2b,IAAQxe,KAAI,IAAM,CACtC8c,EAAI,GAAKpkB,EAAIikB,QAAQ,IACrB,EAAIjkB,EAAIikB,QAAQ,IAChBG,EAAI,GAAKpkB,EAAIikB,QAAQ,QAGvBqD,KAAM,CAAC3L,EAAQyI,EAAKpkB,WACb8lB,EAAQ,EAAI9lB,EAAIikB,QAAQjkB,EAAIikB,QAAQjkB,EAAIkkB,gBAAUvI,WAAQmK,eACzD,IAAI,IAAI3b,MAAM2b,IAAQxe,KAAI,IAAM,CACtC8c,EAAI,GAAKpkB,EAAIikB,QAAQ,IACrBjkB,EAAIikB,QAAQ,KACZG,EAAI,GAAKpkB,EAAIikB,QAAQ,QAGvBsD,UAAW,CAAC5L,EAAQyI,EAAKpkB,WAClB8lB,EAAQ9lB,EAAIikB,QAAQ,EAAIjkB,EAAIikB,QAAQjkB,EAAIkkB,gBAAUvI,WAAQmK,eACzD,IAAI,IAAI3b,MAAM2b,IAAQxe,KAAI,IAAM,CACtC8c,EAAI,GAAKpkB,EAAIikB,QAAQ,IACrBjkB,EAAIikB,QAAQ,KACZG,EAAI,GAAKpkB,EAAIikB,QAAQ,QAGvBuD,UAAW,CAACX,EAASzC,EAAKpkB,IAElBmnB,GAAU/C,EADP7Z,KAAK0C,IAAIjN,EAAI+jB,SAAUP,GAAQ5H,GAAM,EAAG,GAAIwI,EAAI,OAG3DqD,wBAAyB,CAACZ,EAASzC,EAAKpkB,WACjCf,EAAIsL,KAAK0C,IAAIjN,EAAI+jB,SAAUP,GAAQ5H,GAAM,EAAG,GAAIwI,EAAI,aACnD+C,GAAU/C,EAAKpkB,EAAIikB,QAAY,EAAJhlB,KAEnCyoB,wBAAyB,CAACb,EAASzC,EAAKpkB,IAEhCmnB,GAAU/C,EADP7Z,KAAK0C,IAAIjN,EAAI+jB,SAAUP,GAAQ5H,GAAM,EAAG,GAAIwI,EAAI,OAG3DuD,QAAS,CAACd,EAASzC,EAAKpkB,IAChB,CAAC,CACPokB,EAAI,GAAK,EAAIpkB,EAAIikB,QAAQ,GACzBG,EAAI,GACJA,EAAI,GAAK,EAAIpkB,EAAIikB,QAAQ,KAG3B2D,UAAW,CAACjM,EAAQyI,EAAKpkB,gBACuB,IAA3CA,EAAIikB,oBAAgB2B,UAAU,GAAK,IAAW,OAC3C3mB,EAAIe,EAAIikB,QAAQjkB,EAAIikB,QAAQ,KAAW,MACzChlB,EAAIe,EAAI+jB,UAAsD,GAA1C/jB,EAAIikB,mCAAiB2B,UAAU,GAAK,GAAS,OAG7D,CAAC,CAFE5lB,EAAIikB,QAAQ,IAAMG,EAAI,GAEpBnlB,EADFe,EAAIikB,QAAQ,IAAMG,EAAI,YAI3B,IAERyD,KAAM,CAAChB,EAASzC,IACR,CAACA,GAET0D,MAAO,CAACnM,EAAQyI,EAAKpkB,sBAEbmnB,GAAU/C,EADPpkB,EAAIikB,mCAAiB8D,WAAW,8BAAcC,cAAc,+BAAeC,iBAAiB,KAGvGC,aAAc,CAACvM,EAAQyI,EAAKpkB,sBAEpBmnB,GAAU/C,EADPpkB,EAAIikB,QAAQjkB,EAAIikB,mCAAiB8D,WAAW,8BAAcC,cAAc,+BAAeC,iBAAiB,MAGnHE,kBAAmB,CAACxM,EAAQyI,EAAKpkB,wBAEzBmnB,GAAU/C,EADPpkB,EAAIikB,QAAQjkB,EAAIikB,QAAQjkB,EAAIikB,mCAAiB8D,WAAW,8BAAcC,cAAc,+BAAeC,iBAAiB,+BAAeA,iBAAiB,MAG/JG,gBAAiB,CAACvB,EAASzC,EAAKpkB,IAExBmnB,GAAU/C,EADPpkB,EAAIikB,QAAQG,EAAI,GAAK,KAGhCiE,oBAAqB,CAACxB,EAASzC,IAEvB+C,GAAU/C,EADPZ,GAAQ5H,GAAM,EAAG,GAAIwI,EAAI,MAGpCkE,MAAO,CAACzB,EAASzC,EAAKpkB,IAEdmnB,GAAU/C,EADPpkB,EAAIikB,QAAQG,EAAI,GAAK,KAGhC9H,OAAQ,CAACuK,EAASzC,EAAKpkB,IACf,CAAC,CACPokB,EAAI,GAAKpkB,EAAIikB,QAAQ,IACrBG,EAAI,GACJA,EAAI,GAAKpkB,EAAIikB,QAAQ,MAGvBsE,2BAA4B,CAAC5M,EAAQyI,mBAC9BhkB,EAASojB,GAAQ5H,GAAM,EAAG,GAAIwI,EAAI,KAClClX,EAAM9M,6BAAkBskB,uBACxBzX,EAAM7M,6BAAkBukB,iBAAiBxI,EAAAA,UACvCiI,EAAI,GAAKlX,GAAOkX,EAAI,GAAKnX,EAAO,CAACmX,GAAO,IAEjDoE,WAAY,CAAC7M,EAAQyI,EAAKpkB,kBACe,IAApCA,EAAIikB,QAAQ,WAAO2B,UAAU,GACzB,CAAC,CACPxB,EAAI,GAAKpkB,EAAIikB,QAAQ,IACrBjkB,EAAIikB,QAAQ,KACZG,EAAI,GAAKpkB,EAAIikB,QAAQ,MAGhB,cCxSRljB,YAAY4J,iBAVY,mBACK,mBACC,mBACA,mBACD,mBACA,yBAEmB,gBACtB,QAGnBF,EAAS,IAAIqR,EAAanR,QAC3B8d,oBAAsB,IAAI5E,EAAYpZ,MAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,SACjGie,oBAAsB,IAAI7E,EAAYpZ,MAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,SACjGke,gBAAkB,IAAI9E,EAAYpZ,KAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,SACpEme,WAAa,IAAI/E,EAAYpZ,MAAa,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGvF1J,MAAM8nB,EAAejP,EAAejC,EAAemR,EAAiB3oB,QACrE0oB,SAAWA,OACXE,WAAwC,EAA3BF,EAASG,qBACtBC,YAAuC,EAAzBJ,EAASK,mBACvBC,YAAc5e,KAAKC,MAAMqe,EAASzoB,OAAS8N,KAAK+a,aAEjDJ,EAASO,WAAaxP,EAAQ,MACzB,EAAY,EAARA,IACJ,EAAY,EAARjC,QAER0R,WAAa,SAAoB,KAAM,WACvCC,WAAa,IAAgB,KAAM,SAEnCC,iBAAmBpf,MAAMhK,GAAOgkB,KAAK,WACrC2E,QAAUA,EAGT/nB,mBAAmBhC,SACnBoK,EAAOgB,MAAM+D,KAAKib,YAAcjb,KAAK+a,aACrCO,EAAKjf,KAAKC,MAAMzL,EAAImP,KAAK6a,YACzBU,EAAKlf,KAAKC,MAAMzL,EAAImP,KAAK6a,YAAc7a,KAAK6a,WAC5CW,EAASxb,KAAKyb,gBAAgBH,GAC9BI,EAAS1b,KAAKyb,gBAAgBH,EAAK,WAEhCvqB,EAAIiP,KAAKib,YAAc,EAAGlqB,GAAK,EAAGA,GAAK,UACtC4qB,EAAK3b,KAAK+a,YAAaY,GAAM,EAAGA,GAAM,EAAG,OAC3CC,EAAKD,EAAK3b,KAAK+a,cACXhqB,EAAIiP,KAAK+a,YAAcY,IPmEf/c,EOlEFgd,EPkEa/c,EOlET0c,EPkEoBzc,EOlEhB0c,EAAOzqB,GPkEoBsV,EOlEhBmV,EAAOzqB,EAAE,GPkEkBzB,EOlEdosB,EAAO3qB,GPkEkB0mB,EOlEdiE,EAAO3qB,EAAE,GPmEhEkO,GAAKJ,EAAGI,GAAKL,EAAGE,EAAGuH,GAAIpH,GAAKL,EAAGtP,EAAGmoB,SADpB7Y,EAAWC,EAAWC,EAAWuH,EAAW/W,EAAWmoB,SO/DpExc,EAGApI,gBAAgBhC,SACjBgrB,EAAe7b,KAAKqb,iBAAiBxqB,EAAImP,KAAK4a,YAChDiB,SAAqBA,QAEnB5gB,EAAOgB,MAAM+D,KAAKib,YAAc,GAEhCa,EAAU,QAAU9b,KAAK2a,SAASoB,SAASC,SAC3CC,EAAS,QAAUjc,KAAK2a,SAASoB,SAASG,QAC1CC,EAAWL,EAAU9b,KAAK2a,SAASoB,SAASK,UAC5CC,EAAUJ,EAASjc,KAAK2a,SAASoB,SAASO,SAC1CC,EAAgBvc,KAAK2a,SAAS6B,sBAAwBxc,KAAKyc,iBAAiB5rB,GAAK,UAE9EE,EAAI,EAAGA,GAAKiP,KAAKib,YAAalqB,GAAK,EAAG,KAC1C6V,EAAQ5G,KAAK0c,oBAAoB7rB,EAAGE,EAAGiP,KAAKya,gBAAgBkC,eAAe,GAAIC,GAAId,EAASG,EAAQE,EAAUE,SAG5GQ,IAFU,EAAQ,EAAJ9rB,EAAQiP,KAAKib,YAAcsB,GACrBvc,KAAK2a,SAASmC,eAAiB9c,KAAK2a,SAASoC,eAC5C/c,KAAKmb,YAAcnb,KAAKob,cAC1CyB,KAAqB,EAAI,EAAI,GAElC7c,KAAK2a,SAASqC,UAAUltB,KAAO,MAC1BmtB,GACPjd,KAAK2a,SAASqC,UAAUxtB,OACxBoX,QACMqU,YAAclqB,EAAKiP,KAAK2a,SAASqC,UAAUlW,QAAY9G,KAAK2a,SAASqC,UAAUltB,OAInFkQ,KAAK2a,SAASuC,aAAaptB,KAAO,MAC7BmtB,GACPjd,KAAK2a,SAASuC,aAAa1tB,OAC3BoX,KACM5G,KAAK2a,SAASuC,aAAapW,QAAY9G,KAAK2a,SAASuC,aAAaptB,SAGrEiB,GAAK6V,cAGNyU,iBAAiBxqB,EAAImP,KAAK4a,SAAW3f,EACnCA,EAGApI,iBAAiBhC,SAClB+V,EAAQ5G,KAAK0a,WAAW3M,OAAW,IAAJld,EAAS,GAAImP,KAAK0a,WAAWiC,eAAe,GAAIC,GAAI,EAAG,GAAG,GAEzF/d,EAAQ,WADH+H,EAAQ,EAAc,IAARA,EAAcA,GACb,SAClB/H,EAAI,EAAS,oBAAJA,EAA4C,WAAjBxC,KAAK2C,IAAIH,EAAG,GAGjDhM,oBAAoBhC,EAAWE,EAAW8Y,EAAWiS,EAAiBG,EAAgBE,EAAkBE,OAC3Gzd,EAAI,EACJC,EAAI,EACJC,EAAI,EACJuH,EAAI,UAECpJ,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAAG,OACzBkgB,EAAKxH,EAAYyH,KAAKvsB,EAAIirB,EAAUzV,GACpCgX,EAAK1H,EAAYyH,KAAKrsB,EAAIkrB,EAAS5V,GACnCiX,EAAK3H,EAAYyH,KAAKvT,EAAIiS,EAAUzV,GACpC/W,EAAI2sB,EAAS5V,EAEbkX,EAAgBvd,KAAKua,oBAAoBoC,eAAe1f,GAC1DsgB,OACEA,EAAcxP,OAAOoP,EAAIE,EAAIC,EAAIhuB,EAAGyB,EAAIzB,GAAK+W,SAG7CmX,EAAgBxd,KAAKwa,oBAAoBmC,eAAe1f,MAC1DugB,OACEA,EAAczP,OAAOoP,EAAIE,EAAIC,EAAIhuB,EAAGyB,EAAIzB,GAAK+W,GAG/CpJ,EAAI,EAAG,OACJwgB,EAAYzd,KAAKya,gBAAgBkC,eAAe1f,GAClDwgB,OACEA,EAAU1P,OACd4H,EAAYyH,KAAKvsB,EAAIsrB,EAAW9V,GAChCsP,EAAYyH,KAAKrsB,EAAIsrB,EAAUhW,GAC/BsP,EAAYyH,KAAKvT,EAAIsS,EAAW9V,GAChCgW,EAAUhW,EACVtV,EAAIsrB,EAAUhW,GACXA,MAID,SAGC4W,GAAYre,EAAI,IAAKC,EAAI,OAAU,GAAK,GAAK,ICjItD,MAEM6e,GAAmD,CACxDC,gBAAiB,CAAC,IAAK,IAAK,KAC5BC,kBAAmB,CAAC,GAAI,GAAI,KAC5BC,iBAAkB,CAAC,IAAK,IAAK,GAC7BC,kBAAmB,CAAC,GAAI,GAAI,IAC5BC,uBAAwB,CAAC,IAAK,GAAI,IAClCC,sBAAuB,CAAC,IAAK,IAAK,MAGnC,IAAIlV,GACAmV,GACAC,GAAsB,eAEIlV,EAAY7W,EAAgB8W,gBACrD9D,GAAa8D,EAAQ/U,QAAS,QAAS,OACpCymB,SAAEA,EAAUrmB,aAqCpB,SAAmB0U,EAAgBC,SAC5B0R,EAAWwD,EAAuBC,SAAS/T,YAAUC,YAAYtB,MAC9DG,QAAUkV,GAAW1D,SAExBzR,EAAW,CAACF,EAAO,GAAGC,EAAQxM,YAC/B+C,GAAU0J,EAAUJ,IAAa,IACxB1J,GAAU8J,MACV,SACPqF,EAAc,IAAIjF,EAAW,cAClB,IAAIgV,EAAoBrV,EAAQxM,KAAM8R,EAAaoM,SAE9D,CACNA,SAAAA,EACArmB,UAAW2pB,IAlDqBM,CAAUvV,EAAOC,GAE3CxO,EAAQ,IAAI+jB,IAAYvV,EAAQnC,OAAQmC,EAAQhX,MAAO0oB,EAAS/T,MAAM6X,KAAM9D,EAAS/T,MAAM1U,UAC3F+jB,KAAKyI,SAELpZ,EAAOnT,EAAI8I,aACRpK,EAAI,EAAGA,EAAIoY,EAAQhX,MAAOpB,GAAK,UAC9BE,EAAI,EAAGA,EAAI4pB,EAAS/T,MAAM1U,OAAQnB,GAAK,EAAG,OAC5CkM,EAAQ,EAAJpM,EAAsC,KAApB+V,MAAM1U,OAAOnB,EAAE,GAASoB,EAAIF,MAClD0sB,EAAQlkB,EAAMmkB,cAAc,CAAC/tB,EAAIoY,EAAQnC,OAAQ/V,EA1BjD,IA2BA0d,EAAQ,YAAOkQ,EAAME,cAAc,CAAC,EAAG,EAAG,KAC3C5hB,GAAKwR,EAAM,KACXxR,EAAI,GAAKwR,EAAM,KACfxR,EAAI,GAAKwR,EAAM,KACfxR,EAAI,GAAK,iBAMX3I,EAAY,IAAIwqB,GAAuB7V,EAAQxM,QAC3CsiB,MAAM/V,EAAMpC,MAAO,WAAQuU,cAAc,EAAG,WAAQC,cAAc,EAAGnS,EAAQnC,OAAQmC,EAAQhX,aACjGgJ,EAAO9I,EAAI8I,KACX+jB,EAAkB,EAAZ7sB,EAAIF,cACPpB,EAAI,EAAGA,EAAIoY,EAAQhX,MAAOpB,GAAK,EAAG,OACpC+V,EAAQtS,EAAU2qB,mBAAmBpuB,EAAIoY,EAAQnC,QAAQoY,kBACtDnuB,EAAI,EAAGA,EAAIiY,EAAMpC,MAAM1U,OAAQnB,GAAK,EAAG,OACzCkM,EAAIlM,EAAIiuB,EAAU,EAAJnuB,EACd4d,EAAQ0Q,GAASvY,EAAO7V,KACzBkM,GAAKwR,IACLxR,EAAI,GAAKwR,IACTxR,EAAI,GAAKwR,IACTxR,EAAI,GAAK,MAsBjB,YAAkB2J,EAAiB7V,UAC9B6V,EAAM7V,GAAK,EACP,EAEJ6V,EAAM7V,EAAE,GAAK,EACT,IAED,IAGR,SAIC8B,YACkBusB,EACjBntB,EACAwsB,EACAvsB,oBAEKmtB,OAAS,QACTC,OAAS,IAAIrjB,MAAMI,KAAKkc,KAAKtmB,EAAQ,IAAM,IAC9CmH,KAAI,CAACwf,EAAG3b,WACFpM,MAAa,GAAKoM,EAClBsiB,EAASrB,GAAWnjB,SAAU+D,EAAEoX,IAAI,KAAOrlB,WAC7C0uB,QACEF,OAAOpiB,IAAK,EACVsiB,GAED,IAAIC,EAAMf,EAAMvsB,EAAQutB,EAASC,OAAO7uB,EAAG8uB,OAI9C9sB,KAAKyB,QACNgrB,OAAOviB,SAAQ,CAAC6iB,EAAO3iB,KACtB+C,KAAKqf,OAAOpiB,OACNgZ,KAAK2J,QACVP,OAAOpiB,IAAK,KACN4G,KAAK+b,OAKZ/sB,cAAcqjB,SACd2J,KAAkB,IAAM,SAAWT,MAAQ,UAC1Cpf,KAAKsf,OAAOO,GAAYjB,cAAc1I,IC3H/C,MAAM1N,GAAS,CAAC,SAAU,cAAe,WAAY,kBAAmB,UAAW,YAAa,SAAU,SAAU,cAE9GsX,GAAkBvS,EAAcwS,YAEzBC,GAAqB,EAAGttB,MAAAA,EAAOuI,KAAAA,EAAMglB,MAAAA,EAAOjlB,KAAAA,EAAM9G,QAAAA,kBACvDuV,EAAOyW,GAAY1tB,EAAS,IAC5B2tB,EAASC,GAAc5tB,OAA6B,IACpDwa,EAAQqT,GAAa7tB,EAAS,IAAI8tB,IAA2B,CAAC,YAC/DxZ,EAASpX,EAAyB,CAAC,EAAG,IACtCqK,EAAMrK,EAAO,GACb6wB,EAAgB7wB,OAAe,GAE/B+M,EAAOL,OAAO1J,EAAMiK,IAAI,IAAIC,OAAK,CAAC,YAAa,WAC/CuM,EAAUkV,GAAW3rB,EAAMiK,IAAI,IAAIC,OAAK,CAAC,YAAa,eACtDwM,WA0HmB7N,YACN,iBAARA,SACFA,EAAIjB,QAAQ,cAAe,SAC7B,gBACA,mBACGwlB,kBAEAvS,EAAc6Q,SAAS,CAAEtX,OAAQ,EAAGC,OAAQ,EAAGC,WAAY,WAG9DuG,EAAc6Q,SAAS/T,YAAUC,YAAY,0BAAK1D,gBAAOC,iBApIjD2Z,CAAU9tB,EAAMiK,IAAI,IAAIC,OAAK,CAAC,YAAa,eACpDoM,EAAQiX,EA8Ef,SAAwBhlB,EAAWkO,EAAuBC,UAClDvG,KAAKC,UAAU,CAAC7H,EAAMkO,EAASC,EAAOC,WA/EvBoX,CAAexlB,EAAMkO,EAASC,GAAU,GACxDtb,EAAe,WAAKA,eAAMwM,QAAQ,cAAe,KAEjDlK,OAAEA,SAAQwB,GAAW8uB,GAAU,CACpC5wB,SACQ,CAAC,IAAMiK,EAAIpK,QAAS,IAAMoK,EAAIpK,oBAE3BwC,SACJ8W,EAAU,CAAEE,QAAAA,EAASC,OAAAA,EAAQoF,YAAa,GAAIxB,OAAAA,EAAQlG,OAAQA,EAAOnX,QAAS8Z,MAAAA,EAAOhN,KAAAA,EAAM1C,IAAKA,EAAIpK,QAASuE,QAAAA,wBJkBvF8U,EAAY7W,EAAgB8W,mBACpDsF,YAAEA,SAAsBgQ,GAAUvV,EAAOC,GAEzChO,EAAO9I,EAAI8I,KACXsgB,GAAMlf,KAAKskB,MAAM1X,EAAQnC,OAAO,IAAM,IAAMmC,EAAQlP,IAAM,EAC1D6mB,GAAMvkB,KAAKskB,MAAM1X,EAAQnC,OAAO,IAAM,IAAMmC,EAAQlP,IAAM,EAC1DilB,EAAkB,EAAZ7sB,EAAIF,MAAYgX,EAAQlP,IAC9B8mB,EAAM,EAAI5X,EAAQlP,IAElB+mB,EAAiB,CAACvF,EAAKtS,EAAQQ,WAAc8R,GAAMtS,EAAQQ,MAAOR,EAAQlP,IAAMkP,EAAQQ,OACxFsX,EAAiB,CAACH,EAAK3X,EAAQQ,WAAcmX,GAAM3X,EAAQQ,MAAOR,EAAQlP,IAAMkP,EAAQQ,OAExFE,EAAUV,EAAQ+D,OAAOQ,IAAI,UAAwB,WAAYlB,8BAAewU,EAAQ,GAAI,GAAI,KAAMC,QAA7D,EACzC/T,EAAS,IAAI/D,EAAQ+D,QAAQ9J,WAAkB,WAAN8d,IACzCpa,EAA0B,IAAlBoG,EAAOpR,QAA2B,WAAYqlB,iBAAxB,WAAqC,IAAIX,IAAItT,MAAY8T,EAAQ,GAAI,GAAI,KAAMC,WAE1GlwB,EAAI,EAAGA,EAAI,IAAKA,GAAKoY,EAAQlP,YAC5B8P,EAAI,EAAGA,EAAI,IAAKA,GAAKZ,EAAQlP,IAAK,OACpCkD,EAAI4M,EAAImV,EAAMnuB,EAAIgwB,EAClBzK,EAAKvlB,EAAIoY,EAAQlP,IAAO,IAAMkP,EAAQlP,IAAM8P,EAAIZ,EAAQlP,IACxDmnB,KAAc3F,GAAMtS,EAAQQ,MAC5B0X,KAAcP,GAAM3X,EAAQQ,UAC9BgF,EAAgB,CAAC,GAAI,GAAI,OACzBxF,EAAQ+D,OAAOQ,IAAI,YAEd4T,GADM,0BAAShL,MAAM7H,EAAY8S,SAASH,EAAQ,GAAIC,GACjClY,EAAQuF,qBAC3B5H,GAASoG,EAAO,GAAI,OACxB9d,EAAQ0X,EAAMwP,GAAGpJ,EAAO,KACvBhO,EAAKD,GAAOyJ,GAAOwE,EAAO,IAC3BsU,KAAsBtiB,MAAcA,GAAO,MACzC,CAACsiB,EAAYA,EAAYA,KAE7BrkB,GAAKwR,EAAM,KACXxR,EAAI,GAAKwR,EAAM,KACfxR,EAAI,GAAKwR,EAAM,KACfxR,EAAI,GAAK,KIpDRskB,CAAStmB,EAAM9I,EAAK8W,GACN,IAAhBlP,EAAIpK,uBACM4wB,EAAc5wB,WACbA,QAAU6xB,YAAW,OAC9B7xB,QAAU,QAEZ,oBAGQsB,EAAIC,KACTvB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAU,IAALsB,IACjCtB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAU,IAALuB,eAC3BqvB,EAAc5wB,WACvBA,QAAmB,gBAAT7B,EAAyB,EAAI,qBAG9B+C,EAAGE,SACVkY,EAAU,CAAEE,QAAAA,EAASC,OAAAA,EAAQoF,YAAa,GAAIxB,OAAAA,EAAQlG,OAAQA,EAAOnX,QAAS8Z,MAAAA,EAAOhN,KAAAA,EAAM1C,IAAK,EAAG7F,QAAAA,GACnGqV,uBJuCsBP,EAAYnY,EAAWgZ,EAAWZ,SAC1DsF,YAAEA,SAAsBgQ,GAAUvV,EAAOC,IAExCwY,EAAIC,GAyIZ,UAAkB7wB,EAAGgZ,GAAsBZ,SAGnC,IAFSA,EAAQnC,OAAO,GAAK,IAAMmC,EAAQlP,IAAM,GAAKkP,EAAQQ,SACrDR,EAAQnC,OAAO,GAAK,IAAMmC,EAAQlP,IAAM,GAAKkP,EAAQQ,OA3IpDkY,CAAQ,CAAC9wB,EAAGgZ,GAAIZ,UAC1BsF,EAAY8S,SAASI,EAAI,GAAIC,GI3CdL,CAASpmB,EAAMoB,KAAKC,MAAU,IAAJzL,GAAUwL,KAAKC,MAAU,IAAJvL,GAAUkY,KAClEM,IAEZ1W,iBACY,KAEV,CAACmW,EAAOS,EAAOhN,EAAMuQ,OAEd,KACLiT,MACCtwB,QAAmB,gBAAT7B,EAAyB,EAAI,SAG1C,CAACkb,EAAOS,EAAOhN,EAAMuQ,EAAQiT,UAE1B2B,EAAeC,MACblyB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAK8Z,EAAQoY,IACzClyB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAK8Z,EAAQoY,IACvCA,sBAIR,MAAD,CAAKvzB,MAAM,YACT6xB,KAAYhtB,EAAD,CAAK3E,MAAO2xB,EAAS7xB,MAAM,eAC7B,gBAATR,KACCg0B,GAAD,CAASvzB,KAAK,QAAQI,QAASozB,GAAO/mB,EAAM,qBAC1CwN,GAAOpP,eACD4oB,EAAUhV,EAAOQ,IAAItV,YACnB/E,EAAD,CAAK3E,MAAOuzB,GAAO/mB,EAAM,SAAS9C,KACxCzJ,OAAQuzB,EACRrzB,QAAmBozB,GAAO/mB,EAAjBgnB,EAAuB,UAA0B,YAC1DnzB,QAAUS,MACC,IAAIgxB,IAAI,CAACpoB,OACjBrI,0BAII,mBAA0B,iBAAT/B,eAC1BqF,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,YACtCnM,QAAS,IAAM+yB,EAAoB,IAARnY,OAC3BtW,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,WACtCnM,QAAS,IAAM+yB,EAAYnY,EAAQ,QAE3B,gBAAT3b,KACCqF,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,qBACtCnM,QAAS,IAAMozB,GAAQvvB,QAEzB,SAAD,CAAQjD,IAAKW,EAAQ6B,MAAM,MAAMC,OAAO,sBAQfqJ,MACP,iBAARA,EAAkB,OACtBof,EAAWwD,EAAuBC,SAAS/T,YAAUC,YAAY/O,MAChC,IAAjCof,EAAS/T,MAAMsb,6BAAuBvH,EAAS/T,MAAMub,cACxD,mBAAqB,6BAEjB5mB,EAAIjB,QAAQ,cAAe,SAC7B,gBACA,kBACG,CACNmO,YAAa,CAAEyD,eAAiBC,WAAY,CAAC,IAAK,EAAG,EAAG,EAAG,EAAG,IAC9DzD,SAAU,CAAEwD,eAAiBC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IACzDxD,gBAAiB,CAAEuD,eAAiBC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IACzEvD,QAAS,CAAEsD,eAAiBC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,IACrDtD,UAAW,CAAEqD,eAAiBC,WAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAC1D3C,MAAO,CAAE0C,eAAiBC,WAAY,CAAC,EAAG,EAAG,EAAG,SAE7C,UACA,yBACG,CACN1D,YAAa,CAAEyD,YAAa,EAAGC,WAAY,CAAC,IAC5CzD,SAAU,CAAEwD,YAAa,EAAGC,WAAY,CAAC,IACzCxD,gBAAiB,CAAEuD,YAAa,EAAGC,WAAY,CAAC,IAChDvD,QAAS,CAAEsD,YAAa,EAAGC,WAAY,CAAC,IACxCtD,UAAW,CAAEqD,YAAa,EAAGC,WAAY,CAAC,IAC1C3C,MAAO,CAAE0C,YAAa,EAAGC,WAAY,CAAC,mBAGhC,CACN1D,YAAa,CAAEyD,eAAiBC,WAAY,CAAC,EAAG,IAChDzD,SAAU,CAAEwD,eAAiBC,WAAY,CAAC,EAAG,IAC7CxD,gBAAiB,CAAEuD,eAAiBC,WAAY,CAAC,EAAG,IACpDvD,QAAS,CAAEsD,eAAiBC,WAAY,CAAC,EAAG,IAC5CtD,UAAW,CAAEqD,eAAiBC,WAAY,CAAC,EAAG,IAC9C3C,MAAO,CAAE0C,YAAa,EAAGC,WAAY,CAAC,YCtI7BiW,GAAmB,EAAGnnB,KAAAA,EAAM/G,QAAAA,EAAS+rB,MAAAA,EAAOjlB,KAAAA,YACjDyO,EAAOyW,GAAY1tB,EAAS,IAC5BiK,EAAM4lB,GAAW7vB,EAAS8vB,OAE3BlyB,OAAEA,SAAQwB,GAAW8uB,GAAU,CACpC5wB,SACQ,CAAS,GAAR2Z,EAAoB,GAARA,cAEVtX,MACA8I,EAAM9I,EAAK,CAAEsK,KAAAA,EAAMvI,QAAAA,EAASpE,KAAM,CAAS,GAAR2Z,EAAY,IAAa,GAARA,QAI1DT,EAAQnG,KAAKC,UAAU7H,aACnB,KACLglB,SAGF,CAACjX,EAAOS,EAAOhN,EAAMwjB,eAGtB,MAAD,CAAK3xB,MAAM,cACT6E,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,YACtCnM,QAAS,IAAMqxB,EAAS7jB,KAAK2C,IAAI,GAAIyK,EAAQ,QAC7CtW,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,WACtCnM,QAAS,IAAMqxB,EAAS7jB,KAAK0C,IAAI,EAAG0K,EAAQ,QAC5CtW,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,qBACtCnM,QAAS,IAAMwzB,EAAQC,WAExB,SAAD,CAAQ7yB,IAAKW,EAAQ6B,MAAM,KAAKC,OAAO,SC7B5BqwB,GAAe,EAAGvnB,KAAAA,EAAMC,KAAAA,EAAMglB,MAAAA,EAAO/rB,QAAAA,YAC1CuI,EAAM4lB,GAAW7vB,EAAS8vB,OAC1B7Y,EAAOyW,GAAY1tB,EAAS,GAC7BsU,EAASpX,EAAyB,CAAC,EAAG,IACtCsZ,EAAQnG,KAAKC,UAAU,CAAC7H,KAExB7K,OAAEA,SAAQwB,GAAW8uB,GAAU,CACpC5wB,SACQ,CAAC,IAAK,gBAEHqC,SACJ8W,EAAU,CAAEnC,OAAQA,EAAOnX,QAAS8Z,MAAAA,EAAOhN,KAAAA,EAAMvI,QAAAA,aCR9B8U,EAAY7W,EAAgB8W,SACjD1M,EAAS,IAAIqR,EAAa3E,EAAQxM,MAClCpC,EAASmoB,EAAgBpE,SAAS/T,YAAUC,YAAYtB,IACxDpC,EAAQ,IAAI+G,EAAYpR,EAAQlC,GAEhCkhB,GAAMtS,EAAQnC,OAAO,GAAK,IAC1B8Z,GAAM3X,EAAQnC,OAAO,GAAK,IAC1B7L,EAAO9I,EAAI8I,aACRpK,EAAI,EAAGA,EAAI,IAAKA,GAAK,UACpBE,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,OAC1BkM,EAAQ,EAAJpM,EAAY,EAAJE,EAAQ,IACpB0wB,KAAUlG,GAAMtS,EAAQQ,MACxBkS,KAAUiF,GAAM3X,EAAQQ,MACxBgF,EAAwC,OAAzBV,OAAO0T,EAAI9F,EAAI,GAAK,KACpC1e,GAAKwR,IACLxR,EAAI,GAAKwR,IACTxR,EAAI,GAAKwR,IACTxR,EAAI,GAAK,MDRFhC,EAAM9I,EAAK8W,iBAEXhY,EAAIC,KACTvB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAU,IAALsB,IACjCtB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAU,IAALuB,QAGvC,CAAC8X,EAAOS,EAAOhN,OAER,KACLwjB,SAGF,CAACjX,EAAOS,EAAOhN,EAAMwjB,UAElB2B,EAAeC,MACblyB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAK8Z,EAAQoY,IACzClyB,QAAQ,GAAKmX,EAAOnX,QAAQ,GAAK8Z,EAAQoY,IACvCA,sBAIR,MAAD,CAAKvzB,MAAM,cACT6E,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,YACtCnM,QAAS,IAAM+yB,EAAoB,IAARnY,OAC3BtW,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,WACtCnM,QAAS,IAAM+yB,EAAYnY,EAAQ,SACnCtW,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,qBACtCnM,QAAS,IAAMwzB,EAAQC,WAExB,SAAD,CAAQ7yB,IAAKW,EAAQ6B,MAAM,MAAMC,OAAO,UEzC7BuwB,GAAuB,EAAGznB,KAAAA,EAAMC,KAAAA,EAAMglB,MAAAA,EAAO/rB,QAAAA,oBACnDwuB,EAAMX,GAAOY,KAAK,KAAM3nB,IACvByB,EAAM4lB,GAAW7vB,EAAS8vB,OAC1BlH,EAAYwH,GAAiBpwB,EAAS,KACtC2oB,EAAY0H,GAAiBrwB,EAAS,KACtC2tB,EAASC,GAAc5tB,OAA6B,GACrDsU,EAASpX,EAAO,GAChBsZ,EAAQnG,KAAKC,UAAU,CAAC7H,EAAMmgB,EAAYD,IAE1CrrB,EAAO,SAAA,0BAAM8W,gBAAO1U,UAAU,KAC9B9B,OAAEA,SAAQwB,GAAW8uB,GAAU,CACpC5wB,SACQ,CAACA,EAAMA,cAEJqC,SACJ8W,EAAU,CAAEkS,WAAAA,EAAYC,WAAAA,EAAYtU,OAAQA,EAAOnX,QAASsC,MAAOE,EAAIF,MAAOwK,KAAAA,EAAMvI,QAAAA,MAC5E+G,EAAM9I,EAAK8W,iBAEbhY,KACLtB,SAAWsB,EAAKnB,qBAGV8oB,EAAG7nB,iBACV+xB,EAAShzB,EAAOuM,KAAK0C,IAAI,EAAG1C,KAAKkc,KAAKxnB,EAAIjB,wCAAgB8W,gBAAOmc,SAAS,KACrE,GAAGD,MAEfjwB,iBACY,KAEV,CAACmW,EAAOvM,cAED,KACLwjB,SAGF,CAACjX,EAAOvM,EAAMwjB,eAGf,MAAD,CAAK3xB,MAAM,YACT6xB,KAAYhtB,EAAD,CAAK3E,MAAO,OAAO2xB,IAAW7xB,MAAM,eAC/C6W,GAAajR,OAAS,EAAW,WAChC4tB,GAAD,CAASvzB,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,uBACzCgoB,EAAD,CAAUx0B,MAAOk0B,EAAI,iBAAkBxzB,MAAO,GAAGksB,IAAchsB,YAAewzB,EAAcrqB,OAAOF,QAClG2qB,EAAD,CAAUx0B,MAAOk0B,EAAI,iBAAkBxzB,MAAO,GAAGisB,IAAc/rB,YAAeyzB,EAActqB,OAAOF,SAGpGlF,EAAD,CAAK5E,KAAK,OAAOI,QAASozB,GAAO/mB,EAAM,qBACtCnM,QAAS,IAAMwzB,EAAQC,WAExB,SAAD,CAAQ7yB,IAAKW,EAAQ6B,MAAOnC,EAAMoC,OAAQpC,MCnD/BmzB,GAAa,CAAC,YAAa,iBAAkB,0BAA2B,4CAUxDjoB,KAAEA,QAAMtI,UAAOwB,KAASnG,QAAIkyB,iBAC/CiD,GAAY1wB,EAAS,SAErBE,GAAO,WACGklB,EAAQ,OAGhB,cAAP7pB,IAAsB,0BAAO4O,IAAI,IAAIC,OAAK,CAAC,YAAa,oBAAWrD,SAAS,UAAU,OACnF0B,EAAOvI,EAAMiK,IAAI,IAAIC,OAAK,CAAC,YAAa,qBAC1C3B,WAAc+kB,GAADhoB,KAAwB,CAAEgD,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAAS+rB,MAAAA,EAAOhlB,KAAAA,QAG9D,mBAAPlN,GAA2B2E,EAAO,OAC/BuI,EAAOvI,EAAMiK,IAAI,IAAIC,OAAK,QAC5B3B,WAAcsnB,GAADvqB,KAAkB,CAAEgD,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAAS+rB,MAAAA,EAAOhlB,KAAAA,QAGxD,4BAAPlN,GAAoC2E,EAAO,OACxCuI,EAAOvI,EAAMiK,IAAI,IAAIC,OAAK,QAC5B3B,WAAcwnB,GAADzqB,KAA0B,CAAEgD,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAAS+rB,MAAAA,EAAOhlB,KAAAA,QAGhE,gCAAPlN,GAAwC2E,EAAO,OAC5CuI,EAAOvI,EAAMiK,IAAI,IAAIC,OAAK,QAC5B3B,WAAcmnB,GAADpqB,KAAsB,CAAEgD,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAAS+rB,MAAAA,EAAOhlB,KAAAA,4BClC3DkoB,GAAiD,CAC7D9M,SAASuC,EAAG1pB,IACJA,EAGR2D,QAAOuwB,WAAEA,GAAc3d,EAAMvW,EAAOwI,UAC5B0rB,EAAWC,KAAKrjB,KAAMyF,EAAMvW,EAAOwI,IAG3C7E,MAAKI,SAAEA,GAAYwS,EAAMvW,EAAOwI,OAC1BuE,MAAMsD,QAAQrQ,UAAeA,QAC5B6K,EAAM7K,EAAMkK,KAAI,CAACmC,EAAK7H,IAC3BT,EAASowB,KAAKrjB,KAAMyF,EAAK5B,KAAKnQ,GAAQ6H,EAAIuO,KAAMpS,eAEtCkH,KAAKc,OAAO4jB,sBAAsBp0B,KACxC0P,GAAY1P,EAAM0P,UAEhB7E,GAGRlH,KAAII,SAAEA,EAAU4H,UAAU4K,EAAMvW,EAAOwI,mBACxB,IAAVxI,eACEq0B,EAA8C,qBAAjC,WAAOC,qBAAYC,WAAiC,WAAMjhB,sBAAckhB,eAAaje,EAAMgI,EAAO+V,WAAWnpB,OAAOtM,IAAI4O,OAAS,KAC9I5C,EAAW,UACV+C,KAAK5N,GAAO6N,mBACdwmB,IACE7jB,OAAO5C,KAAK,WAAW6I,cAAc,IAAIc,SAASgR,OAEpDA,GAAKxkB,EAASowB,KAAKrjB,KAAMyF,EAAK5B,KAAK4T,GAAIvoB,EAAMuoB,GAAI/f,iBAE3CkH,KAAKc,OAAO4jB,sBAAsBp0B,KACxC0P,GAAY1P,EAAM0P,UAEhB7E,GAGRlH,QAAO8wB,gBAAEA,GAAmBle,EAAMvW,EAAOwI,MACpCxI,MAAAA,GAA0D,iBAAVA,SAC5CA,QAEF6K,EAAW,GACX6pB,EAAeD,EAAgBle,UAC9B3I,KAAK8mB,GACV1gB,WAAY0gB,EAAare,GAAGyc,QAAQvc,KACpC1I,mBACM8mB,EAAMD,EAAanM,GAAG4L,KAAKrjB,KAAMyF,EAAK5B,KAAK4T,GAAIvoB,EAAMuoB,GAAI/f,GAC3DmsB,MAAAA,MACCpM,GAAKoM,gBAGDjlB,KAAKc,OAAO4jB,sBAAsBp0B,KACxC0P,GAAY1P,EAAM0P,UAEhB7E,QCzDQ+pB,GAAAC,IAAAA,GAAAD,yBACW,uBACH,sBACE,8BACD,2BACA,qCACQ,8BAEjBE,oCACR,sBAAa5gB,QAAQ2gB,mBAAgB,SAG7BE,iCACR,sBAAa7gB,QAAQ2gB,gBAAa,WAG1BG,4BACThwB,EAAUiP,aAAaC,QAAQ2gB,sBACjC7vB,GAAWsN,GAAWiF,SAASvS,GAC3BA,EAED,WAGQiwB,kCACR,sBAAa/gB,QAAQ2gB,iBAAc,eAG3BK,kCACR,sBAAahhB,QAAQ2gB,iBAAc,WAG3BM,yCACR,sBAAajhB,QAAQ2gB,yBAAsB,aAGnClwB,qBAAYC,GACvBA,gBAAuBmQ,QAAQ8f,eAAajwB,OAGjCC,kBAASC,GACpBA,gBAAoBiQ,QAAQ8f,YAAU/vB,OAG3BC,oBAAWC,GACtBA,gBAAsB+P,QAAQ8f,cAAY7vB,OAG/BowB,mBAAUC,GACrBA,gBAAqBtgB,QAAQ8f,aAAWQ,OAG7BC,mBAAUC,GACrBA,gBAAqBxgB,QAAQ8f,aAAWU,OAG7BC,0BAAiBxwB,GAC5BA,gBAAsB+P,QAAQ8f,qBAAmB7vB,IChDvD,MAEMywB,GAAsD,CAC3DC,WAAY,EACZC,WAAY,EACZC,KAAM,KACNC,cAAU,GAGLC,GAGD,CACJ3kB,KAAM,CACLsG,MAAOtG,EAAKsG,MACZ7D,UAAW,CAACzK,EAAG4E,IAAMoD,EAAKyC,UAAUzK,EAAG,KAAM4E,IAE9CgoB,KAAM,CACLte,MAAOse,EAAK92B,KACZ2U,UAAW,CAACzK,EAAG4E,IAAMgoB,EAAKC,KAAK7sB,EAAG,CACjC8sB,eAAiB,IAANloB,EAAkB,KAC7BsnB,OAAqB,iBAANtnB,EAAiB,EAAIA,mBAgBXjC,KAAEA,OAAM9C,QAAMxF,cAAO8P,SAAa4iB,aAAQC,WAAYC,cAAUC,UAAaC,UAClG9C,EAAMX,GAAOY,KAAK,KAAM3nB,IACvBupB,EAAQD,GAAa9xB,EAASsxB,GAAMK,cACpCM,EAAQD,GAAahyB,EAASsxB,GAAMM,aACrC1N,EAAShnB,EAA4B,MACrC8F,EAAW9F,EAA0B,MACrC+1B,EAAc/1B,IAEdg2B,EAAYC,GAAY,CAACC,EAAkBC,WAC1C5qB,EAAO2qB,EAAMzqB,OAAOkoB,KAAKF,GAAiB,IAAI2C,YAAUF,GAAQA,EAAM3qB,KAAM,CAAEuH,uBAC7EwiB,GAAQP,GAAQ3hB,UAAU7H,EAAM0pB,GAAOJ,IAAW,OACvD,CAACA,EAAQE,OAEF,OACG90B,QAAU,QAChB+C,GAAU8P,YAERujB,EAASL,EAAUhzB,EAAO8P,GAC5BujB,EAAOnqB,QAvDY,MAwDfjM,QAAQT,MAAQ62B,EAAOtrB,MAAM,EAxDd,KAwDuC,0FAEtD9K,QAAQT,MAAQ62B,QAEhBz2B,KACA,8BAA8B6P,GAAQ7P,cACtCgI,MAAMhI,KACPK,QAAQT,MAAQ,WAKjBwD,GAAO,OACH/C,gBAEH,KACL+C,KAAmB/C,YACrB,CAAC+C,OAEM,OACG/C,YACV,CAAC40B,EAAQE,OAaF,KACLW,GAAU1yB,GAAS8P,aACZwjB,UAAUC,UAAUP,EAAUhzB,EAAO8P,IAAcvI,MAAK,cAIjE,CAACmrB,OAEM,QACLC,GAAc3yB,GAAS8P,GAAehN,EAAS7F,QAAS,OACrDmR,EAAUtC,mBAAmBknB,EAAUhzB,EAAO8P,MAC3C7S,QAAQu2B,aAAa,OAAQ,gCAAgCplB,OAC7DnR,QAAQu2B,aAAa,WAAY,GAAGhuB,KAAQusB,OAC5C90B,QAAQw2B,WAEhB,CAACd,OAEM,KACLC,GAAY5O,EAAO/mB,YACfA,QAAQT,MAAQ,KAChBS,QAAQC,YAEd,CAAC01B,sBAaF,MAAD,CAAKh3B,MAAM,cACTwzB,GAAD,CAASvzB,KAAK,OAAOI,QAAS+zB,EAAI,oBAChChjB,OAAOpB,QAAQqmB,IAAQvrB,KAAI,EAAErB,OAC5B5E,EAAD,CAAK3E,MAAOk0B,EAAI,eAAe3qB,KAAQtJ,OAAQ81B,IAAWxsB,EACzDlJ,QAAS,KAAMu3B,OAfEl3B,EAeW6I,KAd1BusB,UAAUp1B,UACNA,GAFU,IAACA,SAiBlB,KAAD,MACCwQ,OAAO5C,KAAKkoB,IAAS5rB,UACpBjG,EAAD,CAAK3E,MAAOk0B,EAAI,UAAU3qB,KAAQtJ,OAAQg2B,IAAW1sB,EACpDlJ,QAAS,KAAMw3B,OAfEn3B,EAeW6I,KAd1BysB,UAAUt1B,UACNA,GAFU,IAACA,WAkBpB,WAAD,CAAUO,IAAKinB,EAAQpoB,MAAM,SAASg4B,OA1DtB,QACoB,IAAhC5P,EAAO/mB,QAAQT,MAAM0M,iBAElBX,EAAO+pB,GAAQP,GAAQ9d,MAAM+P,EAAO/mB,QAAQT,kBAC3C6vB,MAAM1U,YAAUkc,UAAUtrB,IAAO,SAChC3L,KACA,oBAAoB6P,GAAQ7P,cAC5BgI,MAAMhI,KAmDyCk3B,YAAY,EAAOC,YAAY,MAAMt3B,YAAauzB,EAAI,0BAC7G,IAAD,CAAGjzB,IAAK+F,EAAUkxB,MAAM,qCCnJQrc,YACjCxX,YACCsI,EACiBwrB,EACAC,EACAC,SAEX1rB,6CAGPtI,IAAI4S,UACIzF,KAAK2mB,OAAOlhB,GAGpB5S,IAAI4S,UACIzF,KAAK4mB,OAAOnhB,GAGpB5S,IAAI4S,EAAYvW,EAAY43B,UACpB9mB,KAAK6mB,OAAOphB,EAAMvW,EAAO43B,ICRlC,MAAMC,GAAmB,CAAC,kBAAmB,kBAAmB,oBAAqB,sBAAuB,oBAAqB,cAAe,2BAA4B,wCAAyC,0CAA2C,cAAe,eAAgB,iBAAkB,iCAAkC,4BAA6B,oBAAqB,sBAAuB,sBAAuB,oBAAqB,sBAAuB,uBAAwB,yBAA0B,uBAAwB,2BAA4B,2BAA4B,+BAAgC,gCAAiC,oBAAqB,uBAAwB,qBAAsB,2BAC/tBC,GAAe,CAAC,uBAAwB,sBAAuB,oBAAqB,oBAAqB,sBAAuB,wBAChIC,GAAkB,CAAC,iBAAkB,mBAAoB,qBAAsB,uBAAwB,mDAAoD,oDAAqD,kEAAmE,wBAAyB,2BAA4B,yBAA0B,uCAAwC,wCAAyC,oCACnbC,GAAe,CAAC,kBAAmB,oBAAqB,sBAAuB,oBAAqB,2BAA4B,wCAAyC,eAAgB,iBAAkB,4BAA6B,iCAAkC,oBAAqB,sBAAuB,sBAAuB,oBAAqB,2BAA4B,2BAA4B,gCAAiC,mBAAoB,wBAAyB,sBAAuB,wBAAyB,sBAAuB,sBAAuB,wBAAyB,uBAAwB,qBAAsB,2BAC7oBC,GAAY,CAAC,uBAAwB,+BAAgC,4BAA6B,aAAc,YAAa,YAC7HC,GAAa,CAAC,yCAA0C,sCAAuC,6CAA8C,qCAAsC,mCAAoC,uCAAwC,wCAAyC,2BAA4B,gCAAiC,yCAA0C,yCAA0C,qBAAsB,mBAAoB,gCAAiC,yBAA0B,0BAA2B,6BAA8B,wBACvlBC,GAAkB,CAAC,8BAA+B,uCASlDC,GAAY,IAAIjd,YAAUkd,UAC/BC,eACAA,gBACE,CAAEC,WAAY,iBAeQ/0B,MAAEA,OAAOsI,UAAM9G,cAASsO,gBAC1CiD,EAAO,IAAIqgB,YAAUpzB,IACpBg1B,EAAQC,EAAQj2B,GAAQgB,EAAMyI,OAAOkoB,KAAKuE,GAAYniB,EAAMrG,GAAU1M,EAAMuI,MAAOD,EAAM9G,EAASsO,EAAa,WAC/G,0BAAQ9K,gBAAOzE,SAAS40B,MAAM/oB,GAAWA,OAAM,MAAD,CAAKxQ,MAAO,QAAQoE,EAAMyI,OAAOrN,KAAK2X,UAAcqiB,gBAAep1B,EAAMyI,OAAO3H,SAASiS,MAC5I,MAAD,CAAKnX,MAAM,eAAeo5B,EAAQC,KACjC,MAAD,CAAKr5B,MAAM,aAAaoD,IAChBA,EAGV,MAAMk2B,GAAyB,CAC9BvR,SACQ,CAAC,KAAM,KAAM,MAGrB0R,SAAQ1tB,EAAQoL,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,IAC5C,CAAC,OAAOk2B,GAADhwB,KAAmB5E,OAAIiH,GAAJ,CAAYoL,KAAAA,EAAMvW,MAAAA,EAAO8L,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQ9T,IAAAA,MAAU,MAG5Fe,QAAOo1B,QAAEA,EAASptB,oBAAQuoB,GAAc3d,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,SACrEo2B,EAAS9E,EAAW+E,WAAW1iB,GAAM,GACrC2iB,oBAAuBC,SAAW,IAAIvC,YAAUrgB,EAAK6iB,WAAY,IAAI1rB,OAAK6I,EAAK8iB,WAAY,CAAC9a,EAAO4a,WAAa5iB,GAC/GiiB,EAAQC,EAAQj2B,GAAQw2B,EAAOpe,KAAKuZ,KAAKrjB,KAAMooB,EAAal5B,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,MAC1E,IAAnBm2B,EAAQrsB,aACJ,CAAC8rB,EAAQC,EAAQj2B,SAEnB82B,oBAA4BC,eAAgB,IAAI7rB,OAAK,GAAI,CAAC6Q,EAAOgb,kCAA0BJ,SAAU,IAAIzrB,OAAK,GAAI,CAAC6Q,EAAO4a,UAAY5iB,EAStIijB,IAAU,SAAD,CAAQx5B,MAAOg5B,EAAOp6B,KAAMsB,SAAWE,GAR1C,CAACxB,gBACNgR,EAAI,WAAQ/D,SAAU4tB,EAAE76B,OAASA,OAASo6B,EAC1CU,EAAM9pB,EAAEgL,KAAKxO,UACbutB,EAAW/pB,EAAEmC,OAChBnC,EAAEmC,OAAOoJ,YAAUC,YAAYpb,IACN,YAAzBue,EAAOgb,eAA6C,0CAAT36B,MAAiC86B,EAAI/tB,OAAOsb,QAAUyS,IAC/Fl2B,MAAMmK,IAAI4I,EAAM4E,YAAUkc,UAAUsC,KAEkBhsB,CAAKvN,EAAEE,OAA6BN,QAC9F+4B,EAAQ7uB,UAAU,SAAD,CAAQlK,MAAO4P,EAAEhR,MACjCg7B,GAAW9tB,EAAMwtB,EAAkBO,YAAYjqB,EAAEhR,iBAG7C,CAAC45B,WAAWgB,EAAQf,GAAYj2B,IAGxCmB,MAAKI,SAAEA,EAAU4H,UAAU4K,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,SACxDk3B,OAAEA,WAAQC,YAAUC,GAAcC,MACjCC,EAAUC,GAAe72B,EAAS,IAEnC61B,EAAU5iB,EAAK1T,aAAaoK,KAAK,QACnCirB,GAAW3gB,SAAS4hB,GAAU,OAU1B,UARL,IAAIpsB,MAAMwR,EAAO6b,YAAalwB,KAAI,CAACwf,EAAG3b,MACrCssB,GAAD,CAAYvuB,KAAAA,EAAYyK,KAAMA,EAAK+jB,UAAUvsB,SAC7C,MAAD,CAAK3O,MAAM,yBAEM,IAAI2N,MAAMwR,EAAO6b,YAAYlwB,KAAI,CAACwf,EAAG3b,kBACxChK,EAASowB,KAAKrjB,KAAMyF,EAAK+jB,UAAUvsB,GAAI,0BAAQA,aAAI6M,KAAM9O,EAAM9G,EAAS0R,EAAQ9T,GACjF,OAEU,YA0ElB,CAAC,OA7DQ,SAAD,CAAQxD,MAAM,wBAAwBQ,aAAYizB,GAAO/mB,EAAM,WAAYnM,QAV5E,KACRoN,MAAMsD,QAAQrQ,OAAgB,UAC7B4a,EAAOO,YAAUkc,UAAUtzB,EAASqI,aACrC5I,MAAMmK,IAAI4I,EAAM,CAAC,CAAEqE,KAAAA,EAAM/b,GAAI07B,SAAcv6B,MAO0DH,GAAQyH,sBAEhHtH,GAAS+M,MAAMsD,QAAQrQ,IAAWA,EAAMkK,KAAI,EAAG0Q,KAAM4f,EAAQ37B,GAAI47B,GAAOj2B,QACrEA,IAAU01B,WACL,MAAD,CAAK96B,MAAM,sBAChB,QAAD,KAAQyzB,GAAO/mB,EAAM,iBAAkB,IAAG9L,EAAM0M,OAASwtB,OACxD,SAAD,CAAQv6B,QAAS,IAAMw6B,EAAYhtB,KAAK2C,IAAIoqB,EAAW,GAAIl6B,EAAM0M,UAAWmmB,GAAO/mB,EAAM,sBAAuB,SAC/G,SAAD,CAAQnM,QAAS,IAAMw6B,EAAYn6B,EAAM0M,SAAUmmB,GAAO/mB,EAAM,2BAG9DtH,EAAQ01B,SACJ,WAGFQ,EAAQnkB,EAAK5B,KAAKnQ,GAAOq1B,YAAY,SACrCc,EAAqC,WAAzB52B,EAASnF,KAAK87B,GAC1BE,EAASZ,EAAUS,MACrBE,KAAyB,YAAqB,IAAXC,GAAwB56B,EAAM0M,OAAS,aACrE,MAAD,CAAKtN,MAAM,mBAAmBw5B,gBAAe70B,EAASO,SAASo2B,MACpEL,GAAD,CAAYvuB,KAAAA,EAAYyK,KAAMmkB,EAAOG,QAAM,MAC1C,SAAD,CAAQz7B,MAAM,2BAA2BQ,aAAY,GAAGizB,GAAO/mB,EAAM,cAAc+mB,GAAO/mB,EAAM,aAAc,UAAWnM,QAASm6B,EAAOW,IAAO56B,GAAQmG,iBACvJ,QAAD,KAAQ4zB,GAAW9tB,EAAM4uB,EAAO,GAAGl2B,QAClCs2B,GAAD,CAAWjyB,IAAK4xB,EAAKlkB,KAAMmkB,EAAO16B,MAAOw6B,EAAQvuB,OAAQlI,cA0BnDg3B,GAAD72B,KAAgB2E,IAAK4xB,EAAKlkB,KAAMmkB,EAAOzuB,OAAQlI,EAAU/D,MAAOw6B,GAAY,CAAC1uB,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQskB,QAX7E,CAC7B,CACC37B,KAAM,YACNC,MAAO,YACP27B,SAAU,WACH9xB,EAAI,IAAIoN,EAAK9I,SACjBytB,OAAO12B,EAAO,EAAG,CAAE3F,GAAI07B,KAAS3f,KAAM1K,GAAUsqB,OAC7Ch3B,MAAMmK,IAAI4I,EAAMpN,QAIjB,CAA8GvG,IAAKsB,OAAItB,GAAJ,CAAS4B,OAAkB,MAAI,EAAI,QAAgBxE,EAAM0M,OAAS,EAAI,EAAI,OAClMiuB,KAAc,SAAD,CAAQv7B,MAAM,2BAA2BQ,aAAY,GAAGizB,GAAO/mB,EAAM,gBAAgB+mB,GAAO/mB,EAAM,eAAgB,UAAWnM,QAASo6B,EAASU,IAAO56B,GAAQkG,gBAC3K,SAAD,CAAQ3G,MAAM,2BAA2BQ,aAAYizB,GAAO/mB,EAAM,UAAWnM,QAxB7D,IAAM+6B,EAAM/sB,SAAI,IAwBiE9N,GAAQmI,UACxGhI,EAAM0M,OAAS,KAAM,MAAD,CAAKtN,MAAM,eAC9B,SAAD,CAAQA,MAAM,yBAAyBQ,aAAYizB,GAAO/mB,EAAM,WAAYnM,QAzB7D,WACVwJ,EAAI,IAAIoN,EAAK9I,QAClBtE,EAAE3E,EAAQ,GAAI2E,EAAE3E,IAAU,CAAC2E,EAAE3E,GAAQ2E,EAAE3E,EAAQ,MAC3ChB,MAAMmK,IAAI4I,EAAMpN,IAsB2EgyB,SAAoB,IAAV32B,GAAc3E,GAAQoG,cAC9H,SAAD,CAAQ7G,MAAM,yBAAyBQ,aAAYizB,GAAO/mB,EAAM,aAAcnM,QArB7D,WACZwJ,EAAI,IAAIoN,EAAK9I,QAClBtE,EAAE3E,EAAQ,GAAI2E,EAAE3E,IAAU,CAAC2E,EAAE3E,GAAQ2E,EAAE3E,EAAQ,MAC3ChB,MAAMmK,IAAI4I,EAAMpN,IAkB+EgyB,SAAU32B,IAAUxE,EAAM0M,OAAS,GAAI7M,GAAQkG,mBAInJ/F,GAASA,EAAM0M,OAAS,GAAK1M,EAAM0M,QAAUwtB,KAAc,MAAD,CAAK96B,MAAM,sBACrE,SAAD,CAAQA,MAAM,wBAAwBQ,aAAYizB,GAAO/mB,EAAM,cAAenM,QA/D5D,KACdoN,MAAMsD,QAAQrQ,OAAgB,UAC7B4a,EAAOO,YAAUkc,UAAUtzB,EAASqI,aACrC5I,MAAMmK,IAAI4I,EAAM,IAAIvW,EAAO,CAAE4a,KAAAA,EAAM/b,GAAI07B,UA4D0D16B,GAAQyH,iBAMhH3D,KAAII,SAAEA,OAAU6J,EAAMjC,UAAU4K,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,uBAC7Dk3B,OAAEA,WAAQC,YAAUC,GAAcC,KAElCmB,EAAU,IAAIxE,YAAUwB,GAAW,IAAI1qB,OAAK,CAAC+B,GAAW8G,EAAK/J,eAK7D6nB,EAA8C,qBAAjC,WAAOC,qBAAYC,iBAAkC7d,WAAS8d,eAAaje,EAAMgI,EAAO+V,WAAWnpB,OAAOtM,IAAI4O,OAAS,KACpI4tB,oBAAyB5kB,YAC5B6hB,aAAW,KAAO,CAAEgD,KAAM9qB,OAAO5C,KAAK,WAAW6I,cAAc,MAC/D7I,KACCymB,GAA8B,eAAhB9d,EAAKglB,OAAyB,CAC1B,iBAAVv7B,MAA4B,UACjCyW,EAAajG,OAAOpB,QAAQ,WAAWqH,cAAc,IACzDvM,KAAI,EAAErB,EAAK2N,KAAY,CAAC3N,EAAKyvB,aAAW,KAAO,CAAEgD,KAAM9kB,qBAClDpH,QAAQ,WAAWqH,cAAc,IAAI5I,SAAQ,EAAEhF,EAAK2N,MAChC,iBAAfxW,EAAM6I,KACXrF,MAAMg4B,OAAOC,IAAIllB,EAAK5B,KAAK9L,GAAM,yBAC3B2N,EAAOe,SAASvX,EAAM6I,OAC5BrF,MAAMg4B,OAAOC,IAAIllB,EAAK5B,KAAK9L,GAAM,4BAA6B7I,EAAM6I,OAGpE6yB,aAAWlrB,OAAOmrB,YAAYllB,IAAa0d,KAAKrjB,KAAMyF,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,SAkC3F,CAAC,cA/BNy4B,EAAWlH,KAAKrjB,KAAMsqB,EAAS,WAAQ3tB,SAAS,GAAI3B,EAAM9G,EAAS0R,EAAQ9T,GAAK,KAChF,SAAD,CAAQxD,MAAM,wBAAwBQ,aAAYizB,GAAO/mB,EAAM,OAAQnM,QAvB1D,WACPkJ,EAAMuyB,EAAQ3tB,QACfjK,MAAMmK,IAAI4I,EAAK5B,KAAK9L,GAAMsS,YAAUkc,UAAUtzB,EAASqI,cAqB4BvM,GAAQyH,uBAG9E,iBAAVtH,GAAsBwQ,OAAOpB,QAAQpP,GAAOkK,KAAI,EAAErB,EAAK2xB,wBAExDE,EAAQnkB,EAAK+jB,UAAUzxB,GACvB8xB,EAAqC,WAAzB52B,EAASnF,KAAK87B,GAC1BE,EAASZ,EAAUnxB,MACrB8xB,KAAyB,YAAqB,IAAXC,GAAwB56B,EAAM0M,OAAS,aACrE,MAAD,CAAKtN,MAAM,mBAAmBw5B,gBAAe70B,EAASO,SAASo2B,MACpEL,GAAD,CAAYvuB,KAAAA,EAAYyK,KAAMmkB,EAAOG,QAAM,MAC1C,SAAD,CAAQz7B,MAAM,2BAA2BQ,aAAY,GAAGizB,GAAO/mB,EAAM,cAAc+mB,GAAO/mB,EAAM,aAAc,UAAWnM,QAASm6B,EAAOjxB,IAAOhJ,GAAQmG,iBACvJ,QAAD,KAAQ6C,KACPiyB,GAAD,CAAWjyB,IAAAA,EAAU0N,KAAMmkB,EAAO16B,MAAOw6B,EAAQvuB,OAAQlI,WAGrD63B,EAAUvH,EACbiE,aAAW,KAAO,CAAEgD,KAAM,SAAA,WAAW7kB,qBAAa5N,MAAQ,KAC1D9E,GACC,0BAAY0S,qBAAa5N,KAA0B,iBAAX2xB,KACvC,WAAW/jB,qBAAa5N,GAAK0O,SAASijB,OACrCh3B,MAAMg4B,OAAOC,IAAIf,EAAO,4BAA6BF,YAGnDO,GAAD72B,KAAgB2E,IAAAA,EAAUoD,OAAQ2vB,EAASrlB,KAAMmkB,EAAO16B,MAAOw6B,GAAY,CAAC1uB,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQ9T,IAAAA,IAAnG,CAAyGtD,MAAOuJ,IACrH8xB,KAAc,SAAD,CAAQv7B,MAAM,2BAA2BQ,aAAY,GAAGizB,GAAO/mB,EAAM,gBAAgB+mB,GAAO/mB,EAAM,eAAgB,UAAWnM,QAASo6B,EAASlxB,IAAOhJ,GAAQkG,gBAC3K,SAAD,CAAQ3G,MAAM,2BAA2BQ,aAAYizB,GAAO/mB,EAAM,UAAWnM,QAH7D,IAAM+6B,EAAM/sB,SAAI,IAGiE9N,GAAQmI,iBAO7G6zB,QAAO1wB,EAAQoL,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,IAC3C,CAAC,OAAOk5B,GAADhzB,KAAkB5E,OAAIiH,GAAJ,CAAYoL,KAAAA,EAAMvW,MAAAA,EAAO8L,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQ9T,IAAAA,MAAU,MAG3Fe,QAAOiX,KAAEA,EAAMjP,yBAAQ8oB,oBAAiBsH,GAAqBxlB,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,eAC1Fk3B,OAAEA,WAAQC,YAAUC,GAAcC,QAEV,GAA1B1jB,EAAK8iB,WAAW3sB,QAiTtB,SAAqBysB,EAA6Bn5B,eAC9B,YAAZm5B,GACyC,eAA5C,0BAAOv6B,eAAMwM,QAAQ,cAAe,MACpCiH,SAASrS,WAAO2L,QApTgBqwB,CAAYzd,EAAO4a,QAASn5B,GAAQ,OAChEi8B,QAAEA,SAASC,GAsTpB,SAAiCC,EAA8B5lB,EAAiBvW,SACzEo8B,EAAoB,GACpBnV,EAAUoV,GAAwBr8B,EAAOo8B,GACzCF,EAAS,CACdt9B,KAAMu9B,EAAev9B,KACrB+M,OAAQ+vB,aAAW,CAClBU,WAAYE,WAASppB,IACrB+T,QAAS9T,IACP,CAAEgmB,QAAS,uBAETltB,EAASyvB,aAAWQ,EAAQ,CAAE/C,QAAS,YACvCoD,EAAc,IAAI7uB,OAAK,CAAC,SAAU,YAClC8uB,EAAiB,IAAI9uB,OAAK,CAAC,SAAU,eACrClK,EAAQ+S,EAAK6iB,WACb6C,EAAwB,IAAIQ,GAAaxwB,UAC1CywB,EAAK5nB,WAAWynB,UACZ,IAAI7uB,OAAK,IAAI,IAAIX,MAAMqvB,EAAW1vB,OAAS,IAAIkd,SAAQ,IAAM,CAAC,SAAU,gBAAgB8S,EAAKC,cAC1FD,EAAK5nB,WAAW0nB,GAAiB,IACd,IAAzBE,EAAKC,SAASjwB,cACV,IAAIgB,OAAK,UAEXlJ,EAAQk4B,EAAKC,SAAS,MACP,iBAAVn4B,SACH,IAAIkJ,OAAK,IAAI,IAAIX,MAAMvI,IAAQolB,SAAQ,IAAM,CAAC,SAAU,aAAa,SAAU,eAAgB8S,EAAKC,SAASpxB,MAAM,YAGrHmxB,YAEHA,EAAKE,OAAOJ,GAAiB,OAC1BK,EAAuB,aACLr5B,EAAMuI,KAAM8wB,GAC7BA,SAEDr5B,EAAMiK,IAAIwuB,EAAQ/xB,IAAIwyB,OAC3B,CAACA,EAAMr8B,EAAOu3B,QACZ8E,EAAK5nB,WAAWynB,GAAc,OAC3BM,EAAuB,MACLr5B,EAAMuI,KAAM8wB,SAC9B7tB,EAAS,IAAItB,OAAK,IAAI,IAAIX,MAAM8vB,EAAcnwB,OAAS,IAAIkd,SAAQ,IAAM,CAAC,SAAU,gBAAgB8S,EAAKC,kBACxGn5B,EAAMmK,IAAIqB,EAAS3O,EAAOu3B,MACvB8E,EAAK5nB,WAAW0nB,GAAiB,OACrCh4B,EAAQk4B,EAAKC,SAAS,MACC,IAAzBD,EAAKC,SAASjwB,OAAc,OACzBowB,EAAUb,EAAQxuB,IAAI8uB,UACrB/4B,EAAMmK,IAAI,IAAID,OAAQqvB,GAAwBD,EAASz8B,GAAQu3B,MAC3C,iBAAVpzB,EAAoB,IACR,IAAzBk4B,EAAKC,SAASjwB,aAA0B,IAAVrM,EAAqB,OAChDy8B,EAAUb,EAAQxuB,IAAI8uB,GACtBM,EAAuB,MACLr5B,EAAMuI,KAAM8wB,KACtB3B,OAAO12B,EAAO,SACtBm1B,EAAWoD,GAAwBD,EAASD,UAC3Cr5B,EAAMmK,IAAI,IAAID,OAAQisB,EAAU/B,GACjC,OACA5oB,EAAU,IAAItB,OAAK,IAAI,IAAIX,MAAMvI,IAAQolB,SAAQ,IAAM,CAAC,SAAU,aAAa,SAAU,eAAgB8S,EAAKC,SAASpxB,MAAM,YAC5H/H,EAAMmK,IAAIqB,EAAS3O,EAAOu3B,OAI9BjqB,IAAI+uB,EAAMr8B,EAAOu3B,eAEhB7rB,KAAO,CACdnN,KAAM4E,EAAMuI,KAAKnN,KACjB+M,OAAQ,CACPywB,WAAAA,EACAnV,QAAAA,MAGMuU,OAASh4B,EAAMg4B,OAChB,CAAEU,OAAAA,EAAQD,QAAAA,GA3Xae,CAAwBvI,EAAgBle,GAAOA,EAAMvW,KACzEi8B,EAAQlwB,OACE,IAAMmwB,IACJ,CAACQ,EAAM7zB,IAAQ,IAAI+tB,YAAUqF,EAAS,IAAIvuB,OAAKgvB,EAAKrD,WAAY,CAAC,aAAa1kB,KAAK9L,OAGpG2vB,EAA6B,KAC7BC,EAA6B,QAC7B7d,EAAKqiB,mBACM,IAAVj9B,EAAqB,OAClBk9B,EAAW,IAAM3mB,EAAK5I,IAAIwN,YAAUkc,UAAUzc,EAAKxO,gBAC/C,SAAD,CAAQhN,MAAM,oCAAoCQ,aAAYizB,GAAO/mB,EAAM,UAAWnM,QAASu9B,GAAWr9B,GAAQyH,iBACrH,OACA61B,EAAa,IAAM5mB,EAAK5I,SAAI,OACxB,SAAD,CAAQvO,MAAM,kCAAkCQ,aAAYizB,GAAO/mB,EAAM,UAAWnM,QAASw9B,GAAat9B,GAAQmI,gBAGvHmxB,EAAU5iB,EAAK1T,aAAaoK,KAAK,QACnCkrB,GAAgB5gB,SAAS4hB,GAAU,OAChCiE,EAAUpD,EAAU,oBAExB,SAAD,CAAQ56B,MAAM,2BAA2BQ,aAAYizB,GAAO/mB,EAAMsxB,EAAU,WAAa,UAAWz9B,QAASy9B,EAAUrD,EAAS,IAAMD,EAAO,KAAMsD,EAAUv9B,GAAQkG,aAAelG,GAAQmG,iBAExLo3B,QACG,CAAC5E,EAAQC,EAAQ,YAIpB4E,EAA2B,iBAAVr9B,GAAgC,OAAVA,IAAkB,WAAKoM,oBAAWkxB,OAC5Ep5B,OAAKtB,GAAL,CAAU26B,WAAMv9B,WAAOpB,OAASgE,EAC7BJ,WACc,iBAAVxC,GAAgC,OAAVA,OAAyBi9B,iBAAwB,IAAVj9B,IACrEwQ,OAAOpB,QAAQqlB,EAAgBle,IAC7BvC,QAAO,EAAE0V,EAAG8T,KAAWA,EAAM1K,QAAQvc,KACrCrM,KAAI,EAAErB,EAAK20B,sBACL9C,EAAQqB,EAAkBxlB,EAAM1N,GAChC40B,EAAU/C,EAAM73B,aAAaoK,KAAK,QACpC6qB,GAAavgB,SAASkmB,UAAiB,WACpCC,EAASC,EAASC,GAASJ,EAAMrJ,KAAKrjB,KAAM4pB,EAAO16B,EAAM6I,GAAMiD,EAAM9G,EAAS0R,EAAQ2mB,QACxFK,GAAYC,gDAAqBn1B,gBAAOzE,mBAAU2I,UAAU,GAAK,UAAW,WAC3EmxB,EAAoC,WAAtBL,EAAM5+B,KAAK87B,IAAuB3C,GAAgBxgB,SAASkmB,GACzEK,EAAY9F,GAAazgB,SAASkmB,UACpCI,GAAeC,cACNtF,IAAQ6B,GAAD,CAAYvuB,KAAAA,EAAYyK,KAAMmkB,MAAUqD,GAAD,CAAWjyB,KAAAA,EAAYyK,KAAMmkB,IAAUgD,cACrFjF,EAAQkF,GACbE,EAAcD,EAAQ,QAEtB7C,GAADjyB,GAAgBD,IAAAA,EAAUoD,OAAQuxB,EAAOjnB,KAAMmkB,EAAO16B,MAAOA,EAAM6I,IAAU,CAACiD,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQ9T,IAAKy6B,eAI9G,CAAC7E,EAAQC,EAAQj2B,IAGzBw7B,QAAO7yB,EAAQoL,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ9T,IAC3C,CAAC,OAAOq7B,GAADn1B,KAAkB5E,OAAIiH,GAAJ,CAAYoL,KAAAA,EAAMvW,MAAAA,EAAO8L,KAAAA,EAAM9G,QAAAA,EAAS0R,OAAAA,EAAQ9T,IAAAA,MAAU,OAI5F,aAAmB2T,KAAEA,QAAMvW,yBACVuW,EAAK1T,aAAaoK,KAAK,UAEjC,kCACI,QAAD,KAAQ,SAAA,0BAAOmC,kBAAS1C,UAAU,EAAE,gBACvC,0CACA,mCACI,QAAD,KAAQ,SAAA,0BAAO1D,eAAMoC,QAAQ,cAAe,OAAO,0BAAOxM,eAAMwM,QAAQ,cAAe,eAErFoyB,KAAShtB,OAAOgG,aAAOxW,IAAS,OACrB,iBAAVw9B,WACF,QAAD,KAAQA,EAAMpyB,QAAQ,cAAe,YAGvC,KAGR,oBACQ8yB,EAAaC,GAAkB76B,EAAS,IAAIqL,MAC5CyvB,EAAWC,GAAgB/6B,OAA8B,SAwBzD,CAAEw2B,OAtBOjxB,GAAiBJ,IAC5BA,EAAI61B,WACQ,IAAI3vB,QACN,UAEW,IAAIA,IAAImL,EAAMnM,IAAI9E,GAAK,OAiBhCkxB,SAdClxB,GAAiBJ,IAC9BA,EAAI61B,WACQ,IAAI3vB,QACN,UAEW,IAAIA,IAAImL,EAAMnM,IAAI9E,GAAK,OAStBmxB,UALRnxB,8BACW8F,MACtB,WAAYlB,IAAI5E,MAAQu1B,KAMjC,aAAuB7nB,KAAEA,OAAMqE,QAAM5a,OAAO8L,UACrC6B,EAAOrN,MACPkD,MAAMmK,IAAI4I,EAAMqE,EAAKqiB,YAAcj9B,IAAUM,OAAS,EAAYA,sBAGtE,SAAD,CAAQlB,OAAiB,IAAVY,EAAkB,WAAa,GAAIL,QAAS,IAAMgO,GAAI,IAASklB,GAAO/mB,EAAM,YAC1F,SAAD,CAAQ1M,OAAiB,IAAVY,EAAiB,WAAa,GAAIL,QAAS,IAAMgO,GAAI,IAAQklB,GAAO/mB,EAAM,UAI3F,aAAsByK,KAAEA,EAAM5K,iBAAQ4yB,QAASv+B,OAAO8L,gBAC/C5L,EAAYuI,UACXpI,EAASoI,EAAInI,OAA4BN,MACzCw+B,EAASD,EAAUlzB,SAAShL,GAASo+B,WAAWp+B,KACjDmD,MAAMmK,IAAI4I,EAAMioB,sBAQpB,QAAD,CAAO5/B,KAAK,OAAOoB,YAAOA,IAAS,GAAIo3B,OAAQl3B,EAAUyI,cAAmC,UAAZF,EAAII,OAA0BJ,wBACrG8W,UAAU,QAAD,CAAO3gB,KAAK,QAAQoB,MAAO,+BAAcwM,SAAS,IAAIkyB,SAAS,EAAG,QAAQ,UAAWx+B,SAPvFuI,UACVpI,EAASoI,EAAInI,OAA4BN,MACzCw+B,EAASnzB,SAAShL,EAAMkL,MAAM,GAAI,MACnC/H,MAAMmK,IAAI4I,EAAMioB,MAKpB,CAAC,2BAA4B,wCAAyC,uBAAuBjnB,SAAShB,EAAK1T,aAAaoK,KAAK,SAAU,SAAD,CAAQtN,QAAS,IAAMozB,GAAQxc,EAAK/S,OAAQpE,MAAM,oBAAoBQ,aAAYizB,GAAO/mB,EAAM,sBAAuBjM,GAAQ+H,OAIvQ,aAAsB2O,KAAEA,YAAMooB,EAAWhzB,cAAQiP,QAAM5a,OAAO8L,UAAM9G,SAAS0R,gBACtExW,EAAYuI,MACb9H,wBACEg5B,EAAYlxB,EAAInI,OAA6BN,MAC/C25B,IAAa35B,KACZwD,MAAMmK,IAAI4I,EAA0B,IAApBojB,EAASjtB,YAAe,EAAYitB,IAEpDnjB,EAASmoB,IACTxF,EAAU5iB,EAAK1T,aAAaoK,KAAK,KACjCpO,EAAM+/B,GAAOrgB,IAAiC,+BAAdgW,YAA0D,iBAAvBhW,EAAOpT,OAAO0zB,UAAyC,EAArBtgB,EAAOpT,OAAO0zB,QAErH5G,GAAU1gB,SAAS4hB,YACd,WAAD,CAAUn5B,YAAOA,IAAS,GAAIo3B,OAAQl3B,OAClC0+B,GAAOrgB,KAAYA,EAAOugB,YAAejH,GAAiBtgB,SAAS4hB,GAAU,KACpFsE,EAAU,IAAI/vB,OAAK,WACnBkxB,GAAOrgB,IAAkC,iBAAhBA,EAAO+c,OACzBmC,EAAQ5D,YAAYtb,EAAO+c,MAC3Bz8B,IACA4+B,EAAQ5D,YAAYh7B,GACpB+/B,GAAOrgB,OACPhI,KAEH,SAAD,CAAQvW,YAAOA,IAAS,GAAIE,SAAAA,GACjC0a,EAAKqiB,cAAe,SAAD,CAAQj9B,MAAM,IAAI6yB,GAAO/mB,EAAM,UAClD0K,EAAOtM,UAAU,SAAD,CAAQlK,MAAOmJ,GAC9BywB,GAAW9tB,EAAM2xB,EAAQ5D,YAAY1wB,EAAEiC,QAAQ,cAAe,aAGtDwzB,GAAOrgB,IAAiC,sCAAdgW,WAM/B,OACAwK,EAAaxE,KACbyE,EAAMngC,EA5YQ,CAACA,GACf8M,EAAO8C,WAAW5C,SAAU6C,EAAE7P,KAAOA,EAAGuM,QAAQ,MAAO,MA2Y5C6zB,CAAcpgC,QAAM,iBAC7BqgC,IAAIrgC,EAAImgC,cAEd,QAAD,CAAOh/B,YAAOA,IAAS,GAAIo3B,OAAQl3B,EAAUyI,cAAmC,UAAZF,EAAII,OAA0BJ,IACjG02B,KAAM3oB,EAAO9J,OAAS,EAAIqyB,EAAa,KACvCvoB,EAAO9J,OAAS,KAAM,WAAD,CAAU7N,GAAIkgC,GAClCvoB,EAAOtM,UAAU,SAAD,CAAQlK,MAAOmJ,OAEhC61B,GAAOxoB,EAAOe,SAASvX,IAAUA,EAAM8U,WAAW,iBACjD,IAAD,CAAGxM,KAAM,IAAI02B,EAAI9wB,gBAAgBlJ,YAAkBhF,EAAMoL,QAAQ,cAAe,MAAOhM,MAAM,oBAAoBQ,aAAYizB,GAAO/mB,EAAM,qBAAsBjM,GAAQoH,gBAjBpG,OAChEotB,QAAa3d,WAAS8d,eAAaje,EAAMgI,EAAOpT,OAAOtM,IAAI4O,OAC3D2xB,EAAS5uB,OAAO5C,KAAK,0BAAY6I,cAAc,aAC7C,SAAD,CAAQzW,YAAOA,IAAS,GAAIE,SAAAA,GACjCk/B,EAAOl1B,UAAU,SAAD,KAASf,OA6E7B,MAAM4xB,GAAiBsE,GAvCvB,UAAkB//B,MAAEA,SAAO2M,OAAQsK,QAAMvW,OAAO8L,UAAM9G,SAAS0R,MAAQ9T,UAAKo4B,WAASj3B,gBAC9EnF,EAAOqN,EAAOrN,KAAK2X,GACnBjS,EAAW2H,EAAO3H,SAASiS,GAC3B4iB,EAAU5iB,EAAK1T,aAAaoK,KAAK,MAEhC1N,EAAQ8D,GAAaW,KAMtBq5B,EAA8Bn5B,OAAKtB,GAAL,CAAU4Z,kBAAYA,SAAS,GAAK,WACjE6gB,EAAO74B,YACPg0B,EAAQC,EAAQj2B,GAAQyJ,EAAOkoB,KAAKuE,GAAYniB,EAAMvW,EAAO8L,EAAM9G,EAAS0R,EAAQ2mB,YACnF,MAAD,CAAKj+B,MAAO,QAAQR,SAAag6B,gBAAet0B,KACrD,MAAD,CAAKlF,MAAM,cAAckgC,cATH72B,MAClB82B,yBASFlF,GAAD,CAAYvuB,KAAAA,EAAYyK,KAAAA,MACvBwnB,GAAD,CAAWjyB,KAAAA,EAAYyK,KAAAA,IACtBxS,EACAy0B,IACA,QAAD,WACEl5B,IAASs6B,GAAW9tB,EAAMyK,EAAM,GAAGA,EAAKglB,UACxCh8B,KAAW,MAAD,CAAKH,MAAM,mBACpB47B,WAAS9wB,wBAAU,MAAD,CAAKrB,IAAK22B,EAAElgC,MAAOF,MAAM,eAC1C6E,EAAD,CAAK5E,KAAMmgC,EAAEngC,KAAMI,QAASozB,GAAO/mB,EAAM0zB,EAAElgC,OAAQI,WAAW,KAAKC,QAAS,IAAM6/B,EAAEvE,eACnF,OAAD,KAAOuE,WAAEC,eAAe5M,GAAO/mB,EAAM0zB,EAAElgC,cAEvC,MAAD,CAAKF,MAAM,eACT6E,EAAD,CAAK5E,KAAK,SAASI,QAASozB,GAAO/mB,EAAM,gBAAiBpM,WAAW,KAAKC,QAAS,IAAM+/B,UAAU5I,UAAUC,UAAUoC,OACtH,OAAD,KAAOA,MAITV,GAEDj2B,KAAS,MAAD,CAAKpD,MAAM,aAAaoD,OAIG,CAACm9B,EAAMC,IACrCD,EAAK1zB,SAAW2zB,EAAK3zB,QACxB0zB,EAAK7zB,OAAS8zB,EAAK9zB,MACnB6zB,EAAKppB,KAAKqmB,OAAOgD,EAAKrpB,OACtBjG,GAAUqvB,EAAK/8B,IAAKg9B,EAAKh9B,MACzB0N,GAAUqvB,EAAK3/B,MAAO4/B,EAAK5/B,SAGhC,YAAgBA,6BACUs7B,MAG1B,YAAoB/rB,OACLxB,EAAVqG,EAAO,MACNrG,EAAI,EAAGA,EAAIwB,EAAI7C,OAAQqB,UAEV,GAAKqG,EADhB7E,EAAItB,WAAWF,MAEb,SAEFqG,EAGR,YAAoBtI,EAAcyK,KAAepL,SAC1CvI,EAAM2T,EAAK1T,qBACRkL,EAAI,EAAGA,EAAInL,EAAI8J,OAAQqB,GAAK,EAAG,OACjClF,EAAMjG,EAAI2I,MAAMwC,GAAGd,KAAK,KACxBgR,EAAS4U,GAAO/mB,EAAMjD,KAAQsC,MAChCtC,IAAQoV,SACJA,SAGFrb,EAAIA,EAAI8J,OAAS,GAGzB,aAAoBZ,KAAEA,OAAMyK,SAAMskB,UAC7BtkB,EAAK/S,iBAAiBi5B,OAClBlmB,EAAK/S,MAAM0G,IAAIqM,GAAMspB,UAAUtpB,EAAK/S,cAEtCpD,EAAIy6B,EACPtkB,EAAK/S,MAAMg4B,OAAOsE,SAAS9rB,WAAY+rB,EAAExpB,KAAKzB,WAAWyB,KACzDA,EAAK/S,MAAMg4B,OAAO/tB,IAAI8I,GAAM,MACd,IAAbnW,EAAEsM,cAAqB,WACrBszB,EAAUnN,GAAO/mB,EAAM1L,EAAE,GAAGgI,SAAW,WAAE,GAAG+C,UAAU,WACrD80B,GAAU,aAAc,eAAgBD,GAGhD,aAAmBl0B,KAAEA,OAAMyK,UACpB1N,EAAM0N,EAAKsjB,YAAY,QAAQh3B,aAAaoK,KAAK,KACjD+yB,EAAUnN,GAAO/mB,EAAMjD,UACzBm3B,IAAYn3B,EAAY,KACrBo3B,GAAU,YAAa,OAAQD,GAGvC,MAAMC,GAAY,CAACrhC,EAAcS,EAA4B6gC,WACrD3gC,EAAQ8D,GAAaW,cAEpB,MAAD,CAAK5E,MAAO,aAAaR,IAAOW,EAAS,QAAU,KAAMI,QAAS0D,GACvExD,GAAQR,KACR,OAAD,CAAMD,MAAM,cAAc8gC,KAkF5B,YAAiClgC,EAAYo8B,iBACI,eAA5C,0BAAOx9B,eAAMwM,QAAQ,cAAe,KAChCpL,EAEHqS,SAASrS,WAAO2L,WAGVgJ,KAAK,CAAE9V,GAAIu9B,EAAW1vB,OAAQkO,KAAM5a,EAAM2L,OAAOsc,YACrDoU,GAAwB,WAAM1wB,OAAOsb,WAAW,GAAImV,IAHnDp8B,EAMT,YAAiCinB,EAAcmV,UACpB,IAAtBA,EAAW1vB,OAAqBua,EAC7B,CACNroB,KAAM,sBACN+M,OAAQ,CACPsc,UAAWmU,EAAW9hB,QAAQM,KAC9BqM,QAAS8V,GAAwB9V,EAASmV,kBC3nBxBtwB,KAAEA,UAAM9G,QAASxB,cAAO8P,UAAagjB,QACpD9yB,IAAU8P,GAAwB,SAATxH,yBAEvB1D,GAAS+3B,SACP,6BAA6B//B,EAAE6P,mBAC/B7H,MAAMhI,SAEXgI,0BAEKg4B,GAAY98B,EAAS,aACrBE,GAAO,WACGsW,EAAQ,SAGnB,MAAD,CAAK1a,MAAM,UAChBihC,GAADv3B,KAAc,CAACtF,MAAAA,EAAOsI,KAAAA,EAAM9G,QAAAA,EAASsO,YAAAA,MCpBvC,MAAMgtB,GAA+C,CACpDC,OAAQ,iBACRC,KAAM,OACNC,MAAO,oBAYe30B,KAAEA,QAAM40B,UAAO17B,QAASF,cAAO67B,WAAa/7B,iBAAUg8B,UACtEpN,EAAMX,GAAOY,KAAK,KAAM3nB,GACxBkzB,EAAM6B,GAAa5xB,cAEjB,SAAD,OACL,MAAD,CAAK7P,MAAM,WACT0hC,EAAD,CAAM1hC,MAAM,YAAYkJ,KAAK,IAAI1I,aAAY4zB,EAAI,SAAUuN,GAAMC,QAChE,KAAD,KAAKN,GACJ1B,KAAQpM,GAAD,CAASvzB,KAAK,eAAeI,QAAS+zB,EAAI,qBAChD7nB,EAAO8C,WACNuF,WAAYtF,EAAEpK,6BAAkBA,WAAY2R,GAAajR,EAAS0J,EAAE+G,cACpEvL,UACCjG,EAAD,CAAK3E,MAAOk0B,EAAI9kB,EAAE7P,IAAKU,OAAQmP,EAAE7P,KAAOmgC,EAAIngC,GAAIc,QAAS,IAAMshC,EAAM3yB,GAASI,EAAER,cAInF,MAAD,OACE,KAAD,OACE,KAAD,OACE0kB,GAAD,CAASvzB,KAAK,QAAQI,QAAS+zB,EAAI,aACjC7nB,EAAOC,UAAU1B,KAAI,EAAG/D,KAAAA,EAAM6C,KAAAA,OAC7B/E,EAAD,CAAK3E,MAAO0J,EAAMzJ,OAAQ4G,IAASvB,EAClCjF,QAAS,IAAMihC,EAAez6B,WAIjC,KAAD,OACEysB,GAAD,CAASvzB,KAAMihC,GAAOx7B,GAAQrF,QAAS+zB,EAAI,UACzChjB,OAAOpB,QAAQkxB,IAAQp2B,KAAI,EAAEg3B,EAAI7hC,OAChC4E,EAAD,CAAK5E,KAAAA,EAAYC,MAAOk0B,EAAI,SAAS0N,KAAO3hC,OAAQ2hC,IAAOp8B,EAC1DnF,QAAS,IAAMghC,EAAYO,WAI9B,KAAD,CAAI9hC,MAAM,YACR,IAAD,CAAGkJ,KAAK,6CAA6ChI,OAAO,SAASkK,IAAI,aAAapL,MAAM,oBAAoBQ,aAAY4zB,EAAI,WAC9H3zB,GAAQqH,2BC1Dd85B,OAAO,MAAD,CAAKj+B,MAAM,KAAKC,OAAO,KAAKwC,QAAQ,YAAYuhB,KAAK,OAAOxhB,MAAM,gCAA8B,OAAD,CAAMxC,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,cAAY,OAAD,CAAMplB,EAAE,IAAIoB,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,cAAY,OAAD,CAAMqa,EAAE,KAAKr+B,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,cAAY,OAAD,CAAMplB,EAAE,KAAKy/B,EAAE,KAAKr+B,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,cAAY,OAAD,CAAMplB,EAAE,KAAKy/B,EAAE,KAAKr+B,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,cAAY,OAAD,CAAMplB,EAAE,KAAKy/B,EAAE,KAAKr+B,MAAM,KAAKC,OAAO,IAAIm+B,GAAG,IAAIpa,KAAK,aACncsa,SAAS,MAAD,CAAKt+B,MAAM,KAAKC,OAAO,KAAKwC,QAAQ,YAAYD,MAAM,gCAA8B,OAAD,CAAMG,EAAE,6HAA6HqhB,KAAK,cAAY,OAAD,CAAMrhB,EAAE,+HAA+HqhB,KAAK,cAAY,OAAD,CAAMrhB,EAAE,kIAAkIqhB,KAAK,cAAY,OAAD,CAAMrhB,EAAE,6HAA6HqhB,KAAK,cAAY,OAAD,CAAMrhB,EAAE,sIAAsIqhB,KAAK,cAAY,OAAD,CAAMrhB,EAAE,sIAAsIqhB,KAAK,aACv+Bua,SAAS,MAAD,CAAKv+B,MAAM,KAAKC,OAAO,KAAKwC,QAAQ,YAAYD,MAAM,gCAA8B,SAAD,CAAQ6mB,GAAG,KAAKmV,GAAG,KAAKptB,EAAE,KAAK4S,KAAK,cAAY,OAAD,CAAMthB,YAAU,UAAU+7B,YAAU,UAAU97B,EAAE,utCAAutCqhB,KAAK,2BCmB33Cjb,KAAEA,SAAMmN,SAAQqoB,QAAQG,QAAOC,QAAOC,SAAOC,SAAQC,WAAQC,cAAUC,UAC5FvO,EAAMX,GAAOY,KAAK,KAAM3nB,IACvBk2B,EAASC,GAAc3+B,GAAS,IAChC4+B,EAASC,GAAc7+B,GAAS,IAChC8+B,EAASC,GAAc/+B,GAAS,GACjCg/B,EAAQ9hC,EAAe,IACvB+hC,EAAU,uBAAuBd,qBAAyBG,KAAUD,OAEhE,qBACHa,EAAalB,EAAOG,KACuB,wCAAzBH,iBAAQ50B,UAAU,MACpCjM,QAAQoN,YAAa40B,EAAEC,WACvBjiC,mCAAuB6gC,UAAU,IAAIp3B,eACpCy4B,EAA6B,iBAAVnxB,EAAqBA,EAAQA,EAAMxI,KAEtDkF,EAAMiL,GADCF,EAAO,oBAAoB0pB,SAAiBvuB,MAEnDwuB,EAAO,IAAIC,OAAK,CACrBC,IAAK,CAAC50B,GACNqnB,OAAQ,CAAC,OACTqM,OAAAA,EACAmB,KAAMpB,MAEFqB,GAAG,OAAO,QACH,YAENC,EAAY,KACbjB,GAAWM,EAAM7hC,QAAQyiC,UAAyB,WAAdT,EAAE3oB,cAC9B,UAGQ,WAAjB8oB,EAAK9oB,oBACG,IAAMmpB,QAEZD,GAAG,QAAQ,YAIVJ,QAEG,KACT,CAACnB,EAAOH,OAED,OACH7gC,QAAQoN,YAAa40B,EAAEM,KAAKpB,OAChC,CAACA,OAEM,OACHlhC,QAAQoN,YAAa40B,EAAEb,OAAOA,OAClC,CAACA,UAEEx6B,EAAO,QACR46B,GAAWI,mBAETQ,EAAOz1B,KAAKC,MAAMD,KAAKE,SAAWi1B,EAAM7hC,QAAQiM,UAChDjM,QAAQmiC,GAAMx7B,UACT,IAENs7B,EAAO,OACNjiC,QAAQoN,YAAa40B,EAAEC,aAEpB,KACLX,eAAwB,IAAM36B,KAAgB,GAARs6B,KACxC,CAACK,OAEM,IACF,IAAMW,KACX,UAEIS,EAAYC,GAAiB9/B,GAAS,GACvC+/B,EAAc7iC,OAA2B,YAUvC,MAAD,CAAKpB,MAAO,eAAe4iC,EAAU,WAAaE,EAAU,WAAa,KAAKE,EAAU,WAAa,QAC1Gn+B,EAAD,CAAK7E,MAAM,OAAOC,KAAM+iC,EAAU,QAAUJ,EAAU,OAAS,OAAQ1iC,MAAOk0B,EAAI,eAAgB7zB,QAASyH,EAAM3H,QAAmB+zB,EAAV4O,EAAc,uBAA0BJ,EAAc,uBAA8B,qBAAsBtiC,WAAW,SAC9OuJ,GAAD,CAAW7J,MAAM,sBAAsB+/B,KAAK,aAAa7H,YAAY,EACpEt3B,MAAOyhC,EAAOvhC,YAAmB2hC,EAAO,CAAEJ,cAC1C,QAAD,CAAOriC,MAAM,eAAeo0B,EAAI,gBAAgB,QAC/CpqB,GAAD,CAAahK,MAAM,sBAAsB0Q,IAAK,EAC7C9P,MAAO0hC,EAAOxhC,YAAmB2hC,EAAO,CAAEH,cAC1C,QAAD,CAAOtiC,MAAM,eAAeo0B,EAAI,gBAAgB,QAC/ClqB,GAAD,CAAYlK,MAAM,yBAAyB0Q,IAAK,GAAKD,IAAK,EAAGyzB,KAAM,IAClE1jC,aAAY+hC,EAAM4B,QAAQ,GAAI/L,MAAO,YAA+B,OAAd,OACtDx3B,MAAO2hC,EAAOzhC,YAAmB2hC,EAAO,CAAEF,cAC1C,QAAD,CAAOviC,MAAM,gBAAgBo0B,EAAI,iBAAiB,QACjDlqB,GAAD,CAAYlK,MAAM,0BAA0B0Q,IAAK,EAAGD,IAAK,EAAGyzB,KAAM,IACjE1jC,aAAYgiC,EAAO2B,QAAQ,GAAI/L,MAAO,QAAiB,IAAToK,KAC9C5hC,MAAO4hC,EAAQ1hC,YAAoB2hC,EAAO,CAAED,eAC5C39B,EAAD,CAAK7E,MAAO,QAAO+jC,EAAa,UAAY,IAAM9jC,KAAM8jC,EAAa,QAAU,WAAY7jC,MAAOk0B,EAAI,QAAS/zB,QAAsB+zB,EAAb2P,EAAiB,SAAgB,uBACxJxjC,QAzBW,eACFm3B,UAAUC,UAAUwL,MAChB,QACc,IAAxBc,EAAY5iC,sBAAoC4iC,EAAY5iC,WACpDA,QAAU6xB,YAAW,QAClB,KACZ,UAoBFruB,EAAD,CAAK7E,MAAM,SAASC,KAAK,WAAWI,QAAS+zB,EAAI,uBAChD7zB,QAAS,8BC7Ga+gC,MAAEA,OAAO8C,OAAMx8B,OAAM3H,WAAM0E,UAC7C6N,aACJ,MAAD,CAAKxS,MAAM,aACTC,GAAQ0hC,GAAM1hC,KACd,MAAD,OACE,KAAD,KAAKqhC,KACJ,IAAD,KAAI8C,KAGLz/B,KAAa,MAAD,CAAK3E,MAAM,aACtB2E,WAGIiD,IACH,IAAD,CAAG5H,MAAM,YAAYkJ,KAAMtB,GAAO4K,KACjC,MAAD,CAAKxS,MAAM,aAAawS,gBCdHtN,SAAEA,OAAUwH,cAAM23B,UACpCjQ,EAAMX,GAAOY,KAAK,KAAM3nB,YAClB0nB,EAAI,2BAA4BA,EAAIlvB,OACxC,OAAD,OACL,MAAD,CAAKlF,MAAM,YACTuM,EAAO8C,WAAWuF,WAAYtF,EAAEpK,WAAaA,IAAU4F,UACtDw5B,GAAD,CAAUhD,MAAOlN,EAAI9kB,EAAE7P,IAAKmI,KAAMsH,GAASI,EAAER,wBCJvBpC,KAAEA,cAAM23B,UAC3BjQ,EAAMX,GAAOY,KAAK,KAAM3nB,IACvB1D,EAAOu7B,GAAYrgC,EAAwB,QACtCkwB,EAAI,0BAEToQ,EAAYC,GAAiBvgC,EAA2B,OACrD,UAEPyH,SAAmB84B,EAAcC,KACjCC,mBAAqB37B,MAAMhI,KAAaA,QACxC,UAEImH,EAAQy8B,GAAa1gC,EAAS,KAC9BmO,EAAMwyB,GAAW3gC,EAAmB,IACrC4gC,EAAar8B,IACb4J,EAAK8F,SAAS1P,KAGV4J,EAAKuC,WAAYkK,IAAMrW,OAFvB,IAAI4J,EAAM5J,KAMds8B,EAAqBC,GAAQ,WAC5BC,EAAQ98B,EAAOqH,MAAM,KAAK1E,QAASo6B,EAAE3yB,OAAO4yB,gBAAevwB,WAAYswB,EAAE53B,OAAS,WACnE,IAAjB23B,EAAM33B,QAAgC,IAAhB+E,EAAK/E,OAAqBk3B,EAC7CA,EAAW5vB,gBACZvC,EAAKyxB,UAAanxB,EAAON,KAAK8F,SAAS1P,YACpC,QAEF+J,EAAUG,EAAON,KAAKxE,KAAK,KAAO,IAAM8E,EAAOH,QAAQ2yB,qBACtDF,EAAMnB,UACRoB,EAAExvB,WAAW,KACI,IAAbwvB,EAAE53B,SAAiBkF,EAAQ2F,SAAS+sB,EAAE/4B,MAAM,IAE7CqG,EAAQ2F,SAAS+sB,UAGxB,CAACV,EAAYr8B,EAAQkK,KAEjB+yB,EAAMC,GAAWnhC,GAAS,GAE3BohC,EAAmBN,GAAQ,IACzBD,EAAmBK,MAAK,CAAC90B,EAAGC,IAAM60B,EAAO70B,EAAEmC,MAAQpC,EAAEoC,MAAQpC,EAAEoC,MAAQnC,EAAEmC,SAC9E,CAACqyB,EAAoBK,aAEhB,OAAD,OACLG,EAAD,CAAI/lC,KAAK,OAAOC,GAAG,cAClBuJ,KAAUw8B,GAAD,CAAYx8B,MAAAA,EAAcC,UAAW,IAAMs7B,EAAS,UAC7D,MAAD,CAAKvkC,MAAM,wBACT,MAAD,CAAKA,MAAM,qBACT6J,GAAD,CAAW7J,MAAM,iCAAiC+/B,KAAK,aAAal/B,YAAauzB,EAAI,oBACpFxzB,MAAOuH,EAAQrH,SAAU8jC,MACzB//B,EAAD,CAAK5E,KAAMmlC,EAAO,YAAc,WAAYllC,MAAOklC,EAAO,eAAiB,eAAgB7kC,QAAS,IAAM8kC,GAASD,MAEnH/yB,EAAK/E,OAAS,KAAM,MAAD,CAAKtN,MAAM,kBAC7BqS,EAAKvH,UAAY26B,GAAD,CAAKvlC,MAAOuI,EAAKlI,QAAS,IAAMskC,EAAQxyB,EAAKuC,WAAYkK,IAAMrW,aAGjF,MAAD,CAAKzI,MAAM,aACTslC,EAAiBx6B,UAChB46B,GAAD,CAAQ/yB,OAAAA,EAAgBgzB,WAAYtzB,EAAMyyB,UAAAA,QAU9C,aAAgBnyB,OAAEA,aAAQgzB,YAAYb,aAC7B,MAAD,CAAK9kC,MAAM,qBAChB,MAAD,CAAKA,MAAM,uBACT4lC,GAADl8B,KAAiBiJ,EAAO/M,YACvBggC,GAADl8B,KAAiBiJ,EAAOX,WAExB,MAAD,CAAKhS,MAAM,kBACT2S,EAAON,KAAKvH,UAAY26B,GAAD,CAAKvlC,MAAOuI,EAAKlI,QAAS,IAAMukC,EAAUr8B,GAAMtI,OAAQwlC,EAAWxtB,SAAS1P,UAEpG,MAAD,CAAKzI,MAAM,oBAAoB6lC,wBAAyB,CAAEC,OAAQC,EAAOpzB,EAAOH,aAIlF,aAAqB/S,GAAEA,UAAIuT,WACP,OAAZA,IACH,OAAD,KAAOvT,KACN,IAAD,CAAGyJ,KAAM,2CAA2C8J,IAAW9R,OAAO,UAAUzB,GAQpF,aAAaS,MAAEA,SAAOC,UAAQI,UACvB4f,EAAkB,aAAVjgB,EAAuB,EAAImQ,GAAWnQ,GAAS,aACrD,MAAD,CAAKF,MAAO,gBAAgBG,EAAS,UAAY,KAAKI,EAAU,aAAe,KAAM63B,MAAO,WAAWjY,IAAS5f,QAAAA,GAC3G,aAAVL,GAAwBO,GAAQyF,MAChChG,gBC5FuBwM,KAAEA,cAAM23B,UAAaz+B,gBAASogC,gBACjD5R,EAAMX,GAAOY,KAAK,KAAM3nB,IACvB1D,EAAOu7B,GAAYrgC,EAAwB,OAC3C+hC,EAAeC,GAAcnF,OAChCkF,WACK,OAAD,OAAOT,GAAD,CAAYx8B,MAAO,iDAAiDi9B,EAAcp1B,UAAW5H,UAAWi9B,WAGhHtG,EAAM6B,GAAa5xB,SACpB+vB,WACI,OAAD,OAAO4F,GAAD,CAAYx8B,MAAO,0BAA0B6G,gBAGrDs2B,EAAkB55B,EAAO+H,SAC7BM,WAAYiC,GAAa9M,EAAEtK,GAAImgC,EAAIvpB,WAAYupB,EAAItpB,cACnDxL,QAASf,EAAEtK,OAED20B,EAAI,kBAAmBA,EAAIwL,EAAIngC,KAAM0mC,GAE5CtvB,GAAajR,EAASg6B,EAAIvpB,eACrB,6CAA6CupB,EAAIvpB,oBAIrD+vB,EADer2B,GAAgBF,KACFxB,IAAI,WAEhCjK,EAAOiiC,GAAYniC,EAA2B,OAC9CgQ,EAAaoyB,GAAkBpiC,EAAoC,SAChE,OACA,QACA,qBzBkE0B0B,gBACVgwB,GAAWhwB,IAClBsO,ayBnEHtO,GACb+F,SAAU26B,EAAe/1B,oBzBoBE3K,EAAoBnG,aAC7C2T,GAAO3T,IAAO2T,GAAO3T,GAAImG,UAAYA,EAAS,OAC5CsS,QAAoB0d,GAAWhwB,MAEnB2gC,YAAUruB,EAAYpL,QAAS,2BACjC05B,aAAW,CAC1B,CACChnC,KAAM,SACNgc,KAAM0d,aAAWhhB,EAAYlE,YAAa,CAAEmhB,UAAW,WAAYppB,OAAQ,CAAE0zB,KAAM,mCAEpF,CACCjgC,KAAM,SACNgc,KAAM+qB,YAAUruB,EAAYpL,QAAS,wBAEpC,CAAEqtB,cAAe,kBAEdsM,EAAa,WAAOp3B,WAAW5C,SAAU6C,EAAE7P,KAAOA,cAAKoN,WACxD45B,QACE,IAAI71B,MAAM,qBAAqBnR,eAG/BoN,EAASqL,EAAYpL,QAAQuB,IAAIo4B,GACjCriC,EAAQ,IAAI2X,YAAUlP,EAAQ,CAAEorB,WAAW,IAC7C7kB,GAAO3T,KACJgxB,MAAMrd,GAAO3T,GAAI2E,MAAMuI,MAAM,MAE7B+5B,UAAS,KACTl/B,QAAU,CAAC+M,KAAKC,UAAUpQ,EAAMuI,WAEhClN,GAAM,CAAE2E,MAAAA,EAAOwB,QAAAA,SACd5E,SACF2lC,EAAM,IAAI/1B,MAAM,yBAAyBnR,mBAAoBmG,OAAaiL,GAAQ7P,YACpFA,aAAa4P,UAAWtI,MAAQtH,EAAEsH,OAChCq+B,UAGDvzB,GAAO3T,GAAI2E,OyBvDRwB,EAASg6B,EAAIngC,IACpBkM,MAAK7I,MAAM8jC,SACD7gC,aAAa65B,EAAIngC,IACvB2mC,EAAe,OACZ3qB,QAAeorB,EAAWT,KAC9B3V,MAAM1U,YAAUkc,UAAUxc,IAAS,KAE7BmrB,MAETjC,mBAAqB37B,MAAMhI,KAAa6P,GAAQ7P,SAChD,CAAC4E,EAASg6B,EAAIngC,QAER2E,GAAO,QACA,CAAEwB,aAAS,EAAW6V,YAAQ,MACpC,eAkBJqrB,EAAW9lC,IACZA,EAAEk+B,SAAqB,MAAVl+B,EAAEyI,OACRxD,eAAe,OAAQ,qBAC1B8gC,QACG/lC,EAAEk+B,SAAqB,MAAVl+B,EAAEyI,QACfxD,eAAe,OAAQ,qBAC1B+gC,YAGC,cACA7jC,iBAAiB,QAAS2jC,GAC5B,cACGzjC,oBAAoB,QAASyjC,MAErC,CAAC1iC,UAEG6iC,EAAcC,GAAmBhjC,EAAS,KAC1CijC,EAAeC,GAAoBljC,EAAmB,OACnD,qBzBQ0B0B,gBACVgwB,GAAWhwB,IAClBoO,cyBTHpO,GACb+F,gBACM07B,aAAyB,IAAI90B,OAAO/C,MAAM,KAC1C83B,EAAUtzB,EAAY3F,IAAIuxB,EAAIngC,IAClCqL,QAASwR,EAAEnQ,MAAM,MACjByI,WAAYyyB,EAAMvD,UAAWxnB,EAAEnE,SAAS2G,OACtCwoB,KACcA,MAGlB3C,mBAAqB37B,MAAMhI,KAAaA,EAAE6P,cAC1C,CAACjL,EAASg6B,EAAIngC,GAAIwnC,UASfJ,EAAa/jC,MAAOrD,gBACfwG,eAAe,cAAexG,aAEjCgc,QAAeG,GAAYhW,EAAS,WAAIuR,QAAQyoB,EAAIngC,GAAIA,GACxD0O,QAAO/J,WAAOiK,IAAI,IAAIC,OAAK,CAAC,YAAa,sBACf,KAA5B,0BAAQtI,oBAAWmI,YAA+B,IAATA,MACrCnI,UAAUmI,KAAOA,OACoB,KAAxC,WAAOnI,UAAU6V,uBAAc1N,UAC3BnI,UAAU6V,aAAa1N,KAAOA,IAGhCsN,QACCza,KACC6P,GAAQ7P,OAIZumC,EAAaC,GAAkBtjC,EAAStE,OAAO6nC,WAAa,MAC5D3Q,EAAQ4Q,GAAWxjC,EAAS,IAC5B6yB,EAAY4Q,GAAezjC,EAAS,IACpC8yB,EAAU4Q,GAAa1jC,EAAS,IAuBhC6/B,EAAYC,GAAiB9/B,GAAS,GACvC+/B,EAAc7iC,OAA2B,IASxCymC,EAAcC,GAAmB5jC,GAAS,GAC3C6jC,EAAapT,GAAWxc,SAASynB,EAAIngC,IACvCooC,IAAiBE,MAA4B,OAC7CC,EAAe,EACfD,OAA4B,GAC5BR,OAA6B,qBAQ/B,OAAD,CAAMvnC,MAAO6nC,EAAe,cAAgB,MAC1CtC,EAAD,CAAI9lC,GAAG,sBAAsBD,KAAK,WACjC,MAAD,CAAKQ,MAAM,cACT6E,EAAD,CAAK5E,KAAK,SAASC,MAAOk0B,EAAI,UAAW7zB,QAvCvB,OACV0F,eAAe,aACV,KACL+wB,EAAW,QAqClBxD,GAAD,CAASvzB,KAAK,UAAUC,MAAOk0B,EAAI,WAAY1vB,UAAU,KACvDgwB,EAAD,CAAUz0B,KAAK,SAASS,OAAK,EAACE,MAAOqmC,EAAcnmC,SAAUomC,EAAiBvmC,SAAU,EAAGE,YAAauzB,EAAI,cAC3G,MAAD,CAAKp0B,MAAM,eACTmnC,EAAcr8B,UAAejG,EAAD,CAAK3E,MAAOub,EAAQlb,QAAS,KAhF1C,IAACd,IAAAA,EAgF4Dgc,GA/ElE9P,qBACP8kB,MAAM1U,YAAUkc,UAAUxc,IAAS,MAC3B,CAAE7V,QAAAA,EAAS6V,OAAQhc,aA+EN,IAAzB0nC,EAAc75B,UAAiBzI,EAAD,CAAK3E,MAAOk0B,EAAI,mBAE/CZ,GAAD,CAASvzB,KAAK,MAAMC,MAAO0F,GACzBugC,EAAgBvV,UAAU9lB,UACzBjG,EAAD,CAAK3E,MAAO6J,EAAG5J,OAAQ4J,IAAMnE,EAASrF,QAAS,IAAMylC,EAAcj8B,UAGpEypB,GAAD,CAASvzB,KAAK,mBAAmBI,QAAS+zB,EAAI,WAC5CvvB,EAAD,CAAK5E,KAAK,UAAUC,MAAOk0B,EAAI,SAAU7zB,QAzI/B,OACH0F,eAAe,oBAClBwqB,MAAM1U,YAAUkc,UAAU7zB,EAAMyI,OAAOG,YAAY,QAwItDnI,EAAD,CAAK5E,KAAK,aAAaC,MAAOk0B,EAAI,QAAS7zB,QAtIjCS,MACXO,oBACQ0E,eAAe,OAAQ,mBAC1B8gC,YAoIHliC,EAAD,CAAK5E,KAAK,cAAcC,MAAOk0B,EAAI,QAAS7zB,QAlIlCS,MACXO,oBACQ0E,eAAe,OAAQ,mBAC1B+gC,YAkILh+B,KAAUw8B,GAAD,CAAYx8B,MAAAA,EAAcC,UAAW,IAAMs7B,EAAS,UAC7D0D,GAADnjC,OAAU,CAAC4H,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAASsO,YAAAA,IAAjC,CAA+CgjB,QAASqN,QAExD,MAAD,CAAKvkC,MAAM,gBAAgBo4B,MAAO,cAAc,EAAmB,GAAf4P,UAClD,MAAD,CAAKhoC,MAAO,8BAA8B+nC,EAAa,SAAW,uBAAwBvnC,aAAY4zB,EAAIyT,EAAe,eAAiB,gBAAiBtnC,QAhCvI,OACX0F,eAAe,iBAAmB4hC,EAA2B,SAAZ,cAC1CA,KA+BdA,EAAepnC,GAAQsI,SAAWtI,GAAQuH,QAE3C,MAAD,CAAKhI,MAAO,+BAA+BunC,EAAc,SAAW,uBAAwB/mC,aAAY4zB,EAAI,YAAa7zB,QArEpG,OACZ0F,eAAe,cACb8wB,EAAa,KAoEtBt2B,GAAQyG,YAET,MAAD,CAAKlH,MAAO,2BAA2BunC,EAAc,SAAW,KAAKxD,EAAa,UAAY,uBAAwBvjC,aAAY4zB,EAAI2P,EAAa,SAAW,QAASxjC,QA5EtJ,OACR0F,eAAe,UACjB6wB,EAAS,KA2EdiN,EAAatjC,GAAQiG,MAAQjG,GAAQqG,UAEtC,MAAD,CAAK9G,MAAO,mDAAoDQ,aAAY4zB,EAAImT,EAAc,cAAgB,eAAgBhnC,QAlE3G,OACV0F,eAAe,gBAAkBshC,EAA0B,SAAZ,cACzCA,KACR,KACI,KACF,KA8DPA,EAAc9mC,GAAQmG,cAAgBnG,GAAQsG,SAGhD,MAAD,CAAK/G,MAAO,iBAAgB6nC,EAAe,SAAW,OACpDK,GAADpjC,OAAkB,CAAC4H,KAAAA,EAAMtI,MAAAA,EAAOwB,QAAAA,EAASnG,GAAImgC,EAAIngC,KAAjD,CAAsDkyB,MAAOkW,EAAc3Q,QAASqN,QAEpF,MAAD,CAAKvkC,MAAO,gBAAeunC,EAAc,SAAW,OAClDY,GAADrjC,OAAiB,CAAC4H,KAAAA,EAAMtI,MAAAA,EAAO8P,YAAAA,EAAa4iB,OAAAA,EAAQC,WAAAA,EAAYC,SAAAA,IAAhE,CAA2EptB,KAAM,WAAIiD,UAAU,OAAQoqB,YAhErF,QACL,QACc,IAAxBgN,EAAY5iC,sBAAoC4iC,EAAY5iC,WACpDA,QAAU6xB,YAAW,QAClB,KACZ,MA2D+HgE,QAASqN,oBC9NxH73B,KAAEA,cAAM23B,UACtBjQ,EAAMX,GAAOY,KAAK,KAAM3nB,YAClB0nB,EAAI,iBACR,OAAD,OACL,MAAD,CAAKp0B,MAAM,UACTskC,GAAD,CAAUhD,MAAM,cACd/0B,EAAO8C,WAAWuF,YAAatF,EAAEpK,WAAU4F,UAC1Cw5B,GAAD,CAAUhD,MAAOlN,EAAI9kB,EAAE7P,IAAKmI,KAAMsH,GAASI,EAAER,WAE7Cw1B,GAAD,CAAUhD,MAAOlN,EAAI,YAAaxsB,KAAK,kBAEvC08B,GAAD,CAAUhD,MAAM,kBACd/0B,EAAO8C,WAAWuF,WAA2B,WAAftF,EAAEpK,WAAuB4F,UACtDw5B,GAAD,CAAUhD,MAAOlN,EAAI9kB,EAAE7P,IAAKmI,KAAMsH,GAASI,EAAER,YAG9Cw1B,GAAD,CAAUhD,MAAM,mBAAmBrhC,KAAK,SACvC2H,KAAK,mCACLw8B,KAAK,uCACLE,GAAD,CAAUhD,MAAM,mBAAmBrhC,KAAK,SACvC2H,KAAK,WACLw8B,KAAK,oDACLE,GAAD,CAAUhD,MAAM,qBACf15B,KAAK,qCACLw8B,KAAK,2CACLE,GAAD,CAAUhD,MAAM,sBAAsB15B,KAAK,+BCpBvB8E,KAAEA,cAAM23B,UAAaz+B,gBAASogC,UAC9C5R,EAAMX,GAAOY,KAAK,KAAM3nB,IACvB1D,EAAOu7B,GAAYrgC,EAAwB,QACtCkwB,EAAI,uBAETva,EAAQuuB,GAAalkC,EAAwB,KAC7Cg+B,EAAQmG,GAAankC,EAAsB,IAC5CokC,EAAYl3B,OAAO5C,WAAK0zB,IAAU,OAC9B,QACCt8B,GACR+F,YAA2B48B,GAAgBC,GAAU5iC,MACrD+F,UAAqB88B,KAAkBA,MACvC9D,mBAAqB37B,MAAMhI,KAAa6P,GAAQ7P,SAChD,CAAC4E,UAEGuC,EAAQy8B,GAAa1gC,EAAS,KAC9BwkC,EAASC,GAAczkC,EAAwB,IAChD0kC,EAAY,OACN,CAAC,CAAEnpC,GAAI07B,KAASkH,MAAOl6B,EAAQm6B,MAAO,EAAGC,MAAO,EAAGC,OAAQ,MAAQkG,KAKzEG,EAAgBppC,GAAe,OACzBipC,EAAQ9zB,WAAYpE,EAAE/Q,KAAOA,OAGlCkjC,EAAamG,GAAkB5kC,EAAS,GAKzCgD,EAAW9F,EAA0B,eAYnC,OAAD,OACLmkC,EAAD,CAAI/lC,KAAK,OAAOC,GAAG,WAClBuJ,KAAUw8B,GAAD,CAAYx8B,MAAAA,EAAcC,UAAW,IAAMs7B,EAAS,QAC7D+D,EAAUh7B,OAAS,cAClB,MAAD,CAAKtN,MAAM,8BACT,MAAD,CAAKA,MAAM,wBACT6J,GAAD,CAAW7J,MAAM,6BAA6B+/B,KAAK,aAAal/B,YAAauzB,EAAI,iBAChFxzB,MAAOuH,EAAQrH,SAAU8jC,EAAWp7B,QAASo/B,MAC7C/jC,EAAD,CAAK5E,KAAK,OAAOI,QAAS+zB,EAAI,oBAAqBp0B,MAAM,YAAYO,QAASqoC,KAE9EF,EAAQp7B,OAAS,KAAMzI,EAAD,CAAK5E,KAAK,OAAOC,MAAQk0B,EAAI,mBAAoBp0B,MAAM,kBAAkBO,QA1BnF,OACAoiC,EAAc,QA0B1B,MAAD,CAAK3iC,MAAM,aACV6E,EAAD,CAAK5E,KAAK,WAAWC,MAAOk0B,EAAI,YAAa/zB,QAAS+zB,EAAI,4BAA6Bp0B,MAAM,kBAAkBO,QAvBzF,WAClBwoC,EAAWL,EAAQnP,SAAU/oB,EAAE8xB,MAAQ,IACvC9vB,EAAUk2B,EACdtD,MAAK,CAAC90B,EAAGC,IAAMD,EAAEgyB,MAAQ/xB,EAAE+xB,QAC3Bx3B,QAAS,GAAGi+B,EAAW,qCAAqCv4B,EAAE8xB,aAAe,yBAAyB9xB,EAAE6xB,yBAAyB7xB,EAAEgyB,UAAUhyB,EAAE+xB,UAC/I10B,KAAK,QACExM,QAAQu2B,aAAa,OAAQ,iCAAmCplB,EAAU,SAC1EnR,QAAQu2B,aAAa,WAAY,uBACjCv2B,QAAQw2B,aAgBdrE,GAAD,CAASvzB,KAAK,MAAMC,MAAO0F,GACzB2G,EAAO+H,SAASsc,UAAU9lB,UACzBjG,EAAD,CAAK3E,MAAO6J,EAAEtK,GAAIU,OAAQ4J,EAAEtK,KAAOmG,EAASrF,QAAS,IAAMylC,EAAcj8B,EAAEtK,YAI7E,MAAD,CAAKO,MAAM,UACT0oC,EAAQ59B,kBAAUk+B,GAADlkC,OAAa2E,IAAK+G,EAAE/Q,IAAQ+Q,GAAO,CAAE9D,KAAAA,EAAMmN,OAAAA,EAAQqoB,OAAAA,EAAQS,YAAAA,IAA3D,CAA0EF,QA5C3EhjC,EA4C8F+Q,EAAE/Q,GA5ChFwpC,MACxBP,EAAQ59B,QAAS0F,EAAE/Q,KAAOA,EAAKiK,OAAK8G,GAAMy4B,GAAYz4B,OA2CuDkyB,SAAUmG,EAAar4B,EAAE/Q,OA5C/H,IAACA,QA8CjB,IAAD,CAAG0B,IAAK+F,EAAUkxB,MAAM,sBAExB,WAAD,CAAU34B,GAAG,cACX6oC,EAAUx9B,UAAU,SAAD,CAAQrB,IAAK/F,EAAG9C,MAAO8C,QClE9C,oBACQgJ,EAAMnH,GAAerB,EAAiB,WASnC,sBAEFhD,EAASs0B,GAAME,oBACf9qB,QAAQC,IAAI,CACjBq+B,GAAW,SACI,OAAXhoC,EAAkB,CAACgoC,GAAWhoC,IAAW,OAElCA,SAEX,UAEIwE,EAAOD,GAAYvB,EAAiBsxB,GAAMG,eAMvC,cACAwT,gBAAgBvR,aAAa,aAAclyB,KAClD,CAACA,UAGE0jC,EADer5B,GAAgBF,KACFxB,IAAI,YAChCzI,EAASD,GAAczB,EAAoBsxB,GAAMI,cAClDoQ,EAAgB3O,GAAagS,IAC9Bt5B,GAAgBF,KAAiBqP,IAAI,eACzB,CAAEtZ,cAERD,WAAW0jC,MACf1jC,WAAW0jC,KACNA,KACT,CAACD,OACM,KACLl2B,GAAWiF,SAASixB,IAA+BxjC,IAAYwjC,KACvDA,KAEV,CAACxjC,EAASwjC,UAEN9H,EAAOgI,GAAYplC,EAAiBuvB,GAAO/mB,EAAM,eAClD23B,EAAc,CAACkF,EAAej1B,iBACtB/H,EAAO+H,SAASxJ,QAASf,EAAEtK,YAClC+pC,EAAgBl1B,EAASnI,MAAMmI,EAAShH,OArDtB,YAsDfg0B,MAAQ,GAAGiI,eAAmBC,EAAc37B,KAAK,UACjD07B,sBASRE,GAAD//B,KAAY,CAACgD,KAAAA,EAAM40B,MAAAA,EAAO17B,QAAAA,EAASF,MAAAA,EAAOF,SAAUkH,EAAM80B,eA5DpC1+B,MAAO0C,IACxBoG,GAAQpG,UACN0jC,GAAW1jC,KAERD,YAAYC,MAChBD,YAAYC,KACNA,IAsD8D+7B,YAxCtDmI,MACVjkC,SAASikC,MACbjkC,SAASikC,KACNA,SAsCRC,EAAD,CAAQ7oC,SAPYE,gBAET,IAAMzB,EAAU8F,SAAS6J,GAASlO,EAAE8N,YAM7C86B,GAADlgC,GAAMyN,KAAK,KAAQ,CAACzK,KAAAA,EAAM23B,YAAAA,OACzBwF,GAADngC,GAAUyN,KAAK,YAAYjS,SAAS,YAAe,CAACwH,KAAAA,EAAM23B,YAAAA,OACzDwF,GAADngC,GAAUyN,KAAK,UAAUjS,SAAS,UAAa,CAACwH,KAAAA,EAAM23B,YAAAA,OACrDyF,GAADpgC,GAAQyN,KAAK,WAAc,CAACzK,KAAAA,EAAM9G,QAAAA,EAASy+B,YAAAA,EAAa2B,cAAAA,OACvD+D,GAADrgC,GAAWyN,KAAK,cAAiB,CAACzK,KAAAA,EAAM23B,YAAAA,OACvC2F,GAADtgC,GAAWsD,SAAO,GAAK,CAACN,KAAAA,EAAM9G,QAAAA,EAASy+B,YAAAA,EAAa2B,cAAAA,OAKvDiE,IAAQC,GAAD,MAAUz/B,SAASrH"} \ No newline at end of file +{"version":3,"file":"index.ef17db4b.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useCanvas.ts","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useModel.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../src/app/components/forms/Input.tsx","../../vite/preload-helper","../../src/app/Locales.ts","../../src/app/Utils.ts","../../src/app/services/Changelogs.ts","../../src/app/services/Schemas.ts","../../src/app/services/DataFetcher.ts","../../src/app/services/Manifest.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/previews/BiomeSourcePreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/components/previews/NoisePreview.tsx","../../src/app/previews/NormalNoise.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/generator/PreviewPanel.tsx","../../src/app/schema/transformOutput.ts","../../src/app/Store.ts","../../src/app/components/generator/SourcePanel.tsx","../../src/app/schema/ModelWrapper.ts","../../src/app/schema/renderHtml.tsx","../../src/app/components/generator/Tree.tsx","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/components/sounds/SoundConfig.tsx","../../src/app/components/ToolCard.tsx","../../src/app/pages/Category.tsx","../../src/app/pages/Changelog.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Sounds.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\tconst DIM_GENERATOR = 6\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 setGenerator(generator: string) {\n\t\tdimension(DIM_GENERATOR, generator)\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\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: clazz, tooltip, tooltipLoc, 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\tdoSelect?: number,\n\tvalue?: string,\n\tplaceholder?: string,\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, doSelect, value, placeholder, onChange }: BtnInputProps) {\n\tconst onInput = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tonChange?.(value)\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 { Inputs } from 'preact/hooks'\nimport { useEffect, useRef } from 'preact/hooks'\n\ntype Vec2 = [number, number]\n\nexport function useCanvas({ size, draw, onDrag, onHover, onLeave }: {\n\tsize: () => Vec2,\n\tdraw: (img: ImageData) => Promise,\n\tonDrag?: (dx: number, dy: number) => Promise,\n\tonHover?: (x: number, y: number) => unknown,\n\tonLeave?: () => unknown,\n}, inputs?: Inputs) {\n\tconst canvas = useRef(null)\n\n\tconst dragStart = useRef()\n\tconst dragRequest = useRef()\n\tconst dragPending = useRef([0, 0])\n\tconst dragBusy = useRef(false)\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) {\n\t\t\t\tconst x = e.offsetX / canvas.current.clientWidth\n\t\t\t\tconst y = e.offsetY / canvas.current.clientHeight\n\t\t\t\tonHover?.(x, y)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!onDrag) 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\tdragPending.current = [dragPending.current[0] + dx, dragPending.current[1] + dy]\n\t\t\t\tif (!dragBusy.current) {\n\t\t\t\t\tcancelAnimationFrame(dragRequest.current)\n\t\t\t\t\tdragRequest.current = requestAnimationFrame(async () => {\n\t\t\t\t\t\tdragBusy.current = true\n\t\t\t\t\t\tconst dx = dragPending.current[0] / canvas.current.clientWidth\n\t\t\t\t\t\tconst dy = dragPending.current[1] / canvas.current.clientHeight\n\t\t\t\t\t\tdragPending.current = [0, 0]\n\t\t\t\t\t\tawait onDrag?.(dx, dy)\n\t\t\t\t\t\tdragBusy.current = false\n\t\t\t\t\t})\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 = () => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\t\tconst onMouseLeave = () => {\n\t\t\tonLeave?.()\n\t\t}\n\n\t\tcanvas.current.addEventListener('mousedown', onMouseDown)\n\t\tcanvas.current.addEventListener('mousemove', onMouseMove)\n\t\tcanvas.current.addEventListener('mouseleave', onMouseLeave)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\n\t\treturn () => {\n\t\t\tcanvas.current?.removeEventListener('mousedown', onMouseDown)\n\t\t\tcanvas.current?.removeEventListener('mousemove', onMouseMove)\n\t\t\tcanvas.current?.removeEventListener('mouseleave', onMouseLeave)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [...inputs ?? [], canvas.current])\n\n\tconst redraw = useRef<() => Promise>()\n\tconst redrawCount = useRef(0)\n\tredraw.current = async () => {\n\t\tconst ctx = canvas.current.getContext('2d')!\n\t\tconst s = size()\n\t\tcanvas.current.width = s[0]\n\t\tcanvas.current.height = s[1]\n\t\tconst img = ctx.getImageData(0, 0, s[0], s[1])\n\t\tconst ownCount = redrawCount.current += 1\n\t\tawait draw(img)\n\t\tif (ownCount === redrawCount.current) {\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas,\n\t\tredraw: redraw.current,\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\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\tdocument.body.addEventListener('contextmenu', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t\tdocument.body.removeEventListener('contextmenu', hider)\n\t\t}\n\t}, [active])\n\n\treturn [active, () => setActive(true)]\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\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import type { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\n\ntype BtnMenuProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\ttooltip?: string,\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu({ icon, label, relative, tooltip, children }: BtnMenuProps) {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\talert: ,\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tcheck: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tchevron_up: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdownload: ,\n\tduplicate: ,\n\teye: ,\n\teye_closed: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tinfo: ,\n\tissue_opened: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tlink_external: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tplus_circle: ,\n\tsearch: ,\n\tsort_asc: ,\n\tsort_desc: ,\n\tstack: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tterminal: ,\n\tthree_bars: ,\n\ttrashcan: ,\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","import type { JSXInternal } from 'preact/src/jsx'\n\ntype InputProps = JSXInternal.HTMLAttributes\n\ntype BaseInputProps = Omit & {\n\tonChange?: (value: T) => unknown,\n\tonEnter?: (value: T) => unknown,\n}\nfunction BaseInput(name: string, type: string, fn: (value: string) => T) {\n\tconst component = (props: BaseInputProps) => {\n\t\tconst onChange = props.onChange && ((evt: Event) => {\n\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\tprops.onChange?.(fn(value))\n\t\t})\n\t\tconst onKeyDown = props.onEnter && ((evt: KeyboardEvent) => {\n\t\t\tif (evt.key === 'Enter') {\n\t\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\t\tprops.onEnter?.(fn(value))\n\t\t\t}\n\t\t})\n\t\treturn \n\t}\n\tcomponent.displayName = name\n\treturn component\n}\n\nexport const TextInput = BaseInput('TextInput', 'text', v => v)\n\nexport const NumberInput = BaseInput('NumberInput', 'number', v => Number(v))\n\nexport const RangeInput = BaseInput('RangeInput', 'range', v => Number(v))\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 { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport rfdc from 'rfdc'\nimport config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nexport function isObject(obj: any) {\n\treturn typeof obj === 'object' && obj !== null\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 randomSeed() {\n\treturn BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))\n}\n\nexport function newSeed(model: DataModel) {\n\tconst seed = Math.floor(Math.random() * (4294967296)) - 2147483648\n\tconst dimensions = model.get(new Path(['dimensions']))\n\tmodel.set(new Path(['seed']), seed, true)\n\tif (typeof dimensions === 'object' && dimensions !== null) {\n\t\tObject.keys(dimensions).forEach(id => {\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'seed']), seed, true)\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'biome_source', 'seed']), seed, true)\n\t\t})\n\t}\n\tmodel.set(new Path(['generator', 'seed']), seed, true)\n\tmodel.set(new Path(['generator', 'biome_source', 'seed']), seed)\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 getPath(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(0, searchIndex)\n\t}\n\treturn cleanUrl(url)\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = getPath(url).replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function getSearchParams(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(searchIndex + 1)\n\t\treturn new Map(url.split('&').map<[string, string]>(param => {\n\t\t\tconst index = param.indexOf('=')\n\t\t\tif (index === -1) return [param, 'true']\n\t\t\treturn [decodeURIComponent(param.slice(0, index)), decodeURIComponent(param.slice(index + 1))]\n\t\t}))\n\t}\n\treturn new Map()\n}\n\nexport function setSeachParams(modifications: Record, newPath?: string) {\n\tconst url = getCurrentUrl()\n\tconst searchParams = getSearchParams(url)\n\tObject.entries(modifications).forEach(([key, value]) => {\n\t\tif (value === undefined) searchParams.delete(key)\n\t\telse searchParams.set(key, value)\n\t})\n\tconst search = Array.from(searchParams).map(([key, value]) =>\n\t\t`${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n\troute(`${newPath ? cleanUrl(newPath) : getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true)\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 square(a: number) {\n\treturn a * a\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\nexport function message(e: unknown): string {\n\tif (e instanceof Error) return e.message\n\treturn `${e}`\n}\n\nexport const deepClone = rfdc()\n\n/**\n * MIT License\n * \n * Copyright (c) 2017 Evgeny Poberezkin\n * \n * https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE\n */\nexport function deepEqual(a: any, b: any) {\n\tif (a === b) return true\n\n\tif (a && b && typeof a == 'object' && typeof b == 'object') {\n\t\tif (a.constructor !== b.constructor) return false\n\t\tlet length, i\n\t\tif (Array.isArray(a)) {\n\t\t\tlength = a.length\n\t\t\tif (length != b.length) return false\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tif (!deepEqual(a[i], b[i])) return false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()\n\t\tif (a.toString !== Object.prototype.toString) return a.toString() === b.toString()\n\t\tconst keys = Object.keys(a)\n\t\tlength = keys.length\n\t\tif (length !== Object.keys(b).length) return false\n\t\tfor (i = length; i-- !== 0;)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false\n\t\tfor (i = length; i-- !== 0;) {\n\t\t\tconst key = keys[i]\n\t\t\tif (!deepEqual(a[key], b[key])) return false\n\t\t}\n\t\treturn true\n\t}\n\treturn a !== a && b !== b\n}\n\nexport class BiMap {\n\tprivate readonly forward: Map\n\tprivate readonly backward: Map\n\n\tconstructor() {\n\t\tthis.forward = new Map()\n\t\tthis.backward = new Map()\n\t}\n\n\tpublic set(a: A, b: B) {\n\t\tthis.forward.set(a, b)\n\t\tthis.backward.set(b, a)\n\t}\n\n\tpublic getA(key: B) {\n\t\treturn this.backward.get(key)\n\t}\n\n\tpublic getB(key: A) {\n\t\treturn this.forward.get(key)\n\t}\n\n\tpublic getOrPut(key: A, defaultValue: B) {\n\t\tconst b = this.forward.get(key)\n\t\tif (b === undefined) {\n\t\t\tthis.set(key, defaultValue)\n\t\t\treturn defaultValue\n\t\t}\n\t\treturn b\n\t}\n}\n","import { isObject } from '../Utils'\n\nconst repo = 'https://raw.githubusercontent.com/misode/technical-changes/main'\n\nexport type ChangelogEntry = {\n\tgroup: ChangelogVersion,\n\tversion: ChangelogVersion,\n\torder: number,\n\ttags: string[],\n\tcontent: string,\n}\n\nexport type ChangelogVersion = {\n\tid: string,\n\tarticle: string | null,\n}\n\nlet Changelogs: ChangelogEntry[] | Promise | null = null\n\nexport async function getChangelogs() {\n\tif (!Changelogs) {\n\t\tconst index = await (await fetch(`${repo}/index.json`)).json() as string[]\n\t\tChangelogs = (await Promise.all(\n\t\t\tindex.map((group, i) => fetchGroup(parseVersion(group), i))\n\t\t)).flat().map(change => ({\n\t\t\t...change,\n\t\t\ttags: [change.group.id, ...change.tags],\n\t\t}))\n\t}\n\treturn Changelogs\n}\n\nasync function fetchGroup(group: ChangelogVersion, groupIndex: number) {\n\tconst index = await (await fetch(`${repo}/${group.id}/index.json`)).json() as string[]\n\treturn (await Promise.all(\n\t\tindex.map((version, i) => fetchChangelog(group, parseVersion(version), groupIndex, i))\n\t)).flat()\n}\n\nasync function fetchChangelog(group: ChangelogVersion, version: ChangelogVersion, groupIndex: number, versionIndex: number) {\n\tconst text = await (await fetch(`${repo}/${group.id}/${version.id}.md`)).text()\n\treturn parseChangelog(text).map(change => ({\n\t\tversion,\n\t\tgroup,\n\t\torder: groupIndex * 1000 + versionIndex,\n\t\t...change,\n\t}))\n}\n\nfunction parseChangelog(text: string) {\n\treturn text.split('\\n\\n')\n\t\t.map(entry => {\n\t\t\tconst i = entry.indexOf('|')\n\t\t\treturn {\n\t\t\t\ttags: entry.substring(0, i).trim().split(' '),\n\t\t\t\tcontent: entry.slice(i + 1).trim()\n\t\t\t\t\t.replaceAll('->', '→')\n\t\t\t\t\t.replaceAll('\\n...\\n', '\\n\\n'),\n\t\t\t}\n\t\t})\n}\n\nfunction parseVersion(version: unknown): ChangelogVersion {\n\tif (typeof version === 'string') {\n\t\treturn {\n\t\t\tid: version,\n\t\t\tarticle: version.match(/\\d\\dw\\d\\d[a-z]/) ? 'minecraft-snapshot-' + version : version.match(/\\d+\\.\\d+(\\.\\d+)?-pre[0-9]+/) ? 'minecraft-' + version.replaceAll('.', '-').replaceAll('pre', 'pre-release-') : null,\n\t\t}\n\t} else if (isObject(version)) {\n\t\treturn version as ChangelogVersion\n\t}\n\treturn { id: 'unknown', article: null }\n}\n","import type { CollectionRegistry, INode, SchemaRegistry } from '@mcschema/core'\nimport { ChoiceNode, DataModel, Reference, StringNode } 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 * as java18 from '@mcschema/java-1.18'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17', '1.18'] 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\t1.18: java18,\n}\n\nexport let CachedDecorator: INode\nexport let CachedFeature: INode\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}\": ${message(e)}`)\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\t\n\t\tCachedDecorator = Reference(versionData.schemas, 'configured_decorator')\n\t\tCachedFeature = ChoiceNode([\n\t\t\t{\n\t\t\t\ttype: 'string',\n\t\t\t\tnode: StringNode(versionData.collections, { validator: 'resource', params: { pool: '$worldgen/configured_feature' } }),\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tnode: Reference(versionData.schemas, 'configured_feature'),\n\t\t\t},\n\t\t], { choiceContext: 'feature' })\n\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, { wrapLists: true })\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\tconst err = new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${message(e)}`)\n\t\t\tif (e instanceof Error) err.stack = e.stack\n\t\t\tthrow err\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 type { CollectionRegistry } from '@mcschema/core'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport type { VersionAssets, VersionManifest } from './Manifest'\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' | 'mcassets' | '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 mcassetsUrl = 'https://raw.githubusercontent.com/InventivetalentDev/minecraft-assets'\nconst vanillaDatapackUrl = 'https://raw.githubusercontent.com/SPGoding/vanilla-datapack'\nconst manifestUrl = 'https://launchermeta.mojang.com/mc/game/version_manifest.json'\nconst resourceUrl = 'https://resources.download.minecraft.net/'\nconst corsUrl = 'https://misode-cors-anywhere.herokuapp.com/'\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\tfetchAssetsRegistries(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 && !r.asset)\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:', message(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}:`, message(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:', message(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:', message(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 && !r.asset)\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:', message(e))\n\t\t}\n\t}\n\tif (checkVersion(version.id, '1.18')) {\n\t\ttarget.register('worldgen/noise', Noises)\n\t\ttarget.register('worldgen/placed_feature', PlacedFeatures)\n\t}\n}\n\nexport async function fetchAssetsRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchAssetsRegistries] ${version.id}`)\n\tconst registries = config.registries\n\t\t.filter(r => r.asset)\n\t\t.filter(r => checkVersion(version.id, r.minVersion, r.maxVersion))\n\n\tawait Promise.all(registries.map(async r => {\n\t\ttry {\n\t\t\tconst fetchFolder = async (path: string): Promise => {\n\t\t\t\tconst url = `${mcassetsUrl}/${version.refs.mcassets}/assets/minecraft/${path}/_list.json`\n\t\t\t\tconst data = await getData(url)\n\t\t\t\tif (data.directories.length === 0) {\n\t\t\t\t\treturn data.files\n\t\t\t\t}\n\t\t\t\tconst directories = await Promise.all(data.directories.map(async (d: string) => {\n\t\t\t\t\tconst files = await fetchFolder(`${path}/${d}`)\n\t\t\t\t\treturn files.map(v => `${d}/${v}`)\n\t\t\t\t}))\n\t\t\t\treturn [...data.files, ...directories.flat()]\n\t\t\t}\n\t\t\tconst ids = (await fetchFolder(r.path ?? r.id))\t\n\t\t\t\t.filter((v: string) => v.endsWith('.json') || v.endsWith('.png'))\n\t\t\t\t.map(v => `minecraft:${v.replace(/\\.(json|png)$/, '')}`)\n\t\t\ttarget.register(r.id, ids)\n\t\t} catch (e) {\n\t\t\tconsole.warn(`Error occurred while fetching assets registry ${r.id}:`, message(e))\n\t\t}\n\t}))\n}\n\nexport async function fetchPreset(version: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${registry} ${id}`)\n\tconst versionData = config.versions.find(v => v.id === version)!\n\ttry {\n\t\tconst url = ['blockstates', 'models'].includes(registry)\n\t\t\t?\t`${mcassetsUrl}/${versionData.refs.mcassets}/assets/minecraft/${registry}/${id}.json`\n\t\t\t: `${vanillaDatapackUrl}/${versionData.refs.vanilla_datapack_data}/data/minecraft/${registry}/${id}.json`\n\t\tconst res = await fetch(url)\n\t\tif (registry === 'worldgen/noise_settings' && version === '1.18') {\n\t\t\tlet text = await res.text()\n\t\t\ttext = text.replaceAll('\"max_threshold\": Infinity', '\"max_threshold\": 100')\n\t\t\tconst data = JSON.parse(text)\n\t\t\tif (id !== 'overworld' && id !== 'large_biomes') {\n\t\t\t\tdata.noise.terrain_shaper = { offset: 0, factor: 0, jaggedness: 0 }\n\t\t\t}\n\t\t\treturn data\n\t\t}\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchManifest() {\n\ttry {\n\t\tconst res = await fetch(manifestUrl)\n\t\treturn await res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching version manifest: ${message(e)}`)\n\t}\n}\n\nexport async function fetchAssets(versionId: VersionId, manifest: VersionManifest) {\n\tconst version = config.versions.find(v => v.id === versionId)\n\tconst id = version?.latest ?? manifest.latest.snapshot\n\ttry {\n\t\tconst versionMeta = await getData(manifest.versions.find(v => v.id === id)!.url)\n\t\n\t\treturn (await getData(versionMeta.assetIndex.url)).objects\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching assets for ${version}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchSounds(version: VersionId, assets: VersionAssets) {\n\ttry {\n\t\tconst hash = assets['minecraft/sounds.json'].hash\n\t\treturn await getData(getResourceUrl(hash))\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching sounds for ${version}: ${message(e)}`)\n\t}\n}\n\nexport function getResourceUrl(hash: string) {\n\treturn `${corsUrl}${resourceUrl}${hash.slice(0, 2)}/${hash}`\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}: ${message(e)}`)\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}: ${message(e)}`)\n\t}\n}\n\nconst Noises = [\n\t'minecraft:aquifer_barrier',\n\t'minecraft:aquifer_fluid_level_floodedness',\n\t'minecraft:aquifer_fluid_level_spread',\n\t'minecraft:aquifer_lava',\n\t'minecraft:badlands_pillar',\n\t'minecraft:badlands_pillar_roof',\n\t'minecraft:badlands_surface',\n\t'minecraft:calcite',\n\t'minecraft:cave_cheese',\n\t'minecraft:cave_entrance',\n\t'minecraft:cave_layer',\n\t'minecraft:clay_bands_offset',\n\t'minecraft:continentalness',\n\t'minecraft:continentalness_large',\n\t'minecraft:erosion',\n\t'minecraft:erosion_large',\n\t'minecraft:gravel',\n\t'minecraft:gravel_layer',\n\t'minecraft:ice',\n\t'minecraft:iceberg_pillar',\n\t'minecraft:iceberg_pillar_roof',\n\t'minecraft:iceberg_surface',\n\t'minecraft:jagged',\n\t'minecraft:nether_state_selector',\n\t'minecraft:nether_wart',\n\t'minecraft:netherrack',\n\t'minecraft:noodle',\n\t'minecraft:noodle_ridge_a',\n\t'minecraft:noodle_ridge_b',\n\t'minecraft:noodle_thickness',\n\t'minecraft:offset',\n\t'minecraft:ore_gap',\n\t'minecraft:ore_vein_a',\n\t'minecraft:ore_vein_b',\n\t'minecraft:ore_veininess',\n\t'minecraft:packed_ice',\n\t'minecraft:patch',\n\t'minecraft:pillar',\n\t'minecraft:pillar_rareness',\n\t'minecraft:pillar_thickness',\n\t'minecraft:powder_snow',\n\t'minecraft:ridge',\n\t'minecraft:soul_sand_layer',\n\t'minecraft:spaghetti_2d',\n\t'minecraft:spaghetti_2d_elevation',\n\t'minecraft:spaghetti_2d_modulator',\n\t'minecraft:spaghetti_2d_thickness',\n\t'minecraft:spaghetti_3d_1',\n\t'minecraft:spaghetti_3d_2',\n\t'minecraft:spaghetti_3d_rarity',\n\t'minecraft:spaghetti_3d_thickness',\n\t'minecraft:spaghetti_roughness',\n\t'minecraft:spaghetti_roughness_modulator',\n\t'minecraft:surface',\n\t'minecraft:surface_secondary',\n\t'minecraft:surface_swamp',\n\t'minecraft:temperature',\n\t'minecraft:temperature_large',\n\t'minecraft:vegetation',\n\t'minecraft:vegetation_large',\n]\n\nconst PlacedFeatures = [\n\t'minecraft:acacia_checked',\n\t'minecraft:amethyst_geode',\n\t'minecraft:bamboo',\n\t'minecraft:bamboo_light',\n\t'minecraft:bamboo_vegetation',\n\t'minecraft:basalt_blobs',\n\t'minecraft:basalt_pillar',\n\t'minecraft:birch_bees_0002',\n\t'minecraft:birch_bees_002',\n\t'minecraft:birch_checked',\n\t'minecraft:birch_tall',\n\t'minecraft:blackstone_blobs',\n\t'minecraft:blue_ice',\n\t'minecraft:brown_mushroom_nether',\n\t'minecraft:brown_mushroom_normal',\n\t'minecraft:brown_mushroom_old_growth',\n\t'minecraft:brown_mushroom_swamp',\n\t'minecraft:brown_mushroom_taiga',\n\t'minecraft:cave_vines',\n\t'minecraft:chorus_plant',\n\t'minecraft:classic_vines_cave_feature',\n\t'minecraft:crimson_forest_vegetation',\n\t'minecraft:crimson_fungi',\n\t'minecraft:dark_forest_vegetation',\n\t'minecraft:dark_oak_checked',\n\t'minecraft:delta',\n\t'minecraft:desert_well',\n\t'minecraft:disk_clay',\n\t'minecraft:disk_gravel',\n\t'minecraft:disk_sand',\n\t'minecraft:dripstone_cluster',\n\t'minecraft:end_gateway_return',\n\t'minecraft:end_island_decorated',\n\t'minecraft:end_spike',\n\t'minecraft:fancy_oak_bees',\n\t'minecraft:fancy_oak_bees_0002',\n\t'minecraft:fancy_oak_bees_002',\n\t'minecraft:fancy_oak_checked',\n\t'minecraft:flower_default',\n\t'minecraft:flower_flower_forest',\n\t'minecraft:flower_forest_flowers',\n\t'minecraft:flower_meadow',\n\t'minecraft:flower_plain',\n\t'minecraft:flower_swamp',\n\t'minecraft:flower_warm',\n\t'minecraft:forest_flowers',\n\t'minecraft:forest_rock',\n\t'minecraft:fossil_lower',\n\t'minecraft:fossil_upper',\n\t'minecraft:freeze_top_layer',\n\t'minecraft:glow_lichen',\n\t'minecraft:glowstone',\n\t'minecraft:glowstone_extra',\n\t'minecraft:grass_bonemeal',\n\t'minecraft:ice_patch',\n\t'minecraft:ice_spike',\n\t'minecraft:iceberg_blue',\n\t'minecraft:iceberg_packed',\n\t'minecraft:jungle_bush',\n\t'minecraft:jungle_tree',\n\t'minecraft:kelp_cold',\n\t'minecraft:kelp_warm',\n\t'minecraft:lake_lava_surface',\n\t'minecraft:lake_lava_underground',\n\t'minecraft:large_basalt_columns',\n\t'minecraft:large_dripstone',\n\t'minecraft:lush_caves_ceiling_vegetation',\n\t'minecraft:lush_caves_clay',\n\t'minecraft:lush_caves_vegetation',\n\t'minecraft:mega_jungle_tree_checked',\n\t'minecraft:mega_pine_checked',\n\t'minecraft:mega_spruce_checked',\n\t'minecraft:monster_room',\n\t'minecraft:monster_room_deep',\n\t'minecraft:mushroom_island_vegetation',\n\t'minecraft:nether_sprouts',\n\t'minecraft:oak_bees_0002',\n\t'minecraft:oak_bees_002',\n\t'minecraft:oak_checked',\n\t'minecraft:ore_ancient_debris_large',\n\t'minecraft:ore_andesite_lower',\n\t'minecraft:ore_andesite_upper',\n\t'minecraft:ore_blackstone',\n\t'minecraft:ore_clay',\n\t'minecraft:ore_coal_lower',\n\t'minecraft:ore_coal_upper',\n\t'minecraft:ore_copper',\n\t'minecraft:ore_copper_large',\n\t'minecraft:ore_debris_small',\n\t'minecraft:ore_diamond',\n\t'minecraft:ore_diamond_buried',\n\t'minecraft:ore_diamond_large',\n\t'minecraft:ore_diorite_lower',\n\t'minecraft:ore_diorite_upper',\n\t'minecraft:ore_dirt',\n\t'minecraft:ore_emerald',\n\t'minecraft:ore_gold',\n\t'minecraft:ore_gold_deltas',\n\t'minecraft:ore_gold_extra',\n\t'minecraft:ore_gold_lower',\n\t'minecraft:ore_gold_nether',\n\t'minecraft:ore_granite_lower',\n\t'minecraft:ore_granite_upper',\n\t'minecraft:ore_gravel',\n\t'minecraft:ore_gravel_nether',\n\t'minecraft:ore_infested',\n\t'minecraft:ore_iron_middle',\n\t'minecraft:ore_iron_small',\n\t'minecraft:ore_iron_upper',\n\t'minecraft:ore_lapis',\n\t'minecraft:ore_lapis_buried',\n\t'minecraft:ore_magma',\n\t'minecraft:ore_quartz_deltas',\n\t'minecraft:ore_quartz_nether',\n\t'minecraft:ore_redstone',\n\t'minecraft:ore_redstone_lower',\n\t'minecraft:ore_soul_sand',\n\t'minecraft:ore_tuff',\n\t'minecraft:patch_berry_common',\n\t'minecraft:patch_berry_rare',\n\t'minecraft:patch_cactus_decorated',\n\t'minecraft:patch_cactus_desert',\n\t'minecraft:patch_crimson_roots',\n\t'minecraft:patch_dead_bush',\n\t'minecraft:patch_dead_bush_2',\n\t'minecraft:patch_dead_bush_badlands',\n\t'minecraft:patch_fire',\n\t'minecraft:patch_grass_badlands',\n\t'minecraft:patch_grass_forest',\n\t'minecraft:patch_grass_jungle',\n\t'minecraft:patch_grass_normal',\n\t'minecraft:patch_grass_plain',\n\t'minecraft:patch_grass_savanna',\n\t'minecraft:patch_grass_taiga',\n\t'minecraft:patch_grass_taiga_2',\n\t'minecraft:patch_large_fern',\n\t'minecraft:patch_melon',\n\t'minecraft:patch_pumpkin',\n\t'minecraft:patch_soul_fire',\n\t'minecraft:patch_sugar_cane',\n\t'minecraft:patch_sugar_cane_badlands',\n\t'minecraft:patch_sugar_cane_desert',\n\t'minecraft:patch_sugar_cane_swamp',\n\t'minecraft:patch_sunflower',\n\t'minecraft:patch_tall_grass',\n\t'minecraft:patch_tall_grass_2',\n\t'minecraft:patch_waterlily',\n\t'minecraft:pine_checked',\n\t'minecraft:pine_on_snow',\n\t'minecraft:pointed_dripstone',\n\t'minecraft:red_mushroom_nether',\n\t'minecraft:red_mushroom_normal',\n\t'minecraft:red_mushroom_old_growth',\n\t'minecraft:red_mushroom_swamp',\n\t'minecraft:red_mushroom_taiga',\n\t'minecraft:rooted_azalea_tree',\n\t'minecraft:sea_pickle',\n\t'minecraft:seagrass_cold',\n\t'minecraft:seagrass_deep',\n\t'minecraft:seagrass_deep_cold',\n\t'minecraft:seagrass_deep_warm',\n\t'minecraft:seagrass_normal',\n\t'minecraft:seagrass_river',\n\t'minecraft:seagrass_simple',\n\t'minecraft:seagrass_swamp',\n\t'minecraft:seagrass_warm',\n\t'minecraft:small_basalt_columns',\n\t'minecraft:spore_blossom',\n\t'minecraft:spring_closed',\n\t'minecraft:spring_closed_double',\n\t'minecraft:spring_delta',\n\t'minecraft:spring_lava',\n\t'minecraft:spring_lava_frozen',\n\t'minecraft:spring_open',\n\t'minecraft:spring_water',\n\t'minecraft:spruce_checked',\n\t'minecraft:spruce_on_snow',\n\t'minecraft:super_birch_bees',\n\t'minecraft:super_birch_bees_0002',\n\t'minecraft:trees_badlands',\n\t'minecraft:trees_birch',\n\t'minecraft:trees_birch_and_oak',\n\t'minecraft:trees_flower_forest',\n\t'minecraft:trees_grove',\n\t'minecraft:trees_jungle',\n\t'minecraft:trees_meadow',\n\t'minecraft:trees_old_growth_pine_taiga',\n\t'minecraft:trees_old_growth_spruce_taiga',\n\t'minecraft:trees_plains',\n\t'minecraft:trees_savanna',\n\t'minecraft:trees_snowy',\n\t'minecraft:trees_sparse_jungle',\n\t'minecraft:trees_swamp',\n\t'minecraft:trees_taiga',\n\t'minecraft:trees_water',\n\t'minecraft:trees_windswept_forest',\n\t'minecraft:trees_windswept_hills',\n\t'minecraft:trees_windswept_savanna',\n\t'minecraft:twisting_vines',\n\t'minecraft:underwater_magma',\n\t'minecraft:vines',\n\t'minecraft:void_start_platform',\n\t'minecraft:warm_ocean_vegetation',\n\t'minecraft:warped_forest_vegetation',\n\t'minecraft:warped_fungi',\n\t'minecraft:weeping_vines',\n]\n","import { fetchAssets, fetchManifest, fetchSounds } from './DataFetcher'\nimport type { VersionId } from './Schemas'\n\nexport type VersionManifest = {\n\tlatest: {\n\t\trelease: string,\n\t\tsnapshot: string,\n\t},\n\tversions: {\n\t\tid: string,\n\t\ttype: string,\n\t\turl: string,\n\t}[],\n}\nlet Manifest: VersionManifest | Promise | null = null\n\nexport type VersionAssets = {\n\t[key: string]: {\n\t\thash: string,\n\t},\n}\nconst VersionAssets: Record> = {}\n\nexport type SoundEvents = {\n\t[key: string]: {\n\t\tsounds: (string | { name: string })[],\n\t},\n}\nconst SoundEvents: Record> = {}\n\nexport async function getManifest() {\n\tif (!Manifest) {\n\t\tManifest = fetchManifest()\n\t}\n\treturn Manifest\n}\n\nexport async function getAssets(version: VersionId) {\n\tif (!VersionAssets[version]) {\n\t\tVersionAssets[version] = (async () => {\n\t\t\tconst manifest = await getManifest()\n\t\t\treturn await fetchAssets(version, manifest)\n\t\t})()\n\t}\n\treturn VersionAssets[version]\n}\n\nexport async function getSounds(version: VersionId) {\n\tif (!SoundEvents[version]) {\n\t\tSoundEvents[version] = (async () => {\n\t\t\tconst assets = await getAssets(version)\n\t\t\treturn await fetchSounds(version, assets)\n\t\t})()\n\t}\n\treturn SoundEvents[version]\n}\n","import { DataModel } from '@mcschema/core'\nimport type { NoiseOctaves } from 'deepslate'\nimport { FixedBiome, LegacyRandom, NormalNoise, TerrainShaper } from 'deepslate'\nimport init, { biome_parameters, climate_noise, climate_sampler, multi_noise } from 'deepslate-rs'\n// @ts-expect-error\nimport wasm from 'deepslate-rs/deepslate_rs_bg.wasm?url'\nimport type { VersionId } from '../services'\nimport { fetchPreset } from '../services'\nimport { BiMap, clamp, deepClone, deepEqual, square, stringToColor } from '../Utils'\n\nlet ready = false\nasync function loadWasm() {\n\tif (ready) return\n\tawait init(wasm)\n\tready = true\n\tconsole.debug(`Loaded deepslate-rs from \"${wasm}\"`)\n}\n\nconst LAYERS = {\n\ttemperature: [-1, 1],\n\thumidity: [-1, 1],\n\tcontinentalness: [-1.1, 1],\n\terosion: [-1, 1],\n\tweirdness: [-1, 1],\n\toffset: [-1, 1],\n\tfactor: [0, 12],\n\tjaggedness: [0, 1],\n}\n\ntype Triple = [number, number, number]\ntype BiomeColors = Record\ntype BiomeSourceOptions = {\n\toctaves: NoiseOctaves,\n\tshaper: TerrainShaper,\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: bigint,\n\tversion: VersionId,\n\tlayers: Set,\n}\n\ninterface CachedBiomeSource {\n\tgetBiome(x: number, y: number, z: number): string\n\tgetBiomes?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): string[]\n\tgetClimate?(layers: Set, xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): {[k: string]: number}[]\n}\n\nlet cacheState: any\nlet biomeSourceCache: CachedBiomeSource\n\nexport async function biomeMap(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst data = img.data\n\tconst ox = -Math.round(options.offset[0]) - 100 + options.res / 2\n\tconst oz = -Math.round(options.offset[1]) - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\n\tconst xRange: Triple = [ox * options.scale, (200 + ox) * options.scale, options.res * options.scale]\n\tconst zRange: Triple = [oz * options.scale, (200 + oz) * options.scale, options.res * options.scale]\n\n\tconst biomes = !options.layers.has('biomes') ? undefined : biomeSource.getBiomes?.(...xRange, 64, 65, 1, ...zRange)\n\tconst layers = [...options.layers].filter(l => l !== 'biomes') as (keyof typeof LAYERS)[]\n\tconst noise = layers.length === 0 ? undefined : biomeSource.getClimate?.(new Set(layers), ...xRange, 64, 65, 1, ...zRange)\n\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let z = 0; z < 200; z += options.res) {\n\t\t\tconst i = z * row + x * col\n\t\t\tconst j = (x / options.res) * 200 / options.res + z / options.res\n\t\t\tconst worldX = (x + ox) * options.scale\n\t\t\tconst worldZ = (z + oz) * options.scale\n\t\t\tlet color: Triple = [50, 50, 50]\n\t\t\tif (options.layers.has('biomes')) {\n\t\t\t\tconst biome = biomes?.[j] ?? biomeSource.getBiome(worldX, 64, worldZ)\n\t\t\t\tcolor = getBiomeColor(biome, options.biomeColors)\n\t\t\t} else if (noise && layers[0]) {\n\t\t\t\tconst value = noise[j][layers[0]]\n\t\t\t\tconst [min, max] = LAYERS[layers[0]]\n\t\t\t\tconst brightness = (value - min) / (max - min) * 256\n\t\t\t\tcolor = [brightness, brightness, brightness]\n\t\t\t}\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 async function getBiome(state: any, x: number, z: number, options: BiomeSourceOptions): Promise {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst [xx, zz] = toWorld([x, z], options)\n\treturn biomeSource.getBiome(xx, 64, zz)\n}\n\nasync function getCached(state: any, options: BiomeSourceOptions): Promise<{ biomeSource: CachedBiomeSource}> {\n\tconst newState = [state, options.octaves, options.shaper.toJson(), `${options.seed}`, options.version]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\n\t\tbiomeSourceCache = await getBiomeSource(state, options)\n\t}\n\treturn {\n\t\tbiomeSource: biomeSourceCache,\n\t} \n}\n\nasync function getBiomeSource(state: any, options: BiomeSourceOptions): Promise {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'fixed':\n\t\t\treturn new FixedBiome(state.biome as string)\n\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\treturn {\n\t\t\t\tgetBiome(x: number, _y: number, z: number) {\n\t\t\t\t\tconst i = (((x >> shift) + (z >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\t\t\treturn (state.biomes?.[i].node as string)\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase 'multi_noise':\n\t\t\tswitch(state.preset?.replace(/^minecraft:/, '')) {\n\t\t\t\tcase 'nether':\n\t\t\t\t\tstate = options.version === '1.18' ? NetherPreset18 : NetherPreset\n\t\t\t\t\tbreak\n\t\t\t\tcase 'overworld':\n\t\t\t\t\tstate = options.version === '1.18' ? await OverworldPreset18() : state\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tstate = DataModel.unwrapLists(state)\n\t\t\tif (options.version === '1.18') {\n\t\t\t\tawait loadWasm()\n\t\t\t\tconst BiomeIds = new BiMap()\n\t\t\t\tconst param = (p: number | number[]) => {\n\t\t\t\t\treturn typeof p === 'number' ? [p, p] : p\n\t\t\t\t}\n\t\t\t\tconst [t0, t1, h0, h1, c0, c1, e0, e1, w0, w1, d0, d1, o, b] = [[], [], [], [], [], [], [], [], [], [], [], [], [], []] as number[][]\n\t\t\t\tfor (const i of state.biomes) {\n\t\t\t\t\tconst { temperature, humidity, continentalness, erosion, weirdness, depth, offset } = i.parameters\n\t\t\t\t\tt0.push(param(temperature)[0])\n\t\t\t\t\tt1.push(param(temperature)[1])\n\t\t\t\t\th0.push(param(humidity)[0])\n\t\t\t\t\th1.push(param(humidity)[1])\n\t\t\t\t\tc0.push(param(continentalness)[0])\n\t\t\t\t\tc1.push(param(continentalness)[1])\n\t\t\t\t\te0.push(param(erosion)[0])\n\t\t\t\t\te1.push(param(erosion)[1])\n\t\t\t\t\tw0.push(param(weirdness)[0])\n\t\t\t\t\tw1.push(param(weirdness)[1])\n\t\t\t\t\td0.push(param(depth)[0])\n\t\t\t\t\td1.push(param(depth)[1])\n\t\t\t\t\to.push(offset)\n\t\t\t\t\tb.push(BiomeIds.getOrPut(i.biome, Math.floor(Math.random() * 2147483647)))\n\t\t\t\t}\n\t\t\t\tconst parameters = biome_parameters(new Float64Array(t0), new Float64Array(t1), new Float64Array(h0), new Float64Array(h1), new Float64Array(c0), new Float64Array(c1), new Float64Array(e0), new Float64Array(e1), new Float64Array(w0), new Float64Array(w1), new Float64Array(d0), new Float64Array(d1), new Float64Array(o), new Int32Array(b))\n\t\t\t\tconst sampler = climate_sampler(options.seed, options.octaves.temperature.firstOctave, new Float64Array(options.octaves.temperature.amplitudes), options.octaves.humidity.firstOctave, new Float64Array(options.octaves.humidity.amplitudes), options.octaves.continentalness.firstOctave, new Float64Array(options.octaves.continentalness.amplitudes), options.octaves.erosion.firstOctave, new Float64Array(options.octaves.erosion.amplitudes), options.octaves.weirdness.firstOctave, new Float64Array(options.octaves.weirdness.amplitudes), options.octaves.shift.firstOctave, new Float64Array(options.octaves.shift.amplitudes))\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x, y, z) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\treturn BiomeIds.getA(ids[0]) ?? 'unknown'\n\t\t\t\t\t},\n\t\t\t\t\tgetBiomes(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\treturn [...ids].map(id => BiomeIds.getA(id) ?? 'unknown')\n\t\t\t\t\t},\n\t\t\t\t\tgetClimate(layers, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\tconst result = []\n\t\t\t\t\t\tfor (let i = 0; i < climate.length; i += 7) {\n\t\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(i, i + 5)\n\t\t\t\t\t\t\tconst point = TerrainShaper.point(c, e, w)\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t\t\t...layers.has('offset') && { offset: options.shaper.offset(point) },\n\t\t\t\t\t\t\t\t...layers.has('factor') && { factor: options.shaper.factor(point) },\n\t\t\t\t\t\t\t\t...layers.has('jaggedness') && { jaggedness: options.shaper.jaggedness(point) },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst noise = ['altitude', 'temperature', 'humidity', 'weirdness']\n\t\t\t\t\t.map((id, i) => {\n\t\t\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\t\t\tconfig.firstOctave = clamp(config.firstOctave ?? -7, -100, -1)\n\t\t\t\t\t\treturn new NormalNoise(new LegacyRandom(options.seed + BigInt(i)), config)\n\t\t\t\t\t})\n\t\t\t\tif (!Array.isArray(state.biomes) || state.biomes.length === 0) {\n\t\t\t\t\treturn new FixedBiome('unknown')\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x: number, _y: number, z: number): string {\n\t\t\t\t\t\tconst n = noise.map(n => n.sample(x, z, 0))\n\t\t\t\t\t\tlet minDist = Infinity\n\t\t\t\t\t\tlet minBiome = ''\n\t\t\t\t\t\tfor (const { biome, parameters: p } of state.biomes) {\n\t\t\t\t\t\t\tconst dist = square(p.altitude - n[0]) + square(p.temperature - n[1]) + square(p.humidity - n[2]) + square(p.weirdness - n[3]) + square(p.offset)\n\t\t\t\t\t\t\tif (dist < minDist) {\n\t\t\t\t\t\t\t\tminDist = dist\n\t\t\t\t\t\t\t\tminBiome = biome\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn minBiome\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t}\n\tthrow new Error('Unknown biome source')\n}\n\nfunction getBiomeColor(biome: string, biomeColors: BiomeColors): Triple {\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, z]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst zz = (z - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, zz]\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:old_growth_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:old_growth_pine_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_hills': [136,136,136],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:windswept_gravelly_hills': [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:sparse_jungle': [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:extreme_hills': [96,96,96],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:windswept_hills': [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:windswept_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:snowy_plains': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:stony_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:old_growth_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_badlands': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n\t'minecraft:windswept_forest': [80,112,80],\n\t'minecraft:snowy_slopes': [140, 195, 222],\n\t'minecraft:lofty_peaks': [196, 168, 193],\n\t'minecraft:jagged_peaks': [196, 168, 193],\n\t'minecraft:snowcapped_peaks': [200, 198, 200],\n\t'minecraft:frozen_peaks': [200, 198, 200],\n\t'minecraft:stony_peaks': [82, 92, 103],\n\t'minecraft:grove': [150, 150, 189],\n\t'minecraft:meadow': [169, 197, 80],\n\t'minecraft:lush_caves': [112, 255, 79],\n\t'minecraft:dripstone_caves': [140, 124, 0],\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\nconst NetherPreset18 = {type:'minecraft:multi_noise',biomes:[{biome:'minecraft:nether_wastes',parameters:{temperature:0,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{temperature:0,humidity:-0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{temperature:0.4,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{temperature:0,humidity:0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{temperature:-0.5,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.175}}]}\n\nasync function OverworldPreset18() {\n\tconst overworld = await fetchPreset('1.18', 'dimension', 'overworld')\n\treturn overworld.generator.biome_source\n}\n","import { DataModel } from '@mcschema/core'\nimport type { Random } from 'deepslate'\nimport { LegacyRandom, PerlinNoise } from 'deepslate'\nimport type { VersionId } from '../services'\nimport { clamp, stringToColor } from '../Utils'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: Random,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n\tnextFloat(): number,\n\tnextInt(max: number): number,\n\tsampleInt(provider: any): number,\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: bigint,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(random.fork(), 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t\tnextFloat: () => random.nextFloat(),\n\t\tnextInt: (max: number) => random.nextInt(max),\n\t\tsampleInt(value) { return sampleInt(value, this) },\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], DataModel.unwrapLists(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 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 + ctx.nextInt(1 + (value.spread ?? 0))\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 + ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + ctx.nextInt(ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1) + 1)\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.nextFloat() < 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.nextFloat() < (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?.[ctx.nextInt(config?.features?.length ?? 0)]\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.nextFloat() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.nextFloat() < 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(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(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.sample(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 + ctx.nextInt(3) + 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 + ctx.nextInt(3) + 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 = ctx.nextInt(config?.spread ?? 0) + ctx.nextInt(config?.spread ?? 0) - (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 + ctx.nextInt(6)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t4 + ctx.nextInt(28),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + ctx.nextInt(ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = ctx.nextInt(1 + ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\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, ctx.nextInt(y * 2))\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 + ctx.nextInt(8),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + ctx.nextInt(8),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt((config.chance ?? 1) / 10) === 0) {\n\t\t\tconst y = ctx.nextInt(ctx.nextInt(256 - 8) + 8)\n\t\t\tif (y < ctx.seaLevel || ctx.nextInt((config?.chance ?? 1) / 8) == 0) {\n\t\t\t\tconst x = ctx.nextInt(16) + pos[0]\n\t\t\t\tconst z = ctx.nextInt(16) + 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 = ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\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 = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tsurface_relative_threshold: (config, pos) => {\n\t\tconst height = terrain[clamp(0, 63, pos[0])]\n\t\tconst min = height + (config?.min_inclusive ?? -Infinity)\n\t\tconst max = height + (config?.max_inclusive ?? Infinity)\n\t\treturn (pos[1] < min || pos[1] > max) ? [pos] : []\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt(config.chance ?? 1) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t\tctx.nextInt(256),\n\t\t\t\tpos[2] + ctx.nextInt(16),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n","import { LegacyRandom, PerlinNoise } from 'deepslate'\nimport { clampedLerp, lerp2 } from '../../Utils'\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: bigint) {\n\t\tconst random = new LegacyRandom(seed)\n\t\tthis.minLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.maxLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.mainPerlinNoise = new PerlinNoise(random, -7, [1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.depthNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\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.sample(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.sample(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.sample(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.sample(\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 { DataModel } from '@mcschema/core'\nimport type { BlockPos, BlockState } from 'deepslate'\nimport { Chunk, ChunkPos, FixedBiome, NoiseChunkGenerator, NoiseGeneratorSettings } from 'deepslate'\nimport { getOctaves } from '../components'\nimport type { VersionId } from '../services'\nimport { checkVersion } from '../services'\nimport { deepClone, deepEqual } from '../Utils'\nimport { NoiseChunkGenerator as OldNoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiomeScale?: number,\n\tbiomeDepth?: number,\n\toffset: number,\n\twidth: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nconst Z = 0\n\nconst colors: Record = {\n\t'minecraft:air': [150, 160, 170],\n\t'minecraft:water': [20, 80, 170],\n\t'minecraft:lava': [200, 100, 0],\n\t'minecraft:stone': [50, 50, 50],\n\t'minecraft:netherrack': [100, 40, 40],\n\t'minecraft:end_stone': [200, 200, 140],\n}\n\nlet cacheState: any\nlet generatorCache: NoiseChunkGenerator\nlet chunkCache: Chunk[] = []\n\nexport function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tif (checkVersion(options.version, '1.18')) {\n\t\tconst { settings, generator } = getCached(state, options)\n\n\t\tconst slice = new LevelSlice(-options.offset, options.width, settings.noise.minY, settings.noise.height)\n\t\tslice.fill(generator)\n\n\t\tconst data = img.data\n\t\tfor (let x = 0; x < options.width; x += 1) {\n\t\t\tfor (let y = 0; y < settings.noise.height; y += 1) {\n\t\t\t\tconst i = x * 4 + (settings.noise.height-y-1) * 4 * img.width\n\t\t\t\tconst state = slice.getBlockState([x - options.offset, y, Z])\n\t\t\t\tconst color = colors[state.getName()] ?? [0, 0, 0]\n\t\t\t\tdata[i] = color[0]\n\t\t\t\tdata[i + 1] = color[1]\n\t\t\t\tdata[i + 2] = color[2]\n\t\t\t\tdata[i + 3] = 255\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tconst generator = new OldNoiseChunkGenerator(options.seed)\n\tgenerator.reset(state.noise, options.biomeDepth ?? 0, options.biomeScale ?? 0, options.offset, options.width)\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.noise.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 getCached(state: unknown, options: NoiseSettingsOptions) {\n\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(state))\n\tsettings.octaves = getOctaves(settings)\n\n\tconst newState = [state, `${options.seed}`]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\t\tchunkCache = []\n\t\tconst biomeSource = new FixedBiome('unknown')\n\t\tgeneratorCache = new NoiseChunkGenerator(options.seed, biomeSource, settings)\n\t}\n\treturn {\n\t\tsettings,\n\t\tgenerator: generatorCache,\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\nclass LevelSlice {\n\tprivate readonly chunks: Chunk[]\n\tprivate readonly filled: boolean[]\n\n\tconstructor(\n\t\tprivate readonly minX: number,\n\t\twidth: number,\n\t\tminY: number,\n\t\theight: number,\n\t) {\n\t\tthis.filled = []\n\t\tthis.chunks = [...Array(Math.ceil(width / 16) + 1)]\n\t\t\t.map((_, i) => {\n\t\t\t\tconst x = (minX >> 4) + i\n\t\t\t\tconst cached = chunkCache.find(c => c.pos[0] === x)\n\t\t\t\tif (cached) {\n\t\t\t\t\tthis.filled[i] = true\n\t\t\t\t\treturn cached\n\t\t\t\t}\n\t\t\t\treturn new Chunk(minY, height, ChunkPos.create(x, Z >> 4))\n\t\t\t})\n\t}\n\n\tpublic fill(generator: NoiseChunkGenerator) {\n\t\tthis.chunks.forEach((chunk, i) => {\n\t\t\tif (!this.filled[i]) {\n\t\t\t\tgenerator.fill(chunk)\n\t\t\t\tthis.filled[i] = true\n\t\t\t\tchunkCache.push(chunk)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic getBlockState(pos: BlockPos): BlockState {\n\t\tconst chunkIndex = (pos[0] >> 4) - (this.minX >> 4)\n\t\treturn this.chunks[chunkIndex].getBlockState(pos)\n\t}\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport type { NoiseOctaves } from 'deepslate'\nimport { NoiseGeneratorSettings, TerrainShaper } from 'deepslate'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { biomeMap, getBiome } from '../../previews'\nimport { newSeed } from '../../Utils'\n\nconst LAYERS = ['biomes', 'temperature', 'humidity', 'continentalness', 'erosion', 'weirdness', 'offset', 'factor', 'jaggedness'] as const\n\nconst OverworldShaper = TerrainShaper.overworld()\n\nexport const BiomeSourcePreview = ({ model, data, shown, lang, version }: PreviewProps) => {\n\tconst [scale, setScale] = useState(2)\n\tconst [focused, setFocused] = useState(undefined)\n\tconst [layers, setLayers] = useState(new Set(['biomes']))\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst res = useRef(1)\n\tconst refineTimeout = useRef(undefined)\n\n\tconst seed = BigInt(model.get(new Path(['generator', 'seed'])))\n\tconst octaves = getOctaves(model.get(new Path(['generator', 'settings'])))\n\tconst shaper = getShaper(model.get(new Path(['generator', 'settings'])))\n\tconst state = shown ? calculateState(data, octaves, shaper) : ''\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [200 / res.current, 200 / res.current]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { octaves, shaper, biomeColors: {}, layers, offset: offset.current, scale, seed, res: res.current, version }\n\t\t\tawait biomeMap(data, img, options)\n\t\t\tif (res.current === 4) {\n\t\t\t\tclearTimeout(refineTimeout.current)\n\t\t\t\trefineTimeout.current = setTimeout(() => {\n\t\t\t\t\tres.current = 1\n\t\t\t\t\tredraw()\n\t\t\t\t}, 150) as any\n\t\t\t}\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 200\n\t\t\toffset.current[1] = offset.current[1] + dy * 200\n\t\t\tclearTimeout(refineTimeout.current)\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst options = { octaves, shaper, biomeColors: {}, layers, offset: offset.current, scale, seed, res: 1, version }\n\t\t\tconst biome = await getBiome(data, Math.floor(x * 200), Math.floor(y * 200), options)\n\t\t\tsetFocused(biome)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, scale, seed, layers])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, layers, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.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' &&\n\t\t\t\t\n\t\t\t\t\t{LAYERS.map(name => {\n\t\t\t\t\t\tconst enabled = layers.has(name)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tsetLayers(new Set([name]))\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t}} />\n\t\t\t\t\t})}\n\t\t\t\t}\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 newSeed(model)} />}\n\t\t
\n\t\t\n\t\n}\n\nfunction calculateState(data: any, octaves: NoiseOctaves, shaper: TerrainShaper) {\n\treturn JSON.stringify([data, octaves, shaper.toJson()])\n}\n\nexport function getOctaves(obj: any): NoiseOctaves {\n\tif (typeof obj !== 'string') {\n\t\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(obj))\n\t\tobj = settings.noise.densityFactor === 0 && settings.noise.densityOffset === -0.030078125\n\t\t\t? 'minecraft:nether' : 'minecraft:overworld'\n\t}\n\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\tcase 'overworld':\n\t\tcase 'amplified':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -9, amplitudes: [1.5, 0, 1, 0, 0, 0] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1, 0, 0, 0, 0] },\n\t\t\t\tcontinentalness: { firstOctave: -9, amplitudes: [1, 1, 2, 2, 2, 1, 1, 1, 1] },\n\t\t\t\terosion: { firstOctave: -9, amplitudes: [1, 1, 0, 1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 2, 1, 0, 0, 0] },\n\t\t\t\tshift: { firstOctave: -3, amplitudes: [1, 1, 1, 0] },\n\t\t\t}\n\t\tcase 'end':\n\t\tcase 'floating_islands':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\thumidity: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tcontinentalness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\terosion: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tweirdness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tcontinentalness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\terosion: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t}\n}\n\nexport function getShaper(obj: any): TerrainShaper {\n\tif (typeof obj === 'string') {\n\t\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\t\tcase 'overworld':\n\t\t\tcase 'amplified':\n\t\t\t\treturn OverworldShaper\n\t\t\tdefault:\n\t\t\t\treturn TerrainShaper.fromJson({ offset: 0, factor: 0, jaggedness: 0 })\n\t\t}\n\t}\n\treturn TerrainShaper.fromJson(DataModel.unwrapLists(obj?.noise?.terrain_shaper))\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { decorator } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DecoratorPreview = ({ data, version, shown, lang }: PreviewProps) => {\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(randomSeed())\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [scale * 16, scale * 16]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t},\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\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(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { normalNoise } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const NoisePreview = ({ lang, data, shown, version }: PreviewProps) => {\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [scale, setScale] = useState(2)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst state = JSON.stringify([data])\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [256, 256]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, scale, seed, version }\n\t\t\tnormalNoise(data, img, options)\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 256\n\t\t\toffset.current[1] = offset.current[1] + dy * 256\n\t\t\tredraw()\n\t\t},\n\t}, [state, scale, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t
\n\t\t\t changeScale(scale * 1.5)} />\n\t\t\t changeScale(scale / 1.5)} />\n\t\t\t setSeed(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import { DataModel } from '@mcschema/core'\nimport { LegacyRandom, NoiseParameters, NormalNoise } from 'deepslate'\nimport type { VersionId } from '../services'\n\nexport type NoiseOptions = {\n\toffset: [number, number],\n\tscale: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nexport function normalNoise(state: any, img: ImageData, options: NoiseOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst params = NoiseParameters.fromJson(DataModel.unwrapLists(state))\n\tconst noise = new NormalNoise(random, params)\n\n\tconst ox = -options.offset[0] - 100\n\tconst oz = -options.offset[1] - 100\n\tconst data = img.data\n\tfor (let x = 0; x < 256; x += 1) {\n\t\tfor (let y = 0; y < 256; y += 1) {\n\t\t\tconst i = x * 4 + y * 4 * 256\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oz) * options.scale\n\t\t\tconst color = (noise.sample(xx, yy, 0) + 1) * 128\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","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useCanvas } from '../../hooks'\nimport { locale } from '../../Locales'\nimport { noiseSettings } from '../../previews'\nimport { checkVersion } from '../../services'\nimport { randomSeed } from '../../Utils'\n\nexport const NoiseSettingsPreview = ({ lang, data, shown, version }: PreviewProps) => {\n\tconst loc = locale.bind(null, lang)\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [focused, setFocused] = useState(undefined)\n\tconst offset = useRef(0)\n\tconst state = JSON.stringify([data, biomeScale, biomeDepth])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { biomeDepth, biomeScale, offset: offset.current, width: img.width, seed, version }\n\t\t\tnoiseSettings(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(_, y) {\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tsetFocused(`${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, seed, shown])\n\n\treturn <>\n\t\t
\n\t\t\t{focused && }\n\t\t\t{checkVersion(version, undefined, '1.17') &&\n\t\t\t\t\n\t\t\t\t\t setBiomeScale(Number(v))} />\n\t\t\t\t\t setBiomeDepth(Number(v))} />\n\t\t\t\t\n\t\t\t}\n\t\t\t setSeed(randomSeed())} />\n\t\t
\n\t\t\n\t\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport type { VersionId } from '../../services'\nimport { BiomeSourcePreview, DecoratorPreview, NoisePreview, NoiseSettingsPreview } from '../previews'\n\nexport const HasPreview = ['dimension', 'worldgen/noise', 'worldgen/noise_settings', 'worldgen/configured_feature']\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\tif (id === 'dimension' && model?.get(new Path(['generator', 'type']))?.endsWith('noise')) {\n\t\tconst data = model.get(new Path(['generator', 'biome_source']))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/noise' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/noise_settings' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\tif (id === 'worldgen/configured_feature' && model) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return \n\t}\n\n\treturn <>\n}\n","import type { Hook } from '@mcschema/core'\nimport { relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../services'\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\tconst res = value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj.node, props)\n\t\t)\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a as any]\n\t\t}\n\t\treturn res\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\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\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\tconst out = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t\tif (out !== undefined && out !== null) {\n\t\t\t\t\tres[f] = out\n\t\t\t\t}\n\t\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n}\n","import type { VersionId } from './services'\nimport { VersionIds } from './services'\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\texport const ID_FORMAT = 'output_format'\n\texport const ID_SOUNDS_VERSION = 'minecraft_sounds_version'\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 getFormat() {\n\t\treturn localStorage.getItem(ID_FORMAT) ?? 'json'\n\t}\n\n\texport function getSoundsVersion() {\n\t\treturn localStorage.getItem(ID_SOUNDS_VERSION) ?? 'latest'\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 | undefined) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n\n\texport function setFormat(format: string | undefined) {\n\t\tif (format) localStorage.setItem(ID_FORMAT, format)\n\t}\n\n\texport function setSoundsVersion(version: string | undefined) {\n\t\tif (version) localStorage.setItem(ID_SOUNDS_VERSION, version)\n\t}\n}\n","import { DataModel, ModelPath } from '@mcschema/core'\nimport json from 'comment-json'\nimport yaml from 'js-yaml'\nimport { useCallback, 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 '../../services'\nimport { Store } from '../../Store'\nimport { message } from '../../Utils'\n\nconst OUTPUT_CHARS_LIMIT = 10000\n\nconst INDENT: Record = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n\tminified: undefined,\n}\n\nconst FORMATS: Record any,\n\tstringify: (v: any, indentation: string | number | undefined) => string,\n}> = {\n\tjson: {\n\t\tparse: json.parse,\n\t\tstringify: (v, i) => json.stringify(v, null, i),\n\t},\n\tyaml: {\n\t\tparse: yaml.load,\n\t\tstringify: (v, i) => yaml.dump(v, {\n\t\t\tflowLevel: i === undefined ? 0 : -1,\n\t\t\tindent: typeof i === 'string' ? 4 : i,\n\t\t}),\n\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\tcopySuccess: () => unknown,\n\tonError: (message: string) => unknown,\n}\nexport function SourcePanel({ lang, name, model, blockStates, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst [format, setFormat] = useState(Store.getFormat())\n\tconst source = useRef(null)\n\tconst download = useRef(null)\n\tconst retransform = useRef()\n\n\tconst getOutput = useCallback((model: DataModel, blockStates: BlockStateRegistry) => {\n\t\tconst data = model.schema.hook(transformOutput, new ModelPath(model), model.data, { blockStates })\n\t\treturn FORMATS[format].stringify(data, INDENT[indent]) + '\\n'\n\t}, [indent, format])\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst output = getOutput(model, blockStates)\n\t\t\t\tif (output.length >= OUTPUT_CHARS_LIMIT) {\n\t\t\t\t\tsource.current.value = output.slice(0, OUTPUT_CHARS_LIMIT) + `\\n\\nOutput is too large to display (+${OUTPUT_CHARS_LIMIT} chars)\\nExport to view complete output\\n\\n`\n\t\t\t\t} else {\n\t\t\t\t\tsource.current.value = output\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonError(`Error getting JSON output: ${message(e)}`)\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\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\n\n\tuseEffect(() => {\n\t\tretransform.current()\n\t}, [indent, format])\n\n\tconst onImport = () => {\n\t\tif (source.current.value.length === 0) return\n\t\ttry {\n\t\t\tconst data = FORMATS[format].parse(source.current.value)\n\t\t\tmodel?.reset(DataModel.wrapLists(data), false)\n\t\t} catch (e) {\n\t\t\tonError(`Error importing: ${message(e)}`)\n\t\t\tconsole.error(e)\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (doCopy && model && blockStates) {\n\t\t\tnavigator.clipboard.writeText(getOutput(model, blockStates)).then(() => {\n\t\t\t\tcopySuccess()\n\t\t\t})\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && model && blockStates && download.current) {\n\t\t\tconst content = encodeURIComponent(getOutput(model, blockStates))\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.${format}`)\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\tconst changeFormat = (value: string) => {\n\t\tStore.setFormat(value)\n\t\tsetFormat(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\t
\n\t\t\t\t{Object.keys(FORMATS).map(key =>\n\t\t\t\t\t changeFormat(key)} />)}\n\t\t\t
\n\t\t
\n\t\t\n\t\t\n\t\n}\n","import type { INode, Path } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\n\nexport class ModelWrapper extends DataModel {\n\tconstructor(\n\t\tschema: INode,\n\t\tprivate readonly mapper: (path: Path) => Path,\n\t\tprivate readonly getter: (path: Path) => any,\n\t\tprivate readonly setter: (path: Path, value: any, silent?: boolean) => any,\n\t) {\n\t\tsuper(schema)\n\t}\n\n\tmap(path: Path) {\n\t\treturn this.mapper(path)\n\t}\n\n\tget(path: Path) {\n\t\treturn this.getter(path)\n\t}\n\n\tset(path: Path, value: any, silent?: boolean) {\n\t\treturn this.setter(path, value, silent)\n\t}\n}\n","import type { BooleanHookParams, EnumOption, Hook, INode, NodeChildren, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, ListNode, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { memo } from 'preact/compat'\nimport { useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, Octicon } from '../components'\nimport { useFocus } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { CachedDecorator, CachedFeature } from '../services'\nimport { deepClone, deepEqual, hexId, isObject, newSeed } from '../Utils'\nimport { ModelWrapper } from './ModelWrapper'\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'recipe.type', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'dimension.generator.biome_source.preset', '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', 'block_predicate.type', 'material_rule.type', 'material_condition.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', 'decorator.block_survives_filter.state', 'material_rule.block.result_state']\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', 'generator_biome.biome', 'block_predicate.type', 'material_rule.type', 'material_condition.type']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\nconst fixedLists = ['generator_biome.parameters.temperature', 'generator_biome.parameters.humidity', 'generator_biome.parameters.continentalness', 'generator_biome.parameters.erosion', 'generator_biome.parameters.depth', 'generator_biome.parameters.weirdness', 'feature.end_spike.crystal_beam_target', 'feature.end_gateway.exit', 'decorator.block_filter.offset', 'block_predicate.matching_blocks.offset', 'block_predicate.matching_fluids.offset', 'model_element.from', 'model_element.to', 'model_element.rotation.origin', 'model_element.faces.uv', 'item_transform.rotation', 'item_transform.translation', 'item_transform.scale']\nconst collapsedFields = ['noise_settings.surface_rule', 'noise_settings.noise.terrain_shaper']\n\nconst findGenerator = (id: string) => {\n\treturn config.generators.find(g => g.id === id.replace(/^\\$/, ''))\n}\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\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, VersionId, BlockStateRegistry, Record], JSXTriple>\n\ntype NodeProps = T & {\n\tnode: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record,\n}\n\nexport function FullNode({ model, lang, version, blockStates }: { model: DataModel, lang: string, version: VersionId, blockStates: BlockStateRegistry }) {\n\tconst path = new ModelPath(model)\n\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, deepClone(model.data), lang, version, blockStates, {})\n\treturn suffix?.props?.children.some((c: any) => c) ?
\n\t\t
{prefix}{suffix}
\n\t\t
{body}
\n\t
: body\n}\n\nconst renderHtml: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, version, states, ctx) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, version, states, ctx)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (type: string) => {\n\t\t\tconst c = choices.find(c => c.type === type) ?? choice\n\t\t\tconst def = c.node.default()\n\t\t\tconst newValue = c.change\n\t\t\t\t? c.change(DataModel.unwrapLists(value))\n\t\t\t\t: config.choiceContext === 'feature' && def?.type === 'minecraft:decorated' ? def.config.feature : def\n\t\t\tpath.model.set(path, DataModel.wrapLists(newValue))\n\t\t}\n\t\tconst inject = \n\t\treturn [prefix, <>{inject}{suffix}, body]\n\t},\n\n\tlist({ children, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\t\tconst [maxShown, setMaxShown] = useState(50)\n\n\t\tconst context = path.getContext().join('.')\n\t\tif (fixedLists.includes(context)) {\n\t\t\tconst prefix = <>\n\t\t\t\t{[...Array(config.maxLength!)].map((_, i) =>\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\n\t\t\tconst suffix = <>{[...Array(config.maxLength)].map((_, i) => {\n\t\t\t\tconst child = children.hook(this, path.modelPush(i), value?.[i]?.node, lang, version, states, ctx)\n\t\t\t\treturn child[1]\n\t\t\t})}\n\t\t\treturn [prefix, suffix, null]\n\t\t}\n\n\t\tconst onAdd = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [{ node, id: hexId() }, ...value])\n\t\t}\n\t\tconst onAddBottom = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [...value, { node, id: hexId() }])\n\t\t}\n\t\tconst suffix = \n\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map(({ node: cValue, id: cId }, index) => {\n\t\t\t\tif (index === maxShown) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\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\tif (index > maxShown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(cId)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t}\n\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst actions: MenuAction[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'duplicate',\n\t\t\t\t\t\tlabel: 'duplicate',\n\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\tconst v = [...path.get()]\n\t\t\t\t\t\t\tv.splice(index, 0, { id: hexId(), node: deepClone(cValue) })\n\t\t\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\treturn \n\t\t\t\t\t{canToggle && }\n\t\t\t\t\t\n\t\t\t\t\t{value.length > 1 &&
\n\t\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\t{(value && value.length > 0 && value.length <= maxShown) &&
\n\t\t\t\t\n\t\t\t
}\n\t\t\n\t\treturn [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), DataModel.wrapLists(children.default()))\n\t\t}\n\t\tconst blockState = config.validation?.validator === 'block_state_map' ? states?.[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\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, lang, version, states, ctx)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, version, states, ctx)[1]}\n\t\t\t\n\t\t\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(key)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\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\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn \n\t\t\t\t\t{canToggle && }\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t})}\n\t\t\n\t\treturn [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n\n\tobject({ node, config, getActiveFields, getChildModelPath }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tif (path.getArray().length == 0 && isDecorated(config.context, value)) {\n\t\t\tconst { wrapper, fields } = createDecoratorsWrapper(getActiveFields(path), path, value)\n\t\t\tvalue = wrapper.data\n\t\t\tgetActiveFields = () => fields\n\t\t\tgetChildModelPath = (path, key) => new ModelPath(wrapper, new Path(path.getArray(), ['feature'])).push(key)\n\t\t}\n\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(DataModel.wrapLists(node.default()))\n\t\t\t\tsuffix = \n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = \n\t\t\t}\n\t\t}\n\t\tconst context = path.getContext().join('.')\n\t\tif (collapsedFields.includes(context)) {\n\t\t\tconst toggled = isToggled('')\n\t\t\tprefix = <>\n\t\t\t\t\n\t\t\t\n\t\t\tif (!toggled) {\n\t\t\t\treturn [prefix, suffix, null]\n\t\t\t}\n\t\t}\n\n\t\tconst newCtx = (typeof value === 'object' && value !== null && node.default()?.pools)\n\t\t\t? { ...ctx, loot: value?.type } : ctx\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && value !== null && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, version, states, newCtx)\n\t\t\t\t\t\tif (!cPrefix && !cSuffix && !((cBody?.props?.children?.length ?? 0) > 0)) return null\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}{cPrefix}\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \n\t\t\t\t\t})\n\t\t\t}\n\t\t\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, , null]\n\t},\n}\n\nfunction Collapsed({ path, value }: { path: ModelPath, value: any, schema: INode }) {\n\tconst context = path.getContext().join('.')\n\tswitch (context) {\n\t\tcase 'loot_table.pools.entry':\n\t\t\treturn \n\t\tcase 'function.set_contents.entries.entry':\n\t\tcase 'loot_pool.entries.entry':\n\t\t\treturn \n\t}\n\tfor (const child of Object.values(value ?? {})) {\n\t\tif (typeof child === 'string') {\n\t\t\treturn \n\t\t}\n\t}\n\treturn null\n}\n\nfunction useToggles() {\n\tconst [toggleState, setToggleState] = useState(new Map())\n\tconst [toggleAll, setToggleAll] = useState(undefined)\n\n\tconst expand = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(true)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, true)))\n\t\t}\n\t}\n\tconst collapse = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(false)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, false)))\n\t\t}\n\t}\n\t\n\tconst isToggled = (key: string) => {\n\t\tif (!(toggleState instanceof Map)) return false\n\t\treturn toggleState.get(key) ?? toggleAll\n\t}\n\n\treturn { expand, collapse, isToggled }\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t\n\t\t\n\t\n}\n\nfunction NumberSuffix({ path, config, integer, value, lang }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\tconst onColor = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = parseInt(value.slice(1), 16)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn <>\n\t\t {if (evt.key === 'Enter') onChange(evt)}} />\n\t\t{config?.color && }\n\t\t{['dimension.generator.seed', 'dimension.generator.biome_source.seed', 'world_settings.seed'].includes(path.getContext().join('.')) && }\n\t\n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, version, states }: NodeProps) {\n\tconst onChange = (evt: Event) => {\n\t\tevt.stopPropagation()\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tif (newValue === value) return\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tconst id = !isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string' ? config.params.pool : undefined\n\n\tif (nbtFields.includes(context)) {\n\t\treturn \n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (id) {\n\t\t\tcontext = context.contextPush(id)\n\t\t} else if (isEnum(config)) {\n\t\t\tcontext = path\n\t\t}\n\t\treturn \n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn \n\t} else {\n\t\tconst datalistId = hexId()\n\t\tconst gen = id ? findGenerator(id) : undefined\n\t\treturn <>\n\t\t\t {if (evt.key === 'Enter') onChange(evt)}}\n\t\t\t\tlist={values.length > 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && \n\t\t\t\t{values.map(v => }\n\t\t\t{gen && values.includes(value) && value.startsWith('minecraft:') &&\n\t\t\t\t{Octicon.link_external}}\n\t\t\n\t}\n}\n\ntype MenuAction = {\n\tlabel: string,\n\tdescription?: string,\n\ticon: keyof typeof Octicon,\n\tonSelect: () => unknown,\n}\n\ntype TreeNodeProps = {\n\tschema: INode,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record,\n\tcompare?: any,\n\tlabel?: string,\n\tactions?: MenuAction[],\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, version, states, ctx, actions, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst context = path.getContext().join('.')\n\n\tconst [active, setActive] = useFocus()\n\tconst onContextMenu = (evt: MouseEvent) => {\n\t\tevt.preventDefault()\n\t\tsetActive()\n\t}\n\n\tconst newCtx: Record = { ...ctx, depth: (ctx.depth ?? 0) + 1 }\n\tdelete newCtx.index\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, version, states, newCtx)\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t\n\t\t\t{suffix}\n\t\t
\n\t\t{body &&
{body}
}\n\t
\n}\n\nconst MemoedTreeNode = memo(TreeNode, (prev, next) => {\n\treturn prev.schema === next.schema\n\t\t&& prev.lang === next.lang\n\t\t&& prev.path.equals(next.path)\n\t\t&& deepEqual(prev.ctx, next.ctx)\n\t\t&& deepEqual(prev.value, next.value)\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(lang: string, 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 = locale(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path, nested }: { lang: string, path: ModelPath, nested?: boolean }) {\n\tif (path.model instanceof ModelWrapper) {\n\t\tpath = path.model.map(path).withModel(path.model)\n\t}\n\tconst e = nested\n\t\t?\tpath.model.errors.getAll().filter(e => e.path.startsWith(path))\n\t\t: path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = locale(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = locale(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t{Octicon[icon]}\n\t\t{popup}\n\t
\n}\n\nfunction isDecorated(context: string | undefined, value: any) {\n\treturn context === 'feature'\n\t\t&& value?.type?.replace(/^minecraft:/, '') === 'decorated'\n\t\t&& isObject(value?.config)\n}\n\nfunction createDecoratorsWrapper(originalFields: NodeChildren, path: ModelPath, value: any) {\n\tconst decorators: any[] = []\n\tconst feature = iterateNestedDecorators(value, decorators)\n\tconst fields = {\n\t\ttype: originalFields.type,\n\t\tconfig: ObjectNode({\n\t\t\tdecorators: ListNode(CachedDecorator),\n\t\t\tfeature: CachedFeature,\n\t\t}, { context: 'feature.decorated' }),\n\t}\n\tconst schema = ObjectNode(fields, { context: 'feature' })\n\tconst featurePath = new Path(['config', 'feature'])\n\tconst decoratorsPath = new Path(['config', 'decorators'])\n\tconst model = path.getModel()\n\tconst wrapper: ModelWrapper = new ModelWrapper(schema, path => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\treturn new Path([...[...Array(decorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\treturn new Path([])\n\t\t\t}\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (typeof index === 'number') {\n\t\t\t\treturn new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t}\n\t\t}\n\t\treturn path\n\t}, path => {\n\t\tif (path.equals(decoratorsPath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\treturn newDecorators\n\t\t}\n\t\treturn model.get(wrapper.map(path))\n\t}, (path, value, silent) => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\tconst newPath =new Path([...[...Array(newDecorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t\treturn model.set(newPath, value, silent)\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\treturn model.set(new Path(), produceNestedDecorators(feature, value), silent)\n\t\t\t} else if (typeof index === 'number') {\n\t\t\t\tif (path.modelArr.length === 3 && value === undefined) {\n\t\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\t\tconst newDecorators: any[] = []\n\t\t\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\t\t\tnewDecorators.splice(index, 1)\n\t\t\t\t\tconst newValue = produceNestedDecorators(feature, newDecorators)\n\t\t\t\t\treturn model.set(new Path(), newValue, silent)\n\t\t\t\t} else {\n\t\t\t\t\tconst newPath = new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t\t\treturn model.set(newPath, value, silent)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tmodel.set(path, value, silent)\n\t})\n\twrapper.data = {\n\t\ttype: model.data.type,\n\t\tconfig: {\n\t\t\tdecorators,\n\t\t\tfeature,\n\t\t},\n\t}\n\twrapper.errors = model.errors\n\treturn { fields, wrapper }\n}\n\nfunction iterateNestedDecorators(value: any, decorators: any[]): any {\n\tif (value?.type?.replace(/^minecraft:/, '') !== 'decorated') {\n\t\treturn value\n\t}\n\tif (!isObject(value?.config)) {\n\t\treturn value\n\t}\n\tdecorators.push({ id: decorators.length, node: value.config.decorator })\n\treturn iterateNestedDecorators(value.config.feature ?? '', decorators)\n}\n\nfunction produceNestedDecorators(feature: any, decorators: any[]): any {\n\tif (decorators.length === 0) return feature\n\treturn {\n\t\ttype: 'minecraft:decorated',\n\t\tconfig: {\n\t\t\tdecorator: decorators.shift().node,\n\t\t\tfeature: produceNestedDecorators(feature, decorators),\n\t\t},\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useErrorBoundary, useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport { FullNode } from '../../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../../services'\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, version, model, blockStates, onError }: TreePanelProps) {\n\tif (!model || !blockStates || lang === 'none') return <>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <>\n\n\tconst [, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\treturn
\n\t\t\n\t
\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 '../services'\nimport { checkVersion } from '../services'\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 { Howl } from 'howler'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, NumberInput, RangeInput, TextInput } from '..'\nimport { locale } from '../../Locales'\nimport type { SoundEvents, VersionAssets } from '../../services'\nimport { getResourceUrl } from '../../services'\n\nexport interface SoundConfig {\n\tid: string,\n\tsound: string,\n\tdelay: number,\n\tpitch: number,\n\tvolume: number,\n}\ntype SoundConfigProps = SoundConfig & {\n\tlang: string,\n\tassets: VersionAssets,\n\tsounds: SoundEvents,\n\tonEdit: (changes: Partial) => unknown,\n\tonDelete: () => unknown,\n\tdelayedPlay?: number,\n}\nexport function SoundConfig({ lang, assets, sounds, sound, delay, pitch, volume, onEdit, onDelete, delayedPlay }: SoundConfigProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [loading, setLoading] = useState(true)\n\tconst [playing, setPlaying] = useState(false)\n\tconst [invalid, setInvalid] = useState(false)\n\tconst howls = useRef([])\n\tconst command = `playsound minecraft:${sound} master @s ~ ~ ~ ${volume} ${pitch}`\n\n\tuseEffect(() => {\n\t\tconst soundEvent = sounds[sound]\n\t\tsetInvalid((soundEvent?.sounds?.length ?? 0) === 0)\n\t\thowls.current.forEach(h => h.stop())\n\t\thowls.current = (soundEvent?.sounds ?? []).map(entry => {\n\t\t\tconst soundPath = typeof entry === 'string' ? entry : entry.name\n\t\t\tconst hash = assets[`minecraft/sounds/${soundPath}.ogg`].hash\n\t\t\tconst url = getResourceUrl(hash)\n\t\t\tconst howl = new Howl({\n\t\t\t\tsrc: [url],\n\t\t\t\tformat: ['ogg'],\n\t\t\t\tvolume,\n\t\t\t\trate: pitch,\n\t\t\t})\n\t\t\thowl.on('end', () => {\n\t\t\t\tsetPlaying(false)\n\t\t\t})\n\t\t\tconst completed = () => {\n\t\t\t\tif (loading && howls.current.every(h => h.state() === 'loaded')) {\n\t\t\t\t\tsetLoading(false)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (howl.state() === 'loaded') {\n\t\t\t\tsetTimeout(() => completed())\n\t\t\t} else {\n\t\t\t\thowl.on('load', () => {\n\t\t\t\t\tcompleted()\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn howl\n\t\t})\n\t\tsetLoading(true)\n\t}, [sound, sounds])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.rate(pitch))\n\t}, [pitch])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.volume(volume))\n\t}, [volume])\n\n\tconst play = () => {\n\t\tif (loading || invalid) return\n\t\tstop()\n\t\tconst howl = Math.floor(Math.random() * howls.current.length)\n\t\thowls.current[howl].play()\n\t\tsetPlaying(true)\n\t}\n\tconst stop = () => {\n\t\thowls.current.forEach(h => h.stop())\n\t}\n\tuseEffect(() => {\n\t\tif (delayedPlay) setTimeout(() => play(), delay * 50)\n\t}, [delayedPlay])\n\n\tuseEffect(() => {\n\t\treturn () => stop()\n\t}, [])\n\n\tconst [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef(undefined)\n\tconst copy = () => {\n\t\tnavigator.clipboard.writeText(command)\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\treturn
\n\t\t\n\t\t onEdit({ sound })} />\n\t\t\n\t\t onEdit({ delay })} />\n\t\t\n\t\t onEdit({ pitch })} />\n\t\t\n\t\t onEdit({ volume })} />\n\t\t\n\t\t {onDelete(); stop()}} />\n\t
\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tdesc?: string,\n\tlink?: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, desc, link, icon, children }: ToolCardProps) {\n\tconst content = <>\n\t\t
\n\t\t\t{icon && Icons[icon]}\n\t\t\t
\n\t\t\t\t

{title}

\n\t\t\t\t

{desc}

\n\t\t\t
\n\t\t
\n\t\t{children &&
\n\t\t\t{children}\n\t\t
}\n\t\n\treturn link\n\t\t? {content}\n\t\t:
{content}
\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { locale } from '../Locales'\nimport { cleanUrl } from '../Utils'\n\ntype WorldgenProps = {\n\tcategory: string,\n\tlang: string,\n\tchangeTitle: (title: string) => unknown,\n\tpath?: string,\n}\nexport function Category({ category, lang, changeTitle }: WorldgenProps) {\n\tconst loc = locale.bind(null, lang)\n\tchangeTitle(loc('title.generator_category', loc(category)))\n\treturn
\n\t\t
\n\t\t\t{config.generators.filter(g => g.category === category).map(g => \n\t\t\t\t\n\t\t\t)}\n\t\t
\n\t
\n}\n","import marked from 'marked'\nimport { useEffect, useMemo, useState } from 'preact/hooks'\nimport { Ad, Btn, ErrorPanel, Octicon, TextInput } from '../components'\nimport { locale } from '../Locales'\nimport type { ChangelogEntry, ChangelogVersion, VersionId } from '../services'\nimport { getChangelogs } from '../services'\nimport { hashString } from '../Utils'\n\ntype ChangelogProps = {\n\tpath?: string,\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n}\nexport function Changelog({ lang, changeTitle }: ChangelogProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tchangeTitle(loc('title.changelog'))\n\n\tconst [changelogs, setChangelogs] = useState([])\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(changelogs))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\tconst [search, setSearch] = useState('')\n\tconst [tags, setTags] = useState([])\n\tconst toggleTag = (tag: string) => {\n\t\tif (!tags.includes(tag)) {\n\t\t\tsetTags([...tags, tag])\n\t\t} else {\n\t\t\tsetTags(tags.filter(t => t !== tag))\n\t\t}\n\t}\n\n\tconst filteredChangelogs = useMemo(() => {\n\t\tconst query = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)\n\t\tif (query.length === 0 && tags.length === 0) return changelogs\n\t\treturn changelogs.filter(change => {\n\t\t\tif (!tags.every(tag => change.tags.includes(tag))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst content = change.tags.join(' ') + ' ' + change.content.toLowerCase()\n\t\t\treturn query.every(q => {\n\t\t\t\tif (q.startsWith('!')) {\n\t\t\t\t\treturn q.length === 1 || !content.includes(q.slice(1))\n\t\t\t\t}\n\t\t\t\treturn content.includes(q)\n\t\t\t})\n\t\t})\n\t}, [changelogs, search, tags])\n\n\tconst [sort, setSort] = useState(true)\n\n\tconst sortedChangelogs = useMemo(() => {\n\t\treturn filteredChangelogs.sort((a, b) => sort ? b.order - a.order : a.order - b.order)\n\t}, [filteredChangelogs, sort])\n\n\treturn
\n\t\t\n\t\t{error && setError(null)} />}\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t setSort(!sort)} />\n\t\t\t
\n\t\t\t{tags.length > 0 &&
\n\t\t\t\t{tags.map(tag => setTags(tags.filter(t => t !== tag))} />)}\n\t\t\t
}\n\t\t
\n\t\t
\n\t\t\t{sortedChangelogs.map(change =>\n\t\t\t\t)}\n\t\t
\n\t
\n}\n\ntype ChangeProps = {\n\tchange: ChangelogEntry,\n\tactiveTags: string[],\n\ttoggleTag: (tag: string) => unknown,\n}\nfunction Change({ change, activeTags, toggleTag }: ChangeProps) {\n\treturn
\n\t\t
\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t{change.tags.map(tag => toggleTag(tag)} active={activeTags.includes(tag)} />)}\n\t\t
\n\t\t
\n\t
\n}\n\nfunction ArticleLink({ id, article }: ChangelogVersion) {\n\treturn article === null\n\t\t? {id}\n\t\t: {id}\n}\n\ntype TagProps = {\n\tlabel: string,\n\tactive?: boolean,\n\tonClick?: () => unknown,\n}\nfunction Tag({ label, active, onClick }: TagProps) {\n\tconst color = label === 'breaking' ? 5 : hashString(label) % 360\n\treturn
\n\t\t{label === 'breaking' && Octicon.alert}\n\t\t{label}\n\t
\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport { getCurrentUrl } from 'preact-router'\nimport { useEffect, useErrorBoundary, useRef, 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 { useModel } from '../hooks'\nimport { locale } from '../Locales'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { checkVersion, fetchPreset, getBlockStates, getCollections, getModel } from '../services'\nimport { getGenerator, getSearchParams, message, setSeachParams } from '../Utils'\n\ntype GeneratorProps = {\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n\tdefault?: true,\n}\nexport function Generator({ lang, changeTitle, version, changeVersion }: 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\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion, gen.maxVersion))\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 searchParams = getSearchParams(getCurrentUrl())\n\tconst currentPreset = searchParams.get('preset')\n\tuseEffect(() => {\n\t\tif (model && currentPreset) {\n\t\t\tselectPreset(currentPreset)\n\t\t}\n\t}, [currentPreset])\n\n\tconst [model, setModel] = useState(null)\n\tconst [blockStates, setBlockStates] = useState(null)\n\tuseEffect(() => {\n\t\tsetError(null)\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(async m => {\n\t\t\t\tAnalytics.setGenerator(gen.id)\n\t\t\t\tif (currentPreset) {\n\t\t\t\t\tconst preset = await loadPreset(currentPreset)\n\t\t\t\t\tm.reset(DataModel.wrapLists(preset), false)\n\t\t\t\t}\n\t\t\t\tsetModel(m)\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(message(e)) })\n\t}, [version, gen.id])\n\n\tuseModel(model, () => {\n\t\tsetSeachParams({ version: undefined, preset: undefined })\n\t\tsetError(null)\n\t})\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(DataModel.wrapLists(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 selectPreset = (id: string) => {\n\t\tloadPreset(id).then(preset => {\n\t\t\tmodel?.reset(DataModel.wrapLists(preset), false)\n\t\t\tsetSeachParams({ version, preset: id })\n\t\t})\n\t}\n\n\tconst loadPreset = async (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\ttry {\n\t\t\tconst preset = await fetchPreset(version, gen.path ?? gen.id, id)\n\t\t\tconst seed = model?.get(new Path(['generator', 'seed']))\n\t\t\tif (preset?.generator?.seed !== undefined && seed !== undefined) {\n\t\t\t\tpreset.generator.seed = seed\n\t\t\t\tif (preset.generator.biome_source?.seed !== undefined) {\n\t\t\t\t\tpreset.generator.biome_source.seed = seed\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn preset\n\t\t} catch (e) {\n\t\t\tsetError(message(e))\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 [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef(undefined)\n\tconst copySuccess = () => {\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\tconst hasPreview = HasPreview.includes(gen.id)\n\tif (previewShown && !hasPreview) setPreviewShown(false)\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 => selectPreset(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 changeVersion(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{copyActive ? Octicon.check : 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\n\t\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{config.generators.filter(g => g.category === 'assets').map(g =>\n\t\t\t\t\t\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\n\t\t
\n\t
\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Ad, Btn, BtnMenu, ErrorPanel, SoundConfig, TextInput } from '../components'\nimport { locale } from '../Locales'\nimport type { SoundEvents, VersionAssets, VersionId } from '../services'\nimport { getAssets, getSounds } from '../services'\nimport { hexId, message } from '../Utils'\n\ntype SoundsProps = {\n\tpath?: string,\n\tlang: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n}\nexport function Sounds({ lang, changeTitle, version, changeVersion }: SoundsProps) {\n\tconst loc = locale.bind(null, lang)\n\tconst [error, setError] = useState(null)\n\tchangeTitle(loc('title.sounds'))\n\n\tconst [assets, setAssets] = useState({})\n\tconst [sounds, setSounds] = useState({})\n\tconst soundKeys = Object.keys(sounds ?? {})\n\tuseEffect(() => {\n\t\tgetAssets(version)\n\t\t\t.then(assets => { setAssets(assets); return getSounds(version) })\n\t\t\t.then(sounds => { if (sounds) setSounds(sounds) })\n\t\t\t.catch(e => { console.error(e); setError(message(e)) })\n\t}, [version])\n\n\tconst [search, setSearch] = useState('')\n\tconst [configs, setConfigs] = useState([])\n\tconst addConfig = () => {\n\t\tsetConfigs([{ id: hexId(), sound: search, delay: 0, pitch: 1, volume: 1 }, ...configs])\n\t}\n\tconst editConfig = (id: string) => (changes: Partial) => {\n\t\tsetConfigs(configs.map(c => c.id === id ? { ...c, ...changes } : c))\n\t}\n\tconst deleteConfig = (id: string) => () => {\n\t\tsetConfigs(configs.filter(c => c.id !== id))\n\t}\n\n\tconst [delayedPlay, setDelayedPlay] = useState(0)\n\tconst playAll = () => {\n\t\tsetDelayedPlay(delayedPlay + 1)\n\t}\n\n\tconst download = useRef(null)\n\tconst downloadFunction = () => {\n\t\tconst hasDelay = configs.some(c => c.delay > 0)\n\t\tconst content = configs\n\t\t\t.sort((a, b) => a.delay - b.delay)\n\t\t\t.map(c => `${hasDelay ? `execute if score @s delay matches ${c.delay} run ` : ''}playsound minecraft:${c.sound} master @s ~ ~ ~ ${c.volume} ${c.pitch}`)\n\t\t\t.join('\\n')\n\t\tdownload.current.setAttribute('href', 'data:text/plain;charset=utf-8,' + content + '%0A')\n\t\tdownload.current.setAttribute('download', 'sounds.mcfunction')\n\t\tdownload.current.click()\n\t}\n\n\treturn
\n\t\t\n\t\t{error && setError(null)} />}\n\t\t{soundKeys.length > 0 && <>\n\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
\n\t\t\t\t{configs.length > 1 && }\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{config.versions.reverse().map(v =>\n\t\t\t\t\t\t changeVersion(v.id as VersionId)} />\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t{configs.map(c => )}\n\t\t\t
\n\t\t\t\n\t\t}\n\t\t\n\t\t\t{soundKeys.map(s => \n\t
\n}\n","import { render } from 'preact'\nimport type { RouterOnChangeArgs } from 'preact-router'\nimport { getCurrentUrl, Router } from 'preact-router'\nimport { useCallback, useEffect, useState } from 'preact/hooks'\nimport config from '../config.json'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { loadLocale, locale, Locales } from './Locales'\nimport { Category, Changelog, Generator, Home, Sounds } from './pages'\nimport type { VersionId } from './services'\nimport { VersionIds } from './services'\nimport { Store } from './Store'\nimport { cleanUrl, getSearchParams, setSeachParams } from './Utils'\n\nconst VERSIONS_IN_TITLE = 3\n\nfunction Main() {\n\tconst [lang, setLanguage] = useState('none')\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 searchParams = getSearchParams(getCurrentUrl())\n\tconst targetVersion = searchParams.get('version')\n\tconst [version, setVersion] = useState(Store.getVersion())\n\tconst changeVersion = useCallback((version: VersionId) => {\n\t\tif (getSearchParams(getCurrentUrl()).has('version')) {\n\t\t\tsetSeachParams({ version })\n\t\t}\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}, [targetVersion])\n\tuseEffect(() => {\n\t\tif (VersionIds.includes(targetVersion as VersionId) && version !== targetVersion) {\n\t\t\tsetVersion(targetVersion as VersionId)\n\t\t}\n\t}, [version, targetVersion])\n\n\tconst [title, setTitle] = useState(locale(lang, 'title.home'))\n\tconst changeTitle = (title: string, versions?: VersionId[]) => {\n\t\tversions ??= config.versions.map(v => v.id as VersionId)\n\t\tconst titleVersions = versions.slice(versions.length - VERSIONS_IN_TITLE)\n\t\tdocument.title = `${title} Minecraft ${titleVersions.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\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","clazz","tooltip","tooltipLoc","onClick","aria-label","Octicon","large","doSelect","value","placeholder","onChange","onInput","e","value2","target","ref","useRef","current","select","stopPropagation","size","draw","onDrag","onHover","onLeave","inputs","canvas","dragStart","dragRequest","dragPending","dragBusy","onMouseDown","offsetX","offsetY","onMouseMove","x","clientWidth","y2","clientHeight","dx","dy","requestAnimationFrame","async","dx2","dy2","onMouseUp","onMouseLeave","addEventListener","body","removeEventListener","redraw","redrawCount","ctx","getContext","s2","width","height","img","getImageData","ownCount","putImageData","setActive","useState","hider","model","invalidated","listener","[object Object]","addListener","removeListener","relative","children","useFocus","Btn","__spreadProps","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","setGenerator","generator","generatorEvent","alert","xmlns","viewBox","fill-rule","d","archive","arrow_left","arrow_right","check","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","download","duplicate","eye","eye_closed","gear","globe","history","info","issue_opened","kebab_horizontal","link","link_external","mark_github","moon","play","plus","plus_circle","search","sort_asc","sort_desc","stack","sun","sync","tag","terminal","three_bars","trashcan","unfold","upload","x_circle","error","onDismiss","href","component","props","evt","fn","onKeyDown","onEnter","key","__spreadValues","displayName","name","TextInput","BaseInput","v","NumberInput","Number","RangeInput","scriptRel","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","Promise","all","map","dep","isCss","endsWith","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Locales","fallback","English","params","replace","parseInt","match","slice","resolveLocaleParams","en","langConfig","config","languages","find","lang","data","__variableDynamicImportRuntime0__","schema","schemas","__variableDynamicImportRuntime1__","default","obj","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","BigInt","Math","floor","random","MAX_SAFE_INTEGER","seed","dimensions","get","Path","set","keys","forEach","h","i","imul","charCodeAt","url","replaceAll","searchIndex","indexOf","cleanUrl","trimmedUrl","getPath","generators","g2","Map","split","param","decodeURIComponent","modifications","newPath","getCurrentUrl","searchParams","getSearchParams","entries","delete","encodeURIComponent","str","abs","hashString","a2","b","c","max","min","lerp","Error","message","deepClone","rfdc","constructor","isArray","deepEqual","valueOf","Object","prototype","hasOwnProperty","call","forward","backward","this","defaultValue","repo","Changelogs","fetch","json","group","groupIndex","versionIndex","text","entry","tags","substring","trim","content","parseChangelog","order","change","fetchChangelog","parseVersion","flat","fetchGroup","article","isObject","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","1.18","java18","CachedDecorator","CachedFeature","collections","getCollections","blockStates","versionId","collectionTarget","blockStateTarget","versions","JSON","stringify","debug","dynamic","refs","filter","localStorage","getItem","r","hash","matches","cache","caches","open","promises","request","push","warn","deleteMatching","startsWith","setItem","fetchRegistries","fetchBlockStateMap","fetchDynamicRegistries","fetchAssetsRegistries","fetchData","getSchemas","minVersionId","maxVersionId","findIndex","minVersion","maxVersion","removeItem","mcdataUrl","mcassetsUrl","vanillaDatapackUrl","registries","asset","checkVersion","mcdata_master","getData","data2","k","register","path","values","properties","states","assign","vanilla_datapack_summary","Noises","PlacedFeatures","fetchFolder","mcassets","directories","files","d2","ids","registry","versionData","includes","vanilla_datapack_data","parse","noise","terrain_shaper","offset","factor","jaggedness","cacheResponse","ok","fetchResponse","responseData","put","Response","Manifest","VersionAssets","SoundEvents","fetchManifest","manifest","getManifest","latest","snapshot","versionMeta","assetIndex","objects","fetchAssets","assets","getAssets","getResourceUrl","fetchSounds","ready","LAYERS","temperature","humidity","continentalness","erosion","weirdness","cacheState","biomeSourceCache","state","options","newState","octaves","shaper","toJson","FixedBiome","biome","shift","scale","numBiomes","biomes","_y","z","node","preset","NetherPreset18","NetherPreset","fetchPreset","biome_source","OverworldPreset18","DataModel","unwrapLists","init","wasm","loadWasm","BiomeIds","BiMap","p","t0","t1","h0","h1","c0","c1","e0","e1","w0","w1","d0","d1","o","depth","parameters","getOrPut","biome_parameters","Float64Array","Int32Array","sampler","climate_sampler","firstOctave","amplitudes","multi_noise","getA","getBiomes","xFrom","xTo","xStep","yFrom","yTo","yStep","zFrom","zTo","zStep","layers","climate","climate_noise","result","t","w","point","TerrainShaper","has","config2","clamp","NormalNoise","LegacyRandom","n","n2","sample","minDist","Infinity","minBiome","dist","square","altitude","getBiomeSource","biomeSource","biomeColors","color","VanillaColors","stringToColor","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:old_growth_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:old_growth_pine_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_hills","minecraft:gravelly_mountains","minecraft:windswept_gravelly_hills","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:sparse_jungle","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:extreme_hills","minecraft:mountains","minecraft:windswept_hills","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:windswept_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:snowy_plains","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:stony_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:old_growth_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_badlands","minecraft:wooded_hills","minecraft:wooded_mountains","minecraft:windswept_forest","minecraft:snowy_slopes","minecraft:lofty_peaks","minecraft:jagged_peaks","minecraft:snowcapped_peaks","minecraft:frozen_peaks","minecraft:stony_peaks","minecraft:grove","minecraft:meadow","minecraft:lush_caves","minecraft:dripstone_caves","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","placements","features","biomeInfoNoise","PerlinNoise","fork","seaLevel","nextFloat","nextInt","sampleInt","fill","pos","feature","j","base","spread","normalize","min_inclusive","max_inclusive","source","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","f","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","noise_level","below_noise","above_noise","count_noise_biased","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","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","surface_relative_threshold","water_lake","minLimitPerlinNoise","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","cx","ox","noise1","fillNoiseColumn","noise2","yy","oy","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","zo","falloff","density_factor","density_offset","top_slide","clampedLerp","bottom_slide","x2","wrap","y22","z2","minLimitNoise","maxLimitNoise","mainNoise","colors","minecraft:air","minecraft:water","minecraft:lava","minecraft:stone","minecraft:netherrack","minecraft:end_stone","generatorCache","chunkCache","NoiseGeneratorSettings","fromJson","getOctaves","NoiseChunkGenerator","getCached","LevelSlice","minY","generator2","state2","getBlockState","getName","OldNoiseChunkGenerator","reset","row","iterateNoiseColumn","reverse","getColor","minX","filled","chunks","cached","Chunk","ChunkPos","create","Z","chunk","chunkIndex","OverworldShaper","overworld","BiomeSourcePreview","shown","setScale","focused","setFocused","setLayers","Set","refineTimeout","getShaper","calculateState","useCanvas","round","oz","col","xRange","zRange","l2","getClimate","worldX","worldZ","getBiomeColor","getBiome","brightness","biomeMap","setTimeout","xx","zz","toWorld","changeScale","newScale","BtnMenu","locale","enabled","newSeed","densityFactor","densityOffset","DecoratorPreview","setSeed","randomSeed","NoisePreview","NoiseParameters","NoiseSettingsPreview","loc","bind","setBiomeScale","setBiomeDepth","worldY","min_y","BtnInput","HasPreview","setCount","transformOutput","switchNode","hook","getOwnPropertySymbols","blockState","validation","validator","relativePath","getActiveFields","activeFields","out","Store","Store2","getLanguage","getTheme","getVersion","getIndent","getFormat","getSoundsVersion","setIndent","indent","setFormat","format","setSoundsVersion","INDENT","2_spaces","4_spaces","tabs","minified","FORMATS","yaml","dump","flowLevel","doCopy","doDownload","doImport","copySuccess","onError","retransform","getOutput","useCallback","model2","blockStates2","ModelPath","output","clipboard","writeText","setAttribute","click","changeIndent","changeFormat","onBlur","wrapLists","spellcheck","autocorrect","style","mapper","getter","setter","silent","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","fixedLists","collapsedFields","keysModel","MapNode","StringNode","historyMax","prefix","suffix","renderHtml","some","data-category","boolean","BooleanSuffix","choices","choice","activeCase","contextPath","context","getModel","getArray","choiceContextPath","choiceContext","inject","c2","def","newValue","pathLocale","contextPush","expand","collapse","isToggled","useToggles","maxShown","setMaxShown","maxLength","ErrorPopup","modelPush","hexId","cValue","cId","cPath","canToggle","toggle","nested","Collapsed","MemoedTreeNode","actions","onSelect","splice","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","cSchema","number","NumberSuffix","getChildModelPath","isDecorated","wrapper","fields","originalFields","decorators","iterateNestedDecorators","ListNode","featurePath","decoratorsPath","ModelWrapper","path2","modelArr","equals","newDecorators","feature2","produceNestedDecorators","createDecoratorsWrapper","optional","onExpand","onCollapse","toggled","newCtx","pools","loot","child","context2","cPrefix","cSuffix","cBody","isFlattened","isInlined","HelpPopup","string","StringSuffix","toggleState","setToggleState","toggleAll","setToggleAll","ctrlKey","integer","parsed","parseFloat","padStart","getValues","isEnum","pool","additional","datalistId","gen","findGenerator","list","values2","memo","onContextMenu","preventDefault","a","description","navigator","prev","next","withModel","getAll","e2","message2","popupIcon","popup","useErrorBoundary","setState","FullNode","Themes","system","dark","light","title","changeTheme","changeLanguage","getGenerator","Link","Icons","home","route","th","rx","y","report","sounds","cy","clip-rule","sound","delay","pitch","volume","onEdit","onDelete","delayedPlay","loading","setLoading","playing","setPlaying","invalid","setInvalid","howls","command","soundEvent","h2","stop","soundPath","howl","Howl","src","rate","on","completed","every","copyActive","setCopyActive","copyTimeout","step","toFixed","desc","changeTitle","ToolCard","setError","changelogs","setChangelogs","changelogs2","catch","setSearch","setTags","toggleTag","filteredChangelogs","useMemo","query","q2","toLowerCase","sort","setSort","sortedChangelogs","Ad","ErrorPanel","Tag","Change","activeTags","ArticleLink","dangerouslySetInnerHTML","__html","marked","changeVersion","errorBoundary","errorRetry","allowedVersions","currentPreset","setModel","setBlockStates","Reference","ChoiceNode","schemaName","validate","err","m","loadPreset","onKeyUp","undo","redo","presetFilter","setPresetFilter","presetResults","setPresetResults","terms","presets","selectPreset","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","Tree","PreviewPanel","SourcePanel","setAssets","setSounds","soundKeys","assets2","getSounds","sounds2","configs","setConfigs","addConfig","deleteConfig","setDelayedPlay","hasDelay","SoundConfig","changes","loadLocale","documentElement","targetVersion","version2","setTitle","title2","titleVersions","Header","theme2","Router","Home","Category","Sounds","Changelog","Generator","render","Main"],"mappings":"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BACA,uBACA,kBACA,mBACA,4BACA,6BACA,wBACA,kBACA,4BACA,yBACA,mCACA,mCACA,mCACA,2BACA,2BACA,gCACA,mCACA,gCACA,0CACA,oBACA,8BACA,0BACA,wBACA,8BACA,uBACA,8BAGKC,GAAiB,CACtB,2BACA,2BACA,mBACA,yBACA,8BACA,yBACA,0BACA,4BACA,2BACA,0BACA,uBACA,6BACA,qBACA,kCACA,kCACA,sCACA,iCACA,iCACA,uBACA,yBACA,uCACA,sCACA,0BACA,mCACA,6BACA,kBACA,wBACA,sBACA,wBACA,sBACA,8BACA,+BACA,iCACA,sBACA,2BACA,gCACA,+BACA,8BACA,2BACA,iCACA,kCACA,0BACA,yBACA,yBACA,wBACA,2BACA,wBACA,yBACA,yBACA,6BACA,wBACA,sBACA,4BACA,2BACA,sBACA,sBACA,yBACA,2BACA,wBACA,wBACA,sBACA,sBACA,8BACA,kCACA,iCACA,4BACA,0CACA,4BACA,kCACA,qCACA,8BACA,gCACA,yBACA,8BACA,uCACA,2BACA,0BACA,yBACA,wBACA,qCACA,+BACA,+BACA,2BACA,qBACA,2BACA,2BACA,uBACA,6BACA,6BACA,wBACA,+BACA,8BACA,8BACA,8BACA,qBACA,wBACA,qBACA,4BACA,2BACA,2BACA,4BACA,8BACA,8BACA,uBACA,8BACA,yBACA,4BACA,2BACA,2BACA,sBACA,6BACA,sBACA,8BACA,8BACA,yBACA,+BACA,0BACA,qBACA,+BACA,6BACA,mCACA,gCACA,gCACA,4BACA,8BACA,qCACA,uBACA,iCACA,+BACA,+BACA,+BACA,8BACA,gCACA,8BACA,gCACA,6BACA,wBACA,0BACA,4BACA,6BACA,sCACA,oCACA,mCACA,4BACA,6BACA,+BACA,4BACA,yBACA,yBACA,8BACA,gCACA,gCACA,oCACA,+BACA,+BACA,+BACA,uBACA,0BACA,0BACA,+BACA,+BACA,4BACA,2BACA,4BACA,2BACA,0BACA,iCACA,0BACA,0BACA,iCACA,yBACA,wBACA,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"} \ No newline at end of file diff --git a/assets/index.html b/assets/index.html index 169c582d..d828bf91 100644 --- a/assets/index.html +++ b/assets/index.html @@ -20,7 +20,7 @@ Assets Generators Minecraft 1.16, 1.17, 1.18 - + diff --git a/assets/model/index.html b/assets/model/index.html index e6e4063e..5bbc8aa0 100644 --- a/assets/model/index.html +++ b/assets/model/index.html @@ -20,7 +20,7 @@ Model Generator Minecraft 1.18 - + diff --git a/changelog/index.html b/changelog/index.html index 5f35862d..009bed16 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -20,7 +20,7 @@ Technical Changelog Minecraft 1.16, 1.17, 1.18 - + diff --git a/dimension-type/index.html b/dimension-type/index.html index 98d3ee83..f587901a 100644 --- a/dimension-type/index.html +++ b/dimension-type/index.html @@ -20,7 +20,7 @@ Dimension Type Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/dimension/index.html b/dimension/index.html index c3b82793..338b425c 100644 --- a/dimension/index.html +++ b/dimension/index.html @@ -20,7 +20,7 @@ Dimension Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/index.html b/index.html index 38a32581..84778dda 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 abf36ecb..a6bb20ba 100644 --- a/item-modifier/index.html +++ b/item-modifier/index.html @@ -20,7 +20,7 @@ Item Modifier Generator Minecraft 1.17, 1.18 - + diff --git a/loot-table/index.html b/loot-table/index.html index a3ddfff2..0d307ffd 100644 --- a/loot-table/index.html +++ b/loot-table/index.html @@ -20,7 +20,7 @@ Loot Table Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/predicate/index.html b/predicate/index.html index bde515d9..8f679c94 100644 --- a/predicate/index.html +++ b/predicate/index.html @@ -20,7 +20,7 @@ Predicate Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/recipe/index.html b/recipe/index.html index a05b9771..2659fc65 100644 --- a/recipe/index.html +++ b/recipe/index.html @@ -20,7 +20,7 @@ Recipe Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/sounds/index.html b/sounds/index.html index 42fd26ce..76acd26a 100644 --- a/sounds/index.html +++ b/sounds/index.html @@ -20,7 +20,7 @@ Sound Explorer Minecraft 1.16, 1.17, 1.18 - + diff --git a/world/index.html b/world/index.html index 0c08692d..d2b71a90 100644 --- a/world/index.html +++ b/world/index.html @@ -20,7 +20,7 @@ World Settings Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/biome/index.html b/worldgen/biome/index.html index 80aa7abb..bf342992 100644 --- a/worldgen/biome/index.html +++ b/worldgen/biome/index.html @@ -20,7 +20,7 @@ Biome Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/carver/index.html b/worldgen/carver/index.html index ff90f177..fed04a63 100644 --- a/worldgen/carver/index.html +++ b/worldgen/carver/index.html @@ -20,7 +20,7 @@ Carver Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/feature/index.html b/worldgen/feature/index.html index f613f80b..ea330bb1 100644 --- a/worldgen/feature/index.html +++ b/worldgen/feature/index.html @@ -20,7 +20,7 @@ Feature Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/index.html b/worldgen/index.html index 1bce1776..dc42f7fc 100644 --- a/worldgen/index.html +++ b/worldgen/index.html @@ -20,7 +20,7 @@ Worldgen Generators Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/noise-settings/index.html b/worldgen/noise-settings/index.html index 34928de4..dfad83c5 100644 --- a/worldgen/noise-settings/index.html +++ b/worldgen/noise-settings/index.html @@ -20,7 +20,7 @@ Noise Settings Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/noise/index.html b/worldgen/noise/index.html index 44f96903..b508abac 100644 --- a/worldgen/noise/index.html +++ b/worldgen/noise/index.html @@ -20,7 +20,7 @@ Noise Generator Minecraft 1.18 - + diff --git a/worldgen/placed-feature/index.html b/worldgen/placed-feature/index.html index 98ed6bd3..777e171f 100644 --- a/worldgen/placed-feature/index.html +++ b/worldgen/placed-feature/index.html @@ -20,7 +20,7 @@ Placed Feature Generator Minecraft 1.18 - + diff --git a/worldgen/processor-list/index.html b/worldgen/processor-list/index.html index 31cc3b10..0c241a03 100644 --- a/worldgen/processor-list/index.html +++ b/worldgen/processor-list/index.html @@ -20,7 +20,7 @@ Processor List Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/structure-feature/index.html b/worldgen/structure-feature/index.html index 07e21c30..59c06607 100644 --- a/worldgen/structure-feature/index.html +++ b/worldgen/structure-feature/index.html @@ -20,7 +20,7 @@ Structure Feature Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/surface-builder/index.html b/worldgen/surface-builder/index.html index 7a49d49a..ce4596f6 100644 --- a/worldgen/surface-builder/index.html +++ b/worldgen/surface-builder/index.html @@ -20,7 +20,7 @@ Surface Builder Generator Minecraft 1.16, 1.17, 1.18 - + diff --git a/worldgen/template-pool/index.html b/worldgen/template-pool/index.html index 063b9435..48a0a7d2 100644 --- a/worldgen/template-pool/index.html +++ b/worldgen/template-pool/index.html @@ -20,7 +20,7 @@ Template Pool Generator Minecraft 1.16, 1.17, 1.18 - +