hyb
2025-11-04 668edf874b4f77214a8ff4513e60e3c1a973f532
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
Ë
Añúhd4ãó—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl    m
Z
ddl m Z dgZ d„Zd„Zej"Z    d„ZGd    „d
«ZGd „d «ZGd „deeej,«ZGd„de«Zdd„ZGd„d«Zy)éNé)Ú text_encoding)Ú
TranslatorÚPathcóB—tjt|«dd«S)a2
    Given a path with elements separated by
    posixpath.sep, generate all parents of that path.
 
    >>> list(_parents('b/d'))
    ['b']
    >>> list(_parents('/b/d/'))
    ['/b']
    >>> list(_parents('b/d/f/'))
    ['b/d', 'b']
    >>> list(_parents('b'))
    []
    >>> list(_parents(''))
    []
    rN)Ú    itertoolsÚisliceÚ    _ancestry)Úpaths úSH:\Change_password\venv_build\Lib\site-packages\setuptools/_vendor/zipp/__init__.pyÚ_parentsr s€ô  × Ñ œI d›O¨Q°Ó 5Ð5óc#óÞK—|jtj«}|rH|tjk7r4|–—tj|«\}}|r|tjk7rŒ2yyyy­w)aR
    Given a path with elements separated by
    posixpath.sep, generate all elements of that path
 
    >>> list(_ancestry('b/d'))
    ['b/d', 'b']
    >>> list(_ancestry('/b/d/'))
    ['/b/d', '/b']
    >>> list(_ancestry('b/d/f/'))
    ['b/d/f', 'b/d', 'b']
    >>> list(_ancestry('b'))
    ['b']
    >>> list(_ancestry(''))
    []
    N)ÚrstripÚ    posixpathÚsepÚsplit)r Útails  r r
r
%sVèø€ð  ;‰;”y—}‘}Ó %€DÙ
4œ9Ÿ=™=Ò(ØŠ
Ü—_‘_ TÓ*‰
ˆˆdñ 4œ9Ÿ=™=Ô(ˆ$Ð(ˆ$ùs ‚A&A-Á)A-cóT—tjt|«j|«S)zZ
    Return items in minuend not in subtrahend, retaining order
    with O(1) lookup.
    )rÚ filterfalseÚsetÚ __contains__)ÚminuendÚ
subtrahends  r Ú _differencer?s!€ô
×  Ñ  ¤ Z£×!=Ñ!=¸wÓ GÐGrcó2‡—eZdZdZˆfd„Zd„Zˆfd„ZˆxZS)ÚInitializedStatez?
    Mix-in to save the initialization state for pickling.
    có@•—||_||_t‰| |i|¤Žy©N)Ú_InitializedState__argsÚ_InitializedState__kwargsÚsuperÚ__init__)ÚselfÚargsÚkwargsÚ    __class__s   €r r#zInitializedState.__init__Ls#ø€ØˆŒ ؈Œ Ü ‰Ñ˜$Ð) &Ó)rcó2—|j|jfSr)r r!©r$s r Ú __getstate__zInitializedState.__getstate__Qs€Ø{‰{˜DŸM™MÐ)Ð)rcó.•—|\}}t‰||i|¤Žyr)r"r#)r$Ústater%r&r's    €r Ú __setstate__zInitializedState.__setstate__Tsø€Ø‰ ˆˆfÜ ‰Ñ˜$Ð) &Ó)r)Ú__name__Ú
__module__Ú __qualname__Ú__doc__r#r*r-Ú __classcell__©r's@r rrGsø„ñô*ò
*÷*ð*rrcó2‡—eZdZdZˆfd„Zed„«ZˆxZS)ÚSanitizedNamesz7
    ZipFile mix-in to ensure names are sanitized.
    cóZ•—tt|jt‰|«««Sr)ÚlistÚmapÚ    _sanitizer"Únamelist©r$r's €r r:zSanitizedNames.namelist^s!ø€Ü”C˜Ÿ™¬©Ñ(8Ó(:Ó;Ó<Ð<rcó—d„}tjdd|tj¬«}|jdd«}|j    d«}dj t ||««}|s td«‚|d|jd«zzS)aa
        Ensure a relative path with posix separators and no dot names.
 
        Modeled after
        https://github.com/python/cpython/blob/bcc1be39cb1d04ad9fc0bd1b9193d3972835a57c/Lib/zipfile/__init__.py#L1799-L1813
        but provides consistent cross-platform behavior.
 
        >>> san = SanitizedNames._sanitize
        >>> san('/foo/bar')
        'foo/bar'
        >>> san('//foo.txt')
        'foo.txt'
        >>> san('foo/.././bar.txt')
        'foo/bar.txt'
        >>> san('foo../.bar.txt')
        'foo../.bar.txt'
        >>> san('\\foo\\bar.txt')
        'foo/bar.txt'
        >>> san('D:\\foo.txt')
        'D/foo.txt'
        >>> san('\\\\server\\share\\file.txt')
        'server/share/file.txt'
        >>> san('\\\\?\\GLOBALROOT\\Volume3')
        '?/GLOBALROOT/Volume3'
        >>> san('\\\\.\\PhysicalDrive1\\root')
        'PhysicalDrive1/root'
 
        Retain any trailing slash.
        >>> san('abc/')
        'abc/'
 
        Raises a ValueError if the result is empty.
        >>> san('../..')
        Traceback (most recent call last):
        ...
        ValueError: Empty filename
        có—|xr|dvS)N>ú..ú.©)Úparts r Úallowedz)SanitizedNames._sanitize.<locals>.allowed‰s€ØÒ3˜D¨ Ð3Ð 3rz    ^([A-Z]):z\1)Úflagsú\ú/zEmpty filename)    ÚreÚsubÚ
IGNORECASEÚreplacerÚjoinÚfilterÚ
ValueErrorÚendswith)ÚnamerBÚbareÚcleanÚpartsÚjoineds      r r9zSanitizedNames._sanitizeas}€òP    4ô
v‰vk 5¨$´b·m±mÔDˆØ— ‘ ˜T 3Ó'ˆØ— ‘ ˜CÓ ˆØ—‘œ& ¨%Ó0Ó1ˆÙÜÐ-Ó.Ð .ؘ˜dŸm™m¨CÓ0Ñ0Ñ0Ð0r)r.r/r0r1r:Ú staticmethodr9r2r3s@r r5r5Ys!ø„ñô=ðñ21óô21rr5c󚇗eZdZdZed„«Zˆfd„Zd„Zd„Zˆfd„Z    e
d„«Z e
de jd    e jfd
„«ZˆxZS) Ú CompleteDirsa8
    A ZipFile subclass that ensures that implied directories
    are always included in the namelist.
 
    >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt']))
    ['foo/', 'foo/bar/']
    >>> list(CompleteDirs._implied_dirs(['foo/bar.txt', 'foo/bar/baz.txt', 'foo/bar/']))
    ['foo/']
    có˜—tjjtt|««}d„|D«}t t ||««S)Nc3óBK—|]}|tjz–—Œy­wr)rr)Ú.0Úps  r ú    <genexpr>z-CompleteDirs._implied_dirs.<locals>.<genexpr>¥sèø€Ò6¨1”y—}‘}Õ$Ñ6ùs‚)rÚchainÚ from_iterabler8r Ú_deduper)ÚnamesÚparentsÚas_dirss   r Ú _implied_dirszCompleteDirs._implied_dirs¢s9€ä—/‘/×/Ñ/´´H¸eÓ0DÓEˆÙ6¨gÔ6ˆÜ”{ 7¨EÓ2Ó3Ð3rcóZ•—t‰|«}|t|j|««zSr)r"r:r7ra)r$r^r's  €r r:zCompleteDirs.namelist¨s+ø€Ü‘Ñ Ó"ˆØ”t˜D×.Ñ.¨uÓ5Ó6Ñ6Ð6rcó4—t|j««Sr)rr:r)s r Ú    _name_setzCompleteDirs._name_set¬s€Ü4—=‘=“?Ó#Ð#rcóL—|j«}|dz}||vxr||v}|r|S|S)zx
        If the name represents a directory, return that name
        as a directory (with the trailing slash).
        rE)rd)r$rNr^ÚdirnameÚ    dir_matchs     r Ú resolve_dirzCompleteDirs.resolve_dir¯s:€ð
