{
  "_class" : "hudson.matrix.MatrixBuild",
  "actions" : [
    {
      "_class" : "hudson.model.ParametersAction",
      "parameters" : [
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "BRANCH",
          "value" : "pmaier/otatest"
        },
        {
          "_class" : "hudson.model.StringParameterValue",
          "name" : "EMAIL_NOTIFICATIONS",
          "value" : ""
        }
      ]
    },
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "Started by user pmaier@sysmocom.de",
          "userId" : "pmaier",
          "userName" : "pmaier@sysmocom.de"
        }
      ]
    },
    {
      "_class" : "jenkins.metrics.impl.TimeInQueueAction",
      "blockedDurationMillis" : 0,
      "blockedTimeMillis" : 0,
      "buildableDurationMillis" : 0,
      "buildableTimeMillis" : 0,
      "buildingDurationMillis" : 878391,
      "executingTimeMillis" : 878391,
      "executorUtilization" : 1.0,
      "subTaskCount" : 0,
      "waitingDurationMillis" : 0,
      "waitingTimeMillis" : 0
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1987,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
            "branch" : [
              {
                "SHA1" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
                "name" : "origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
            "branch" : [
              {
                "SHA1" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
                "name" : "origin/master"
              }
            ]
          }
        },
        "refs/remotes/origin/pmaier/ara-m" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1320,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "8f289234f74045496c3752bf1bb9397302f3e912",
            "branch" : [
              {
                "SHA1" : "8f289234f74045496c3752bf1bb9397302f3e912",
                "name" : "refs/remotes/origin/pmaier/ara-m"
              }
            ]
          },
          "revision" : {
            "SHA1" : "8f289234f74045496c3752bf1bb9397302f3e912",
            "branch" : [
              {
                "SHA1" : "8f289234f74045496c3752bf1bb9397302f3e912",
                "name" : "refs/remotes/origin/pmaier/ara-m"
              }
            ]
          }
        },
        "refs/remotes/origin/pmaier/keepfiles" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1353,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "3d815859830197b9c55e0a49a1bd2532f71285e1",
            "branch" : [
              {
                "SHA1" : "3d815859830197b9c55e0a49a1bd2532f71285e1",
                "name" : "refs/remotes/origin/pmaier/keepfiles"
              }
            ]
          },
          "revision" : {
            "SHA1" : "3d815859830197b9c55e0a49a1bd2532f71285e1",
            "branch" : [
              {
                "SHA1" : "3d815859830197b9c55e0a49a1bd2532f71285e1",
                "name" : "refs/remotes/origin/pmaier/keepfiles"
              }
            ]
          }
        },
        "refs/remotes/origin/pmaier/fixapdu" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1421,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "568e8ae9b817ec2473907bfdd30870410890ffb0",
            "branch" : [
              {
                "SHA1" : "568e8ae9b817ec2473907bfdd30870410890ffb0",
                "name" : "refs/remotes/origin/pmaier/fixapdu"
              }
            ]
          },
          "revision" : {
            "SHA1" : "568e8ae9b817ec2473907bfdd30870410890ffb0",
            "branch" : [
              {
                "SHA1" : "568e8ae9b817ec2473907bfdd30870410890ffb0",
                "name" : "refs/remotes/origin/pmaier/fixapdu"
              }
            ]
          }
        },
        "refs/remotes/origin/pmaier/aramtest" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1467,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6",
            "branch" : [
              {
                "SHA1" : "6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6",
                "name" : "refs/remotes/origin/pmaier/aramtest"
              }
            ]
          },
          "revision" : {
            "SHA1" : "6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6",
            "branch" : [
              {
                "SHA1" : "6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6",
                "name" : "refs/remotes/origin/pmaier/aramtest"
              }
            ]
          }
        },
        "refs/remotes/origin/osmith/wip" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1816,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "e4ea1c997348370ba1d7415bfd926ac873b58c87",
            "branch" : [
              {
                "SHA1" : "e4ea1c997348370ba1d7415bfd926ac873b58c87",
                "name" : "refs/remotes/origin/osmith/wip"
              }
            ]
          },
          "revision" : {
            "SHA1" : "e4ea1c997348370ba1d7415bfd926ac873b58c87",
            "branch" : [
              {
                "SHA1" : "e4ea1c997348370ba1d7415bfd926ac873b58c87",
                "name" : "refs/remotes/origin/osmith/wip"
              }
            ]
          }
        },
        "refs/remotes/origin/pmaier/otatest" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 1988,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
            "branch" : [
              {
                "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
                "name" : "refs/remotes/origin/pmaier/otatest"
              }
            ]
          },
          "revision" : {
            "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
            "branch" : [
              {
                "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
                "name" : "refs/remotes/origin/pmaier/otatest"
              }
            ]
          }
        },
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 402,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "4f888a0414101dee4f20aa12579491fcc71707b3",
            "branch" : [
              {
                "SHA1" : "4f888a0414101dee4f20aa12579491fcc71707b3",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "4f888a0414101dee4f20aa12579491fcc71707b3",
            "branch" : [
              {
                "SHA1" : "4f888a0414101dee4f20aa12579491fcc71707b3",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
        "branch" : [
          {
            "SHA1" : "cf68b7c79211109392a785beccb08778fa321c2f",
            "name" : "refs/remotes/origin/pmaier/otatest"
          }
        ]
      },
      "remoteUrls" : [
        "https://gerrit.osmocom.org/pysim"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#1988",
  "duration" : 878391,
  "estimatedDuration" : 1133096,
  "executor" : None,
  "fullDisplayName" : "master-pysim #1988",
  "id" : "1988",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 1988,
  "queueId" : 25850,
  "result" : "FAILURE",
  "timestamp" : 1770379139658,
  "url" : "https://jenkins.osmocom.org/jenkins/view/SDR/job/master-pysim/1988/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "742baeab56b6a5f9d6a15daf20ebdd06a9b2c985",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor ConfigurableParameter, Iccid, Imsi\u000a\u000aMain points/rationales of the refactoring, details below:\u000a1) common validation implementation\u000a2) offer classmethods\u000a\u000aThe new features are optional, and will be heavily used by batch\u000apersonalization patches coming soon.\u000a\u000aImplement Iccid and Imsi to use the new way, with a common abstract\u000aDecimalParam implementation.\u000a\u000aSo far leave the other parameter classes working as they always did, to\u000afollow suit in subsequent commits.\u000a\u000aDetails:\u000a\u000a1) common validation implementation:\u000aThere are very common validation steps in the various parameter\u000aimplementations. It is more convenient and much more readable to\u000aimplement those once and set simple validation parameters per subclass.\u000aSo there now is a validate_val() classmethod, which subclasses can use\u000aas-is to apply the validation parameters -- or subclasses can override\u000atheir cls.validate_val() for specialized validation.\u000a(Those subclasses that this patch doesn't touch still override the\u000aself.validate() instance method. Hence they still work as before this\u000apatch, but don't use the new common features yet.)\u000a\u000a2) offer stateless classmethods:\u000aIt is useful for...\u000a- batch processing of multiple profiles (in upcoming patches) and\u000a- user input validation\u000ato be able to have classmethods that do what self.validate() and\u000aself.apply() do, but do not modify any self.* members.\u000aSo far the paradigm was to create a class instance to keep state about\u000athe value. This remains available, but in addition we make available the\u000aparadigm of a singleton that is stateless (the classmethods).\u000aUsing self.validate() and self.apply() still work the same as before\u000athis patch, i.e. via self.input_value and self.value -- but in addition,\u000athere are now classmethods that don't touch self.* members.\u000a\u000aRelated: SYS#6768\u000aChange-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "742baeab56b6a5f9d6a15daf20ebdd06a9b2c985",
        "msg" : "personalization: refactor ConfigurableParameter, Iccid, Imsi",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "21641816ea7132c1ad14227f15eac3678d0cec86",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor Puk\u000a\u000aImplement abstract DecimalHexParam, and use it to refactor Puk1 and Puk2\u000ato the new ConfigurableParameter implementation style.\u000a\u000aDecimalHexParam will also be used for Pin and Adm soon.\u000a\u000aChange-Id: I271e6c030c890778ab7af9ab3bc7997e22018f6a\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "21641816ea7132c1ad14227f15eac3678d0cec86",
        "msg" : "personalization: refactor Puk",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "d5b570b01d806571ff705ccca12c35c16071c17a",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor Pin, Adm\u000a\u000aRefactor Pin1, Pin2, Adm1 and Adm2 to the new ConfigurableParameter\u000aimplementation style.\u000a\u000aChange-Id: I54aef10b6d4309398d4b779a3740a7d706d68603\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "d5b570b01d806571ff705ccca12c35c16071c17a",
        "msg" : "personalization: refactor Pin, Adm",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "ae656c66a3b3a382644ca895d808bca0dad9f2b2",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor AlgorithmID, K, Opc\u000a\u000aRefactor AlgorithmID, K, Opc to the new ConfigurableParameter\u000aimplementation style.\u000a\u000aK and Opc use a common abstract BinaryParam.\u000a\u000aNote from the future: AlgorithmID so far takes \"raw\" int values, but\u000awill turn to be an \"enum\" parameter with predefined meaningful strings\u000ain I71c2ec1b753c66cb577436944634f32792353240\u000a\u000aChange-Id: I6296fdcfd5d2ed313c4aade57ff43cc362375848\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "ae656c66a3b3a382644ca895d808bca0dad9f2b2",
        "msg" : "personalization: refactor AlgorithmID, K, Opc",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "1e9885610585a6b1b22c969b45aaf736fcba4d55",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor SdKey\u000a\u000aRefactor SdKey (and subclasses) to the new ConfigurableParameter\u000aimplementation style, keeping the same implementation.\u000a\u000aBut duly note that this implementation does not work!\u000aIt correctly patches pe.decoded[], but that gets overridden by\u000aProfileElementSD._pre_encode().\u000a\u000aFor a fix, see I07dfc378705eba1318e9e8652796cbde106c6a52.\u000a\u000aChange-Id: I427ea851bfa28b2b045e70a19a9e35d361f0d393\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "1e9885610585a6b1b22c969b45aaf736fcba4d55",
        "msg" : "personalization: refactor SdKey",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "1c082da0ee6cbdcfd08c053f4a2577043f831b9c",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: refactor SmspTpScAddr\u000a\u000aRefactor SmspTpScAddr to the new ConfigurableParameter implementation\u000astyle.\u000a\u000aChange-Id: I2600369e195e9f5aed7f4e6ff99ae273ed3ab3bf\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "1c082da0ee6cbdcfd08c053f4a2577043f831b9c",
        "msg" : "personalization: refactor SmspTpScAddr",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "db17529136e480563bb4bc86d799511672b60d4a",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: set some typical parameter names\u000a\u000aThese names better match what humans expect to read, for example \"PIN1\"\u000ainstead of \"Pin1\".\u000a\u000a(We still fall back to the __class__.__name__ if a subclass omits a\u000aspecific name, see the ConfigurableParameter init.)\u000a\u000aChange-Id: I31f390d634e58c384589c50a33ca45d6f86d4e10\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "db17529136e480563bb4bc86d799511672b60d4a",
        "msg" : "personalization: set some typical parameter names",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/saip/personalization.py"
        ],
        "commitId" : "ccc1a047abfd367c2a906cee1733b998b115d6a3",
        "timestamp" : 1769801653000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "personalization: set example input values\u000a\u000aFor all ConfigurableParameter subclasses, provide an example_input.\u000a\u000aThis may be useful for downstream projects' user interaction, to suggest\u000aa value or prefill an input field, as appropriate.\u000a\u000aRelated: SYS#6768\u000aChange-Id: I2672fedcbc32cb7a6cb0c233a4a22112bd9aae03\u000a",
        "date" : "2026-01-30 19:34:13 +0000",
        "id" : "ccc1a047abfd367c2a906cee1733b998b115d6a3",
        "msg" : "personalization: set example input values",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/saip/personalization.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim-trace.py",
          "pySim/apdu_source/stdin_hex.py"
        ],
        "commitId" : "429b12c8b5064f3abc7ca4c1d748cd5544d15b29",
        "timestamp" : 1769822568000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "pySim-trace: pySim.apdu_source.stdin_hex\u000a\u000aThis introduces an \"APDU source\" for pySim-trace which enables the\u000adecoding of APDUs that are copy+pasted from elsewhere, for example\u000aAPDU logs in text form created by proprietary tools, or to decode\u000apersonalization scripts or the like.\u000a\u000aChange-Id: I5aacf13b7c27cea9efd42f01dacca61068c3aa33\u000a",
        "date" : "2026-01-31 01:22:48 +0000",
        "id" : "429b12c8b5064f3abc7ca4c1d748cd5544d15b29",
        "msg" : "pySim-trace: pySim.apdu_source.stdin_hex",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim-trace.py"
          },
          {
            "editType" : "add",
            "file" : "pySim/apdu_source/stdin_hex.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "tests/pySim-prog_test/sysmoISIM-SJA2.ok",
          "tests/pySim-prog_test/sysmosim-gr1.ok",
          "tests/pySim-prog_test/Wavemobile-SIM.ok",
          "tests/pySim-prog_test/sysmoISIM-SJA5.ok",
          "tests/pySim-prog_test/sysmoUSIM-SJS1.ok",
          "tests/pySim-prog_test/Fairwaves-SIM.ok",
          "pySim-read.py",
          "tests/pySim-prog_test/fakemagicsim.ok"
        ],
        "commitId" : "ae912455822dce0bea3e0c98abc4c827653c6fe8",
        "timestamp" : 1769823032000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "Print SMSC in pySim-read.py\u000a\u000aChange-Id: I17067b68086316d51fd71ba77049874605594e3f\u000a",
        "date" : "2026-01-31 01:30:32 +0000",
        "id" : "ae912455822dce0bea3e0c98abc4c827653c6fe8",
        "msg" : "Print SMSC in pySim-read.py",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/Wavemobile-SIM.ok"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/sysmoISIM-SJA2.ok"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/sysmosim-gr1.ok"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/Fairwaves-SIM.ok"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/fakemagicsim.ok"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/sysmoISIM-SJA5.ok"
          },
          {
            "editType" : "edit",
            "file" : "pySim-read.py"
          },
          {
            "editType" : "edit",
            "file" : "tests/pySim-prog_test/sysmoUSIM-SJS1.ok"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/card_key_provider.py"
        ],
        "commitId" : "1f2db11d31d28b796dfe44adad74e36c4cb75b48",
        "timestamp" : 1769823132000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "pySim/card_key_provider: fix typo in keys\u000a\u000aChange-Id: Ie76f351ae221da2a0aab65c311fafe8ae6d63663\u000a",
        "date" : "2026-01-31 01:32:12 +0000",
        "id" : "1f2db11d31d28b796dfe44adad74e36c4cb75b48",
        "msg" : "pySim/card_key_provider: fix typo in keys",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/card_key_provider.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/csv-to-pgsql.py"
        ],
        "commitId" : "e62f160775f8fa99e83a0b20acaf04054172a912",
        "timestamp" : 1769823147000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "contrib/csv-to-pgsql: add missing copyright header\u000a\u000aChange-Id: Iad8b2c1abb6a80764d05c823fbd03a9eae0ec0ab\u000a",
        "date" : "2026-01-31 01:32:27 +0000",
        "id" : "e62f160775f8fa99e83a0b20acaf04054172a912",
        "msg" : "contrib/csv-to-pgsql: add missing copyright header",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/csv-to-pgsql.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/es9p_client.py"
        ],
        "commitId" : "4e35e2c357f3a959ba04aff3990816d01f5a3b08",
        "timestamp" : 1769856508000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "es9p_client: Fix type conversion in installation result notification\u000a\u000aThe asn.1 encoder expects bytes-like objects, we cannot simply pass\u000ahex-strings to it without conversion\u000a\u000aChange-Id: I83ad047e043dc6b3462b188ce6dd0b2cc0e52e87\u000a",
        "date" : "2026-01-31 10:48:28 +0000",
        "id" : "4e35e2c357f3a959ba04aff3990816d01f5a3b08",
        "msg" : "es9p_client: Fix type conversion in installation result notification",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/es9p_client.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/es9p_client.py"
        ],
        "commitId" : "22c3797a89bc3e93c82194dab1af7ffa18f2b977",
        "timestamp" : 1769856508000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "es9p_client: MAke install notification code execute at all\u000a\u000aThe caller specified 'install' but the do_notification() function\u000acompared with 'download' :(\u000a\u000aChange-Id: I2d441cfbc1457688eb163301d3d91a1f1fdc7a8c\u000a",
        "date" : "2026-01-31 10:48:28 +0000",
        "id" : "22c3797a89bc3e93c82194dab1af7ffa18f2b977",
        "msg" : "es9p_client: MAke install notification code execute at all",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/es9p_client.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/http_json_api.py"
        ],
        "commitId" : "e0a9e73267f18fed1d81874938f5e2831afd12e6",
        "timestamp" : 1769857112000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "http_json_api: Only require Content-Type if response body is non-empty\u000a\u000aIf there is an empty body returned, such as in the case of the response\u000ato an es9p notification, then it is of course also legal to not set the\u000acontent-type header.\u000a\u000aThis patch fixes an exception when talking to certain SM-DP+ with\u000aes9p_client.py:\u000a\u000aDEBUG:pySim.esim.http_json_api:HTTP RSP-STS: [204] hdr: {'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'}\u000aDEBUG:pySim.esim.http_json_api:HTTP RSP: b''\u000a{'X-Admin-Protocol': 'gsma/rsp/v2.5.0', 'Date': 'Wed, 28 Jan 2026 18:26:39 GMT', 'Server': 'REDACTED'}\u000a<Response [204]>\u000aTraceback (most recent call last):\u000a  File \"gprojects/git/pysim/es9p/../contrib/es9p_client.py\", line 315, in <module>\u000a    c.do_notification()\u000a    ~~~~~~~~~~~~~~~~~^^\u000a  File \"projects/git/pysim/es9p/../contrib/es9p_client.py\", line 159, in do_notification\u000a    res = self.peer.call_handleNotification(data)\u000a  File \"projects/git/pysim/contrib/pySim/esim/es9p.py\", line 174, in call_handleNotification\u000a    return self.handleNotification.call(data)\u000a           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\u000a  File \"projects/git/pysim/contrib/pySim/esim/http_json_api.py\", line 335, in call\u000a    if not response.headers.get('Content-Type').startswith(req_headers['Content-Type']):\u000a           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\u000aAttributeError: 'NoneType' object has no attribute 'startswith'\u000a\u000aChange-Id: I99e8f167b7bb869c5ff6d908ba673dac87fef71a\u000a",
        "date" : "2026-01-31 11:58:32 +0100",
        "id" : "e0a9e73267f18fed1d81874938f5e2831afd12e6",
        "msg" : "http_json_api: Only require Content-Type if response body is non-empty",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/http_json_api.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "pySim/esim/http_json_api.py"
        ],
        "commitId" : "0a1c5a27d744805c65e61f60cd8c0d70f020ec3a",
        "timestamp" : 1770205558000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "esim/http_json_api: add missing apidoc\u000a\u000aChange-Id: Ibf9cf06197c9e3203c7a3ea5d77004f0ca41cd3f\u000a",
        "date" : "2026-02-04 12:45:58 +0100",
        "id" : "0a1c5a27d744805c65e61f60cd8c0d70f020ec3a",
        "msg" : "esim/http_json_api: add missing apidoc",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "pySim/esim/http_json_api.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.cfg",
          "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.sh",
          "contrib/smpp-ota-tool.py",
          "requirements.txt",
          "setup.py",
          "contrib/jenkins.sh",
          "pySim/ota.py"
        ],
        "commitId" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
        "timestamp" : 1770213907000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
          "fullName" : "laforge"
        },
        "authorEmail" : "laforge@osmocom.org",
        "comment" : "tests/pySim-smpp2sim_test: add integration test\u000a\u000aAt the moment pySim.ota codebase is not covered by any of the\u000aintegration tests (we have only normal unittests so far). To\u000aincrease the test coverage, let's add an integration test that\u000asends exchanges an RFM OTA-SMS with a real-world card.\u000a\u000aHowever, there is no tool avaliable that can be used as an SMPP\u000aclient for pySim-smpp2sim yet. Let's use smpp_ota_apdu2.py on\u000alaforge/ota to develop a tool that we can use to exchange SMS-TPDUs\u000athat contain remote APDU scripts (RFM/RAM).\u000a\u000aFinally let's use the tool we have created as a basis to create\u000aan integration test that exchanges an SMS-TPDU with the RFM\u000aapplication of a sysmoISIM-SJA5 card. The testcase shall pass\u000awhen we get the expected response from the card.\u000a\u000aRelated: OS#6868\u000aChange-Id: If25e38be004cc1c7aeeb130431831377e78fe28d\u000a",
        "date" : "2026-02-04 14:05:07 +0000",
        "id" : "15691233e1b5c1f151b36ca199f2f49581d049cd",
        "msg" : "tests/pySim-smpp2sim_test: add integration test",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "setup.py"
          },
          {
            "editType" : "add",
            "file" : "contrib/smpp-ota-tool.py"
          },
          {
            "editType" : "add",
            "file" : "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.cfg"
          },
          {
            "editType" : "edit",
            "file" : "contrib/jenkins.sh"
          },
          {
            "editType" : "edit",
            "file" : "pySim/ota.py"
          },
          {
            "editType" : "edit",
            "file" : "requirements.txt"
          },
          {
            "editType" : "add",
            "file" : "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.sh"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "8422bed36d0f6c83d4c9056e7d2a6a711f17f449",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool/cosmetic: fix sourcecode formatting\u000a\u000aChange-Id: Icbce41ffac097d2ef8714bc8963536ba54a77db2\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "8422bed36d0f6c83d4c9056e7d2a6a711f17f449",
        "msg" : "contrib/smpp-ota-tool/cosmetic: fix sourcecode formatting",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "44fd6dd28aabb034b78fba3109a006edf7f4e019",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool/cosmetic: use lazy formatting for logging\u000a\u000aChange-Id: I2540472a50b7a49b5a67d088cbdd4a2228eef8f4\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "44fd6dd28aabb034b78fba3109a006edf7f4e019",
        "msg" : "contrib/smpp-ota-tool/cosmetic: use lazy formatting for logging",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "defa40fb0df348f5fcbbfef70273323d6896ccb9",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool: use correct kid index\u000a\u000a(normally KID index and KIC index should be the same since mixing keys\u000ais a concidered as a security violation. However, in this tool we\u000awant to allow users to specify different indexes for KIC and KIC so that\u000athey can make tests to make sure their cards correctly reject mixed up\u000akey indexes)\u000a\u000aChange-Id: I8847ccc39e4779971187e7877b8902fca7f8bfc1\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "defa40fb0df348f5fcbbfef70273323d6896ccb9",
        "msg" : "contrib/smpp-ota-tool: use correct kid index",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "c0ea5107705f5994361dfad2e1d91ddb35adcac2",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool: warn about mixed up KIC/KIC indexes\u000a\u000aCards usually have multiple sets of KIC, KID (and KIK). The keys\u000aare selected through an index. However, mixing keys from different\u000asets is concidered as a security violation and cards should reject\u000asuch configurations.\u000a\u000aLet's print a warning to make users aware that something is off.\u000a\u000aChange-Id: Ieb4e14145baba1c2cb4a237b612b04694940f402\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "c0ea5107705f5994361dfad2e1d91ddb35adcac2",
        "msg" : "contrib/smpp-ota-tool: warn about mixed up KIC/KIC indexes",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "110368b1225a4fa9f197e5d36e30189aeae0db72",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool: add missing usage helpstrings\u000a\u000aChange-Id: Ic1521ba11b405f311a30fdb3585ad518375669ae\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "110368b1225a4fa9f197e5d36e30189aeae0db72",
        "msg" : "contrib/smpp-ota-tool: add missing usage helpstrings",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "contrib/smpp-ota-tool.py"
        ],
        "commitId" : "39451dee90db1feaf4c2e4c729ca90bf560b9496",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "contrib/smpp-ota-tool: fix boolean commandline parameters\u000a\u000aBoolean parameters should be false by default and use store_true when\u000aset.\u000a\u000aChange-Id: I0652b48d2ea5efbaaf5bc147aa8cef7ab8b0861d\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "39451dee90db1feaf4c2e4c729ca90bf560b9496",
        "msg" : "contrib/smpp-ota-tool: fix boolean commandline parameters",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "contrib/smpp-ota-tool.py"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.sh",
          "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.cfg",
          "tests/pySim-smpp2sim_test/testcase_triple_des_cbc2_rfm.cfg",
          "tests/pySim-smpp2sim_test/testcase_aes_cbc_cmac_rfm.cfg"
        ],
        "commitId" : "cf68b7c79211109392a785beccb08778fa321c2f",
        "timestamp" : 1770376818000,
        "author" : {
          "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
          "fullName" : "pmaier@sysmocom.de"
        },
        "authorEmail" : "pmaier@sysmocom.de",
        "comment" : "tests/pySim-smpp2sim_test: add testcase for aes_cbc/aes_cmac\u000a\u000aExtend the existing test script so that it can handle multiple\u000atestcases, add a new testcase to test OTA-SMS (RFM) with AES\u000aencryption.\u000a\u000aChange-Id: I1f10504f3a29a8c74a17991632d932819fecfa5a\u000aRelated: OS#6868\u000a",
        "date" : "2026-02-06 12:20:18 +0100",
        "id" : "cf68b7c79211109392a785beccb08778fa321c2f",
        "msg" : "tests/pySim-smpp2sim_test: add testcase for aes_cbc/aes_cmac",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.sh"
          },
          {
            "editType" : "delete",
            "file" : "tests/pySim-smpp2sim_test/pySim-smpp2sim_test.cfg"
          },
          {
            "editType" : "add",
            "file" : "tests/pySim-smpp2sim_test/testcase_triple_des_cbc2_rfm.cfg"
          },
          {
            "editType" : "add",
            "file" : "tests/pySim-smpp2sim_test/testcase_aes_cbc_cmac_rfm.cfg"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/pmaier",
      "fullName" : "pmaier@sysmocom.de"
    },
    {
      "absoluteUrl" : "https://jenkins.osmocom.org/jenkins/user/laforge",
      "fullName" : "laforge"
    }
  ],
  "runs" : [
    {
      "number" : 1988,
      "url" : "https://jenkins.osmocom.org/jenkins/view/SDR/job/master-pysim/JOB_TYPE=docs,a1=default,a3=default,a4=default,label=osmocom-master/1988/"
    },
    {
      "number" : 1988,
      "url" : "https://jenkins.osmocom.org/jenkins/view/SDR/job/master-pysim/JOB_TYPE=pylint,a1=default,a3=default,a4=default,label=osmocom-master/1988/"
    },
    {
      "number" : 1988,
      "url" : "https://jenkins.osmocom.org/jenkins/view/SDR/job/master-pysim/JOB_TYPE=test,a1=default,a3=default,a4=default,label=simtester/1988/"
    }
  ]
}