Commit Graph
259 Commits
Author SHA1 Message Date
eomsangdonandClaude Opus 5.5 2be767d186 fix(m02-cf): 함수 상자 출력 기본 이름을 로직 안에서 겹치지 않게
- addBox(function) 출력 이름 = 「결과 1」 「결과 2」 … (안 쓰인 가장 작은 번호) · A1 머리도 같은 이름
- 이름이 겹치면 link 가 받는 알약을 「이름 (2)」 로 만듦(이미 됨 · 시험 더함)
- 시험 14개

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBToTCGk5dqDKeXCEP3vhk
2026-10-01 16:32:32 +09:00
eomsangdon 306a251712 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1 2026-10-01 16:24:17 +09:00
eomsangdonandClaude Opus 5.5 b571d7cecc feat(m02-cf): 고른 상자 판 머리에 상자 색 바꾸기(정함 점검 9)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
2026-10-01 16:24:16 +09:00
eomsangdon 2f5cec2d61 Merge remote-tracking branches 'origin/sub_laptop_7', 'origin/sub_laptop_8' and 'origin/sub_laptop_2' into main_laptop_1 2026-10-01 16:23:07 +09:00
eomsangdonandClaude Opus 5.5 1004768037 feat(m02-cf): 함수 상자에 놓으면 받는 알약을 새로 만들어 이음
- link: 받는 쪽이 함수 상자이고 그 이름 받는 알약이 없으면 새로 만듦(빈 이름이면 보낸 알약 이름 · 같으면 「이름 (2)」) · func.inputs 에 칸 없이 더함
- unlink · removeBox: 받는 알약이 칸에 안 놓였고 다른 선도 없으면 같이 지움
- 검사: 칸에 놓지 않은 받는 알약 알림
- 시험 13개

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBToTCGk5dqDKeXCEP3vhk
2026-10-01 16:22:20 +09:00
eomsangdonandClaude Opus 5.5 71c20453e4 fix(M02): 단가산출 다이어그램 — 함수 상자 몸통 · 「+」 받는 자리에 놓으면 보낸 알약 이름으로 on.link(PLAN 35-7)
- 받는 알약 0 개인 새 함수 상자도 이을 수 있음 · 받는 알약은 Model 이 새로 만듦
- 함수 상자 왼쪽 흐린 「+」 받는 자리 · 잇기 중이면 밝게
- ORCA: 빈 함수 상자 몸통 ← 면적 · 「+」 ← 높이 → on.link 두 번(이름 그대로) · CostFlow 전부 검사 초록

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-10-01 16:22:01 +09:00
eomsangdonandClaude Sonnet 5.5 2ea4883273 fix(M02-CostFlow): FuncPanel 칸 없는 받는 알약을 아직 안 놓은 알약으로 보임 - 선 없이도 보이고 칸에 놓으면 잠금
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D2nUMUMTsqm93PbQtipo6c
2026-10-01 16:21:55 +09:00
eomsangdon 42b94ed737 Merge remote-tracking branch 'origin/sub_laptop_6' into main_laptop_1 2026-10-01 16:21:38 +09:00
eomsangdonandClaude Opus 5.5 dfd4810bf1 fix(m02-cf): 견본 메쌓기 높이 증가율표 입력 그룹을 소요량으로 · 시험이 마스터 그룹과 대조
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
2026-10-01 16:21:27 +09:00
eomsangdonandClaude Opus 5.5 7df1df5702 feat(m02-cf): 입력 상자 판(renderInputPanel) 이음 · 기계 요소 「키#칸」 은 키와 칸으로 나눠 물음
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
2026-10-01 16:20:36 +09:00
eomsangdonandClaude Opus 5.5 f609dd2767 feat(m02-cf): 기계 입력 값 — 입력 판 ref 「EQ키#칸」 · 칸 「시간당 경비」(기계경비 로직)
- /cf/values · 저장 다시 넣기가 기계 ref 「EQ키#칸」 과 {ref: 키, field: 칸} 둘 다 받음
- 칸 「시간당 경비」 = 기종(분류번호)을 받는 기계경비 로직 가운데 짝 차례 첫째(옛 EasyCalc pickMachine 규칙을 옮김) · 빈 입력은 첫 고르기(지역 = 전국평균) · inputs 로 바꿈
- 시험 — 키#칸 = {ref, field} = 기계 표 값 · 시간당 경비 = 그 로직 /calc 계 · 저장 때 같은 값

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
2026-10-01 16:16:38 +09:00
eomsangdon cd8837d9c3 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1 2026-10-01 16:14:53 +09:00
eomsangdonandClaude Opus 5.5 712aac8e39 feat(m02-cf): 단가산출 다이어그램 잇기 — 열기 · 견본 복사 · 입력 값 · 다이어그램 · 함수/출력 판 · 원가 · 저장(서버 대조) · 지우기 · 실행 취소
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
2026-10-01 16:14:11 +09:00
eomsangdon 0c7569e5bb Merge remote-tracking branch 'origin/sub_laptop_3' into main_laptop_1 2026-10-01 16:14:04 +09:00
eomsangdonandClaude Sonnet 5.5 e2dfbe687b feat(m02-cf): InputPanel 완성 — 서버 Api 최종 꼴(ref · Model 사용자 요소)에 맞춤 · 환율 유가전력 알약 이름
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019ACSGaHdLgnkEkoA4LDtMU
2026-10-01 16:13:08 +09:00
eomsangdon 9b11fccbef Merge remote-tracking branches 'origin/sub_laptop_4' and 'origin/sub_laptop_6' into main_laptop_1 2026-10-01 16:11:27 +09:00
eomsangdon 2cecd38f35 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_3 2026-10-01 16:11:00 +09:00
eomsangdonandClaude Opus 5.5 ae549f913c feat(m02-cf): 단가산출 다이어그램 서버 · Api — Model CfLogic 꼴로 저장 · 서버 다시 셈 · 입력 값 · 사용자 요소
- M02_CF_Router.py — /api/m02/cf/list(내 것 + _sample 견본) · get · save · delete · values · user-elements(만들기 · 지우기 · _data) · 키 CF-0001 · UE-0001
- 저장: 입력 상자 값(요소 · 표 · 변수)을 마스터에서 다시 받고 → 함수 상자 시트를 한 통합문서로 묶어(받는 칸 값 · 함수→함수 시트 사이 참조) Node 로 셈 → 받는 칸에 값만 되돌려 넣음 · 출력 상자 비용 종류별 원가
- 알약 이름: 입력 = 요소 name · 「표」 · 변수 name / 함수 받는 = inputs[].port · 내보내는 = output.name / 출력 받는 = 「값」
- 입력 값: 인력 · 재료(키 · 검색어 묶음) · 유가전력 · 환율 · 요율(rate_percent) · 기계(값 칸 · 시간당 경비 로직) · 소요량 / 계수 표(블록 · 한 줄) · 사용자 요소
- M02_CF_Api.ts — Model 타입(CfLogic · CfGroup · CfUserElement)을 씀 · CfQuery · CfAnswer · CfComputed · 쉬운 말
- main.py 등록 한 문장 · 시험 test_m02_cf_router.py

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
2026-10-01 16:10:36 +09:00
eomsangdonandClaude Opus 5.5 2c4078e187 fix(m02-cf): 견본 색을 Model 기본 색(BOX_COLOR)과 같게 · 시험이 Model 값과 대조
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
2026-10-01 16:08:28 +09:00
eomsangdon 608de92696 Merge remote-tracking branch 'origin/sub_laptop_8' into main_laptop_1 2026-10-01 16:08:06 +09:00
eomsangdon 3b2b830786 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_3 2026-10-01 16:07:44 +09:00
eomsangdonandClaude Sonnet 5.5 ad1d104776 feat(m02-cf): 입력 상자 판 InputPanel 초안 — 그룹 요소 · 표 · 변수 · 사용자 요소
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019ACSGaHdLgnkEkoA4LDtMU
2026-10-01 16:07:44 +09:00
eomsangdon d415923d16 Merge remote-tracking branch 'origin/sub_laptop_6' into main_laptop_1 2026-10-01 16:07:25 +09:00
eomsangdonandClaude Opus 5.5 97b7111c06 fix(M02): 단가산출 다이어그램 — 확대 단추 글 · 어두운 화면 종류 글자 밝게(PLAN 35-7)
- CostFlow 전부 검사 초록 · 660줄
- ORCA 견본(상자 8 · 선 9 · 직렬 · 병렬): 처음 한눈에 맞춤 · 선 끝 알약에서 0.05 안 · 상자 끌기 → on.move(f3, 400, 350)(+100, +50)
  · 확대 1.212→1.454 · 휠 1.322 · 한눈에 1.161 모두 판 안 · 끌어 잇기 → Model 잇기 통과 · 막힘 까닭 한 줄
  · 함수 고르면 이어진 선 넷만 진하게 · 선 끊기 · 줄 맞추기 · 화살표 · 더하기 · 지우기 물음 · 밝음 · 어두움

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-10-01 16:07:08 +09:00
eomsangdon 8ba872384d Merge remote-tracking branch 'origin/sub_laptop_2' into main_laptop_1 2026-10-01 16:06:40 +09:00
eomsangdonandClaude Opus 5.5 91c743382b feat(m02-cf): 단가산출 다이어그램 견본 셋 · M02_CF_Sample(목록 · 복사해서 열기)
- _sample/masonry.json — 돌쌓기 메쌓기(인력): 변수 · 품표(QF000421) · 증가율표(QF000422) · 인력 → 증가율 찾기 → 품(둘) → 노무비(둘) → 합 → 출력 노무비
- _sample/rate.json — 공구손료(비율): 노무비 × 율 → 출력 재료비
- _sample/value.json — 덤프트럭 시간당 작업량: q · f · E · Cm → 출력 값
- 시험 test_m02_cf_sample.py — 모양 · 알약 이름 규칙 · 견본 ① 노무비 148,470.504 = /calc GF000219 · ③ = GF000133

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BU9gbNE3aWFUvE61pS2WGt
2026-10-01 16:06:32 +09:00
eomsangdon f552441529 Merge remote-tracking branch 'origin/sub_laptop_5' into main_laptop_1 2026-10-01 16:05:55 +09:00
eomsangdon b0c86116e6 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_2 2026-10-01 16:05:42 +09:00
eomsangdonandClaude Sonnet 5.5 47eba22e54 feat(M02-CostFlow): 함수 상자 판 FuncPanel 추가 - 시트 편집기 · 받은 알약 · 변수 만들기 · 출력 칸 하나 · 단위 · 틀 단추
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D2nUMUMTsqm93PbQtipo6c
2026-10-01 16:05:41 +09:00
eomsangdonandClaude Sonnet 5.5 11d377d9e0 feat(m02-cf): 단가산출 다이어그램 출력 상자 판(OutputPanel) · 원가 합계 칸(Summary)
출력 상자의 받은 값 · 비용 종류 · 단위 · 이름 판, 원가 합계(노무비 · 재료비 · 경비 · 계) · 출력 상자별 줄 · 값 출력 · 빈 받는 자리 · 오류 · 예시값.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EauA2ATmqNRbeV48s9CcBr
2026-10-01 16:05:15 +09:00
eomsangdon 70a8e15303 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_8 2026-10-01 16:04:46 +09:00
eomsangdonandClaude Opus 5.5 cf73a51fdb fix(M02): 단가산출 다이어그램 700줄 안으로 · 알약 이름 규칙(표 · 값) 맞춤(PLAN 35-7)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-10-01 16:04:46 +09:00
eomsangdon f0a8f48ac6 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_4 2026-10-01 16:04:32 +09:00
eomsangdonandClaude Opus 5.5 4f02421acc wip(m02-cf): 서버 · 시험 첫 꼴(workbook · fills) — 다음 커밋에서 Model CfLogic 꼴로 바꿈
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
2026-10-01 16:04:32 +09:00
eomsangdon 316ffa0b14 Merge remote-tracking branches 'origin/sub_laptop_1' and 'origin/sub_laptop_7' into main_laptop_1 2026-10-01 16:04:13 +09:00
eomsangdonandClaude Opus 5.5 6ba9d76605 feat(m02-cf): 단가산출 다이어그램 Model · Eval 속 채움 · 시험
- 상자 더하기(종류별 기본 색 · 단위 - · 함수 = 빈 시트 하나 · 출력 = 노무비) · 지우기(선도) · 자리 · 색 · 단위(함수 · 출력 안쪽 단위도) · updateBox
- 알약 이름 규칙(브레인 정함) — 입력 = element.name · 표 · variable.name / 함수 = inputs[].port · output.name / 출력 = 값
- 선 규칙 — 입력 → 함수 · 출력 / 함수 → 함수 · 출력 · 출력에서 나감 · 입력으로 들어감 · 같은 상자 · 순환 · 같은 받는 자리 두 번 · 없는 알약은 막고 까닭
- 계산 — 함수 상자를 차례대로(직렬 · 병렬) 받는 칸 · 변수 칸에 값을 넣고 우리 스프레드시트 엔진으로 셈 · 출력 상자 비용 종류별 원가 합(노무비 · 재료비 · 경비 · 값들 · 계)
- 검사 — 빈 받는 자리 · 출력 칸 없음 · 출력 상자 없음 · 값 없는 입력 · 순환 · 오류 칸
- 시험 resources/tester/test_m02_cf_model.py 11개(엔진 그대로 Node)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBToTCGk5dqDKeXCEP3vhk
2026-10-01 16:04:05 +09:00
eomsangdonandClaude Opus 5.5 e837e5965e feat(m02-cf): 시작 화면 내 로직 · 견본 목록을 cfList 로(속이 오기 전엔 빈 목록)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
2026-10-01 16:03:23 +09:00
eomsangdon 93ac4ab22e Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_8 2026-10-01 16:03:03 +09:00
eomsangdonandClaude Opus 5.5 2fe9ca154a feat(M02): 단가산출 다이어그램 자유 배치 초안 — 상자 끌어 놓기 · 판 끌기 · 확대 · 한눈에 · 줄 맞추기 · 굽은 선(PLAN 35-7)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-10-01 16:03:03 +09:00
eomsangdon 87dcc4b288 Merge remote-tracking branch 'origin/main_laptop_1' into sub_laptop_1 2026-10-01 16:01:49 +09:00
eomsangdonandClaude Opus 5.5 b0d908c68b feat(m02-cf): 단가산출 다이어그램 단추 · 시험판 페이지 · 시작 화면 · 고치는 화면 틀(1걸음)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
2026-10-01 16:01:49 +09:00
eomsangdon 802e632b70 Merge remote-tracking branch 'origin/sub_laptop_4' into main_laptop_1 2026-10-01 16:01:16 +09:00
eomsangdon 716af60df7 Merge remote-tracking branch 'origin/sub_laptop_4' into sub_laptop_6 2026-10-01 16:01:13 +09:00
eomsangdonandClaude Opus 5.5 73fa2e612a feat(m02-cf): 단가산출 다이어그램 Api 타입 · 함수 머리 · _data 를 git 밖으로
- CfGroup · CfCost · CfQuery · CfValue · CfFill · CfLogic · CfListItem · CfSaved · CfUserElement
- cfList · cfGet · cfSave · cfDelete · cfValues · cfUserElements · cfUserElementAdd · cfUserElementDelete · cfPlain 머리
- CostFlow/.gitignore — _data/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KmELpdXFDRZHhfbGuRhSmL
2026-10-01 16:00:41 +09:00
eomsangdonandClaude Opus 5.5 2e66b0a6ce feat(m02-cf): 단가산출 다이어그램 Model · Eval 타입 · 함수 머리 올림
CfLogic · CfBox · CfInput · CfVariable · CfFunc · CfOutput · CfPort · CfLink · CfElementRef · CfUserElement · CfPill · CfKind · CfGroup · CfCost · CfValue · CfValues · CfEvalResult
newLogic · addBox · removeBox · moveBox · setColor · setUnit · portsOut · portsIn · link · unlink · evalLogic · checkLogic (속은 준비 중)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VBToTCGk5dqDKeXCEP3vhk
2026-10-01 15:59:53 +09:00
eomsangdonandClaude Opus 5.5 bcb1c725c4 refactor(M02): 항목 카드 넷 공용 틀 CardShell (PLAN 31-7)
- 공용 틀 — 제목 줄(제목 · 저장 안 한 점 ● · 오른쪽 단추 자리) + 한 줄 부제(번호 · 이름 · 말줄임) · 상태(불러오는 중 · 실패 + 다시 불러오기 · 비었음) · [저장](늘 보임 · 고쳐야 켜짐 · 카드 안 Ctrl+S · 알림 글 한 벌) · ?(단축키 상자)
- 도면 정보 · 면적산출 · 재료산출(ItemCards) · 선택 입력(관리 화면 · 고르기 모달 값 카드)이 틀에 내용만 넣음
- 「〇〇 수정」 빈 단추 한 모양 · 엑셀 카드에도 ? · 불러오는 중 네 카드 · 실패는 카드 안 글(토스트 안 씀) · 물음 한 번(어느 카드든)
- 저장 길(saveTemplate · 도면 write · sheetEdit.save · 위 [저장] saveInputs) · 단축키는 그대로 · 고르기 모달은 보기만
- 시험 test_m02_card_shell 새로 · 옛 모양 시험 맞춤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 21:24:49 +09:00
eomsangdonandClaude Opus 5.5 2f7acff79f fix(M02): 카드 넷 높이 = 화면에 맞춰 크게 · 엑셀 격자가 카드를 채움 (PLAN 31-6)
- 카드 높이 360px → min(640px, 70vh) · 도면 CAD 칸은 카드를 채움
- 엑셀 카드(면적 · 재료) 격자 = 카드 몫 최소 높이(카드 - 8rem) · 판이 없으면 채움 · 자재 조합 판은 그 아래 카드 안 스크롤(격자 높이 0 이던 흠 함께)
- 시험 한 줄

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 20:58:16 +09:00
eomsangdonandClaude Opus 5.5 8206bf6bb4 fix(M02): 자동 커밋 fedc0b5b 에 남은 충돌 표시 풂 — 63c6fa36 합친 모양으로
- main_laptop_1 의 8b2473af(같은 충돌을 먼저 푼 것)를 다시 합칠 때 충돌 · autopush 가 표시째 올림
- 두 풀이를 견줘 더 넓은 쪽(63c6fa36)을 씀 — 위 [저장]이 도면 카드도 먼저 저장 · 다른 항목 고름 물음 한 번(discard) · 나머지는 같음
- 대상: ItemCards · Structure · UI_Main · test_m02_drawing_card(DrawingCard 는 이미 같음)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-09-30 20:40:00 +09:00
eomsangdon fedc0b5b15 auto: 2026-09-30 20:38 (ESD_LAPTOP) 2026-09-30 20:38:54 +09:00
eomsangdonandClaude Opus 5.5 63c6fa360c fix(M02): 31-3 합치기 충돌 표시 풀기 — 도면 카드(31-4) · 엑셀 카드(31-3) 둘 다 살림
- main_laptop_1 의 auto 커밋(99a514d9)이 ItemCards · Structure · UI_Main 에 충돌 표시를 그대로 올림 — 군데마다 양쪽을 합침
- ItemCards: 글(도면 버림 물음 + 저장 글) · 옵션(onDirty + sheetEdit) · 손잡이 dirty = 도면 또는 엑셀 · saveAll = 도면 먼저 · 엑셀 · discard 새로 · 옛 hideToolbar 는 DrawingCard 몫이라 뺌
- DrawingCard: save() 드러냄(위 [저장]이 먼저 부름 · 못 하면 던짐)
- Structure: 다른 항목 고름 물음은 한 번(카드 셋 모두) · 확인이면 discard 뒤 읽음 · 손잡이 dirty 한 벌 · saveCards
- UI_Main: 떠나기 · 창 닫기 막기 = busy()(이 화면 + 카드 둘)
- 시험 test_m02_drawing_card 물음 판정을 합친 모양으로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ly2oHAaTDYRjcniAmHR81z
2026-09-30 20:38:52 +09:00