TiagoMSSantos/MobileRT

View on GitHub
docs/jscpd-report/html/jscpd-report.json

Summary

Maintainability
Test Coverage
{
  "statistics": {
    "detectionDate": "2025-01-07T19:28:13.707Z",
    "formats": {
      "java": {
        "sources": {
          "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java": {
            "lines": 162,
            "tokens": 1239,
            "sources": 1,
            "clones": 12,
            "duplicatedLines": 72,
            "duplicatedTokens": 756,
            "percentage": 44.44,
            "percentageTokens": 61.02,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java": {
            "lines": 117,
            "tokens": 805,
            "sources": 1,
            "clones": 5,
            "duplicatedLines": 40,
            "duplicatedTokens": 395,
            "percentage": 34.19,
            "percentageTokens": 49.07,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsLoggingTest.java": {
            "lines": 41,
            "tokens": 242,
            "sources": 1,
            "clones": 3,
            "duplicatedLines": 28,
            "duplicatedTokens": 197,
            "percentage": 68.29,
            "percentageTokens": 81.4,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java": {
            "lines": 184,
            "tokens": 1815,
            "sources": 1,
            "clones": 10,
            "duplicatedLines": 83,
            "duplicatedTokens": 879,
            "percentage": 45.11,
            "percentageTokens": 48.43,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsGLTest.java": {
            "lines": 108,
            "tokens": 841,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 12,
            "duplicatedTokens": 128,
            "percentage": 11.11,
            "percentageTokens": 15.22,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsContextTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/UtilsBufferTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/StateTest.java": {
            "lines": 34,
            "tokens": 196,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/ShaderTest.java": {
            "lines": 26,
            "tokens": 117,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/SceneTest.java": {
            "lines": 26,
            "tokens": 117,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/utils/AcceleratorTest.java": {
            "lines": 25,
            "tokens": 113,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/system/package-info.java": {
            "lines": 5,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/system/JavaMemoryTest.java": {
            "lines": 67,
            "tokens": 501,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/exceptions/LowMemoryExceptionTest.java": {
            "lines": 28,
            "tokens": 153,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/exceptions/FailureExceptionTest.java": {
            "lines": 28,
            "tokens": 145,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 6,
            "duplicatedLines": 61,
            "duplicatedTokens": 398,
            "percentage": 190.63,
            "percentageTokens": 202.03,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsToastTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsRendererTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsMethodsTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/ConstantsErrorTest.java": {
            "lines": 32,
            "tokens": 197,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 17,
            "duplicatedTokens": 130,
            "percentage": 53.13,
            "percentageTokens": 65.99,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/constants/AcceleratorTest.java": {
            "lines": 41,
            "tokens": 251,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/CustomNumberPickerTest.java": {
            "lines": 73,
            "tokens": 483,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 16,
            "duplicatedTokens": 132,
            "percentage": 21.92,
            "percentageTokens": 27.33,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/ConfigTest.java": {
            "lines": 210,
            "tokens": 1604,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/ConfigSamplesTest.java": {
            "lines": 110,
            "tokens": 775,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/ConfigResolutionTest.java": {
            "lines": 121,
            "tokens": 868,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/ConfigRenderTaskTest.java": {
            "lines": 177,
            "tokens": 1519,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/configs/ConfigGlAttributeTest.java": {
            "lines": 140,
            "tokens": 1035,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 22,
            "duplicatedTokens": 236,
            "percentage": 15.71,
            "percentageTokens": 22.8,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/package-info.java": {
            "lines": 3,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsShader.java": {
            "lines": 190,
            "tokens": 1558,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsLogging.java": {
            "lines": 50,
            "tokens": 334,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsGlMatrices.java": {
            "lines": 166,
            "tokens": 1085,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsGL.java": {
            "lines": 208,
            "tokens": 1370,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 9,
            "duplicatedTokens": 74,
            "percentage": 4.33,
            "percentageTokens": 5.4,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsContext.java": {
            "lines": 357,
            "tokens": 2630,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/UtilsBuffer.java": {
            "lines": 80,
            "tokens": 450,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/Utils.java": {
            "lines": 178,
            "tokens": 1257,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/utils/CustomFileProvider.java": {
            "lines": 15,
            "tokens": 71,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/exceptions/package-info.java": {
            "lines": 3,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/exceptions/LowMemoryException.java": {
            "lines": 35,
            "tokens": 132,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/exceptions/FailureException.java": {
            "lines": 45,
            "tokens": 174,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/package-info.java": {
            "lines": 3,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/State.java": {
            "lines": 49,
            "tokens": 131,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/Shader.java": {
            "lines": 77,
            "tokens": 277,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/Scene.java": {
            "lines": 77,
            "tokens": 277,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/CustomNumberPicker.java": {
            "lines": 58,
            "tokens": 362,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/ConstantsUI.java": {
            "lines": 106,
            "tokens": 429,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/ConstantsToast.java": {
            "lines": 37,
            "tokens": 131,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/ConstantsRenderer.java": {
            "lines": 31,
            "tokens": 136,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/ConstantsMethods.java": {
            "lines": 53,
            "tokens": 209,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/ConstantsError.java": {
            "lines": 35,
            "tokens": 159,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/Constants.java": {
            "lines": 123,
            "tokens": 577,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/constants/Accelerator.java": {
            "lines": 75,
            "tokens": 288,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/package-info.java": {
            "lines": 3,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/utils/UtilsT.java": {
            "lines": 224,
            "tokens": 1524,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 18,
            "duplicatedTokens": 228,
            "percentage": 8.04,
            "percentageTokens": 14.96,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/utils/UtilsPickerT.java": {
            "lines": 59,
            "tokens": 391,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/utils/UtilsContextT.java": {
            "lines": 155,
            "tokens": 1573,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/system/NativeMemoryTest.java": {
            "lines": 124,
            "tokens": 839,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/system/FileSystemTest.java": {
            "lines": 150,
            "tokens": 1123,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/engine/package-info.java": {
            "lines": 18,
            "tokens": 9,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/engine/ShaderTest.java": {
            "lines": 98,
            "tokens": 530,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 15,
            "duplicatedTokens": 93,
            "percentage": 15.31,
            "percentageTokens": 17.55,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/engine/CameraTest.java": {
            "lines": 36,
            "tokens": 204,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/engine/AcceleratorTest.java": {
            "lines": 77,
            "tokens": 418,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 15,
            "duplicatedTokens": 93,
            "percentage": 19.48,
            "percentageTokens": 22.25,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/package-info.java": {
            "lines": 5,
            "tokens": 7,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/RenderTaskTest.java": {
            "lines": 35,
            "tokens": 198,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java": {
            "lines": 420,
            "tokens": 3115,
            "sources": 1,
            "clones": 14,
            "duplicatedLines": 168,
            "duplicatedTokens": 1666,
            "percentage": 40,
            "percentageTokens": 53.48,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/MainRendererTest.java": {
            "lines": 431,
            "tokens": 3672,
            "sources": 1,
            "clones": 18,
            "duplicatedLines": 189,
            "duplicatedTokens": 1793,
            "percentage": 43.85,
            "percentageTokens": 48.83,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/MainActivityTest.java": {
            "lines": 253,
            "tokens": 2096,
            "sources": 1,
            "clones": 7,
            "duplicatedLines": 74,
            "duplicatedTokens": 721,
            "percentage": 29.25,
            "percentageTokens": 34.4,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/DrawViewTest.java": {
            "lines": 297,
            "tokens": 2486,
            "sources": 1,
            "clones": 7,
            "duplicatedLines": 64,
            "duplicatedTokens": 659,
            "percentage": 21.55,
            "percentageTokens": 26.51,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/test/java/puscas/mobilertapp/ConstantsTests.java": {
            "lines": 19,
            "tokens": 68,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/package-info.java": {
            "lines": 3,
            "tokens": 7,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/MyEglContextFactory.java": {
            "lines": 103,
            "tokens": 704,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 9,
            "duplicatedTokens": 74,
            "percentage": 8.74,
            "percentageTokens": 10.51,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/MainRenderer.java": {
            "lines": 991,
            "tokens": 6301,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 28,
            "duplicatedTokens": 316,
            "percentage": 2.83,
            "percentageTokens": 5.02,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/MainActivity.java": {
            "lines": 998,
            "tokens": 8344,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 6,
            "duplicatedTokens": 65,
            "percentage": 0.6,
            "percentageTokens": 0.78,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/DrawView.java": {
            "lines": 449,
            "tokens": 2769,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/package-info.java": {
            "lines": 7,
            "tokens": 7,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/ViewActionWait.java": {
            "lines": 127,
            "tokens": 839,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 10,
            "duplicatedTokens": 170,
            "percentage": 7.87,
            "percentageTokens": 20.26,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/ViewActionNumberPicker.java": {
            "lines": 66,
            "tokens": 408,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/ViewActionButton.java": {
            "lines": 106,
            "tokens": 801,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/UiTest.java": {
            "lines": 271,
            "tokens": 2186,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 8,
            "duplicatedTokens": 75,
            "percentage": 2.95,
            "percentageTokens": 3.43,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/RayTracingTest.java": {
            "lines": 111,
            "tokens": 672,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/PreviewTest.java": {
            "lines": 129,
            "tokens": 1118,
            "sources": 1,
            "clones": 4,
            "duplicatedLines": 38,
            "duplicatedTokens": 426,
            "percentage": 29.46,
            "percentageTokens": 38.1,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/OrderRunner.java": {
            "lines": 142,
            "tokens": 1019,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/Order.java": {
            "lines": 12,
            "tokens": 88,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/MainRendererTest.java": {
            "lines": 162,
            "tokens": 962,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/InvokeMethodIgnoringErrors.java": {
            "lines": 59,
            "tokens": 373,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/ConstantsAndroidTests.java": {
            "lines": 47,
            "tokens": 187,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/androidTest/java/puscas/mobilertapp/AbstractTest.java": {
            "lines": 526,
            "tokens": 4835,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 14,
            "duplicatedTokens": 140,
            "percentage": 2.66,
            "percentageTokens": 2.9,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 10746,
          "tokens": 76350,
          "sources": 87,
          "clones": 60,
          "duplicatedLines": 559,
          "duplicatedTokens": 5312,
          "percentage": 5.2,
          "percentageTokens": 6.96,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "kotlin": {
        "sources": {
          "app/src/main/java/puscas/mobilertapp/utils/AsyncTaskCoroutine.kt": {
            "lines": 146,
            "tokens": 557,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/ConfigSamples.kt": {
            "lines": 26,
            "tokens": 162,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/ConfigResolution.kt": {
            "lines": 28,
            "tokens": 175,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/ConfigRenderTask.kt": {
            "lines": 58,
            "tokens": 437,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/ConfigGlAttribute.kt": {
            "lines": 41,
            "tokens": 217,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/configs/Config.kt": {
            "lines": 55,
            "tokens": 380,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/src/main/java/puscas/mobilertapp/RenderTask.kt": {
            "lines": 336,
            "tokens": 2004,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 690,
          "tokens": 3932,
          "sources": 7,
          "clones": 0,
          "duplicatedLines": 0,
          "duplicatedTokens": 0,
          "percentage": 0,
          "percentageTokens": 0,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "cpp": {
        "sources": {
          "app/System_dependent/Native/Qt/MobileRT/mainwindow.cpp": {
            "lines": 151,
            "tokens": 1572,
            "sources": 1,
            "clones": 4,
            "duplicatedLines": 38,
            "duplicatedTokens": 442,
            "percentage": 25.17,
            "percentageTokens": 28.12,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Native/Qt/MobileRT/main.cpp": {
            "lines": 85,
            "tokens": 979,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Native/Qt/MobileRT/config.cpp": {
            "lines": 168,
            "tokens": 1283,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Native/Qt/MobileRT/about.cpp": {
            "lines": 13,
            "tokens": 116,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/engine/ShaderTestEngine.cpp": {
            "lines": 117,
            "tokens": 1613,
            "sources": 1,
            "clones": 13,
            "duplicatedLines": 131,
            "duplicatedTokens": 2650,
            "percentage": 111.97,
            "percentageTokens": 164.29,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/engine/CameraTestEngine.cpp": {
            "lines": 54,
            "tokens": 699,
            "sources": 1,
            "clones": 5,
            "duplicatedLines": 54,
            "duplicatedTokens": 908,
            "percentage": 100,
            "percentageTokens": 129.9,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/engine/AcceleratorTestEngine.cpp": {
            "lines": 78,
            "tokens": 1069,
            "sources": 1,
            "clones": 4,
            "duplicatedLines": 55,
            "duplicatedTokens": 884,
            "percentage": 70.51,
            "percentageTokens": 82.69,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Native/Utils_dependent.cpp": {
            "lines": 20,
            "tokens": 185,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Native/C_wrapper.cpp": {
            "lines": 261,
            "tokens": 2822,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Utils/Utils.cpp": {
            "lines": 296,
            "tokens": 2327,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Utils/ErrorCode.cpp": {
            "lines": 93,
            "tokens": 931,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Triangle.cpp": {
            "lines": 401,
            "tokens": 3846,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Sphere.cpp": {
            "lines": 119,
            "tokens": 1260,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Plane.cpp": {
            "lines": 179,
            "tokens": 1463,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Accelerators/AABB.cpp": {
            "lines": 116,
            "tokens": 932,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/Whitted.cpp": {
            "lines": 90,
            "tokens": 1052,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 7,
            "duplicatedTokens": 88,
            "percentage": 7.78,
            "percentageTokens": 8.37,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/PathTracer.cpp": {
            "lines": 143,
            "tokens": 1413,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 12,
            "duplicatedTokens": 156,
            "percentage": 8.39,
            "percentageTokens": 11.04,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/NoShadows.cpp": {
            "lines": 42,
            "tokens": 501,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/DiffuseMaterial.cpp": {
            "lines": 24,
            "tokens": 296,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 5,
            "duplicatedTokens": 68,
            "percentage": 20.83,
            "percentageTokens": 22.97,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/DepthMap.cpp": {
            "lines": 14,
            "tokens": 202,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/Stratified.cpp": {
            "lines": 16,
            "tokens": 226,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 7,
            "duplicatedTokens": 135,
            "percentage": 43.75,
            "percentageTokens": 59.73,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticPCG.cpp": {
            "lines": 12,
            "tokens": 89,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticMersenneTwister.cpp": {
            "lines": 12,
            "tokens": 89,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticHaltonSeq.cpp": {
            "lines": 18,
            "tokens": 155,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/PCG.cpp": {
            "lines": 9,
            "tokens": 108,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/MersenneTwister.cpp": {
            "lines": 8,
            "tokens": 106,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/HaltonSeq.cpp": {
            "lines": 16,
            "tokens": 221,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 7,
            "duplicatedTokens": 135,
            "percentage": 43.75,
            "percentageTokens": 61.09,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/Constant.cpp": {
            "lines": 8,
            "tokens": 61,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/PerspectiveLoader.cpp": {
            "lines": 57,
            "tokens": 437,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/OBJLoader.cpp": {
            "lines": 513,
            "tokens": 6481,
            "sources": 1,
            "clones": 10,
            "duplicatedLines": 120,
            "duplicatedTokens": 1444,
            "percentage": 23.39,
            "percentageTokens": 22.28,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/CameraFactory.cpp": {
            "lines": 18,
            "tokens": 202,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Lights/PointLight.cpp": {
            "lines": 18,
            "tokens": 134,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Lights/AreaLight.cpp": {
            "lines": 38,
            "tokens": 398,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Cameras/Perspective.cpp": {
            "lines": 61,
            "tokens": 562,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Cameras/Orthographic.cpp": {
            "lines": 43,
            "tokens": 597,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestTriangle.cpp": {
            "lines": 426,
            "tokens": 4150,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestTextureLoader.cpp": {
            "lines": 15,
            "tokens": 79,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestRay.cpp": {
            "lines": 58,
            "tokens": 591,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 10,
            "duplicatedTokens": 186,
            "percentage": 17.24,
            "percentageTokens": 31.47,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestPlane.cpp": {
            "lines": 277,
            "tokens": 2844,
            "sources": 1,
            "clones": 8,
            "duplicatedLines": 62,
            "duplicatedTokens": 814,
            "percentage": 22.38,
            "percentageTokens": 28.62,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestMain.cpp": {
            "lines": 44,
            "tokens": 65,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestIntersection.cpp": {
            "lines": 96,
            "tokens": 994,
            "sources": 1,
            "clones": 4,
            "duplicatedLines": 24,
            "duplicatedTokens": 346,
            "percentage": 25,
            "percentageTokens": 34.81,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestCameraLoader.cpp": {
            "lines": 45,
            "tokens": 380,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/TestAABB.cpp": {
            "lines": 126,
            "tokens": 1076,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Scenes/Scenes.cpp": {
            "lines": 293,
            "tokens": 3184,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 16,
            "duplicatedTokens": 148,
            "percentage": 5.46,
            "percentageTokens": 4.65,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Texture.cpp": {
            "lines": 131,
            "tokens": 1405,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 16,
            "duplicatedTokens": 280,
            "percentage": 12.21,
            "percentageTokens": 19.93,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shader.cpp": {
            "lines": 308,
            "tokens": 2629,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Scene.cpp": {
            "lines": 36,
            "tokens": 292,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Sampler.cpp": {
            "lines": 43,
            "tokens": 214,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Renderer.cpp": {
            "lines": 202,
            "tokens": 1942,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Ray.cpp": {
            "lines": 93,
            "tokens": 506,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/ObjectLoader.cpp": {
            "lines": 15,
            "tokens": 46,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Material.cpp": {
            "lines": 41,
            "tokens": 355,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Light.cpp": {
            "lines": 16,
            "tokens": 59,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Intersection.cpp": {
            "lines": 62,
            "tokens": 413,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/CameraLoader.cpp": {
            "lines": 6,
            "tokens": 20,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Camera.cpp": {
            "lines": 61,
            "tokens": 378,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 5705,
          "tokens": 56049,
          "sources": 56,
          "clones": 30,
          "duplicatedLines": 282,
          "duplicatedTokens": 4342,
          "percentage": 4.94,
          "percentageTokens": 7.75,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "yaml": {
        "sources": {
          "deploy/mobilert-chart/templates/tests/test-connection.yaml": {
            "lines": 14,
            "tokens": 113,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/serviceaccount.yaml": {
            "lines": 11,
            "tokens": 120,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/service.yaml": {
            "lines": 14,
            "tokens": 132,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/ingress.yaml": {
            "lines": 60,
            "tokens": 689,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/hpa.yaml": {
            "lines": 27,
            "tokens": 244,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/deployment.yaml": {
            "lines": 80,
            "tokens": 727,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/templates/configmap.yaml": {
            "lines": 7,
            "tokens": 80,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/values.yaml": {
            "lines": 86,
            "tokens": 344,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/mobilert-chart/Chart.yaml": {
            "lines": 23,
            "tokens": 71,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/reusable-native.yml": {
            "lines": 369,
            "tokens": 2085,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 22,
            "duplicatedTokens": 286,
            "percentage": 5.96,
            "percentageTokens": 13.72,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/reusable-android.yml": {
            "lines": 951,
            "tokens": 6901,
            "sources": 1,
            "clones": 18,
            "duplicatedLines": 448,
            "duplicatedTokens": 3878,
            "percentage": 47.11,
            "percentageTokens": 56.19,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/native.yml": {
            "lines": 116,
            "tokens": 701,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 23,
            "duplicatedTokens": 110,
            "percentage": 19.83,
            "percentageTokens": 15.69,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/jekyll.yml": {
            "lines": 146,
            "tokens": 856,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/docker.yml": {
            "lines": 382,
            "tokens": 2751,
            "sources": 1,
            "clones": 3,
            "duplicatedLines": 68,
            "duplicatedTokens": 352,
            "percentage": 17.8,
            "percentageTokens": 12.8,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/code-analysis.yml": {
            "lines": 320,
            "tokens": 2110,
            "sources": 1,
            "clones": 3,
            "duplicatedLines": 64,
            "duplicatedTokens": 338,
            "percentage": 20,
            "percentageTokens": 16.02,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/android_repeatable.yml": {
            "lines": 169,
            "tokens": 1011,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 53,
            "duplicatedTokens": 309,
            "percentage": 31.36,
            "percentageTokens": 30.56,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/workflows/android.yml": {
            "lines": 80,
            "tokens": 473,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 24,
            "duplicatedTokens": 115,
            "percentage": 30,
            "percentageTokens": 24.31,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/codeql/codeql-config.yml": {
            "lines": 25,
            "tokens": 53,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/_config.yml": {
            "lines": 36,
            "tokens": 196,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/registry.yaml": {
            "lines": 3,
            "tokens": 18,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "deploy/docker-compose.yml": {
            "lines": 168,
            "tokens": 1061,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/macports.yml": {
            "lines": 3,
            "tokens": 17,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".github/dependabot.yml": {
            "lines": 87,
            "tokens": 342,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "codecov.yml": {
            "lines": 61,
            "tokens": 289,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          ".bettercodehub.yml": {
            "lines": 27,
            "tokens": 126,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 3265,
          "tokens": 21510,
          "sources": 25,
          "clones": 15,
          "duplicatedLines": 351,
          "duplicatedTokens": 2694,
          "percentage": 10.75,
          "percentageTokens": 12.52,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "bash": {
        "sources": {
          "scripts/test/utils/utils.sh": {
            "lines": 110,
            "tokens": 473,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 11,
            "duplicatedTokens": 79,
            "percentage": 10,
            "percentageTokens": 16.7,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/test/docker/dockerfile.sh": {
            "lines": 150,
            "tokens": 814,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/test/helper_functions.sh": {
            "lines": 604,
            "tokens": 4181,
            "sources": 1,
            "clones": 7,
            "duplicatedLines": 117,
            "duplicatedTokens": 839,
            "percentage": 19.37,
            "percentageTokens": 20.07,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/plot/plot.sh": {
            "lines": 105,
            "tokens": 635,
            "sources": 1,
            "clones": 3,
            "duplicatedLines": 27,
            "duplicatedTokens": 229,
            "percentage": 25.71,
            "percentageTokens": 36.06,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/run_tests_android.sh": {
            "lines": 705,
            "tokens": 5171,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/run_tests.sh": {
            "lines": 121,
            "tokens": 500,
            "sources": 1,
            "clones": 3,
            "duplicatedLines": 131,
            "duplicatedTokens": 373,
            "percentage": 108.26,
            "percentageTokens": 74.6,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/profile.sh": {
            "lines": 511,
            "tokens": 3382,
            "sources": 1,
            "clones": 7,
            "duplicatedLines": 109,
            "duplicatedTokens": 797,
            "percentage": 21.33,
            "percentageTokens": 23.57,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/install_dependencies.sh": {
            "lines": 547,
            "tokens": 4314,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 42,
            "duplicatedTokens": 120,
            "percentage": 7.68,
            "percentageTokens": 2.78,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/helper_functions.sh": {
            "lines": 533,
            "tokens": 3870,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/docker.sh": {
            "lines": 321,
            "tokens": 2085,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/compile_native.sh": {
            "lines": 353,
            "tokens": 2330,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/compile_android.sh": {
            "lines": 185,
            "tokens": 1015,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 45,
            "duplicatedTokens": 129,
            "percentage": 24.32,
            "percentageTokens": 12.71,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "scripts/check_android.sh": {
            "lines": 120,
            "tokens": 475,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 44,
            "duplicatedTokens": 124,
            "percentage": 36.67,
            "percentageTokens": 26.11,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 4365,
          "tokens": 29245,
          "sources": 13,
          "clones": 12,
          "duplicatedLines": 263,
          "duplicatedTokens": 1345,
          "percentage": 6.03,
          "percentageTokens": 4.6,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "markdown": {
        "sources": {
          "deploy/mobilert-chart/templates/NOTES.txt": {
            "lines": 21,
            "tokens": 207,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/engine/README.md": {
            "lines": 2,
            "tokens": 41,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Unit_Testing/CMakeLists.txt": {
            "lines": 102,
            "tokens": 605,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 23,
            "duplicatedTokens": 92,
            "percentage": 22.55,
            "percentageTokens": 15.21,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/CMakeLists.txt": {
            "lines": 21,
            "tokens": 175,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/CMakeLists.txt": {
            "lines": 70,
            "tokens": 438,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/CMakeLists.txt": {
            "lines": 56,
            "tokens": 329,
            "sources": 1,
            "clones": 1,
            "duplicatedLines": 23,
            "duplicatedTokens": 92,
            "percentage": 41.07,
            "percentageTokens": 27.96,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/TOOLS.md": {
            "lines": 86,
            "tokens": 668,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/SECURITY.md": {
            "lines": 13,
            "tokens": 155,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/README.md": {
            "lines": 281,
            "tokens": 2173,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/FEATURES.md": {
            "lines": 214,
            "tokens": 2447,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/CODE_OF_CONDUCT.md": {
            "lines": 71,
            "tokens": 909,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/BUILD_DOCS.md": {
            "lines": 13,
            "tokens": 96,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/BLENDER.md": {
            "lines": 74,
            "tokens": 651,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/CMakeLists.txt": {
            "lines": 635,
            "tokens": 4257,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "LICENSE.md": {
            "lines": 660,
            "tokens": 9804,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 2319,
          "tokens": 22955,
          "sources": 15,
          "clones": 1,
          "duplicatedLines": 23,
          "duplicatedTokens": 92,
          "percentage": 0.99,
          "percentageTokens": 0.4,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "cpp-header": {
        "sources": {
          "app/System_dependent/Native/Utils_dependent.hpp": {
            "lines": 10,
            "tokens": 81,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Android_JNI/Utils_dependent.hpp": {
            "lines": 26,
            "tokens": 257,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/System_dependent/Android_JNI/JNI_layer.hpp": {
            "lines": 134,
            "tokens": 593,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Utils/Utils.hpp": {
            "lines": 358,
            "tokens": 2175,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Utils/ErrorCode.hpp": {
            "lines": 19,
            "tokens": 61,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Utils/Constants.hpp": {
            "lines": 77,
            "tokens": 195,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Triangle.hpp": {
            "lines": 110,
            "tokens": 902,
            "sources": 1,
            "clones": 2,
            "duplicatedLines": 22,
            "duplicatedTokens": 264,
            "percentage": 20,
            "percentageTokens": 29.27,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Sphere.hpp": {
            "lines": 36,
            "tokens": 259,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shapes/Plane.hpp": {
            "lines": 46,
            "tokens": 347,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Accelerators/RegularGrid.hpp": {
            "lines": 543,
            "tokens": 5554,
            "sources": 1,
            "clones": 4,
            "duplicatedLines": 36,
            "duplicatedTokens": 364,
            "percentage": 6.63,
            "percentageTokens": 6.55,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Accelerators/Naive.hpp": {
            "lines": 130,
            "tokens": 630,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Accelerators/BVH.hpp": {
            "lines": 462,
            "tokens": 4405,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Accelerators/AABB.hpp": {
            "lines": 45,
            "tokens": 297,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/Whitted.hpp": {
            "lines": 28,
            "tokens": 213,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/PathTracer.hpp": {
            "lines": 32,
            "tokens": 252,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/NoShadows.hpp": {
            "lines": 28,
            "tokens": 212,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/DiffuseMaterial.hpp": {
            "lines": 25,
            "tokens": 201,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Shaders/DepthMap.hpp": {
            "lines": 29,
            "tokens": 229,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/Stratified.hpp": {
            "lines": 27,
            "tokens": 190,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticPCG.hpp": {
            "lines": 23,
            "tokens": 155,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticMersenneTwister.hpp": {
            "lines": 23,
            "tokens": 155,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/StaticHaltonSeq.hpp": {
            "lines": 25,
            "tokens": 186,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/PCG.hpp": {
            "lines": 25,
            "tokens": 159,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/MersenneTwister.hpp": {
            "lines": 23,
            "tokens": 159,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/HaltonSeq.hpp": {
            "lines": 25,
            "tokens": 190,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Samplers/Constant.hpp": {
            "lines": 28,
            "tokens": 188,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/PerspectiveLoader.hpp": {
            "lines": 12,
            "tokens": 75,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/OBJLoader.hpp": {
            "lines": 78,
            "tokens": 783,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Loaders/CameraFactory.hpp": {
            "lines": 11,
            "tokens": 60,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Lights/PointLight.hpp": {
            "lines": 32,
            "tokens": 234,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Lights/AreaLight.hpp": {
            "lines": 39,
            "tokens": 267,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Cameras/Perspective.hpp": {
            "lines": 42,
            "tokens": 292,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Components/Cameras/Orthographic.hpp": {
            "lines": 45,
            "tokens": 291,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/Scenes/Scenes.hpp": {
            "lines": 16,
            "tokens": 148,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Texture.hpp": {
            "lines": 47,
            "tokens": 347,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Shader.hpp": {
            "lines": 91,
            "tokens": 637,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Scene.hpp": {
            "lines": 50,
            "tokens": 413,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Sampler.hpp": {
            "lines": 58,
            "tokens": 400,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Renderer.hpp": {
            "lines": 56,
            "tokens": 479,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Ray.hpp": {
            "lines": 68,
            "tokens": 333,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/ObjectLoader.hpp": {
            "lines": 45,
            "tokens": 245,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Material.hpp": {
            "lines": 63,
            "tokens": 353,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Light.hpp": {
            "lines": 47,
            "tokens": 213,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Intersection.hpp": {
            "lines": 48,
            "tokens": 398,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Config.hpp": {
            "lines": 79,
            "tokens": 213,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/CameraLoader.hpp": {
            "lines": 30,
            "tokens": 166,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "app/MobileRT/Camera.hpp": {
            "lines": 63,
            "tokens": 308,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 3357,
          "tokens": 24900,
          "sources": 47,
          "clones": 3,
          "duplicatedLines": 29,
          "duplicatedTokens": 314,
          "percentage": 0.86,
          "percentageTokens": 1.26,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "properties": {
        "sources": {
          "gradle/wrapper/gradle-wrapper.properties": {
            "lines": 6,
            "tokens": 26,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "sonar-project.properties": {
            "lines": 35,
            "tokens": 98,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "gradle.properties": {
            "lines": 90,
            "tokens": 219,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 131,
          "tokens": 343,
          "sources": 3,
          "clones": 0,
          "duplicatedLines": 0,
          "duplicatedTokens": 0,
          "percentage": 0,
          "percentageTokens": 0,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "css": {
        "sources": {
          "docs/README.md": {
            "lines": 0,
            "tokens": 6,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 0,
          "tokens": 6,
          "sources": 1,
          "clones": 0,
          "duplicatedLines": 0,
          "duplicatedTokens": 0,
          "percentage": 0,
          "percentageTokens": 0,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      },
      "url": {
        "sources": {
          "docs/README.md": {
            "lines": 17,
            "tokens": 61,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          },
          "docs/CODE_OF_CONDUCT.md": {
            "lines": 0,
            "tokens": 4,
            "sources": 1,
            "clones": 0,
            "duplicatedLines": 0,
            "duplicatedTokens": 0,
            "percentage": 0,
            "percentageTokens": 0,
            "newDuplicatedLines": 0,
            "newClones": 0
          }
        },
        "total": {
          "lines": 17,
          "tokens": 65,
          "sources": 2,
          "clones": 0,
          "duplicatedLines": 0,
          "duplicatedTokens": 0,
          "percentage": 0,
          "percentageTokens": 0,
          "newDuplicatedLines": 0,
          "newClones": 0
        }
      }
    },
    "total": {
      "lines": 30595,
      "tokens": 235355,
      "sources": 256,
      "clones": 121,
      "duplicatedLines": 1507,
      "duplicatedTokens": 14099,
      "percentage": 4.93,
      "percentageTokens": 5.99,
      "newDuplicatedLines": 0,
      "newClones": 0
    }
  },
  "duplicates": [
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsShader.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java",
        "start": 34,
        "end": 40,
        "startLoc": {
          "line": 34,
          "column": 12,
          "position": 213
        },
        "endLoc": {
          "line": 40,
          "column": 41,
          "position": 276
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsLogging.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsLoggingTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 13,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 42,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 14,
      "fragment": ";\n\nimport org.assertj.core.api.Assertions;\nimport org.easymock.EasyMock;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.powermock.api.easymock.PowerMock;\nimport org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;\nimport org.powermock.modules.junit4.PowerMockRunner;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\nimport java",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 3,
        "end": 16,
        "startLoc": {
          "line": 3,
          "column": 7,
          "position": 17
        },
        "endLoc": {
          "line": 16,
          "column": 5,
          "position": 139
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java",
        "start": 3,
        "end": 17,
        "startLoc": {
          "line": 3,
          "column": 7,
          "position": 17
        },
        "endLoc": {
          "line": 17,
          "column": 7,
          "position": 140
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsGlMatrices.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of ",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 52,
        "end": 58,
        "startLoc": {
          "line": 52,
          "column": 16,
          "position": 388
        },
        "endLoc": {
          "line": 58,
          "column": 46,
          "position": 451
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": ".INDEX_FOVX, 1.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_FOVY, 0.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEH, 0.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEY, 0.0f);\n        Assertions.assertThat(UtilsGlMatrices.createProjectionMatrix(camera, width, height))\n            .as(\"The projection matrix should be zero\")\n            .containsOnly(expectedEmptyArray);\n        PowerMock.verifyAll();\n\n        mockMatrixMethods(0, 0);\n        camera.putFloat(UtilsGlMatrices",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 85,
        "end": 95,
        "startLoc": {
          "line": 85,
          "column": 5,
          "position": 756
        },
        "endLoc": {
          "line": 95,
          "column": 5,
          "position": 864
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 75,
        "end": 85,
        "startLoc": {
          "line": 75,
          "column": 5,
          "position": 647
        },
        "endLoc": {
          "line": 85,
          "column": 5,
          "position": 755
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ".INDEX_FOVY, 1.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEH, 0.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEY, 0.0f);\n        Assertions.assertThat(UtilsGlMatrices.createProjectionMatrix(camera, width, height))\n            .as(\"The projection matrix should be zero\")\n            .containsOnly(expectedEmptyArray);\n        PowerMock.verifyAll();\n\n        mo",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 96,
        "end": 104,
        "startLoc": {
          "line": 96,
          "column": 5,
          "position": 879
        },
        "endLoc": {
          "line": 104,
          "column": 2,
          "position": 956
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 76,
        "end": 84,
        "startLoc": {
          "line": 76,
          "column": 5,
          "position": 661
        },
        "endLoc": {
          "line": 84,
          "column": 2,
          "position": 738
        }
      }
    },
    {
      "format": "java",
      "lines": 6,
      "fragment": ".INDEX_FOVX, 1.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_FOVY, 1.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEH, 0.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEY, 0.0f);\n        Assertions.assertThat(UtilsGlMatrices.createProjectionMatrix(camera, width, height))\n            .as(\"The projection matrix should be filled with perspecti",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 105,
        "end": 110,
        "startLoc": {
          "line": 105,
          "column": 5,
          "position": 974
        },
        "endLoc": {
          "line": 110,
          "column": 72,
          "position": 1042
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 95,
        "end": 100,
        "startLoc": {
          "line": 95,
          "column": 5,
          "position": 865
        },
        "endLoc": {
          "line": 100,
          "column": 39,
          "position": 933
        }
      }
    },
    {
      "format": "java",
      "lines": 10,
      "fragment": "INDEX_SIZEH, 1.0f);\n        camera.putFloat(UtilsGlMatrices.INDEX_SIZEY, 0.0f);\n        Assertions.assertThat(UtilsGlMatrices.createProjectionMatrix(camera, width, height))\n            .as(\"The projection matrix should be zero\")\n            .containsOnly(expectedEmptyArray);\n        PowerMock.verifyAll();\n\n        mockMatrixMethods(0, 0);\n        camera.putFloat(UtilsGlMatrices.INDEX_FOVX, 0.0f);\n        camera.putFloat(UtilsGlMatrices",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 117,
        "end": 126,
        "startLoc": {
          "line": 117,
          "column": 5,
          "position": 1111
        },
        "endLoc": {
          "line": 126,
          "column": 5,
          "position": 1205
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGlMatricesTest.java",
        "start": 77,
        "end": 96,
        "startLoc": {
          "line": 77,
          "column": 5,
          "position": 675
        },
        "endLoc": {
          "line": 96,
          "column": 5,
          "position": 878
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": ";\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.powermock.api.easymock.PowerMock;\nimport org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;\nimport org.powermock.modules.junit4.PowerMockRunner;\nimport org",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGLTest.java",
        "start": 8,
        "end": 14,
        "startLoc": {
          "line": 8,
          "column": 9,
          "position": 58
        },
        "endLoc": {
          "line": 14,
          "column": 4,
          "position": 123
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java",
        "start": 6,
        "end": 13,
        "startLoc": {
          "line": 6,
          "column": 9,
          "position": 40
        },
        "endLoc": {
          "line": 13,
          "column": 5,
          "position": 106
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsGL.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsGLTest.java",
        "start": 41,
        "end": 47,
        "startLoc": {
          "line": 41,
          "column": 8,
          "position": 293
        },
        "endLoc": {
          "line": 47,
          "column": 37,
          "position": 356
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.utils;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link UtilsContext} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsContextTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsLoggingTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsContext.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsContextTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 13,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 42,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.utils;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link UtilsBuffer} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsBufferTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsLoggingTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= UtilsBuffer.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsBufferTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 12,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 41,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= ConstantsUI.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 12,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 41,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.constants;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link ConstantsToast} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsToastTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= ConstantsToast.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsToastTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 15,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 44,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.constants;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link Constants} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= Constants.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 10,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 39,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.constants;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link ConstantsRenderer} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsRendererTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= ConstantsRenderer.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsRendererTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 18,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 47,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.constants;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link ConstantsMethods} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsMethodsTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= ConstantsMethods.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsMethodsTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 17,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 46,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "package puscas.mobilertapp.constants;\n\nimport org.assertj.core.api.Assertions;\nimport org.junit.Test;\n\nimport java.lang.reflect.Constructor;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Modifier;\n\n/**\n * The unit tests for the {@link ConstantsError} util class.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsErrorTest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsUITest.java",
        "start": 1,
        "end": 12,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 12,
          "column": 4,
          "position": 67
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": "= ConstantsError.class.getDeclaredConstructor();\n        Assertions.assertThat(Modifier.isPrivate(constructor.getModifiers()))\n            .as(\"The constructor is private\")\n            .isTrue();\n        constructor.setAccessible(true);\n        Assertions.assertThatThrownBy(constructor::newInstance)\n            .as(\"The default constructor of",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/constants/ConstantsErrorTest.java",
        "start": 22,
        "end": 28,
        "startLoc": {
          "line": 22,
          "column": 15,
          "position": 111
        },
        "endLoc": {
          "line": 28,
          "column": 44,
          "position": 174
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsTest.java",
        "start": 35,
        "end": 41,
        "startLoc": {
          "line": 35,
          "column": 6,
          "position": 222
        },
        "endLoc": {
          "line": 41,
          "column": 35,
          "position": 285
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ".class);\n\n        EasyMock.replay(viewMocked);\n        Assertions.assertThatCode(() -> this.targetCustomNumberPicker.addView(viewMocked, EasyMock.mock(ViewGroup.LayoutParams.class)))\n                .as(\"ViewManager#addView shouldn't throw any exception.\")\n                .doesNotThrowAnyException();\n    }\n\n}",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/configs/CustomNumberPickerTest.java",
        "start": 66,
        "end": 74,
        "startLoc": {
          "line": 66,
          "column": 12,
          "position": 417
        },
        "endLoc": {
          "line": 74,
          "column": 2,
          "position": 483
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/configs/CustomNumberPickerTest.java",
        "start": 49,
        "end": 63,
        "startLoc": {
          "line": 49,
          "column": 9,
          "position": 320
        },
        "endLoc": {
          "line": 63,
          "column": 8,
          "position": 387
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "() {\n        final ConfigGlAttribute.Builder builder = ConfigGlAttribute.Builder.Companion.create();\n        final String attributeName = \"test name\";\n        final ByteBuffer byteBuffer = ByteBuffer.allocate(1);\n        final int attributeLocation = 123;\n        final int attributeComponentsInBuffer = 456;\n        builder.setAttributeName(attributeName);\n        builder.setBuffer(byteBuffer);\n        builder.setAttributeLocation(attributeLocation);\n        builder.setComponentsInBuffer(attributeComponentsInBuffer);\n\n        Assertions",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/configs/ConfigGlAttributeTest.java",
        "start": 104,
        "end": 115,
        "startLoc": {
          "line": 104,
          "column": 12,
          "position": 730
        },
        "endLoc": {
          "line": 115,
          "column": 11,
          "position": 848
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/configs/ConfigGlAttributeTest.java",
        "start": 30,
        "end": 40,
        "startLoc": {
          "line": 30,
          "column": 27,
          "position": 147
        },
        "endLoc": {
          "line": 40,
          "column": 6,
          "position": 264
        }
      }
    },
    {
      "format": "java",
      "lines": 16,
      "fragment": "package puscas.mobilertapp.engine;\n\nimport org.junit.Test;\n\nimport java.util.concurrent.TimeoutException;\n\nimport puscas.mobilertapp.AbstractTest;\nimport puscas.mobilertapp.ConstantsAndroidTests;\nimport puscas.mobilertapp.MainActivity;\nimport puscas.mobilertapp.constants.Accelerator;\nimport puscas.mobilertapp.constants.Scene;\nimport puscas.mobilertapp.constants.Shader;\n\n/**\n * The test suite for the {@link Accelerator}s used in {@link MainActivity}.\n */",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/engine/AcceleratorTest.java",
        "start": 1,
        "end": 16,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 16,
          "column": 4,
          "position": 93
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/engine/ShaderTest.java",
        "start": 1,
        "end": 16,
        "startLoc": {
          "line": 1,
          "column": 1,
          "position": 0
        },
        "endLoc": {
          "line": 16,
          "column": 4,
          "position": 93
        }
      }
    },
    {
      "format": "java",
      "lines": 13,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final Context context = new MainActivity();\n        final DrawView drawView = new DrawView(context);\n\n        final GLSurfaceView.EGLContextFactory myEGLContextFactory = new MyEglContextFactory(drawView);\n        final EGL10 egl = createEGL();\n\n        // Values to be returned by the EGL10 mocked.\n        eglContextDestroy = false;\n        eglErrorReturnedByMock = EGL10.EGL_NONE",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 269,
        "end": 281,
        "startLoc": {
          "line": 269,
          "column": 33,
          "position": 1848
        },
        "endLoc": {
          "line": 281,
          "column": 9,
          "position": 1978
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 242,
        "end": 254,
        "startLoc": {
          "line": 242,
          "column": 25,
          "position": 1645
        },
        "endLoc": {
          "line": 254,
          "column": 12,
          "position": 1775
        }
      }
    },
    {
      "format": "java",
      "lines": 14,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final Context context = new MainActivity();\n        final DrawView drawView = new DrawView(context);\n\n        final GLSurfaceView.EGLContextFactory myEGLContextFactory = new MyEglContextFactory(drawView);\n        final EGL10 egl = createEGL();\n\n        // Values to be returned by the EGL10 mocked.\n        eglContextDestroy = false;\n        eglErrorReturnedByMock = EGL10.EGL_SUCCESS;\n        eglContextReturnedByMock = EasyMock",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 294,
        "end": 307,
        "startLoc": {
          "line": 294,
          "column": 18,
          "position": 2048
        },
        "endLoc": {
          "line": 307,
          "column": 9,
          "position": 2186
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 242,
        "end": 255,
        "startLoc": {
          "line": 242,
          "column": 25,
          "position": 1645
        },
        "endLoc": {
          "line": 255,
          "column": 5,
          "position": 1783
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final Context context = new MainActivity();\n        final DrawView drawView = new DrawView(context);\n\n        final GLSurfaceView.EGLContextFactory myEGLContextFactory = new MyEglContextFactory(drawView);\n        final EGL10 egl = createEGL();\n\n        // Values to be returned by the EGL10 mocked.\n        // Mock the 1st EGLContext.",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 320,
        "end": 331,
        "startLoc": {
          "line": 320,
          "column": 21,
          "position": 2258
        },
        "endLoc": {
          "line": 331,
          "column": 28,
          "position": 2374
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 242,
        "end": 253,
        "startLoc": {
          "line": 242,
          "column": 25,
          "position": 1645
        },
        "endLoc": {
          "line": 253,
          "column": 18,
          "position": 1761
        }
      }
    },
    {
      "format": "java",
      "lines": 10,
      "fragment": "eglContextDestroy = false;\n        eglErrorReturnedByMock = EGL10.EGL_SUCCESS;\n        eglContextReturnedByMock = EasyMock.mock(EGLContext.class);\n\n        final EGLContext eglContext = myEGLContextFactory.createContext(egl, null, null);\n        Assertions.assertThat(eglContext)\n            .as(\"The EGL context created\")\n            .isNotNull();\n\n        // Mock the 2nd EGLContext.",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 332,
        "end": 341,
        "startLoc": {
          "line": 332,
          "column": 9,
          "position": 2377
        },
        "endLoc": {
          "line": 341,
          "column": 28,
          "position": 2457
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 305,
        "end": 313,
        "startLoc": {
          "line": 305,
          "column": 9,
          "position": 2164
        },
        "endLoc": {
          "line": 313,
          "column": 2,
          "position": 2243
        }
      }
    },
    {
      "format": "java",
      "lines": 20,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final Context context = new MainActivity();\n        final DrawView drawView = new DrawView(context);\n\n        final GLSurfaceView.EGLContextFactory myEGLContextFactory = new MyEglContextFactory(drawView);\n        final EGL10 egl = createEGL();\n\n        // Values to be returned by the EGL10 mocked.\n        eglContextDestroy = false;\n        eglErrorReturnedByMock = EGL10.EGL_SUCCESS;\n        eglContextReturnedByMock = EasyMock.mock(EGLContext.class);\n\n        final EGLContext eglContext = myEGLContextFactory.createContext(egl, null, null);\n        Assertions.assertThat(eglContext)\n            .as(\"The EGL context created\")\n            .isNotNull();\n        Assertions",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 359,
        "end": 378,
        "startLoc": {
          "line": 359,
          "column": 26,
          "position": 2561
        },
        "endLoc": {
          "line": 378,
          "column": 11,
          "position": 2756
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 242,
        "end": 313,
        "startLoc": {
          "line": 242,
          "column": 25,
          "position": 1645
        },
        "endLoc": {
          "line": 313,
          "column": 2,
          "position": 2243
        }
      }
    },
    {
      "format": "java",
      "lines": 14,
      "fragment": ");\n        final EGL10 egl = createEGL();\n\n        // Values to be returned by the EGL10 mocked.\n        eglContextDestroy = false;\n        eglErrorReturnedByMock = EGL10.EGL_SUCCESS;\n        eglContextReturnedByMock = EasyMock.mock(EGLContext.class);\n\n        final EGLContext eglContext = myEGLContextFactory.createContext(egl, null, null);\n        Assertions.assertThat(eglContext)\n            .as(\"The EGL context created\")\n            .isNotNull();\n\n        final",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 395,
        "end": 408,
        "startLoc": {
          "line": 395,
          "column": 15,
          "position": 2899
        },
        "endLoc": {
          "line": 408,
          "column": 6,
          "position": 3001
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 301,
        "end": 313,
        "startLoc": {
          "line": 301,
          "column": 9,
          "position": 2142
        },
        "endLoc": {
          "line": 313,
          "column": 2,
          "position": 2243
        }
      }
    },
    {
      "format": "java",
      "lines": 8,
      "fragment": ";\n\nimport org.assertj.core.api.Assertions;\nimport org.easymock.EasyMock;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.powermock.api.easymock.PowerMock;\nimport org.powermock.api",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 9,
        "end": 16,
        "startLoc": {
          "line": 9,
          "column": 8,
          "position": 59
        },
        "endLoc": {
          "line": 16,
          "column": 4,
          "position": 123
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java",
        "start": 3,
        "end": 10,
        "startLoc": {
          "line": 3,
          "column": 7,
          "position": 17
        },
        "endLoc": {
          "line": 10,
          "column": 5,
          "position": 81
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": ";\nimport org.powermock.api.support.membermodification.MemberModifier;\nimport org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;\nimport org.powermock.modules.junit4.PowerMockRunner;\nimport org.springframework.test.util.ReflectionTestUtils;\n\nimport java",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 15,
        "end": 21,
        "startLoc": {
          "line": 15,
          "column": 10,
          "position": 115
        },
        "endLoc": {
          "line": 21,
          "column": 5,
          "position": 176
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 13,
        "end": 19,
        "startLoc": {
          "line": 13,
          "column": 8,
          "position": 97
        },
        "endLoc": {
          "line": 19,
          "column": 6,
          "position": 158
        }
      }
    },
    {
      "format": "java",
      "lines": 14,
      "fragment": "() {\n        final MainRenderer mainRenderer = createMockedMainRenderer();\n\n        final ActivityManager activityManagerMocked = EasyMock.mock(ActivityManager.class);\n        final ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();\n        ReflectionTestUtils.setField(memoryInfo, \"availMem\", 100L * BYTES_IN_MEGABYTE);\n        ReflectionTestUtils.setField(mainRenderer, \"memoryInfo\", memoryInfo);\n\n        final int initialValue = 1;\n        final CountDownLatch countDownLatch = new CountDownLatch(initialValue);\n        final Runnable runnable = countDownLatch::countDown;\n\n        mainRenderer.setActivityManager(activityManagerMocked);\n        Assertions.assertThatThrownBy",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 107,
        "end": 120,
        "startLoc": {
          "line": 107,
          "column": 25,
          "position": 885
        },
        "endLoc": {
          "line": 120,
          "column": 19,
          "position": 1037
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 45,
        "end": 58,
        "startLoc": {
          "line": 45,
          "column": 21,
          "position": 334
        },
        "endLoc": {
          "line": 58,
          "column": 15,
          "position": 486
        }
      }
    },
    {
      "format": "java",
      "lines": 12,
      "fragment": ");\n\n        Assertions.assertThatThrownBy(MainRenderer::new)\n            .as(\"The MainRenderer#setBitmap method\")\n            .isInstanceOf(IllegalArgumentException.class);\n\n        EasyMock.reset(bitmapMocked);\n        EasyMock.expect(bitmapMocked.isRecycled())\n            .andReturn(false)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getWidth())\n            .andReturn(1",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 183,
        "end": 194,
        "startLoc": {
          "line": 183,
          "column": 13,
          "position": 1522
        },
        "endLoc": {
          "line": 194,
          "column": 2,
          "position": 1606
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 167,
        "end": 178,
        "startLoc": {
          "line": 167,
          "column": 2,
          "position": 1396
        },
        "endLoc": {
          "line": 178,
          "column": 2,
          "position": 1480
        }
      }
    },
    {
      "format": "java",
      "lines": 17,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"showUiMessage\"));\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetRenderButton\"));\n\n        final MainRenderer mainRenderer = createMockedMainRenderer();\n\n        final ActivityManager activityManagerMocked = PowerMock.createMock(ActivityManager.class);\n        activityManagerMocked.getMemoryInfo(EasyMock.anyObject(ActivityManager.MemoryInfo.class));\n        EasyMock.expectLastCall().andVoid().anyTimes();\n        mainRenderer.setActivityManager(activityManagerMocked);\n\n        final ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();\n        ReflectionTestUtils.setField(memoryInfo, \"availMem\", 100L * BYTES_IN_MEGABYTE);\n        ReflectionTestUtils.setField(mainRenderer, \"memoryInfo\", memoryInfo);\n\n\n        final",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 328,
        "end": 344,
        "startLoc": {
          "line": 328,
          "column": 39,
          "position": 2703
        },
        "endLoc": {
          "line": 344,
          "column": 6,
          "position": 2883
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 297,
        "end": 312,
        "startLoc": {
          "line": 297,
          "column": 33,
          "position": 2442
        },
        "endLoc": {
          "line": 312,
          "column": 11,
          "position": 2621
        }
      }
    },
    {
      "format": "java",
      "lines": 13,
      "fragment": "EasyMock.reset(bitmapMocked);\n        EasyMock.expect(bitmapMocked.isRecycled())\n            .andReturn(false)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getWidth())\n            .andReturn(2)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getHeight())\n            .andReturn(1)\n            .anyTimes();\n\n        EasyMock.replay(bitmapMocked);\n        Assertions.assertThatThrownBy((",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 357,
        "end": 369,
        "startLoc": {
          "line": 357,
          "column": 9,
          "position": 3043
        },
        "endLoc": {
          "line": 369,
          "column": 2,
          "position": 3144
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 173,
        "end": 185,
        "startLoc": {
          "line": 173,
          "column": 9,
          "position": 1430
        },
        "endLoc": {
          "line": 185,
          "column": 13,
          "position": 1531
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": "EasyMock.reset(bitmapMocked);\n        EasyMock.expect(bitmapMocked.isRecycled())\n            .andReturn(false)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getWidth())\n            .andReturn(2)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getHeight())\n            .andReturn(2",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 377,
        "end": 385,
        "startLoc": {
          "line": 377,
          "column": 9,
          "position": 3212
        },
        "endLoc": {
          "line": 385,
          "column": 2,
          "position": 3288
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 173,
        "end": 181,
        "startLoc": {
          "line": 173,
          "column": 9,
          "position": 1430
        },
        "endLoc": {
          "line": 181,
          "column": 2,
          "position": 1506
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": ")\n            .anyTimes();\n\n        EasyMock.replay(bitmapMocked);\n        Assertions.assertThatThrownBy(() -> mainRenderer.copyGlFrameBufferToBitmap(\n            ConfigResolution.Builder.Companion.create().build(),\n            ConfigResolution.Builder.Companion.create().build()\n        ))\n        .as(\"The call to MainRenderer#copyGlFrameBufferToBitmap method\")\n        .isInstanceOf(IllegalArgumentException.class);\n    }",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 385,
        "end": 395,
        "startLoc": {
          "line": 385,
          "column": 2,
          "position": 3289
        },
        "endLoc": {
          "line": 395,
          "column": 2,
          "position": 3377
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 365,
        "end": 376,
        "startLoc": {
          "line": 365,
          "column": 2,
          "position": 3120
        },
        "endLoc": {
          "line": 376,
          "column": 26,
          "position": 3209
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ");\n        EasyMock.expect(bitmapMocked.isRecycled())\n            .andReturn(false)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getWidth())\n            .andReturn(1)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getHeight())\n            .andReturn(1",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 405,
        "end": 413,
        "startLoc": {
          "line": 405,
          "column": 6,
          "position": 3421
        },
        "endLoc": {
          "line": 413,
          "column": 2,
          "position": 3492
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 189,
        "end": 197,
        "startLoc": {
          "line": 189,
          "column": 13,
          "position": 1561
        },
        "endLoc": {
          "line": 197,
          "column": 2,
          "position": 1632
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": ")\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getWidth())\n            .andReturn(1)\n            .anyTimes();\n        EasyMock.expect(bitmapMocked.getHeight())\n            .andReturn(1)\n            .anyTimes();\n        EasyMock.replay(bitmapMocked);\n        PowerMock.mockStatic(Bitmap.class);\n        try",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 407,
        "end": 417,
        "startLoc": {
          "line": 407,
          "column": 6,
          "position": 3441
        },
        "endLoc": {
          "line": 417,
          "column": 4,
          "position": 3523
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainRendererTest.java",
        "start": 153,
        "end": 164,
        "startLoc": {
          "line": 153,
          "column": 5,
          "position": 1272
        },
        "endLoc": {
          "line": 164,
          "column": 9,
          "position": 1355
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ";\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.powermock.api.easymock.PowerMock;\nimport org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;\nimport org.powermock.modules.junit4.PowerMockRunner;\nimport org.springframework.test.util.ReflectionTestUtils;\n\nimport java.io",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 19,
        "end": 27,
        "startLoc": {
          "line": 19,
          "column": 7,
          "position": 151
        },
        "endLoc": {
          "line": 27,
          "column": 3,
          "position": 232
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/utils/UtilsShaderTest.java",
        "start": 6,
        "end": 16,
        "startLoc": {
          "line": 6,
          "column": 9,
          "position": 40
        },
        "endLoc": {
          "line": 16,
          "column": 5,
          "position": 139
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ", \"MobileRT\", \"WavefrontOBJs\", \"CornellBox\", \"CornellBox-Water.obj\"))\n            .anyTimes();\n        EasyMock.expect(uriMocked.getPath())\n            .andReturn(pathToOBJFile)\n            .anyTimes();\n        EasyMock.expect(intentMocked.getData())\n            .andReturn(uriMocked)\n            .anyTimes();\n        final",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 219,
        "end": 227,
        "startLoc": {
          "line": 219,
          "column": 9,
          "position": 1707
        },
        "endLoc": {
          "line": 227,
          "column": 6,
          "position": 1782
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 176,
        "end": 184,
        "startLoc": {
          "line": 176,
          "column": 6,
          "position": 1314
        },
        "endLoc": {
          "line": 184,
          "column": 9,
          "position": 1389
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": ")\n            .anyTimes();\n        EasyMock.replay(intentMocked, uriMocked);\n\n        PowerMock.mockStatic(UtilsContext.class);\n        EasyMock.expect(UtilsContext.getInternalStoragePath(EasyMock.anyObject(Context.class)))\n            .andReturn(pathToInternalStorage)\n            .anyTimes();\n        PowerMock.mockStatic(Environment.class);\n        EasyMock.expect(Environment.getExternalStorageDirectory())\n            .andReturn(new File(\"/mockedSDCard\"",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 229,
        "end": 239,
        "startLoc": {
          "line": 229,
          "column": 9,
          "position": 1850
        },
        "endLoc": {
          "line": 239,
          "column": 16,
          "position": 1948
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 182,
        "end": 193,
        "startLoc": {
          "line": 182,
          "column": 10,
          "position": 1379
        },
        "endLoc": {
          "line": 193,
          "column": 3,
          "position": 1478
        }
      }
    },
    {
      "format": "java",
      "lines": 16,
      "fragment": "))\n            .anyTimes();\n        PowerMock.replayAll();\n\n        Assertions.assertThat((String) ReflectionTestUtils.getField(this.targetMainActivityMocked, \"sceneFilePath\"))\n            .as(\"The 'MainActivity#sceneFilePath' field\")\n            .isNull();\n\n        final int openFileRequestCode = (int) Objects.requireNonNull(ReflectionTestUtils.getField(MainActivity.class, \"OPEN_FILE_REQUEST_CODE\"));\n        this.targetMainActivityMocked.onActivityResult(openFileRequestCode, Activity.RESULT_OK, intentMocked);\n\n        Assertions.assertThat((String) ReflectionTestUtils.getField(this.targetMainActivityMocked, \"sceneFilePath\"))\n            .as(\"The 'MainActivity#sceneFilePath' field\")\n            .isEqualTo(pathToOBJFile);\n    }\n}",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 239,
        "end": 254,
        "startLoc": {
          "line": 239,
          "column": 16,
          "position": 1949
        },
        "endLoc": {
          "line": 254,
          "column": 2,
          "position": 2096
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MainActivityTest.java",
        "start": 193,
        "end": 212,
        "startLoc": {
          "line": 193,
          "column": 3,
          "position": 1479
        },
        "endLoc": {
          "line": 212,
          "column": 8,
          "position": 1628
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ";\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.powermock.api.support.membermodification.MemberModifier;\nimport org.powermock.core.classloader.annotations.PrepareOnlyThisForTest;\nimport org.powermock.modules.junit4.PowerMockRunner;\nimport org.springframework.test.util.ReflectionTestUtils;\n\nimport java.util",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 17,
        "end": 25,
        "startLoc": {
          "line": 17,
          "column": 9,
          "position": 139
        },
        "endLoc": {
          "line": 25,
          "column": 5,
          "position": 222
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/MyEglContextFactoryTest.java",
        "start": 11,
        "end": 21,
        "startLoc": {
          "line": 11,
          "column": 9,
          "position": 77
        },
        "endLoc": {
          "line": 21,
          "column": 4,
          "position": 178
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": "() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final DrawView drawViewMocked = EasyMock.partialMockBuilder(DrawView.class)\n            .withConstructor(Context.class)\n            .withArgs(new MainActivity())\n            .addMockedMethod(\"getContext\")\n            .createMock();\n\n        final TextView",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 120,
        "end": 130,
        "startLoc": {
          "line": 120,
          "column": 30,
          "position": 922
        },
        "endLoc": {
          "line": 130,
          "column": 9,
          "position": 1022
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 89,
        "end": 99,
        "startLoc": {
          "line": 89,
          "column": 23,
          "position": 666
        },
        "endLoc": {
          "line": 99,
          "column": 15,
          "position": 766
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": " TimeoutException {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final DrawView drawViewMocked = EasyMock.partialMockBuilder(DrawView.class)\n            .withConstructor(Context.class)\n            .withArgs(new MainActivity())\n            .addMockedMethod(\"getContext\")\n            .createMock();\n\n  ",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 232,
        "end": 242,
        "startLoc": {
          "line": 232,
          "column": 2,
          "position": 1942
        },
        "endLoc": {
          "line": 242,
          "column": 7,
          "position": 2039
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 89,
        "end": 99,
        "startLoc": {
          "line": 89,
          "column": 2,
          "position": 669
        },
        "endLoc": {
          "line": 99,
          "column": 15,
          "position": 766
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": "id testOnWindowFocusChanged() {\n        MemberModifier.suppress(MemberModifier.method(MainActivity.class, \"resetErrno\"));\n        MemberModifier.suppress(MemberModifier.method(MainRenderer.class, \"setBitmap\"));\n\n        final DrawView drawViewMocked = EasyMock.partialMockBuilder(DrawView.class)\n            .withConstructor(Context.class)\n            .withArgs(new MainActivity())\n            .addMockedMethod(\"getContext\")\n ",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 261,
        "end": 269,
        "startLoc": {
          "line": 261,
          "column": 25,
          "position": 2168
        },
        "endLoc": {
          "line": 269,
          "column": 16,
          "position": 2259
        }
      },
      "secondFile": {
        "name": "app/src/test/java/puscas/mobilertapp/DrawViewTest.java",
        "start": 89,
        "end": 97,
        "startLoc": {
          "line": 89,
          "column": 23,
          "position": 666
        },
        "endLoc": {
          "line": 97,
          "column": 11,
          "position": 757
        }
      }
    },
    {
      "format": "java",
      "lines": 10,
      "fragment": ";\n\nimport java.util.logging.Logger;\n\nimport javax.microedition.khronos.egl.EGL10;\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.egl.EGLContext;\nimport javax.microedition.khronos.egl.EGLDisplay;\n\nimport java8.util.Objects",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/main/java/puscas/mobilertapp/MyEglContextFactory.java",
        "start": 7,
        "end": 16,
        "startLoc": {
          "line": 7,
          "column": 9,
          "position": 43
        },
        "endLoc": {
          "line": 16,
          "column": 8,
          "position": 117
        }
      },
      "secondFile": {
        "name": "app/src/main/java/puscas/mobilertapp/utils/UtilsGL.java",
        "start": 6,
        "end": 15,
        "startLoc": {
          "line": 6,
          "column": 8,
          "position": 36
        },
        "endLoc": {
          "line": 15,
          "column": 9,
          "position": 110
        }
      }
    },
    {
      "format": "java",
      "lines": 15,
      "fragment": "teBuffer(this.verticesTexture);\n        this.floatBufferTexture = UtilsBuffer.allocateBuffer(this.texCoords);\n\n        // Bind Attributes\n        final ConfigGlAttribute.Builder builderVerticesAttribute = ConfigGlAttribute.Builder.Companion.create();\n        builderVerticesAttribute.setAttributeName(VERTEX_POSITION);\n        builderVerticesAttribute.setBuffer(this.floatBufferVertices);\n        builderVerticesAttribute.setAttributeLocation(0);\n        builderVerticesAttribute.setComponentsInBuffer(VERTEX_COMPONENTS);\n        UtilsShader.connectOpenGlAttribute(this.shaderProgram, builderVerticesAttribute.build());\n\n        final ConfigGlAttribute.Builder builderTextureAttribute = ConfigGlAttribute.Builder.Companion.create();\n        builderTextureAttribute.setAttributeName(VERTEX_TEX_COORD);\n        builderTextureAttribute.setBuffer(this.floatBufferTexture);\n        builderTextureAttribute.setAttributeLocation(1);\n        builderTextureAttribute.setCompone",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/main/java/puscas/mobilertapp/MainRenderer.java",
        "start": 907,
        "end": 921,
        "startLoc": {
          "line": 907,
          "column": 9,
          "position": 5589
        },
        "endLoc": {
          "line": 921,
          "column": 8,
          "position": 5747
        }
      },
      "secondFile": {
        "name": "app/src/main/java/puscas/mobilertapp/MainRenderer.java",
        "start": 845,
        "end": 859,
        "startLoc": {
          "line": 845,
          "column": 9,
          "position": 5015
        },
        "endLoc": {
          "line": 859,
          "column": 6,
          "position": 5173
        }
      }
    },
    {
      "format": "java",
      "lines": 6,
      "fragment": "Millis);\n                if (this.viewId == R.id.preview) {\n                    final CheckBox checkbox = view.findViewById(this.viewId);\n                    value = checkbox.isChecked();\n                }\n            } while (this.expectedValue != null && !Objects.equals(value, this.expectedVal",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/ViewActionWait.java",
        "start": 92,
        "end": 97,
        "startLoc": {
          "line": 92,
          "column": 12,
          "position": 584
        },
        "endLoc": {
          "line": 97,
          "column": 3,
          "position": 669
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/ViewActionWait.java",
        "start": 83,
        "end": 88,
        "startLoc": {
          "line": 83,
          "column": 2,
          "position": 455
        },
        "endLoc": {
          "line": 88,
          "column": 2,
          "position": 539
        }
      }
    },
    {
      "format": "java",
      "lines": 11,
      "fragment": ");\n\n        ViewActionWait.waitForButtonUpdate(0);\n        Espresso.onView(ViewMatchers.withId(R.id.preview))\n            .inRoot(RootMatchers.isTouchable())\n            .check((view, exception) -> {\n                UtilsT.rethrowException(exception);\n                UiTest.assertPreviewCheckBox(view, true);\n            });\n        ViewActionWait.waitForButtonUpdate(0);\n        UtilsContextT.resetPickerValues(Scene.SPHERES",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/PreviewTest.java",
        "start": 77,
        "end": 87,
        "startLoc": {
          "line": 77,
          "column": 43,
          "position": 542
        },
        "endLoc": {
          "line": 87,
          "column": 8,
          "position": 641
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/PreviewTest.java",
        "start": 42,
        "end": 52,
        "startLoc": {
          "line": 42,
          "column": 42,
          "position": 260
        },
        "endLoc": {
          "line": 52,
          "column": 8,
          "position": 359
        }
      }
    },
    {
      "format": "java",
      "lines": 6,
      "fragment": ");\n        Espresso.onView(ViewMatchers.withId(R.id.drawLayout))\n            .inRoot(RootMatchers.isTouchable())\n            .perform(new ViewActionWait<>(0, R.id.drawLayout))\n            .check((view, exception) -> {\n                UtilsT",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/PreviewTest.java",
        "start": 92,
        "end": 97,
        "startLoc": {
          "line": 92,
          "column": 5,
          "position": 713
        },
        "endLoc": {
          "line": 97,
          "column": 7,
          "position": 782
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/utils/UtilsT.java",
        "start": 160,
        "end": 165,
        "startLoc": {
          "line": 160,
          "column": 2,
          "position": 1041
        },
        "endLoc": {
          "line": 165,
          "column": 17,
          "position": 1110
        }
      }
    },
    {
      "format": "java",
      "lines": 14,
      "fragment": ");\n        Espresso.onView(ViewMatchers.withId(R.id.drawLayout))\n            .inRoot(RootMatchers.isTouchable())\n            .perform(new ViewActionWait<>(0, R.id.drawLayout))\n            .check((view, exception) -> {\n                UtilsT.rethrowException(exception);\n                // TODO: Fix bitmap losing rendered pixels.\n                final DrawView drawView = (DrawView) view;\n                final MainRenderer renderer = drawView.getRenderer();\n                final Bitmap bitmap = UtilsT.getPrivateField(renderer, \"bitmap\");\n                UtilsT.assertRayTracingResultInBitmap(bitmap, false);\n            });\n        ViewActionWait.waitForButtonUpdate(0);\n        UtilsContextT",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/PreviewTest.java",
        "start": 106,
        "end": 119,
        "startLoc": {
          "line": 106,
          "column": 2,
          "position": 877
        },
        "endLoc": {
          "line": 119,
          "column": 14,
          "position": 1036
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/utils/UtilsT.java",
        "start": 160,
        "end": 106,
        "startLoc": {
          "line": 160,
          "column": 2,
          "position": 1041
        },
        "endLoc": {
          "line": 106,
          "column": 7,
          "position": 873
        }
      }
    },
    {
      "format": "java",
      "lines": 9,
      "fragment": ";\n\nimport puscas.mobilertapp.constants.Accelerator;\nimport puscas.mobilertapp.constants.Constants;\nimport puscas.mobilertapp.constants.ConstantsUI;\nimport puscas.mobilertapp.constants.Scene;\nimport puscas.mobilertapp.constants.Shader;\nimport puscas.mobilertapp.constants.State;\nimport puscas.mobilertapp.exceptions",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/AbstractTest.java",
        "start": 61,
        "end": 69,
        "startLoc": {
          "line": 61,
          "column": 7,
          "position": 567
        },
        "endLoc": {
          "line": 69,
          "column": 11,
          "position": 642
        }
      },
      "secondFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/UiTest.java",
        "start": 28,
        "end": 35,
        "startLoc": {
          "line": 28,
          "column": 11,
          "position": 224
        },
        "endLoc": {
          "line": 35,
          "column": 6,
          "position": 298
        }
      }
    },
    {
      "format": "java",
      "lines": 7,
      "fragment": ";\nimport puscas.mobilertapp.constants.ConstantsUI;\nimport puscas.mobilertapp.constants.Scene;\nimport puscas.mobilertapp.constants.Shader;\nimport puscas.mobilertapp.constants.State;\nimport puscas.mobilertapp.exceptions.FailureException;\nimport puscas.mobilertapp.utils.UtilsContext",
      "tokens": 0,
      "firstFile": {
        "name": "app/src/androidTest/java/puscas/mobilertapp/AbstractTest.java",
        "start": 64,
        "end": 70,
        "startLoc": {
          "line": 64,
          "column": 10,
          "position": 590
        },
        "endLoc": {
          "line": 70,
          "column": 13,
          "position": 655
        }
      },
      "secondFile": {
        "name": "app/src/main/java/puscas/mobilertapp/MainActivity.java",
        "start": 55,
        "end": 61,
        "startLoc": {
          "line": 55,
          "column": 15,
          "position": 483
        },
        "endLoc": {
          "line": 61,
          "column": 6,
          "position": 548
        }
      }
    },
    {
      "format": "cpp",
      "lines": 8,
      "fragment": "icsView->resize(m_config.width + 2, m_config.height + 2);\n}\n\nvoid MainWindow::setImage(const ::MobileRT::Config &config, const bool async) {\n    m_async = async;\n    m_config = config;\n\n    LOG_DEBUG(\"width = \", m_config.width);\n    LOG_DEBUG(\"height = \", m_config.height);\n    LOG_DEBUG(\"async ",
      "tokens": 0,
      "firstFile": {
        "name": "app/System_dependent/Native/Qt/MobileRT/mainwindow.cpp",
        "start": 78,
        "end": 85,
        "startLoc": {
          "line": 78,
          "column": 8,
          "position": 646
        },
        "endLoc": {
          "line": 85,
          "column": 10,
          "position": 742
        }
      },
      "secondFile": {
        "name": "app/System_dependent/Native/Qt/MobileRT/mainwindow.cpp",
        "start": 53,
        "end": 60,
        "startLoc": {
          "line": 53,
          "column": 2,
          "position": 331
        },
        "endLoc": {
          "line": 60,
          "column": 3,
          "position": 427
        }
      }
    },
    {
      "format": "cpp",
      "lines": 13,
      "fragment": "(m_config.height)};\n    LOG_DEBUG(\"width = \", m_config.width);\n    LOG_DEBUG(\"height = \", m_config.height);\n    m_config.bitmap = ::std::vector<::std::int32_t> (size);\n\n    LOG_DEBUG(\"obj = \", m_config.objFilePath);\n    LOG_DEBUG(\"mtl = \", m_config.mtlFilePath);\n    LOG_DEBUG(\"cam = \", m_config.camFilePath);\n\n    RayTrace(m_config",
      "tokens": 0,
      "firstFile": {
        "name": "app/System_dependent/Native/Qt/MobileRT/mainwindow.cpp",
        "start": 87,
        "end": 99,
        "startLoc": {
          "line": 87,
          "column": 12,
          "position": 774
        },
        "endLoc": {
          "line": 99,
          "column": 14,
          "position": 899
        }
      },
      "secondFile": {
        "name": "app/System_dependent/Native/Qt/MobileRT/mainwindow.cpp",
        "start": 60,
        "end": 72,
        "startLoc": {
          "line": 60,
          "column": 2,
          "position": 451
        },
        "endLoc": {
          "line": 72,
          "column": 9,
          "position": 576
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "SceneWithWhitted start\");\n\n    config.sceneIndex = -1; // OBJ\n    config.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholde",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 58,
        "end": 68,
        "startLoc": {
          "line": 58,
          "column": 5,
          "position": 604
        },
        "endLoc": {
          "line": 68,
          "column": 33,
          "position": 816
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 5,
          "position": 338
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "hPathTracing start\");\n\n    config.sceneIndex = -1; // OBJ\n    config.shader = 2; // PathTracing\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 76,
        "end": 86,
        "startLoc": {
          "line": 76,
          "column": 5,
          "position": 870
        },
        "endLoc": {
          "line": 86,
          "column": 37,
          "position": 1082
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 5,
          "position": 338
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "eneWithDepthMap start\");\n\n    config.sceneIndex = -1; // OBJ\n    config.shader = 3; // DepthMap\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholder",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 94,
        "end": 104,
        "startLoc": {
          "line": 94,
          "column": 5,
          "position": 1136
        },
        "endLoc": {
          "line": 104,
          "column": 34,
          "position": 1348
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 5,
          "position": 338
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "hDiffuse start\");\n\n    config.sceneIndex = -1; // OBJ\n    config.shader = 4; // DiffuseMaterial\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholde",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 112,
        "end": 122,
        "startLoc": {
          "line": 112,
          "column": 5,
          "position": 1402
        },
        "endLoc": {
          "line": 122,
          "column": 33,
          "position": 1614
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 5,
          "position": 338
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 13,
      "fragment": "d SetUp () final {\n        config.width = 30;\n        config.height = 30;\n        config.threads = 3;\n        config.samplesPixel = 1;\n        config.samplesLight = 1;\n        config.repeats = 1;\n        config.printStdOut = true;\n        config.objFilePath = ::std::string {\"\"};\n        config.mtlFilePath = ::std::string {\"\"};\n        config.camFilePath = ::std::string {\"\"};\n        const ::std::uint32_t size {static_cast<::std::uint32_t> (config.width) * static_cast<::std::uint32_t> (config.height)}",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/CameraTestEngine.cpp",
        "start": 13,
        "end": 25,
        "startLoc": {
          "line": 13,
          "column": 2,
          "position": 75
        },
        "endLoc": {
          "line": 25,
          "column": 9,
          "position": 246
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 14,
        "end": 26,
        "startLoc": {
          "line": 14,
          "column": 2,
          "position": 85
        },
        "endLoc": {
          "line": 26,
          "column": 6,
          "position": 256
        }
      }
    },
    {
      "format": "cpp",
      "lines": 7,
      "fragment": "\n    config.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/CameraTestEngine.cpp",
        "start": 39,
        "end": 45,
        "startLoc": {
          "line": 39,
          "column": 8,
          "position": 341
        },
        "endLoc": {
          "line": 45,
          "column": 38,
          "position": 487
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 44,
        "end": 50,
        "startLoc": {
          "line": 44,
          "column": 2,
          "position": 404
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 8,
      "fragment": "kSystemError(\"testRenderSceneWithPerspective start\");\n\n    config.sceneIndex = 0; // CornellBox\n    config.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/CameraTestEngine.cpp",
        "start": 52,
        "end": 59,
        "startLoc": {
          "line": 52,
          "column": 5,
          "position": 528
        },
        "endLoc": {
          "line": 59,
          "column": 37,
          "position": 700
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/CameraTestEngine.cpp",
        "start": 38,
        "end": 50,
        "startLoc": {
          "line": 38,
          "column": 5,
          "position": 315
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 23,
      "fragment": "/C_wrapper.h\"\n#include <gtest/gtest.h>\n\n#include \"MobileRT/Shader.hpp\"\n\nclass AcceleratorTestEngine : public testing::Test {\nprotected:\n    ::MobileRT::Config config {};\n\n    void SetUp () final {\n        config.width = 30;\n        config.height = 30;\n        config.threads = 3;\n        config.samplesPixel = 1;\n        config.samplesLight = 1;\n        config.repeats = 1;\n        config.printStdOut = true;\n        config.objFilePath = ::std::string {\"\"};\n        config.mtlFilePath = ::std::string {\"\"};\n        config.camFilePath = ::std::string {\"\"};\n        const ::std::uint32_t size {static_cast<::std::uint32_t> (config.width) * static_cast<::std::uint32_t> (config.height)};\n        config.bitmap = ::std::vec",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/AcceleratorTestEngine.cpp",
        "start": 6,
        "end": 28,
        "startLoc": {
          "line": 6,
          "column": 2,
          "position": 9
        },
        "endLoc": {
          "line": 28,
          "column": 22,
          "position": 256
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/CameraTestEngine.cpp",
        "start": 6,
        "end": 28,
        "startLoc": {
          "line": 6,
          "column": 2,
          "position": 9
        },
        "endLoc": {
          "line": 28,
          "column": 17,
          "position": 256
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "   config.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_NAIVE;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placehol",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/AcceleratorTestEngine.cpp",
        "start": 39,
        "end": 49,
        "startLoc": {
          "line": 39,
          "column": 10,
          "position": 342
        },
        "endLoc": {
          "line": 49,
          "column": 31,
          "position": 540
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 8,
          "position": 352
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 11,
      "fragment": "ig.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_REGULAR_GRID;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/AcceleratorTestEngine.cpp",
        "start": 56,
        "end": 66,
        "startLoc": {
          "line": 56,
          "column": 17,
          "position": 607
        },
        "endLoc": {
          "line": 66,
          "column": 37,
          "position": 805
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 40,
        "end": 50,
        "startLoc": {
          "line": 40,
          "column": 8,
          "position": 352
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp",
      "lines": 14,
      "fragment": "estEngine, testRenderSceneWithBVH) {\n    ::MobileRT::checkSystemError(\"testRenderSceneWithBVH start\");\n    config.sceneIndex = -1; // OBJ\n    config.shader = 1; // Whitted\n    config.accelerator = ::MobileRT::Shader::Accelerator::ACC_BVH;\n\n    config.objFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj\"};\n    config.mtlFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl\"};\n    config.camFilePath = ::std::string {\"./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam\"};\n\n    ASSERT_TRUE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeholders::_1, config.bitmap.front())));\n    RayTrace(config, false);\n    ASSERT_FALSE(::std::all_of(config.bitmap.begin()+1, config.bitmap.end(), ::std::bind(std::equal_to<int>(), ::std::placeh",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/engine/AcceleratorTestEngine.cpp",
        "start": 70,
        "end": 83,
        "startLoc": {
          "line": 70,
          "column": 31,
          "position": 829
        },
        "endLoc": {
          "line": 83,
          "column": 29,
          "position": 1070
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/engine/ShaderTestEngine.cpp",
        "start": 54,
        "end": 50,
        "startLoc": {
          "line": 54,
          "column": 35,
          "position": 574
        },
        "endLoc": {
          "line": 50,
          "column": 35,
          "position": 550
        }
      }
    },
    {
      "format": "cpp-header",
      "lines": 12,
      "fragment": "oordC () const;\n\n        ::std::int32_t getMaterialIndex () const;\n\n        friend ::std::ostream& operator << (::std::ostream &os, const Triangle& triangle);\n\n        class Builder final {\n        private:\n            ::glm::vec3 AC_ {};\n            ::glm::vec3 AB_ {};\n            ::glm::vec3 pointA_ {};\n            ::glm::vec3 normalA_ {};\n            ::glm::vec3 normalB_ {};\n            ::glm::vec3 norm",
      "tokens": 0,
      "firstFile": {
        "name": "app/MobileRT/Shapes/Triangle.hpp",
        "start": 78,
        "end": 89,
        "startLoc": {
          "line": 78,
          "column": 9,
          "position": 560
        },
        "endLoc": {
          "line": 89,
          "column": 7,
          "position": 692
        }
      },
      "secondFile": {
        "name": "app/MobileRT/Shapes/Triangle.hpp",
        "start": 17,
        "end": 29,
        "startLoc": {
          "line": 17,
          "column": 5,
          "position": 38
        },
        "endLoc": {
          "line": 29,
          "column": 8,
          "position": 171
        }
      }
    },
    {
      "format": "cpp-header",
      "lines": 7,
      "fragment": "                }\n                    tmax[2] = (tmax[2] + tdelta[2]);\n                }\n            }\n\n        }\n        testloop:\n        while (true) {\n\n            // Get the primitives in the cell.\n            const ::std::int32_t index {getCellIndex(cellX, cellY, cellZ)};\n            const auto itPrimitives {this->grid_.begin() + index};\n  ",
      "tokens": 0,
      "firstFile": {
        "name": "app/MobileRT/Accelerators/RegularGrid.hpp",
        "start": 464,
        "end": 470,
        "startLoc": {
          "line": 464,
          "column": 13,
          "position": 4828
        },
        "endLoc": {
          "line": 470,
          "column": 13,
          "position": 4915
        }
      },
      "secondFile": {
        "name": "app/MobileRT/Accelerators/RegularGrid.hpp",
        "start": 413,
        "end": 419,
        "startLoc": {
          "line": 413,
          "column": 13,
          "position": 4339
        },
        "endLoc": {
          "line": 419,
          "column": 6,
          "position": 4426
        }
      }
    },
    {
      "format": "cpp-header",
      "lines": 13,
      "fragment": "       break;\n                    }\n                    cellY += stepY;\n                    if (cellY == outY) {\n                        break;\n                    }\n                    tmax[1] = (tmax[1] + tdelta[1]);\n                } else {\n                    if (intersection.length_ < tmax[2]) {\n                        break;\n                    }\n         ",
      "tokens": 0,
      "firstFile": {
        "name": "app/MobileRT/Accelerators/RegularGrid.hpp",
        "start": 501,
        "end": 513,
        "startLoc": {
          "line": 501,
          "column": 2,
          "position": 5232
        },
        "endLoc": {
          "line": 513,
          "column": 2,
          "position": 5327
        }
      },
      "secondFile": {
        "name": "app/MobileRT/Accelerators/RegularGrid.hpp",
        "start": 481,
        "end": 492,
        "startLoc": {
          "line": 481,
          "column": 2,
          "position": 5042
        },
        "endLoc": {
          "line": 492,
          "column": 5,
          "position": 5136
        }
      }
    },
    {
      "format": "cpp",
      "lines": 8,
      "fragment": "ht = \", this->samplesLight_);\n}\n\n//pag 28 slides Monte Carlo\nbool PathTracer::shade(::glm::vec3 *const rgb, const Intersection &intersection) {\n    const ::std::int32_t rayDepth {intersection.ray_.depth_};\n    if (rayDepth > RayDepthMax) {\n        return false;\n    }\n\n    const ::glm::vec3 &",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Shaders/PathTracer.cpp",
        "start": 22,
        "end": 29,
        "startLoc": {
          "line": 22,
          "column": 11,
          "position": 158
        },
        "endLoc": {
          "line": 29,
          "column": 39,
          "position": 246
        }
      },
      "secondFile": {
        "name": "app/Components/Shaders/Whitted.cpp",
        "start": 13,
        "end": 20,
        "startLoc": {
          "line": 13,
          "column": 8,
          "position": 96
        },
        "endLoc": {
          "line": 20,
          "column": 39,
          "position": 184
        }
      }
    },
    {
      "format": "cpp",
      "lines": 6,
      "fragment": "onst ::glm::vec3 &lE {intersection.material_->Le_};\n    const ::glm::vec3 &kD {intersection.material_->Kd_};\n    const ::glm::vec3 &kS {intersection.material_->Ks_};\n    const ::glm",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Shaders/DiffuseMaterial.cpp",
        "start": 12,
        "end": 17,
        "startLoc": {
          "line": 12,
          "column": 4,
          "position": 114
        },
        "endLoc": {
          "line": 17,
          "column": 3,
          "position": 182
        }
      },
      "secondFile": {
        "name": "app/Components/Shaders/PathTracer.cpp",
        "start": 37,
        "end": 42,
        "startLoc": {
          "line": 37,
          "column": 2,
          "position": 326
        },
        "endLoc": {
          "line": 42,
          "column": 6,
          "position": 394
        }
      }
    },
    {
      "format": "cpp",
      "lines": 8,
      "fragment": "width, height, samples} {\n}\n\nfloat HaltonSeq::getSample(const ::std::uint32_t sample) {\n    const ::std::uint32_t current {this->sample_.fetch_add(1, ::std::memory_order_relaxed)};\n    if (current >= (this->domainSize_ * (sample + 1))) {\n        this->sample_.fetch_sub(1, ::std::memory_order_relaxed);\n        return 1.0F;\n    }\n    const ::std::uint32_t index {current - (sample * ",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Samplers/HaltonSeq.cpp",
        "start": 10,
        "end": 17,
        "startLoc": {
          "line": 10,
          "column": 10,
          "position": 69
        },
        "endLoc": {
          "line": 17,
          "column": 3,
          "position": 204
        }
      },
      "secondFile": {
        "name": "app/Components/Samplers/Stratified.cpp",
        "start": 10,
        "end": 17,
        "startLoc": {
          "line": 10,
          "column": 11,
          "position": 69
        },
        "endLoc": {
          "line": 17,
          "column": 12,
          "position": 204
        }
      }
    },
    {
      "format": "cpp",
      "lines": 7,
      "fragment": "lm::vec3> OBJLoader::loadNormal(\n    const ::tinyobj::shape_t &shape,\n    const ::std::int32_t indexOffset,\n    const triple<::glm::vec3, ::glm::vec3, ::glm::vec3> &vertex\n) const {\n    const auto itIdx {shape.mesh.indices.cbegin() +",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 158,
        "end": 164,
        "startLoc": {
          "line": 158,
          "column": 1,
          "position": 1698
        },
        "endLoc": {
          "line": 164,
          "column": 3,
          "position": 1796
        }
      },
      "secondFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 119,
        "end": 126,
        "startLoc": {
          "line": 119,
          "column": 1,
          "position": 1150
        },
        "endLoc": {
          "line": 126,
          "column": 6,
          "position": 1249
        }
      }
    },
    {
      "format": "cpp",
      "lines": 14,
      "fragment": ">cend()) {// If the texture is not in the cache.\n        const ::std::string texturePath {filePath + texPath};\n        Texture &&texture {Texture::createTexture(texturePath)};\n        ::std::pair<::std::string, Texture> &&pair {::std::make_pair(texPath, ::std::move(texture))};\n        const Texture *res {nullptr};\n        const ::std::pair<::std::unordered_map<::std::string, Texture>::iterator, bool> pairResult {texturesCache->emplace(::std::move(pair))}; // Add it to the cache.\n        res = &(::std::get<0>(pairResu",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 262,
        "end": 275,
        "startLoc": {
          "line": 262,
          "column": 12,
          "position": 2909
        },
        "endLoc": {
          "line": 275,
          "column": 4,
          "position": 3066
        }
      },
      "secondFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 233,
        "end": 252,
        "startLoc": {
          "line": 233,
          "column": 5,
          "position": 2609
        },
        "endLoc": {
          "line": 252,
          "column": 4,
          "position": 2766
        }
      }
    },
    {
      "format": "cpp",
      "lines": 15,
      "fragment": "da(), triangle));\n                        }\n                    } else {\n                        // If it is a primitive.\n                        Triangle::Builder builder {\n                            Triangle::Builder(\n                                ::std::get<0> (vertices), ::std::get<1> (vertices), ::std::get<2> (vertices)\n                            )\n                            .withNormals(\n                                ::std::get<0>(normal),\n                                ::std::get<1>(normal),\n                                ::std::get<2>(normal)\n                            )\n                            .withTexCoords(\n                                ::std::get<0>(texCoor",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 390,
        "end": 404,
        "startLoc": {
          "line": 390,
          "column": 2,
          "position": 4742
        },
        "endLoc": {
          "line": 404,
          "column": 2,
          "position": 4885
        }
      },
      "secondFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 369,
        "end": 383,
        "startLoc": {
          "line": 369,
          "column": 2,
          "position": 4539
        },
        "endLoc": {
          "line": 383,
          "column": 2,
          "position": 4682
        }
      }
    },
    {
      "format": "cpp",
      "lines": 10,
      "fragment": "   const ::glm::vec3 &emission {0.0F, 0.0F, 0.0F};\n                    Material material {diffuse, specular, transmittance, indexRefraction, emission};\n                    Triangle::Builder builder {\n                        Triangle::Builder(\n                            ::std::get<0> (vertices), ::std::get<1> (vertices), ::std::get<2> (vertices)\n                        )\n                        .withNormals(\n                           ",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 434,
        "end": 443,
        "startLoc": {
          "line": 434,
          "column": 21,
          "position": 5320
        },
        "endLoc": {
          "line": 443,
          "column": 2,
          "position": 5423
        }
      },
      "secondFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 390,
        "end": 378,
        "startLoc": {
          "line": 390,
          "column": 25,
          "position": 4736
        },
        "endLoc": {
          "line": 378,
          "column": 2,
          "position": 4636
        }
      }
    },
    {
      "format": "cpp",
      "lines": 19,
      "fragment": "        .withNormals(\n                            ::std::get<0>(normal),\n                            ::std::get<1>(normal),\n                            ::std::get<2>(normal)\n                        )\n                    };\n                    ::std::int32_t materialIndex {-1};\n                    {\n                        const ::std::lock_guard<::std::mutex> lock {*mutex};\n                        const auto itFoundMat {::std::find(scene->materials_.begin(), scene->materials_.end(), material)};\n                        if (itFoundMat != scene->materials_.cend()) {\n                            // If the material is already in the scene.\n                            materialIndex = static_cast<::std::int32_t> (itFoundMat - scene->materials_.cbegin());\n                        } else {\n                            // If the scene doesn't have material yet.\n                            materialIndex = static_cast<::std::int32_t> (scene->materials_.size());\n                            scene->materials_.emplace_back(::std::move(material));\n                        }\n          ",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 441,
        "end": 459,
        "startLoc": {
          "line": 441,
          "column": 7,
          "position": 5417
        },
        "endLoc": {
          "line": 459,
          "column": 35,
          "position": 5638
        }
      },
      "secondFile": {
        "name": "app/Components/Loaders/OBJLoader.cpp",
        "start": 402,
        "end": 421,
        "startLoc": {
          "line": 402,
          "column": 9,
          "position": 4879
        },
        "endLoc": {
          "line": 421,
          "column": 5,
          "position": 5101
        }
      }
    },
    {
      "format": "bash",
      "lines": 12,
      "fragment": "exitValue=1;\n    return 1;\n  fi\n\n  expected=\"${1}\";\n  actual=\"${2}\";\n  message=\"${3}\";\n\n  if [ \"${expected}\" != \"${actual}\" ]; then\n    logError '[FAILED]';\n    echo \"${message} | Expected '${expected}', but the actual value is '${actual}'\";\n    export",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 140,
        "end": 151,
        "startLoc": {
          "line": 140,
          "column": 2,
          "position": 564
        },
        "endLoc": {
          "line": 151,
          "column": 7,
          "position": 643
        }
      },
      "secondFile": {
        "name": "scripts/test/utils/utils.sh",
        "start": 82,
        "end": 93,
        "startLoc": {
          "line": 82,
          "column": 5,
          "position": 276
        },
        "endLoc": {
          "line": 93,
          "column": 28,
          "position": 355
        }
      }
    },
    {
      "format": "bash",
      "lines": 18,
      "fragment": ";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value.\n  eval '$(${_functionName} -h > /dev/null)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} -h\";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value, when using the wrong parameter.\n  eval '$(${_functionName} -z > /dev/null 2>&1)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} ?\";\n}\n\n# Tests the parseArgumentsToTestAndroid function.",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 282,
        "end": 299,
        "startLoc": {
          "line": 282,
          "column": 5,
          "position": 1644
        },
        "endLoc": {
          "line": 299,
          "column": 50,
          "position": 1760
        }
      },
      "secondFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 222,
        "end": 239,
        "startLoc": {
          "line": 222,
          "column": 5,
          "position": 1123
        },
        "endLoc": {
          "line": 239,
          "column": 53,
          "position": 1239
        }
      }
    },
    {
      "format": "bash",
      "lines": 19,
      "fragment": ";\n  assertEqual \"${expected}\" \"${cpu_architecture}\" \"${_testName} -f\";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value.\n  eval '$(${_functionName} -h > /dev/null)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} -h\";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value, when using the wrong parameter.\n  eval '$(${_functionName} -z > /dev/null 2>&1)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} ?\";\n}\n\n# Tests the parseArgumentsToCheck function.",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 333,
        "end": 351,
        "startLoc": {
          "line": 333,
          "column": 16,
          "position": 2065
        },
        "endLoc": {
          "line": 351,
          "column": 44,
          "position": 2197
        }
      },
      "secondFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 281,
        "end": 239,
        "startLoc": {
          "line": 281,
          "column": 12,
          "position": 1628
        },
        "endLoc": {
          "line": 239,
          "column": 53,
          "position": 1239
        }
      }
    },
    {
      "format": "bash",
      "lines": 19,
      "fragment": ";\n  assertEqual \"${expected}\" \"${cpu_architecture}\" \"${_testName} -f\";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value.\n  eval '$(${_functionName} -h > /dev/null)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} -h\";\n\n  _clearEnvVariables;\n  # Validate the help message returns the expected value, when using the wrong parameter.\n  eval '$(${_functionName} -z > /dev/null 2>&1)';\n  returnValue=\"$?\";\n  expected='1';\n  assertEqual \"${expected}\" \"${returnValue}\" \"${_testName} ?\";\n}\n\n# Tests the printCommandExitCode function.",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 361,
        "end": 379,
        "startLoc": {
          "line": 361,
          "column": 22,
          "position": 2276
        },
        "endLoc": {
          "line": 379,
          "column": 43,
          "position": 2408
        }
      },
      "secondFile": {
        "name": "scripts/test/helper_functions.sh",
        "start": 281,
        "end": 239,
        "startLoc": {
          "line": 281,
          "column": 12,
          "position": 1628
        },
        "endLoc": {
          "line": 239,
          "column": 53,
          "position": 1239
        }
      }
    },
    {
      "format": "cpp",
      "lines": 6,
      "fragment": "], ray.origin_[i]);\n    }\n}\n\n/**\n * Tests the Ray id generator.\n */\nTEST_F(TestRay, TestId) {\n    const ::glm::vec3 direction {::glm::vec3 {10.0F, 0.0F, 10.0F}};\n    const ::glm::vec3 origin {::glm::vec3 {0.0F, 0.0F, 10.0F}};\n  ",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestRay.cpp",
        "start": 54,
        "end": 59,
        "startLoc": {
          "line": 54,
          "column": 7,
          "position": 440
        },
        "endLoc": {
          "line": 59,
          "column": 5,
          "position": 533
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestRay.cpp",
        "start": 36,
        "end": 41,
        "startLoc": {
          "line": 36,
          "column": 16,
          "position": 224
        },
        "endLoc": {
          "line": 41,
          "column": 4,
          "position": 317
        }
      }
    },
    {
      "format": "cpp",
      "lines": 7,
      "fragment": " copy constructor.\n */\nTEST_F(TestPlane, TestCopyConstructor) {\n    const ::std::int32_t materialIndex {19};\n    const ::glm::vec3 point {1, 2, 3};\n    const ::glm::vec3 normal {4, 5, 6};\n    const ::glm::vec3 normal2 {::glm::normalize(normal)};\n    ",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 86,
        "end": 92,
        "startLoc": {
          "line": 86,
          "column": 20,
          "position": 729
        },
        "endLoc": {
          "line": 92,
          "column": 6,
          "position": 830
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 69,
        "end": 76,
        "startLoc": {
          "line": 69,
          "column": 16,
          "position": 531
        },
        "endLoc": {
          "line": 76,
          "column": 10,
          "position": 633
        }
      }
    },
    {
      "format": "cpp",
      "lines": 6,
      "fragment": " move constructor.\n */\nTEST_F(TestPlane, TestMoveConstructor) {\n    const ::std::int32_t materialIndex {19};\n    const ::glm::vec3 point {1, 2, 3};\n    const ::glm::vec3 normal {4, 5, 6};\n    con",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 104,
        "end": 109,
        "startLoc": {
          "line": 104,
          "column": 20,
          "position": 939
        },
        "endLoc": {
          "line": 109,
          "column": 6,
          "position": 1022
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 69,
        "end": 74,
        "startLoc": {
          "line": 69,
          "column": 16,
          "position": 531
        },
        "endLoc": {
          "line": 74,
          "column": 6,
          "position": 614
        }
      }
    },
    {
      "format": "cpp",
      "lines": 13,
      "fragment": " materialIndex};\n    const Plane plane3 {::std::move(plane2)};\n\n    ASSERT_EQ(materialIndex, plane3.getMaterialIndex());\n    for (int i {0}; i < ::MobileRT::NumberOfAxes; ++i) {\n        ASSERT_FLOAT_EQ(point[i], plane3.getPoint()[i]);\n        ASSERT_FLOAT_EQ(normal2[i], plane3.getNormal()[i]);\n    }\n}\n\n/**\n * Tests intersecting an AABB with a plane.\n",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 110,
        "end": 122,
        "startLoc": {
          "line": 110,
          "column": 2,
          "position": 1052
        },
        "endLoc": {
          "line": 122,
          "column": 4,
          "position": 1145
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 92,
        "end": 103,
        "startLoc": {
          "line": 92,
          "column": 7,
          "position": 838
        },
        "endLoc": {
          "line": 103,
          "column": 4,
          "position": 931
        }
      }
    },
    {
      "format": "cpp",
      "lines": 9,
      "fragment": "ayInsideX) {\n    const ::glm::vec3 direction {::glm::vec3 {-10.0F, 0.0F, 10.0F}};\n    const ::glm::vec3 origin {::glm::vec3 {0.0F, 0.0F, 10.0F}};\n    const ::std::int32_t depth {19};\n    ::MobileRT::Ray ray {direction, origin, depth, false, nullptr};\n    ::MobileRT::Intersection intersection {::std::move(ray)};\n\n    const float lastDist {intersection.length_};\n    inter",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 272,
        "end": 280,
        "startLoc": {
          "line": 272,
          "column": 2,
          "position": 2704
        },
        "endLoc": {
          "line": 280,
          "column": 5,
          "position": 2834
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestPlane.cpp",
        "start": 255,
        "end": 263,
        "startLoc": {
          "line": 255,
          "column": 2,
          "position": 2528
        },
        "endLoc": {
          "line": 263,
          "column": 6,
          "position": 2658
        }
      }
    },
    {
      "format": "cpp",
      "lines": 7,
      "fragment": "    const ::glm::vec3 normal {::glm::vec3 {0.0F, 0.0F, 10.0F}};\n    const void *primitive {nullptr};\n    const ::std::int32_t materialIndex {0};\n    const ::glm::vec2 texCoords {0.4F, 0.6F};\n    Ray ray {::glm::vec3 {1.0F}, ::glm::vec3 {}, 0, fal",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestIntersection.cpp",
        "start": 46,
        "end": 52,
        "startLoc": {
          "line": 46,
          "column": 6,
          "position": 380
        },
        "endLoc": {
          "line": 52,
          "column": 13,
          "position": 470
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestIntersection.cpp",
        "start": 30,
        "end": 36,
        "startLoc": {
          "line": 30,
          "column": 5,
          "position": 176
        },
        "endLoc": {
          "line": 36,
          "column": 13,
          "position": 266
        }
      }
    },
    {
      "format": "cpp",
      "lines": 7,
      "fragment": "c3 normal {::glm::normalize(::glm::vec3 {0.0F, 0.0F, 10.0F})};\n    const void *primitive {nullptr};\n    const ::std::int32_t materialIndex {0};\n    const ::glm::vec2 texCoords {0.4F, 0.6F};\n    Ray ra",
      "tokens": 0,
      "firstFile": {
        "name": "app/Unit_Testing/TestIntersection.cpp",
        "start": 73,
        "end": 79,
        "startLoc": {
          "line": 73,
          "column": 2,
          "position": 680
        },
        "endLoc": {
          "line": 79,
          "column": 6,
          "position": 763
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/TestIntersection.cpp",
        "start": 30,
        "end": 36,
        "startLoc": {
          "line": 30,
          "column": 2,
          "position": 177
        },
        "endLoc": {
          "line": 36,
          "column": 19,
          "position": 260
        }
      }
    },
    {
      "format": "cpp",
      "lines": 9,
      "fragment": "glm::vec3 {0.5F, 0.5F, 0.99F}\n        )\n        .withMaterialIndex(static_cast<::std::int32_t> (scene.materials_.size()))\n        .build()\n    };\n\n    scene.triangles_.emplace_back(triangle4);\n    scene.materials_.emplace_back(greenMat);\n\n    // sphere - mir",
      "tokens": 0,
      "firstFile": {
        "name": "app/Scenes/Scenes.cpp",
        "start": 208,
        "end": 216,
        "startLoc": {
          "line": 208,
          "column": 9,
          "position": 2049
        },
        "endLoc": {
          "line": 216,
          "column": 25,
          "position": 2123
        }
      },
      "secondFile": {
        "name": "app/Scenes/Scenes.cpp",
        "start": 122,
        "end": 129,
        "startLoc": {
          "line": 122,
          "column": 10,
          "position": 1212
        },
        "endLoc": {
          "line": 129,
          "column": 18,
          "position": 1285
        }
      }
    },
    {
      "format": "cpp",
      "lines": 9,
      "fragment": "r reading texture '\" + texturePath + \"': \" + error)};\n    }\n    ::std::uint8_t *const data {stbi_load(texturePath.c_str(), &width, &height, &channels, 0)};\n    if (data == nullptr || width <= 0 || height <= 0 || channels <= 0) {\n        const char *error {stbi_failure_reason()};\n        LOG_ERROR(\"Error reading texture: \", error);\n        throw ::std::runtime_error {error};\n    }\n    ::std::shared_",
      "tokens": 0,
      "firstFile": {
        "name": "app/MobileRT/Texture.cpp",
        "start": 102,
        "end": 110,
        "startLoc": {
          "line": 102,
          "column": 2,
          "position": 1012
        },
        "endLoc": {
          "line": 110,
          "column": 2,
          "position": 1152
        }
      },
      "secondFile": {
        "name": "app/MobileRT/Texture.cpp",
        "start": 68,
        "end": 76,
        "startLoc": {
          "line": 68,
          "column": 5,
          "position": 597
        },
        "endLoc": {
          "line": 76,
          "column": 10,
          "position": 737
        }
      }
    },
    {
      "format": "markdown",
      "lines": 24,
      "fragment": "###########################\n\n\n###############################################################################\n# Set headers\n###############################################################################\nmessage( STATUS \"Adding MobileRT and third party headers.\" )\ntarget_include_directories( ${PROJECT_NAME} SYSTEM PUBLIC\n  \"${THIRD_PARTY_HEADERS}\" )\ntarget_include_directories( ${PROJECT_NAME} PRIVATE \"${MOBILE_R",
      "tokens": 0,
      "firstFile": {
        "name": "app/Components/CMakeLists.txt",
        "start": 31,
        "end": 54,
        "startLoc": {
          "line": 31,
          "column": 2,
          "position": 186
        },
        "endLoc": {
          "line": 54,
          "column": 9,
          "position": 278
        }
      },
      "secondFile": {
        "name": "app/Unit_Testing/CMakeLists.txt",
        "start": 69,
        "end": 81,
        "startLoc": {
          "line": 69,
          "column": 2,
          "position": 355
        },
        "endLoc": {
          "line": 81,
          "column": 4,
          "position": 436
        }
      }
    },
    {
      "format": "yaml",
      "lines": 12,
      "fragment": "uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: reports_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.name }}_${{ inputs.host_os }}_${{ inputs.type }}_${{ inputs.compiler }}\n          restore-keys: reports_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.name }}_${{ inputs.host_os }}_${{ inputs.type }}_${{ inputs.compiler }}\n          path: |\n            code_coverage_base.info\n            code_coverage.info\n            code_coverage_test.info\n            code_coverage_filtered.info\n\n      -",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-native.yml",
        "start": 333,
        "end": 344,
        "startLoc": {
          "line": 333,
          "column": 9,
          "position": 1775
        },
        "endLoc": {
          "line": 344,
          "column": 2,
          "position": 1918
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-native.yml",
        "start": 306,
        "end": 318,
        "startLoc": {
          "line": 306,
          "column": 9,
          "position": 1492
        },
        "endLoc": {
          "line": 318,
          "column": 6,
          "position": 1636
        }
      }
    },
    {
      "format": "yaml",
      "lines": 30,
      "fragment": "timeout-minutes: 360\n    steps:\n      - name: Checkout\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/checkout@v4\n\n      - name: Set up JDK\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/setup-java@v4\n        with:\n          # Check available parameters in: https://github.com/actions/setup-java/blob/main/action.yml\n          java-version: 21\n          distribution: zulu\n          java-package: jdk\n          architecture: x64\n          check-latest: false\n          server-id: github\n          server-username: GITHUB_ACTOR\n          server-password: GITHUB_TOKEN\n          settings-path: ~/.gradle\n          overwrite-settings: true\n          gpg-private-key: ''\n          gpg-passphrase: GPG_PASSPHRASE\n          cache: gradle\n          cache-dependency-path: '**/build.gradle'\n\n      - name: Add custom environment variables\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_SMALL)",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 332,
        "end": 361,
        "startLoc": {
          "line": 332,
          "column": 5,
          "position": 2510
        },
        "endLoc": {
          "line": 361,
          "column": 40,
          "position": 2706
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 31,
        "end": 60,
        "startLoc": {
          "line": 31,
          "column": 5,
          "position": 169
        },
        "endLoc": {
          "line": 60,
          "column": 41,
          "position": 365
        }
      }
    },
    {
      "format": "yaml",
      "lines": 8,
      "fragment": "}}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 374,
        "end": 381,
        "startLoc": {
          "line": 374,
          "column": 2,
          "position": 2763
        },
        "endLoc": {
          "line": 381,
          "column": 5,
          "position": 2895
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 234,
        "end": 241,
        "startLoc": {
          "line": 234,
          "column": 2,
          "position": 1134
        },
        "endLoc": {
          "line": 241,
          "column": 6,
          "position": 1266
        }
      }
    },
    {
      "format": "yaml",
      "lines": 8,
      "fragment": "}}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 388,
        "end": 395,
        "startLoc": {
          "line": 388,
          "column": 2,
          "position": 2931
        },
        "endLoc": {
          "line": 395,
          "column": 5,
          "position": 3063
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 302,
        "end": 309,
        "startLoc": {
          "line": 302,
          "column": 2,
          "position": 2191
        },
        "endLoc": {
          "line": 309,
          "column": 6,
          "position": 2323
        }
      }
    },
    {
      "format": "yaml",
      "lines": 41,
      "fragment": "steps:\n      - name: Checkout\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/checkout@v4\n\n      - name: Set up JDK\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/setup-java@v4\n        with:\n          # Check available parameters in: https://github.com/actions/setup-java/blob/main/action.yml\n          java-version: 21\n          distribution: zulu\n          java-package: jdk\n          architecture: x64\n          check-latest: false\n          server-id: github\n          server-username: GITHUB_ACTOR\n          server-password: GITHUB_TOKEN\n          settings-path: ~/.gradle\n          overwrite-settings: true\n          gpg-private-key: ''\n          gpg-passphrase: GPG_PASSPHRASE\n          cache: gradle\n          cache-dependency-path: '**/build.gradle'\n\n      - name: Add custom environment variables\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_SMALL) }}\n        if: success() && !startsWith(inputs.host_os, 'windows')\n        working-directory: .\n        run: |\n          echo 'Available Android versions:';\n          du -h -d 1 ${ANDROID_HOME}/ndk;\n          du -h -d 1 ${ANDROID_HOME}/cmake || true;\n          du -h -d 1 ${ANDROID_HOME}/build-tools;\n          ls -lahp ${ANDROID_HOME}/platforms;\n          ls -lahp ${HOME};\n          echo \"GRADLE_PATH=${HOME}/.gradle\" >> \"${GITHUB_ENV}\";\n\n      - name: Download gradle",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 579,
        "end": 619,
        "startLoc": {
          "line": 579,
          "column": 5,
          "position": 4479
        },
        "endLoc": {
          "line": 619,
          "column": 7,
          "position": 4708
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 32,
        "end": 373,
        "startLoc": {
          "line": 32,
          "column": 5,
          "position": 175
        },
        "endLoc": {
          "line": 373,
          "column": 10,
          "position": 2745
        }
      }
    },
    {
      "format": "yaml",
      "lines": 21,
      "fragment": "- name: Download gradle packages from cache\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true\n          path: |\n            ${{ env.GRADLE_PATH }}/gradle-packages.zip\n\n      - name: Extract and check files from gradle artifact\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success() && !startsWith(inputs.host_os, 'windows')\n        working-directory: .\n        run: |\n          # shellcheck disable=SC1091\n          . scripts/helper_functions.sh && extractFilesFromArtifact ${{ env.GRADLE_PATH }};\n\n      - name: Download",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 619,
        "end": 639,
        "startLoc": {
          "line": 619,
          "column": 7,
          "position": 4701
        },
        "endLoc": {
          "line": 639,
          "column": 9,
          "position": 4933
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 387,
        "end": 407,
        "startLoc": {
          "line": 387,
          "column": 7,
          "position": 2906
        },
        "endLoc": {
          "line": 407,
          "column": 6,
          "position": 3138
        }
      }
    },
    {
      "format": "yaml",
      "lines": 15,
      "fragment": "- name: Download generated binaries from cache\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true\n          path: |\n            app/build\n            app/.cxx\n            app/third_party\n\n      - name: Check",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 639,
        "end": 653,
        "startLoc": {
          "line": 639,
          "column": 7,
          "position": 4928
        },
        "endLoc": {
          "line": 653,
          "column": 6,
          "position": 5101
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 373,
        "end": 387,
        "startLoc": {
          "line": 373,
          "column": 7,
          "position": 2738
        },
        "endLoc": {
          "line": 387,
          "column": 9,
          "position": 2911
        }
      }
    },
    {
      "format": "yaml",
      "lines": 76,
      "fragment": "java-version: 21\n          distribution: zulu\n          java-package: jdk\n          architecture: x64\n          check-latest: false\n          server-id: github\n          server-username: GITHUB_ACTOR\n          server-password: GITHUB_TOKEN\n          settings-path: ~/.gradle\n          overwrite-settings: true\n          gpg-private-key: ''\n          gpg-passphrase: GPG_PASSPHRASE\n          cache: gradle\n          cache-dependency-path: '**/build.gradle'\n\n      - name: Add custom environment variables\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_SMALL) }}\n        if: success() && !startsWith(inputs.host_os, 'windows')\n        working-directory: .\n        run: |\n          echo 'Available Android versions:';\n          du -h -d 1 ${ANDROID_HOME}/ndk;\n          du -h -d 1 ${ANDROID_HOME}/cmake || true;\n          du -h -d 1 ${ANDROID_HOME}/build-tools;\n          ls -lahp ${ANDROID_HOME}/platforms;\n          ls -lahp ${HOME};\n          echo \"GRADLE_PATH=${HOME}/.gradle\" >> \"${GITHUB_ENV}\";\n\n      - name: Download gradle packages from cache\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: gradle_packages_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true\n          path: |\n            ${{ env.GRADLE_PATH }}/gradle-packages.zip\n\n      - name: Extract and check files from gradle artifact\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success() && !startsWith(inputs.host_os, 'windows')\n        working-directory: .\n        run: |\n          # shellcheck disable=SC1091\n          . scripts/helper_functions.sh && extractFilesFromArtifact ${{ env.GRADLE_PATH }};\n\n      - name: Download generated binaries from cache\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n        if: success()\n        uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: compiled_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          fail-on-cache-miss: true\n          path: |\n            app/build\n            app/.cxx\n            app/third_party\n\n      - name: Check binaries' paths\n        timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_SMALL) }}\n        if: success()\n        run: |\n          # shellcheck disable=SC1091\n          . scripts/helper_functions.sh && checkPathExists app/build;\n          . scripts/helper_functions.sh && checkPathExists app/build/intermediates;\n          . scripts/helper_functions.sh && checkPathExists app/build/intermediates/javac;\n          . scripts/helper_functions.sh && checkPathExists app/build/intermediates/javac/debug;\n          . scripts/helper_functions.sh && checkPathExists app/build/intermediates/javac/debugUnitTest;\n          . scripts/helper_functions.sh && checkPathExists app/build/intermediates/javac/debugAndroidTest;\n          . scripts/helper_functions.sh && checkPathExists app/build/tmp/kotlin-classes/debug;\n          . scripts/helper_functions.sh && checkPathExists app/.cxx;\n          . scripts/helper_functions.sh && checkPathExists app/third_party;",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 755,
        "end": 830,
        "startLoc": {
          "line": 755,
          "column": 11,
          "position": 5612
        },
        "endLoc": {
          "line": 830,
          "column": 76,
          "position": 6180
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 44,
        "end": 664,
        "startLoc": {
          "line": 44,
          "column": 11,
          "position": 259
        },
        "endLoc": {
          "line": 664,
          "column": 76,
          "position": 5131
        }
      }
    },
    {
      "format": "yaml",
      "lines": 9,
      "fragment": "uses: actions/cache@v4\n        with:\n          # Check available parameters in: https://github.com/actions/cache/blob/main/action.yml\n          key: reports_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          restore-keys: reports_${{ github.sha }}_${{ github.run_id }}_${{ github.run_number }}_${{ inputs.android_api }}_${{ inputs.type }}_${{ inputs.host_os }}\n          path: |\n            app/build/reports\n\n      - name: Check",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 842,
        "end": 850,
        "startLoc": {
          "line": 842,
          "column": 9,
          "position": 6269
        },
        "endLoc": {
          "line": 850,
          "column": 6,
          "position": 6401
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 532,
        "end": 540,
        "startLoc": {
          "line": 532,
          "column": 9,
          "position": 3961
        },
        "endLoc": {
          "line": 540,
          "column": 4,
          "position": 4093
        }
      }
    },
    {
      "format": "yaml",
      "lines": 24,
      "fragment": "- '!**/CMakeLists*'\n    - '!**/AndroidTest/resources/**'\n    - '!**/*.c*'\n    - '!**/*.h'\n    - '!**/*.hpp'\n    - '!**/*.ui*'\n\ndefaults:\n  run:\n    shell: sh\n    working-directory: .\n\nconcurrency:\n  group: ${{ github.workflow }} ${{ github.ref }}\n  cancel-in-progress: true\n\n# Default environment variables.\nenv:\n  GITHUB_STEP_TIMEOUT_SMALL: 4\n  GITHUB_STEP_TIMEOUT_MEDIUM: 10\n  GITHUB_STEP_TIMEOUT_LONG: 20\n\njobs:\n  Build",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/docker.yml",
        "start": 19,
        "end": 42,
        "startLoc": {
          "line": 19,
          "column": 5,
          "position": 82
        },
        "endLoc": {
          "line": 42,
          "column": 6,
          "position": 192
        }
      },
      "secondFile": {
        "name": ".github/workflows/native.yml",
        "start": 18,
        "end": 41,
        "startLoc": {
          "line": 18,
          "column": 7,
          "position": 79
        },
        "endLoc": {
          "line": 41,
          "column": 7,
          "position": 189
        }
      }
    },
    {
      "format": "yaml",
      "lines": 23,
      "fragment": "defaults:\n  run:\n    shell: sh\n    working-directory: .\n\nconcurrency:\n  group: ${{ github.workflow }} ${{ github.ref }}\n  cancel-in-progress: true\n\n# Default environment variables.\nenv:\n  GITHUB_STEP_TIMEOUT_SMALL: 4\n  GITHUB_STEP_TIMEOUT_MEDIUM: 10\n  GITHUB_STEP_TIMEOUT_LONG: 20\n\njobs:\n  Build:\n    if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'\n\n    strategy:\n      fail-fast: false\n      matrix:\n        # Override automatic language detection by changing the below list",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/code-analysis.yml",
        "start": 26,
        "end": 48,
        "startLoc": {
          "line": 26,
          "column": 1,
          "position": 114
        },
        "endLoc": {
          "line": 48,
          "column": 67,
          "position": 232
        }
      },
      "secondFile": {
        "name": ".github/workflows/docker.yml",
        "start": 26,
        "end": 48,
        "startLoc": {
          "line": 26,
          "column": 1,
          "position": 112
        },
        "endLoc": {
          "line": 48,
          "column": 8,
          "position": 230
        }
      }
    },
    {
      "format": "yaml",
      "lines": 19,
      "fragment": "uses: actions/setup-java@v4\n      with:\n        # Check available parameters in: https://github.com/actions/setup-java/blob/main/action.yml\n        java-version: 21\n        distribution: zulu\n        java-package: jdk\n        architecture: x64\n        check-latest: false\n        server-id: github\n        server-username: GITHUB_ACTOR\n        server-password: GITHUB_TOKEN\n        settings-path: ~/.gradle\n        overwrite-settings: true\n        gpg-private-key: ''\n        gpg-passphrase: GPG_PASSPHRASE\n        cache: gradle\n        cache-dependency-path: '**/build.gradle'\n\n    - name: Check",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/code-analysis.yml",
        "start": 68,
        "end": 86,
        "startLoc": {
          "line": 68,
          "column": 7,
          "position": 386
        },
        "endLoc": {
          "line": 86,
          "column": 6,
          "position": 491
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 41,
        "end": 59,
        "startLoc": {
          "line": 41,
          "column": 9,
          "position": 244
        },
        "endLoc": {
          "line": 59,
          "column": 4,
          "position": 349
        }
      }
    },
    {
      "format": "yaml",
      "lines": 24,
      "fragment": "defaults:\n  run:\n    shell: sh\n    working-directory: .\n\nconcurrency:\n  group: ${{ github.workflow }} ${{ github.ref }}\n  cancel-in-progress: true\n\n# Default environment variables.\nenv:\n  GITHUB_STEP_TIMEOUT_SMALL: 4\n  GITHUB_STEP_TIMEOUT_MEDIUM: 10\n  GITHUB_STEP_TIMEOUT_LONG: 20\n\njobs:\n  Build:\n    if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'\n\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n        - test",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/android_repeatable.yml",
        "start": 11,
        "end": 34,
        "startLoc": {
          "line": 11,
          "column": 1,
          "position": 37
        },
        "endLoc": {
          "line": 34,
          "column": 5,
          "position": 161
        }
      },
      "secondFile": {
        "name": ".github/workflows/docker.yml",
        "start": 26,
        "end": 49,
        "startLoc": {
          "line": 26,
          "column": 1,
          "position": 112
        },
        "endLoc": {
          "line": 49,
          "column": 8,
          "position": 236
        }
      }
    },
    {
      "format": "yaml",
      "lines": 31,
      "fragment": "}}\n    timeout-minutes: 360\n\n    steps:\n    - name: Checkout\n      timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n      if: success()\n      uses: actions/checkout@v4\n\n    - name: Set up JDK\n      timeout-minutes: ${{ fromJSON(env.GITHUB_STEP_TIMEOUT_MEDIUM) }}\n      if: success()\n      uses: actions/setup-java@v4\n      with:\n        # Check available parameters in: https://github.com/actions/setup-java/blob/main/action.yml\n        java-version: 21\n        distribution: zulu\n        java-package: jdk\n        architecture: x64\n        check-latest: false\n        server-id: github\n        server-username: GITHUB_ACTOR\n        server-password: GITHUB_TOKEN\n        settings-path: ~/.gradle\n        overwrite-settings: true\n        gpg-private-key: ''\n        gpg-passphrase: GPG_PASSPHRASE\n        cache: gradle\n        cache-dependency-path: '**/build.gradle'\n\n    - name: Set",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/android_repeatable.yml",
        "start": 40,
        "end": 70,
        "startLoc": {
          "line": 40,
          "column": 2,
          "position": 232
        },
        "endLoc": {
          "line": 70,
          "column": 4,
          "position": 417
        }
      },
      "secondFile": {
        "name": ".github/workflows/reusable-android.yml",
        "start": 331,
        "end": 59,
        "startLoc": {
          "line": 331,
          "column": 2,
          "position": 2506
        },
        "endLoc": {
          "line": 59,
          "column": 4,
          "position": 349
        }
      }
    },
    {
      "format": "yaml",
      "lines": 25,
      "fragment": "- '!**/CMakeLists*'\n    - '!**/*.java*'\n    - '!**/*.kt*'\n    - '!**/*.c*'\n    - '!**/*.h'\n    - '!**/*.hpp'\n    - '!**/*gradle*'\n\ndefaults:\n  run:\n    shell: sh\n    working-directory: .\n\nconcurrency:\n  group: ${{ github.workflow }} ${{ github.ref }}\n  cancel-in-progress: true\n\n# Default environment variables.\nenv:\n  GITHUB_STEP_TIMEOUT_SMALL: 4\n  GITHUB_STEP_TIMEOUT_MEDIUM: 10\n  GITHUB_STEP_TIMEOUT_LONG: 20\n\njobs:\n  Matrix",
      "tokens": 0,
      "firstFile": {
        "name": ".github/workflows/android.yml",
        "start": 19,
        "end": 43,
        "startLoc": {
          "line": 19,
          "column": 5,
          "position": 82
        },
        "endLoc": {
          "line": 43,
          "column": 7,
          "position": 197
        }
      },
      "secondFile": {
        "name": ".github/workflows/code-analysis.yml",
        "start": 18,
        "end": 42,
        "startLoc": {
          "line": 18,
          "column": 5,
          "position": 79
        },
        "endLoc": {
          "line": 42,
          "column": 6,
          "position": 194
        }
      }
    },
    {
      "format": "bash",
      "lines": 7,
      "fragment": "setPaths() {\n  PATH_TO_SEARCH='./';\n  FILE_TO_SEARCH='MobileRT.jks';\n\n  FIND_MOBILERT=$(find ${PATH_TO_SEARCH} -iname \"${FILE_TO_SEARCH}\" 2> /dev/null | head -n 1 || true);\n  MOBILERT_PATH=$(echo \"${FIND_MOBILERT}\" | sed 's/\\/app\\/.*//g' || true);\n  MOBILERT_PATH",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/profile.sh",
        "start": 49,
        "end": 55,
        "startLoc": {
          "line": 49,
          "column": 1,
          "position": 134
        },
        "endLoc": {
          "line": 55,
          "column": 14,
          "position": 202
        }
      },
      "secondFile": {
        "name": "scripts/plot/plot.sh",
        "start": 36,
        "end": 43,
        "startLoc": {
          "line": 36,
          "column": 1,
          "position": 113
        },
        "endLoc": {
          "line": 43,
          "column": 3,
          "position": 181
        }
      }
    },
    {
      "format": "bash",
      "lines": 7,
      "fragment": ");\n\n  if [ -z \"${MOBILERT_PATH}\" ]; then\n    PATH_TO_SEARCH='/';\n    FIND_MOBILERT=$(find ${PATH_TO_SEARCH} -iname \"MobileRT\" 2> /dev/null | head -n 1);\n    MOBILERT_PATH=$(echo \"${FIND_MOBILERT}\" | sed \"s/\\/app\\/${FILE_TO_SEARCH}/g\");\n    MOBILERT_PATH",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/profile.sh",
        "start": 55,
        "end": 61,
        "startLoc": {
          "line": 55,
          "column": 2,
          "position": 210
        },
        "endLoc": {
          "line": 61,
          "column": 14,
          "position": 277
        }
      },
      "secondFile": {
        "name": "scripts/plot/plot.sh",
        "start": 41,
        "end": 47,
        "startLoc": {
          "line": 41,
          "column": 5,
          "position": 177
        },
        "endLoc": {
          "line": 47,
          "column": 3,
          "position": 244
        }
      }
    },
    {
      "format": "bash",
      "lines": 16,
      "fragment": ";\n\n  set +u;\n  if [ -z \"${PLOT_GRAPHS}\" ]; then\n    PLOT_GRAPHS=${SCRIPTS_PATH}/\"graphs\";\n  fi\n  set -u;\n\n  mkdir -p \"${PLOT_GRAPHS}\";\n  set +u;\n  if [ -z \"${PLOT_GRAPHS}\" ]; then\n    PLOT_GRAPHS=${SCRIPTS_PATH}/\"graphs\";\n  fi\n  set -u;\n}\n###############################################################################",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/profile.sh",
        "start": 84,
        "end": 99,
        "startLoc": {
          "line": 84,
          "column": 2,
          "position": 483
        },
        "endLoc": {
          "line": 99,
          "column": 80,
          "position": 577
        }
      },
      "secondFile": {
        "name": "scripts/plot/plot.sh",
        "start": 50,
        "end": 66,
        "startLoc": {
          "line": 50,
          "column": 7,
          "position": 261
        },
        "endLoc": {
          "line": 66,
          "column": 17,
          "position": 356
        }
      }
    },
    {
      "format": "bash",
      "lines": 23,
      "fragment": "() {\n  set +u;\n  if [ -z \"${1}\" ]; then\n    WIDTH='900';\n    HEIGHT='900';\n  else\n    WIDTH=\"${1}\";\n    HEIGHT=\"${1}\";\n  fi\n  if [ -z \"${1}\" ]; then\n    ASYNC='true';\n  else\n    ASYNC=\"${2}\";\n  fi\n  set -u;\n\n  echo '';\n  echo \"THREAD = ${THREAD}\";\n  echo \"SHADER = ${SHADER}\";\n  echo \"SCENE = ${SCENE}\";\n  echo \"ACC = ${ACC}\";\n\n  # gdb --args \\",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/profile.sh",
        "start": 253,
        "end": 275,
        "startLoc": {
          "line": 253,
          "column": 6,
          "position": 1369
        },
        "endLoc": {
          "line": 275,
          "column": 15,
          "position": 1513
        }
      },
      "secondFile": {
        "name": "scripts/profile.sh",
        "start": 215,
        "end": 235,
        "startLoc": {
          "line": 215,
          "column": 8,
          "position": 1098
        },
        "endLoc": {
          "line": 235,
          "column": 5,
          "position": 1240
        }
      }
    },
    {
      "format": "bash",
      "lines": 20,
      "fragment": ";\n  echo \"THREAD = ${THREAD}\";\n  echo \"SHADER = ${SHADER}\";\n  echo \"SCENE = ${SCENE}\";\n  echo \"ACC = ${ACC}\";\n  echo \"ASYNC = ${ASYNC}\";\n  echo \"WIDTH = ${WIDTH}\";\n  echo \"HEIGHT = ${HEIGHT}\";\n\n  set +u;\n  if [ \"${1}\" = 'release' ]; then\n    echo 'Executing in release mode.';\n    BIN_PATH_EXE=\"${BIN_RELEASE_EXE}\";\n  elif [ \"${1}\" = 'debug' ]; then\n    echo 'Executing in debug mode.';\n    BIN_PATH_EXE=\"${BIN_DEBUG_EXE}\";\n  fi\n  set -u;\n\n  echo",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/profile.sh",
        "start": 402,
        "end": 421,
        "startLoc": {
          "line": 402,
          "column": 2,
          "position": 2551
        },
        "endLoc": {
          "line": 421,
          "column": 5,
          "position": 2691
        }
      },
      "secondFile": {
        "name": "scripts/profile.sh",
        "start": 296,
        "end": 315,
        "startLoc": {
          "line": 296,
          "column": 3,
          "position": 1671
        },
        "endLoc": {
          "line": 315,
          "column": 16,
          "position": 1811
        }
      }
    },
    {
      "format": "bash",
      "lines": 43,
      "fragment": "###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Exit immediately if a command exits with a non-zero status.\n###############################################################################\nset -eu;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Change directory to MobileRT root.\n###############################################################################\nif [ $# -ge 1 ]; then\n  cd \"$(dirname \"${0}\")/..\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Get helper functions.\n###############################################################################\n# shellcheck disable=SC1091\n. scripts/helper_functions.sh;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Execute Shellcheck on this script.\n###############################################################################\nif [ $# -ge 1 ] && command -v shellcheck > /dev/null; then\n  shellcheck \"${0}\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Install dependencies.",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/install_dependencies.sh",
        "start": 21,
        "end": 63,
        "startLoc": {
          "line": 21,
          "column": 1,
          "position": 39
        },
        "endLoc": {
          "line": 63,
          "column": 24,
          "position": 159
        }
      },
      "secondFile": {
        "name": "scripts/run_tests.sh",
        "start": 7,
        "end": 49,
        "startLoc": {
          "line": 7,
          "column": 1,
          "position": 11
        },
        "endLoc": {
          "line": 49,
          "column": 25,
          "position": 131
        }
      }
    },
    {
      "format": "bash",
      "lines": 46,
      "fragment": "###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Exit immediately if a command exits with a non-zero status.\n###############################################################################\nset -eu;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Change directory to MobileRT root.\n###############################################################################\nif [ $# -ge 1 ]; then\n  cd \"$(dirname \"${0}\")/..\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Get helper functions.\n###############################################################################\n# shellcheck disable=SC1091\n. scripts/helper_functions.sh;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Execute Shellcheck on this script.\n###############################################################################\nif [ $# -ge 1 ] && command -v shellcheck > /dev/null; then\n  shellcheck \"${0}\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Set default arguments.\n###############################################################################\ntype='release';\nrecompile",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/compile_android.sh",
        "start": 8,
        "end": 53,
        "startLoc": {
          "line": 8,
          "column": 1,
          "position": 13
        },
        "endLoc": {
          "line": 53,
          "column": 10,
          "position": 142
        }
      },
      "secondFile": {
        "name": "scripts/run_tests.sh",
        "start": 7,
        "end": 52,
        "startLoc": {
          "line": 7,
          "column": 1,
          "position": 11
        },
        "endLoc": {
          "line": 52,
          "column": 20,
          "position": 140
        }
      }
    },
    {
      "format": "bash",
      "lines": 45,
      "fragment": "###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Exit immediately if a command exits with a non-zero status.\n###############################################################################\nset -eu;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Change directory to MobileRT root.\n###############################################################################\nif [ $# -ge 1 ]; then\n  cd \"$(dirname \"${0}\")/..\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Get helper functions.\n###############################################################################\n# shellcheck disable=SC1091\n. scripts/helper_functions.sh;\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Execute Shellcheck on this script.\n###############################################################################\nif [ $# -ge 1 ] && command -v shellcheck > /dev/null; then\n  shellcheck \"${0}\" || return 1;\nfi\n###############################################################################\n###############################################################################\n\n\n###############################################################################\n# Set default arguments.\n###############################################################################\nandroid_api_version",
      "tokens": 0,
      "firstFile": {
        "name": "scripts/check_android.sh",
        "start": 7,
        "end": 51,
        "startLoc": {
          "line": 7,
          "column": 1,
          "position": 11
        },
        "endLoc": {
          "line": 51,
          "column": 20,
          "position": 135
        }
      },
      "secondFile": {
        "name": "scripts/run_tests.sh",
        "start": 7,
        "end": 51,
        "startLoc": {
          "line": 7,
          "column": 1,
          "position": 11
        },
        "endLoc": {
          "line": 51,
          "column": 5,
          "position": 135
        }
      }
    }
  ]
}