—‘Ó ˆØ˜‘*ˆØ Ð%Ò:¨'°UÐ*:ˆ    Ù#ˆwÐ-¨Ð-rcó¶•—    t‰||«S#t$r=|jd«r||j    «vr‚t j |¬«cYSwxYw)z6
        Supplement getinfo for implied dirs.
        rE©Úfilename)r"ÚgetinfoÚKeyErrorrMrdÚzipfileÚZipInfo)r$rNr's  €r rlzCompleteDirs.getinfo¹sRø€ð    2Ü‘7‘? 4Ó(Ð (øÜò    2Ø—=‘= Ô%¨°T·^±^Ó5EÑ)EØÜ—?‘?¨DÔ1Ò 1ð    2úsƒ’AAÁAcó¤—t|t«r|St|tj«s||«Sd|jvrt}||_|S)zl
        Given a source (filename or zipfile), return an
        appropriate CompleteDirs subclass.
        Úr)Ú
isinstancerUrnÚZipFileÚmoder')ÚclsÚsources  r ÚmakezCompleteDirs.makeÄsK€ô fœlÔ +؈Mä˜&¤'§/¡/Ô2ِv“;Ð ð f—k‘kÑ !܈CàˆÔ؈ rÚzfÚreturncór—|j|j««D]}|j|d«Œ|S)z‰
        Given a writable zip file zf, inject directory entries for
        any directories implied by the presence of children.
        r)rar:Úwritestr)rurxrNs   r ÚinjectzCompleteDirs.inject×s7€ð ×%Ñ% b§k¡k£mÓ4ò    #ˆDØ K‰K˜˜cÕ "ð    #àˆ    r)r.r/r0r1rSrar:rdrhrlÚ classmethodrwrnrsr|r2r3s@r rUrU—snø„ñðñ4óð4ô
7ò$ò.ô    2ðñóðð$𘟙ð¨G¯O©OòóôrrUcó,‡—eZdZdZˆfd„Zˆfd„ZˆxZS)Ú
FastLookupzV
    ZipFile subclass to ensure implicit
    dirs exist and are resolved rapidly.
    c󸕗tjt«5|jcddd«S#1swYnxYwt‰|«|_|jSr)Ú
