{
  "title" : "Duplication",
  "timestamp" : "2026-01-18 17:06:34",
  "duplicates" : [ {
    "blockSize" : 18,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "engine/src/main/kotlin/io/kotless/gen/AWSGenerator.kt",
        "extension" : "kt",
        "linesOfCode" : 51,
        "components" : [ "primary::engine" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 28,
      "startLine" : 32,
      "endLine" : 58,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 28
    }, {
      "file" : {
        "relativePath" : "engine/src/main/kotlin/io/kotless/gen/AzureGenerator.kt",
        "extension" : "kt",
        "linesOfCode" : 50,
        "components" : [ "primary::engine" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 26,
      "startLine" : 31,
      "endLine" : 57,
      "cleanedStartLine" : 9,
      "cleanedEndLine" : 26
    } ]
  }, {
    "blockSize" : 17,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-aws/src/main/kotlin/io/kotless/dsl/app/events/EventsStorage.kt",
        "extension" : "kt",
        "linesOfCode" : 27,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 1,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 17
    }, {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-azure/src/main/kotlin/io/kotless/dsl/events/EventsStorage.kt",
        "extension" : "kt",
        "linesOfCode" : 27,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 1,
      "endLine" : 34,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 17,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-aws/src/main/kotlin/io/kotless/dsl/app/events/EventsReflectionScanner.kt",
        "extension" : "kt",
        "linesOfCode" : 31,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 1,
      "endLine" : 36,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 17
    }, {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-azure/src/main/kotlin/io/kotless/dsl/events/EventsReflectionScanner.kt",
        "extension" : "kt",
        "linesOfCode" : 31,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 17,
      "startLine" : 1,
      "endLine" : 36,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 10,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-aws/src/main/kotlin/io/kotless/dsl/app/events/EventsDispatcher.kt",
        "extension" : "kt",
        "linesOfCode" : 28,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 16,
      "startLine" : 16,
      "endLine" : 27,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 16
    }, {
      "file" : {
        "relativePath" : "dsl/kotless/cloud/kotless-lang-azure/src/main/kotlin/io/kotless/dsl/HandlerAzure.kt",
        "extension" : "kt",
        "linesOfCode" : 66,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 45,
      "startLine" : 60,
      "endLine" : 71,
      "cleanedStartLine" : 36,
      "cleanedEndLine" : 45
    } ]
  }, {
    "blockSize" : 8,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/kotless/kotless-lang/src/main/resources/logback.xml",
        "extension" : "xml",
        "linesOfCode" : 13,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 1,
      "endLine" : 12,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    }, {
      "file" : {
        "relativePath" : "dsl/ktor/ktor-lang/src/main/resources/logback.xml",
        "extension" : "xml",
        "linesOfCode" : 13,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 8,
      "startLine" : 1,
      "endLine" : 12,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 8
    } ]
  }, {
    "blockSize" : 7,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/ktor/cloud/ktor-lang-aws/src/main/kotlin/io/kotless/dsl/ktor/KotlessAWS.kt",
        "extension" : "kt",
        "linesOfCode" : 72,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 44,
      "startLine" : 32,
      "endLine" : 42,
      "cleanedStartLine" : 6,
      "cleanedEndLine" : 12
    }, {
      "file" : {
        "relativePath" : "dsl/ktor/cloud/ktor-lang-azure/src/main/kotlin/io/kotless/dsl/ktor/KotlessAzure.kt",
        "extension" : "kt",
        "linesOfCode" : 74,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 51,
      "startLine" : 31,
      "endLine" : 41,
      "cleanedStartLine" : 7,
      "cleanedEndLine" : 13
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "plugins/gradle/src/main/kotlin/io/kotless/plugin/gradle/tasks/gen/KotlessGenerateTask.kt",
        "extension" : "kt",
        "linesOfCode" : 85,
        "components" : [ "primary::plugins" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 65,
      "startLine" : 51,
      "endLine" : 57,
      "cleanedStartLine" : 20,
      "cleanedEndLine" : 25
    }, {
      "file" : {
        "relativePath" : "plugins/gradle/src/main/kotlin/io/kotless/plugin/gradle/tasks/gen/KotlessLocalGenerateTask.kt",
        "extension" : "kt",
        "linesOfCode" : 65,
        "components" : [ "primary::plugins" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 41,
      "startLine" : 31,
      "endLine" : 37,
      "cleanedStartLine" : 11,
      "cleanedEndLine" : 16
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/kotless/kotless-lang-local/src/main/kotlin/io/kotless/local/scheduled/AutowarmJob.kt",
        "extension" : "kt",
        "linesOfCode" : 46,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 33,
      "startLine" : 49,
      "endLine" : 55,
      "cleanedStartLine" : 28,
      "cleanedEndLine" : 33
    }, {
      "file" : {
        "relativePath" : "dsl/kotless/kotless-lang-local/src/main/kotlin/io/kotless/local/scheduled/ScheduledJob.kt",
        "extension" : "kt",
        "linesOfCode" : 50,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 38,
      "startLine" : 53,
      "endLine" : 59,
      "cleanedStartLine" : 33,
      "cleanedEndLine" : 38
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "plugins/gradle/src/main/kotlin/io/kotless/plugin/gradle/tasks/local/LocalStackRunner.kt",
        "extension" : "kt",
        "linesOfCode" : 67,
        "components" : [ "primary::plugins" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 22,
      "endLine" : 30,
      "cleanedStartLine" : 4,
      "cleanedEndLine" : 9
    }, {
      "file" : {
        "relativePath" : "plugins/gradle/src/main/kotlin/io/kotless/plugin/gradle/tasks/local/LocalStackRunner.kt",
        "extension" : "kt",
        "linesOfCode" : 67,
        "components" : [ "primary::plugins" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 47,
      "startLine" : 36,
      "endLine" : 44,
      "cleanedStartLine" : 12,
      "cleanedEndLine" : 17
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "dsl/common/cloud/dsl-common-aws/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 15,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 12,
      "startLine" : 1,
      "endLine" : 10,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    }, {
      "file" : {
        "relativePath" : "dsl/common/cloud/dsl-common-azure/build.gradle.kts",
        "extension" : "kts",
        "linesOfCode" : 9,
        "components" : [ "primary::dsl" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 7,
      "startLine" : 1,
      "endLine" : 10,
      "cleanedStartLine" : 1,
      "cleanedEndLine" : 6
    } ]
  }, {
    "blockSize" : 6,
    "duplicatedFileBlocks" : [ {
      "file" : {
        "relativePath" : "engine/src/main/kotlin/io/kotless/gen/factory/aws/route/static/StaticRouteFactory.kt",
        "extension" : "kt",
        "linesOfCode" : 72,
        "components" : [ "primary::engine" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 44,
      "endLine" : 49,
      "cleanedStartLine" : 22,
      "cleanedEndLine" : 27
    }, {
      "file" : {
        "relativePath" : "engine/src/main/kotlin/io/kotless/gen/factory/aws/route/static/StaticRouteFactory.kt",
        "extension" : "kt",
        "linesOfCode" : 72,
        "components" : [ "primary::engine" ],
        "concerns" : [ "::Unclassified" ]
      },
      "sourceFileCleanedLinesOfCode" : 55,
      "startLine" : 73,
      "endLine" : 78,
      "cleanedStartLine" : 43,
      "cleanedEndLine" : 48
    } ]
  } ],
  "overallDuplication" : null
}