From 0bf544720b49a9e9b025cf7e95e027111ff59e23 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 17 Oct 2026 11:23:08 +0700 Subject: [PATCH] feat(cms): add VDO Frame Scrubber block with isolated sequence library --- .../page-builder/AddSectionModal.tsx | 29 +- .../page-builder/FrameSequenceModal.tsx | 365 ++++++++++++++ .../page-builder/VdoFrameScrubberForm.tsx | 434 ++++++++++++++++ apps/admin/src/pages/PageBuilderPage.tsx | 11 +- .../chrome-sprocket-428h/frame-001.webp | Bin 0 -> 11600 bytes .../chrome-sprocket-428h/frame-002.webp | Bin 0 -> 11406 bytes .../chrome-sprocket-428h/frame-003.webp | Bin 0 -> 11492 bytes .../chrome-sprocket-428h/frame-004.webp | Bin 0 -> 11468 bytes .../chrome-sprocket-428h/frame-005.webp | Bin 0 -> 11744 bytes .../chrome-sprocket-428h/frame-006.webp | Bin 0 -> 11504 bytes .../chrome-sprocket-428h/frame-007.webp | Bin 0 -> 11672 bytes .../chrome-sprocket-428h/frame-008.webp | Bin 0 -> 11614 bytes .../chrome-sprocket-428h/frame-009.webp | Bin 0 -> 11812 bytes .../chrome-sprocket-428h/frame-010.webp | Bin 0 -> 11594 bytes .../chrome-sprocket-428h/frame-011.webp | Bin 0 -> 11588 bytes .../chrome-sprocket-428h/frame-012.webp | Bin 0 -> 11666 bytes .../chrome-sprocket-428h/frame-013.webp | Bin 0 -> 11774 bytes .../chrome-sprocket-428h/frame-014.webp | Bin 0 -> 11702 bytes .../chrome-sprocket-428h/frame-015.webp | Bin 0 -> 11736 bytes .../chrome-sprocket-428h/frame-016.webp | Bin 0 -> 11650 bytes .../chrome-sprocket-428h/frame-017.webp | Bin 0 -> 11742 bytes .../chrome-sprocket-428h/frame-018.webp | Bin 0 -> 11598 bytes .../chrome-sprocket-428h/frame-019.webp | Bin 0 -> 11584 bytes .../chrome-sprocket-428h/frame-020.webp | Bin 0 -> 11792 bytes .../chrome-sprocket-428h/frame-021.webp | Bin 0 -> 11848 bytes .../chrome-sprocket-428h/frame-022.webp | Bin 0 -> 11830 bytes .../chrome-sprocket-428h/frame-023.webp | Bin 0 -> 11798 bytes .../chrome-sprocket-428h/frame-024.webp | Bin 0 -> 11822 bytes .../chrome-sprocket-428h/frame-025.webp | Bin 0 -> 11852 bytes .../chrome-sprocket-428h/frame-026.webp | Bin 0 -> 11736 bytes .../chrome-sprocket-428h/frame-027.webp | Bin 0 -> 11716 bytes .../chrome-sprocket-428h/frame-028.webp | Bin 0 -> 11738 bytes .../chrome-sprocket-428h/frame-029.webp | Bin 0 -> 11902 bytes .../chrome-sprocket-428h/frame-030.webp | Bin 0 -> 11718 bytes .../chrome-sprocket-428h/frame-031.webp | Bin 0 -> 11774 bytes .../chrome-sprocket-428h/frame-032.webp | Bin 0 -> 11678 bytes .../chrome-sprocket-428h/frame-033.webp | Bin 0 -> 11772 bytes .../chrome-sprocket-428h/frame-034.webp | Bin 0 -> 11718 bytes .../chrome-sprocket-428h/frame-035.webp | Bin 0 -> 11560 bytes .../chrome-sprocket-428h/frame-036.webp | Bin 0 -> 11716 bytes .../chrome-sprocket-428h/frame-037.webp | Bin 0 -> 11874 bytes .../chrome-sprocket-428h/frame-038.webp | Bin 0 -> 11870 bytes .../chrome-sprocket-428h/frame-039.webp | Bin 0 -> 11778 bytes .../chrome-sprocket-428h/frame-040.webp | Bin 0 -> 11864 bytes .../chrome-sprocket-428h/frame-041.webp | Bin 0 -> 11906 bytes .../chrome-sprocket-428h/frame-042.webp | Bin 0 -> 11862 bytes .../chrome-sprocket-428h/frame-043.webp | Bin 0 -> 11900 bytes .../chrome-sprocket-428h/frame-044.webp | Bin 0 -> 11814 bytes .../chrome-sprocket-428h/frame-045.webp | Bin 0 -> 11872 bytes .../chrome-sprocket-428h/frame-046.webp | Bin 0 -> 11738 bytes .../chrome-sprocket-428h/frame-047.webp | Bin 0 -> 11874 bytes .../chrome-sprocket-428h/frame-048.webp | Bin 0 -> 12096 bytes .../chrome-sprocket-428h/frame-049.webp | Bin 0 -> 12342 bytes .../chrome-sprocket-428h/frame-050.webp | Bin 0 -> 12050 bytes .../chrome-sprocket-428h/frame-051.webp | Bin 0 -> 11890 bytes .../chrome-sprocket-428h/frame-052.webp | Bin 0 -> 12158 bytes .../chrome-sprocket-428h/frame-053.webp | Bin 0 -> 12446 bytes .../chrome-sprocket-428h/frame-054.webp | Bin 0 -> 12284 bytes .../chrome-sprocket-428h/frame-055.webp | Bin 0 -> 12334 bytes .../chrome-sprocket-428h/frame-056.webp | Bin 0 -> 12202 bytes .../chrome-sprocket-428h/frame-057.webp | Bin 0 -> 12544 bytes .../chrome-sprocket-428h/frame-058.webp | Bin 0 -> 12382 bytes .../chrome-sprocket-428h/frame-059.webp | Bin 0 -> 12234 bytes .../chrome-sprocket-428h/frame-060.webp | Bin 0 -> 12222 bytes .../chrome-sprocket-428h/frame-061.webp | Bin 0 -> 12652 bytes .../chrome-sprocket-428h/frame-062.webp | Bin 0 -> 12560 bytes .../chrome-sprocket-428h/frame-063.webp | Bin 0 -> 12542 bytes .../chrome-sprocket-428h/frame-064.webp | Bin 0 -> 12438 bytes .../chrome-sprocket-428h/frame-065.webp | Bin 0 -> 12600 bytes .../chrome-sprocket-428h/frame-066.webp | Bin 0 -> 12910 bytes .../chrome-sprocket-428h/frame-067.webp | Bin 0 -> 12908 bytes .../chrome-sprocket-428h/frame-068.webp | Bin 0 -> 12782 bytes .../chrome-sprocket-428h/frame-069.webp | Bin 0 -> 12936 bytes .../chrome-sprocket-428h/frame-070.webp | Bin 0 -> 13050 bytes .../chrome-sprocket-428h/frame-071.webp | Bin 0 -> 13096 bytes .../chrome-sprocket-428h/frame-072.webp | Bin 0 -> 12934 bytes .../chrome-sprocket-428h/frame-073.webp | Bin 0 -> 13288 bytes .../chrome-sprocket-428h/frame-074.webp | Bin 0 -> 13116 bytes .../chrome-sprocket-428h/frame-075.webp | Bin 0 -> 13436 bytes .../chrome-sprocket-428h/frame-076.webp | Bin 0 -> 13446 bytes .../chrome-sprocket-428h/frame-077.webp | Bin 0 -> 13626 bytes .../chrome-sprocket-428h/frame-078.webp | Bin 0 -> 13278 bytes .../chrome-sprocket-428h/frame-079.webp | Bin 0 -> 13246 bytes .../chrome-sprocket-428h/frame-080.webp | Bin 0 -> 13248 bytes .../chrome-sprocket-428h/frame-081.webp | Bin 0 -> 13474 bytes .../chrome-sprocket-428h/frame-082.webp | Bin 0 -> 13288 bytes .../chrome-sprocket-428h/frame-083.webp | Bin 0 -> 13252 bytes .../chrome-sprocket-428h/frame-084.webp | Bin 0 -> 13352 bytes .../chrome-sprocket-428h/frame-085.webp | Bin 0 -> 13630 bytes .../chrome-sprocket-428h/frame-086.webp | Bin 0 -> 13396 bytes .../chrome-sprocket-428h/frame-087.webp | Bin 0 -> 13446 bytes .../chrome-sprocket-428h/frame-088.webp | Bin 0 -> 13292 bytes .../chrome-sprocket-428h/frame-089.webp | Bin 0 -> 13368 bytes .../chrome-sprocket-428h/frame-090.webp | Bin 0 -> 13492 bytes .../chrome-sprocket-428h/frame-091.webp | Bin 0 -> 13484 bytes .../chrome-sprocket-428h/frame-092.webp | Bin 0 -> 13614 bytes .../chrome-sprocket-428h/frame-093.webp | Bin 0 -> 13548 bytes .../chrome-sprocket-428h/frame-094.webp | Bin 0 -> 13620 bytes .../chrome-sprocket-428h/frame-095.webp | Bin 0 -> 13472 bytes .../chrome-sprocket-428h/frame-096.webp | Bin 0 -> 13276 bytes .../chrome-sprocket-428h/frame-097.webp | Bin 0 -> 13488 bytes .../chrome-sprocket-428h/frame-098.webp | Bin 0 -> 13408 bytes .../chrome-sprocket-428h/frame-099.webp | Bin 0 -> 13462 bytes .../chrome-sprocket-428h/frame-100.webp | Bin 0 -> 13734 bytes .../chrome-sprocket-428h/frame-101.webp | Bin 0 -> 13686 bytes .../chrome-sprocket-428h/frame-102.webp | Bin 0 -> 13594 bytes .../chrome-sprocket-428h/frame-103.webp | Bin 0 -> 13612 bytes .../chrome-sprocket-428h/frame-104.webp | Bin 0 -> 13744 bytes .../chrome-sprocket-428h/frame-105.webp | Bin 0 -> 13646 bytes .../chrome-sprocket-428h/frame-106.webp | Bin 0 -> 13718 bytes .../chrome-sprocket-428h/frame-107.webp | Bin 0 -> 13598 bytes .../chrome-sprocket-428h/frame-108.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-109.webp | Bin 0 -> 13950 bytes .../chrome-sprocket-428h/frame-110.webp | Bin 0 -> 13864 bytes .../chrome-sprocket-428h/frame-111.webp | Bin 0 -> 13700 bytes .../chrome-sprocket-428h/frame-112.webp | Bin 0 -> 13872 bytes .../chrome-sprocket-428h/frame-113.webp | Bin 0 -> 13852 bytes .../chrome-sprocket-428h/frame-114.webp | Bin 0 -> 13480 bytes .../chrome-sprocket-428h/frame-115.webp | Bin 0 -> 13412 bytes .../chrome-sprocket-428h/frame-116.webp | Bin 0 -> 13640 bytes .../chrome-sprocket-428h/frame-117.webp | Bin 0 -> 14146 bytes .../chrome-sprocket-428h/frame-118.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-119.webp | Bin 0 -> 13576 bytes .../chrome-sprocket-428h/frame-120.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-121.webp | Bin 0 -> 13854 bytes .../chrome-sprocket-428h/frame-122.webp | Bin 0 -> 13916 bytes .../chrome-sprocket-428h/frame-123.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-124.webp | Bin 0 -> 13770 bytes .../chrome-sprocket-428h/frame-125.webp | Bin 0 -> 14026 bytes .../chrome-sprocket-428h/frame-126.webp | Bin 0 -> 13936 bytes .../chrome-sprocket-428h/frame-127.webp | Bin 0 -> 13786 bytes .../chrome-sprocket-428h/frame-128.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-129.webp | Bin 0 -> 13944 bytes .../chrome-sprocket-428h/frame-130.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-131.webp | Bin 0 -> 13734 bytes .../chrome-sprocket-428h/frame-132.webp | Bin 0 -> 13890 bytes .../chrome-sprocket-428h/frame-133.webp | Bin 0 -> 14124 bytes .../chrome-sprocket-428h/frame-134.webp | Bin 0 -> 13830 bytes .../chrome-sprocket-428h/frame-135.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-136.webp | Bin 0 -> 13836 bytes .../chrome-sprocket-428h/frame-137.webp | Bin 0 -> 13722 bytes .../chrome-sprocket-428h/frame-138.webp | Bin 0 -> 13768 bytes .../chrome-sprocket-428h/frame-139.webp | Bin 0 -> 13634 bytes .../chrome-sprocket-428h/frame-140.webp | Bin 0 -> 13814 bytes .../chrome-sprocket-428h/frame-141.webp | Bin 0 -> 13952 bytes .../chrome-sprocket-428h/frame-142.webp | Bin 0 -> 14076 bytes .../chrome-sprocket-428h/frame-143.webp | Bin 0 -> 13864 bytes .../chrome-sprocket-428h/frame-144.webp | Bin 0 -> 13818 bytes .../chrome-sprocket-428h/frame-145.webp | Bin 0 -> 13780 bytes .../chrome-sprocket-428h/frame-146.webp | Bin 0 -> 13842 bytes .../chrome-sprocket-428h/frame-147.webp | Bin 0 -> 14102 bytes .../chrome-sprocket-428h/frame-148.webp | Bin 0 -> 14020 bytes .../chrome-sprocket-428h/frame-149.webp | Bin 0 -> 14548 bytes .../chrome-sprocket-428h/frame-150.webp | Bin 0 -> 14228 bytes .../chrome-sprocket-428h/frame-151.webp | Bin 0 -> 13976 bytes .../chrome-sprocket-428h/frame-152.webp | Bin 0 -> 13904 bytes .../chrome-sprocket-428h/frame-153.webp | Bin 0 -> 13854 bytes .../chrome-sprocket-428h/frame-154.webp | Bin 0 -> 13858 bytes .../chrome-sprocket-428h/frame-155.webp | Bin 0 -> 14106 bytes .../chrome-sprocket-428h/frame-156.webp | Bin 0 -> 14100 bytes .../chrome-sprocket-428h/frame-157.webp | Bin 0 -> 14032 bytes .../chrome-sprocket-428h/frame-158.webp | Bin 0 -> 14180 bytes .../chrome-sprocket-428h/frame-159.webp | Bin 0 -> 14128 bytes .../chrome-sprocket-428h/frame-160.webp | Bin 0 -> 14252 bytes .../chrome-sprocket-428h/frame-161.webp | Bin 0 -> 14084 bytes .../chrome-sprocket-428h/frame-162.webp | Bin 0 -> 14320 bytes .../chrome-sprocket-428h/frame-163.webp | Bin 0 -> 14084 bytes .../chrome-sprocket-428h/frame-164.webp | Bin 0 -> 14276 bytes .../chrome-sprocket-428h/frame-165.webp | Bin 0 -> 14570 bytes .../chrome-sprocket-428h/frame-166.webp | Bin 0 -> 14222 bytes .../chrome-sprocket-428h/frame-167.webp | Bin 0 -> 14690 bytes .../chrome-sprocket-428h/frame-168.webp | Bin 0 -> 14338 bytes .../chrome-sprocket-428h/frame-169.webp | Bin 0 -> 14342 bytes .../chrome-sprocket-428h/frame-170.webp | Bin 0 -> 14292 bytes .../chrome-sprocket-428h/frame-171.webp | Bin 0 -> 14130 bytes .../chrome-sprocket-428h/frame-172.webp | Bin 0 -> 14266 bytes .../chrome-sprocket-428h/frame-173.webp | Bin 0 -> 14738 bytes .../chrome-sprocket-428h/frame-174.webp | Bin 0 -> 14180 bytes .../chrome-sprocket-428h/frame-175.webp | Bin 0 -> 14228 bytes .../chrome-sprocket-428h/frame-176.webp | Bin 0 -> 14418 bytes .../chrome-sprocket-428h/frame-177.webp | Bin 0 -> 14430 bytes .../chrome-sprocket-428h/frame-178.webp | Bin 0 -> 14262 bytes .../chrome-sprocket-428h/frame-179.webp | Bin 0 -> 14522 bytes .../chrome-sprocket-428h/frame-180.webp | Bin 0 -> 14396 bytes .../chrome-sprocket-428h/frame-181.webp | Bin 0 -> 14732 bytes .../chrome-sprocket-428h/frame-182.webp | Bin 0 -> 14592 bytes .../chrome-sprocket-428h/frame-183.webp | Bin 0 -> 14446 bytes .../chrome-sprocket-428h/frame-184.webp | Bin 0 -> 14506 bytes .../chrome-sprocket-428h/frame-185.webp | Bin 0 -> 14936 bytes .../chrome-sprocket-428h/frame-186.webp | Bin 0 -> 15056 bytes .../chrome-sprocket-428h/frame-187.webp | Bin 0 -> 15084 bytes .../chrome-sprocket-428h/frame-188.webp | Bin 0 -> 15020 bytes .../chrome-sprocket-428h/frame-189.webp | Bin 0 -> 15220 bytes .../chrome-sprocket-428h/frame-190.webp | Bin 0 -> 14950 bytes .../chrome-sprocket-428h/frame-191.webp | Bin 0 -> 15180 bytes .../chrome-sprocket-428h/frame-192.webp | Bin 0 -> 15190 bytes .../chrome-sprocket-428h/frame-193.webp | Bin 0 -> 7752 bytes .../chrome-sprocket-428h/frame-194.webp | Bin 0 -> 7790 bytes .../chrome-sprocket-428h/frame-195.webp | Bin 0 -> 7874 bytes .../chrome-sprocket-428h/frame-196.webp | Bin 0 -> 8036 bytes .../chrome-sprocket-428h/frame-197.webp | Bin 0 -> 8084 bytes .../chrome-sprocket-428h/frame-198.webp | Bin 0 -> 8066 bytes .../chrome-sprocket-428h/frame-199.webp | Bin 0 -> 8232 bytes .../chrome-sprocket-428h/frame-200.webp | Bin 0 -> 8380 bytes .../chrome-sprocket-428h/frame-201.webp | Bin 0 -> 8336 bytes .../chrome-sprocket-428h/frame-202.webp | Bin 0 -> 8316 bytes .../chrome-sprocket-428h/frame-203.webp | Bin 0 -> 8580 bytes .../chrome-sprocket-428h/frame-204.webp | Bin 0 -> 8536 bytes .../chrome-sprocket-428h/frame-205.webp | Bin 0 -> 8648 bytes .../chrome-sprocket-428h/frame-206.webp | Bin 0 -> 8694 bytes .../chrome-sprocket-428h/frame-207.webp | Bin 0 -> 8734 bytes .../chrome-sprocket-428h/frame-208.webp | Bin 0 -> 8796 bytes .../chrome-sprocket-428h/frame-209.webp | Bin 0 -> 8866 bytes .../chrome-sprocket-428h/frame-210.webp | Bin 0 -> 8850 bytes .../chrome-sprocket-428h/frame-211.webp | Bin 0 -> 8926 bytes .../chrome-sprocket-428h/frame-212.webp | Bin 0 -> 9178 bytes .../chrome-sprocket-428h/frame-213.webp | Bin 0 -> 9194 bytes .../chrome-sprocket-428h/frame-214.webp | Bin 0 -> 9094 bytes .../chrome-sprocket-428h/frame-215.webp | Bin 0 -> 9246 bytes .../chrome-sprocket-428h/frame-216.webp | Bin 0 -> 9298 bytes .../chrome-sprocket-428h/frame-217.webp | Bin 0 -> 9306 bytes .../chrome-sprocket-428h/frame-218.webp | Bin 0 -> 9200 bytes .../chrome-sprocket-428h/frame-219.webp | Bin 0 -> 9202 bytes .../chrome-sprocket-428h/frame-220.webp | Bin 0 -> 9324 bytes .../chrome-sprocket-428h/frame-221.webp | Bin 0 -> 9500 bytes .../chrome-sprocket-428h/frame-222.webp | Bin 0 -> 9376 bytes .../chrome-sprocket-428h/frame-223.webp | Bin 0 -> 9440 bytes .../chrome-sprocket-428h/frame-224.webp | Bin 0 -> 9566 bytes .../chrome-sprocket-428h/frame-225.webp | Bin 0 -> 9620 bytes .../chrome-sprocket-428h/frame-226.webp | Bin 0 -> 9680 bytes .../chrome-sprocket-428h/frame-227.webp | Bin 0 -> 9744 bytes .../chrome-sprocket-428h/frame-228.webp | Bin 0 -> 9916 bytes .../chrome-sprocket-428h/frame-229.webp | Bin 0 -> 10164 bytes .../chrome-sprocket-428h/frame-230.webp | Bin 0 -> 9844 bytes .../chrome-sprocket-428h/frame-231.webp | Bin 0 -> 10104 bytes .../chrome-sprocket-428h/frame-232.webp | Bin 0 -> 9968 bytes .../chrome-sprocket-428h/frame-233.webp | Bin 0 -> 10196 bytes .../chrome-sprocket-428h/frame-234.webp | Bin 0 -> 10024 bytes .../chrome-sprocket-428h/frame-235.webp | Bin 0 -> 10180 bytes .../chrome-sprocket-428h/frame-236.webp | Bin 0 -> 10396 bytes .../chrome-sprocket-428h/frame-237.webp | Bin 0 -> 10458 bytes .../chrome-sprocket-428h/frame-238.webp | Bin 0 -> 10124 bytes .../chrome-sprocket-428h/frame-239.webp | Bin 0 -> 10348 bytes .../chrome-sprocket-428h/frame-240.webp | Bin 0 -> 10326 bytes .../chrome-sprocket-428h/frame-241.webp | Bin 0 -> 10722 bytes .../chrome-sprocket-428h/frame-242.webp | Bin 0 -> 10574 bytes .../chrome-sprocket-428h/frame-243.webp | Bin 0 -> 10660 bytes .../chrome-sprocket-428h/frame-244.webp | Bin 0 -> 10638 bytes .../chrome-sprocket-428h/frame-245.webp | Bin 0 -> 10928 bytes .../chrome-sprocket-428h/frame-246.webp | Bin 0 -> 10722 bytes .../chrome-sprocket-428h/frame-247.webp | Bin 0 -> 11054 bytes .../chrome-sprocket-428h/frame-248.webp | Bin 0 -> 11130 bytes .../chrome-sprocket-428h/frame-249.webp | Bin 0 -> 11104 bytes .../chrome-sprocket-428h/frame-250.webp | Bin 0 -> 11102 bytes .../chrome-sprocket-428h/frame-251.webp | Bin 0 -> 11234 bytes .../chrome-sprocket-428h/frame-252.webp | Bin 0 -> 11520 bytes .../chrome-sprocket-428h/frame-253.webp | Bin 0 -> 12032 bytes .../chrome-sprocket-428h/frame-254.webp | Bin 0 -> 11734 bytes .../chrome-sprocket-428h/frame-255.webp | Bin 0 -> 11792 bytes .../chrome-sprocket-428h/frame-256.webp | Bin 0 -> 11930 bytes .../chrome-sprocket-428h/frame-257.webp | Bin 0 -> 12616 bytes .../chrome-sprocket-428h/frame-258.webp | Bin 0 -> 12604 bytes .../chrome-sprocket-428h/frame-259.webp | Bin 0 -> 12812 bytes .../chrome-sprocket-428h/frame-260.webp | Bin 0 -> 12918 bytes .../chrome-sprocket-428h/frame-261.webp | Bin 0 -> 13402 bytes .../chrome-sprocket-428h/frame-262.webp | Bin 0 -> 13070 bytes .../chrome-sprocket-428h/frame-263.webp | Bin 0 -> 13114 bytes .../chrome-sprocket-428h/frame-264.webp | Bin 0 -> 13004 bytes .../chrome-sprocket-428h/frame-265.webp | Bin 0 -> 13120 bytes .../chrome-sprocket-428h/frame-266.webp | Bin 0 -> 13260 bytes .../chrome-sprocket-428h/frame-267.webp | Bin 0 -> 13222 bytes .../chrome-sprocket-428h/frame-268.webp | Bin 0 -> 13320 bytes .../chrome-sprocket-428h/frame-269.webp | Bin 0 -> 13730 bytes .../chrome-sprocket-428h/frame-270.webp | Bin 0 -> 13488 bytes .../chrome-sprocket-428h/frame-271.webp | Bin 0 -> 13438 bytes .../chrome-sprocket-428h/frame-272.webp | Bin 0 -> 13476 bytes .../chrome-sprocket-428h/frame-273.webp | Bin 0 -> 13606 bytes .../chrome-sprocket-428h/frame-274.webp | Bin 0 -> 13722 bytes .../chrome-sprocket-428h/frame-275.webp | Bin 0 -> 13888 bytes .../chrome-sprocket-428h/frame-276.webp | Bin 0 -> 14002 bytes .../chrome-sprocket-428h/frame-277.webp | Bin 0 -> 14612 bytes .../chrome-sprocket-428h/frame-278.webp | Bin 0 -> 14362 bytes .../chrome-sprocket-428h/frame-279.webp | Bin 0 -> 14440 bytes .../chrome-sprocket-428h/frame-280.webp | Bin 0 -> 14560 bytes .../chrome-sprocket-428h/frame-281.webp | Bin 0 -> 14518 bytes .../chrome-sprocket-428h/frame-282.webp | Bin 0 -> 14742 bytes .../chrome-sprocket-428h/frame-283.webp | Bin 0 -> 14712 bytes .../chrome-sprocket-428h/frame-284.webp | Bin 0 -> 15042 bytes .../chrome-sprocket-428h/frame-285.webp | Bin 0 -> 15200 bytes .../chrome-sprocket-428h/frame-286.webp | Bin 0 -> 15300 bytes .../chrome-sprocket-428h/frame-287.webp | Bin 0 -> 15096 bytes .../chrome-sprocket-428h/frame-288.webp | Bin 0 -> 15082 bytes .../chrome-sprocket-428h/frame-289.webp | Bin 0 -> 15150 bytes .../chrome-sprocket-428h/frame-290.webp | Bin 0 -> 15162 bytes .../chrome-sprocket-428h/frame-291.webp | Bin 0 -> 15352 bytes .../chrome-sprocket-428h/frame-292.webp | Bin 0 -> 15640 bytes .../chrome-sprocket-428h/frame-293.webp | Bin 0 -> 15796 bytes .../chrome-sprocket-428h/frame-294.webp | Bin 0 -> 16008 bytes .../chrome-sprocket-428h/frame-295.webp | Bin 0 -> 15690 bytes .../chrome-sprocket-428h/frame-296.webp | Bin 0 -> 15508 bytes .../chrome-sprocket-428h/frame-297.webp | Bin 0 -> 15678 bytes .../chrome-sprocket-428h/frame-298.webp | Bin 0 -> 15682 bytes .../chrome-sprocket-428h/frame-299.webp | Bin 0 -> 15994 bytes .../chrome-sprocket-428h/frame-300.webp | Bin 0 -> 16178 bytes .../chrome-sprocket-428h/frame-301.webp | Bin 0 -> 16420 bytes .../chrome-sprocket-428h/frame-302.webp | Bin 0 -> 16452 bytes .../chrome-sprocket-428h/frame-303.webp | Bin 0 -> 16328 bytes .../chrome-sprocket-428h/frame-304.webp | Bin 0 -> 16500 bytes .../chrome-sprocket-428h/frame-305.webp | Bin 0 -> 16388 bytes .../chrome-sprocket-428h/frame-306.webp | Bin 0 -> 16448 bytes .../chrome-sprocket-428h/frame-307.webp | Bin 0 -> 16402 bytes .../chrome-sprocket-428h/frame-308.webp | Bin 0 -> 16492 bytes .../chrome-sprocket-428h/frame-309.webp | Bin 0 -> 16804 bytes .../chrome-sprocket-428h/frame-310.webp | Bin 0 -> 16602 bytes .../chrome-sprocket-428h/frame-311.webp | Bin 0 -> 16576 bytes .../chrome-sprocket-428h/frame-312.webp | Bin 0 -> 16442 bytes .../chrome-sprocket-428h/frame-313.webp | Bin 0 -> 16752 bytes .../chrome-sprocket-428h/frame-314.webp | Bin 0 -> 16356 bytes .../chrome-sprocket-428h/frame-315.webp | Bin 0 -> 16384 bytes .../chrome-sprocket-428h/frame-316.webp | Bin 0 -> 16456 bytes .../chrome-sprocket-428h/frame-317.webp | Bin 0 -> 16888 bytes .../chrome-sprocket-428h/frame-318.webp | Bin 0 -> 16364 bytes .../chrome-sprocket-428h/frame-319.webp | Bin 0 -> 16498 bytes .../chrome-sprocket-428h/frame-320.webp | Bin 0 -> 16410 bytes .../chrome-sprocket-428h/frame-321.webp | Bin 0 -> 16460 bytes .../chrome-sprocket-428h/frame-322.webp | Bin 0 -> 16570 bytes .../chrome-sprocket-428h/frame-323.webp | Bin 0 -> 16546 bytes .../chrome-sprocket-428h/frame-324.webp | Bin 0 -> 16938 bytes .../chrome-sprocket-428h/frame-325.webp | Bin 0 -> 17050 bytes .../chrome-sprocket-428h/frame-326.webp | Bin 0 -> 16872 bytes .../chrome-sprocket-428h/frame-327.webp | Bin 0 -> 16604 bytes .../chrome-sprocket-428h/frame-328.webp | Bin 0 -> 16550 bytes .../chrome-sprocket-428h/frame-329.webp | Bin 0 -> 16634 bytes .../chrome-sprocket-428h/frame-330.webp | Bin 0 -> 16950 bytes .../chrome-sprocket-428h/frame-331.webp | Bin 0 -> 16878 bytes .../chrome-sprocket-428h/frame-332.webp | Bin 0 -> 17502 bytes .../chrome-sprocket-428h/frame-333.webp | Bin 0 -> 17126 bytes .../chrome-sprocket-428h/frame-334.webp | Bin 0 -> 17130 bytes .../chrome-sprocket-428h/frame-335.webp | Bin 0 -> 16722 bytes .../chrome-sprocket-428h/frame-336.webp | Bin 0 -> 16954 bytes .../chrome-sprocket-428h/frame-337.webp | Bin 0 -> 17028 bytes .../chrome-sprocket-428h/frame-338.webp | Bin 0 -> 17084 bytes .../chrome-sprocket-428h/frame-339.webp | Bin 0 -> 17126 bytes .../chrome-sprocket-428h/frame-340.webp | Bin 0 -> 17608 bytes .../chrome-sprocket-428h/frame-341.webp | Bin 0 -> 17804 bytes .../chrome-sprocket-428h/frame-342.webp | Bin 0 -> 17450 bytes .../chrome-sprocket-428h/frame-343.webp | Bin 0 -> 17448 bytes .../chrome-sprocket-428h/frame-344.webp | Bin 0 -> 17454 bytes .../chrome-sprocket-428h/frame-345.webp | Bin 0 -> 17508 bytes .../chrome-sprocket-428h/frame-346.webp | Bin 0 -> 18028 bytes .../chrome-sprocket-428h/frame-347.webp | Bin 0 -> 17744 bytes .../chrome-sprocket-428h/frame-348.webp | Bin 0 -> 18262 bytes .../chrome-sprocket-428h/frame-349.webp | Bin 0 -> 18178 bytes .../chrome-sprocket-428h/frame-350.webp | Bin 0 -> 18540 bytes .../chrome-sprocket-428h/frame-351.webp | Bin 0 -> 18350 bytes .../chrome-sprocket-428h/frame-352.webp | Bin 0 -> 18648 bytes .../chrome-sprocket-428h/frame-353.webp | Bin 0 -> 18546 bytes .../chrome-sprocket-428h/frame-354.webp | Bin 0 -> 18770 bytes .../chrome-sprocket-428h/frame-355.webp | Bin 0 -> 18778 bytes .../chrome-sprocket-428h/frame-356.webp | Bin 0 -> 19824 bytes .../chrome-sprocket-428h/frame-357.webp | Bin 0 -> 19438 bytes .../chrome-sprocket-428h/frame-358.webp | Bin 0 -> 19044 bytes .../chrome-sprocket-428h/frame-359.webp | Bin 0 -> 18752 bytes .../chrome-sprocket-428h/frame-360.webp | Bin 0 -> 19014 bytes .../chrome-sprocket-428h/frame-361.webp | Bin 0 -> 18986 bytes .../chrome-sprocket-428h/frame-362.webp | Bin 0 -> 18632 bytes .../chrome-sprocket-428h/frame-363.webp | Bin 0 -> 18204 bytes .../chrome-sprocket-428h/frame-364.webp | Bin 0 -> 18562 bytes .../chrome-sprocket-428h/frame-365.webp | Bin 0 -> 18200 bytes .../chrome-sprocket-428h/frame-366.webp | Bin 0 -> 18146 bytes .../chrome-sprocket-428h/frame-367.webp | Bin 0 -> 17862 bytes .../chrome-sprocket-428h/frame-368.webp | Bin 0 -> 17856 bytes .../chrome-sprocket-428h/frame-369.webp | Bin 0 -> 17588 bytes .../chrome-sprocket-428h/frame-370.webp | Bin 0 -> 17730 bytes .../chrome-sprocket-428h/frame-371.webp | Bin 0 -> 17578 bytes .../chrome-sprocket-428h/frame-372.webp | Bin 0 -> 17310 bytes .../chrome-sprocket-428h/frame-373.webp | Bin 0 -> 17260 bytes .../chrome-sprocket-428h/frame-374.webp | Bin 0 -> 16936 bytes .../chrome-sprocket-428h/frame-375.webp | Bin 0 -> 17012 bytes .../chrome-sprocket-428h/frame-376.webp | Bin 0 -> 17192 bytes .../chrome-sprocket-428h/frame-377.webp | Bin 0 -> 17692 bytes .../chrome-sprocket-428h/frame-378.webp | Bin 0 -> 17854 bytes .../chrome-sprocket-428h/frame-379.webp | Bin 0 -> 17598 bytes .../chrome-sprocket-428h/frame-380.webp | Bin 0 -> 17874 bytes .../chrome-sprocket-428h/frame-381.webp | Bin 0 -> 17846 bytes .../chrome-sprocket-428h/frame-382.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-383.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-384.webp | Bin 0 -> 17610 bytes .../chrome-sprocket-428h/frame-385.webp | Bin 0 -> 17486 bytes .../chrome-sprocket-428h/frame-386.webp | Bin 0 -> 17662 bytes .../chrome-sprocket-428h/frame-387.webp | Bin 0 -> 17718 bytes .../chrome-sprocket-428h/frame-388.webp | Bin 0 -> 18172 bytes .../chrome-sprocket-428h/frame-389.webp | Bin 0 -> 18212 bytes .../chrome-sprocket-428h/frame-390.webp | Bin 0 -> 17822 bytes .../chrome-sprocket-428h/frame-391.webp | Bin 0 -> 17696 bytes .../chrome-sprocket-428h/frame-392.webp | Bin 0 -> 17750 bytes .../chrome-sprocket-428h/frame-393.webp | Bin 0 -> 18144 bytes .../chrome-sprocket-428h/frame-394.webp | Bin 0 -> 18144 bytes .../chrome-sprocket-428h/frame-395.webp | Bin 0 -> 18002 bytes .../chrome-sprocket-428h/frame-396.webp | Bin 0 -> 18062 bytes .../chrome-sprocket-428h/frame-397.webp | Bin 0 -> 18314 bytes .../chrome-sprocket-428h/frame-398.webp | Bin 0 -> 18352 bytes .../chrome-sprocket-428h/frame-399.webp | Bin 0 -> 17902 bytes .../chrome-sprocket-428h/frame-400.webp | Bin 0 -> 17430 bytes .../chrome-sprocket-428h/frame-401.webp | Bin 0 -> 17436 bytes .../chrome-sprocket-428h/frame-402.webp | Bin 0 -> 17394 bytes .../chrome-sprocket-428h/frame-403.webp | Bin 0 -> 17386 bytes .../chrome-sprocket-428h/frame-404.webp | Bin 0 -> 17164 bytes .../chrome-sprocket-428h/frame-405.webp | Bin 0 -> 17288 bytes .../chrome-sprocket-428h/frame-406.webp | Bin 0 -> 17928 bytes .../chrome-sprocket-428h/frame-407.webp | Bin 0 -> 17492 bytes .../chrome-sprocket-428h/frame-408.webp | Bin 0 -> 17398 bytes .../chrome-sprocket-428h/frame-409.webp | Bin 0 -> 17552 bytes .../chrome-sprocket-428h/frame-410.webp | Bin 0 -> 17634 bytes .../chrome-sprocket-428h/frame-411.webp | Bin 0 -> 17580 bytes .../chrome-sprocket-428h/frame-412.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-413.webp | Bin 0 -> 17490 bytes .../chrome-sprocket-428h/frame-414.webp | Bin 0 -> 17204 bytes .../chrome-sprocket-428h/frame-415.webp | Bin 0 -> 16968 bytes .../chrome-sprocket-428h/frame-416.webp | Bin 0 -> 16948 bytes .../chrome-sprocket-428h/frame-417.webp | Bin 0 -> 16950 bytes .../chrome-sprocket-428h/frame-418.webp | Bin 0 -> 17542 bytes .../chrome-sprocket-428h/frame-419.webp | Bin 0 -> 17118 bytes .../chrome-sprocket-428h/frame-420.webp | Bin 0 -> 17202 bytes .../chrome-sprocket-428h/frame-421.webp | Bin 0 -> 17322 bytes .../chrome-sprocket-428h/frame-422.webp | Bin 0 -> 17498 bytes .../chrome-sprocket-428h/frame-423.webp | Bin 0 -> 17158 bytes .../chrome-sprocket-428h/frame-424.webp | Bin 0 -> 16918 bytes .../chrome-sprocket-428h/frame-425.webp | Bin 0 -> 16794 bytes .../chrome-sprocket-428h/frame-426.webp | Bin 0 -> 16962 bytes .../chrome-sprocket-428h/frame-427.webp | Bin 0 -> 16796 bytes .../chrome-sprocket-428h/frame-428.webp | Bin 0 -> 16834 bytes .../chrome-sprocket-428h/frame-429.webp | Bin 0 -> 17236 bytes .../chrome-sprocket-428h/frame-430.webp | Bin 0 -> 17360 bytes .../chrome-sprocket-428h/frame-431.webp | Bin 0 -> 16804 bytes .../chrome-sprocket-428h/frame-432.webp | Bin 0 -> 17412 bytes .../chrome-sprocket-428h/manifest.json | 13 + apps/backend/src/index.ts | 11 +- apps/backend/src/routes/frame-sequences.ts | 215 ++++++++ apps/backend/src/routes/pages.js | 7 +- apps/backend/src/routes/pages.ts | 6 + .../chrome-sprocket-428h/frame-001.webp | Bin 0 -> 11600 bytes .../chrome-sprocket-428h/frame-002.webp | Bin 0 -> 11406 bytes .../chrome-sprocket-428h/frame-003.webp | Bin 0 -> 11492 bytes .../chrome-sprocket-428h/frame-004.webp | Bin 0 -> 11468 bytes .../chrome-sprocket-428h/frame-005.webp | Bin 0 -> 11744 bytes .../chrome-sprocket-428h/frame-006.webp | Bin 0 -> 11504 bytes .../chrome-sprocket-428h/frame-007.webp | Bin 0 -> 11672 bytes .../chrome-sprocket-428h/frame-008.webp | Bin 0 -> 11614 bytes .../chrome-sprocket-428h/frame-009.webp | Bin 0 -> 11812 bytes .../chrome-sprocket-428h/frame-010.webp | Bin 0 -> 11594 bytes .../chrome-sprocket-428h/frame-011.webp | Bin 0 -> 11588 bytes .../chrome-sprocket-428h/frame-012.webp | Bin 0 -> 11666 bytes .../chrome-sprocket-428h/frame-013.webp | Bin 0 -> 11774 bytes .../chrome-sprocket-428h/frame-014.webp | Bin 0 -> 11702 bytes .../chrome-sprocket-428h/frame-015.webp | Bin 0 -> 11736 bytes .../chrome-sprocket-428h/frame-016.webp | Bin 0 -> 11650 bytes .../chrome-sprocket-428h/frame-017.webp | Bin 0 -> 11742 bytes .../chrome-sprocket-428h/frame-018.webp | Bin 0 -> 11598 bytes .../chrome-sprocket-428h/frame-019.webp | Bin 0 -> 11584 bytes .../chrome-sprocket-428h/frame-020.webp | Bin 0 -> 11792 bytes .../chrome-sprocket-428h/frame-021.webp | Bin 0 -> 11848 bytes .../chrome-sprocket-428h/frame-022.webp | Bin 0 -> 11830 bytes .../chrome-sprocket-428h/frame-023.webp | Bin 0 -> 11798 bytes .../chrome-sprocket-428h/frame-024.webp | Bin 0 -> 11822 bytes .../chrome-sprocket-428h/frame-025.webp | Bin 0 -> 11852 bytes .../chrome-sprocket-428h/frame-026.webp | Bin 0 -> 11736 bytes .../chrome-sprocket-428h/frame-027.webp | Bin 0 -> 11716 bytes .../chrome-sprocket-428h/frame-028.webp | Bin 0 -> 11738 bytes .../chrome-sprocket-428h/frame-029.webp | Bin 0 -> 11902 bytes .../chrome-sprocket-428h/frame-030.webp | Bin 0 -> 11718 bytes .../chrome-sprocket-428h/frame-031.webp | Bin 0 -> 11774 bytes .../chrome-sprocket-428h/frame-032.webp | Bin 0 -> 11678 bytes .../chrome-sprocket-428h/frame-033.webp | Bin 0 -> 11772 bytes .../chrome-sprocket-428h/frame-034.webp | Bin 0 -> 11718 bytes .../chrome-sprocket-428h/frame-035.webp | Bin 0 -> 11560 bytes .../chrome-sprocket-428h/frame-036.webp | Bin 0 -> 11716 bytes .../chrome-sprocket-428h/frame-037.webp | Bin 0 -> 11874 bytes .../chrome-sprocket-428h/frame-038.webp | Bin 0 -> 11870 bytes .../chrome-sprocket-428h/frame-039.webp | Bin 0 -> 11778 bytes .../chrome-sprocket-428h/frame-040.webp | Bin 0 -> 11864 bytes .../chrome-sprocket-428h/frame-041.webp | Bin 0 -> 11906 bytes .../chrome-sprocket-428h/frame-042.webp | Bin 0 -> 11862 bytes .../chrome-sprocket-428h/frame-043.webp | Bin 0 -> 11900 bytes .../chrome-sprocket-428h/frame-044.webp | Bin 0 -> 11814 bytes .../chrome-sprocket-428h/frame-045.webp | Bin 0 -> 11872 bytes .../chrome-sprocket-428h/frame-046.webp | Bin 0 -> 11738 bytes .../chrome-sprocket-428h/frame-047.webp | Bin 0 -> 11874 bytes .../chrome-sprocket-428h/frame-048.webp | Bin 0 -> 12096 bytes .../chrome-sprocket-428h/frame-049.webp | Bin 0 -> 12342 bytes .../chrome-sprocket-428h/frame-050.webp | Bin 0 -> 12050 bytes .../chrome-sprocket-428h/frame-051.webp | Bin 0 -> 11890 bytes .../chrome-sprocket-428h/frame-052.webp | Bin 0 -> 12158 bytes .../chrome-sprocket-428h/frame-053.webp | Bin 0 -> 12446 bytes .../chrome-sprocket-428h/frame-054.webp | Bin 0 -> 12284 bytes .../chrome-sprocket-428h/frame-055.webp | Bin 0 -> 12334 bytes .../chrome-sprocket-428h/frame-056.webp | Bin 0 -> 12202 bytes .../chrome-sprocket-428h/frame-057.webp | Bin 0 -> 12544 bytes .../chrome-sprocket-428h/frame-058.webp | Bin 0 -> 12382 bytes .../chrome-sprocket-428h/frame-059.webp | Bin 0 -> 12234 bytes .../chrome-sprocket-428h/frame-060.webp | Bin 0 -> 12222 bytes .../chrome-sprocket-428h/frame-061.webp | Bin 0 -> 12652 bytes .../chrome-sprocket-428h/frame-062.webp | Bin 0 -> 12560 bytes .../chrome-sprocket-428h/frame-063.webp | Bin 0 -> 12542 bytes .../chrome-sprocket-428h/frame-064.webp | Bin 0 -> 12438 bytes .../chrome-sprocket-428h/frame-065.webp | Bin 0 -> 12600 bytes .../chrome-sprocket-428h/frame-066.webp | Bin 0 -> 12910 bytes .../chrome-sprocket-428h/frame-067.webp | Bin 0 -> 12908 bytes .../chrome-sprocket-428h/frame-068.webp | Bin 0 -> 12782 bytes .../chrome-sprocket-428h/frame-069.webp | Bin 0 -> 12936 bytes .../chrome-sprocket-428h/frame-070.webp | Bin 0 -> 13050 bytes .../chrome-sprocket-428h/frame-071.webp | Bin 0 -> 13096 bytes .../chrome-sprocket-428h/frame-072.webp | Bin 0 -> 12934 bytes .../chrome-sprocket-428h/frame-073.webp | Bin 0 -> 13288 bytes .../chrome-sprocket-428h/frame-074.webp | Bin 0 -> 13116 bytes .../chrome-sprocket-428h/frame-075.webp | Bin 0 -> 13436 bytes .../chrome-sprocket-428h/frame-076.webp | Bin 0 -> 13446 bytes .../chrome-sprocket-428h/frame-077.webp | Bin 0 -> 13626 bytes .../chrome-sprocket-428h/frame-078.webp | Bin 0 -> 13278 bytes .../chrome-sprocket-428h/frame-079.webp | Bin 0 -> 13246 bytes .../chrome-sprocket-428h/frame-080.webp | Bin 0 -> 13248 bytes .../chrome-sprocket-428h/frame-081.webp | Bin 0 -> 13474 bytes .../chrome-sprocket-428h/frame-082.webp | Bin 0 -> 13288 bytes .../chrome-sprocket-428h/frame-083.webp | Bin 0 -> 13252 bytes .../chrome-sprocket-428h/frame-084.webp | Bin 0 -> 13352 bytes .../chrome-sprocket-428h/frame-085.webp | Bin 0 -> 13630 bytes .../chrome-sprocket-428h/frame-086.webp | Bin 0 -> 13396 bytes .../chrome-sprocket-428h/frame-087.webp | Bin 0 -> 13446 bytes .../chrome-sprocket-428h/frame-088.webp | Bin 0 -> 13292 bytes .../chrome-sprocket-428h/frame-089.webp | Bin 0 -> 13368 bytes .../chrome-sprocket-428h/frame-090.webp | Bin 0 -> 13492 bytes .../chrome-sprocket-428h/frame-091.webp | Bin 0 -> 13484 bytes .../chrome-sprocket-428h/frame-092.webp | Bin 0 -> 13614 bytes .../chrome-sprocket-428h/frame-093.webp | Bin 0 -> 13548 bytes .../chrome-sprocket-428h/frame-094.webp | Bin 0 -> 13620 bytes .../chrome-sprocket-428h/frame-095.webp | Bin 0 -> 13472 bytes .../chrome-sprocket-428h/frame-096.webp | Bin 0 -> 13276 bytes .../chrome-sprocket-428h/frame-097.webp | Bin 0 -> 13488 bytes .../chrome-sprocket-428h/frame-098.webp | Bin 0 -> 13408 bytes .../chrome-sprocket-428h/frame-099.webp | Bin 0 -> 13462 bytes .../chrome-sprocket-428h/frame-100.webp | Bin 0 -> 13734 bytes .../chrome-sprocket-428h/frame-101.webp | Bin 0 -> 13686 bytes .../chrome-sprocket-428h/frame-102.webp | Bin 0 -> 13594 bytes .../chrome-sprocket-428h/frame-103.webp | Bin 0 -> 13612 bytes .../chrome-sprocket-428h/frame-104.webp | Bin 0 -> 13744 bytes .../chrome-sprocket-428h/frame-105.webp | Bin 0 -> 13646 bytes .../chrome-sprocket-428h/frame-106.webp | Bin 0 -> 13718 bytes .../chrome-sprocket-428h/frame-107.webp | Bin 0 -> 13598 bytes .../chrome-sprocket-428h/frame-108.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-109.webp | Bin 0 -> 13950 bytes .../chrome-sprocket-428h/frame-110.webp | Bin 0 -> 13864 bytes .../chrome-sprocket-428h/frame-111.webp | Bin 0 -> 13700 bytes .../chrome-sprocket-428h/frame-112.webp | Bin 0 -> 13872 bytes .../chrome-sprocket-428h/frame-113.webp | Bin 0 -> 13852 bytes .../chrome-sprocket-428h/frame-114.webp | Bin 0 -> 13480 bytes .../chrome-sprocket-428h/frame-115.webp | Bin 0 -> 13412 bytes .../chrome-sprocket-428h/frame-116.webp | Bin 0 -> 13640 bytes .../chrome-sprocket-428h/frame-117.webp | Bin 0 -> 14146 bytes .../chrome-sprocket-428h/frame-118.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-119.webp | Bin 0 -> 13576 bytes .../chrome-sprocket-428h/frame-120.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-121.webp | Bin 0 -> 13854 bytes .../chrome-sprocket-428h/frame-122.webp | Bin 0 -> 13916 bytes .../chrome-sprocket-428h/frame-123.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-124.webp | Bin 0 -> 13770 bytes .../chrome-sprocket-428h/frame-125.webp | Bin 0 -> 14026 bytes .../chrome-sprocket-428h/frame-126.webp | Bin 0 -> 13936 bytes .../chrome-sprocket-428h/frame-127.webp | Bin 0 -> 13786 bytes .../chrome-sprocket-428h/frame-128.webp | Bin 0 -> 13860 bytes .../chrome-sprocket-428h/frame-129.webp | Bin 0 -> 13944 bytes .../chrome-sprocket-428h/frame-130.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-131.webp | Bin 0 -> 13734 bytes .../chrome-sprocket-428h/frame-132.webp | Bin 0 -> 13890 bytes .../chrome-sprocket-428h/frame-133.webp | Bin 0 -> 14124 bytes .../chrome-sprocket-428h/frame-134.webp | Bin 0 -> 13830 bytes .../chrome-sprocket-428h/frame-135.webp | Bin 0 -> 13816 bytes .../chrome-sprocket-428h/frame-136.webp | Bin 0 -> 13836 bytes .../chrome-sprocket-428h/frame-137.webp | Bin 0 -> 13722 bytes .../chrome-sprocket-428h/frame-138.webp | Bin 0 -> 13768 bytes .../chrome-sprocket-428h/frame-139.webp | Bin 0 -> 13634 bytes .../chrome-sprocket-428h/frame-140.webp | Bin 0 -> 13814 bytes .../chrome-sprocket-428h/frame-141.webp | Bin 0 -> 13952 bytes .../chrome-sprocket-428h/frame-142.webp | Bin 0 -> 14076 bytes .../chrome-sprocket-428h/frame-143.webp | Bin 0 -> 13864 bytes .../chrome-sprocket-428h/frame-144.webp | Bin 0 -> 13818 bytes .../chrome-sprocket-428h/frame-145.webp | Bin 0 -> 13780 bytes .../chrome-sprocket-428h/frame-146.webp | Bin 0 -> 13842 bytes .../chrome-sprocket-428h/frame-147.webp | Bin 0 -> 14102 bytes .../chrome-sprocket-428h/frame-148.webp | Bin 0 -> 14020 bytes .../chrome-sprocket-428h/frame-149.webp | Bin 0 -> 14548 bytes .../chrome-sprocket-428h/frame-150.webp | Bin 0 -> 14228 bytes .../chrome-sprocket-428h/frame-151.webp | Bin 0 -> 13976 bytes .../chrome-sprocket-428h/frame-152.webp | Bin 0 -> 13904 bytes .../chrome-sprocket-428h/frame-153.webp | Bin 0 -> 13854 bytes .../chrome-sprocket-428h/frame-154.webp | Bin 0 -> 13858 bytes .../chrome-sprocket-428h/frame-155.webp | Bin 0 -> 14106 bytes .../chrome-sprocket-428h/frame-156.webp | Bin 0 -> 14100 bytes .../chrome-sprocket-428h/frame-157.webp | Bin 0 -> 14032 bytes .../chrome-sprocket-428h/frame-158.webp | Bin 0 -> 14180 bytes .../chrome-sprocket-428h/frame-159.webp | Bin 0 -> 14128 bytes .../chrome-sprocket-428h/frame-160.webp | Bin 0 -> 14252 bytes .../chrome-sprocket-428h/frame-161.webp | Bin 0 -> 14084 bytes .../chrome-sprocket-428h/frame-162.webp | Bin 0 -> 14320 bytes .../chrome-sprocket-428h/frame-163.webp | Bin 0 -> 14084 bytes .../chrome-sprocket-428h/frame-164.webp | Bin 0 -> 14276 bytes .../chrome-sprocket-428h/frame-165.webp | Bin 0 -> 14570 bytes .../chrome-sprocket-428h/frame-166.webp | Bin 0 -> 14222 bytes .../chrome-sprocket-428h/frame-167.webp | Bin 0 -> 14690 bytes .../chrome-sprocket-428h/frame-168.webp | Bin 0 -> 14338 bytes .../chrome-sprocket-428h/frame-169.webp | Bin 0 -> 14342 bytes .../chrome-sprocket-428h/frame-170.webp | Bin 0 -> 14292 bytes .../chrome-sprocket-428h/frame-171.webp | Bin 0 -> 14130 bytes .../chrome-sprocket-428h/frame-172.webp | Bin 0 -> 14266 bytes .../chrome-sprocket-428h/frame-173.webp | Bin 0 -> 14738 bytes .../chrome-sprocket-428h/frame-174.webp | Bin 0 -> 14180 bytes .../chrome-sprocket-428h/frame-175.webp | Bin 0 -> 14228 bytes .../chrome-sprocket-428h/frame-176.webp | Bin 0 -> 14418 bytes .../chrome-sprocket-428h/frame-177.webp | Bin 0 -> 14430 bytes .../chrome-sprocket-428h/frame-178.webp | Bin 0 -> 14262 bytes .../chrome-sprocket-428h/frame-179.webp | Bin 0 -> 14522 bytes .../chrome-sprocket-428h/frame-180.webp | Bin 0 -> 14396 bytes .../chrome-sprocket-428h/frame-181.webp | Bin 0 -> 14732 bytes .../chrome-sprocket-428h/frame-182.webp | Bin 0 -> 14592 bytes .../chrome-sprocket-428h/frame-183.webp | Bin 0 -> 14446 bytes .../chrome-sprocket-428h/frame-184.webp | Bin 0 -> 14506 bytes .../chrome-sprocket-428h/frame-185.webp | Bin 0 -> 14936 bytes .../chrome-sprocket-428h/frame-186.webp | Bin 0 -> 15056 bytes .../chrome-sprocket-428h/frame-187.webp | Bin 0 -> 15084 bytes .../chrome-sprocket-428h/frame-188.webp | Bin 0 -> 15020 bytes .../chrome-sprocket-428h/frame-189.webp | Bin 0 -> 15220 bytes .../chrome-sprocket-428h/frame-190.webp | Bin 0 -> 14950 bytes .../chrome-sprocket-428h/frame-191.webp | Bin 0 -> 15180 bytes .../chrome-sprocket-428h/frame-192.webp | Bin 0 -> 15190 bytes .../chrome-sprocket-428h/frame-193.webp | Bin 0 -> 7752 bytes .../chrome-sprocket-428h/frame-194.webp | Bin 0 -> 7790 bytes .../chrome-sprocket-428h/frame-195.webp | Bin 0 -> 7874 bytes .../chrome-sprocket-428h/frame-196.webp | Bin 0 -> 8036 bytes .../chrome-sprocket-428h/frame-197.webp | Bin 0 -> 8084 bytes .../chrome-sprocket-428h/frame-198.webp | Bin 0 -> 8066 bytes .../chrome-sprocket-428h/frame-199.webp | Bin 0 -> 8232 bytes .../chrome-sprocket-428h/frame-200.webp | Bin 0 -> 8380 bytes .../chrome-sprocket-428h/frame-201.webp | Bin 0 -> 8336 bytes .../chrome-sprocket-428h/frame-202.webp | Bin 0 -> 8316 bytes .../chrome-sprocket-428h/frame-203.webp | Bin 0 -> 8580 bytes .../chrome-sprocket-428h/frame-204.webp | Bin 0 -> 8536 bytes .../chrome-sprocket-428h/frame-205.webp | Bin 0 -> 8648 bytes .../chrome-sprocket-428h/frame-206.webp | Bin 0 -> 8694 bytes .../chrome-sprocket-428h/frame-207.webp | Bin 0 -> 8734 bytes .../chrome-sprocket-428h/frame-208.webp | Bin 0 -> 8796 bytes .../chrome-sprocket-428h/frame-209.webp | Bin 0 -> 8866 bytes .../chrome-sprocket-428h/frame-210.webp | Bin 0 -> 8850 bytes .../chrome-sprocket-428h/frame-211.webp | Bin 0 -> 8926 bytes .../chrome-sprocket-428h/frame-212.webp | Bin 0 -> 9178 bytes .../chrome-sprocket-428h/frame-213.webp | Bin 0 -> 9194 bytes .../chrome-sprocket-428h/frame-214.webp | Bin 0 -> 9094 bytes .../chrome-sprocket-428h/frame-215.webp | Bin 0 -> 9246 bytes .../chrome-sprocket-428h/frame-216.webp | Bin 0 -> 9298 bytes .../chrome-sprocket-428h/frame-217.webp | Bin 0 -> 9306 bytes .../chrome-sprocket-428h/frame-218.webp | Bin 0 -> 9200 bytes .../chrome-sprocket-428h/frame-219.webp | Bin 0 -> 9202 bytes .../chrome-sprocket-428h/frame-220.webp | Bin 0 -> 9324 bytes .../chrome-sprocket-428h/frame-221.webp | Bin 0 -> 9500 bytes .../chrome-sprocket-428h/frame-222.webp | Bin 0 -> 9376 bytes .../chrome-sprocket-428h/frame-223.webp | Bin 0 -> 9440 bytes .../chrome-sprocket-428h/frame-224.webp | Bin 0 -> 9566 bytes .../chrome-sprocket-428h/frame-225.webp | Bin 0 -> 9620 bytes .../chrome-sprocket-428h/frame-226.webp | Bin 0 -> 9680 bytes .../chrome-sprocket-428h/frame-227.webp | Bin 0 -> 9744 bytes .../chrome-sprocket-428h/frame-228.webp | Bin 0 -> 9916 bytes .../chrome-sprocket-428h/frame-229.webp | Bin 0 -> 10164 bytes .../chrome-sprocket-428h/frame-230.webp | Bin 0 -> 9844 bytes .../chrome-sprocket-428h/frame-231.webp | Bin 0 -> 10104 bytes .../chrome-sprocket-428h/frame-232.webp | Bin 0 -> 9968 bytes .../chrome-sprocket-428h/frame-233.webp | Bin 0 -> 10196 bytes .../chrome-sprocket-428h/frame-234.webp | Bin 0 -> 10024 bytes .../chrome-sprocket-428h/frame-235.webp | Bin 0 -> 10180 bytes .../chrome-sprocket-428h/frame-236.webp | Bin 0 -> 10396 bytes .../chrome-sprocket-428h/frame-237.webp | Bin 0 -> 10458 bytes .../chrome-sprocket-428h/frame-238.webp | Bin 0 -> 10124 bytes .../chrome-sprocket-428h/frame-239.webp | Bin 0 -> 10348 bytes .../chrome-sprocket-428h/frame-240.webp | Bin 0 -> 10326 bytes .../chrome-sprocket-428h/frame-241.webp | Bin 0 -> 10722 bytes .../chrome-sprocket-428h/frame-242.webp | Bin 0 -> 10574 bytes .../chrome-sprocket-428h/frame-243.webp | Bin 0 -> 10660 bytes .../chrome-sprocket-428h/frame-244.webp | Bin 0 -> 10638 bytes .../chrome-sprocket-428h/frame-245.webp | Bin 0 -> 10928 bytes .../chrome-sprocket-428h/frame-246.webp | Bin 0 -> 10722 bytes .../chrome-sprocket-428h/frame-247.webp | Bin 0 -> 11054 bytes .../chrome-sprocket-428h/frame-248.webp | Bin 0 -> 11130 bytes .../chrome-sprocket-428h/frame-249.webp | Bin 0 -> 11104 bytes .../chrome-sprocket-428h/frame-250.webp | Bin 0 -> 11102 bytes .../chrome-sprocket-428h/frame-251.webp | Bin 0 -> 11234 bytes .../chrome-sprocket-428h/frame-252.webp | Bin 0 -> 11520 bytes .../chrome-sprocket-428h/frame-253.webp | Bin 0 -> 12032 bytes .../chrome-sprocket-428h/frame-254.webp | Bin 0 -> 11734 bytes .../chrome-sprocket-428h/frame-255.webp | Bin 0 -> 11792 bytes .../chrome-sprocket-428h/frame-256.webp | Bin 0 -> 11930 bytes .../chrome-sprocket-428h/frame-257.webp | Bin 0 -> 12616 bytes .../chrome-sprocket-428h/frame-258.webp | Bin 0 -> 12604 bytes .../chrome-sprocket-428h/frame-259.webp | Bin 0 -> 12812 bytes .../chrome-sprocket-428h/frame-260.webp | Bin 0 -> 12918 bytes .../chrome-sprocket-428h/frame-261.webp | Bin 0 -> 13402 bytes .../chrome-sprocket-428h/frame-262.webp | Bin 0 -> 13070 bytes .../chrome-sprocket-428h/frame-263.webp | Bin 0 -> 13114 bytes .../chrome-sprocket-428h/frame-264.webp | Bin 0 -> 13004 bytes .../chrome-sprocket-428h/frame-265.webp | Bin 0 -> 13120 bytes .../chrome-sprocket-428h/frame-266.webp | Bin 0 -> 13260 bytes .../chrome-sprocket-428h/frame-267.webp | Bin 0 -> 13222 bytes .../chrome-sprocket-428h/frame-268.webp | Bin 0 -> 13320 bytes .../chrome-sprocket-428h/frame-269.webp | Bin 0 -> 13730 bytes .../chrome-sprocket-428h/frame-270.webp | Bin 0 -> 13488 bytes .../chrome-sprocket-428h/frame-271.webp | Bin 0 -> 13438 bytes .../chrome-sprocket-428h/frame-272.webp | Bin 0 -> 13476 bytes .../chrome-sprocket-428h/frame-273.webp | Bin 0 -> 13606 bytes .../chrome-sprocket-428h/frame-274.webp | Bin 0 -> 13722 bytes .../chrome-sprocket-428h/frame-275.webp | Bin 0 -> 13888 bytes .../chrome-sprocket-428h/frame-276.webp | Bin 0 -> 14002 bytes .../chrome-sprocket-428h/frame-277.webp | Bin 0 -> 14612 bytes .../chrome-sprocket-428h/frame-278.webp | Bin 0 -> 14362 bytes .../chrome-sprocket-428h/frame-279.webp | Bin 0 -> 14440 bytes .../chrome-sprocket-428h/frame-280.webp | Bin 0 -> 14560 bytes .../chrome-sprocket-428h/frame-281.webp | Bin 0 -> 14518 bytes .../chrome-sprocket-428h/frame-282.webp | Bin 0 -> 14742 bytes .../chrome-sprocket-428h/frame-283.webp | Bin 0 -> 14712 bytes .../chrome-sprocket-428h/frame-284.webp | Bin 0 -> 15042 bytes .../chrome-sprocket-428h/frame-285.webp | Bin 0 -> 15200 bytes .../chrome-sprocket-428h/frame-286.webp | Bin 0 -> 15300 bytes .../chrome-sprocket-428h/frame-287.webp | Bin 0 -> 15096 bytes .../chrome-sprocket-428h/frame-288.webp | Bin 0 -> 15082 bytes .../chrome-sprocket-428h/frame-289.webp | Bin 0 -> 15150 bytes .../chrome-sprocket-428h/frame-290.webp | Bin 0 -> 15162 bytes .../chrome-sprocket-428h/frame-291.webp | Bin 0 -> 15352 bytes .../chrome-sprocket-428h/frame-292.webp | Bin 0 -> 15640 bytes .../chrome-sprocket-428h/frame-293.webp | Bin 0 -> 15796 bytes .../chrome-sprocket-428h/frame-294.webp | Bin 0 -> 16008 bytes .../chrome-sprocket-428h/frame-295.webp | Bin 0 -> 15690 bytes .../chrome-sprocket-428h/frame-296.webp | Bin 0 -> 15508 bytes .../chrome-sprocket-428h/frame-297.webp | Bin 0 -> 15678 bytes .../chrome-sprocket-428h/frame-298.webp | Bin 0 -> 15682 bytes .../chrome-sprocket-428h/frame-299.webp | Bin 0 -> 15994 bytes .../chrome-sprocket-428h/frame-300.webp | Bin 0 -> 16178 bytes .../chrome-sprocket-428h/frame-301.webp | Bin 0 -> 16420 bytes .../chrome-sprocket-428h/frame-302.webp | Bin 0 -> 16452 bytes .../chrome-sprocket-428h/frame-303.webp | Bin 0 -> 16328 bytes .../chrome-sprocket-428h/frame-304.webp | Bin 0 -> 16500 bytes .../chrome-sprocket-428h/frame-305.webp | Bin 0 -> 16388 bytes .../chrome-sprocket-428h/frame-306.webp | Bin 0 -> 16448 bytes .../chrome-sprocket-428h/frame-307.webp | Bin 0 -> 16402 bytes .../chrome-sprocket-428h/frame-308.webp | Bin 0 -> 16492 bytes .../chrome-sprocket-428h/frame-309.webp | Bin 0 -> 16804 bytes .../chrome-sprocket-428h/frame-310.webp | Bin 0 -> 16602 bytes .../chrome-sprocket-428h/frame-311.webp | Bin 0 -> 16576 bytes .../chrome-sprocket-428h/frame-312.webp | Bin 0 -> 16442 bytes .../chrome-sprocket-428h/frame-313.webp | Bin 0 -> 16752 bytes .../chrome-sprocket-428h/frame-314.webp | Bin 0 -> 16356 bytes .../chrome-sprocket-428h/frame-315.webp | Bin 0 -> 16384 bytes .../chrome-sprocket-428h/frame-316.webp | Bin 0 -> 16456 bytes .../chrome-sprocket-428h/frame-317.webp | Bin 0 -> 16888 bytes .../chrome-sprocket-428h/frame-318.webp | Bin 0 -> 16364 bytes .../chrome-sprocket-428h/frame-319.webp | Bin 0 -> 16498 bytes .../chrome-sprocket-428h/frame-320.webp | Bin 0 -> 16410 bytes .../chrome-sprocket-428h/frame-321.webp | Bin 0 -> 16460 bytes .../chrome-sprocket-428h/frame-322.webp | Bin 0 -> 16570 bytes .../chrome-sprocket-428h/frame-323.webp | Bin 0 -> 16546 bytes .../chrome-sprocket-428h/frame-324.webp | Bin 0 -> 16938 bytes .../chrome-sprocket-428h/frame-325.webp | Bin 0 -> 17050 bytes .../chrome-sprocket-428h/frame-326.webp | Bin 0 -> 16872 bytes .../chrome-sprocket-428h/frame-327.webp | Bin 0 -> 16604 bytes .../chrome-sprocket-428h/frame-328.webp | Bin 0 -> 16550 bytes .../chrome-sprocket-428h/frame-329.webp | Bin 0 -> 16634 bytes .../chrome-sprocket-428h/frame-330.webp | Bin 0 -> 16950 bytes .../chrome-sprocket-428h/frame-331.webp | Bin 0 -> 16878 bytes .../chrome-sprocket-428h/frame-332.webp | Bin 0 -> 17502 bytes .../chrome-sprocket-428h/frame-333.webp | Bin 0 -> 17126 bytes .../chrome-sprocket-428h/frame-334.webp | Bin 0 -> 17130 bytes .../chrome-sprocket-428h/frame-335.webp | Bin 0 -> 16722 bytes .../chrome-sprocket-428h/frame-336.webp | Bin 0 -> 16954 bytes .../chrome-sprocket-428h/frame-337.webp | Bin 0 -> 17028 bytes .../chrome-sprocket-428h/frame-338.webp | Bin 0 -> 17084 bytes .../chrome-sprocket-428h/frame-339.webp | Bin 0 -> 17126 bytes .../chrome-sprocket-428h/frame-340.webp | Bin 0 -> 17608 bytes .../chrome-sprocket-428h/frame-341.webp | Bin 0 -> 17804 bytes .../chrome-sprocket-428h/frame-342.webp | Bin 0 -> 17450 bytes .../chrome-sprocket-428h/frame-343.webp | Bin 0 -> 17448 bytes .../chrome-sprocket-428h/frame-344.webp | Bin 0 -> 17454 bytes .../chrome-sprocket-428h/frame-345.webp | Bin 0 -> 17508 bytes .../chrome-sprocket-428h/frame-346.webp | Bin 0 -> 18028 bytes .../chrome-sprocket-428h/frame-347.webp | Bin 0 -> 17744 bytes .../chrome-sprocket-428h/frame-348.webp | Bin 0 -> 18262 bytes .../chrome-sprocket-428h/frame-349.webp | Bin 0 -> 18178 bytes .../chrome-sprocket-428h/frame-350.webp | Bin 0 -> 18540 bytes .../chrome-sprocket-428h/frame-351.webp | Bin 0 -> 18350 bytes .../chrome-sprocket-428h/frame-352.webp | Bin 0 -> 18648 bytes .../chrome-sprocket-428h/frame-353.webp | Bin 0 -> 18546 bytes .../chrome-sprocket-428h/frame-354.webp | Bin 0 -> 18770 bytes .../chrome-sprocket-428h/frame-355.webp | Bin 0 -> 18778 bytes .../chrome-sprocket-428h/frame-356.webp | Bin 0 -> 19824 bytes .../chrome-sprocket-428h/frame-357.webp | Bin 0 -> 19438 bytes .../chrome-sprocket-428h/frame-358.webp | Bin 0 -> 19044 bytes .../chrome-sprocket-428h/frame-359.webp | Bin 0 -> 18752 bytes .../chrome-sprocket-428h/frame-360.webp | Bin 0 -> 19014 bytes .../chrome-sprocket-428h/frame-361.webp | Bin 0 -> 18986 bytes .../chrome-sprocket-428h/frame-362.webp | Bin 0 -> 18632 bytes .../chrome-sprocket-428h/frame-363.webp | Bin 0 -> 18204 bytes .../chrome-sprocket-428h/frame-364.webp | Bin 0 -> 18562 bytes .../chrome-sprocket-428h/frame-365.webp | Bin 0 -> 18200 bytes .../chrome-sprocket-428h/frame-366.webp | Bin 0 -> 18146 bytes .../chrome-sprocket-428h/frame-367.webp | Bin 0 -> 17862 bytes .../chrome-sprocket-428h/frame-368.webp | Bin 0 -> 17856 bytes .../chrome-sprocket-428h/frame-369.webp | Bin 0 -> 17588 bytes .../chrome-sprocket-428h/frame-370.webp | Bin 0 -> 17730 bytes .../chrome-sprocket-428h/frame-371.webp | Bin 0 -> 17578 bytes .../chrome-sprocket-428h/frame-372.webp | Bin 0 -> 17310 bytes .../chrome-sprocket-428h/frame-373.webp | Bin 0 -> 17260 bytes .../chrome-sprocket-428h/frame-374.webp | Bin 0 -> 16936 bytes .../chrome-sprocket-428h/frame-375.webp | Bin 0 -> 17012 bytes .../chrome-sprocket-428h/frame-376.webp | Bin 0 -> 17192 bytes .../chrome-sprocket-428h/frame-377.webp | Bin 0 -> 17692 bytes .../chrome-sprocket-428h/frame-378.webp | Bin 0 -> 17854 bytes .../chrome-sprocket-428h/frame-379.webp | Bin 0 -> 17598 bytes .../chrome-sprocket-428h/frame-380.webp | Bin 0 -> 17874 bytes .../chrome-sprocket-428h/frame-381.webp | Bin 0 -> 17846 bytes .../chrome-sprocket-428h/frame-382.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-383.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-384.webp | Bin 0 -> 17610 bytes .../chrome-sprocket-428h/frame-385.webp | Bin 0 -> 17486 bytes .../chrome-sprocket-428h/frame-386.webp | Bin 0 -> 17662 bytes .../chrome-sprocket-428h/frame-387.webp | Bin 0 -> 17718 bytes .../chrome-sprocket-428h/frame-388.webp | Bin 0 -> 18172 bytes .../chrome-sprocket-428h/frame-389.webp | Bin 0 -> 18212 bytes .../chrome-sprocket-428h/frame-390.webp | Bin 0 -> 17822 bytes .../chrome-sprocket-428h/frame-391.webp | Bin 0 -> 17696 bytes .../chrome-sprocket-428h/frame-392.webp | Bin 0 -> 17750 bytes .../chrome-sprocket-428h/frame-393.webp | Bin 0 -> 18144 bytes .../chrome-sprocket-428h/frame-394.webp | Bin 0 -> 18144 bytes .../chrome-sprocket-428h/frame-395.webp | Bin 0 -> 18002 bytes .../chrome-sprocket-428h/frame-396.webp | Bin 0 -> 18062 bytes .../chrome-sprocket-428h/frame-397.webp | Bin 0 -> 18314 bytes .../chrome-sprocket-428h/frame-398.webp | Bin 0 -> 18352 bytes .../chrome-sprocket-428h/frame-399.webp | Bin 0 -> 17902 bytes .../chrome-sprocket-428h/frame-400.webp | Bin 0 -> 17430 bytes .../chrome-sprocket-428h/frame-401.webp | Bin 0 -> 17436 bytes .../chrome-sprocket-428h/frame-402.webp | Bin 0 -> 17394 bytes .../chrome-sprocket-428h/frame-403.webp | Bin 0 -> 17386 bytes .../chrome-sprocket-428h/frame-404.webp | Bin 0 -> 17164 bytes .../chrome-sprocket-428h/frame-405.webp | Bin 0 -> 17288 bytes .../chrome-sprocket-428h/frame-406.webp | Bin 0 -> 17928 bytes .../chrome-sprocket-428h/frame-407.webp | Bin 0 -> 17492 bytes .../chrome-sprocket-428h/frame-408.webp | Bin 0 -> 17398 bytes .../chrome-sprocket-428h/frame-409.webp | Bin 0 -> 17552 bytes .../chrome-sprocket-428h/frame-410.webp | Bin 0 -> 17634 bytes .../chrome-sprocket-428h/frame-411.webp | Bin 0 -> 17580 bytes .../chrome-sprocket-428h/frame-412.webp | Bin 0 -> 17528 bytes .../chrome-sprocket-428h/frame-413.webp | Bin 0 -> 17490 bytes .../chrome-sprocket-428h/frame-414.webp | Bin 0 -> 17204 bytes .../chrome-sprocket-428h/frame-415.webp | Bin 0 -> 16968 bytes .../chrome-sprocket-428h/frame-416.webp | Bin 0 -> 16948 bytes .../chrome-sprocket-428h/frame-417.webp | Bin 0 -> 16950 bytes .../chrome-sprocket-428h/frame-418.webp | Bin 0 -> 17542 bytes .../chrome-sprocket-428h/frame-419.webp | Bin 0 -> 17118 bytes .../chrome-sprocket-428h/frame-420.webp | Bin 0 -> 17202 bytes .../chrome-sprocket-428h/frame-421.webp | Bin 0 -> 17322 bytes .../chrome-sprocket-428h/frame-422.webp | Bin 0 -> 17498 bytes .../chrome-sprocket-428h/frame-423.webp | Bin 0 -> 17158 bytes .../chrome-sprocket-428h/frame-424.webp | Bin 0 -> 16918 bytes .../chrome-sprocket-428h/frame-425.webp | Bin 0 -> 16794 bytes .../chrome-sprocket-428h/frame-426.webp | Bin 0 -> 16962 bytes .../chrome-sprocket-428h/frame-427.webp | Bin 0 -> 16796 bytes .../chrome-sprocket-428h/frame-428.webp | Bin 0 -> 16834 bytes .../chrome-sprocket-428h/frame-429.webp | Bin 0 -> 17236 bytes .../chrome-sprocket-428h/frame-430.webp | Bin 0 -> 17360 bytes .../chrome-sprocket-428h/frame-431.webp | Bin 0 -> 16804 bytes .../chrome-sprocket-428h/frame-432.webp | Bin 0 -> 17412 bytes .../chrome-sprocket-428h/manifest.json | 13 + .../src/components/VdoFrameScrubber.tsx | 474 ++++++++++++++++++ .../dynamic/DynamicPageRenderer.tsx | 32 +- packages/types/index.ts | 28 +- 877 files changed, 1632 insertions(+), 6 deletions(-) create mode 100644 apps/admin/src/components/page-builder/FrameSequenceModal.tsx create mode 100644 apps/admin/src/components/page-builder/VdoFrameScrubberForm.tsx create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-001.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-002.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-003.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-004.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-005.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-006.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-007.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-008.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-009.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-010.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-011.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-012.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-013.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-014.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-015.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-016.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-017.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-018.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-019.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-020.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-021.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-022.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-023.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-024.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-025.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-026.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-027.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-028.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-029.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-030.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-031.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-032.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-033.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-034.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-035.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-036.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-037.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-038.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-039.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-040.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-041.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-042.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-043.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-044.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-045.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-046.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-047.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-048.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-049.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-050.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-051.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-052.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-053.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-054.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-055.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-056.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-057.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-058.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-059.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-060.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-061.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-062.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-063.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-064.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-065.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-066.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-067.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-068.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-069.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-070.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-071.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-072.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-073.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-074.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-075.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-076.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-077.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-078.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-079.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-080.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-081.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-082.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-083.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-084.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-085.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-086.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-087.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-088.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-089.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-090.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-091.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-092.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-093.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-094.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-095.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-096.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-097.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-098.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-099.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-100.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-101.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-102.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-103.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-104.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-105.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-106.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-107.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-108.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-109.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-110.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-111.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-112.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-113.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-114.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-115.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-116.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-117.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-118.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-119.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-120.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-121.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-122.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-123.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-124.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-125.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-126.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-127.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-128.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-129.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-130.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-131.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-132.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-133.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-134.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-135.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-136.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-137.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-138.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-139.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-140.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-141.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-142.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-143.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-144.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-145.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-146.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-147.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-148.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-149.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-150.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-151.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-152.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-153.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-154.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-155.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-156.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-157.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-158.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-159.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-160.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-161.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-162.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-163.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-164.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-165.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-166.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-167.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-168.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-169.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-170.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-171.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-172.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-173.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-174.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-175.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-176.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-177.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-178.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-179.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-180.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-181.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-182.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-183.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-184.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-185.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-186.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-187.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-188.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-189.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-190.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-191.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-192.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-193.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-194.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-195.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-196.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-197.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-198.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-199.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-200.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-201.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-202.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-203.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-204.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-205.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-206.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-207.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-208.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-209.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-210.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-211.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-212.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-213.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-214.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-215.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-216.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-217.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-218.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-219.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-220.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-221.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-222.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-223.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-224.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-225.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-226.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-227.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-228.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-229.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-230.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-231.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-232.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-233.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-234.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-235.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-236.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-237.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-238.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-239.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-240.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-241.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-242.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-243.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-244.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-245.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-246.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-247.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-248.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-249.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-250.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-251.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-252.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-253.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-254.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-255.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-256.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-257.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-258.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-259.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-260.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-261.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-262.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-263.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-264.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-265.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-266.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-267.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-268.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-269.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-270.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-271.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-272.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-273.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-274.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-275.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-276.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-277.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-278.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-279.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-280.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-281.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-282.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-283.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-284.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-285.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-286.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-287.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-288.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-289.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-290.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-291.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-292.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-293.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-294.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-295.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-296.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-297.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-298.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-299.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-300.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-301.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-302.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-303.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-304.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-305.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-306.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-307.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-308.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-309.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-310.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-311.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-312.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-313.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-314.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-315.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-316.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-317.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-318.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-319.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-320.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-321.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-322.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-323.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-324.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-325.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-326.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-327.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-328.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-329.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-330.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-331.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-332.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-333.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-334.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-335.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-336.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-337.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-338.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-339.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-340.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-341.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-342.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-343.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-344.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-345.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-346.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-347.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-348.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-349.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-350.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-351.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-352.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-353.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-354.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-355.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-356.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-357.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-358.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-359.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-360.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-361.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-362.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-363.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-364.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-365.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-366.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-367.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-368.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-369.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-370.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-371.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-372.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-373.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-374.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-375.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-376.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-377.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-378.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-379.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-380.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-381.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-382.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-383.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-384.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-385.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-386.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-387.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-388.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-389.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-390.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-391.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-392.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-393.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-394.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-395.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-396.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-397.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-398.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-399.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-400.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-401.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-402.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-403.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-404.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-405.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-406.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-407.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-408.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-409.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-410.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-411.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-412.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-413.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-414.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-415.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-416.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-417.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-418.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-419.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-420.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-421.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-422.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-423.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-424.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-425.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-426.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-427.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-428.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-429.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-430.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-431.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/frame-432.webp create mode 100644 apps/backend/public/frame-sequences/chrome-sprocket-428h/manifest.json create mode 100644 apps/backend/src/routes/frame-sequences.ts create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-001.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-002.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-003.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-004.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-005.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-006.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-007.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-008.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-009.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-010.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-011.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-012.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-013.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-014.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-015.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-016.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-017.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-018.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-019.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-020.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-021.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-022.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-023.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-024.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-025.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-026.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-027.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-028.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-029.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-030.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-031.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-032.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-033.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-034.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-035.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-036.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-037.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-038.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-039.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-040.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-041.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-042.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-043.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-044.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-045.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-046.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-047.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-048.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-049.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-050.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-051.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-052.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-053.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-054.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-055.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-056.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-057.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-058.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-059.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-060.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-061.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-062.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-063.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-064.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-065.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-066.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-067.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-068.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-069.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-070.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-071.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-072.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-073.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-074.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-075.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-076.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-077.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-078.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-079.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-080.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-081.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-082.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-083.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-084.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-085.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-086.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-087.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-088.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-089.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-090.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-091.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-092.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-093.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-094.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-095.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-096.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-097.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-098.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-099.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-100.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-101.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-102.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-103.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-104.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-105.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-106.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-107.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-108.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-109.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-110.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-111.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-112.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-113.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-114.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-115.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-116.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-117.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-118.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-119.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-120.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-121.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-122.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-123.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-124.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-125.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-126.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-127.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-128.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-129.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-130.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-131.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-132.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-133.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-134.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-135.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-136.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-137.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-138.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-139.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-140.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-141.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-142.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-143.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-144.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-145.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-146.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-147.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-148.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-149.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-150.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-151.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-152.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-153.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-154.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-155.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-156.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-157.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-158.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-159.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-160.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-161.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-162.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-163.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-164.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-165.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-166.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-167.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-168.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-169.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-170.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-171.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-172.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-173.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-174.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-175.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-176.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-177.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-178.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-179.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-180.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-181.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-182.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-183.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-184.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-185.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-186.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-187.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-188.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-189.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-190.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-191.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-192.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-193.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-194.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-195.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-196.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-197.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-198.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-199.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-200.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-201.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-202.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-203.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-204.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-205.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-206.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-207.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-208.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-209.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-210.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-211.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-212.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-213.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-214.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-215.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-216.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-217.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-218.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-219.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-220.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-221.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-222.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-223.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-224.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-225.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-226.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-227.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-228.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-229.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-230.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-231.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-232.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-233.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-234.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-235.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-236.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-237.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-238.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-239.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-240.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-241.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-242.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-243.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-244.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-245.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-246.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-247.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-248.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-249.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-250.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-251.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-252.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-253.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-254.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-255.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-256.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-257.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-258.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-259.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-260.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-261.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-262.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-263.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-264.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-265.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-266.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-267.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-268.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-269.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-270.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-271.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-272.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-273.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-274.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-275.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-276.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-277.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-278.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-279.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-280.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-281.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-282.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-283.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-284.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-285.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-286.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-287.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-288.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-289.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-290.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-291.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-292.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-293.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-294.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-295.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-296.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-297.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-298.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-299.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-300.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-301.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-302.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-303.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-304.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-305.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-306.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-307.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-308.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-309.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-310.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-311.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-312.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-313.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-314.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-315.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-316.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-317.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-318.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-319.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-320.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-321.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-322.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-323.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-324.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-325.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-326.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-327.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-328.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-329.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-330.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-331.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-332.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-333.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-334.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-335.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-336.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-337.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-338.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-339.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-340.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-341.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-342.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-343.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-344.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-345.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-346.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-347.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-348.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-349.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-350.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-351.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-352.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-353.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-354.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-355.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-356.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-357.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-358.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-359.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-360.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-361.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-362.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-363.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-364.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-365.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-366.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-367.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-368.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-369.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-370.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-371.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-372.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-373.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-374.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-375.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-376.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-377.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-378.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-379.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-380.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-381.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-382.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-383.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-384.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-385.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-386.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-387.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-388.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-389.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-390.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-391.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-392.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-393.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-394.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-395.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-396.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-397.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-398.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-399.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-400.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-401.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-402.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-403.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-404.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-405.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-406.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-407.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-408.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-409.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-410.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-411.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-412.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-413.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-414.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-415.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-416.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-417.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-418.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-419.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-420.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-421.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-422.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-423.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-424.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-425.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-426.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-427.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-428.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-429.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-430.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-431.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/frame-432.webp create mode 100644 apps/website/public/frame-sequences/chrome-sprocket-428h/manifest.json create mode 100644 apps/website/src/components/VdoFrameScrubber.tsx diff --git a/apps/admin/src/components/page-builder/AddSectionModal.tsx b/apps/admin/src/components/page-builder/AddSectionModal.tsx index 0d6ae9b..d4f6575 100644 --- a/apps/admin/src/components/page-builder/AddSectionModal.tsx +++ b/apps/admin/src/components/page-builder/AddSectionModal.tsx @@ -143,7 +143,34 @@ export default function AddSectionModal({ isOpen, onClose, onSelectBlock }: AddS ) }, - // 2.95 INTERACTIVE_360_SHOWCASE + // 2.96 VDO_FRAME_SCRUBBER + { + type: 'VDO_FRAME_SCRUBBER', + category: 'hero', + title: 'VDO FRAME SCRUBBER (Scrollytelling Video)', + description: 'Cinema-quality video frame sequence (432 frames) with scroll scrub, direct drag, range slider, and play/pause at 24fps without memory leaks.', + badge: 'Video Frames · 4K', + renderPreview: () => ( +
+
+ + FRAME SCRUBBER + +
+ FROM VIDEO TO INTERACTIVE +
+
+ 432 FRAMES + 00:18.0s @ 24FPS +
+
+
+ +
+
+ ) + }, + // 2.95 INTERACTIVE_360_SHOWCASE { type: 'INTERACTIVE_360_SHOWCASE', category: 'hero', diff --git a/apps/admin/src/components/page-builder/FrameSequenceModal.tsx b/apps/admin/src/components/page-builder/FrameSequenceModal.tsx new file mode 100644 index 0000000..8f2b3d7 --- /dev/null +++ b/apps/admin/src/components/page-builder/FrameSequenceModal.tsx @@ -0,0 +1,365 @@ +import { useState, useEffect } from 'react' +import { + X, + Upload, + Film, + CheckCircle, + Loader2, + Trash2, + FolderOpen, +} from 'lucide-react' +import { API_BASE } from '@homaroma/types' + +export interface FrameSequenceItem { + id: string + name: string + slug: string + folderPath: string + pattern: string + padding: number + totalFrames: number + fps: number + durationSeconds: number + posterUrl: string + createdAt: string +} + +interface Props { + isOpen: boolean + onClose: () => void + onSelectSequence: (seq: FrameSequenceItem) => void + selectedSlug?: string +} + +export default function FrameSequenceModal({ + isOpen, + onClose, + onSelectSequence, + selectedSlug, +}: Props) { + const [sequences, setSequences] = useState([]) + const [loading, setLoading] = useState(false) + const [isUploading, setIsUploading] = useState(false) + const [uploadError, setUploadError] = useState(null) + + // Upload Form State + const [showUploadForm, setShowUploadForm] = useState(false) + const [uploadName, setUploadName] = useState('') + const [uploadFps, setUploadFps] = useState('24') + const [zipFile, setZipFile] = useState(null) + + const fetchSequences = async () => { + setLoading(true) + try { + const res = await fetch(`${API_BASE}/frame-sequences`) + if (!res.ok) return + const data = await res.json() + setSequences(data.sequences || []) + } catch (err) { + console.error('Failed to load frame sequences', err) + } finally { + setLoading(false) + } + } + + useEffect(() => { + if (isOpen) { + fetchSequences() + setShowUploadForm(false) + setUploadError(null) + } + }, [isOpen]) + + if (!isOpen) return null + + const handleUploadZip = async (e: React.FormEvent) => { + e.preventDefault() + if (!zipFile) { + setUploadError('กรุณาเลือกไฟล์ .ZIP ที่มีรูปเฟรม') + return + } + + setIsUploading(true) + setUploadError(null) + + const formData = new FormData() + formData.append('file', zipFile) + if (uploadName) formData.append('name', uploadName) + formData.append('fps', uploadFps) + + try { + const res = await fetch(`${API_BASE}/frame-sequences/upload`, { + method: 'POST', + body: formData, + }) + + const data = await res.json() + if (!res.ok || data.error) { + throw new Error(data.error || 'Upload failed') + } + + await fetchSequences() + setShowUploadForm(false) + setZipFile(null) + setUploadName('') + + if (data.sequence) { + onSelectSequence(data.sequence) + onClose() + } + } catch (err: any) { + setUploadError(err.message || 'เกิดข้อผิดพลาดในการอัปโหลด ZIP') + } finally { + setIsUploading(false) + } + } + + const handleDelete = async (slug: string, e: React.MouseEvent) => { + e.stopPropagation() + if (!confirm(`คุณแน่ใจหรือไม่ว่าต้องการลบชุดเฟรม "${slug}"?`)) return + + try { + const res = await fetch(`${API_BASE}/frame-sequences/${slug}`, { + method: 'DELETE', + }) + if (res.ok) { + setSequences((prev) => prev.filter((s) => s.slug !== slug)) + } + } catch (err) { + console.error('Failed to delete sequence', err) + } + } + + return ( +
+
+ {/* Modal Header */} +
+
+
+ +
+
+