contextlibÚsuppressÚAttributeErrorÚ_FastLookup__namesr"r:r;s €r r:zFastLookup.namelistèsFø€Ü ×  Ñ  ¤Ó 0ñ     Ø—<‘<÷     ÷     ò     úä‘wÑ'Ó)ˆŒ ؏|‰|Ðó› 1±:c󸕗tjt«5|jcddd«S#1swYnxYwt‰|«|_|jSr)rr‚rƒÚ_FastLookup__lookupr"rdr;s €r rdzFastLookup._name_setîsFø€Ü ×  Ñ  ¤Ó 0ñ    !Ø—=‘=÷    !÷    !ò    !úä™Ñ)Ó+ˆŒ ؏}‰}Ðr…)r.r/r0r1r:rdr2r3s@r rrâsø„ñô
÷ ðrrcód—tjjdk(}d|z}t||«||fS)NÚpypyé)ÚsysÚimplementationrNr)Úencodingr%r&Úis_pypyÚ stack_levels     r Ú_extract_text_encodingrõs5€ä× Ñ ×%Ñ%¨Ñ/€Gؐg‘+€KÜ ˜ ;Ó /°°vÐ =Ð=rcó—eZdZdZdZd d„Zd„Zd„Zd!ddœd„Zd    „Z    e
d
„«Z e
d „«Z e
d „«Z e
d „«Ze
d„«Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZeZ e
d„«Z!y)"ru'
    A :class:`importlib.resources.abc.Traversable` interface for zip files.
 
    Implements many of the features users enjoy from
    :class:`pathlib.Path`.
 
    Consider a zip file with this structure::
 
        .
        â”œâ”€â”€ a.txt
        â””── b
            â”œâ”€â”€ c.txt
            â””── d
                â””── e.txt
 
    >>> data = io.BytesIO()
    >>> zf = zipfile.ZipFile(data, 'w')
    >>> zf.writestr('a.txt', 'content of a')
    >>> zf.writestr('b/c.txt', 'content of c')
    >>> zf.writestr('b/d/e.txt', 'content of e')
    >>> zf.filename = 'mem/abcde.zip'
 
    Path accepts the zipfile object itself or a filename
 
    >>> path = Path(zf)
 
    From there, several path operations are available.
 
    Directory iteration (including the zip file itself):
 
    >>> a, b = path.iterdir()
    >>> a
    Path('mem/abcde.zip', 'a.txt')
    >>> b
    Path('mem/abcde.zip', 'b/')
 
    name property:
 
    >>> b.name
    'b'
 
    join with divide operator:
 
    >>> c = b / 'c.txt'
    >>> c
    Path('mem/abcde.zip', 'b/c.txt')
    >>> c.name
    'c.txt'
 
    Read text:
 
    >>> c.read_text(encoding='utf-8')
    'content of c'
 
    existence:
 
    >>> c.exists()
    True
    >>> (b / 'missing.txt').exists()
    False
 
    Coercion to string:
 
    >>> import os
    >>> str(c).replace(os.sep, posixpath.sep)
    'mem/abcde.zip/b/c.txt'
 
    At the root, ``name``, ``filename``, and ``parent``
    resolve to the zipfile.
 
    >>> str(path)
    'mem/abcde.zip/'
    >>> path.name
    'abcde.zip'
    >>> path.filename == pathlib.Path('mem/abcde.zip')
    True
    >>> str(path.parent)
    'mem'
 
    If the zipfile has no filename, such ï»¿attributes are not
    valid and accessing them will raise an Exception.
 
    >>> zf.filename = None
    >>> path.name
    Traceback (most recent call last):
    ...
    TypeError: ...
 
    >>> path.filename
    Traceback (most recent call last):
    ...
    TypeError: ...
 
    >>> path.parent
    Traceback (most recent call last):
    ...
    TypeError: ...
 
    # workaround python/cpython#106763
    >>> pass
    z>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})cóF—tj|«|_||_y)aX
        Construct a Path from a ZipFile or filename.
 
        Note: When the source is an existing ZipFile object,
        its type (__class__) will be mutated to a
        specialized type. If the caller wishes to retain the
        original type, the caller should either create a
        separate ZipFile object or pass a filename.
        N)rrwÚrootÚat)r$r“r”s   r r#z Path.__init__es€ô—O‘O DÓ)ˆŒ    Øˆrcó —|j|jurtS|j|jf|j|jfk(S)zU
        >>> Path(zipfile.ZipFile(io.BytesIO(), 'w')) == 'foo'
        False
        )r'ÚNotImplementedr“r”)r$Úothers  r Ú__eq__z Path.__eq__rs?€ð
>‰> §¡Ñ 0Ü!Ð !Ø—    ‘    ˜4Ÿ7™7Ð#¨¯
©
°E·H±HÐ'=Ñ=Ð=rcóD—t|j|jf«Sr)Úhashr“r”r)s r Ú__hash__z Path.__hash__{s€ÜT—Y‘Y §¡Ð(Ó)Ð)rN©ÚpwdcóN—|j«r t|«‚|d}|j«s|dk(r t|«‚|jj |j ||¬«}d|vr|s|r td«‚|St|i|¤Ž\}}}tj||g|¢­i|¤ŽS)zª
        Open this entry as text or binary following the semantics
        of ``pathlib.Path.open()`` by passing arguments through
        to io.TextIOWrapper().
        rrqrœÚbz*encoding args invalid for binary operation) Úis_dirÚIsADirectoryErrorÚexistsÚFileNotFoundErrorr“Úopenr”rLrÚioÚ TextIOWrapper)r$rtrr%r&Úzip_modeÚstreamrs        r r¤z    Path.open~s§€ð ;‰;Œ=Ü# DÓ)Ð )ؘ‘7ˆØ{‰{Œ} ¨S¢Ü# DÓ)Ð )Ø—‘—‘ §¡¨°sÓ;ˆØ $‰;Ù‘vÜ Ð!MÓNÐN؈Mä!7¸Ð!HÀÑ!Hш$˜Ü×Ñ ¨ÐB°4ÒB¸6ÑBÐBrcóp—tj|jxs|jj«Sr)ÚpathlibÚ PurePosixPathr”r“rkr)s r Ú_basez
