[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CBAFB2VPNZEV8YJ0BXTPM0":3,"skill-same:01M6CBAFB2VPNZEV8YJ0BXTPM0":158},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":13,"repositoryHtmlUrl":34,"repositoryHomepageUrl":6,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6CBAFB2VPNZEV8YJ0BXTPM0","22-game-server-webgl",null,"devwinsoft\u002Fdevian","devwinsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22570160?v=4","01M6C6RR8W05NH8NPKQNCE3Q72","maoshy","01M6C6RRDJ5TJJCZXRTY801YDH",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian-examples\u002F22-game-server-webgl\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[23,24,25,26],"webgl","server","game","22 game server webgl","2026-11-10 10:12:30",false,"# 22-game-server-webgl — Unity WebGL 서버 가이드\n\nStatus: ACTIVE\nAppliesTo: v10\nType: GUIDE\n\n---\n\n## Scope\n\nUnityExample WebGL 빌드 → NestJS(WebGLServer)로 로컬 서빙 → 브라우저 스모크 테스트\n\n---\n\n## SSOT Paths\n\n| 구분 | 경로 |\n|------|------|\n| **Unity project** | `framework-cs\u002Fapps\u002FUnityExample\u002F` |\n| **WebGL build output (default)** | `output\u002Funity-webgl\u002FUnityExample\u002F` |\n| **NestJS server app** | `framework-ts\u002Fapps\u002FWebGLServer\u002F` |\n| **환경변수 정의 (SSOT)** | `framework-ts\u002Fapps\u002FWebGLServer\u002Fenv.spec.json` |\n| **.env.example (자동 생성)** | `framework-ts\u002Fapps\u002FWebGLServer\u002F.env.example` |\n\n---\n\n## Build Steps (Unity)\n\n1. Unity Editor에서 `framework-cs\u002Fapps\u002FUnityExample` 프로젝트 열기\n2. **File → Build Settings**\n3. **Platform: WebGL** 선택 → **Switch Platform**\n4. **Development Build: On** (스모크 테스트 동안)\n5. **Build** 클릭 → 출력 경로: `output\u002Funity-webgl\u002FUnityExample\u002F`\n\n---\n\n## Run Steps\n\n### Step 1: (권장) GameServer 실행\n\n```bash\ncd framework-ts\nnpm ci\nnpm -w game-server run start\n```\n\n### Step 2: WebGL 정적 서버 실행\n\n```bash\ncd framework-ts\nnpm -w webgl-server run start:dev\n```\n\n### Step 3: 브라우저 접속\n\n```\nhttp:\u002F\u002Flocalhost:8081\u002F\n```\n\n---\n\n## Environment Variables\n\n> **SSOT**: `env.spec.json` → `.env.example`는 자동 생성 (수동 편집 금지)\n>\n> 환경변수 변경 시: `env.spec.json` 수정 → `npm -w webgl-server run env:sync`\n\n| 변수 | 기본값 | 설명 |\n|------|--------|------|\n| `WEBGL_ROOT` | `output\u002Funity-webgl\u002FUnityExample` | WebGL 빌드 출력 경로 |\n| `WEBGL_PORT` | `8081` | 서버 포트 (1..65535) |\n\n```bash\n# .env.example 생성\u002F갱신\nnpm -w webgl-server run env:sync\n\n# 기본 실행\ncd framework-ts\nnpm -w webgl-server run start:dev\n\n# 포트 지정\ncd framework-ts\nWEBGL_PORT=8091 npm -w webgl-server run start:dev\n\n# 루트+포트 지정\ncd framework-ts\nWEBGL_ROOT=output\u002Funity-webgl\u002FUnityExample WEBGL_PORT=8091 npm -w webgl-server run start:dev\n```\n\n---\n\n## Smoke Checklist\n\n| 항목 | 확인 |\n|------|------|\n| 로딩\u002F씬 진입 OK | [ ] |\n| console error 0 (특히 `.jslib not found`, `undefined symbol`, `Module.*`, `ERR_*`) | [ ] |\n| (권장) WS 연결 성공 (서버 로그 + 브라우저 로그) | [ ] |\n\n---\n\n## DoD (Definition of Done)\n\n- [ ] WebGL 로딩 성공, 씬 진입\n- [ ] 브라우저 콘솔 치명 에러 0\n- [ ] `WEBGL_PORT` 설정 시 해당 포트로 기동 확인\n- [ ] (권장) WS 연결 확인:\n  - 서버 로그에 connect 흔적\n  - 브라우저에서 연결 성공 로그 또는 게임 UI에 연결 표시\n\n---\n\n## Hard Rules\n\n1. **WebGL은 반드시 HTTP 서버로 서빙한다** (파일 직접 열기 금지)\n2. **로컬 서빙은 NestJS(WebGLServer)를 표준으로 사용한다**\n3. **DoD는 \"빌드 성공\"이 아니라 브라우저 로드 + 콘솔 에러 0까지 포함한다**\n\n---\n\n## Server Features\n\n- **Port**: `WEBGL_PORT` (기본값 8081)\n- **Static serving**: `WEBGL_ROOT` 폴더 정적 서빙\n- **SPA fallback**: 정적 파일 없으면 `index.html`로 fallback\n- **MIME types**: `.wasm`, `.data`, `.gz`, `.br` 헤더 자동 설정\n- **Validation**: `index.html` 없으면 명확한 에러 메시지 후 종료\n\n---\n\n## Related\n\n- [21-game-server-ts](..\u002F21-game-server-ts\u002FSKILL.md) — Game Protocol TS 서버 예제\n- [11-game-client-ts](..\u002F11-game-client-ts\u002FSKILL.md) — Game Protocol TS 클라이언트 예제\n- [03-ssot](..\u002F03-ssot\u002FSKILL.md) — Example Apps SSOT\n- [30-env-management](..\u002F..\u002Fdevian\u002F80-tools\u002F30-env-management\u002FSKILL.md) — 환경변수 관리 정책\n",{},"main","8cb5bd877a3a7004867d2f55697cb9e4ff2f1734","skills\u002Fdevian-examples\u002F22-game-server-webgl","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian","https:\u002F\u002Fgithub.com\u002Fdevwinsoft","Kim Hyong Joon","2026-04-12 18:44:10",{"source":7,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add devwinsoft\u002Fdevian --skill 22-game-server-webgl",{"tool":44,"command":45},"bunx","bunx skills add devwinsoft\u002Fdevian --skill 22-game-server-webgl",{"tool":47,"command":48},"pnpm","pnpm dlx skills add devwinsoft\u002Fdevian --skill 22-game-server-webgl","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian-examples\u002F22-game-server-webgl\u002FSKILL.md",true,[52,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"modules\u002Fadapt.md","REFERENCE","参考文档",6840,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fadapt.md",{"path":59,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":60,"sourceHtmlUrl":61},"modules\u002Fanimate.md",8319,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fanimate.md",{"path":63,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":64,"sourceHtmlUrl":65},"modules\u002Faudit.md",6155,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Faudit.md",{"path":67,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":68,"sourceHtmlUrl":69},"modules\u002Fbolder.md",7430,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fbolder.md",{"path":71,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":72,"sourceHtmlUrl":73},"modules\u002Fclarify.md",6379,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fclarify.md",{"path":75,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":76,"sourceHtmlUrl":77},"modules\u002Fcolorize.md",7491,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fcolorize.md",{"path":79,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":80,"sourceHtmlUrl":81},"modules\u002Fcritique.md",5193,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fcritique.md",{"path":83,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":84,"sourceHtmlUrl":85},"modules\u002Fdelight.md",10251,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fdelight.md",{"path":87,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":88,"sourceHtmlUrl":89},"modules\u002Fdistill.md",6939,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fdistill.md",{"path":91,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":92,"sourceHtmlUrl":93},"modules\u002Fextract.md",3926,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fextract.md",{"path":95,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":96,"sourceHtmlUrl":97},"modules\u002Ffrontend-design.md",8283,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Ffrontend-design.md",{"path":99,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":100,"sourceHtmlUrl":101},"modules\u002Fharden.md",9007,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fharden.md",{"path":103,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":104,"sourceHtmlUrl":105},"modules\u002Fnormalize.md",3835,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fnormalize.md",{"path":107,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":108,"sourceHtmlUrl":109},"modules\u002Fonboard.md",7982,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fonboard.md",{"path":111,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":112,"sourceHtmlUrl":113},"modules\u002Foptimize.md",7776,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Foptimize.md",{"path":115,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":116,"sourceHtmlUrl":117},"modules\u002Fpolish.md",7838,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fpolish.md",{"path":119,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":120,"sourceHtmlUrl":121},"modules\u002Fquieter.md",5846,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Fquieter.md",{"path":123,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":124,"sourceHtmlUrl":125},"modules\u002Freview-rules.md",617,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Fmodules\u002Freview-rules.md",{"path":127,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":128,"sourceHtmlUrl":129},"reference\u002Fcolor-and-contrast.md",5291,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Fcolor-and-contrast.md",{"path":131,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":132,"sourceHtmlUrl":133},"reference\u002Finteraction-design.md",4204,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Finteraction-design.md",{"path":135,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":136,"sourceHtmlUrl":137},"reference\u002Fmotion-design.md",4753,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Fmotion-design.md",{"path":139,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":140,"sourceHtmlUrl":141},"reference\u002Fresponsive-design.md",3464,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Fresponsive-design.md",{"path":143,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":144,"sourceHtmlUrl":145},"reference\u002Fspatial-design.md",3545,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Fspatial-design.md",{"path":147,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":148,"sourceHtmlUrl":149},"reference\u002Ftypography.md",5503,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Ftypography.md",{"path":151,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":152,"sourceHtmlUrl":153},"reference\u002Fux-writing.md",4330,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freference\u002Fux-writing.md",{"path":155,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":156,"sourceHtmlUrl":157},"references\u002Fgotchas.md",7522,"https:\u002F\u002Fgithub.com\u002Fwelflau\u002Fai-dev-system\u002Fblob\u002Fmain\u002Fbackend\u002Fconfig_packs\u002Fweb-dev\u002Fshared\u002Fskills\u002Fweb-design-guidelines\u002Freferences\u002Fgotchas.md",[159,165,173,181,190,197],{"skillNo":160,"name":161,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":27},"01M6CBX3K2JJV38ANHVGCAT8A0","devian","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002FSKILL.md",[],[161],{"skillNo":166,"name":167,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":27},"01M6CBX210BFMM8AMN770J9WY8","90-project-archive","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F90-project-archive\u002FSKILL.md",[],[171,172],"archive","90 project archive",{"skillNo":174,"name":175,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":27},"01M6CBWZSGRR9R3YJZB3177667","30-env-management","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F30-env-management\u002FSKILL.md",[],[179,180],"management","30 env management",{"skillNo":182,"name":183,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":184,"categories":185,"keywords":186,"publishedAt":27},"01M6CBWYD3TGWBQV7V35551THF","19-page-push-send","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F19-page-push-send\u002FSKILL.md",[],[187,188,189],"push","page","19 page push send",{"skillNo":191,"name":192,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":27},"01M6CBWWRQ05A7604GHJKTPJTF","18-page-savedata","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F18-page-savedata\u002FSKILL.md",[],[188,196],"18 page savedata",{"skillNo":198,"name":199,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":200,"categories":201,"keywords":202,"publishedAt":27},"01M6CBWVH4S2VF1V7B2GBTESCT","17-page-deobfuscate","https:\u002F\u002Fgithub.com\u002Fdevwinsoft\u002Fdevian\u002Fblob\u002Fmain\u002Fskills\u002Fdevian\u002F80-tools\u002F20-operation\u002F17-page-deobfuscate\u002FSKILL.md",[],[188,203],"17 page deobfuscate"]