| /linux/mm/damon/ |
| H A D | sysfs-schemes.c | 18 struct kobject kobj; member 34 sysfs_region->kobj = (struct kobject){}; in damon_sysfs_scheme_region_alloc() 42 static ssize_t start_show(struct kobject *kobj, struct kobj_attribute *attr, in start_show() argument 45 struct damon_sysfs_scheme_region *region = container_of(kobj, in start_show() 46 struct damon_sysfs_scheme_region, kobj); in start_show() 51 static ssize_t end_show(struct kobject *kobj, struct kobj_attribute *attr, in end_show() argument 54 struct damon_sysfs_scheme_region *region = container_of(kobj, in end_show() 55 struct damon_sysfs_scheme_region, kobj); in end_show() 60 static ssize_t nr_accesses_show(struct kobject *kobj, in nr_accesses_show() argument 63 struct damon_sysfs_scheme_region *region = container_of(kobj, in nr_accesses_show() [all …]
|
| H A D | sysfs.c | 19 struct kobject kobj; member 28 static ssize_t start_show(struct kobject *kobj, struct kobj_attribute *attr, in start_show() argument 31 struct damon_sysfs_region *region = container_of(kobj, in start_show() 32 struct damon_sysfs_region, kobj); in start_show() 37 static ssize_t start_store(struct kobject *kobj, struct kobj_attribute *attr, in start_store() argument 40 struct damon_sysfs_region *region = container_of(kobj, in start_store() 41 struct damon_sysfs_region, kobj); in start_store() 47 static ssize_t end_show(struct kobject *kobj, struct kobj_attribute *attr, in end_show() argument 50 struct damon_sysfs_region *region = container_of(kobj, in end_show() 51 struct damon_sysfs_region, kobj); in end_show() [all …]
|
| H A D | sysfs-common.c | 27 range->kobj = (struct kobject){}; in damon_sysfs_ul_range_alloc() 34 static ssize_t min_show(struct kobject *kobj, struct kobj_attribute *attr, in min_show() argument 37 struct damon_sysfs_ul_range *range = container_of(kobj, in min_show() 38 struct damon_sysfs_ul_range, kobj); in min_show() 43 static ssize_t min_store(struct kobject *kobj, struct kobj_attribute *attr, in min_store() argument 46 struct damon_sysfs_ul_range *range = container_of(kobj, in min_store() 47 struct damon_sysfs_ul_range, kobj); in min_store() 59 static ssize_t max_show(struct kobject *kobj, struct kobj_attribute *attr, in max_show() argument 62 struct damon_sysfs_ul_range *range = container_of(kobj, in max_show() 63 struct damon_sysfs_ul_range, kobj); in max_show() [all …]
|
| /linux/include/linux/ |
| H A D | sysfs.h | 170 struct kobject *kobj, struct attribute *attr, int n) \ 172 if (n == 0 && !name##_group_visible(kobj)) \ 174 return name##_attr_visible(kobj, attr, n); \ 202 struct kobject *kobj, struct attribute *a, int n) \ 204 if (n == 0 && !name##_group_visible(kobj)) \ 217 struct kobject *kobj, const struct bin_attribute *attr, int n) \ 219 if (n == 0 && !name##_group_visible(kobj)) \ 221 return name##_attr_visible(kobj, attr, n); \ 226 struct kobject *kobj, const struct bin_attribute *a, int n) \ 228 if (n == 0 && !name##_group_visible(kobj)) \ [all …]
|
| H A D | kobject.h | 84 __printf(2, 3) int kobject_set_name(struct kobject *kobj, const char *name, ...); 85 __printf(2, 0) int kobject_set_name_vargs(struct kobject *kobj, const char *fmt, va_list vargs); 87 static inline const char *kobject_name(const struct kobject *kobj) in kobject_name() argument 89 return kobj->name; in kobject_name() 92 void kobject_init(struct kobject *kobj, const struct kobj_type *ktype); 93 __printf(3, 4) __must_check int kobject_add(struct kobject *kobj, 96 __printf(4, 5) __must_check int kobject_init_and_add(struct kobject *kobj, 101 void kobject_del(struct kobject *kobj); 108 struct kobject *kobject_get(struct kobject *kobj); 109 struct kobject * __must_check kobject_get_unless_zero(struct kobject *kobj); [all …]
|
| /linux/drivers/gpu/drm/xe/ |
| H A D | xe_hw_engine_class_sysfs.c | 35 static void xe_hw_engine_sysfs_kobj_release(struct kobject *kobj) in xe_hw_engine_sysfs_kobj_release() argument 37 kfree(kobj); in xe_hw_engine_sysfs_kobj_release() 40 static ssize_t xe_hw_engine_class_sysfs_attr_show(struct kobject *kobj, in xe_hw_engine_class_sysfs_attr_show() argument 44 struct xe_device *xe = kobj_to_xe(kobj); in xe_hw_engine_class_sysfs_attr_show() 51 ret = kattr->show(kobj, kattr, buf); in xe_hw_engine_class_sysfs_attr_show() 58 static ssize_t xe_hw_engine_class_sysfs_attr_store(struct kobject *kobj, in xe_hw_engine_class_sysfs_attr_store() argument 63 struct xe_device *xe = kobj_to_xe(kobj); in xe_hw_engine_class_sysfs_attr_store() 70 ret = kattr->store(kobj, kattr, buf, count); in xe_hw_engine_class_sysfs_attr_store() 92 static ssize_t job_timeout_max_store(struct kobject *kobj, in job_timeout_max_store() argument 96 struct xe_hw_engine_class_intf *eclass = kobj_to_eclass(kobj); in job_timeout_max_store() [all …]
|
| /linux/fs/sysfs/ |
| H A D | group.c | 34 static umode_t __first_visible(const struct attribute_group *grp, struct kobject *kobj) in __first_visible() argument 37 return grp->is_visible(kobj, grp->attrs[0], 0); in __first_visible() 40 return grp->is_visible_const(kobj, grp->attrs[0], 0); in __first_visible() 43 return grp->is_bin_visible(kobj, grp->bin_attrs[0], 0); in __first_visible() 48 static int create_files(struct kernfs_node *parent, struct kobject *kobj, in create_files() argument 69 mode = grp->is_visible(kobj, *attr, i); in create_files() 71 mode = grp->is_visible_const(kobj, *attr, i); in create_files() 102 mode = grp->is_bin_visible(kobj, *bin_attr, i); in create_files() 108 size = grp->bin_size(kobj, *bin_attr, i); in create_files() 129 static int internal_create_group(struct kobject *kobj, int update, in internal_create_group() argument [all …]
|
| H A D | symlink.c | 67 static int sysfs_do_create_link(struct kobject *kobj, struct kobject *target, in sysfs_do_create_link() argument 72 if (!kobj) in sysfs_do_create_link() 75 parent = kobj->sd; in sysfs_do_create_link() 89 int sysfs_create_link(struct kobject *kobj, struct kobject *target, in sysfs_create_link() argument 92 return sysfs_do_create_link(kobj, target, name, 1); in sysfs_create_link() 105 int sysfs_create_link_nowarn(struct kobject *kobj, struct kobject *target, in sysfs_create_link_nowarn() argument 108 return sysfs_do_create_link(kobj, target, name, 0); in sysfs_create_link_nowarn() 121 void sysfs_delete_link(struct kobject *kobj, struct kobject *targ, in sysfs_delete_link() argument 132 if (targ->sd && kernfs_ns_enabled(kobj->sd)) in sysfs_delete_link() 135 kernfs_remove_by_name_ns(kobj->sd, name, ns); in sysfs_delete_link() [all …]
|
| /linux/fs/nfs/ |
| H A D | sysfs.c | 24 static void nfs_kset_release(struct kobject *kobj) in nfs_kset_release() argument 26 struct kset *kset = container_of(kobj, struct kset, kobj); in nfs_kset_release() 31 const struct kobject *kobj) in nfs_netns_object_child_ns_type() argument 50 ret = kobject_set_name(&nfs_kset->kobj, "nfs"); in nfs_sysfs_init() 56 nfs_kset->kobj.parent = fs_kobj; in nfs_sysfs_init() 57 nfs_kset->kobj.ktype = &nfs_kset_type; in nfs_sysfs_init() 58 nfs_kset->kobj.kset = NULL; in nfs_sysfs_init() 74 static ssize_t nfs_netns_identifier_show(struct kobject *kobj, in nfs_netns_identifier_show() argument 77 struct nfs_netns_client *c = container_of(kobj, in nfs_netns_identifier_show() 96 static ssize_t nfs_netns_identifier_store(struct kobject *kobj, in nfs_netns_identifier_store() argument [all …]
|
| /linux/drivers/edac/ |
| H A D | edac_device_sysfs.c | 23 #define to_edacdev(k) container_of(k, struct edac_device_ctl_info, kobj) 113 #define to_ctl_info(k) container_of(k, struct edac_device_ctl_info, kobj) 117 static ssize_t edac_dev_ctl_info_show(struct kobject *kobj, in edac_dev_ctl_info_show() argument 120 struct edac_device_ctl_info *edac_dev = to_ctl_info(kobj); in edac_dev_ctl_info_show() 129 static ssize_t edac_dev_ctl_info_store(struct kobject *kobj, in edac_dev_ctl_info_store() argument 133 struct edac_device_ctl_info *edac_dev = to_ctl_info(kobj); in edac_dev_ctl_info_store() 202 static void edac_device_ctrl_master_release(struct kobject *kobj) in edac_device_ctrl_master_release() argument 204 struct edac_device_ctl_info *edac_dev = to_edacdev(kobj); in edac_device_ctrl_master_release() 244 memset(&edac_dev->kobj, 0, sizeof(struct kobject)); in edac_device_register_sysfs_main_kobj() 257 err = kobject_init_and_add(&edac_dev->kobj, &ktype_device_ctrl, in edac_device_register_sysfs_main_kobj() [all …]
|
| /linux/drivers/block/rnbd/ |
| H A D | rnbd-srv-sysfs.c | 27 static void rnbd_srv_dev_release(struct kobject *kobj) in rnbd_srv_dev_release() argument 31 dev = container_of(kobj, struct rnbd_srv_dev, dev_kobj); in rnbd_srv_dev_release() 61 bdev_kobj = &disk_to_dev(bdev->bd_disk)->kobj; in rnbd_srv_create_dev_sysfs() 85 static ssize_t read_only_show(struct kobject *kobj, struct kobj_attribute *attr, in read_only_show() argument 90 sess_dev = container_of(kobj, struct rnbd_srv_sess_dev, kobj); in read_only_show() 98 static ssize_t access_mode_show(struct kobject *kobj, in access_mode_show() argument 104 sess_dev = container_of(kobj, struct rnbd_srv_sess_dev, kobj); in access_mode_show() 113 static ssize_t mapping_path_show(struct kobject *kobj, in mapping_path_show() argument 118 sess_dev = container_of(kobj, struct rnbd_srv_sess_dev, kobj); in mapping_path_show() 126 static ssize_t rnbd_srv_dev_session_force_close_show(struct kobject *kobj, in rnbd_srv_dev_session_force_close_show() argument [all …]
|
| /linux/drivers/infiniband/ulp/rtrs/ |
| H A D | rtrs-clt-sysfs.c | 19 static void rtrs_clt_path_release(struct kobject *kobj) in rtrs_clt_path_release() argument 23 clt_path = container_of(kobj, struct rtrs_clt_path, kobj); in rtrs_clt_path_release() 33 static void rtrs_clt_path_stats_release(struct kobject *kobj) in rtrs_clt_path_stats_release() argument 37 stats = container_of(kobj, struct rtrs_clt_stats, kobj_stats); in rtrs_clt_path_stats_release() 198 static ssize_t rtrs_clt_state_show(struct kobject *kobj, in rtrs_clt_state_show() argument 203 clt_path = container_of(kobj, struct rtrs_clt_path, kobj); in rtrs_clt_state_show() 213 static ssize_t rtrs_clt_reconnect_show(struct kobject *kobj, in rtrs_clt_reconnect_show() argument 219 static ssize_t rtrs_clt_reconnect_store(struct kobject *kobj, in rtrs_clt_reconnect_store() argument 226 clt_path = container_of(kobj, struct rtrs_clt_path, kobj); in rtrs_clt_reconnect_store() 243 static ssize_t rtrs_clt_disconnect_show(struct kobject *kobj, in rtrs_clt_disconnect_show() argument [all …]
|
| H A D | rtrs-srv-sysfs.c | 16 static void rtrs_srv_release(struct kobject *kobj) in rtrs_srv_release() argument 20 srv_path = container_of(kobj, struct rtrs_srv_path, kobj); in rtrs_srv_release() 29 static ssize_t rtrs_srv_disconnect_show(struct kobject *kobj, in rtrs_srv_disconnect_show() argument 35 static ssize_t rtrs_srv_disconnect_store(struct kobject *kobj, in rtrs_srv_disconnect_store() argument 43 srv_path = container_of(kobj, struct rtrs_srv_path, kobj); in rtrs_srv_disconnect_store() 56 sysfs_remove_file_self(&srv_path->kobj, &attr->attr); in rtrs_srv_disconnect_store() 66 static ssize_t rtrs_srv_hca_port_show(struct kobject *kobj, in rtrs_srv_hca_port_show() argument 73 srv_path = container_of(kobj, typeof(*srv_path), kobj); in rtrs_srv_hca_port_show() 82 static ssize_t rtrs_srv_hca_name_show(struct kobject *kobj, in rtrs_srv_hca_name_show() argument 88 srv_path = container_of(kobj, struct rtrs_srv_path, kobj); in rtrs_srv_hca_name_show() [all …]
|
| /linux/arch/powerpc/kernel/ |
| H A D | secvar-sysfs.c | 21 static ssize_t format_show(struct kobject *kobj, struct kobj_attribute *attr, in format_show() argument 38 static ssize_t size_show(struct kobject *kobj, struct kobj_attribute *attr, in size_show() argument 44 rc = secvar_ops->get(kobj->name, strlen(kobj->name) + 1, NULL, &dsize); in size_show() 47 pr_err("Error retrieving %s variable size %d\n", kobj->name, rc); in size_show() 54 static ssize_t data_read(struct file *filep, struct kobject *kobj, in data_read() argument 62 rc = secvar_ops->get(kobj->name, strlen(kobj->name) + 1, NULL, &dsize); in data_read() 65 pr_err("Error getting %s variable size %d\n", kobj->name, rc); in data_read() 74 rc = secvar_ops->get(kobj->name, strlen(kobj->name) + 1, data, &dsize); in data_read() 76 pr_err("Error getting %s variable %d\n", kobj->name, rc); in data_read() 87 static ssize_t update_write(struct file *filep, struct kobject *kobj, in update_write() argument [all …]
|
| /linux/net/sunrpc/ |
| H A D | sysfs.c | 28 static void rpc_sysfs_object_release(struct kobject *kobj) in rpc_sysfs_object_release() argument 30 kfree(kobj); in rpc_sysfs_object_release() 34 rpc_sysfs_object_child_ns_type(const struct kobject *kobj) in rpc_sysfs_object_child_ns_type() argument 49 struct kobject *kobj; in rpc_sysfs_object_alloc() local 51 kobj = kzalloc(sizeof(*kobj), GFP_KERNEL); in rpc_sysfs_object_alloc() 52 if (kobj) { in rpc_sysfs_object_alloc() 53 kobj->kset = kset; in rpc_sysfs_object_alloc() 54 if (kobject_init_and_add(kobj, &rpc_sysfs_object_type, in rpc_sysfs_object_alloc() 56 return kobj; in rpc_sysfs_object_alloc() 57 kobject_put(kobj); in rpc_sysfs_object_alloc() [all …]
|
| /linux/mm/ |
| H A D | hugetlb_sysfs.c | 26 static struct hstate *kobj_to_node_hstate(struct kobject *kobj, int *nidp); 28 static struct hstate *kobj_to_hstate(struct kobject *kobj, int *nidp) in kobj_to_hstate() argument 33 if (hstate_kobjs[i] == kobj) { in kobj_to_hstate() 39 return kobj_to_node_hstate(kobj, nidp); in kobj_to_hstate() 42 static ssize_t nr_hugepages_show_common(struct kobject *kobj, in nr_hugepages_show_common() argument 49 h = kobj_to_hstate(kobj, &nid); in nr_hugepages_show_common() 59 struct kobject *kobj, const char *buf, in nr_hugepages_store_common() argument 71 h = kobj_to_hstate(kobj, &nid); in nr_hugepages_store_common() 75 static ssize_t nr_hugepages_show(struct kobject *kobj, in nr_hugepages_show() argument 78 return nr_hugepages_show_common(kobj, attr, buf); in nr_hugepages_show() [all …]
|
| /linux/drivers/vfio/mdev/ |
| H A D | mdev_sysfs.c | 31 static ssize_t mdev_type_attr_show(struct kobject *kobj, in mdev_type_attr_show() argument 35 struct mdev_type *type = to_mdev_type(kobj); in mdev_type_attr_show() 43 static ssize_t mdev_type_attr_store(struct kobject *kobj, in mdev_type_attr_store() argument 48 struct mdev_type *type = to_mdev_type(kobj); in mdev_type_attr_store() 135 static umode_t mdev_types_core_is_visible(struct kobject *kobj, in mdev_types_core_is_visible() argument 139 !to_mdev_type(kobj)->parent->mdev_driver->show_description) in mdev_types_core_is_visible() 154 static void mdev_type_release(struct kobject *kobj) in mdev_type_release() argument 156 struct mdev_type *type = to_mdev_type(kobj); in mdev_type_release() 158 pr_debug("Releasing group %s\n", kobj->name); in mdev_type_release() 173 type->kobj.kset = parent->mdev_types_kset; in mdev_type_add() [all …]
|
| /linux/arch/powerpc/platforms/pseries/ |
| H A D | vas-sysfs.c | 22 struct kobject kobj; member 26 #define to_caps_entry(entry) container_of(entry, struct vas_caps_entry, kobj) 121 static ssize_t vas_type_show(struct kobject *kobj, struct attribute *attr, in vas_type_show() argument 128 centry = to_caps_entry(kobj); in vas_type_show() 138 static ssize_t vas_type_store(struct kobject *kobj, struct attribute *attr, in vas_type_store() argument 145 centry = to_caps_entry(kobj); in vas_type_store() 154 static void vas_type_release(struct kobject *kobj) in vas_type_release() argument 156 struct vas_caps_entry *centry = to_caps_entry(kobj); in vas_type_release() 178 struct kobject **kobj) in vas_caps_kobj_name() argument 183 kobject_init(¢ry->kobj, &vas_qos_attr_type); in vas_caps_kobj_name() [all …]
|
| /linux/arch/powerpc/platforms/powernv/ |
| H A D | opal-elog.c | 21 struct kobject kobj; member 28 #define to_elog_obj(x) container_of(x, struct elog_obj, kobj) 79 if (sysfs_remove_file_self(&elog_obj->kobj, &attr->attr)) { in elog_ack_store() 81 kobject_put(&elog_obj->kobj); in elog_ack_store() 95 static ssize_t elog_attr_show(struct kobject *kobj, in elog_attr_show() argument 103 elog = to_elog_obj(kobj); in elog_attr_show() 111 static ssize_t elog_attr_store(struct kobject *kobj, in elog_attr_store() argument 119 elog = to_elog_obj(kobj); in elog_attr_store() 132 static void elog_release(struct kobject *kobj) in elog_release() argument 136 elog = to_elog_obj(kobj); in elog_release() [all …]
|
| H A D | opal-dump.c | 21 struct kobject kobj; member 28 #define to_dump_obj(x) container_of(x, struct dump_obj, kobj) 95 if (sysfs_remove_file_self(&dump_obj->kobj, &attr->attr)) { in dump_ack_store() 97 kobject_put(&dump_obj->kobj); in dump_ack_store() 159 static ssize_t dump_attr_show(struct kobject *kobj, in dump_attr_show() argument 167 dump = to_dump_obj(kobj); in dump_attr_show() 175 static ssize_t dump_attr_store(struct kobject *kobj, in dump_attr_store() argument 183 dump = to_dump_obj(kobj); in dump_attr_store() 196 static void dump_release(struct kobject *kobj) in dump_release() argument 200 dump = to_dump_obj(kobj); in dump_release() [all …]
|
| /linux/Documentation/translations/zh_CN/core-api/ |
| H A D | kobject.rst | 67 struct kobject kobj; 71 如果你有一个uio_map结构体,找到其嵌入的kobject只是一个使用kobj成员的问题。 89 struct uio_map *u_map = container_of(kp, struct uio_map, kobj); 95 struct kobject kobj; 99 #define to_map(map) container_of(map, struct uio_map, kobj) 103 struct uio_map *map = to_map(kobj); 112 void kobject_init(struct kobject *kobj, struct kobj_type *ktype); 117 int kobject_add(struct kobject *kobj, struct kobject *parent, 121 联,在调用kobject_add()之前必须分配kobj->kset。如果kset与kobject相关联,则 128 int kobject_rename(struct kobject *kobj, const char *new_name); [all …]
|
| /linux/drivers/w1/slaves/ |
| H A D | w1_ds2408.c | 67 static ssize_t state_read(struct file *filp, struct kobject *kobj, in state_read() argument 71 dev_dbg(&kobj_to_w1_slave(kobj)->dev, in state_read() 73 bin_attr->attr.name, kobj, (unsigned int)off, count, buf); in state_read() 76 return _read_reg(kobj_to_w1_slave(kobj), W1_F29_REG_LOGIG_STATE, buf); in state_read() 79 static ssize_t output_read(struct file *filp, struct kobject *kobj, in output_read() argument 83 dev_dbg(&kobj_to_w1_slave(kobj)->dev, in output_read() 85 bin_attr->attr.name, kobj, (unsigned int)off, count, buf); in output_read() 88 return _read_reg(kobj_to_w1_slave(kobj), in output_read() 92 static ssize_t activity_read(struct file *filp, struct kobject *kobj, in activity_read() argument 96 dev_dbg(&kobj_to_w1_slave(kobj)->dev, in activity_read() [all …]
|
| /linux/lib/ |
| H A D | kobject_uevent.c | 191 int kobject_synth_uevent(struct kobject *kobj, const char *buf, size_t count) in kobject_synth_uevent() argument 207 r = kobject_uevent_env(kobj, action, no_uuid_envp); in kobject_synth_uevent() 221 r = kobject_uevent_env(kobj, action, env->envp); in kobject_synth_uevent() 225 devpath = kobject_get_path(kobj, GFP_KERNEL); in kobject_synth_uevent() 235 static int kobj_usermode_filter(struct kobject *kobj) in kobj_usermode_filter() argument 239 ops = kobj_ns_ops(kobj); in kobj_usermode_filter() 243 ns = kobj->ktype->namespace(kobj); in kobj_usermode_filter() 382 static int kobject_uevent_net_broadcast(struct kobject *kobj, in kobject_uevent_net_broadcast() argument 393 ops = kobj_ns_ops(kobj); in kobject_uevent_net_broadcast() 394 if (!ops && kobj->kset) { in kobject_uevent_net_broadcast() [all …]
|
| /linux/drivers/of/ |
| H A D | kobj.c | 10 return node && node->kobj.state_initialized; in of_node_is_initialized() 16 return node && node->kobj.state_in_sysfs; in of_node_is_attached() 21 static void of_node_release(struct kobject *kobj) in of_node_release() argument 31 static ssize_t of_node_property_read(struct file *filp, struct kobject *kobj, in of_node_property_read() argument 40 static const char *safe_name(const struct kobject *kobj, const char *orig_name) in safe_name() argument 47 while (i < 16 && (kn = sysfs_get_dirent(kobj->sd, name))) { in safe_name() 58 kobject_name(kobj), name); in safe_name() 77 pp->attr.attr.name = safe_name(&np->kobj, pp->name); in __of_add_property_sysfs() 82 rc = sysfs_create_bin_file(&np->kobj, &pp->attr); in __of_add_property_sysfs() 92 sysfs_remove_bin_file(&np->kobj, &prop->attr); in __of_sysfs_remove_bin_file() [all …]
|
| /linux/fs/xfs/ |
| H A D | xfs_sysfs.h | 23 struct xfs_kobj *kobj = to_kobj(kobject); in xfs_sysfs_release() local 24 complete(&kobj->complete); in xfs_sysfs_release() 29 struct xfs_kobj *kobj, in xfs_sysfs_init() argument 38 init_completion(&kobj->complete); in xfs_sysfs_init() 39 err = kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name); in xfs_sysfs_init() 41 kobject_put(&kobj->kobject); in xfs_sysfs_init() 48 struct xfs_kobj *kobj) in xfs_sysfs_del() argument 50 kobject_del(&kobj->kobject); in xfs_sysfs_del() 51 kobject_put(&kobj->kobject); in xfs_sysfs_del() 52 wait_for_completion(&kobj->complete); in xfs_sysfs_del()
|