Skip to content

Instantly share code, notes, and snippets.

@illuminatianon
Created September 16, 2025 23:31
Show Gist options
  • Select an option

  • Save illuminatianon/8fa502ee4f375e32e0a02277b9cf3768 to your computer and use it in GitHub Desktop.

Select an option

Save illuminatianon/8fa502ee4f375e32e0a02277b9cf3768 to your computer and use it in GitHub Desktop.
DDD Trainer
// ==UserScript==
// @name DDD Trainer — Single File
// @namespace ddd-trainer
// @version 1.0.0
// @description One-file trainer with embedded chart + auto-retry + latency/speed tuning
// @match https://neal.fun/not-a-robot*
// @run-at document-end
// @grant GM_getResourceText
// @resource dddchart data:application/json;base64,WwogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAxLjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyLjIKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDIuNjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyLjgyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDMuMDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMy4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzLjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzLjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNS4zMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDUuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2LjEKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2LjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDYuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNi43NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNy4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDcuNAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDkuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDkuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDEwLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAuOAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDExLjg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTIuMTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTIuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTIuOTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEzLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTMuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxMy41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDEzLjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTQuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDE0Ljg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTUuMQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTUuMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTYuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxNi43MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE3CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAxNy40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE3Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTguMDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMTguMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDE4LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAxOS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDE5LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDE5LjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTkuOTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyMC4yMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDIwLjQKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyMC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyMC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyMS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjEuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjEuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMjIuOTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMjMuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyMy42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjMuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjMuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyNC4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyNC43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNC45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDI1LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMjUuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNi4wMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAyNi40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAyNi44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMjcuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjcuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMjcuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDI4LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMjguMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAyOC41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDI5LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDI5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAyOS44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDMwLjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMC40NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDMwLjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzMC43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzEuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMS41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzEuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiAzMgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMzIuNAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDMyLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAzMi44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAzMy4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzMy4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM0LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzQuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM0LjQ3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzUuMjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzUuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDM2LjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM2LjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiAzNi43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiAzNy4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM3LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzcuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzNy41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDM3LjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAzOC4yMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDM4LjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogMzguNgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMzguODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDM5LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDM5LjYyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDAuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNDAuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0MC45NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA0MC45NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQxLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQxLjg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQyLjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQyLjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQyLjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQyLjk1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA0My4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQzLjMyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDMuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQzLjkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA0NC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0NC40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNDQuODI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0NS4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ1LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDQ2LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNDYuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNDYuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQ2Ljk3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ3LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDQ3Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA0Ny44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDguMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNDguNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNDkuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA0OS41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDQ5LjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDUwCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA1MC44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDUxLjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTEuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1MS43CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNTIuMTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1Mi41NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDUzCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNTMuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA1My44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU0LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTQuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU0LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDU1LjEyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU1LjU1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA1NgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU2LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU2LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTYuOQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNTcuMzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA1Ny43MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA1OC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTguNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA1OQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNTkuMgogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDU5LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDU5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNTkuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2MC4yCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjAuNDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYwLjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjAuNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYwLjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjEuMDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYxLjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjEuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYxLjM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA2MS41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDYxLjk3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDYyLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjIuNjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjIuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDYzLjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNjMuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA2My42CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA2My45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2My45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY0LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDY0LjIyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjQuNTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjQuNTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA2NC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2NC44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjUuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjUuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY2LjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjYuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNjYuNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDY2LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny4wMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny4zNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuMzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2Ny45NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjcuOTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA2OC4yNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjguMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDY4LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNjguODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA2OS4yNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDY5LjQ1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNjkuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNjkuOTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3MC4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA3MC4xMjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDcwLjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNzAuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzAuNzc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzEuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3MS40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDcxLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzEuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3MS44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDcxLjg3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzIuMTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3Mi41CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3My4xCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzMuMzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3My41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA3My41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDc0CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzQuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3NC42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzQuODc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogNzUuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzUuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA3Ni4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogNzYuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzYuNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA3NwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzcuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogNzcuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDc3LjA3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogNzguMwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc4LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc4LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDc5LjM1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA3OS42NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODAKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4MC40MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDgwLjg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODEuMjc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4MS41CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA4MS43NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDgyLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODIuNTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDgzCiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4My40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA4My40CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogODMuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg0LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODQuNwogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDg0LjcKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDg0LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDg0LjkyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODUuMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4NS4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDg1Ljc3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODYuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAibGVmdCIsCiAgICAgICAgInRpbWUiOiA4Ni44MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4Ny4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDg3LjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg3LjcyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogODguMTUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA4OC4zNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDg4LjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4OQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODkKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDg5LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogODkuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiA4OS44NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogODkuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkwLjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTAuNDc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTAuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5MS4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTEuNTc1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTEuOAogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogOTIuMDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTIuNDI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAidXAiLAogICAgICAgICJ0aW1lIjogOTIuNjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkyLjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5My4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5My4wNzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDkzLjMKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDkzLjYKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5My45NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk0LjE1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5NC41NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTUuMjI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5NS40NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk1Ljg1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTUuODUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDk2LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDk2LjI3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogOTYuNzI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogOTYuOTI1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5Ny4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk3LjM3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInVwIiwKICAgICAgICAidGltZSI6IDk3LjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogOTgKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDk4LjQyNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogInJpZ2h0IiwKICAgICAgICAidGltZSI6IDk4LjY1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAiZG93biIsCiAgICAgICAgInRpbWUiOiA5OC44NzUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJsZWZ0IiwKICAgICAgICAidGltZSI6IDk5LjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJyaWdodCIsCiAgICAgICAgInRpbWUiOiA5OS45MjUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEwMC4xNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTAwLjU3NQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImRvd24iLAogICAgICAgICJ0aW1lIjogMTAwLjgKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJ1cCIsCiAgICAgICAgInRpbWUiOiAxMDEuMDUKICAgIH0sCiAgICB7CiAgICAgICAgImtleSI6ICJkb3duIiwKICAgICAgICAidGltZSI6IDEwMS4wNQogICAgfSwKICAgIHsKICAgICAgICAia2V5IjogImxlZnQiLAogICAgICAgICJ0aW1lIjogMTAxLjA1CiAgICB9LAogICAgewogICAgICAgICJrZXkiOiAicmlnaHQiLAogICAgICAgICJ0aW1lIjogMTAxLjA1CiAgICB9Cl0=
// ==/UserScript==
(() => {
'use strict';
// ---------- UI/behavior config ----------
const START_SELECTOR = '.start';
const FAIL_SEL = '.stats-item.stats-title';
const RETRY_SEL = '.stats-btn';
const HOLD_MS = 40;
const LOOKAHEAD = 12;
const STORE = 'ddd_trainer_cfg';
// ---------------------------------------
// Load embedded chart (fallback to localStorage or window.DDR_NOTES)
function loadEmbeddedChart() {
try {
const txt = GM_getResourceText && GM_getResourceText('dddchart');
if (txt) {
log('Loaded chart from GM resource');
return JSON.parse(txt);
}
} catch { }
try {
const ls = localStorage.getItem('ddd_chart');
if (ls) {
log('Loaded chart from localStorage');
return JSON.parse(ls);
}
} catch { }
// Try multiple sources for the notes
let notes = [];
if (Array.isArray(window.DDR_NOTES)) {
notes = window.DDR_NOTES;
log('Loaded chart from window.DDR_NOTES:', notes.length, 'notes');
} else if (Array.isArray(globalThis.DDR_NOTES)) {
notes = globalThis.DDR_NOTES;
log('Loaded chart from globalThis.DDR_NOTES:', notes.length, 'notes');
} else {
log('No DDR_NOTES found in window or globalThis');
}
return notes;
}
const cfg = loadCfg() || { enabled: false, latency: 0, speed: 1, autoRetry: false };
let notesCache = normalize(loadEmbeddedChart());
let runner = null;
console.log(notesCache);
// Debug logging
log('Initialized with', notesCache.length, 'notes, enabled:', cfg.enabled);
// Find and monitor the video element
function findVideo() {
return document.querySelector('video[src*="dance.mp4"], video.bg-video');
}
function logVideoState() {
const video = findVideo();
if (video) {
log(`VIDEO: currentTime=${video.currentTime.toFixed(3)}s paused=${video.paused} readyState=${video.readyState}`);
} else {
log('VIDEO: not found');
}
}
// Log video state periodically for debugging
setInterval(logVideoState, 1000);
// ===== Panel =====
function injectPanel() {
if (document.getElementById('ddd-panel')) return;
const el = document.createElement('label');
el.id = 'ddd-panel';
el.innerHTML = `
<input id="ddd-enable" type="checkbox"${cfg.enabled ? ' checked' : ''}>
<span style="margin-right:.75rem">Enable DDD Trainer</span>
<span id="ddd-stats" style="opacity:.85">lat=${cfg.latency}ms ×${cfg.speed.toFixed(3)} | notes: ${notesCache.length}</span>
`;
Object.assign(el.style, {
position: 'fixed', zIndex: 999999, top: '10px', right: '10px',
background: 'rgba(0,0,0,.6)', color: '#fff', padding: '6px 10px',
borderRadius: '6px', font: '12px/1.2 system-ui, sans-serif', userSelect: 'none'
});
el.querySelector('#ddd-enable').addEventListener('change', e => {
cfg.enabled = e.target.checked; saveCfg(); log('enabled:', cfg.enabled);
});
document.body.appendChild(el);
}
waitForBody(injectPanel);
// ===== Start hook =====
const onStart = (e) => {
if (!cfg.enabled) return;
if (e.target && e.target.closest(START_SELECTOR)) {
if (!notesCache.length) { log('no notes loaded'); return; }
runner = makeRunner(notesCache);
runner.start();
}
};
document.addEventListener('click', onStart, true);
document.addEventListener('pointerdown', onStart, true);
// ===== Fail detect & retry =====
const failObserver = new MutationObserver(() => {
const failEl = [...document.querySelectorAll(FAIL_SEL)]
.find(n => /stage failed/i.test(n.textContent || ''));
if (failEl) {
if (runner) { runner.stop(); runner = null; }
log('Stage Failed detected.');
if (cfg.autoRetry) {
setTimeout(() => {
const btn = [...document.querySelectorAll(RETRY_SEL)]
.find(n => /try again/i.test(n.textContent || ''));
if (btn) { btn.click(); log('Clicked Try Again.'); }
}, 150);
}
}
});
failObserver.observe(document.documentElement, { childList: true, subtree: true });
// ===== Tuning keys =====
document.addEventListener('keydown', (e) => {
if (!cfg.enabled) return;
if (e.key === ']') { cfg.latency += 5; saveCfg(); stat(); }
else if (e.key === '[') { cfg.latency -= 5; saveCfg(); stat(); }
else if (e.key === '+') { cfg.speed *= 1.01; saveCfg(); stat(); }
else if (e.key === '-') { cfg.speed /= 1.01; saveCfg(); stat(); }
else if (/^r$/i.test(e.key)) { notesCache = normalize(loadEmbeddedChart()); stat(); }
});
// ===== Runner =====
function makeRunner(seq) {
const notes = [...seq];
let i = 0, running = false, raf = 0;
let lastVideoTime = 0;
let frameCount = 0;
let lastFrameTime = performance.now();
function loop(now) {
if (!running) return;
const video = findVideo();
if (!video) {
log('VIDEO: not found, stopping runner');
running = false;
return;
}
const videoTimeMs = video.currentTime * 1000;
const elapsed = videoTimeMs * (1 / cfg.speed);
// Detect freezes/jumps in video time
const videoTimeDelta = videoTimeMs - lastVideoTime;
const frameDelta = now - lastFrameTime;
frameCount++;
// Log if we detect unusual timing
if (videoTimeDelta > 100 || frameDelta > 50) { // More than 100ms video jump or 50ms frame time
log(`FREEZE DETECTED: videoJump=${videoTimeDelta.toFixed(1)}ms frameTime=${frameDelta.toFixed(1)}ms`);
}
// Log every 60 frames for performance monitoring
if (frameCount % 60 === 0) {
log(`PERF: frame#${frameCount} videoTime=${videoTimeMs.toFixed(1)}ms paused=${video.paused} buffered=${video.buffered.length > 0 ? video.buffered.end(0).toFixed(1) : 'none'}`);
}
// Process notes that are ready to be played
let processedThisFrame = 0;
while (i < notes.length && processedThisFrame < 10) { // Limit to 10 notes per frame to prevent lockup
const note = notes[i];
const timeUntilNote = note.t + cfg.latency - elapsed;
// If this note is way overdue (more than 200ms late), skip it
if (timeUntilNote < -200) {
log(`SKIP: ${note.key} @${note.t}ms (${(-timeUntilNote).toFixed(1)}ms late)`);
i++;
processedThisFrame++;
continue;
}
// If this note is ready to play (within lookahead window)
if (timeUntilNote <= LOOKAHEAD) {
const expectedTime = note.t + cfg.latency;
const actualTime = elapsed;
const diff = actualTime - expectedTime;
log(`CHART: ${note.key} expected@${expectedTime.toFixed(1)}ms actual@${actualTime.toFixed(1)}ms diff=${diff.toFixed(1)}ms`);
press(note.key, note.hold ?? HOLD_MS);
i++; // Move to next note only after processing this one
processedThisFrame++;
} else {
// This note and all following notes are not ready yet
break;
}
}
lastVideoTime = videoTimeMs;
lastFrameTime = now;
if (i >= notes.length) { running = false; return; }
raf = requestAnimationFrame(loop);
}
return {
start() {
const video = findVideo();
if (!video) {
log('VIDEO: not found, cannot start');
return;
}
i = 0; running = true;
requestAnimationFrame(loop);
log(`START: videoTime=${(video.currentTime * 1000).toFixed(1)}ms latency=${cfg.latency}ms speed×${cfg.speed.toFixed(3)}`);
log('First few notes:', notes.slice(0, 5).map(n => `${n.key}@${n.t}ms`).join(', '));
},
stop() { running = false; cancelAnimationFrame(raf); }
};
}
// ===== Keys =====
const mapKey = k => {
const s = String(k).toLowerCase();
return ({
left: 'ArrowLeft', right: 'ArrowRight', up: 'ArrowUp', down: 'ArrowDown',
space: ' ', enter: 'Enter'
}[s]) || k;
};
const keyCode = k => ({
ArrowLeft: 37, ArrowUp: 38, ArrowRight: 39, ArrowDown: 40, Enter: 13, ' ': 32
}[k] ?? (k.length === 1 ? k.toUpperCase().charCodeAt(0) : 0));
function fireKey(key, type) {
const kc = keyCode(key);
const ev = new KeyboardEvent(type, {
key,
code: key.startsWith('Arrow') ? key : (key === 'Enter' ? 'Enter' : (key.length === 1 ? 'Key' + key.toUpperCase() : key)),
keyCode: kc, which: kc, bubbles: true, cancelable: true
});
[document.activeElement, document.body, document, window].forEach(t => t && t.dispatchEvent(ev));
}
let songStartTime = 0; // Track when the song started
function press(k, hold = HOLD_MS) {
const key = mapKey(k);
const now = performance.now();
const songTime = now - songStartTime;
log(`PRESS: ${key} at song-time ${songTime.toFixed(1)}ms (absolute ${now.toFixed(1)}ms)`);
fireKey(key, 'keydown');
setTimeout(() => fireKey(key, 'keyup'), hold);
}
// ===== Utils =====
function normalize(seq) {
return (seq || []).map(n => ({ t: (n.time || 0) * 1000, key: n.key, hold: n.hold }))
.sort((a, b) => a.t - b.t);
}
function stat() {
const s = document.getElementById('ddd-stats');
if (s) s.textContent = `lat=${cfg.latency}ms ×${cfg.speed.toFixed(3)} | notes: ${notesCache.length}`;
}
function saveCfg() { localStorage.setItem(STORE, JSON.stringify(cfg)); }
function loadCfg() { try { return JSON.parse(localStorage.getItem(STORE)); } catch (e) { return null; } }
function waitForBody(fn) {
if (document.body) return fn();
const obs = new MutationObserver(() => {
if (document.body) { obs.disconnect(); fn(); }
});
obs.observe(document.documentElement, { childList: true, subtree: true });
}
function log(...a) { console.log('[DDD]', ...a); }
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment