Skip to content

Commit 2f9ddf3

Browse files
committed
Fix typos “an”→“a” and a few different ones that appeared in the same search
1 parent 2396fad commit 2f9ddf3

File tree

36 files changed

+43
-43
lines changed

36 files changed

+43
-43
lines changed

compiler/rustc_codegen_llvm/src/intrinsic.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,7 @@ fn generic_simd_intrinsic(
10311031
// vector mask and returns an unsigned integer containing the most
10321032
// significant bit (MSB) of each lane.
10331033

1034-
// If the vector has less than 8 lanes, an u8 is returned with zeroed
1034+
// If the vector has less than 8 lanes, a u8 is returned with zeroed
10351035
// trailing bits.
10361036
let expected_int_bits = in_len.max(8);
10371037
match ret_ty.kind() {

compiler/rustc_hir/src/hir.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -974,7 +974,7 @@ pub enum PatKind<'hir> {
974974
/// Invariant: `pats.len() >= 2`.
975975
Or(&'hir [Pat<'hir>]),
976976

977-
/// A path pattern for an unit struct/variant or a (maybe-associated) constant.
977+
/// A path pattern for a unit struct/variant or a (maybe-associated) constant.
978978
Path(QPath<'hir>),
979979

980980
/// A tuple pattern (e.g., `(a, b)`).

compiler/rustc_lint_defs/src/builtin.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3371,7 +3371,7 @@ declare_lint! {
33713371
}
33723372

33733373
declare_lint! {
3374-
/// The `unsupported_calling_conventions` lint is output whenever there is an use of the
3374+
/// The `unsupported_calling_conventions` lint is output whenever there is a use of the
33753375
/// `stdcall`, `fastcall`, `thiscall`, `vectorcall` calling conventions (or their unwind
33763376
/// variants) on targets that cannot meaningfully be supported for the requested target.
33773377
///

compiler/rustc_metadata/src/rmeta/decoder.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ crate struct CrateMetadata {
6262
// --- Some data pre-decoded from the metadata blob, usually for performance ---
6363
/// Properties of the whole crate.
6464
/// NOTE(eddyb) we pass `'static` to a `'tcx` parameter because this
65-
/// lifetime is only used behind `Lazy`, and therefore acts like an
65+
/// lifetime is only used behind `Lazy`, and therefore acts like a
6666
/// universal (`for<'tcx>`), that is paired up with whichever `TyCtxt`
6767
/// is being used to decode those values.
6868
root: CrateRoot<'static>,

compiler/rustc_middle/src/mir/interpret/value.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -376,27 +376,27 @@ impl<'tcx, Tag: Provenance> Scalar<Tag> {
376376
self.to_bits(sz)
377377
}
378378

379-
/// Converts the scalar to produce an `u8`. Fails if the scalar is a pointer.
379+
/// Converts the scalar to produce a `u8`. Fails if the scalar is a pointer.
380380
pub fn to_u8(self) -> InterpResult<'static, u8> {
381381
self.to_unsigned_with_bit_width(8).map(|v| u8::try_from(v).unwrap())
382382
}
383383

384-
/// Converts the scalar to produce an `u16`. Fails if the scalar is a pointer.
384+
/// Converts the scalar to produce a `u16`. Fails if the scalar is a pointer.
385385
pub fn to_u16(self) -> InterpResult<'static, u16> {
386386
self.to_unsigned_with_bit_width(16).map(|v| u16::try_from(v).unwrap())
387387
}
388388

389-
/// Converts the scalar to produce an `u32`. Fails if the scalar is a pointer.
389+
/// Converts the scalar to produce a `u32`. Fails if the scalar is a pointer.
390390
pub fn to_u32(self) -> InterpResult<'static, u32> {
391391
self.to_unsigned_with_bit_width(32).map(|v| u32::try_from(v).unwrap())
392392
}
393393

394-
/// Converts the scalar to produce an `u64`. Fails if the scalar is a pointer.
394+
/// Converts the scalar to produce a `u64`. Fails if the scalar is a pointer.
395395
pub fn to_u64(self) -> InterpResult<'static, u64> {
396396
self.to_unsigned_with_bit_width(64).map(|v| u64::try_from(v).unwrap())
397397
}
398398

