diff --git a/files/centos-stream/osdtrace/osd-2:20.2.2-0.el9_dwarf.json b/files/centos-stream/osdtrace/osd-2:20.2.2-0.el9_dwarf.json new file mode 100644 index 0000000..03a19ac --- /dev/null +++ b/files/centos-stream/osdtrace/osd-2:20.2.2-0.el9_dwarf.json @@ -0,0 +1,1338 @@ +{ + "version": "2:20.2.2-0.el9", + "arch": "amd64", + "ceph-osd": { + "build_id": "21c7468038c4f11a99e186d00947ef8c9a3021b3", + "func2pc": { + "BlueStore::_do_write": 11600400, + "BlueStore::_txc_apply_kv": 11460176, + "BlueStore::_txc_calc_cost": 11435504, + "BlueStore::_txc_state_proc": 11461344, + "BlueStore::_wctx_finish": 11552656, + "BlueStore::log_latency": 19943360, + "BlueStore::log_latency_fn": 11641456, + "BlueStore::queue_transactions": 11618560, + "ECBackend::submit_transaction": 10202000, + "OSD::dequeue_op": 6665232, + "OSD::enqueue_op": 6660976, + "OpRequest::mark_flag_point": 15170976, + "OpRequest::mark_flag_point_string": 15171392, + "PrimaryLogPG::execute_ctx": 7596128, + "PrimaryLogPG::log_op_stats": 7603968, + "ReplicatedBackend::do_repop_reply": 8173008, + "ReplicatedBackend::generate_subop": 8216240, + "ReplicatedBackend::repop_commit": 8174224, + "ReplicatedBackend::submit_transaction": 8220640 + }, + "func2vf": { + "BlueStore::_do_write": { + "var_fields": [] + }, + "BlueStore::_txc_apply_kv": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 764, + "pointer": true + } + ] + } + ] + }, + "BlueStore::_txc_calc_cost": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 320, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 640, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + } + ] + }, + "BlueStore::_txc_state_proc": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 320, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 640, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 764, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 456, + "pointer": true + }, + { + "offset": 160, + "pointer": false + } + ] + } + ] + }, + "BlueStore::_wctx_finish": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 320, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 640, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + } + ] + }, + "BlueStore::log_latency": { + "var_fields": [ + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 2, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + } + ] + } + ] + }, + "BlueStore::log_latency_fn": { + "var_fields": [ + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 2, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + } + ] + } + ] + }, + "BlueStore::queue_transactions": { + "var_fields": [] + }, + "ECBackend::submit_transaction": { + "var_fields": [ + { + "location": { + "reg": 7, + "offset": 48, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 7, + "offset": 48, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": false + } + ] + } + ] + }, + "OSD::dequeue_op": { + "var_fields": [ + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 24, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 32, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 32, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + } + ] + }, + "OSD::enqueue_op": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 24, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 200, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 216, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 224, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 208, + "pointer": true + } + ] + } + ] + }, + "OpRequest::mark_flag_point": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + } + ] + }, + "OpRequest::mark_flag_point_string": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": true + } + ] + }, + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 0, + "pointer": false + } + ] + } + ] + }, + "PrimaryLogPG::execute_ctx": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + } + ] + }, + "PrimaryLogPG::log_op_stats": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 1, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 2, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 200, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 24, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + } + ] + }, + "ReplicatedBackend::do_repop_reply": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 24, + "pointer": true + }, + { + "offset": 36, + "pointer": false + }, + { + "offset": 1, + "pointer": false + } + ] + } + ] + }, + "ReplicatedBackend::generate_subop": { + "var_fields": [ + { + "location": { + "reg": 7, + "offset": 8, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 7, + "offset": 8, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 7, + "offset": 96, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + } + ] + }, + "ReplicatedBackend::repop_commit": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 280, + "pointer": true + }, + { + "offset": 16, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 272, + "pointer": true + }, + { + "offset": 168, + "pointer": true + }, + { + "offset": 24, + "pointer": false + } + ] + } + ] + }, + "ReplicatedBackend::submit_transaction": { + "var_fields": [ + { + "location": { + "reg": 7, + "offset": 48, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 7, + "offset": 48, + "stack": true + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 16, + "pointer": false + } + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/files/centos-stream/radostrace/rados-2:20.2.2-0.el9_dwarf.json b/files/centos-stream/radostrace/rados-2:20.2.2-0.el9_dwarf.json new file mode 100644 index 0000000..6288ac2 --- /dev/null +++ b/files/centos-stream/radostrace/rados-2:20.2.2-0.el9_dwarf.json @@ -0,0 +1,388 @@ +{ + "version": "2:20.2.2-0.el9", + "arch": "amd64", + "libceph-common.so.2": { + "build_id": "600bafc3e192ee6b211e43727dbfb46ea42cfbc6", + "func2pc": { + "Objecter::_finish_op": 6670768, + "Objecter::_send_op": 6691104 + }, + "func2vf": { + "Objecter::_finish_op": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 1064, + "pointer": true + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 32, + "pointer": true + }, + { + "offset": 1368, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 400, + "pointer": false + } + ] + } + ] + }, + "Objecter::_send_op": { + "var_fields": [ + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 1064, + "pointer": true + } + ] + }, + { + "location": { + "reg": 5, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 32, + "pointer": true + }, + { + "offset": 1368, + "pointer": true + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 400, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 8, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 8, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 272, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 272, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 336, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 40, + "pointer": true + }, + { + "offset": 336, + "pointer": false + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 464, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 0, + "pointer": false + } + ] + }, + { + "location": { + "reg": 4, + "offset": 0, + "stack": false + }, + "fields": [ + { + "offset": 0, + "pointer": false + }, + { + "offset": 464, + "pointer": true + }, + { + "offset": 0, + "pointer": false + }, + { + "offset": 8, + "pointer": false + } + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/tests/lib/cephadm-setup.sh b/tests/lib/cephadm-setup.sh index 2591c47..0da5b68 100755 --- a/tests/lib/cephadm-setup.sh +++ b/tests/lib/cephadm-setup.sh @@ -17,15 +17,18 @@ source "$_LIB_DIR/log.sh" # cephadm_image_for_release # -# Echo the latest tracked stable point-release image tag for a major Ceph -# release. Bump these as upstream cuts new tags — the goal is "latest -# point release of the named major series" per the test matrix. +# Echo the latest stable point-release image tag for a major Ceph release. +# Bump these as upstream cuts new tags — the goal is "latest point release of +# the named major series" per the test matrix. Track the latest tag that +# actually has a quay.io/ceph/ceph container image (verify before bumping): +# e.g. quincy stays at v17.2.8 because v17.2.9 shipped an el9 RPM but no +# container image, and the cephadm test pulls the container. cephadm_image_for_release() { case "$1" in - quincy) echo "quay.io/ceph/ceph:v17.2.8" ;; - reef) echo "quay.io/ceph/ceph:v18.2.7" ;; - squid) echo "quay.io/ceph/ceph:v19.2.3" ;; - tentacle) echo "quay.io/ceph/ceph:v20.2.1" ;; + quincy) echo "quay.io/ceph/ceph:v17.2.8" ;; # v17.2.9 has no image + reef) echo "quay.io/ceph/ceph:v18.2.8" ;; + squid) echo "quay.io/ceph/ceph:v19.2.4" ;; + tentacle) echo "quay.io/ceph/ceph:v20.2.2" ;; *) err "unknown release: $1"; return 1 ;; esac }