diff --git a/po/fa.po b/po/fa.po
index b163ced7..171b90ef 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -17975,6 +17975,10 @@ msgid ""
 "with a linker script to produce the binary itself, and then a `raw_binary` "
 "to convert the ELF to a raw binary ready to be run."
 msgstr ""
+"برای ساختن یک bare-metal Rust binary در AOSP، باید از یک `rust_ffi_static` "
+"Soong برای ساخت کد Rust خود استفاده کنید، سپس از یک `cc_binary` با یک linker "
+"script برای تولید binary استفاده کرده و سپس از یک `raw_binary` برای تبدیل "
+"ELF به یک raw binary آماده اجرا استفاده کنید."
 
 #: src/bare-metal/android/vmbase.md:1
 msgid "vmbase"
@@ -17987,22 +17991,31 @@ msgid ""
 "master/vmbase/) library provides a linker script and useful defaults for the "
 "build rules, along with an entry point, UART console logging and more."
 msgstr ""
+"برای ماشین‌های مجازی که تحت crosvm در aarch64 اجرا می‌شوند، کتابخانه [vmbase]"
+"(https://android.googlesource.com/platform/packages/modules/Virtualization/+/"
+"refs/heads/master/vmbase/) یک اسکریپت linker و پیش‌فرض‌های مفیدی را ارائه "
+"می‌کند. برای این قوانین ساخت، همراه با یک نقطه ورودی، UART console logging و "
+"موارد دیگر."
 
 #: src/bare-metal/android/vmbase.md:24
 msgid ""
 "The `main!` macro marks your main function, to be called from the `vmbase` "
 "entry point."
 msgstr ""
+"این ماکرو `main!`عملکرد اصلی شما را مشخص می‌کند تا از نقطه ورودی `vmbase` "
+"فراخوانی شود."
 
 #: src/bare-metal/android/vmbase.md:26
 msgid ""
 "The `vmbase` entry point handles console initialisation, and issues a "
 "PSCI_SYSTEM_OFF to shutdown the VM if your main function returns."
 msgstr ""
+"نقطه ورودی `vmbase` مقدار دهی اولیه کنسول را کنترل می‌کند و در صورت بازگشت "
+"main function، یک PSCI_SYSTEM_OFF برای خاموش کردن VM صادر می‌کند."
 
 #: src/exercises/bare-metal/afternoon.md
 msgid "We will write a driver for the PL031 real-time clock device."
-msgstr ""
+msgstr "ما یک درایور برای دستگاه PL031 real-time clock  خواهیم نوشت."
 
 #: src/exercises/bare-metal/afternoon.md
 msgid ""
@@ -18015,27 +18028,38 @@ msgstr ""
 #: src/exercises/bare-metal/rtc.md:1
 #: src/exercises/bare-metal/solutions-afternoon.md:3
 msgid "RTC driver"
-msgstr ""
+msgstr "RTC driver"
 
 #: src/exercises/bare-metal/rtc.md:3
+#, fuzzy
 msgid ""
 "The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/"
 "documentation/ddi0224/c) real-time clock at 0x9010000. For this exercise, "
 "you should write a driver for it."
 msgstr ""
+"ماشین QEMU aarch64 virt دارای یک ساعت بلادرنگ [PL031](https://developer.arm."
+"com/documentation/ddi0224/c) در 0x9010000 است. برای این تمرین باید یک درایور "
+"برای آن بنویسید."
 
 #: src/exercises/bare-metal/rtc.md:6
 msgid ""
 "Use it to print the current time to the serial console. You can use the "
 "[`chrono`](https://crates.io/crates/chrono) crate for date/time formatting."
 msgstr ""
+"از آن برای چاپ زمان جاری در کنسول سریال استفاده کنید. می‌توانید از crate "
+"[`chrono`](https://crates.io/crates/chrono) برای قالب‌بندی date/time استفاده "
+"کنید."
 
 #: src/exercises/bare-metal/rtc.md:8
+#, fuzzy
 msgid ""
 "Use the match register and raw interrupt status to busy-wait until a given "
 "time, e.g. 3 seconds in the future. (Call [`core::hint::spin_loop`](https://"
 "doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)"
 msgstr ""
