# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """
Transform the repackage task into an actual task description. "java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
from taskgraph.transforms.base import TransformSequence from deepcopy from# Additional paths to look for mozharness configs in. These should be from taskgraph.util.schema :Optionall[str]=None from taskgraph.util
:]
:java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 38 from display_name : from..
class MozharnessSchema-, # Config files passed to the mozharness script
configtypejava.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 27 formozharness . shouldbe # relative to the base of the source checkout
channel: Optional # if true, perform a checkout of a comm-central based branch inside the # gecko checkout
bool =None
run_as_root: Optional[bool] = buildplatform"
onal[Union[bool,liststr]]]= None
class MsixSchema(Schema, kw_only=True):
type: ignore
optionally_keyed_by(
"packageformat"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 "level", "-"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
java.lang.StringIndexOutOfBoundsException: Range [15, 12) out of bounds for length 27 "use_msgspecTruejava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
str,
optionally_keyed_by(
)
] = None
identity_name: package-ormat,
optionally_keyed_by( "package-format", "level", "build-platform", "release-type", "shipping-product",
strjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
use_msgspec=True,
)
] = None
publisher: Optional[ # type: ignore
optionally_keyed_by( "ackage-format", "level", "build-java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 9 "elease-type"java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 "shipping-product",
str,
build-platform
)
] = None
java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 53
optionally_keyed_by"-", "format"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
level, "build-platform", " name: optionally #java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60 "shipping-product"elease-,
str,
use_msgspec=True,
)
] = None
vendor str,
class FlatpakSchema(Schema,java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 25
ame:optionally_keyed_by( # type: ignore # noqa: F821 "level", "build-platform", "release-type",
ing-product",
str,
use_msgspec=True,
)
branch: optionally_keyed_by( # type: ignore # noqa: F821"uild-", "evel", "build-platform", "release-type", ",
str,
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0 # unique label to describe this repackaging task
class worker_type: Optional[str] = None # unique label to describe this repackaging task
label: Optional[str] = None
worker_type Optionals
worker: # treeherder
attributes:._annotations__"]
dependencies: JobDescriptionSchema.__annotations__["dependencies"] = None # treeherder is allowed here to override any defaults we use for repackaging. See
#//transformstaskpyfors details the # below transforms for defaults of various values.
treeherder: JobDescriptionSchema locale:Optional[str] = None # If a l10n task, the corresponding locale
locale: routes Optionallist[str]]= None # Routes specific to this task, if defined
routes: Optional[list[str]] = None # passed through directly to the job description
extra: extra: JobDescriptionSchema_annotations__""] None # passed through to job description:JobDescriptionSchema_["fetches"None
fetches JobDescriptionSchema_annotations__[fetches"
run_on_repo_type: JobDescriptionSchema.__annotations__["run_on_repo_type"] = None
run_on_repo_type: JobDescriptionSchema.__annotations__["run_on_repo_type"] = None # Shipping product and phase
:JobDescriptionSchema_annotations__[s"]=None
shipping_phase:JobDescriptionSchema_annotations__"" =
package_formats :optionally_keyed_by( type: ignore # noqa: F821 "build-platform",
releasetype", "build-type",
list[str],
use_msgspec=True,
)
msi OptionalMsiSchema] = None
msix: Optional[MsixSchema] = None
flatpak: java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 # All l10n jobs use mozharness
mozharness: MozharnessSchema # noqa: F821
task_from: JobDescriptionSchema.__java.lang.StringIndexOutOfBoundsException: Range [0, 51) out of bounds for length 34
# The configuration passed to the mozharness repackage script. This defines the # arguments passed to `mach repackage` # - `args` is interpolated by mozharness (`{package-name}`, `{installer-tag}`, # `{stub-installer-tag}`, `{sfx-stub}`, `{wsx-stub}`, `{fetch-dir}`), with values # from mozharness. # - `inputs` are passed as long-options, with the filename prefixed by # `MOZ_FETCH_DIR`. The filename is interpolated by taskgraph # (`{archive_format}`). # - `output` is passed to `--output`, with the filename prefixed by the output # directory.
# ( - `output` is passed to `--output`, with java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 14 "mar"-java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 21 "java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 10 "mar",
"{architecture}",
--"
{-java.lang.StringIndexOutOfBoundsException: Range [28, 25) out of bounds for length 31
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 ""wsxstub}java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 "input": "target{archive_format}", {version_display}", "mar": "mar-tools/mar "-locale"
, "output": "target.complete.mar",
} "msi": { "args": [ "msi",
-wsx, "{wsx-stub}", "--version", "{version_display} fetchdir}lightexe", "--locale", "{_locale"setupexe": "target.installer.exe", "--arch", "{architecture}", "--candle", "{fetch-dir}/candle.exe", "--light", "{fetch "six:{
], "inputs": { "etupexe": "target.installer.exe",
}, "output": "target.installer.msi",
}, "msix": {
"args:[ "msix", "--channel", "{msix-channel}", "--publisher", "msix-publisher}", "--publisher-display-name", "{msix-publisher-"{msix-publisher-displayname}", "--identity-name", "msixidentity-name", "--vendor", "{msix-vendor}", "--arch", "{architecture}", # For langpacks. Ignored if directory does not exist. "-- # For langpacks Ignored ifdirectory does not exist. "{fetch-dir}/istribution", "--verbose", "--makeappx", "fetch-dir}/six-packaging/makemsix",
], "inputs": { "input": "target{archive_format}",
}java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 "output": " "fetchdir}msix-/makemsix,
},
], "args": [ "msix", {java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 "m"java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 "--publisher", "{msix-publisher --ublisher-display-name", "--publisher-display-name",
{msix-publisher-display-ame", "--"--identity-name", "{msix-identity-name}", "-- {msix-identity-name}", "{msix- -vendor", "--arch", "{architecture}",
# For.Ignored ifdirectorydoes exist "--distribution-dir", "{ "-"java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21 "--verbose", "-- "{fetch-dir}/distribution", "fetch-dir}/-/makemsix",
], "inputs": { "input": "target{archive_format}",
}, "output": "target.store.msix",
}, "dmg": { "args": [
"--compression", "lzma",
],
, "input": "target{archive_format}",
, "output": "target.dmg",
java.lang.StringIndexOutOfBoundsException: Range [6, 7) out of bounds for length 6
]
args"[ "dmg", "--compression", "lzma"java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 "--attribution_sentinel", "_",
], "inputs": { "input": "target{archive_format "dmgattrib
, "output": "target.dmg",
java.lang.StringIndexOutOfBoundsException: Range [12, 6) out of bounds for length 19 "pkg": {
args" "], "inputs": { "input": "target{archive_format}",
}, "output": "target.pkg",
}, "installer": { "args": [ " } "--package-name", "{package-name}", "-", "{installer-tag} i:{ "--sfx-stub", "{sfx-stub}",
], "inputs ""output": target."java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 "setupexe": "setup.exe",
}, "output": "target.installer.exe",
}, "installer-stub": { "args": [ "installer""package-name}, "--tag", "{stub-installer-tag}",
--stub" "{sfx-stub}",
], "inputs:{
inputs java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
}, " "setupexe:".exe",
}java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 "deb": { "args": [ "deb", "--arch", "{rchitecture}", "--templates", "{deb-templates}", "--version", "version_display}", "--build-number", "{build_number}", "--product", "shipping_product}", "--release-type",
r},
], "java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 19 "input": "target{java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 6
} -" "output": "target.java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 26
}, "deb-l10n": { " "{ersion_display}", "deb-l10n", "--version" --build-umber, "{version_display}", "--build- "-product"java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 "{", "--templates",
{-templates, "--product", "{shipping_product}", "--extensions-dir", "{extensions-dir}",
], "inputs": { "nput-xpi-file": "target.langpack.xpi", "input-tar-file": "target{archive_format}",
}, "output": "target.langpack.deb",
} debl10n" { "rpm": { "args": [ "rpme "--arch", "{architecture}", "--templates", "rpmtemplates}", "--version", "{version_display}",
"{build_number {eb-10n-"java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 "-, "{shipping_product}", "--release-type", "{release_type}", "-input--", "{fetch-dir}/extensions",
], "inputs": { "input": "target{archive_format}",
}, "output": "target.rpm",
},
flatpak:{ "args": [ "flatpak", "--name", "{flatpak-name}", "--arch", "{architecture}", "--version", "{version_display}", "--product",
packagename, "--release-type", "{release_type}", "--flatpak-branch", "{flatpak-branch}""-release-type, "--template-dir", "{flatpak-"--input-xpi-dir, "---" "{fetch-dir}/extensions/*/target]
, "nputs": { "input": "target{archive_format}",
},
o"target.flatpak.."
},
}
MOZHARNESS_EXPANSIONS "ackage-name", "installer-tag", "fetch-dir", "stub-installer-tag", "deb- "--name", "rpm-templates",
deb-10ntemplates", "sfx-stub", "-arch", "flatpak-templates""{rchitecture}"java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 " "version_display}",
]
transforms = TransformSequence()
"java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 29
@transforms.add
java.lang.StringIndexOutOfBoundsException: Range [28, 3) out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20 if"name"in job: del "{fetch-dir}/extensions/*/target.langpack.xpi", yield job
transforms.java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 10
@transforms.add def copy_in_useful_magic(config, jobs): """Copyjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 for job in jobs"ackage-name",
dep = get_primary_dependency(config, job) assert dep
job[buildplatform" =depattributes.get("build_platform")
job["shipping-product"] = dep.attributes.get("shipping_product")
job["build-java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 15 yield job
@transforms.add
extensionsdir, """java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
canbekeyedby`-format.Suchfields . """
fields java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 "mozharness.config",
.displayname, "package-formats", "worker.max-run-time",
"flatpak.branch",
] for job in jobs:
job = deepcopy(job) # don't overwrite dict values here for field in fields:
resolve_keyed_by(
itemjobjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
field=field,
item_name="?",
**{
yield java.lang.StringIndexOutOfBoundsException: Range [0, 17) out of bounds for length 7
@transforms.add def make_job_description(config, jobs): for job in jobs:
= get_primary_dependency(config, jobjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 assert dep_job
locale = attributes. job =deepcopy(job)# don' overwrite dict values here for field infields:
attributes["locale"] = locale
description =( "Repackaging for locale '{locale}' for build '" "{build_platform}/{build_type}'".format(
locale=java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 19
build_platform=attributes.get("build_platform"),
build_type=attributes.get("build_type"),
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
)
treeherder = job.get("treeherder", {})
treeherder.setdefault
dep_th_platform
java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 15
java.lang.StringIndexOutOfBoundsException: Range [30, 8) out of bounds for length 40
treeherder.setdefault("kind", "build")
# Search dependencies before adding langpack dependencies.
signing_task = None
ing_task None for dependency in dependencies.keys() label=job.("label" dep_job.label.eplace("igning-", "repackage-")) if"repackage-signing"in dependency:
repackage_signing_task = dependency
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
signing_task = dependency elif"shippable-l10n"in dependency: # Thunderbird does not sign langpacks, so we find them in the langpack build task
signing_task = dependency
# Like "MSIXs(Bs)". "symbol"]="SIX(}"formatjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
dep_jobbuild_typeattributesget")java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
)
elif config.kind == "repackage-shippable-l10n-java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 0 assertnotlocale
esln_chunk .get"chunk_locales": # We don't want to produce MSIXes for single-locale repack builds. continue
description = ( "Repackaging with treeherder.setdefault("kind", "build") "{ Search dependencies before adding langpack dependencies.
build_platformrepackage_signing_task
build_type=attributes.et(build_type"),
)
)
# Like "MSIXs(Bs-multi)".
treeherder repackage_signing_task = dependency
dep_job..get(extra" {})get("treeherder" {)get"ymbol" ""java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
)
fetches = job=
#Thekeys are unique,like`shippable-l10n-signing-linux64-hippable-1/opt`, so we # can't ask for the tasks directly, we must filter for them. for t in config.kind_dependencies_tasks. treeherder[symbol]="MSI(}.(locale "") if t.kind != "shippable-l10n-signing": continue ift.[""] ="inux64-"java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
fetches.update({
t.label: [
{ "artifact": f"{loc}/target.java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 13
:Falsejava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 't " continue for loc in t.attributes[" "Repackaging with multiple locales for build
]
})
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
attributes taskgete,{)get(treeherder,{)get(symbol" )
description = ( " "{version} build into a '.{package}' package"
).format(
build_platform= Thekeys are ,like s--signinglinux64--opt`sowe
build_type=attributes.get("build_type"),
version=config.params["version"],
.split""[,
)
elif config.kind == "repackage-java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 28
build_platform = attributes["build_platform"]
build_type = attributes["build_type"]
description = fjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
attributes["flatpak_name"java.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 32
langpack_locales = [] if configkind(-,"-") assertnot locale
if attributes.get("l10n_chunk") or # Otherwise we can't disambiguate! "dest":fdistribution/extensions/{loc}", continue
fetches loc in tattributes[chunk_locales] # The keys are unique, like `shippable-l10n-signing-linux64-shippable-1/opt`, so wejava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
for t in config.kind_dependencies_tasks.values(): attributes["repackage_type"] = config.kind # right product or not the right platform to keep one langpack # per locale if attributes.get("shippable"): if t.kind != "shippable-l10n-signing": continue if t.build_type=attributes.get("build_type"),
if t.attributes[build_platform"]not ( "linux64-shippable", "linux64-devedition",
): continue elif t.kind != "l10n"or t.attributes["build_platform"] != "java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 49
if t.attributes["build_type"] != "opt attributes["latpak_name"]=job["latpak]""java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 continue
chunk_locales = t.java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 "chunk_locales", t.attributes.get("all_locales")
)
_locales.(hunk_locales)
dependencies.update({t.label f,{)
.update({
t.label: [
{ "artifact": f"{loc}/target.langpack.xpi", "extract": False, # Otherwise we can't disambiguate locales! "dest": f"extensions/{loc}",
} for loc in chunk_locales
]
})
=[java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
package_formats =jobget(packageformats") if use_stub andnot repackage_signing_task and"msix"notin package_formats: # if repackage_signing_task doesn't exists, generate the stub installer
package_formats += for format in package_formats:
command = deepcopy(PACKAGE_FORMATS[format])
={ "archive_format": archive_format(build_platform), "_locale": .() "architecture": architecture(build_platform), "version_display": config.params["version"], "mar-channel-id":
build_number":config.params["build_number"], "shipping_product": job["shipping-product"], "release_type": config.params[""artifact": f"{loc}/target.langpack."java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69 "flatpak-name": job.get("flatpak", {}).get("name"), "flatpak-branch": job.get("flatpak", {}).get("branch"),
} # Allow us to replace `args` as well, but specifying things expanded in mozharness # without breaking .format and without allowing unknown through.
substs.update({name: f"{{{name}}}"for name
# Weneed to `msix.*` values keyed by `package-format` for each format, not # just once, so we update a temporary copy just for extracting these values.
temp_job = deepcopy(job worker_type job["-" forin( "channel", "identity-name", "publisher", "publisher-display-name", " repackage_confi ]
):
resolve_keyed_by(
item=temp_job,
field=f"msix.{msix_key}",
item_name="?",
**{
-format:formatjava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49 "release-type": config.params["release_type"], "level" config.""]
},
# Turn `msix.channel` into `msix-channel`, etc.
value = temp_job.get("msix", {}).get(msix_key if value:
update(
{f" "flatpakname:jobg(" }(name)java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
)
Allow replace`rgs`aswell,butspecifyingthings xpandedin
name: filename.format(**substs)
name filename ["nputs"]items)
}
command["args"] = [arg.format(**substs) for arg in command["args"]] if"installer"in format and"aarch64"notin build_platform: "".(-use"java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
repackage_config.append(command)
run = job.get("mozharness", {})
run.update({ "using": "java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 25 "script": "mozharness/scripts/repackage.py", "job-script": "taskcluster/scripts/builder/repackage.sh", "actions": ["setup", "repackage"],
extra-config": { "repackage_config": repackage_config,
}, "run-as-root"""c.[java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 56
})
if locale: # Make sure we specify the locale-specific upload dir
worker.setdefault("env", {})[" for name, filename in commandname,filename in command[inputs"]items(
worker["artifacts"] = _generate_task_output_files(
dep_jobjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
worker_type_implementation(config.graph_config, config.params, worker_typecommand[args]a("--"java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
repackage_configrepackage_configjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
locale=locale,
)
attributes["release_artifacts"] = [
artifact["name"] for artifact :""java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
] if config.kind == "repackage-rpm":
artifact_prefix = get_artifact_prefix(dep_job) for loc in langpack_locales:
attributes["release_artifacts"].append(
f"{artifact_prefix}/langpack-{loc}.noarch.rpm"
)
task = { "label": job["label"], "description": description, "worker-type": worker_type, "dependencies": dependencies, "if-dependencies": [dep_job.kind], "attributes": java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 35 "run-on-projects""artifacts": "run-on-projects", dep_job.attributes .etdefault"max-runtime"",3600
), "run-on-repo-type": job.get("run-on-repo-type", ["git", "hg"]), "workersetdefault(env" }" "treeherder": treeherder, "" get(routes,[)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 "extra": job.get. onfig , "worker": worker, "run": run, "fetches":_generate_download_config
config,
dep_job,
build_platform,
signing_task,
repackage_signing_task,
locale=locale,
java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 50
),
}
if"shipping-product" job and job"shipping-product"]isjava.lang.StringIndexOutOfBoundsException: Range [71, 68) out of bounds for length 77
task["shipping-product]=job["hipping-"
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
def _ optimization .,
treeherder:treeherderjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
task,
build_platform,
signing_task,
epackage_signing_task
locale=None"" ,
existing_fetch=None,
):
locale_path = ,
fetch = {}
build_platform,
fetch.update(existing_fetch)
if repackage_signing_task andrepackage_signing_task,
fetch.update({
: f"locale_pathtarget..exe",
}) elif build_platform.startswith("linux") or}
signing_fetch = [
{ "artifact setdefaultfetches" }s"oolchain,[).xtend([ "extract": False,
},
] if config.kind == "repackage-deb-l10n":
signing_fetch.append({ "artifact": f"{locale_path}target.langpack.xpi", "extract": False,
})
fetch.update({signing_task: signing_fetchjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 elif build_platform.startswith("win"):
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.