+ คลังชุดวิดีโอเฟรม (Frame Sequence Library) + + แยกจาก Media ปกติ + +

+

+ เลือกชุดเฟรมภาพแบบ 360° / Scrollytelling โดยไม่ปะปนกับคลังภาพสินค้าทั่วไป +

+
+
+ +
+ + + +
+
+ + {/* Modal Body */} +
+ {/* Upload Form Accordion */} + {showUploadForm && ( +
+
+ + อัปโหลดชุดเฟรมภาพด้วยไฟล์ .ZIP +
+

+ บีบอัดโฟลเดอร์ภาพ เช่น frame-001.webp ถึง{' '} + frame-432.webp เป็นไฟล์ .zip แล้วอัปโหลด ระบบจะคลายไฟล์ให้อัตโนมัติ +

+ + {uploadError && ( +
+ {uploadError} +
+ )} + +
+
+ + setUploadName(e.target.value)} + placeholder="เช่น Chrome Sprocket 18s Spin" + className="admin-input w-full text-xs" + required + /> +
+ +
+ + +
+
+ +
+ + setZipFile(e.target.files?.[0] || null)} + className="admin-input w-full text-xs" + required + /> +
+ +
+ + + +
+
+ )} + + {/* Sequence Cards Grid */} + {loading ? ( +
+ + กำลังโหลดชุดวิดีโอเฟรม... +
+ ) : sequences.length === 0 ? ( +
+ +
ยังไม่มีชุด Frame Sequence ในระบบ
+

+ คุณสามารถกดปุ่ม "อัปโหลด ZIP ชุดใหม่" ด้านบนเพื่อนำชุดเฟรมภาพเข้ามาใช้งานได้ทันที +

+
+ ) : ( +
+ {sequences.map((seq) => { + const isSelected = selectedSlug === seq.slug + return ( +
{ + onSelectSequence(seq) + onClose() + }} + className={`relative group rounded-2xl bg-black/40 border transition-all p-3 space-y-3 cursor-pointer ${ + isSelected + ? 'border-[#d5ff63] ring-1 ring-[#d5ff63] shadow-lg shadow-[#d5ff63]/10' + : 'border-white/10 hover:border-white/20' + }`} + > + {/* Poster Thumbnail */} +
+ {seq.name} +
+ {seq.totalFrames} FRAMES • {seq.durationSeconds}s +
+ + {isSelected && ( +
+ +
+ )} +
+ + {/* Metadata */} +
+

+ {seq.name} +

+

+ {seq.folderPath} +

+
+ + {/* Action Bar */} +
+ + {seq.fps} FPS + + +
+ + + +
+
+
+ ) + })} +
+ )} +
+
+
+ ) +} diff --git a/apps/admin/src/components/page-builder/VdoFrameScrubberForm.tsx b/apps/admin/src/components/page-builder/VdoFrameScrubberForm.tsx new file mode 100644 index 0000000..4d4d5bb --- /dev/null +++ b/apps/admin/src/components/page-builder/VdoFrameScrubberForm.tsx @@ -0,0 +1,434 @@ +import { useState, useEffect } from 'react' +import { + Film, + Package, + ExternalLink, + RotateCcw, + CheckCircle, +} from 'lucide-react' +import { API_BASE } from '@homaroma/types' +import FrameSequenceModal, { type FrameSequenceItem } from './FrameSequenceModal' + +interface Props { + payload: Record + updatePayloadValue: (field: string, value: unknown) => void +} + +export default function VdoFrameScrubberForm({ + payload, + updatePayloadValue, +}: Props) { + const [productsList, setProductsList] = useState([]) + const [loadingProducts, setLoadingProducts] = useState(false) + const [isModalOpen, setIsModalOpen] = useState(false) + + const folderPath = (payload.folderPath as string) || '/frame-sequences/chrome-sprocket-428h' + const pattern = (payload.pattern as string) || 'frame-{index}.webp' + const totalFrames = Number(payload.totalFrames) || 432 + const fps = Number(payload.fps) || 24 + const durationSeconds = Number(payload.durationSeconds) || 18 + + const eyebrow = (payload.eyebrow as string) || '' + const title = (payload.title as string) || '' + const subtitle = (payload.subtitle as string) || '' + const instruction = (payload.instruction as string) || '' + const productName = (payload.productName as string) || '' + const productBadge = (payload.productBadge as string) || '' + const accentColor = (payload.accentColor as string) || '#d5ff63' + const theme = (payload.theme as string) || 'dark' + const endCtaTitle = (payload.endCtaTitle as string) || '' + const endCtaButtonText = (payload.endCtaButtonText as string) || '' + const endCtaLink = (payload.endCtaLink as string) || '' + const selectedProductId = payload.productId ? String(payload.productId) : '' + + useEffect(() => { + let isMounted = true + const fetchCatalog = async () => { + setLoadingProducts(true) + try { + const res = await fetch(`${API_BASE}/products?limit=100`) + if (!res.ok) return + const data = await res.json() + const items = data.data || data.products || (Array.isArray(data) ? data : []) + if (isMounted) setProductsList(items) + } catch (err) { + console.error('Failed to load products in VdoFrameScrubberForm', err) + } finally { + if (isMounted) setLoadingProducts(false) + } + } + fetchCatalog() + return () => { isMounted = false } + }, []) + + // Auto-seed defaults on brand new block + useEffect(() => { + if (!payload.folderPath) updatePayloadValue('folderPath', '/frame-sequences/chrome-sprocket-428h') + if (!payload.pattern) updatePayloadValue('pattern', 'frame-{index}.webp') + if (!payload.padding) updatePayloadValue('padding', 3) + if (!payload.totalFrames) updatePayloadValue('totalFrames', 432) + if (!payload.fps) updatePayloadValue('fps', 24) + if (!payload.durationSeconds) updatePayloadValue('durationSeconds', 18) + if (!payload.eyebrow) updatePayloadValue('eyebrow', 'FROM VIDEO TO INTERACTIVE') + if (!payload.title) updatePayloadValue('title', 'หนึ่งวิดีโอ หมุนดูได้ทีละเฟรม') + if (!payload.subtitle) updatePayloadValue('subtitle', 'รวมวิดีโอ 18 วินาทีเป็น 432 เฟรม ลากภาพหรือเลื่อนหน้าเว็บเพื่อหมุนต่อ แล้วซูมดูฟันสเตอร์') + if (!payload.instruction) updatePayloadValue('instruction', 'ลากซ้าย–ขวา หรือเลื่อนหน้าเว็บ') + if (!payload.productName) updatePayloadValue('productName', 'SPROCKET / FRAME SCRUBBER') + if (!payload.productBadge) updatePayloadValue('productBadge', '18 SEC / 432 EXTRACTED FRAMES') + if (!payload.endCtaTitle) updatePayloadValue('endCtaTitle', 'ทุกมุม อยู่ในมือคุณ พร้อมยกระดับการขับขี่') + if (!payload.endCtaButtonText) updatePayloadValue('endCtaButtonText', 'สั่งซื้อสินค้าตอนนี้') + if (!payload.theme) updatePayloadValue('theme', 'dark') + if (!payload.accentColor) updatePayloadValue('accentColor', '#d5ff63') + }, []) + + const handleSelectProduct = (productIdStr: string) => { + if (!productIdStr) { + updatePayloadValue('productId', null) + return + } + const pid = Number(productIdStr) + updatePayloadValue('productId', pid) + + const prod = productsList.find((p) => p.id === pid) + if (prod) { + const prodName = typeof prod.name === 'string' ? prod.name : prod.name?.th || prod.name?.en || '' + if (prodName) updatePayloadValue('productName', prodName) + const slug = prod.slug || `product-${pid}` + updatePayloadValue('endCtaLink', `/products/${slug}`) + } + } + + const handleApplyPreset = () => { + updatePayloadValue('folderPath', '/frame-sequences/chrome-sprocket-428h') + updatePayloadValue('pattern', 'frame-{index}.webp') + updatePayloadValue('padding', 3) + updatePayloadValue('totalFrames', 432) + updatePayloadValue('fps', 24) + updatePayloadValue('durationSeconds', 18) + updatePayloadValue('eyebrow', 'FROM VIDEO TO INTERACTIVE') + updatePayloadValue('title', 'หนึ่งวิดีโอ หมุนดูได้ทีละเฟรม') + updatePayloadValue('subtitle', 'รวมวิดีโอ 18 วินาทีเป็น 432 เฟรม ลากภาพหรือเลื่อนหน้าเว็บเพื่อหมุนต่อ แล้วซูมดูฟันสเตอร์') + updatePayloadValue('instruction', 'ลากซ้าย–ขวา หรือเลื่อนหน้าเว็บ') + updatePayloadValue('productName', 'SPROCKET / FRAME SCRUBBER') + updatePayloadValue('productBadge', '18 SEC / 432 EXTRACTED FRAMES') + updatePayloadValue('endCtaTitle', 'ทุกมุม อยู่ในมือคุณ พร้อมยกระดับการขับขี่') + updatePayloadValue('endCtaButtonText', 'สั่งซื้อสินค้าตอนนี้') + updatePayloadValue('theme', 'dark') + updatePayloadValue('accentColor', '#d5ff63') + } + + const handleSequenceSelected = (seq: FrameSequenceItem) => { + updatePayloadValue('folderPath', seq.folderPath) + updatePayloadValue('pattern', seq.pattern || 'frame-{index}.webp') + updatePayloadValue('padding', seq.padding || 3) + updatePayloadValue('totalFrames', seq.totalFrames) + updatePayloadValue('fps', seq.fps || 24) + updatePayloadValue('durationSeconds', seq.durationSeconds || parseFloat((seq.totalFrames / 24).toFixed(1))) + updatePayloadValue('productBadge', `${seq.durationSeconds}S / ${seq.totalFrames} FRAMES`) + } + + return ( +
+ {/* ── Preset Banner ── */} +
+
+
+ + VDO Frame-by-Frame Interactive Scrubber +
+

+ แสดงผลวิดีโอแบบ Frame Sequence ควบคุมเฟรมตามการเลื่อนหน้าเว็บ (Scroll) และการลาก (Drag Scrub) +

+
+ + +
+ + {/* ── Sequence Collection Selector (Isolated Library) ── */} +
+
+
+ + ชุดวิดีโอเฟรมที่เลือกใช้งาน (Frame Sequence Collection) +
+ + +
+ + {/* Selected Sequence Card */} +
+
+
+ Sequence Poster { + // Fallback if not yet loaded + (e.target as HTMLImageElement).src = '/images/3d/sprocket-detail.png' + }} + /> +
+ +
+
+ + {folderPath.split('/').pop()?.replace(/[-_]/g, ' ').toUpperCase() || 'FRAME SEQUENCE'} + + + พร้อมใช้งาน + +
+
+ {totalFrames} FRAMES + • + {fps} FPS + • + {durationSeconds} วินาที +
+

+ โฟลเดอร์: {folderPath} (รูปแบบ: {pattern}) +

+
+
+ + +
+
+ + {/* ── 1-Click Product Linking ── */} +
+
+
+ + ผูกกับสินค้าในระบบ (1-Click Bind Product) +
+ {selectedProductId && ( + + Product ID: #{selectedProductId} + + )} +
+ +
+
+ +
+ +
+ updatePayloadValue('endCtaLink', e.target.value)} + placeholder="ลิงก์ปลายทางเมื่อกดสั่งซื้อ เช่น /products/chain-sprocket-p1" + className="admin-input flex-1 text-xs" + /> + {endCtaLink && ( + + + + )} +
+
+
+ + {/* ── Headline & Header Texts ── */} +
+
+ ข้อความหัวเรื่อง (Header & Story Intro) +
+ +
+
+ + updatePayloadValue('eyebrow', e.target.value)} + className="admin-input w-full text-xs font-mono" + placeholder="FROM VIDEO TO INTERACTIVE" + /> +
+ +
+ + updatePayloadValue('productBadge', e.target.value)} + className="admin-input w-full text-xs font-mono" + placeholder="18 SEC / 432 FRAMES" + /> +
+ +
+ + updatePayloadValue('productName', e.target.value)} + className="admin-input w-full text-xs" + placeholder="SPROCKET / FRAME SCRUBBER" + /> +
+ +
+ + updatePayloadValue('instruction', e.target.value)} + className="admin-input w-full text-xs" + placeholder="ลากซ้าย–ขวา หรือเลื่อนหน้าเว็บ" + /> +
+
+ +
+ + updatePayloadValue('title', e.target.value)} + className="admin-input w-full text-xs" + placeholder="หนึ่งวิดีโอ หมุนดูได้ทีละเฟรม" + /> +
+ +
+ +