+"از match register و raw interrupt status استفاده کنید تا تا زمان معینی منتظر "
+"بمانید، به عنوان مثال. ۳ ثانیه در آینده نزدیک (Call [`core::hint::spin_loop`]"
+"(https://doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)"
 
 #: src/exercises/bare-metal/rtc.md:11
 msgid ""
@@ -18043,176 +18067,214 @@ msgid ""
 "the RTC match. You can use the driver provided in the [`arm-gic`](https://"
 "docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller."
 msgstr ""
+"ء _افزونه‌ها اگر زمان دارید:_ وقفه ایجاد شده توسط تطبیق RTC را فعال کرده و آن "
+"را مدیریت کنید. می‌توانید از درایور ارائه شده در crate [`arm-gic`](https://"
+"docs.rs/arm-gic/) برای پیکربندی Arm Generic Interrupt Controller استفاده "
+"کنید."
 
 #: src/exercises/bare-metal/rtc.md:14
 msgid "Use the RTC interrupt, which is wired to the GIC as `IntId::spi(2)`."
-msgstr ""
+msgstr "از وقفه RTC استفاده کنید که به عنوان `IntId::spi(2)` به GIC متصل است."
 
 #: src/exercises/bare-metal/rtc.md:15
 msgid ""
 "Once the interrupt is enabled, you can put the core to sleep via `arm_gic::"
 "wfi()`, which will cause the core to sleep until it receives an interrupt."
 msgstr ""
+"هنگامی که وقفه (interrupt) فعال شد، می‌توانید هسته را از طریق `arm_gic::"
+"wfi()` به حالت Sleep درآورید، که باعث می‌شود هسته تا زمانی که وقفه دریافت کند "
+"به خواب برود."
 
 #: src/exercises/bare-metal/rtc.md:19
 msgid ""
 "Download the [exercise template](../../comprehensive-rust-exercises.zip) and "
 "look in the `rtc` directory for the following files."
 msgstr ""
+"دانلود از [exercise template](../../comprehensive-rust-exercises.zip) و "
+"فایل‌های زیر را در دایرکتوری `rtc` جستجو کنید."
 
 #: src/exercises/bare-metal/rtc.md:79
 msgid ""
 "_src/exceptions.rs_ (you should only need to change this for the 3rd part of "
 "the exercise):"
 msgstr ""
