€•oUŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ2/translations/zh_CN/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/zh_TW/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/it_IT/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/ja_JP/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/ko_KR/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ2/translations/sp_SP/sound/hd-audio/realtek-pc-beep”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒRealtek PC Beep Hidden Register”h]”hŒRealtek PC Beep Hidden Register”…””}”(hh¨hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hh£hžhhŸŒL/var/lib/git/docbuild/linux/Documentation/sound/hd-audio/realtek-pc-beep.rst”h KubhŒ paragraph”“”)”}”(hXøThis file documents the "PC Beep Hidden Register", which is present in certain Realtek HDA codecs and controls a muxer and pair of passthrough mixers that can route audio between pins but aren't themselves exposed as HDA widgets. As far as I can tell, these hidden routes are designed to allow flexible PC Beep output for codecs that don't have mixer widgets in their output paths. Why it's easier to hide a mixer behind an undocumented vendor register than to just expose it as a widget, I have no idea.”h]”hXThis file documents the “PC Beep Hidden Registerâ€, which is present in certain Realtek HDA codecs and controls a muxer and pair of passthrough mixers that can route audio between pins but aren’t themselves exposed as HDA widgets. As far as I can tell, these hidden routes are designed to allow flexible PC Beep output for codecs that don’t have mixer widgets in their output paths. Why it’s easier to hide a mixer behind an undocumented vendor register than to just expose it as a widget, I have no idea.”…””}”(hh¹hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khh£hžhubh¢)”}”(hhh]”(h§)”}”(hŒRegister Description”h]”hŒRegister Description”…””}”(hhÊhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hhÇhžhhŸh¶h Kubh¸)”}”(hŒThe register is accessed via processing coefficient 0x36 on NID 20h. Bits not identified below have no discernible effect on my machine, a Dell XPS 13 9350::”h]”hŒœThe register is accessed via processing coefficient 0x36 on NID 20h. Bits not identified below have no discernible effect on my machine, a Dell XPS 13 9350:”…””}”(hhØhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KhhÇhžhubhŒ literal_block”“”)”}”(hŒâMSB LSB +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |h|S|L| | B |R| | Known bits +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |0|0|1|1| 0x7 |0|0x0|1| 0x7 | Reset value +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+”h]”hŒâMSB LSB +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |h|S|L| | B |R| | Known bits +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ |0|0|1|1| 0x7 |0|0x0|1| 0x7 | Reset value +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+”…””}”hhèsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hæhŸh¶h KhhÇhžhubhŒdefinition_list”“”)”}”(hhh]”(hŒdefinition_list_item”“”)”}”(hXt1Ah input select (B): 2 bits When zero, expose the PC Beep line (from the internal beep generator, when enabled with the Set Beep Generation verb on NID 01h, or else from the external PCBEEP pin) on the 1Ah pin node. When nonzero, expose the headphone jack (or possibly Line In on some machines) input instead. If PC Beep is selected, the 1Ah boost control has no effect. ”h]”(hŒterm”“”)”}”(hŒ1Ah input select (B): 2 bits”h]”hŒ1Ah input select (B): 2 bits”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h KhhÿubhŒ definition”“”)”}”(hhh]”h¸)”}”(hXVWhen zero, expose the PC Beep line (from the internal beep generator, when enabled with the Set Beep Generation verb on NID 01h, or else from the external PCBEEP pin) on the 1Ah pin node. When nonzero, expose the headphone jack (or possibly Line In on some machines) input instead. If PC Beep is selected, the 1Ah boost control has no effect.”h]”hXVWhen zero, expose the PC Beep line (from the internal beep generator, when enabled with the Set Beep Generation verb on NID 01h, or else from the external PCBEEP pin) on the 1Ah pin node. When nonzero, expose the headphone jack (or possibly Line In on some machines) input instead. If PC Beep is selected, the 1Ah boost control has no effect.”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhŸh¶h Khhúubhþ)”}”(hŒ½Amplify 1Ah loopback, left (L): 1 bit Amplify the left channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets. ”h]”(j)”}”(hŒ%Amplify 1Ah loopback, left (L): 1 bit”h]”hŒ%Amplify 1Ah loopback, left (L): 1 bit”…””}”(hj6hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K#hj2ubj)”}”(hhh]”h¸)”}”(hŒ–Amplify the left channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets.”h]”hŒ–Amplify the left channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets.”…””}”(hjGhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K"hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhŸh¶h K#hhúhžhubhþ)”}”(hŒ¿Amplify 1Ah loopback, right (R): 1 bit Amplify the right channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets. ”h]”(j)”}”(hŒ&Amplify 1Ah loopback, right (R): 1 bit”h]”hŒ&Amplify 1Ah loopback, right (R): 1 bit”…””}”(hjehžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K'hjaubj)”}”(hhh]”h¸)”}”(hŒ—Amplify the right channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets.”h]”hŒ—Amplify the right channel of 1Ah before mixing it into outputs as specified by h and S bits. Does not affect the level of 1Ah exposed to other widgets.”…””}”(hjvhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K&hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhŸh¶h K'hhúhžhubhþ)”}”(hŒÐLoopback 1Ah to 21h [active low] (h): 1 bit When zero, mix 1Ah (possibly with amplification, depending on L and R bits) into 21h (headphone jack on my machine). Mixed signal respects the mute setting on 21h. ”h]”(j)”}”(hŒ+Loopback 1Ah to 21h [active low] (h): 1 bit”h]”hŒ+Loopback 1Ah to 21h [active low] (h): 1 bit”…””}”(hj”hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K,hjubj)”}”(hhh]”h¸)”}”(hŒ£When zero, mix 1Ah (possibly with amplification, depending on L and R bits) into 21h (headphone jack on my machine). Mixed signal respects the mute setting on 21h.”h]”hŒ£When zero, mix 1Ah (possibly with amplification, depending on L and R bits) into 21h (headphone jack on my machine). Mixed signal respects the mute setting on 21h.”…””}”(hj¥hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K*hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhŸh¶h K,hhúhžhubhþ)”}”(hŒþLoopback 1Ah to 14h (S): 1 bit When one, mix 1Ah (possibly with amplification, depending on L and R bits) into 14h (internal speaker on my machine). Mixed signal **ignores** the mute setting on 14h and is present whenever 14h is configured as an output. ”h]”(j)”}”(hŒLoopback 1Ah to 14h (S): 1 bit”h]”hŒLoopback 1Ah to 14h (S): 1 bit”…””}”(hjÃhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhŸh¶h K1hj¿ubj)”}”(hhh]”h¸)”}”(hŒÞWhen one, mix 1Ah (possibly with amplification, depending on L and R bits) into 14h (internal speaker on my machine). Mixed signal **ignores** the mute setting on 14h and is present whenever 14h is configured as an output.”h]”(hŒƒWhen one, mix 1Ah (possibly with amplification, depending on L and R bits) into 14h (internal speaker on my machine). Mixed signal ”…””}”(hjÔhžhhŸNh NubhŒstrong”“”)”}”(hŒ **ignores**”h]”hŒignores”…””}”(hjÞhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÜhjÔubhŒP the mute setting on 14h and is present whenever 14h is configured as an output.”…””}”(hjÔhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K/hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhŸh¶h K1hhúhžhubeh}”(h]”h ]”h"]”h$]”h&]”uh1høhhÇhžhhŸh¶h Nubeh}”(h]”Œregister-description”ah ]”h"]”Œregister description”ah$]”h&]”uh1h¡hh£hžhhŸh¶h Kubh¢)”}”(hhh]”(h§)”}”(hŒ Path diagrams”h]”hŒ Path diagrams”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjhžhhŸh¶h K4ubh¸)”}”(hŒA1Ah input selection (DIV is the PC Beep divider set on NID 01h)::”h]”hŒ@1Ah input selection (DIV is the PC Beep divider set on NID 01h):”…””}”(hj!hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K6hjhžhubhç)”}”(hX; | | | +--DIV--+--!DIV--+ {1Ah boost control} | | +--(b == 0)--+--(b != 0)--+ | >1Ah (Beep/Headphone Mic/Line In)<”h]”hX; | | | +--DIV--+--!DIV--+ {1Ah boost control} | | +--(b == 0)--+--(b != 0)--+ | >1Ah (Beep/Headphone Mic/Line In)<”…””}”hj/sbah}”(h]”h ]”h"]”h$]”h&]”höh÷uh1hæhŸh¶h K8hjhžhubh¸)”}”(hŒLoopback of 1Ah to 21h/14h::”h]”hŒLoopback of 1Ah to 21h/14h:”…””}”(hj=hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K@hjhžhubhç)”}”(hX/ <1Ah (Beep/Headphone Mic/Line In)> | {amplify if L/R} | +-----!h-----+-----S-----+ | | {21h mute control} | | | >21h (Headphone)< >14h (Internal Speaker)<”h]”hX/ <1Ah (Beep/Headphone Mic/Line In)> | {amplify if L/R} | +-----!h-----+-----S-----+ | | {21h mute control} | | | >21h (Headphone)< >14h (Internal Speaker)<”…””}”hjKsbah}”(h]”h ]”h"]”h$]”h&]”höh÷uh1hæhŸh¶h KBhjhžhubeh}”(h]”Œ path-diagrams”ah ]”h"]”Œ path diagrams”ah$]”h&]”uh1h¡hh£hžhhŸh¶h K4ubh¢)”}”(hhh]”(h§)”}”(hŒ Background”h]”hŒ Background”…””}”(hjdhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¦hjahžhhŸh¶h KMubh¸)”}”(hX¦All Realtek HDA codecs have a vendor-defined widget with node ID 20h which provides access to a bank of registers that control various codec functions. Registers are read and written via the standard HDA processing coefficient verbs (Set/Get Coefficient Index, Set/Get Processing Coefficient). The node is named "Realtek Vendor Registers" in public datasheets' verb listings and, apart from that, is entirely undocumented.”h]”hX¬All Realtek HDA codecs have a vendor-defined widget with node ID 20h which provides access to a bank of registers that control various codec functions. Registers are read and written via the standard HDA processing coefficient verbs (Set/Get Coefficient Index, Set/Get Processing Coefficient). The node is named “Realtek Vendor Registers†in public datasheets’ verb listings and, apart from that, is entirely undocumented.”…””}”(hjrhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KOhjahžhubh¸)”}”(hXLThis particular register, exposed at coefficient 0x36 and named in commits from Realtek, is of note: unlike most registers, which seem to control detailed amplifier parameters not in scope of the HDA specification, it controls audio routing which could just as easily have been defined using standard HDA mixer and selector widgets.”h]”hXLThis particular register, exposed at coefficient 0x36 and named in commits from Realtek, is of note: unlike most registers, which seem to control detailed amplifier parameters not in scope of the HDA specification, it controls audio routing which could just as easily have been defined using standard HDA mixer and selector widgets.”…””}”(hj€hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h KVhjahžhubh¸)”}”(hXNSpecifically, it selects between two sources for the input pin widget with Node ID (NID) 1Ah: the widget's signal can come either from an audio jack (on my laptop, a Dell XPS 13 9350, it's the headphone jack, but comments in Realtek commits indicate that it might be a Line In on some machines) or from the PC Beep line (which is itself multiplexed between the codec's internal beep generator and external PCBEEP pin, depending on if the beep generator is enabled via verbs on NID 01h). Additionally, it can mix (with optional amplification) that signal onto the 21h and/or 14h output pins.”h]”hXTSpecifically, it selects between two sources for the input pin widget with Node ID (NID) 1Ah: the widget’s signal can come either from an audio jack (on my laptop, a Dell XPS 13 9350, it’s the headphone jack, but comments in Realtek commits indicate that it might be a Line In on some machines) or from the PC Beep line (which is itself multiplexed between the codec’s internal beep generator and external PCBEEP pin, depending on if the beep generator is enabled via verbs on NID 01h). Additionally, it can mix (with optional amplification) that signal onto the 21h and/or 14h output pins.”…””}”(hjŽhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h K\hjahžhubh¸)”}”(hX The register's reset value is 0x3717, corresponding to PC Beep on 1Ah that is then amplified and mixed into both the headphones and the speakers. Not only does this violate the HDA specification, which says that "[a vendor defined beep input pin] connection may be maintained *only* while the Link reset (**RST#**) is asserted", it means that we cannot ignore the register if we care about the input that 1Ah would otherwise expose or if the PCBEEP trace is poorly shielded and picks up chassis noise (both of which are the case on my machine).”h]”(hXThe register’s reset value is 0x3717, corresponding to PC Beep on 1Ah that is then amplified and mixed into both the headphones and the speakers. Not only does this violate the HDA specification, which says that “[a vendor defined beep input pin] connection may be maintained ”…””}”(hjœhžhhŸNh NubhŒemphasis”“”)”}”(hŒ*only*”h]”hŒonly”…””}”(hj¦hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¤hjœubhŒ while the Link reset (”…””}”(hjœhžhhŸNh NubjÝ)”}”(hŒ**RST#**”h]”hŒRST#”…””}”(hj¸hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÜhjœubhŒé) is assertedâ€, it means that we cannot ignore the register if we care about the input that 1Ah would otherwise expose or if the PCBEEP trace is poorly shielded and picks up chassis noise (both of which are the case on my machine).”…””}”(hjœhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kehjahžhubh¸)”}”(hXLUnfortunately, there are lots of ways to get this register configuration wrong. Linux, it seems, has gone through most of them. For one, the register resets after S3 suspend: judging by existing code, this isn't the case for all vendor registers, and it's led to some fixes that improve behavior on cold boot but don't last after suspend. Other fixes have successfully switched the 1Ah input away from PC Beep but have failed to disable both loopback paths. On my machine, this means that the headphone input is amplified and looped back to the headphone output, which uses the exact same pins! As you might expect, this causes terrible headphone noise, the character of which is controlled by the 1Ah boost control. (If you've seen instructions online to fix XPS 13 headphone noise by changing "Headphone Mic Boost" in ALSA, now you know why.)”h]”hXXUnfortunately, there are lots of ways to get this register configuration wrong. Linux, it seems, has gone through most of them. For one, the register resets after S3 suspend: judging by existing code, this isn’t the case for all vendor registers, and it’s led to some fixes that improve behavior on cold boot but don’t last after suspend. Other fixes have successfully switched the 1Ah input away from PC Beep but have failed to disable both loopback paths. On my machine, this means that the headphone input is amplified and looped back to the headphone output, which uses the exact same pins! As you might expect, this causes terrible headphone noise, the character of which is controlled by the 1Ah boost control. (If you’ve seen instructions online to fix XPS 13 headphone noise by changing “Headphone Mic Boost†in ALSA, now you know why.)”…””}”(hjÐhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Knhjahžhubh¸)”}”(hX:The information here has been obtained through black-box reverse engineering of the ALC256 codec's behavior and is not guaranteed to be correct. It likely also applies for the ALC255, ALC257, ALC235, and ALC236, since those codecs seem to be close relatives of the ALC256. (They all share one initialization function.) Additionally, other codecs like the ALC225 and ALC285 also have this register, judging by existing fixups in ``patch_realtek.c``, but specific data (e.g. node IDs, bit positions, pin mappings) for those codecs may differ from what I've described here.”h]”(hX®The information here has been obtained through black-box reverse engineering of the ALC256 codec’s behavior and is not guaranteed to be correct. It likely also applies for the ALC255, ALC257, ALC235, and ALC236, since those codecs seem to be close relatives of the ALC256. (They all share one initialization function.) Additionally, other codecs like the ALC225 and ALC285 also have this register, judging by existing fixups in ”…””}”(hjÞhžhhŸNh NubhŒliteral”“”)”}”(hŒ``patch_realtek.c``”h]”hŒpatch_realtek.c”…””}”(hjèhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jæhjÞubhŒ}, but specific data (e.g. node IDs, bit positions, pin mappings) for those codecs may differ from what I’ve described here.”…””}”(hjÞhžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1h·hŸh¶h Kzhjahžhubeh}”(h]”Œ background”ah ]”h"]”Œ background”ah$]”h&]”uh1h¡hh£hžhhŸh¶h KMubeh}”(h]”Œrealtek-pc-beep-hidden-register”ah ]”h"]”Œrealtek pc beep hidden register”ah$]”h&]”uh1h¡hhhžhhŸh¶h Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”h¶uh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(h¦NŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j3Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”h¶Œ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j j j j j^j[jjuŒ nametypes”}”(j ‰j ‰j^‰j‰uh}”(j h£j hÇj[jjjauŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.