399-
/// Converts the scalar to produce an `u128`. Fails if the scalar is a pointer.
399+
/// Converts the scalar to produce a `u128`. Fails if the scalar is a pointer.
400400
pub fn to_u128(self) -> InterpResult<'static, u128> {
401401
self.to_unsigned_with_bit_width(128)
402402
}

compiler/rustc_middle/src/mir/tcx.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ impl BorrowKind {
265265
BorrowKind::Shared => hir::Mutability::Not,
266266

267267
// We have no type corresponding to a unique imm borrow, so
268-
// use `&mut`. It gives all the capabilities of an `&uniq`
268+
// use `&mut`. It gives all the capabilities of a `&uniq`
269269
// and hence is a safe "over approximation".
270270
BorrowKind::Unique => hir::Mutability::Mut,
271271

compiler/rustc_middle/src/mir/visit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1202,7 +1202,7 @@ pub enum NonUseContext {
12021202
StorageDead,
12031203
/// User type annotation assertions for NLL.
12041204
AscribeUserTy,
1205-
/// The data of an user variable, for debug info.
1205+
/// The data of a user variable, for debug info.
12061206
VarDebugInfo,
12071207
}
12081208

compiler/rustc_middle/src/query/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1733,7 +1733,7 @@ rustc_queries! {
17331733
}
17341734

17351735
/// Performs an HIR-based well-formed check on the item with the given `HirId`. If
1736-
/// we get an `Umimplemented` error that matches the provided `Predicate`, return
1736+
/// we get an `Unimplemented` error that matches the provided `Predicate`, return
17371737
/// the cause of the newly created obligation.
17381738
///
17391739
/// This is only used by error-reporting code to get a better cause (in particular, a better

compiler/rustc_middle/src/ty/closure.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ impl BorrowKind {
434434
ImmBorrow => hir::Mutability::Not,
435435

436436
// We have no type corresponding to a unique imm borrow, so
437-
// use `&mut`. It gives all the capabilities of an `&uniq`
437+
// use `&mut`. It gives all the capabilities of a `&uniq`
438438
// and hence is a safe "over approximation".
439439
UniqueImmBorrow => hir::Mutability::Mut,
440440
}

compiler/rustc_middle/src/ty/codec.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ where
209209
impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for Ty<'tcx> {
210210
#[allow(rustc::usage_of_ty_tykind)]
211211
fn decode(decoder: &mut D) -> Result<Ty<'tcx>, D::Error> {
212-
// Handle shorthands first, if we have an usize > 0x80.
212+
// Handle shorthands first, if we have a usize > 0x80.
213213
if decoder.positioned_at_shorthand() {
214214
let pos = decoder.read_usize()?;
215215
assert!(pos >= SHORTHAND_OFFSET);
@@ -228,7 +228,7 @@ impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for Ty<'tcx> {
228228
impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for ty::Binder<'tcx, ty::PredicateKind<'tcx>> {
229229
fn decode(decoder: &mut D) -> Result<ty::Binder<'tcx, ty::PredicateKind<'tcx>>, D::Error> {
230230
let bound_vars = Decodable::decode(decoder)?;
231-
// Handle shorthands first, if we have an usize > 0x80.
231+
// Handle shorthands first, if we have a usize > 0x80.
232232
Ok(ty::Binder::bind_with_vars(
233233
if decoder.positioned_at_shorthand() {
234234
let pos = decoder.read_usize()?;

compiler/rustc_middle/src/ty/sty.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ static_assert_size!(TyKind<'_>, 32);
239239
/// implements `CK<(u32, u32), Output = u32>`, where `CK` is the trait
240240
/// specified above.
241241
/// - U is a type parameter representing the types of its upvars, tupled up
242-
/// (borrowed, if appropriate; that is, if an U field represents a by-ref upvar,
242+
/// (borrowed, if appropriate; that is, if a U field represents a by-ref upvar,
243243
/// and the up-var has the type `Foo`, then that field of U will be `&Foo`).
244244
///
245245
/// So, for example, given this function:

compiler/rustc_mir/src/interpret/validity.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValueVisitor<'mir, 'tcx, M>
857857
// types above, in `visit_primitive`.
858858
// In run-time mode, we accept pointers in here. This is actually more
859859
// permissive than a per-element check would be, e.g., we accept
860-
// an &[u8] that contains a pointer even though bytewise checking would
860+
// a &[u8] that contains a pointer even though bytewise checking would
861861
// reject it. However, that's good: We don't inherently want
862862
// to reject those pointers, we just do not have the machinery to
863863
// talk about parts of a pointer.

compiler/rustc_mir/src/transform/const_prop.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ impl<'tcx> MirPass<'tcx> for ConstProp {
145145

146146
// FIXME(oli-obk, eddyb) Optimize locals (or even local paths) to hold
147147
// constants, instead of just checking for const-folding succeeding.
148-
// That would require an uniform one-def no-mutation analysis
148+
// That would require a uniform one-def no-mutation analysis
149149
// and RPO (or recursing when needing the value of a local).
150150
let mut optimization_finder = ConstPropagator::new(body, dummy_body, tcx);
151151
optimization_finder.visit_body(body);

compiler/rustc_mir/src/transform/rustc_peek.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ impl<'tcx> MirPass<'tcx> for SanityCheck {
9292
/// "rustc_peek: bit not set".
9393
///
9494
/// The intention is that one can write unit tests for dataflow by
95-
/// putting code into an UI test and using `rustc_peek` to
95+
/// putting code into a UI test and using `rustc_peek` to
9696
/// make observations about the results of dataflow static analyses.
9797
///
9898
/// (If there are any calls to `rustc_peek` that do not match the

compiler/rustc_mir_build/src/build/expr/into.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
208208
);
209209
this.diverge_from(loop_block);
210210

211-
// The “return” value of the loop body must always be an unit. We therefore
211+
// The “return” value of the loop body must always be a unit. We therefore
212212
// introduce a unit temporary as the destination for the loop body.
213213
let tmp = this.get_unit_temp();
214214
// Execute the body, branching back to the test.

compiler/rustc_mir_build/src/thir/cx/expr.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ impl<'tcx> Cx<'tcx> {
788788
self.user_substs_applied_to_ty_of_hir_id(hir_id)
789789
}
790790

791-
// `Self` is used in expression as a tuple struct constructor or an unit struct constructor
791+
// `Self` is used in expression as a tuple struct constructor or a unit struct constructor
792792
Res::SelfCtor(_) => self.user_substs_applied_to_ty_of_hir_id(hir_id),
793793

794794
_ => bug!("user_substs_applied_to_res: unexpected res {:?} at {:?}", res, hir_id),

compiler/rustc_span/src/source_map.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ pub trait FileLoader {
100100
/// Query the existence of a file.
101101
fn file_exists(&self, path: &Path) -> bool;
102102

103-
/// Read the contents of an UTF-8 file into memory.
103+
/// Read the contents of a UTF-8 file into memory.
104104
fn read_file(&self, path: &Path) -> io::Result<String>;
105105
}
106106

compiler/rustc_typeck/src/check_unused.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ fn unused_crates_lint(tcx: TyCtxt<'_>) {
155155
}
156156

157157
// If the extern crate isn't in the extern prelude,
158-
// there is no way it can be written as an `use`.
158+
// there is no way it can be written as a `use`.
159159
let orig_name = extern_crate.orig_name.unwrap_or(item.ident.name);
160160
if !extern_prelude.get(&orig_name).map_or(false, |from_item| !from_item) {
161161
continue;

library/alloc/src/collections/binary_heap.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
//! }
4747
//! }
4848
//!
49-
//! // Each node is represented as an `usize`, for a shorter implementation.
49+
//! // Each node is represented as a `usize`, for a shorter implementation.
5050
//! struct Edge {
5151
//! node: usize,
5252
//! cost: usize,

library/core/src/intrinsics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1013,7 +1013,7 @@ extern "rust-intrinsic" {
10131013
/// let val_casts = unsafe { &mut *(ptr as *mut i32 as *mut u32) };
10141014
/// ```
10151015
///
1016-
/// Turning an `&str` into an `&[u8]`:
1016+
/// Turning an `&str` into a `&[u8]`:
10171017
///
10181018
/// ```
10191019
/// // this is not a good way to do this.

library/core/src/mem/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ pub unsafe fn zeroed<T>() -> T {
660660
#[rustc_diagnostic_item = "mem_uninitialized"]
661661
#[track_caller]
662662
pub unsafe fn uninitialized<T>() -> T {
663-
// SAFETY: the caller must guarantee that an unitialized value is valid for `T`.
663+
// SAFETY: the caller must guarantee that an uninitialized value is valid for `T`.
664664
unsafe {
665665
intrinsics::assert_uninit_valid::<T>();
666666
MaybeUninit::uninit().assume_init()

library/core/src/ptr/mod.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ pub const unsafe fn read<T>(src: *const T) -> T {
767767
///
768768
/// # Examples
769769
///
770-
/// Read an usize value from a byte buffer:
770+
/// Read a usize value from a byte buffer:
771771
///
772772
/// ```
773773
/// use std::mem;
@@ -960,7 +960,7 @@ pub const unsafe fn write<T>(dst: *mut T, src: T) {
960960
///
961961
/// # Examples
962962
///
963-
/// Write an usize value to a byte buffer:
963+
/// Write a usize value to a byte buffer:
964964
///
965965
/// ```
966966
/// use std::mem;
@@ -1232,7 +1232,7 @@ pub(crate) unsafe fn align_offset<T: Sized>(p: *const T, a: usize) -> usize {
12321232
let smoda = stride & a_minus_one;
12331233
// SAFETY: a is power-of-two hence non-zero. stride == 0 case is handled above.
12341234
let gcdpow = unsafe { intrinsics::cttz_nonzero(stride).min(intrinsics::cttz_nonzero(a)) };
1235-
// SAFETY: gcdpow has an upper-bound that’s at most the number of bits in an usize.
1235+
// SAFETY: gcdpow has an upper-bound that’s at most the number of bits in a usize.
12361236
let gcd = unsafe { unchecked_shl(1usize, gcdpow) };
12371237

12381238
// SAFETY: gcd is always greater or equal to 1.

library/std/src/ffi/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
//!
9595
//! * [`OsStr`] represents a borrowed reference to a string in a
9696
//! format that can be passed to the operating system. It can be
97-
//! converted into an UTF-8 Rust string slice in a similar way to
97+
//! converted into a UTF-8 Rust string slice in a similar way to
9898
//! [`OsString`].
9999
//!
100100
//! # Conversions

library/std/src/io/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,7 @@ impl<'a> DerefMut for IoSliceMut<'a> {
11501150

11511151
/// A buffer type used with `Write::write_vectored`.
11521152
///
1153-
/// It is semantically a wrapper around an `&[u8]`, but is guaranteed to be
1153+
/// It is semantically a wrapper around a `&[u8]`, but is guaranteed to be
11541154
/// ABI compatible with the `iovec` type on Unix platforms and `WSABUF` on
11551155
/// Windows.
11561156
#[stable(feature = "iovec", since = "1.36.0")]

library/std/src/keyword_docs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2289,7 +2289,7 @@ mod dyn_keyword {}
22892289
/// }
22902290
///
22912291
/// let mut u = IntOrFloat { f: 1.0 };
2292-
/// // Reading the fields of an union is always unsafe
2292+
/// // Reading the fields of a union is always unsafe
22932293
/// assert_eq!(unsafe { u.i }, 1065353216);
22942294
/// // Updating through any of the field will modify all of them
22952295
/// u.i = 1073741824;

library/std/src/sys/windows/stdio.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ impl io::Read for Stdin {
162162
}
163163

164164
let mut utf16_buf = [0u16; MAX_BUFFER_SIZE / 2];
165-
// In the worst case, an UTF-8 string can take 3 bytes for every `u16` of an UTF-16. So
165+
// In the worst case, a UTF-8 string can take 3 bytes for every `u16` of a UTF-16. So
166166
// we can read at most a third of `buf.len()` chars and uphold the guarantee no data gets
167167
// lost.
168168
let amount = cmp::min(buf.len() / 3, utf16_buf.len());

library/std/src/sys_common/wtf8.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ pub fn is_code_point_boundary(slice: &Wtf8, index: usize) -> bool {
785785
/// Copied from core::str::raw::slice_unchecked
786786
#[inline]
787787
pub unsafe fn slice_unchecked(s: &Wtf8, begin: usize, end: usize) -> &Wtf8 {
788-
// memory layout of an &[u8] and &Wtf8 are the same
788+
// memory layout of a &[u8] and &Wtf8 are the same
789789
Wtf8::from_bytes_unchecked(slice::from_raw_parts(s.bytes.as_ptr().add(begin), end - begin))
790790
}
791791

library/std/src/time/monotonic.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub mod inner {
8484
pub(super) fn monotonize(raw: time::Instant) -> time::Instant {
8585
let delta = raw.checked_sub_instant(&ZERO).unwrap();
8686
// Split into seconds and nanos since Duration doesn't have a
87-
// constructor that takes an u128
87+
// constructor that takes a u128
8888
let secs = delta.as_secs() as u128;
8989
let nanos = delta.subsec_nanos() as u128;
9090
let timestamp: u128 = secs << 64 | nanos;

src/test/mir-opt/dest-prop/copy_propagation_arg.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ fn dummy(x: u8) -> u8 {
77

88
// EMIT_MIR copy_propagation_arg.foo.DestinationPropagation.diff
99
fn foo(mut x: u8) {
10-
// calling `dummy` to make an use of `x` that copyprop cannot eliminate
10+
// calling `dummy` to make a use of `x` that copyprop cannot eliminate
1111
x = dummy(x); // this will assign a local to `x`
1212
}
1313

src/test/ui-fulldeps/internal-lints/pass_ty_by_ref_self.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// compile-flags: -Z unstable-options
22
// NOTE: This test doesn't actually require `fulldeps`
3-
// so we could instead use it as an `ui` test.
3+
// so we could instead use it as a `ui` test.
44
//
55
// Considering that all other `internal-lints` are tested here
66
// this seems like the cleaner solution though.

src/tools/clippy/clippy_lints/src/ptr_eq.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ impl LateLintPass<'_> for PtrEq {
7474
}
7575
}
7676

77-
// If the given expression is a cast to an usize, return the lhs of the cast
77+
// If the given expression is a cast to a usize, return the lhs of the cast
7878
// E.g., `foo as *const _ as usize` returns `foo as *const _`.
7979
fn expr_as_cast_to_usize<'tcx>(cx: &LateContext<'tcx>, cast_expr: &'tcx Expr<'_>) -> Option<&'tcx Expr<'tcx>> {
8080
if cx.typeck_results().expr_ty(cast_expr) == cx.tcx.types.usize {

src/tools/rustfmt/src/macros.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ fn rewrite_macro_inner(
401401
handle_vec_semi(context, shape, arg_vec, macro_name, style)
402402
} else {
403403
// If we are rewriting `vec!` macro or other special macros,
404-
// then we can rewrite this as an usual array literal.
404+
// then we can rewrite this as a usual array literal.
405405
// Otherwise, we must preserve the original existence of trailing comma.
406406
let macro_name = &macro_name.as_str();
407407
let mut force_trailing_comma = if trailing_comma {

src/tools/rustfmt/src/string.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ pub(crate) fn rewrite_string<'a>(
153153
wrap_str(result, fmt.config.max_width(), fmt.shape)
154154
}
155155

156-
/// Returns the index to the end of the URL if the split at index of the given string includes an
156+
/// Returns the index to the end of the URL if the split at index of the given string includes a
157157
/// URL or alike. Otherwise, returns `None`.
158158
fn detect_url(s: &[&str], index: usize) -> Option<usize> {
159159
let start = match s[..=index].iter().rposition(|g| is_whitespace(g)) {

src/tools/rustfmt/tests/source/cfg_if/detect/arch/x86.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//!
33
//! The features are detected using the `detect_features` function below.
44
//! This function uses the CPUID instruction to read the feature flags from the
5-
//! CPU and encodes them in an `usize` where each bit position represents
5+
//! CPU and encodes them in a `usize` where each bit position represents
66
//! whether a feature is available (bit is set) or unavaiable (bit is cleared).
77
//!
88
//! The enum `Feature` is used to map bit positions to feature names, and the

src/tools/rustfmt/tests/target/cfg_if/detect/arch/x86.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//!
33
//! The features are detected using the `detect_features` function below.
44
//! This function uses the CPUID instruction to read the feature flags from the
5-
//! CPU and encodes them in an `usize` where each bit position represents
5+
//! CPU and encodes them in a `usize` where each bit position represents
66
//! whether a feature is available (bit is set) or unavaiable (bit is cleared).
77
//!
88
//! The enum `Feature` is used to map bit positions to feature names, and the

src/tools/tidy/src/style.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ enum LIUState {
6666
EXP_END,
6767
}
6868

69-
/// Returns `true` if `line` appears to be a line comment containing an URL,
69+
/// Returns `true` if `line` appears to be a line comment containing a URL,
7070
/// possibly with a Markdown link label in front, and nothing else.
7171
/// The Markdown link label, if present, may not contain whitespace.
7272
/// Lines of this form are allowed to be overlength, because Markdown

0 commit comments

Comments
 (0)