Path._base’s&€Ü×$Ñ$ T§W¡WÒ%B°·    ±    ×0BÑ0BÓCÐCrcó6—|j«jSr)r¬rNr)s r rNz    Path.name•ó€àz‰z‹|נѠРrcó6—|j«jSr)r¬Úsuffixr)s r r°z Path.suffix™s€àz‰z‹|×"Ñ"Ð"rcó6—|j«jSr)r¬Úsuffixesr)s r r²z Path.suffixess€àz‰z‹|×$Ñ$Ð$rcó6—|j«jSr)r¬Ústemr)s r r´z    Path.stem¡r®rcó†—tj|jj«j    |j
«Sr)rªrr“rkÚjoinpathr”r)s r rkz Path.filename¥s*€ä|‰|˜DŸI™I×.Ñ.Ó/×8Ñ8¸¿¹ÓAÐArcóš—t|i|¤Ž\}}}|jd|g|¢­i|¤Ž5}|j«cddd«S#1swYyxYw)Nrq)rr¤Úread)r$r%r&rÚstrms     r Ú    read_textzPath.read_text©sR€Ü!7¸Ð!HÀÑ!Hш$˜Ø ˆTY‰Ys˜HÐ 6 tÒ 6¨vÑ 6ð    ¸$Ø—9‘9“;÷    ÷    ò    ús §AÁA
cóp—|jd«5}|j«cddd«S#1swYyxYw)NÚrb)r¤r¸)r$r¹s  r Ú
read_byteszPath.read_bytes®s-€Ø Y‰Yt‹_ð     Ø—9‘9“;÷    ÷    ò    ús’,¬5có–—tj|jjd««|jjd«k(S©NrE)rrfr”r)r$r s  r Ú    _is_childzPath._is_child²s2€Ü× Ñ  §¡§¡°Ó!4Ó5¸¿¹¿¹ÈÓ9LÑLÐLrcó:—|j|j|«Sr)r'r“)r$r”s  r Ú_nextz
Path._nextµs€Ø~‰~˜dŸi™i¨Ó,Ð,rcóV—|j xs|jjd«Sr¿)r”rMr)s r r z Path.is_dir¸s"€Ø—7‘7ˆ{Ò3˜dŸg™g×.Ñ.¨sÓ3Ð3rcóH—|j«xr|j« Sr)r¢r r)s r Úis_filez Path.is_file»s€Ø{‰{‹}Ò2 T§[¡[£]Ð!2Ð2rcóN—|j|jj«vSr)r”r“rdr)s r r¢z Path.exists¾s€Øw‰w˜$Ÿ)™)×-Ñ-Ó/Ð/Ð/rcóÀ—|j«s td«‚t|j|jj ««}t |j|«S)NzCan't listdir a file)r rLr8rÂr“r:rKrÀ)r$Úsubss  r Úiterdirz Path.iterdirÁsE€Ø{‰{Œ}ÜÐ3Ó4Ð 4ܐ4—:‘:˜tŸy™y×1Ñ1Ó3Ó4ˆÜd—n‘n dÓ+Ð+rcó^—tj|j«j|«Sr)rªr«r”Úmatch)r$Ú path_patterns  r rËz
Path.matchÇs"€Ü×$Ñ$ T§W¡WÓ-×3Ñ3°LÓAÐArcó”—|jj|j«}|jdz    }t    j
|«S)z8
        Return whether this path is a symlink.
        é)r“rlr”Ú external_attrÚstatÚS_ISLNK)r$Úinforts   r Ú
