Files
ServerSync/lib/wcwidth/__pycache__/sgr_state.cpython-314.pyc

170 lines
16 KiB
Plaintext
Raw Normal View History

2026-02-12 02:28:23 +02:00
+
9<><39>i<EFBFBD>0<00><01>(<00>Rt^RIHt^RIt^RIHt^RIHtHtH t ]'d^RIH
t
!RR]4t ]P!R4t ]P!R 4tR
t!R R ] 4t]!4tR RltRRltRRltRRltRRltRRltR#)as
SGR (Select Graphic Rendition) state tracking for terminal escape sequences.
This module provides functions for tracking and propagating terminal styling (bold, italic, colors,
etc.) via public API propagate_sgr(), and its dependent functions, cut() and wrap(). It only has
attributes necessary to perform its functions, eg 'RED' and 'BLUE' attributes are not defined.
)<01> annotationsN)<01>IntEnum)<03> TYPE_CHECKING<4E>Iterator<6F>
NamedTuple)<01>Sequencec<01><><00>]tRt^tRt^t^t^t^t^t ^t
^t ^t ^t ^ t^t^t^t^t^t^t^t^t^t^%t^&t^'t^(t^/t^0t^1t^Zt^at ^dt!^kt"Rt#R#)<04>_SGRz<52>
SGR (Select Graphic Rendition) parameter codes.
References:
- https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
- https://github.com/tehmaze/ansi/tree/master/ansi/colour
<EFBFBD>N)$<24>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>__doc__<5F>RESET<45>BOLD<4C>DIM<49>ITALIC<49> UNDERLINE<4E>BLINK<4E> RAPID_BLINK<4E>INVERSE<53>HIDDEN<45> STRIKETHROUGH<47>DOUBLE_UNDERLINE<4E> BOLD_DIM_OFF<46>
ITALIC_OFF<EFBFBD> UNDERLINE_OFF<46> BLINK_OFF<46> INVERSE_OFF<46>
HIDDEN_OFF<EFBFBD>STRIKETHROUGH_OFF<46>FG_BLACK<43>FG_WHITE<54> FG_EXTENDED<45>
FG_DEFAULT<EFBFBD>BG_BLACK<43>BG_WHITE<54> BG_EXTENDED<45>
BG_DEFAULT<EFBFBD>FG_BRIGHT_BLACK<43>FG_BRIGHT_WHITE<54>BG_BRIGHT_BLACK<43>BG_BRIGHT_WHITE<54>__static_attributes__r
<00><00>8/tmp/pip-target-wqrk2shd/lib/python/wcwidth/sgr_state.pyr r s<><00><00><08> <0E>E<EFBFBD> <0C>D<EFBFBD>
<0B>C<EFBFBD> <0E>F<EFBFBD><11>I<EFBFBD> <0A>E<EFBFBD><13>K<EFBFBD><0F>G<EFBFBD> <0E>F<EFBFBD><15>M<EFBFBD><19><14><15>L<EFBFBD><13>J<EFBFBD><16>M<EFBFBD><12>I<EFBFBD><14>K<EFBFBD><13>J<EFBFBD><1A><15><11>H<EFBFBD><11>H<EFBFBD><14>K<EFBFBD><13>J<EFBFBD><11>H<EFBFBD><11>H<EFBFBD><14>K<EFBFBD><13>J<EFBFBD><18>O<EFBFBD><18>O<EFBFBD><19>O<EFBFBD><19>Or/r z\x1b\[([\d;:]*)mz\x1b\[[\d;:]*mzc<01><><00>]tRt^Jt$RtRtR]R&RtR]R&RtR]R&Rt R]R&Rt
R]R&Rt R]R &Rt R]R
&Rt R]R &RtR]R &RtR]R &RtR]R&RtR]R&RtR#)<13> _SGRStatea<65>
Track active SGR terminal attributes by category (immutable).
:param bold: Bold attribute (SGR 1).
:param dim: Dim/faint attribute (SGR 2).
:param italic: Italic attribute (SGR 3).
:param underline: Underline attribute (SGR 4).
:param blink: Slow blink attribute (SGR 5).
:param rapid_blink: Rapid blink attribute (SGR 6).
:param inverse: Inverse/reverse attribute (SGR 7).
:param hidden: Hidden/invisible attribute (SGR 8).
:param strikethrough: Strikethrough attribute (SGR 9).
:param double_underline: Double underline attribute (SGR 21).
:param foreground: Foreground color as tuple of SGR params, or None for default.
:param background: Background color as tuple of SGR params, or None for default.
F<EFBFBD>bool<6F>bold<6C>dim<69>italic<69> underline<6E>blink<6E> rapid_blink<6E>inverse<73>hidden<65> strikethrough<67>double_underlineN<65>tuple[int, ...] | None<6E>
foreground<EFBFBD>
backgroundr
)r r r rrr4<00>__annotations__r5r6r7r8r9r:r;r<r=r?r@r.r
r/r0r2r2Js<><00><00><08>"<17>D<EFBFBD>$<24><16><15>C<EFBFBD><14><15><18>F<EFBFBD>D<EFBFBD><18><1B>I<EFBFBD>t<EFBFBD><1B><17>E<EFBFBD>4<EFBFBD><17><1D>K<EFBFBD><14><1D><19>G<EFBFBD>T<EFBFBD><19><18>F<EFBFBD>D<EFBFBD><18><1F>M<EFBFBD>4<EFBFBD><1F>"<22><14>d<EFBFBD>"<22>)-<2D>J<EFBFBD>&<26>-<2D>)-<2D>J<EFBFBD>&<26>-r/r2c<01> <00>V^8<>dQhRRRR/#)<05><00>stater2<00>returnr3r
)<01>formats"r0<00> __annotate__rGns<00><00>
M<01>
M<01> <09>
M<01>d<EFBFBD>
Mr/c<05><><00>VP;'g<>VP;'g<>VP;'g<>VP;'g<>VP;'g<>VP
;'guVP ;'gaVP;'gMVP;'g9VP;'g%VPRJ;'gVPRJ#)z<>
Return True if any attributes are set.
:param state: The SGR state to check.
:returns: True if any attribute differs from default.
N) r4r5r6r7r8r9r:r;r<r=r?r@)rDs&r0<00>_sgr_state_is_activerIns<><00><00> <12>J<EFBFBD>J<EFBFBD> L<01> L<01>%<25>)<29>)<29> L<01> L<01>u<EFBFBD>|<7C>|<7C> L<01> L<01>u<EFBFBD><EFBFBD><EFBFBD> L<01> L<01><14>{<7B>{<7B> L<01> L<01>#<23>/<2F>/<2F> L<01> L<01>38<33>=<3D>=<3D> L<01> L<01>DI<44>L<EFBFBD>L<EFBFBD> L<01> L<01><14>"<22>"<22> L<01> L<01>&+<2B>&<<3C>&<<3C> L<01> L<01><15><1F><1F>t<EFBFBD>+<2B> L<01> L<01>05<30>/?<3F>/?<3F>t<EFBFBD>/K<>Mr/c<01> <00>V^8<>dQhRRRR/#)rCrDr2rE<00>strr
)rFs"r0rGrG{s<00><00>'<27>'<27>)<29>'<27><03>'r/c <05><><00>\V4'gR#VPR3VPR3VPR3VPR3VP
R3VP R3VPR3VPR 3VPR
3VPR 3.
pVUUu.uFwr#V'gKVNK pppVPe2VPR PR VP444VPe2VPR PRVP444RR PV4 R2#uuppi)z<>
Generate minimal SGR sequence to restore this state from reset.
:param state: The SGR state to convert.
:returns: SGR escape sequence string, or empty string if no attributes set.
<EFBFBD><00>1<>2<>3<>4<>5<>6<>7<>8<>9<>21<32>;c3<01>8"<00>TFp\V4x<00>K R#5i<01>N<>rK<00><02>.0<EFBFBD>ps& r0<00> <genexpr><3E>)_sgr_state_to_sequence.<locals>.<genexpr><3E><00><00><00><00>@<40>/?<3F>!<21>s<EFBFBD>1<EFBFBD>v<EFBFBD>v<EFBFBD>/?<3F><><00>c3<01>8"<00>TFp\V4x<00>K R#5irZr[r\s& r0r_r`<00>rarbz[<5B>m)rIr4r5r6r7r8r9r:r;r<r=r?<00>append<6E>joinr@)rD<00>
bool_attrs<EFBFBD>active<76>code<64>paramss& r0<00>_sgr_state_to_sequencerk{s)<00><00> <20><05> &<26> &<26><11>
<0F><1A><1A>S<EFBFBD><19>E<EFBFBD>I<EFBFBD>I<EFBFBD>s<EFBFBD>+<2B>e<EFBFBD>l<EFBFBD>l<EFBFBD>C<EFBFBD>-@<40> <0E><1F><1F>#<23><1E><15><1B><1B>c<EFBFBD> 2<>U<EFBFBD>5F<35>5F<35><03>4L<34> <0E><1D><1D><03><1C>u<EFBFBD>|<7C>|<7C>S<EFBFBD>1<>E<EFBFBD>4G<34>4G<34><13>3M<33> <0E> <1F> <1F><14>&<26> <06>J<EFBFBD> (2<> <<3C>z<EFBFBD>|<7C>v<EFBFBD>V<EFBFBD>d<EFBFBD>d<EFBFBD>z<EFBFBD>F<EFBFBD> <<3C> <0A><17><17>#<23><0E> <0A> <0A>c<EFBFBD>h<EFBFBD>h<EFBFBD>@<40>u<EFBFBD>/?<3F>/?<3F>@<40>@<40>A<> <0C><17><17>#<23><0E> <0A> <0A>c<EFBFBD>h<EFBFBD>h<EFBFBD>@<40>u<EFBFBD>/?<3F>/?<3F>@<40>@<40>A<> <12>3<EFBFBD>8<EFBFBD>8<EFBFBD>F<EFBFBD>#<23>$<24>A<EFBFBD> &<26>&<26><>=s <00> E
<06>.E
c<01> <00>V^8<>dQhRRRR/#)rC<00>sequencerKrEzlist[int | tuple[int, ...]]r
)rFs"r0rGrG<00>s<00><00><12><12><03><12>(C<>r/c<05><><00>\PV4pV'g.#VP^4pV'g^.#.pVPR4F|pRV9dOVPR4Uu.uFqU'd \ V4M^NK ppVP \ V44KXTP V'd \ V4M^4K~ V#uupi)a<>
Parse SGR sequence and return list of parameter values.
Handles compound sequences like ``\x1b[1;31;4m`` -> [1, 31, 4].
Empty params (e.g., ``\x1b[m``) are treated as [0] (reset).
Colon-separated extended colors like ``\x1b[38:2::255:0:0m`` are returned
as tuples: [(38, 2, 255, 0, 0)].
:param sequence: SGR escape sequence string.
:returns: List of integer parameters or tuples for colon-separated colors.
rX<00>:)<07> _SGR_PATTERN<52>match<63>group<75>split<69>intre<00>tuple)rmrq<00>
params_str<EFBFBD>result<6C>paramr^<00>partss& r0<00>_parse_sgr_paramsrz<00>s<><00><00> <19> <1E> <1E>x<EFBFBD> (<28>E<EFBFBD> <10><11> <09><16><1B><1B>Q<EFBFBD><1E>J<EFBFBD> <15><11>s<EFBFBD>
<EFBFBD>*,<2C>F<EFBFBD><1B>!<21>!<21>#<23>&<26><05> <0E>%<25><<3C>27<32><1B><1B>S<EFBFBD>1A<31>B<>1A<31>A<EFBFBD>q<EFBFBD>S<EFBFBD><11>V<EFBFBD>a<EFBFBD>'<27>1A<31>E<EFBFBD>B<> <12>M<EFBFBD>M<EFBFBD>%<25><05>,<2C> '<27> <12>M<EFBFBD>M<EFBFBD><05>#<23>e<EFBFBD>*<2A>1<EFBFBD> 5<>'<27> <12>M<EFBFBD><4D> Cs<00>,Cc<01>$<00>V^8<>dQhRRRRRR/#)rCrjzIterator[int | tuple[int, ...]]<5D>basertrEr>r
)rFs"r0rGrG<00>s$<00><00><10><10> +<2B><10>36<33><10><1B>r/c<05><><00>\V4p\V\4'dR#V^8Xd2\V4p\V\4'dR#\V4^V3#V^8Xdt\V4\V4\V4rep\V\4'g-\V\4'g\V\4'dR#\V4^WEV3#R# \dR#i;i)a%
Parse extended color (256-color or RGB) from parameter iterator.
:param params: Iterator of remaining SGR parameters (semicolon-separated format).
:param base: Base code (38 for foreground, 48 for background).
:returns: Color tuple like (38, 5, N) or (38, 2, R, G, B), or None if malformed.
N)<05>next<78>
isinstancerurt<00> StopIteration)rjr|<00>mode<64>n<>r<>g<>bs&& r0<00>_parse_extended_colorr<72><00>s<><00><00> <0A><13>F<EFBFBD>|<7C><04> <15>d<EFBFBD>E<EFBFBD> "<22> "<22><17> <0F>1<EFBFBD>9<EFBFBD><14>V<EFBFBD> <0C>A<EFBFBD><19>!<21>U<EFBFBD>#<23>#<23><1B><17><04>I<EFBFBD>q<EFBFBD>!<21>$<24> $<24> <0F>1<EFBFBD>9<EFBFBD><1A>6<EFBFBD>l<EFBFBD>D<EFBFBD><16>L<EFBFBD>$<24>v<EFBFBD>,<2C>!<21>A<EFBFBD><19>!<21>U<EFBFBD>#<23>#<23>z<EFBFBD>!<21>U<EFBFBD>';<3B>';<3B>z<EFBFBD>!<21>U<EFBFBD>?S<>?S<><1B><17><04>I<EFBFBD>q<EFBFBD>!<21><01>*<2A> *<2A> <15> <10><> <19> <0A> <0C> <0F> <0A>s)<00>!C<00>(C<00> C<00>A)C<00>C<00> C)<03>(C)c<01>$<00>V^8<>dQhRRRRRR/#)rCrDr2rmrKrEr
)rFs"r0rGrG<00>s&<00><00>N<11>N<11>Y<EFBFBD>N<11>#<23>N<11>)<29>Nr/c<05><>
<00>\V4p\V4pVEFVp\V\4'd<>\ V4^8<>d0V^,\
P 8XdVPVR7pM>\ V4^8<>d/V^,\
P8XdVPVR7pK<>V\
P8Xd \pK<>V\
P8XdVPRR7pK<>V\
P8XdVPRR7pEK V\
P8XdVPRR7pEK3V\
P8XdVPRR7pEK]V\
P8XdVPRR7pEK<>V\
P 8XdVPRR 7pEK<>V\
P"8XdVPRR
7pEK<>V\
P$8XdVPRR 7pEKV\
P&8XdVPRR 7pEK/V\
P(8XdVPRR 7pEKYV\
P*8XdVPRRR7pEK<>V\
P,8XdVPRR7pEK<>V\
P.8XdVPRRR7pEK<>V\
P08XdVPRRR7pEKV\
P28XdVPRR
7pEK.V\
P48XdVPRR 7pEKXV\
P68XdVPRR 7pEK<>\
P8Tu;8:d\
P:8:g1M\
P<Tu;8:d\
P>8:dMMVPV3R7pEK<>\
P@Tu;8:d\
PB8:g1M\
PDTu;8:d\
PF8:dMMVPV3R7pEKdV\
PH8XdVPRR7pEK<>V\
PJ8XdVPRR7pEK<>V\
P 8Xd;\MV\
P 4;p'dVPVR7pEKEKV\
P8XgEK\MV\
P4;p'gEKDVPVR7pEKY V#)z<>
Parse SGR sequence and return new state with updates applied.
:param state: Current SGR state.
:param sequence: SGR escape sequence string.
:returns: New SGRState with updates applied.
)r?)r@T)r4)r5)r6)r7)r8)r9)r:)r;)r<)r=F)r4r5)r7r=)r8r9N)'rz<00>iterrru<00>lenr r$<00>_replacer(r<00>_SGR_STATE_DEFAULTrrrrrrrrrrrrrrrr r!r"r#r*r+r&r'r,r-r%r)r<>)rDrm<00> params_listrjr^<00>colors&& r0<00>_sgr_state_updater<65><00>s<><00><00>$<24>H<EFBFBD>-<2D>K<EFBFBD> <11>+<2B> <1E>F<EFBFBD> <13><01> <15>a<EFBFBD><15> <1F> <1F><12>1<EFBFBD>v<EFBFBD><11>{<7B>q<EFBFBD><11>t<EFBFBD>t<EFBFBD>'7<>'7<>7<><1D><0E><0E>!<21><0E>4<><05><14>Q<EFBFBD><16>1<EFBFBD><1B><11>1<EFBFBD><14><14>)9<>)9<>!9<><1D><0E><0E>!<21><0E>4<><05> <14> <0C><04>
<EFBFBD>
<EFBFBD>?<3F>&<26>E<EFBFBD> <0E>$<24>)<29>)<29>^<5E><19>N<EFBFBD>N<EFBFBD><04>N<EFBFBD>-<2D>E<EFBFBD> <0E>$<24>(<28>(<28>]<5D><19>N<EFBFBD>N<EFBFBD>t<EFBFBD>N<EFBFBD>,<2C>E<EFBFBD> <0E>$<24>+<2B>+<2B> <1D><19>N<EFBFBD>N<EFBFBD>$<24>N<EFBFBD>/<2F>E<EFBFBD> <0E>$<24>.<2E>.<2E> <20><19>N<EFBFBD>N<EFBFBD>T<EFBFBD>N<EFBFBD>2<>E<EFBFBD> <0E>$<24>*<2A>*<2A>_<EFBFBD><19>N<EFBFBD>N<EFBFBD><14>N<EFBFBD>.<2E>E<EFBFBD> <0E>$<24>"<22>"<22> "<22><19>N<EFBFBD>N<EFBFBD>t<EFBFBD>N<EFBFBD>4<>E<EFBFBD> <0E>$<24>,<2C>,<2C> <1E><19>N<EFBFBD>N<EFBFBD>4<EFBFBD>N<EFBFBD>0<>E<EFBFBD> <0E>$<24>+<2B>+<2B> <1D><19>N<EFBFBD>N<EFBFBD>$<24>N<EFBFBD>/<2F>E<EFBFBD> <0E>$<24>$<24>$<24> $<24><19>N<EFBFBD>N<EFBFBD><14>N<EFBFBD>6<>E<EFBFBD> <0E>$<24>'<27>'<27> '<27><19>N<EFBFBD>N<EFBFBD>D<EFBFBD>N<EFBFBD>9<>E<EFBFBD> <0E>$<24>#<23>#<23> #<23><19>N<EFBFBD>N<EFBFBD><05>5<EFBFBD>N<EFBFBD>9<>E<EFBFBD> <0E>$<24>/<2F>/<2F> !<21><19>N<EFBFBD>N<EFBFBD>%<25>N<EFBFBD>0<>E<EFBFBD> <0E>$<24>$<24>$<24> $<24><19>N<EFBFBD>N<EFBFBD>U<EFBFBD>U<EFBFBD>N<EFBFBD>K<>E<EFBFBD> <0E>$<24>.<2E>.<2E> <20><19>N<EFBFBD>N<EFBFBD><15>E<EFBFBD>N<EFBFBD>B<>E<EFBFBD> <0E>$<24>"<22>"<22> "<22><19>N<EFBFBD>N<EFBFBD>5<EFBFBD>N<EFBFBD>1<>E<EFBFBD> <0E>$<24>/<2F>/<2F> !<21><19>N<EFBFBD>N<EFBFBD>%<25>N<EFBFBD>0<>E<EFBFBD> <0E>$<24>(<28>(<28> (<28><19>N<EFBFBD>N<EFBFBD><15>N<EFBFBD>7<>E<EFBFBD><12>m<EFBFBD>m<EFBFBD>q<EFBFBD>1<>D<EFBFBD>M<EFBFBD>M<EFBFBD>1<><15>%<25>%<25><11>B<>d<EFBFBD>.B<>.B<>B<><19>N<EFBFBD>N<EFBFBD>q<EFBFBD>d<EFBFBD>N<EFBFBD>3<>E<EFBFBD><12>m<EFBFBD>m<EFBFBD>q<EFBFBD>1<>D<EFBFBD>M<EFBFBD>M<EFBFBD>1<><15>%<25>%<25><11>B<>d<EFBFBD>.B<>.B<>B<><19>N<EFBFBD>N<EFBFBD>q<EFBFBD>d<EFBFBD>N<EFBFBD>3<>E<EFBFBD> <0E>$<24>/<2F>/<2F> !<21><19>N<EFBFBD>N<EFBFBD>d<EFBFBD>N<EFBFBD>3<>E<EFBFBD> <0E>$<24>/<2F>/<2F> !<21><19>N<EFBFBD>N<EFBFBD>d<EFBFBD>N<EFBFBD>3<>E<EFBFBD> <0E>$<24>"<22>"<22> "<22>-<2D>f<EFBFBD>d<EFBFBD>6F<36>6F<36>G<>G<>u<EFBFBD>G<><1D><0E><0E>%<25><0E>8<><05>H<01> <0E>$<24>"<22>"<22> "<22>-<2D>f<EFBFBD>d<EFBFBD>6F<36>6F<36>G<>G<>u<EFBFBD>G<>G<><1D><0E><0E>%<25><0E>8<><05>C<14>D <11>Lr/c<01> <00>V^8<>dQhRRRR/#)rC<00>linesz Sequence[str]rEz list[str]r
)rFs"r0rGrG#s<00><00>/<12>/<12><1D>/<12>9<EFBFBD>/r/c<05><><00>\;QJdRV4F 'gK RM RM !RV44'd V'g \V4#.p\pVF<>p\V4p\P V4Fp\ W%P44pK V'd WC,MTp\V4'dV\,pVPV4K<> V#)a<>
Propagate SGR codes across wrapped lines.
When text with SGR styling is wrapped across multiple lines, each line
needs to be self-contained for proper display. This function:
- Ends each line with ``\x1b[0m`` if styles are active (prevents bleeding)
- Starts each subsequent line with the active style restored
:param lines: List of text lines, possibly containing SGR sequences.
:returns: List of lines with SGR codes propagated.
Example::
>>> propagate_sgr(['\x1b[31mhello', 'world\x1b[0m'])
['\x1b[31mhello\x1b[0m', '\x1b[31mworld\x1b[0m']
This is useful in cases of making special editors and viewers, and is used for the
default modes (propagate_sgr=True) of :func:`wcwidth.width` and :func:`wcwidth.clip`.
When wrapping and clipping text containing SGR sequences, maybe a previous line enabled the BLUE
color--if we are viewing *only* the line following, we would want the carry over the BLUE color,
and all lines with sequences should end with terminating reset (``\x1b[0m``).
c3<01>L"<00>TFp\PV4x<00>K R#5irZ)<02>_SGR_QUICK_CHECK<43>search)r]<00>lines& r0r_<00> propagate_sgr.<locals>.<genexpr>=s<00><00><00>?<3F><15><14><1F>&<26>&<26>t<EFBFBD>,<2C>,<2C><15>s<00>"$TF) <0B>any<6E>listr<74>rkrp<00>finditerr<72>rrrI<00>
_SGR_RESETre)r<>rwrDr<><00>prefixrq<00> output_lines& r0<00> propagate_sgrr<72>#s<><00><00>4 <0F>3<EFBFBD>?<3F><15>?<3F>3<EFBFBD>3<EFBFBD>3<EFBFBD>?<3F><15>?<3F> ?<3F> ?<3F>u<EFBFBD><13>E<EFBFBD>{<7B><1A><1A>F<EFBFBD> <1E>E<EFBFBD><15><04>'<27><05>.<2E><06>"<22>*<2A>*<2A>4<EFBFBD>0<>E<EFBFBD>%<25>e<EFBFBD>[<5B>[<5B>]<5D>;<3B>E<EFBFBD>1<>(.<2E>f<EFBFBD>m<EFBFBD>4<EFBFBD> <0B> <1F><05> &<26> &<26>%<25>
<EFBFBD>2<>K<EFBFBD><0E> <0A> <0A>k<EFBFBD>"<22><16> <12>Mr/)r<00>
__future__r<00>re<72>enumr<00>typingrrrrr <00>compilerpr<>r<>r2r<>rIrkrzr<>r<>r<>r
r/r0<00><module>r<>s<><00><01><04>#<23>
<EFBFBD><18>6<>6<><10><1F>&<1A>7<EFBFBD>&<1A>Z<12>z<EFBFBD>z<EFBFBD>-<2D>.<2E> <0C><16>:<3A>:<3A>/<2F>0<><10><17>
<EFBFBD>.<2E>
<EFBFBD>.<2E>B<1F>[<5B><12>
M<01>'<27>8<12><<10>:N<11>b/r/