function Il(e,t){let n=(Math.imul(Math.floor(e)|0,73856093)^Math.imul(Math.floor(t)|0,19349663))>>>0;return n=n^61^n>>>16,n+=n<<3,n^=n>>>4,n=Math.imul(n,668265261),n^=n>>>15,(n>>>0)/4294967295}function Ll(e,t,n){let r=!1;for(let i=0,a=n.length-1;i<n.length;a=i++){let[o,s]=n[i],[c,l]=n[a];s>t!=l>t&&e<(c-o)*(t-s)/(l-s)+o&&(r=!r)}return r}function Rl(e,t,n,r){let i=r[0]-n[0],a=r[1]-n[1],o=i*i+a*a||1,s=((e-n[0])*i+(t-n[1])*a)/o;return s=Math.max(0,Math.min(1,s)),Math.hypot(e-n[0]-s*i,t-n[1]-s*a)}var zl=[222.4,-1004.6],Bl=[245.5,-1071.9];function Vl(e){if(e.__south)return;e.__south=!0;let t=e.landcover,n=atob(t.b64),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);let i=(e,n)=>{let i=Math.floor((e-t.origin[0])/t.step),a=Math.floor((n-t.origin[1])/t.step);return i<0||a<0||i>=t.w||a>=t.h?0:r[a*t.w+i]},a=e.water.filter(e=>e.name===`Bansud`||e.id===`osm-w245635450`),[o,s,c,l]=e.bounds,u=Math.ceil((c-o)/5)+1,d=new Float32Array(u).fill(-1e9);for(let e of a)for(let t=0;t+1<e.pts.length;t++){let[n,r]=e.pts[t],[i,a]=e.pts[t+1],s=Math.min(n,i),c=Math.max(n,i);for(let t=Math.max(0,Math.ceil((s-o)/5));t<u&&o+t*5<=c;t++){let s=o+t*5,c=r+(i===n?0:(s-n)/(i-n))*(a-r)+e.w/2;c>d[t]&&(d[t]=c)}}let f=e=>d[Math.max(0,Math.min(u-1,Math.round((e-o)/5)))],p=e.play,m=[];for(let t of e.water)for(let e=0;e+1<t.pts.length;e++)m.push([t.pts[e],t.pts[e+1],(t.w||4)/2+3]);let h=(e,t)=>{for(let[n,r,i]of m)if(!(Math.abs(n[1]-t)>400&&Math.abs(r[1]-t)>400)&&Rl(e,t,n,r)<i)return!0;return!1},g=e.edges.find(e=>e.cls===`trunk`&&Math.abs(e.pts[e.pts.length-1][1]+920.3)<.5),_=[[194,-920.3],zl];g&&(e.nodes[-9001]=zl,e.edges.push({id:`ext-bansud-bridge-approach`,a:g.b,b:-9001,way:28341556,name:`Calapan South Road`,cls:`trunk`,w:g.w,drive:!0,oneway:!1,bridge:!1,surface:`concrete`,pts:_,noTraffic:!0}));let v=e.edges.filter(e=>e.cls===`trunk`).flatMap(e=>e.pts).filter(e=>e[1]<-700),y=[];{let e=[...v].sort((e,t)=>t[1]-e[1]);for(let t=0;t+1<e.length;t++)y.push([e[t],e[t+1]])}let b=(e,t)=>{let n=1e9;for(let[r,i]of y)n=Math.min(n,Rl(e,t,r,i));return n},x=(e,t,n)=>{let r=f(e);return r>-1e8&&t>r+n&&!Ll(e,t,p)&&e>o+5&&e<c-5&&t<l},S=[],C=[],w=(e,t,n,r,i,a,o,s=``)=>{let c=[-r[1],r[0]],l=i/2,u=a/2,d=[[n[0]-r[0]*l-c[0]*u,n[1]-r[1]*l-c[1]*u],[n[0]+r[0]*l-c[0]*u,n[1]+r[1]*l-c[1]*u],[n[0]+r[0]*l+c[0]*u,n[1]+r[1]*l+c[1]*u],[n[0]-r[0]*l+c[0]*u,n[1]-r[1]*l+c[1]*u]];S.push({id:e,src:`GENERATED`,name:``,kind:t,levels:o,poly:d,conf:`GENERATED-south-strip`,shop:s,type:t}),C.push(n)},[T,E]=_,D=E[0]-T[0],O=E[1]-T[1],k=Math.hypot(D,O);D/=k,O/=k;let A=[D,O],j=[O,-D],ee=k-26,M=0;for(let e of[-1,1]){let t=-95+Il(e*7,3)*4;for(;t<ee;){let n=5+Il(t*3,e)*3,r=6+Il(t,e*5)*3,i=7.6+r/2+Il(t*7,e)*1.2,a=[T[0]+D*t+j[0]*i*e,T[1]+O*t+j[1]*i*e];if(!Ll(a[0],a[1],p)&&x(a[0],a[1],20)&&!h(a[0],a[1])){let i=Il(t,e*11)<.72;w(`gen-south-store-${M++}`,i?`shop`:`house`,a,A,n,r,Il(t*5,e)<.2?2:1,i?`convenience`:``)}t+=n+1.5+Il(t*9,e)*6}}let te=[],N=0,ne=[];for(let t of e.edges)if(t.drive)for(let e=0;e+1<t.pts.length;e++)ne.push([t.pts[e],t.pts[e+1],t.w/2]);let re=(e,t)=>{for(let[n,r,i]of ne)if(!(e<Math.min(n[0],r[0])-i-1.2||e>Math.max(n[0],r[0])+i+1.2||t<Math.min(n[1],r[1])-i-1.2||t>Math.max(n[1],r[1])+i+1.2)&&Rl(e,t,n,r)<i+1.2)return!1;return!0};for(let e=o+4;e<c-4;e+=9)for(let t=s+4;t<l-4;t+=9){let n=e+(Il(e,t)-.5)*7,r=t+(Il(t,e)-.5)*7;if(!x(n,r,12))continue;let a=i(n,r);if(a!==10&&a!==50&&a!==30)continue;let o=b(n,r);if(o<6.5||h(n,r))continue;let s=Il(n*3,r*5);if(a===50&&o>22&&s<.16&&!C.some(e=>Math.hypot(e[0]-n,e[1]-r)<14)){let e=Il(n,r*7)*Math.PI;w(`gen-south-house-${N++}`,`house`,[n,r],[Math.cos(e),Math.sin(e)],6+s*20,6+Il(r,n)*3,1);continue}if(C.some(e=>Math.abs(e[0]-n)<7&&Math.abs(e[1]-r)<7))continue;let c=r-f(n);if(s>(a===10?.42:a===50?.16:.07)*(c<380||b(n,r)<120?1:.45))continue;let l=Il(n*11,r*13),u=a===10?l<.45?0:l<.85?1:2:l<.55?0:l<.75?1:2;re(n,r)&&te.push([n,r,u,.8+Il(r*3,n)*.55,Il(n*17,r)*6.28])}e.buildings.push(...S),e.trees.push(...te),e.southStrip={stores:M,houses:N,trees:te.length},globalThis.__southStrip=e.southStrip,globalThis.__southDbg={b:S.slice(0,3),t:te.filter(e=>Math.abs(e[0]-210)<60&&Math.abs(e[1]+960)<60).length,bank:f(222),inp:Ll(210,-960,p)}}