is_symlinkzPath.is_symlinkÊs;€ðy‰y× Ñ  §¡Ó)ˆØ×!Ñ! RÑ'ˆÜ|‰|˜DÓ!Ð!rcóT—|std|›«‚tj|j«}t    d¬«}tj
||j |«z«j}d„|jjD«}t|jt||««S)NzUnacceptable pattern: rE)Úsepsc3ó4K—|]}|j–—Œy­wrrj)rXÚdatas  r rZzPath.glob.<locals>.<genexpr>Ùsèø€Ò> 4—•Ñ>ùs‚) rLrFÚescaper”rÚcompileÚ    translateÚ    fullmatchr“Úfilelistr8rÂrK)r$ÚpatternÚprefixÚtrÚmatchesr^s      r Úglobz    Path.globÒs‚€ÙÜÐ5°g°[ÐAÓBÐ Bä—‘˜4Ÿ7™7Ó#ˆÜ ˜SÔ !ˆÜ—*‘*˜V b§l¡l°7Ó&;Ñ;Ó<×FÑFˆÙ>¨4¯9©9×+=Ñ+=Ô>ˆÜ4—:‘:œv g¨uÓ5Ó6Ð6rcó*—|jd|›«S)Nz**/)rá)r$rÝs  r Úrglobz
Path.rglobÜs€Øy‰y˜3˜w˜i˜Ó)Ð)rcól—tjt|«t|j|Ž««Sr)rÚrelpathÚstrr¶)r$r—Úextras   r Ú relative_tozPath.relative_toßs)€Ü× Ñ ¤ T£¬C°°·±ÀÐ0FÓ,GÓHÐHrcój—tj|jj|j«Sr)rrJr“rkr”r)s r Ú__str__z Path.__str__âs!€Ü~‰~˜dŸi™i×0Ñ0°$·'±'Ó:Ð:rcó:—|jj|¬«S)Nr))Ú _Path__reprÚformatr)s r Ú__repr__z Path.__repr__ås€Ø{‰{×!Ñ! tÐ!Ó,Ð,rcó–—tj|jg|¢­Ž}|j|jj |««Sr)rrJr”rÂr“rh)r$r—Únexts   r r¶z Path.joinpathès7€Ü~‰~˜dŸg™gÐ.¨Ò.ˆØz‰z˜$Ÿ)™)×/Ñ/°Ó5Ó6Ð6rcóҗ|js|jjStj|jj d««}|r|dz }|j |«Sr¿)r”rkÚparentrrfrrÂ)r$Ú    parent_ats  r ròz Path.parentîsR€àwŠwØ—=‘=×'Ñ'Ð 'Ü×%Ñ% d§g¡g§n¡n°SÓ&9Ó:ˆ    Ù Ø ˜Ñ ˆI؏z‰z˜)Ó$Ð$r)Ú)rq)"r.r/r0r1rìr#r˜r›r¤r¬ÚpropertyrNr°r²r´rkrºr½rÀrÂr rÅr¢rÉrËrÓrárãrèrêrîr¶Ú __truediv__ròr@rr rrüs„ñdðLN€Fó ò>ò*ðC¨ôCò(Dðñ!óð!ðñ#óð#ðñ%óð%ðñ!óð!ðñBóðBòò
òMò-ò4ò3ò0ò,ò Bò"ò7ò*òIò;ò-ò7ð€Kà ñ%óñ%rr)r¥rrnrrrªrFrÐr‹Ú compat.py310rrárÚ__all__r r
ÚdictÚfromkeysr]rrr5rsrUrrrr@rr ú<module>rûs—ðÛ    ÛÛÛÛÛÛ    Û Û
å'Ýð ˆ(€ò6ò&+ð, -‰-€Ø/òH÷*ñ*÷$;1ñ;1ô|HÐ# ^°W·_±_ôHôVôó&>÷y%òy%r