+"ء _src/exceptions.rs_ (شما فقط باید این را برای بخش سوم تمرین تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:156
 msgid "_src/logger.rs_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "ء _src/logger.rs_ (نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:216
 msgid "_src/pl011.rs_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_src/pl011.rs_ (نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:419
 msgid "_build.rs_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_build.rs_ (نیازی نیست این مورد رو تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:456
 msgid "_entry.S_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_entry.S_ ( نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:606
 msgid "_exceptions.S_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_exceptions.S_ ( نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:792
 msgid "_idmap.S_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_idmap.S_ (نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:842
 msgid "_image.ld_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_image.ld_ (نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:954
 msgid "_Makefile_ (you shouldn't need to change this):"
-msgstr ""
+msgstr "_Makefile_ (نیازی نیست این مورد را تغییر دهید):"
 
 #: src/exercises/bare-metal/rtc.md:1011
 msgid "Run the code in QEMU with `make qemu`."
-msgstr ""
+msgstr "کد را در QEMU با  `make qemu` اجرا کنید."
 
 #: src/exercises/bare-metal/solutions-afternoon.md:1
 msgid "Bare Metal Rust Afternoon"
-msgstr "عصرانه با  Bare Metal Rust"
+msgstr "بعدازظهربا Bare Metal Rust"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:5
+#, fuzzy
 msgid "([back to exercise](rtc.md))"
-msgstr ""
+msgstr "([back to exercise](rtc.md))"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:7
 msgid "_main.rs_:"
-msgstr ""
+msgstr "_main.rs_:"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:29
+#, fuzzy
 msgid "/// Base addresses of the GICv3.\n"
-msgstr ""
+msgstr "/// Base addresses of the GICv3.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:36
+#, fuzzy
 msgid "/// Base address of the PL031 RTC.\n"
-msgstr ""
+msgstr "/// Base address of the PL031 RTC.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:38
+#, fuzzy
 msgid "/// The IRQ used by the PL031 RTC.\n"
-msgstr ""
+msgstr "/// The IRQ used by the PL031 RTC.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:49
+#, fuzzy
 msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\""
-msgstr ""
+msgstr "\"main({:#x}, {:#x}, {:#x}, {:#x})\""
 
 #: src/exercises/bare-metal/solutions-afternoon.md:51
+#, fuzzy
 msgid ""
 "// SAFETY: `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n"
 "    // addresses of a GICv3 distributor and redistributor respectively, and\n"
 "    // nothing else accesses those address ranges.\n"
 msgstr ""
+"// SAFETY: `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n"
+"    // addresses of a GICv3 distributor and redistributor respectively, and\n"
+"    // nothing else accesses those address ranges.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:57
+#, fuzzy
 msgid ""
 "// SAFETY: `PL031_BASE_ADDRESS` is the base address of a PL031 device, and\n"
 "    // nothing else accesses that address range.\n"
 msgstr ""
+"// SAFETY: `PL031_BASE_ADDRESS` is the base address of a PL031 device, and\n"
+"    // nothing else accesses that address range.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:62
+#, fuzzy
 msgid "\"RTC: {time}\""
-msgstr ""
+msgstr "\"RTC: {time}\""
 
 #: src/exercises/bare-metal/solutions-afternoon.md:70
+#, fuzzy
 msgid "// Wait for 3 seconds, without interrupts.\n"
-msgstr ""
+msgstr "// Wait for 3 seconds, without interrupts.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:73
 #: src/exercises/bare-metal/solutions-afternoon.md:91
+#, fuzzy
 msgid "\"Waiting for {}\""
-msgstr ""
+msgstr "\"Waiting for {}\""
 
 #: src/exercises/bare-metal/solutions-afternoon.md:75
 #: src/exercises/bare-metal/solutions-afternoon.md:83
 #: src/exercises/bare-metal/solutions-afternoon.md:96
 #: src/exercises/bare-metal/solutions-afternoon.md:104
+#, fuzzy
 msgid "\"matched={}, interrupt_pending={}\""
-msgstr ""
+msgstr "\"matched={}, interrupt_pending={}\""
 
 #: src/exercises/bare-metal/solutions-afternoon.md:87
 #: src/exercises/bare-metal/solutions-afternoon.md:108
+#, fuzzy
 msgid "\"Finished waiting\""
-msgstr ""
+msgstr "\"Finished waiting\""
 
 #: src/exercises/bare-metal/solutions-afternoon.md:89
+#, fuzzy
 msgid "// Wait another 3 seconds for an interrupt.\n"
-msgstr ""
+msgstr "// Wait another 3 seconds for an interrupt.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:121
 msgid "_pl031.rs_:"
-msgstr ""
+msgstr "_pl031.rs_:"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:128
+#, fuzzy
 msgid "/// Data register\n"
-msgstr ""
+msgstr "/// Data register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:130
+#, fuzzy
 msgid "/// Match register\n"
-msgstr ""
+msgstr "/// Match register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:132
+#, fuzzy
 msgid "/// Load register\n"
-msgstr ""
+msgstr "/// Load register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:134
+#, fuzzy
 msgid "/// Control register\n"
-msgstr ""
+msgstr "/// Control register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:137
+#, fuzzy
 msgid "/// Interrupt Mask Set or Clear register\n"
-msgstr ""
+msgstr "/// Interrupt Mask Set or Clear register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:140
+#, fuzzy
 msgid "/// Raw Interrupt Status\n"
-msgstr ""
+msgstr "/// Raw Interrupt Status\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:143
+#, fuzzy
 msgid "/// Masked Interrupt Status\n"
-msgstr ""
+msgstr "/// Masked Interrupt Status\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:146
+#, fuzzy
 msgid "/// Interrupt Clear Register\n"
-msgstr ""
+msgstr "/// Interrupt Clear Register\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:150
+#, fuzzy
 msgid "/// Driver for a PL031 real-time clock.\n"
-msgstr ""
+msgstr "/// Driver for a PL031 real-time clock.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:158
+#, fuzzy
 msgid ""
 "/// Constructs a new instance of the RTC driver for a PL031 device at the\n"
 "    /// given base address.\n"
@@ -18225,10 +18287,21 @@ msgid ""
 "process\n"
 "    /// as device memory and not have any other aliases.\n"
 msgstr ""
+"/// Constructs a new instance of the RTC driver for a PL031 device at the\n"
+"    /// given base address.\n"
+"    ///\n"
+"    /// # Safety\n"
+"    ///\n"
+"    /// The given base address must point to the MMIO control registers of "
+"a\n"
+"    /// PL031 device, which must be mapped into the address space of the "
+"process\n"
+"    /// as device memory and not have any other aliases.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:170
+#, fuzzy
 msgid "/// Reads the current RTC value.\n"
-msgstr ""
+msgstr "/// Reads the current RTC value.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:172
 #: src/exercises/bare-metal/solutions-afternoon.md:180
@@ -18236,33 +18309,49 @@ msgstr ""
 #: src/exercises/bare-metal/solutions-afternoon.md:199
 #: src/exercises/bare-metal/solutions-afternoon.md:211
 #: src/exercises/bare-metal/solutions-afternoon.md:218
+#, fuzzy
 msgid ""
 "// SAFETY: We know that self.registers points to the control registers\n"
 "        // of a PL031 device which is appropriately mapped.\n"
 msgstr ""
+"// SAFETY: We know that self.registers points to the control registers\n"
+"        // of a PL031 device which is appropriately mapped.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:177
+#, fuzzy
 msgid ""
 "/// Writes a match value. When the RTC value matches this then an interrupt\n"
 "    /// will be generated (if it is enabled).\n"
 msgstr ""
+"/// Writes a match value. When the RTC value matches this then an interrupt\n"
+"    /// will be generated (if it is enabled).\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:185
+#, fuzzy
 msgid ""
 "/// Returns whether the match register matches the RTC value, whether or "
 "not\n"
 "    /// the interrupt is enabled.\n"
 msgstr ""
+"/// Returns whether the match register matches the RTC value, whether or "
+"not\n"
+"    /// the interrupt is enabled.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:194
+#, fuzzy
 msgid ""
 "/// Returns whether there is currently an interrupt pending.\n"
 "    ///\n"
 "    /// This should be true if and only if `matched` returns true and the\n"
 "    /// interrupt is masked.\n"
 msgstr ""
+"/// Returns whether there is currently an interrupt pending.\n"
+"    ///\n"
+"    /// This should be true if and only if `matched` returns true and the\n"
+"    /// interrupt is masked.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:205
+#, fuzzy
 msgid ""
 "/// Sets or clears the interrupt mask.\n"
 "    ///\n"
@@ -18270,16 +18359,25 @@ msgid ""
 "the\n"
 "    /// interrupt is disabled.\n"
 msgstr ""
+"/// Sets or clears the interrupt mask.\n"
+"    ///\n"
+"    /// When the mask is true the interrupt is enabled; when it is false "
+"the\n"
+"    /// interrupt is disabled.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:216
+#, fuzzy
 msgid "/// Clears a pending interrupt, if any.\n"
-msgstr ""
+msgstr "/// Clears a pending interrupt, if any.\n"
 
 #: src/exercises/bare-metal/solutions-afternoon.md:223
+#, fuzzy
 msgid ""
 "// SAFETY: `Rtc` just contains a pointer to device memory, which can be\n"
 "// accessed from any context.\n"
 msgstr ""
+"// SAFETY: `Rtc` just contains a pointer to device memory, which can be\n"
+"// accessed from any context.\n"
 
 #: src/concurrency/welcome.md
 msgid "Welcome to Concurrency in Rust"