sagemath / sage

Main repository of SageMath
https://www.sagemath.org
Other
1.31k stars 451 forks source link

py3: automorphism_group, canonical_label, canonical_form and doctest in MathonPseudocyclicStronglyRegularGraph #27571

Closed dcoudert closed 5 years ago

dcoudert commented 5 years ago

This ticket fix py3 failing doctest in graphs.MathonPseudocyclicStronglyRegularGraph:

Failed example:
    L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
Expected:
    [ 0  1 -1 -3 -2 -4  3  4  2]
    [-1  0  1 -4 -3 -2  2  3  4]
    [ 1 -1  0 -2 -4 -3  4  2  3]
    [ 3  4  2  0  1 -1 -3 -2 -4]
    [ 2  3  4 -1  0  1 -4 -3 -2]
    [ 4  2  3  1 -1  0 -2 -4 -3]
    [-3 -2 -4  3  4  2  0  1 -1]
    [-4 -3 -2  2  3  4 -1  0  1]
    [-2 -4 -3  4  2  3  1 -1  0]
Got:
    [ 0  1  4  2 -3 -1 -4 -2  3]
    [-1  0  3  4 -4  1 -2 -3  2]
    [-4 -3  0  1  2 -2  4  3 -1]
    [-2 -4 -1  0  4 -3  3  2  1]
    [ 3  4 -2 -4  0  2 -1  1 -3]
    [ 1 -1  2  3 -2  0 -3 -4  4]
    [ 4  2 -4 -3  1  3  0 -1 -2]
    [ 2  3 -3 -2 -1  4  1  0 -4]
    [-3 -2  1 -1  3 -4  2  4  0]

and

Failed example:
    G9.automorphism_group(algorithm="bliss").order() # optional - bliss
Expected:
    9
Got:
    3

in this ticket, we do

CC: @tscrim @dimpase @stumpc5

Component: graph theory

Author: David Coudert

Branch/Commit: 2136e19

Reviewer: Dima Pasechnik

Issue created by migration from https://trac.sagemath.org/ticket/27571

dcoudert commented 5 years ago

Commit: 45630b8

dcoudert commented 5 years ago

New commits:

45630b8trac #27571: fix a doctest in families.py
dcoudert commented 5 years ago

Branch: public/graphs/27571_automorphism_group

dcoudert commented 5 years ago

Description changed:

--- 
+++ 
@@ -1,4 +1,4 @@
-The py3 failing doctest in in `graphs.MathonPseudocyclicStronglyRegularGraph` is
+This ticket fix this py3 failing doctest in `graphs.MathonPseudocyclicStronglyRegularGraph`

Failed example: @@ -43,3 +43,4 @@

  1. ensure that the ordering with 'sage' and 'bliss' is the same
  2. specify the partition in the doctest of MathonPseudocyclicStronglyRegularGraph to make the doctest stable with py2 and py3

+Other doctests are still failing with py3 and bliss.

dcoudert commented 5 years ago

Changed commit from 45630b8 to 88bde07

dcoudert commented 5 years ago

Changed branch from public/graphs/27571_automorphism_group to public/graphs/27571_automorphism

dcoudert commented 5 years ago
comment:2

previous branch was not correct (direct modification of develop. oups..)


New commits:

88bde07trac #27571: fix a doctest in MathonPseudocyclicStronglyRegularGraph
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

cedcb22trac #27571: clean bliss, canonical_form, and automorphism_group
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Changed commit from 88bde07 to cedcb22

dcoudert commented 5 years ago

Description changed:

--- 
+++ 
@@ -40,7 +40,10 @@
 and the order `list(G)` is not always the same in py2 and py3...

 So, in this ticket, we do
-1. ensure that the ordering with `'sage'` and `'bliss'` is the same
-2. specify the partition in the doctest of `MathonPseudocyclicStronglyRegularGraph` to make the doctest stable with py2 and py3
+- ensure that the ordering with `'sage'` and `'bliss'` is the same in `automorphism_group` and `canonical_label`/`canonical_form`
+- clean bliss to avoid for instance indexing a dictionary with a possibly not hashable key. The new solution is slower but safe.
+- specify the partition in the doctest of `MathonPseudocyclicStronglyRegularGraph` to make the doctest stable with py2 and py3
+
+

 Other doctests are still failing with py3 and bliss.
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Changed commit from cedcb22 to 9006edb

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

9006edbtrac #27571: remove not tested tag in petersen_family
dcoudert commented 5 years ago
comment:6

With py3 I regularly tag has not tested the doctest of pertersen_family. This is a bug reported in #26800...

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

7598b52trac #27571: Merged with 8.8.beta0
8fcd584trac #27571: mark a doctest printing a dictionary py2 py3
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Changed commit from 9006edb to 8fcd584

dcoudert commented 5 years ago

Description changed:

--- 
+++ 
@@ -39,7 +39,7 @@
 - for `'bliss'`, the order is always `list(G)`
 and the order `list(G)` is not always the same in py2 and py3...

-So, in this ticket, we do
+**So, in this ticket, we do**
 - ensure that the ordering with `'sage'` and `'bliss'` is the same in `automorphism_group` and `canonical_label`/`canonical_form`
 - clean bliss to avoid for instance indexing a dictionary with a possibly not hashable key. The new solution is slower but safe.
 - specify the partition in the doctest of `MathonPseudocyclicStronglyRegularGraph` to make the doctest stable with py2 and py3
dcoudert commented 5 years ago

Description changed:

--- 
+++ 
@@ -46,4 +46,4 @@

-Other doctests are still failing with py3 and bliss.
+Other doctests are still failing with py3 and bliss and could be fixed in another ticket.
dcoudert commented 5 years ago
comment:10

I tried to investigate further on the possible cause of the issues with automorphism_group and the Python3 failing doctests in src/sage/graphs/generators/families.py.

The good news is that we have the same result with 'bliss' and 'sage'

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
[ 0  1 -1 -3 -2 -4  3  4  2]
[-1  0  1 -4 -3 -2  2  3  4]
[ 1 -1  0 -2 -4 -3  4  2  3]
[ 3  4  2  0  1 -1 -3 -2 -4]
[ 2  3  4 -1  0  1 -4 -3 -2]
[ 4  2  3  1 -1  0 -2 -4 -3]
[-3 -2 -4  3  4  2  0  1 -1]
[-4 -3 -2  2  3  4 -1  0  1]
[-2 -4 -3  4  2  3  1 -1  0]

sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3.is_strongly_regular(parameters=True)
(441, 220, 109, 110)
sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss
3  # <-- expect 27 in Python 2 
sage: G3x3.automorphism_group(algorithm="sage").order() # long time
3  # <-- expect 27 in Python 2 

The issue may come from PermutationGroup that is used in both case...

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Changed commit from 8fcd584 to 15790aa

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

15790aatrac #27571: fix merge conflict with 8.8.beta5
dcoudert commented 5 years ago
comment:12

Any comment is more than welcome.

dimpase commented 5 years ago
comment:13

hmm, I don't understand, are you saying there is a discrepancy between Python 2 and Python 3 answers?

dcoudert commented 5 years ago
comment:14

Yes, the answer in py2 of sage: G3x3.automorphism_group(algorithm="sage").order() is different than in py3. have no clue whats going on.

Here, I try to align the behaviors with sage and bliss, and fix an issue in MathonPseudocyclicStronglyRegularGraph.

dimpase commented 5 years ago
comment:15

I presume that py2 is giving the correct answer, right?

dcoudert commented 5 years ago
comment:16

I don't know. We should ask experts in these graph and methods.

dimpase commented 5 years ago
comment:17

why would you think there is graphs.PasechnikGraph(..) there? you are talking to one of them ;-)

$ git blame src/sage/graphs/generators/families.py
...
4c7cb931a9b (Dima Pasechnik    2015-11-07 17:41:10 +0000 3124) def MathonPseudocyclicStronglyRegularGraph(t, G=None, L=None):
...

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3. (you should also chech that the canonical labellings are the same, naturally)

I guess it's a bug in py3 implementation (or in bliss)

dcoudert commented 5 years ago
comment:18

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3.

How can I do that ?

(you should also chech that the canonical labellings are the same, naturally)

Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use partition = [list(self)]

I guess it's a bug in py3 implementation (or in bliss)

I don't know. I'm having hard time trying to understand this code.

I'll be happy if we could at least finalize this ticket, and possibly let the other issue for another dedicated ticket.

dimpase commented 5 years ago
comment:19

Replying to @dcoudert:

you can take canonical forms of G3x3 in py2 and in py3, in py2 compute G3x3.canonical_label().automorphism_group() (of order 27) and check that it is also an automorphism group for G3x3 in py3.

How can I do that ?

G3x3.canonical_label().automorphism_group() gives the group by a list of generators, so apply each of them to the other graph...

(you should also chech that the canonical labellings are the same, naturally)

Since we try to avoid sorting vertices, canonical labels in py2 and py3 have no reason to be the same. And, we use partition = [list(self)]

well, this is manifestly not true - canonical means lexicographically minimal (or maximal) 0-1 adjacency matrix (converted into a vector). A non-lexicographically optimal "canonical" is not canonical...

dcoudert commented 5 years ago
comment:20

G3x3.canonical_label().automorphism_group() gives the group by a list of generators, so apply each of them to the other graph...

I really don't know how to do that. I have never studied or used these tools.

dimpase commented 5 years ago
comment:21

Well, applying a permutation p to a a graph g is just g.relabel(perm=p). E.g.

sage: g=graphs.PetersenGraph()
sage: aut=g.automorphism_group()
sage: amat=g.adjacency_matrix()
sage: g.relabel(perm=aut.gens()[0])
sage: amat==g.adjacency_matrix()  # as expected, as a.gens() are automorphims of g
True
age: p=PermutationGroupElement("(1,2,3,4,5,6,7,8,9,10)")
sage: g.relabel(perm=p)           # but p is not
sage: amat==g.adjacency_matrix()  # so the adjacency matrix gets changed
False
dcoudert commented 5 years ago
comment:22

I tried this with Python 2 with and without this patch and get the same error:

sage: g = graphs.PetersenGraph()
sage: h = g.canonical_label()
sage: aut = h.automorphism_group()
sage: aut
Permutation Group with generators [(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)]
sage: list(aut.gens())
[(3,6)(4,7)(5,9), (1,4)(2,6)(5,7)(8,9), (0,1)(3,4)(6,7)]
sage: amat = h.adjacency_matrix()
sage: p = PermutationGroupElement("(3,6)(4,7)(5,9)")
sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat
True
sage: p = PermutationGroupElement("(1,4)(2,6)(5,7)(8,9)")
sage: h.relabel(inplace=False, perm=p).adjacency_matrix() == amat
True
sage: p = PermutationGroupElement("(0,1)(3,4)(6,7)")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-d9b1c60b9f74> in <module>()
----> 1 p = PermutationGroupElement("(0,1)(3,4)(6,7)")

/Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/groups/perm_gps/permgroup_element.pyx in sage.groups.perm_gps.permgroup_element.PermutationGroupElement.__init__ (build/cythonized/sage/groups/perm_gps/permgroup_element.c:5853)()
    502 
    503         degree = max([1] + [max(cycle+(1,)) for cycle in v])
--> 504         v = from_cycles(degree, v)
    505 
    506         self.__gap = 'PermList({})'.format(list(v)) # Make sure it is a list

/Users/dcoudert/sage/local/lib/python2.7/site-packages/sage/combinat/permutation.pyc in from_cycles(n, cycles, parent)
   7041     # Only positive elements
   7042     if int(flattened_and_sorted[0]) < 1:
-> 7043         raise ValueError("All elements should be strictly positive "
   7044                          "integers, and I just found a non-positive one.")
   7045 

ValueError: All elements should be strictly positive integers, and I just found a non-positive one.
dimpase commented 5 years ago
comment:23

probably there must be commas between cycles. check the docs on the function you get the error in.

e.g. [(1,2),(3,4)] should. away from the kbd now, in a train, sorry.

dcoudert commented 5 years ago
comment:24

The format of the input is ok. I tried PermutationGroupElement([(0,1), (3,4), (6,7)]) with same result (i.e., error).

As I said, this ticket fixes 1 doctest and aligns the behaviors of the implementations bliss and sage. I don't understand the problem with automorphisms, permutation groups, etc. and so I propose to let the resolution of thee issues to another ticket with experts in these questions.

dimpase commented 5 years ago
comment:25

It is a bug in the constructor of PermutationGroupElement. The code assumes that 0 is not in the domain...

A workaround would be to relabel the graph vertices from 1, to n, not from 0 to n-1. OK, our flight is boarding, need to go :-)

dcoudert commented 5 years ago
comment:26

Should we open a new ticket for the bug in PermutationGroupElement ?

dimpase commented 5 years ago
comment:27

Replying to @dcoudert:

Should we open a new ticket for the bug in PermutationGroupElement ?

I just opened a ticket for this, see #27881

dimpase commented 5 years ago
comment:28

To test if automorphisms are OK, one can also convert permutations into matrices.

sage: G3x3=G3x3.canonical_label()
sage: a=G3x3.automorphism_group()
sage: pm=map(lambda t: t.matrix(), a.gens())
sage: am=G3x3.adjacency_matrix()
sage: map(lambda t: t*am==am*t, pm)
[True, True, True]

So one can output matrices in py2 and input in py3, and do the check. (assuming G3x3 is already in canonical label form in both)

dcoudert commented 5 years ago
comment:29

Running the example with py3 gives [False] with this patch

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff)); L
[ 0  1 -1 -3 -2 -4  3  4  2]
[-1  0  1 -4 -3 -2  2  3  4]
[ 1 -1  0 -2 -4 -3  4  2  3]
[ 3  4  2  0  1 -1 -3 -2 -4]
[ 2  3  4 -1  0  1 -4 -3 -2]
[ 4  2  3  1 -1  0 -2 -4 -3]
[-3 -2 -4  3  4  2  0  1 -1]
[-4 -3 -2  2  3  4 -1  0  1]
[-2 -4 -3  4  2  3  1 -1  0]
sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3 = G3x3.canonical_label()
sage: a = G3x3.automorphism_group()
sage: pm = list(map(lambda t: t.matrix(), a.gens()))
sage: am = G3x3.adjacency_matrix()
sage: list(map(lambda t: t*am==am*t, pm))
[False]

and without this patch, we get

[False, False, False]
dimpase commented 5 years ago
comment:30

thus, it was broken before the patch, as [False, False, False] is obviously not correct (probably due to incorrect indexing of vertices), and even more broken after the patch, which appears to break either the construction of the graph, or the very computation of the automorphism group. :-(

To rule out that the construction gets broken, can you compare the adjacency matrices of the canonical label computed with py2, with the one computed with py3?

dimpase commented 5 years ago
comment:31

even quicker might be to compare G3x3.graph6_string() here is what I get with py2

'~?Ex?????GCH@aUBIGU?[oIi@aoXEpgIpSFOJs[DUY`LTa@}DZDuLYHyFkBHTrxhHf^IcV\\{YJiBxbLaJxWiwL{@rqEA@FeOoWDZWIHaErl\\tAI{vfUGFZl[{BqEEjtXZ@PViyKqEFi|_zAqpgwXyGqx`p`{BXSppOLtBDnOBDepPlq@PF[KE~?KBrWgpB?gJ\\OpSK?oKz`_wI@_BWul?c]\\`[FUoAY{sLPVk?dj[OGfYocTo\\O_nQocVPVH?^hORKpk[?~?w?~Fw?ExPT`^IQphieKULqxKFdpo[g^UQgnEfK_NjYDTxJKj?NVkHbyELJGF]Z@[}?{uKguHTowbJ\\PW\\_lMIPgrmBIl@XwqJ?f`Pe]fk|LIw\\Op[nIzejPwdWo\\fMjlJq[ETP^Wu@llEe@TKFu\\_JUqiWe`Wvql?ZlPebFgbuDYrl`u\\kKtHyBlcvPrrXDhI}CZklWyvX?nj[}gypWTxk]Bzf\\w\\iEhNeTkfZrnIjopP|KxwO@fWWkvVhVdgG_?zdCZjlTNJWS_?mXPbm\\XrjWRCLlesFiKthvrigPVZl@f`YZRzjJCBj\\hDjBs]VvYWEWf?p]vt]ujIW\\LDI`Pnlq~R]SgjDPMGo^l{vqyowZ?deLziMGVZMPjaLBJP]ypoT[yXeqc[`]B}]FAe]qpMcjWhaE`VxRL`cyZnR_RWL?|tcUpIxmvMSaYDGtx[Tgg}YnqfFlUyw@VZRb?mhmBhZ\\k{OLU|IoEZbWmEZ\\mi?]uYY_MxYbKBd]?auNf^Kj[izurCq}?XYMy}i]ps}\\mCkv?auFmvKytK}tm_z?`adZIzsrjwN[ZXLcAFA[ri}RrvA}UucjG_ic]Ru{Uy{RsutWJxbc[_~lmDBjxA~rOFtTWj@^U}EDuyC~]cEx[XbGv\\n@bM}?~ufA[\\YIQ|`u^eyo^y^PGgs|`hLUNhxnbD~exaCTdZBQjg|Vh{sZ{vpOCXvcu?pf\\lz@J]zRNtAb|Xk@P\\fZ|CTr|LVZca|Xl?o\\\\^^@RU~RRvYusaey}i@Yjo|]EE?upZkWhk|qoKrjF\\ggWD\\dtkKLmne?]ZS^X`a_MlYwlvH`sQVWVp][G@YvmJRF{RPrCjaf[lh_CknZ`qL|QW{SeYFtXxG@WnygQt?}DEM{\\NMHSiA[ajoiiQJoTPytTyiPM_eIJlBKsOvCMFtbNpqPK_tEZKW^|yfgXCYzO~kALoDIdsz^v{YtCXLf_~XCbWB`Mh|N|zehPPRmW^x?jSBIHl^BydMjBaizx}Bd_Y?Z\\`fT]wRwqjA|m^WiYD_Dupa{X}KVMSYejy}bFCW_YthFfAFxbgqm{z]q]gAAIg|\\ipALtTRdNZlmhjoCC`o}upi@Dx[YkNrj^MYk?_iK\\tmM?P}@}@~}MN~?w?w?wFF?w~zx~nbG]vlPKbEz@Iuc_iq]nN||PI|t]DHSVwIDsgbEqn]nvvCh|VUKHo^gadYIBbMnUfyGBFXUaOJV[[EhKdBtphLez@AMq]KOQfxX@yGhaluWZb^_`DU\\WgAs|LGjSPotrRRP~?PJXo\\eErYgg`UhdORLqTFyA@ZNAjgTud`_olhK_xXdiNqGDkmGz_\\ueEASm`sCk\\DyxTX{Ma^pLK^T]AkEkVnZ[hdqsqzFIVwJozrX_k`wfnuwxdYUU^PxH}DYTx\\geOjS}}tSuYU{kZ_G\\kvOz]]WKDjDxutNKIlh[r?IZmkbzNN@CZWNhmlj_XkxSy?hYzkFlllCOZgvdjqm_VPNF\\VR_Ld]^D\\ou?lQOnTViLWVM\\]sgBhtvbZSL_XccNe\\wZkBt[|Ue@Uumw\\ZDgBscE{p{jShlSAQr[\\~dLaA{sKdmW@lREtKJj_QTbk^|YWcFhhDNM_RQefjAi{PHKkt^xYY_fLKPrm?RouXzuHbb{mvUNdLT{AS\\qykAl^yW|}Aii|fm\\FfRD{aDTs{xAZNuZM^OVFMr|\\`yY[vOKMrfbGJZ}hjav[ZpVey?oluEo\\Eg]ZI~HC|gommkvEjuoEBMsMbWTauxR|GdySTZes}FjYoIBrWjDW]E]kN{aRyPRRsFkx}a\\ci{]yJAzSaic`LCbZjixDZi~abkK{y}RA^DCmDHJC_zxzN@j[^rDUXfT^IgNkIeIHceOT{~US]tZ^CmLRGzqVm?U{IkFeYJhGhic}bZyKwZYBue\\kAVeFC\\StMQTBgTy\\lrBp[iFr`}g@^QbOxec}QOaq`nzpcnLDM[DatkEQO^`aERaDVhi_nzwhNJSht@iLxAooVdGgdogVq\\AF~mFHtQ[mGpLrGX`Ey``C{DR]ALtyf[GcVfTHokMS^?YRWzRNDTEYg^fpmWKKtklI`hMF[AqYbwZfGxDVP]]xfObDVksbEKhTwEHmFhMtFDDzVB_]oX}AsxzUtZT_X[?}hdVO]K@YlIWVoP~Aht]dvYrGXS_]mI[qMi?UzdIHyGnpLJfsj\\pXDeOF]PptBf?Qz]{ldycqui^OSpc~@Pj]DKv@jTAFcH|[ZNpMTk[}ADhF{GpvSYEyKUwDM`B|RZMxJLbdx@T`VwcUtWYRkUVCD]?a`N]q[wllgoJ~H]W[KW`o`Txy`[nUpGN^qTqLjXSQ~pUsShWISILVj_]ivbWD|zGyWvYbAvye]ESL@R@PytkRrVLY[kyzf`e@lLO@jDyFbj{|Kp]]EJHFjIXltrjDgD]M?PsZo\\ZZfxEXtqaVHMZXW{{ziF_FYp?Uo^GxjnV[TFfiISd]NQVhdmRNiojTAGtdMovYvQs[rCEK}F}IdiX^cN]oMpaOLhikVyVeUMcsCimd}bDeZJsdyyHpoIDps\\B|J{JbouAFRe^cU^In`cQHcUZcDMlWFk|EfOtoIT}ylMHiy[|Dc_JIUtGXLy_^FwS{hiOTl{vXRBhrbuES_jG]pG[m]?zVWY{HxADvmzFGauj?f|afUAuma?tZtH@ezFGPn|dXa`E`meGe|kM\\ATxi?LuliAH~BaDl~TFP_Sp\\QsB]uh\\`BjhGDutsOPngy?u~yEwKQWYy~oTVrGVcChDQJXZgfbfDjUEGpUI]FnL]~AbvaIj_JOKqYqx_|S{YVacWXdDsnU\\j}G\\]ahiOJOsImUmAxqw]TiEHDcfe^SVS{ts[rPu_b}VNEnaWurQijWTAIjLg`}l[ls{TkW|_I|rj`zeSLnOxayKOXbZa`^bk[y]W{kNa@vh{wjyMDlhbMT`oGmNUOZkVzRhfYmI|UMFbtM]WDH]k?BfR[lbL_skTvrbRmswumLS\\XmVU_XJNC?NEZx[FiHd_r]{iZeroyukWxlq\\]?[djO?\\TNjSUwHqbAPmAI[~yyTOeGIuVpQd{MkYLk[{JQrALglO^CEbn}jPcEgGtruEH{pki\\YMmHStOlgiWJo_t\\}|hKA[CbhzSHvQmPizBr_kwkEsrApk\\JnA`kuXD\\]A\\jWDzuWbBssQ`MV]ikTmBkYrySBmigNZKFLu_NxnAINcokHRj|F`iYItQzrAIze_t\\gduu?vllCK\\r?kFHnky`w]chdbHMfVW_@duOzfcaAkf}IdqN~ga]RxmncHkiHVet[GAFTo]fggaLJ}gxS\\~q_]dvkzqWeVCbrVl@?QZhFqxP_MH~cxWi~}OJc}uzVv\\NnGcAreJTXrtWj@BA\\~cGPAayqLRtimHnuh|xHGTdUSzQuy`wGSRZ~@?aEKubW^iVaZnUtvsh@KeYs\\Rr]Eg_oL^|?_oWMwjD\\yYiZ}M@p}@oMN~Fwwww~~???w^_?^~~_?^_[Bb|R`VKVAb\\@gXiznukCuEEJswLwwh~yhNKbE_RbHsXoTl_kBhZ|}tAbSQH{tA|Sp^|cfhdFCJIc^C]GZUHGmenvZoapPafrCNfGf~yH[uPU@jjA@ZE`Zmpk?ZUluuwBlvLj_wyUKzfpeoL`UY{GDkIhlfUg?j]tuZWFmZhxbIxWNYv`u_UbE\\iAHYETYyto?\\rmZugFttqmafMSUlzaz?L`iIiRKot^o?]YZcTnq}SDFcgn{btHL@tDQm^BkIVBcYIzy?LJRyBmyvMCKy`F}q[chc[eYFjeMhXbJCo|mo@Yhn_unJyWSVaa^kjpGtBpDi]\\IqmOv[sV|rdXZcgQWKCgxsutVYF`@vyAYmxJx_e[P^bRN{{\\SncGPWgaclsZpvWX`BvkIM]hNd_f\\?~Ss^vYfg^Q_IgoSI]Yu[xkU_bzwPW~Czi_Zm]sZoQmmaV@LFCOYdFFV[PeZQ}Jy\\UFyIzqhh?jYliHE|QRoLKkABsaY]^AirLV`~QzB^BT|D\\?LerYoRiuhMCsROGjPdd\\wMXNR[ZlLsVkNZqEs@ouOMljl^zoKRnLW?ald~hRBt@Hbx~ASTw]RHal_v@Fliv^{ooNlkWAEtU~KKjd?drf|IDRe]GsWu`YOiu|lnzOgVrpgCBmd~`TRo`Ijj{pQFh\\PWbkVw?FF??F?{[^{B{[?B~b~_N~}M@pp}@poMMN~~|o_vkZjkeS?ynLl?QcbnGHUZV\\B@bRut[tjUitymGLjSzfXX?FM{]W@`PmyCbHtncSSK|nFpyNRi]qwGlZeZjMP?]NjN?OgjNoHEY|^?p`T|fMlRVbs}DwlYodYuRRy@iZOwcQtW]UFmjZw{a`sV|yHoWLKdrEv`G|[hdxCsmGwP`mgtJRtpnt]BAkZ}sqhCEiQyLugHrta[}@Kyo[DELwTqd|bZvM_pkF~ebaPDJCbk|UEJjYkIntmAp_ZgoJBqubxlblZ?Ls`bZFFsfce{|PPi|hPJ|]gbPDjDAgtLk]zS^EkAxgSMtbnAxsll]EB]ZJEZnL_uGZWKRAll`vZ`zFOL\\@`UtTxbjfe^pRENhPElY\\CJ[Be_sj{xV?sFCRRriotimniIbj\\Nos[NR_TuhuATiETOX\\}KmaWHoIjffHNFM]{HUU\\VwsTFYWPlyT_rWadcTZ]jKoeHSArtwrLWvfjEEcLl\\i}VjTeC?\\uk?b\\D?]]uvxly_`ZAe_Tig~Ugkc_v[vjxjlJOGEtZO@lWWD]ll|zXwGPsXKBSmLvgbIMDj\\jvTZX]@?Tmw_JZB?Yt|lzZYp?Yox_FhantHXD\\vkOqUuU[D|DRnU?THsn`FJQsDu^\\whbaWxTQTUctL|U`cljKeH}EMvL?JSivIFDhkQk|}uRB`TSxhBkQmQ|\\_kdmTd@|`qnp_RPKniBhRkDkn^ebPoVFEYS\\ClofPjliI{|JRgRDWrm?og\\WZN?nVWLxsT`avv@YXKIy|kJev`lYq{jCo\\BrgDBEtEVSRTlbUtbWWZ\\sEsTINNtWZljBjtUZWEbWUx_KWTwSyoi|YJfkFPOv{ouaLQ]^mn_sZnJCk[UbAKqaw{tS~TXDTFEJjdYaxca}g[FyFxnMpgf]kWUhJT@QhPwx]H~KkiWqhFfqVBNHB]TEF{FyvNghe^JPddQfAOmE[\\Tp^rJGVCwXxsUozX?~`TB{b}[|J[LOKv}ugqAtGEfJ]Y@cr^dMAFjlD]Pfg{dfU]VHMks{o{@\\^|UD_Lq?h{tm_`Kv}RCH[}qFcy[jhJfUh{SilM\\DWBm~mKKaLo@jixs`HS~sY_Xx{TMdTxMH\\uTriHcsm@LUDgXkzXEhJMav^uWyJHfSsttbRmb?rlGl`?L~alXM?Y{Aqcy|kDqebSnvZoxDfHyLYm`fv@`FscUp?U~HYpN?RtCi`j^X@mIicnvus]HXXUlFl`T{pPD{Hdg_P~iWdt{jTfemFh@{{?s~SUuLh_uKKCUXStdiRVtcIO|nGfUS^NWvJfXpZOfVODV{Hj[ZaRJAa@hrJXShT~SPgLu{AxhSxzMp\\mNE]@[{_K~dPujXCeYKCKYVFXgQ|vcBOlngFpobXyFrHVWi^MV`cyXKYBiHm~OwbEPfq{}SO|WOTkAQSeXdd{Jwc|dFNTfQP{qapEXa\\}iT@oejf\\[kI]Q_gx@`aJqsXzEyHtXMVpfeD[uGuAyIZmqf@Sdhs~MkAmY_`lAECiu[RcDyx?BJf[ny\\Ih\\@i}rH{DJwbFpKBR]bUCn|^uqlUFWdF?^ic@Cz\\J~MqJUoUfjiV`C}gL\\Q_KvkNDH~V|jeXg}EahCzpGAM]xZ}TqYTaK|vQ]HHv@Xq[@S~`UgNzvlsnPbs\\rfQVj[Ker@FIjPFtEX_hM?CdKu{\\zsF^PZsnHhZYtG^OTw|hI|iE\\hAFP\\cFmDiGsT?IQXZ[^NwI}gnlMRTukZ_n_MylYUjZDdiaBqZDBl`yGLP_GcZE}NZuG}rJ{NQXuwvGZcRmMM?NoMM@~?F?FwFFww~?~b_B_^~{^b{[?[N}?FwFF~~wCjG]ttUZIHRrJFcl`dAkywkZW^Sp[aG~zhKkcQFVZ_~KVcpXQ}fbkXoMTuW\\FXGwFJrbOzPusbwDD}~HhPK_s~Sb|G{fhcXy]\\dcohtqgxRXaWbNNFAlbvOrgCr}{ejHC`[|qF{KyVbvv|cX[bgY{fCJq{`PDazciNZcDES}}XOG`qu^WV]QJKGyQ||zXa\\Khc{f_rM[iQ@c~EgYzsHCfNmZAB@iuVsRxoigo[\\NnnZC[wedfQwQlNPPOqfiojT}@EFJnhdAGVJXv@|hcsQFJeejqtH`]Jee{M^UWoXK[q[]Jiqt~HAiSMSOxwxJg_^ZD{_akp^U`JBwtTNhN]MaaiIeeptM[ezyWFD`QohVTPv@A}wZcgLbXnISiLouXnKlxmBEaMRebc}KzZmCWdbJ?i][Tr@E}g^QG\\vxbceO{epJdO}xI_{Qi[?PPZJYPRLkve}}Brjf[f^hXMH`Q}yikeOldgijC]|Og\\Oww_CTIqySQ|[lxm}`{]]tFzmYQhPCn]VERWKrkKp[F^a`FHbdO?oduTgpUyp|Nzc]iz]I|}TQ[cCcJsstwPlI?s]r}xIRR}YCubpU{MPK`uhWA|]hYI^KqXhGTxTovdLNSDYW@fUvnpQSzvOIuMRfpSXSLlHOLx{JWr]DqjH?zQ{_}\\LMSFR_DTZvnSHsn\\GJ[\\PzbDFOTkd_Nfql_tyTMbcC\\rSfwYP`BkCaXrH]ITfk@||a~wRt@|QqLcUUKfnLvmYKqGZQeObuyU_WSl@aeVHUqDfxA\\~I^yDv@^BalWEUjDvL}]whSgZCiS`|]WsIAepBDRkeYKqzGVvXN|_~CZdLExBJFI\\s~Z\\cJcDk`go^`P|{VWFHZruoofaarbDeRJwezBGqvD`ywF{LLEphmrRQn@cZaBFnirGhMvXla_{dExWXUUMweuJGfjKI{onoYYmRJTwwd{I_}KKM}x[`ce}llBAy`bhgXXq]iYsKgxlSYma^`RRiRb\\kkewYA{[|AFtl}CXTaX\\YMxcghFnzqkcL@HHA[vQlRshxPwM~aBdNhMKurQDxZ~@`XiXZWh|DWXBz~Q|GL?XB?^FQyTu`xW{Q~iBFRw[ZFjR@nJ^pClHLd\\cnaJB_z~lYhAcOeCJjLZO~AmkNA^xGiY{qjJ[uqFF`tadU^s\\c_zRgPoOEezjQUNr}obUmFbSjPFUwJlQNUKvkTu_ptFJSMr\\ilDBsxaPa?NK~Ecr]^{SFlamMHuC]N`Twp\\bW~OlY`TUNJBFT|MpPFsm@T@?lM{sfJ\\^lOTmi[VGuGxnCu[KxjJ^?bUIFi|Pnuxi_minPEjD_sPZmLglS`t\\on_}d?zbpCsUegBKUm}QtED]jW^}mMCYyZp@m`cKpJylhJF@U^alpMsGrZU@TPew@YFi}TF_pi|[J~\\UIBZJx_moqDPD~EsjFGZRtQ{JwSJijOJHiZ?NBNZgeAUi|iEN|TufdqWpyD_VYzjyG|Sx@NqiD?rRBfmh{crlvMT?WAyoahtZoo~mYs|LqajcWa]rnMtDrdQBmfAaGZPTrtrgitl}Rg?oEtOhg|YpP}uZYxtMBf_Y@}N[}crppoQ{wiOHNDFZ]VIJutyhcA_Yc]euece?\\RXnCr`hkwMU`_b{ovmfqJme\\`Ki]hA\\hXevVzjna@CQVMlLHM?d[tN`UeLL[QqiCP~CfzdsRzc^_YhV`KXxTInr}x|o_SChx\\hhHOC{mewJqUeNAXXQC^gr^M[i^MJsROxqcdre`\\x~s}{CQ?cvViyMl[MEYAjEH\\erEBElkNzBMaKb@rKLvDYvtnLb`KFSU{ciDGumrtoxjWwioPsLRKlwSWLn`myJ[BSIIZ`Zib]vL}LXIC[g|tHCaXjfY{pw|PpeGMokTqlgWgmua}kNKJOKXMbXmLj^MyphaO{JNpGeQJn]klLAF]L{`@gVIfheLdLClGXzChEhhPNrjh{YyvG_RSYUp[}IS^vvbJRSEvD|D@WFqFyDhfPalAJiwgThRBLtxp|RmVgCQosetNMQ[N|vrXRQ`Vo~I_bCyIzQkqYoqe@ttOqKyDE{{{mxlJ{A@pUcwfjiHb~fQwJbpdRmeDhIAzYyhRsuDfA_zR[[czeqzC]TTSe@VCsR]Ub\\ylHuueOrfDedxKLiORzRdqYhs[iKDUjpwg}e[u`ybeCkQ[IcureF{vQZlUiOymEUfwguaGNlNePjLWuKKPsnbiI}XMuBw[UQgPwJSuhwVuzQX{sU{j|eCeEqvqDSrq{{RzK^qCaNKZ[KG_ZWMmlqoYqJo^VoYH\\kQpQpejMz]@MDMVsbPVS{{r]gnqg_Y{F]IG_EuLfd{SUMRKZfqIQ^[DcSjD\\W~ZPHPdJz_XJjfVPnsR|DOJUanb?oAuarq}bELIlD{|@iRy_koctusJqu}WZLYWLdkwxGvUxOj^GwJUQx?PZQBqpI[NOHBie~QRh^Ke]uNtGvdu{IuNR@WxfbiA{ngTFzCpJaeq?WuaNU@rE[aGXdNuQnBvXD{jN\\?}lZsgytLCY]VFaB{n`Ovkq_lgyo@Esg^ICtQ{A_m`ntG{rvHFkd_hysvdmMYmChFtnmaJ`\\wpSAVIZlGgNIKQvsrXOnv{``HW}ZJLOCcPgHzsuXnFUX`MBvZmiQhZ\\CU?lWfzAgIq[Dlxk]CZn{iDGZMYw|ACcDEGniZZFpxJgMOzZ}XIpd^Gr?Dke~EObUI_nnKlSB|~PQcPjhsudAQ?fILpPxYGRUr_mhl^tXBDr`ZBlMaaqU}lsX]?iEr[hko\\VBZsnSV]C@uqo^EFRWQUMwbVJN\\zOWXwhYNhkEKS|vkorqCWtZHpibK{I}xZ`ft?ItQp]EM\\_XEjiBZbt|\\Og\\iDk]ekWLFNyvArgB`[lMUJDswM~JL`vd?ZEUIVE]QlJLS}od{KOBzxLDknsjP{hH~CFz@iHISqfNyHA]|_eHHIf~FjTBdTfabRJc}sF\\GoB^\\R@{l{hT]bBmsDuph@JPUJr}P?t~OggWRh}xrx`dbdtBRd[VZA^KP?nnaWuq|okzqEVuA]sSodhBHy~I_enwPCoqL^t]]fUuP}KfDr~itJ_eKTejmUYKDgGfsPo?FUE~b{SeRR`mpm@L_Xqp~O[_xrmqFwXpNV~DmX@MEWnTsktOiPDMoYO@Eqlzf[`MUSplhsHY?{e\\yPwDx\\jWNpXTNNzdqh@iPYju[ifAY?p^@X?@VINynSPhpqUleWFWAsxVlBgRr@aGqumsvjd{|YTM?kPqvg\\GpgsaS_uByvJ^qqbZ}@q|}j_HcG{uOX{VYOkAklfhu]d{|uDi_LPSnkNBBhK_f@KPzkx^yqJY|aS||xoHWAnKcF]LVAE_[lb|JZqvVuKsWEHbd}BeHShoFGHg\\lsn~JGlvgRfvj[?xARhcaz`kv[wz_|@notmGWkgqDgiVqm{PFtKh^tEI]AHQ]pbCAYpm?hnUma|yZYvRru]TrDXB~DXtAbFAoX`q\\pvoamrTB}rBBsDHQ}BWGFEpsBLY|UFysu{umnVY[yLSJ}K][EBRBG]EH|Mz_q^ROr~PGjcCfHyIgGdbUWBVNNWZyeunS{}eEEZfbj~lda?jL{_ElHy}X@ffGqoGongrhVsi}lOGKh]DBZLzcvIbSXQJMDERmkZ~\\fG_ZP|G@nQ]\\ePdwwdaHAjrBw\\xMnZOGHMU``U|fwfWpUJCXxP`XfUjnyyX_BivH?mYVNioU\\Sol?hR]H[p~G|rXCCMUWoMuu|RKwN@cg~pss}{nk\\PLbt?yILI]YvjVALXropwIyF?\\@C_sDPkpP|TvusIG{OwcmTx~FdL|X|[jEKywBdPYQvP|wyDX[mSko\\Qi@w@cEGKjDgjwy}v`DHogxDSy{}M\\L|XvS{IqjWFcKYM\\L}jKFDs|OuaLiKBcCQJ?sbTcf[^^X_cj_ihRFYso|SrgFBcrOo}hYgEZ^^CZhh_qWwSKvys^VLuCTKc^sy~KHfch^qH]e?hCeWtsqhESkkWK\\mWk@zVv_yxROceiKIlzkNVZ\\@`LGvk}^ghTwg^qXMsOgSg]IuZE`Qe[kDFmTe?lm}wTrYWOep`bP|lbnNZ`DDHU|VN{SY\\Or|GfyGOqPJs[nW_oac_nZe^S[ar~PnwaALFhHKnqPnag|{d@~y^@QC{zJQLPPOdtxjpI^IhzKE@c`C}tN]JHEz{r^`CDhMXBT]aZ]FDzXIF~q{GoJffEbaQWSk{|MWR~Gx{aIGaWB}plxLHbn{R~@CEd]CrR[hZ[WrzXAN~MwcGNVSsipPDQVUs|EJ}]_IERNxJen`^JugI`]{uIphkA^smobPGwQkloMjx[H}s\\ewiOkAkptUmb|JVGEDcVyRlZdZitkGhU{liRhY?^uis_rGeC{dwFN\\Sp]tVTiabK@jD\\Ll`~Gxw?pcb}Rfbyd{rmC`e^TkLSz?J~RWoTCq_ya}@uneQfZM]LqDI_NGxdmk^ce`PfZBBJoavNgVEWyaRHdswl`{|KuhMqpU~M_fwp}CyLArFMyEZTaNUsDyBqxBDrXPa^@Q}^?{UboeUOlix[JxxW|BekavvX@nHrkJdWQxJ\\RAy{Bi{pLSMewKF\\dCbmHByzCw]FI`qQtMjSZjfJKqwkrZvWHmdVgNcWJhNLhInSInN@Tc[wtZgCBETS~ymqA@LhnPccB}Ct{w}Fo{nnRAirCCfdqn{fTh@{djPFJJm}@\\Y{XZXCAM`[n}Xk_aJYNdHGa}hFnEmhsmlytOrkP@bhmZ{jpkP]dWrDXXy}`NFmFLi_PDTK\\~Jl__SZU{`HOvdJVird[rq~SkYMb@AxtJ~PxuOZqWtEKk~ZcFen_vGHSKdMxVuM{L@MZNjA\\yk@DDi@~R]SgZ]tHt{O]daXFEK}hoL}WpTJnLDq_RqOUGXH|RvLVeKIVY\\sRZpoHAlCLuVtd@V{wNfkBKwfO[MTvI`\\swbbNZQiU?VQOV@XD{\\]k^Qoa\\i}oL^M_DQScVtVdo`vnCm]sDiYdOwirwwbVegpo~NQXW@ExYL}qPugqC[\\kNtSQrE@UdKo^{tYY[OTmRDdqMdJJTDL\\@U\\Yw^^OGiI~tAIVqrB~k_|Hs?wzLJtpENAaQtLCN~FEU]AFidSkyFDrRD`jV?U]ZiM}sAahn|?g[yV`^{cNgi_TT]KzpKLgWP]Egb~jEij`BVCmE^@qqikos]WRJplbvsaQCn|cCheaHVNrjKQB{hG[OefxmZhzPvJFcdTyJkEuHCHrRb__HuKm@P]lrI]~jt?{m]JyxORp~Tqi_VjQAc`L^pmtjsjjFMdAzTNPKrB?VeTS_`QmDsGbv[jBv~MwDxdq^Ux?\\T~Eqw`NJQES@h~Umufoxkt]PRXc~@NGp?]fHqACRiUWCrzSkjz{~CRifi\\wpHEnm^GBHnOS[s?~kY}{YdRFcnBcOkhvcmO}UCmPIp~BcMMSj^xcfiYjotoLcgwQLN^fHCH^oOsk_^xW}|UFBXskpsBLBftIanUCMqGu^bHQYVB^vXHqjbtFQJdAmAThzts_cjx@UTOFzLf^MIdL]Qs]@IiV]JDRxOXXSbVwhIjJIN}xH]Dm[jXBUIRthL?E{c~yKkfRAn`x]SG{\\kQEn}I^[ePU[hDCLGX{KfG^S_nL{vCmErFOfO~o`jLIh?uhM~ofH]SD|RisiBizORL^sRzscbbsQIGXajeD]B]WHZjwydaeieTIh}cJNEas@YxJ}pRHxoexVe[IFMz@HN^eJnqCpjqPB@TEfQPyDxgJMzjMQiWmTPKj{oW}rixuCH@BxL[mCGkztwvAqCM{}ziv^EZOUhCC}CgbJ`zvLTJIl^LP@xsbEwlDjbjimp}CAOKxjTY_oX^V[NaKgI~Njre}sUsEwW@nCWEie]nhlAwzN\\B@jU`TjJHXpq|EynOOQCmk]JWQBNj^DwL`BZjl}NVuIsbWp@LoRAsqVt{peSzFmdCTzOMLjDW{]FoCCDAmIf^aLuxySeYeCsYc}Ze]CiY]fJ@\\^bs}ad]iyLTLUzdR{EKeot_\\Cdkq?~?_GI`wpr|PMnreCmpSDjQds}bscQr{jIBx|VewpMvRpWxau}a^pDXEgy@wglWSD}?P@Ahox\\xKrnV`QmHWTLMRe}JeQIjmKkRfvMZqHuZNK[YrY}P^`FHWjWBeIVHCRsKLjr[WBlx@e@Jk{IzhMdwKZK^qLYHmmDsmgt@E^mIPQdpE_Zoyz]tllzOEH_QZzxDDjy\\aAZ|AHaIl\\I^YQf[IJYNqjERlihejahOHvyqDCdsT_JrIz]vjlZSGhOAjv~?ovnKsPJ^_PgSuNKNjQY^B@nB|FEiUnDVRK\\ACmzYKcarQK@|HxnzVUxk`Cw@D}~}@poN~}M@o~~Fw?F~wFw?{???^{[B{^b{B_MNpwF?~~?wz{?^{?[[????[^_B~b~~E{hk_~gMnKXh|^iDgPYWxcZvBcRyKaOjnN@Q`XhITXDQc|HULVNwjN@IflAgSWID}JssqP~_fmo\\M{~Ie_HYi\\EZxPpRkSh?x{|AQhTHaXhPRQkjWLs~eK|?yXtQIPGWRuFrhc`}pI}gmdx~`TGSh[mPNsieJwMQAM|[bGThcHs[cMctDsVX^gx[`KukgdECKFrPUGeuqxwYtNiV]LA[mEtOmBNEQsDlqtNl?eNIqt__}jcHT}QmTqmRL?LxBrYRkWqxqgsBZY]mJJLxMnLGNeSrabaFipWaM|WjmcEhwVMg_fs{Cc~pRg|RhEg@{h]NPThTVNGZ?euxxpbsvaZysAyhRpI[H[xQoEnqo}lAWmhR]AAzNOHr|O}Ro}PK_VgrjLPuFRTyCzMFKPYW{{g~uy\\OcTCYIpV[HrAjzXBMyepkoTbqiIH}fH\\XGVbQZR[KqHJn~vs_SqB{iMaXhPy{K~]ixI_p_iMbXkJhQZxdP^MUhcpLFRHHLzTFLdEYhhLpsVOHL~~ze?SwDzENDDR`{ya~rX{SO[OXf@vSFognnGg}wzCrO]FMaae}chvGhTrQZJKMgCy~~vo`AXiA@XlSiWMLz}_nWnv[iM?|k}\\Cj|d?CwF]pc\\GqpV|GgBK@ews^jMBmo^\\d`uE[unUkOPJLg[[HUt~WTlTz^STGYtvigp}mGAWazwa[wPpJ~KP?d_MxWrnJ`NwRyss]aivFxwwGDcuSxOhl^}Cr[vt{HqAlv]Kozmc_EgX}gd[cRSv{K_DSAyep]k{Q}`\\lpbwYNTm^?uzJ\\xfKZGwlyEzRKZPw?]obLxE]PRk{vGKsL^?D{OPjWLFo_kXhuti\\g^{ze|q]_qu@V{lfwmd[c[mXbZTojTg?}aHNcu]BImmwcKtL]?TwGLLgKvaALEfzPlMe^nXzNq[_rU?zzJ\\s^BiIitiUlJg\\MW?~?ovhX\\@pvVTGTQfm?ewOUbWTZ__uHjueyTh^umuvh]@Wr^`\\GIUOH[@Ki]jyor}vXc]OcttI[jhtyKdHc|IcpPEutX}R~@\\WmBxGbN@@WeQj~fWJ|sjgGRWGk_eSVs|Xa~ZjiFgCy[hhrT]\\`ccq]sYQac]ZJnp^gYxFa\\DDJcCWqpD~t{Hn]Xe_hEOhQ@kHzN]QN}rm_}AQfoySlffwUPId|HcHHU]sm|R{`le[JdEO|@@gxQZ|nOjzkvYEWacLEKHu\\M[q`XLBsjVDA^vFok{y}_yKDw]Z|CjjAmtfhC[dUsxKW]OC|@Emu{U|d^QFOWceIoep{hyU@kpFYLtOi^xZ_nVM{bWaFoynxSfJE^PugeKfUqgmE\\?Qk_w|ZtFyq~gJ_aRKHgLYxq{JCXkFozWdP^svaUmz]ArCLox^{aNdC}exdPUPzFDTH]?FT@U[vqZxjsqWBS^?tZxwTsquwVcVL``CIfyeFzUP[Yu`VG}DHIF~UWIssaVoZMXyhQbxnwdhoKNelYeY@WZoFL|rEuP]tByEmSSI@e|fB^NGXpxQhwVQKKQ~]h@swqQ{RJp^CxQ[n|QKyCdtw{rX_KTm@[^\\g\\[UZWv_Zh`_cYZySVnU@tYeg]cxcKHf|]CZQohZ`K|FmHoji~ceipBM^W{Ncb[GRxYvDrfLfFpJIVmnVsCl_wcOYTIZSKcctI[FCqWT~`iWlt@zrx~eaQncpNIJMfPsmQ\\d@JsmreVdldVHJ`v[|zcQLacpAYOmYTCbcXawRaHhF}axEVobnrf|uQI]e`^Aii^`rMcjQ_\\wZ\\TNRuRfSdI^]^VoCubIE@LDXNAaTQsHwdSQeR|`mGndBzjj}whO|r?}hLEn[oSMG@{MYZzpVRxu`RphDNtwecuKBsn`jEPVaKttMpoFdHwh}vtDF_PkqgjZ^bsGySBb[yYGTS@MSzDzyeizmWHykcJ{{eeYa`]RkLfORsW]jMphCy`\\C~y}EFSOTxCfNZu[_uQ`RkncoTF?DtJa^nHZNm]CVMHS^riYEwKRc}axTBMWd]sjUOV`FeJ}zdDT`@uqINL|joJXAKjRz\\kYAxSpq@oJLBPvzNnlAuw}C[_At@{[~`Elh{NfgqERqEn|hWQT@A]bAgq^rAQb^^yaIH|[tQBxAxWDGdkDU^ZvvpB^F[PS_IpBlV\\`YUtrNVcIQNQe^thhQD@Q[ooeh^hPQJ^nqRAdzfbgHsTSqEOJpBLvlnnkEui{EM?RCbuM}_s|hsnfIP`VHS~mfEHO_h]HIJQ^oiGp~^wghHzeGNna~xaR@gxIYnnQ[?fQcX~GNR]jrKxLBGGx|clKzmdPQSSY?GQBVTtpGqfHHtFyUi[^VRWDvrN}cWghdKTt}iN?QYco~hByNr\\HtEeIGNNkTdR|q`XOiP_?h@Mm][DTEcg{e}R\\KZx{e`Nmb~wWREa[HZvjIwCdMPJ{c\\j[novDLGo`t}Spsnr`PpQDW?IORZFf`FQXGjpZxErTm^CAqsJN[woLwX}{i\\tFUSzhA_XAQjjXZYo}`nMkS|a`PPilIKHUmNyWz{zZqfedVWDMg}?_MCGqtJNdpOmgl}{`|sdXsnCg`CqIYxjLnA}A}isY}BCSLMTKKFW{^yJZuxzgysrXgEj`u?OmABXQknRootW]zyI}XRqY^HQAHHOlnDzYb[bnFas|E@HUbKwSHu[^lEnnNNqTyDvCLEpy?`NYUXwCKfQfWKynit~GgWNogs}Q\\yyAA[veAY{^iAhQj\\aHrrHDPfDNj\\@RSf}glTSNnlJLC{zG{m?SdwTtDb\\x]nkcBEy`SzqQ~T`@Hun@RMj|?sHs^gKu]GckVEFtycLYE~cpkyB|vdd_]VaZXoDA]W]Wqmve]zIGgnIFQ|HNnWOQVYsPLrmqBKRL}ALjghR@tD\\xlBPeZ}GvPc]~fJEDsYwzUh\\P`pb?q?|la^eXCwHGjlxszVBR`BeZn[NTRb\\IVphrajHfdaF`fIrrG@xJudQOpCy|Grp|IteWSwTCQC|tA~`XagHGmnjqxsph`QxX~TNHVD{HvMbhqLDyqgYaxNRpCBdNuEQOsBr{`xpyVh\\ChSbAHA}m@~QkSW_eXvffNXJQ_huM~am[NBxa^TJqgwitdoT`syjggBgzwrH@WDxv@w_UUTSz@r?CKwZr{x}e|prIar[XwCvDKJztuPmdlUz][xGse]_D~GqiWxZXrfFaw_xj?ECY`UCGqran`J_AERBy~Rnq^ipdqTMp[aVGe`~]\\WfTuJt^VRHWrRo?~hUDpXXw}VIuWcMfO?oZChoOZJFByCy?_kgnN{mze}LTWjRLFgFSpKZnfeXe\\kr\\x{kaot[_R{fIXEdxjhsxii@xk?IDaW^Z}OI`qbwCZSHn|L|jMFHWZUpsw\\?fG}i[_kV`XG`}{JGufEIjiaOumF{BuEThOb[]SZMwvlfv\\v?gTQloAjoMn{l}bqbcWzVBedL?xF[yU?k]hSKD}wbIZSsMYyHBY[ZkJwTDdaRUUTijo~enVjyPAgwZoC\\Wdvxu|LhTHglybrISaSi}LKaTMTgaEzwLcuXWWlkqAs{VsRsYQj?hlZB\\Fp]{]r?~FFw~?w????[^~{^{Bb_N~p}N~o?M@o?Np~wFB~bb~{[Po?M@}Np~po?@~pp}?M?w?wFw~~w'
dcoudert commented 5 years ago
comment:32

py3 without this patch and no canonical labeling

'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_^oF{@~??BbFHHh@tOB}??^~w?M[TK[dIQ?^~~{???Ik`qcpc`r}??^oF{@QBqRajGp????~~oF}QiBxBbEc??@~??N~|bHhI_xrGB~~????B~chKO{dS[?~_NwB}??KXLHSFMXGwB}??^~w?wpqQYO\\Tq?N~~}???KdHaFcibdc~_?F{@~?@rahbchQ\\_???F~}?~ik`qcpc`ug??F{??~~xIgNcMKYPwF~}????F}cFcfDUPaj?~_NwB}??XIRCNHTFG~_@~??N~{?iqFIREQFxJOB~~~_???wpqQYO\\TXZF{??~_NwAQiBxBbEdkL_???^~wB}FMIeMQdHYr_??Nw?@~~s_{cwiqKRuKF~}????F|bHhI_xrGji_^oF{@~??HIgNcMKYS]Nw?^o?B~~?KXLHSFMXMVHY?^~~{???S_{cwiqKZLdk^o?B}?~_BbFHHh@tUrWZ????~~oF~HQW`xIgwtYr_??Nw?@~~ik`qcpc`rpzEB~~????B}FMIeMQdHTiygF{@~?^o?AcFcfDUPbwbp~?B}??^~wBHQW`xIgwlx[dg@~~~o???pcsdO[xcZUZJW~_?F{@~?Ik`qcpc`r]rWZ????~~oF{wpqQYO\\TMYlXo??F{??~~oxpSpqShMK{]p_~~o????~qTO^G[WsiilVT?~_NwB}??@rahbchQ^FaNFb_Nw?@~~_IO]Q[TXEItZqx[_B~~~_??AQiBxBbEcuZUZLc~_?F{@~?XIRCNHTFBXnXku????^~wB}pcsdO[xcfRejTi??@~??N~{wpqQYO\\TbpfbpwF~}????F|TcMSeKcNTiitYkB}?~_Nw??iqFIREQF{P~C^pF?^o?B~~?QTO^G[WsdnHZqU{_B~~~_???M[TK[dIQukljJYq^o?B}?~_EKeciBfK`nWZuE|_???F~}?~s_{cwiqKXrU[tfLO??Nw?@~~xIRCNHTFKXzE]pf_^~w????^rbFHHh@tTTVTTtTWDVElLlnCz}?~_Nw?@MildhnpbZ]B\\U[lp_Nw?@~~_KZY[Zij^BpTfWtjWu?~~~w???L}DkzEuicxZTZWr^b}??^oF{@wfWyjWulAtlb{ExtS???^~wB~TUe{^a[u?vM{JYmLk??^o?B~~ZEyn`Zbf?peuszpTU~~w????^tmNoufTRWEKuuf]Iiv}?~_Nw?@TUe{^a[ub}IkzElZEoF{??~~oBWvT{J[[zciwthllwf?N~~}???NCzFTZEtlcUlk^_vMi~o?B}?~_HtTklL}K]oLn@mjMUwo??@~~_NyvFwZRihliCxZTZWr^_??~_?F~}Z{JXuLlTN?LrnAujbZ^~w????^{ZY[Zij^Ak@Yup}B[yj~?^oF{??ZEyn`ZbfP~@m\\wUt[ZW@~??N~{@MildhnpbxJSxZTZWr^_@~~~o???lp}EsyiZklajbUeuva\\~??NwB}?plhpmil{ZBWpeuszpTU_??B~~?^r^`ZMplijU[FajMpjUpk??~_?F~~TUe{^a[uNWoLn@mjMUw~~{????N~a\\bilbYtVT?LrnAujbZ^oF{@~??DmNoufTR[]Nwiwthllwf?Nw?@~~_B^`ZMplinJclWrZY\\wijOF~~~???CyiuUe~EMrXZBZoZirdmN}??^oF{@TUe{^a[uuZBW{TXuLYuL_??B~~?^{ZY[Zij^BTjM@Yup}B[yi??^o?B~~{Rk\\TkZUfbuKCxZTZWr^b~~????B}uLt^AvFMTiygBZoZirdmN}?~_Nw??Z{JXuLlT{Pw~a[lilkXno?~_?F~}?ijR]NpMZJ]VHYUlk^_vMi_N~~}???KZY[Zij^BYrXZEKuuf]Iiv}??^oF{?uLt^AvFMLzL`kExv`ZTpl_??@~~_N~a\\bilbYu[tYr_iwthllwf??F{??~~tmNoufTR]K{]p_{TXuLYuL~~w????^xtTklL}K\\TUji_]IkzElZE~wB}?~_?Fa\\bilbYvpwbpwytlb{ExtS@~??N~{?lp}EsyiZUj]VJcZ]B\\U[lp_N~~}???EpmjwUwxrXlXkuOvM{JYmLl~??NwB}?L}DkzEuier]rXkCxZTZWr^_???^~wB~MildhnpbfRejTiEKuuf]Iis??~_?F~~bZRb\\TZwpwrpw{AjbUeuva\\~~_???@~ijR]NpMZTYilUj?fJYjZEZ{^oF{@~??KZY[Zij^FaNwb}G}Kuuf]Iis@~??N~{@wfWyjWulU{dnHZqExv`ZTpl_F~~~???DTYZp}HrXlXZUUtc{TXuLYuL~o?B}?~_DmNoufTRXnWZuE|_iwthllwf???B~~?^upmjwUwxsxjMYregLn@mjMUwo?B}??^~{yiuUe~ENE]pfkXwAtlb{ExtV~~????B}Z{JXuLlTiiyimij?EcxTRAwRQXKeRHcqYmLYZZ]Hv{@~?^o??fSohf?uTHcqXKeRHZ]B\\U[lp_Nw?@~~_CjAR[TCouRHcqXKeRwirkYtkZ?^~~{???DPKwdBQ]ERHcqXKeRMUtUuKvw~_?F{@~?BAwiBSsgfHcqXKeRHUlk^_vMi_??B~~?^o[BSpMT`iQXKeRHcqR[zoliwuo?@~??N~{AYSLocybaRHcqXKeRbLlhvail~~o????~_CyeDKwEqeJDapWkUMKuuf]Iiv}?~_Nw?@FiHfCgYRokUJDapWk^DU\\bUlbWB}??^~wBcomI_tLIHkUJDapWkYmLYZZ]HoB~~~_??AqHhOvARiMEJDapWkUItlb{ExtV}??^oF{@kB_YeHqkLPapWkUJDau{EykxZb???F~}?~lOEcxTRAwRKUJDapWkXquiupe~??@~??N~{{AT`HmIaWYpWkUJDapLrnAujbZ^~w????^tWCjAR[TCoudQhSiTIclZW~@m\\T~_NwB}??P~EDpSEhhPMdQhSiTIcZf]DlVEu?^o?B~~?[dgfSohf?uTQhSiTIdQfJYjZEZ{?N~~}???JJW[BSpMT`iSiTIdQhSimLYZZ]Hv{??~_NwBWZDPKwdBQ]EdQhSiTIdbLlhvail???F~}?~lXoHhOvARiMITIdQhSiVajMpjUpk??~_?F~}]p_EcxTRAwRSiTIdQhSev_vTfJ[^~}????F|VT?iHfCgYRofB`ow[MFB[zoliwuv{@~?^o?ANF{HhOvARiMB`ow[MFBdVElLlnCw@~??N~{@qxJR_YeHqkLOw[MFB`oxbLlhvail?^~~{???UZJWdWQZageEfB`ow[MFEv_vTfJ[^{??~_NwBXkL_YRdTKJ`K[MFB`ow[{TXuLYuL_??B~~?^ujU[@Mh`RM@kgw[MFB`owlZW~@m\\T??Nw?@~~fbuKEDpSEhhPKw[MFB`oxMUtUuKvw~~o????~it\\SBAwiBSsgfcqXKeRHcZ]B\\U[lp~oF{@~??NC]Nw[BSpMT`iXKeRHcqXHquiupe~?B}??^~w@ZqxJTPKwdBQ]FHcqXKeRGlZW~@m\\T?^~~{???LjLdkBQ[ih`[HkeRHcqXKeKuuf]Iiv}??^oF{?ZuZBWRQ`mCfS[XKeRHcqXB[zoliwuo???~~oF}[tYr_dWQZageExKeRHcqXImLYZZ]Ho?@~??N~~E]NWoCyeDKwEqkeRHcqXKfajMpjUpn~~????B~TTiygB_YeHqkLPSiTIdQhTwirkYtkZ~_NwB}??]NC]NFEcxTRAwRIdQhSiTIdjZFwLrigB}??^~w@Ylx[mPLIEwQ\\PoiTIdQhSiZ]B\\U[lp_N~~}???ErYrXk`Mh`RM@khSiTIdQhSZf]DlVEu~_?F{@~?Er]rXkCjAR[TCotSiTIdQhTMUtUuKvw???F~}?~rhrTitBAwiBSsgeiTIdQhSipeuszpTU_?F{??~~{]K{]N?iHfCgYRoidQhSiTIimLYZZ]Hv~}????F}jTTitWAYSLocyb_MFB`ow[NMUtUuKvw~_NwB}??]G~aNwbqkHLpSRBOw[MFB`o}Kuuf]Iis@~??N~{?lxJ]QvcEcxTRAwR@ow[MFB`r[zoliwuoB~~~_??@lXZUUtcomI_tLIH`ow[MFB`~DU\\bUlb^{??~_Nw?vkLzB]oCyeDKwEq_w[MFB`o|VElLlnCw???^~wB~MYrekxiDPKwdBQ]CMFB`ow[Mu{EykxZb??Nw?@~~wruK|bN?[BSpMT`i@ow[MFB`tjZFwLrin~}????F}ijiiyikBXXTfek^dMildhnpbk{brTVFuBQ[ih`[HimLYZZ]HqljXbfmUrEufEyivotuPrtfcjHtKIXoLdLn@mjMUwpzdFTzJJSvwUrkZYjqYi|c]q]dWQZageE}IkzElZEqq]Y{g}pVwfWyjWulNI}S\\jkktCraSLHwXquiupe~?bzMTdUtNTThnFwfLl`yqjxLW}DpSEhhPLYup}B[yiFHVkYuRs\\kZi}DmM[jblZMo|q[BSpMT`iExv`ZTpl_LWxzXqTuTmNoufTR[]rkxFdZTLIEwQ\\PpbLlhvail?kfenINkTtThnFwfLmRTVkbuRpMh`RM@kjEZZRnDTZFYprurcjklb\\Volprl`yqjxLW|PKwdBQ]FpTfWtjWvq[d]pjXNP~CzFTZEtjVXFNU]QnAwiBSsgfTpjRZZpMk`zdFTzJJU\\TZJR^bEjblZMo|qRQ`mCfS[JUuNoZfT\\_uUTXxjFxJ[^`lMierqndFYzJJ_YeHqkLPlwLtXqvEt@UtkprvJWZ{JXuLlTbu\\fG{jYbQ[ih`[Hhquiupe~@wC^XqkiuhzEufEyivpXxFeimNkdWQZageEexv`ZTpldWAljXbfmUpkZi}DmM[]T{gzVXXdWQZageEjUuNoZfTW~aq]Y{g}pVMildhnpbbu\\fG{jYwVDOYedCr[zoliwuvHYbzMTdUtNJ[^`lMiet[\\jXuFmPMh`RM@ki[lilkXnpXZBUM]u[d\\fEufEyivpqYi|c]q][BSpMT`iT[Ysuu{Rl`k[d]pjXNPr^`ZMplilfc]Yiw}qge[Q`hNBbLlhvailYr_uUTXxjFxTThnFwfLemqM]k{dYYSLocybbpTfWtjWu]p_N[gynXXY}HuMiuLj\\`yqjxLWwsfIiWVAXlwLtXqvEji_FmS\\VkklTmNoufTRZVXFNU]Qmge[Q`hNAZf]DlVEubp~C^XqkiuhwvwUrkZYi]T{gzVXXRQ`mCfS[T[Ysuu{RmVHYTlZK[|quRijXYZ{W|`yqjxLWz_YeHqkLREZZRnDTZXklbcjuLZHyNTUe{^a[ubu\\fG{jYqkHLpSRBUv_vTfJ[]rWZDc{txP|anEufEyivojblZMo|qEcxTRAwR]IkzElZEujU[BUM]u[d\\fpMptUplZXxFeimNkHtKIXoLdJUuNoZfTRpzEBXXTfek^cuLt^AvFMxLT]qNXNWVDOYedCxquiupe~AlVT?Yprurcjke~Au\\bZTT[\\jXuFmUDpSEhhPLlwLtXqvFwbp~@zdFTzJJUilLw~CxlXxFeimNk[BSpMT`iRdlTlbL}DnJclZJIk{tb{kZY[Zij^C]rkxFdZUge[Q`hNAlZW~@m\\TZUZJWbzMTdUtNLb\\VolpremqM]k{dWsfIiWVAZEZZRnDTYZuZBWTlZK[|qu]HuMiuLj]RTVkbuRqYSLocyb_vM{JYmLlMYlXoURrVdFuItmNoufTR]o|XT{ek]T`HmIaWZTpjRZZpMpfbuKFHVkYuRs]\\TZJR^bE]T{gzVXXHtKIXoLd]IkzElZEyilVT?bzMTdUtN]HuMiuLjW|fXqNIuj_YeHqkLRpTfWtjWvw{Pw{^cjuLZHyMlp}EsyiZxLT]qNXNBQ[ih`[HdjZFwLriitZqx[dc{txP|alkZi}DmM\\XxFeimNkRQ`mCfS[Ln@mjMUwurYrXkeqqjNLW~GvwUrkZYjkNUT^HjFHtKIXoLdExv`ZTplbXnXku@jFNZMQmrMildhnpbYzGxyrqTqkHLpSRBXquiupe~Cy[tYlON[gynXXYwuswvTU}BqndFYzJMDpSEhhPNEZZRnDTZbpfbpwAljXbfmUqilLw~CxkjblZMo|qiHfCgYRot[Ysuu{RilTUjT_[d]pjXNP{ZY[Zij^Eo|XT{ek\\LIEwQ\\PpMUtUuKvw{P~C^pFuUTXxjFx]HuMiuLjT[\\jXuFmSjAR[TCovEZZRnDTYlxJ]QvcYprurcjktThnFwfLbqndFYzJGsfIiWVAWvM{JYmLkukljJYqIuleM]xZDmNoufTR\\fc]Yiw}rAwiBSsgfwirkYtkZLzB]ovk@zdFTzJJTkZi}DmM\\FkzMPxUtHtKIXoLdT[Ysuu{RhrU[tfLObzMTdUtNRijXYZ{W}RTVkbuRtPKwdBQ]DlwLtXqvFbNWruK{Aq]Y{g}pUZ{JXuLlTYzGxyrqTm@iWfIotDjZFwLrilTVTTtTWCeRHcqXKerqNLT[^X~?^oF{??MK[cecFTZJIk{tb{`hMTSomCseRHcqXKdjkbfjNHU?~_?F~}?BfDRFHQciuleM]xZA\\RAe[BXQRHcqXKeRqYi|c]q]?^~~{???Ik`qcpc`rvIMjuUUkjAR[TCoscqXKeRHcfd^IMtuU^w?@~?^oDGNHMIkbEq]Y{g}pVSRMHOsf`CeRHcqXKfW]ki}RUM???N~{@~ci_}OwphP|fIqjYfkJagLRQaWQXKeRHcqT[\\jXuFmO?@~??N~|bHhI_xrHqTzElc|F[BSpMT`i?cqXKeRHcpzMrc]Tl^~{????N}QcpBqTPpjFNZMQmqedB[HMgw?WkUJDapW{einXFkfnwB}?~_?BERQT@reQq]Y{g}pURiWSr_ZIbkUJDapWk\\`yqjxLWwB}??^~w?wpqQYO\\StbflfHVXiHfCgYRo{bDapWkUJDjkbfjNHU?~~~w???qSeG]QiM[d]pjXNP{JagLRQa\\cWkUJDapWiwzUrkN[nw?@~?^o?[wiWxISc|qbi|ddiedB[HMgwu@apWkUJDa]T{gzVXX???F~}?~ik`qcpc`|ddU]Yp}R_YeHqkLPiBDapWkUJENXu[bqli??^o?B~~ci_}OwphIuleM]xZ@hMTSomCpwBDapWkUJErqNLT[^X~~_???@~h@xHpTcWp|fIqjYfhUCewiH`ikAdQhSiTIc]T{gzVXX~_NwB}??XIRCNHTFDZUrFN[lcjAR[TCouNwhSiTIdQhPzMrc]TlOF{??~~oAjG[hKXG]q]Y{g}pV`[T@iYSRxJTIdQhSiTHVFYu\\`zc?~~~w???MK[cecFTP|fIqjYfa\\RAe[BXTdkSiTIdQhSmRTVkbuRv{??~_NwAQiBxBbEctbflfHVX[BSpMT`iZBWhSiTIdQhU]Pxijbz???@~~_Nw[wiWxISfcjuLZHyNSRMHOsf`Yr_hSiTIdQhL\\c[|XxIo?B}??^~|GNHMIkbFXXTfek^cedB[HMgwNWoSiTIdQhSl`yqjxLW~~}????F|bHhI_xrG]xPt]qqtEcxTRAwRIyg@ow[MFB`pjkbfjNHV~?^oF{??ci_}OwphFmS\\VkklYaXpIEc{K]NwMFB`ow[MFd^IMtuUOF{??~~oBERQT@reQNkxUTZS{edB[HMgwx[dgw[MFB`oxkNUT^HjF?^~~{???S_{cwiqKTZUrFN[lb_YeHqkLQrXZ@ow[MFB`qNXu[bqlj~??NwB}?MK[cecFT[d]pjXNPxUCewiH`mrWZ@ow[MFB`pVFYu\\`zc???N~{@~qSeG]QiMURrVdFuIphMTSomCrTjM?w[MFB`oxXxFeimNk??Nw?@~~ik`qcpc`uk[|kxIzHMh`RM@kg{]p_MFB`ow[M[einXFkfn~{????Nw[wiWxISfXXTfek^d`[T@iYSRTiygERHcqXKePVFYu\\`zd~?^oF{??h@xHpTcWlWxzXqTu[JagLRQa^aNF{XKeRHcqXJNG{tTp|_B}??^~wBHQW`xIgw]xPt]qqt[BSpMT`iJ]VHYqXKeRHcqPzMrc]TlOF~~~???BERQT@reRXXTfek^dSRMHOsf`ZUZJWqXKeRHcqL\\c[|XxI~w?@~?^oAjG[hKXG]NkxUTZS{LHqieDoeLzL`kXKeRHcqXMRTVkbuRo???~~oF{wpqQYO\\SjYuWxzdkRQ`mCfS[RejU[ERHcqXKeRW]ki}RUM??^o?B~~BfDRFHQcuRrVdFuIxUCewiH`mK{]p_qXKeRHcqFd^IMtuU^~{????N{dSFqFELJcjuLZHyMRiWSr_ZIiit\\S@SiTIdQhTFkzMPxUt~_NwB}??@rahbchQW}rdXTlRr_YeHqkLRpwbpwyhSiTIdQjctTzG|c{?~_?F~}?h@xHpTcW{d]pjXNPphMTSomCqtZqx[ahSiTIdQirqNLT[^W?~~~w???ci_}OwphURrVdFuIssgZ`HtFBXlXkuPSiTIdQhTkNUT^HjF~_?F{@~?XIRCNHTFLddU]Yp}PMh`RM@kguZuZL_TIdQhSiTL\\c[|XxIo??@~~_NzERQT@rePjFNZMQmrIocvDPKLfRejTiAhSiTIdQg{jxPumqq??^o?B~~MK[cecFTFmS\\Vkkl[JagLRQa]NE]NF_IdQhSiTId[\\jXuFmV~}????F|TcMSeKcMjYuWxzdkiHfCgYRotYilUj?B`ow[MFBzBtdVqYp~wB}?~_?AjG[hKXG^cjuLZHyMedB[HMgw{P~C^pFB`ow[MFBiwzUrkN[_F{??~~oCdSFqFELJXXTfek^dIocvDPKLU{dnHZq@ow[MFB`rqndFYzJGB~~~_???M[TK[dIQtbflfHVXEcxTRAwRLjJYquk_[MFB`ow]rqNLT[^X~??NwB}?WqYQgM[qIuleM]xZKJagLRQaXnWZuE|_B`ow[MFBpzMrc]TlO??@~~_N|GNHMIkbC|qbi|ddiRiWSr_ZIfLXrU[t?MFB`ow[NqYi|c]q]??Nw?@~~xIRCNHTFG}rdXTlRtPKwdBQ]FE]pfkXw?[MFB`ow\\jkbfjNHV~~_???@~MK[cecFTURrVdFuIv?tKRdWYdTVTTtTWDfc]Yiw}oYRdTKJ`K[WxHLGMiiwthllwfRijXYZ{WxKeRHcqXMqqjNLW~HjkbfjNHURiWSr_ZIBfDRFHQcln@mjMUw{ZY[Zij^CeRHcqXKdUtkprvJWxLT]qNXNQkHLpSRBTUOxQWqO~ajMpjUpkvwUrkZYjHcqXKeRHN[gynXXY`xVqbl\\dege[Q`hNBQBqRajGpfJYjZEZ{]HuMiuLjXKeRHcqXLc{txP|akZBtdVqYp{JagLRQa[dSFqFELHYup}B[yjTUe{^a[ucqXKeRHcp|fIqjYf_TpulfW]xM@iWfIotEKeciBfK`m\\wUt[ZXkZi}DmM\\HcqXKeRHxI|bUq]b_bu\\fG{jYhhOvARiMKdHaFcibeKuuf]IitZb{LhtSvHcqXKeRHYprurcjk_[einXFkfa\\RAe[BXRERQT@reREZZRnDTZTUe{^a[uWkUJDapWuRrVdFuIw}o|XT{ek]ge[Q`hNA[WxHLGMi{TXuLYuLlb\\VolpreJDapWkUJUM]u[d\\fcYzGxyrqTwVDOYedC{dHaFcibdVElLlnCzpMptUplYpWkUJDapxI|bUq]buPVFYu\\`zcedB[HMgwBfDRFHQcjUuNoZfTXtTklL}KZDapWkUJC|qbi|ddjk@xVqbl\\ddoLRCxUEgiqFIREQFZ]B\\U[lpj[^`lMieuJDapWkUMqqjNLW~HiC]rkxFdZSYRdTKJ`LHT@{`pbQfJYjZEZ{E~Au\\bZTUJDapWkUIljXbfmUo{ArqNLT[^XIocvDPKLh@xHpTcWexv`ZTplkZY[Zij^BDapWkUJENkxUTZS{j?NI}S\\jkkqkHLpSRB[dHaFcibatlb{ExtTkZi}DmM\\QhSiTIdQTlZK[|quP~C]rkxFdZVAwiBSsgeiqFIREQFLrnAujbZRijXYZ{WyTIdQhSiTc{txP|anclIwzUrkN[a\\RAe[BXPpbccs_yi[lilkXnolp}EsyiZhSiTIdQhP|fIqjYfjJWxLT]qNXNM@iWfIotHIgNcMKYTVElLlnCzEufEyivpQhSiTIdQYprurcjkzBWk{brTVFuTCraSLHwOxpSpqShMKuuf]IisvwUrkZYjQhSiTIdQxI|bUq]blXoL\\c[|XxIssgZ`HtFDGNHMIkbFpTfWtjWvTUe{^a[uhSiTIdQhZJIk{tb{buKEo|XT{ek[YRdTKJ`KpcsdO[xcZ]B\\U[lp}HuMiuLjYTIdQhSiPzdFTzJJTVT?YzGxyrqTtCraSLHwXIgNcMKYPm\\wUt[ZXZb{LhtSu[MFB`ow[N[gynXXYpw~_{jxPumqqedB[HMgwWqYQgM[qT[Ysuu{Rb^`ZMplihow[MFB`qNkxUTZS|qxJUo|XT{ek\\oLRCxUEhQBqRajGppeuszpTUrijXYZ{Wr`ow[MFBaljXbfmUqrXZC]rkxFdZUT`HmIaWY[WxHLGMiZ]B\\U[lptThnFwfLb`ow[MFBfHVkYuRs^XkL`VFYu\\`zcLHqieDoeqSeG]QiM]IkzElZE{ZY[Zij^@ow[MFB`qq]Y{g}pUtYr_k{brTVFuCyeDKwEqdUOxQWqOytlb{ExtVpMptUplY[MFB`ow[YprurcjkfbuKFHijuPzHzAwiBSsgeFMIeMQdHfJYjZEZ{Lb\\Volprb`ow[MFBeqqjNLW~HUji_IwzUrkN[kJagLRQa\\GNHMIkbDlwLtXqvEZ{JXuLlTqXKeRHcqLWxzXqTu^C]Nwk{brTVFuM@iWfIotKdHaFcibcxZTZWr^ailLw~CxlcqXKeRHcN[gynXXYj]VHYbu\\fG{jYtCraSLHwUKeciBfKatlb{ExtVEufEyivpcqXKeRHcuUTXxjFxLjLdkL\\c[|XxIphMTSomCqjG[hKXG^EZZRnDTYuLt^AvFMqXKeRHcqP|fIqjYfb]rWZFHijuPzHxLIEwQ\\Po[WxHLGMiLrnAujbZ]HuMiuLj[eRHcqXKaljXbfmUq[tYr_uFjInctbqkHLpSRBOxpSpqShLVElLlnCxZb{LhtSvcqXKeRHckfenINkTwrpzE?{jxPumqqRiWSr_ZIci_}Owph]IkzElZExtTklL}K]RHcqXKeRcjuLZHyNTTiygC]rkxFdZToLRCxUEgFMIeMQdH{TXuLYuL}HuMiuLjTQhSiTIdS^Xqkiuhzpwbpw~HijuPzHwYRdTKJ`LQBqRajGpUlk^_vMij[^`lMietQhSiTIdVHVkYuRs\\Ylx[mQrqNLT[^WedB[HMgwci_}OwphLn@mjMUwupmjwUwxqhSiTIdQiq]Y{g}pUuZUZLcuFjInctbcyeDKwEqkdHaFcib`m\\wUt[ZWvwUrkZYiiTIdQhSiuUTXxjFxEr]rXkBVXFNU]QmT`HmIaWYpcsdO[xcfJYjZEZ{RijXYZ{WtQhSiTIdRUM]u[d\\e\\MYlUgFd^IMtuU[JagLRQaXpbccs_yjEZZRnDTZbZRb\\TZwTIdQhSiTFmS\\Vkkl[]K{]N?TpulfW]xTCraSLHwTUOxQWqO|VElLlnCyilLw~CxkiTIdQhSiTlZK[|quTYilUj?uFjInctbhhOvARiMDUOxQWqO{xZTZWr^bEufEyivoFB`ow[MFxI|bUq]b}G~aNwbiwzUrkN[hUCewiH`kdSFqFELJEZZRnDTZwfWyjWulB`ow[MFBzJIk{tb{dnHZqU{`xVqbl\\dcYRdTKJ`KFMIeMQdHLrnAujbZTThnFwfL_w[MFB`ozUM]u[d\\dlXZUUtck{brTVFuWVDOYedCuKeciBfKfajMpjUplZb{LhtSuFB`ow[MFTlZK[|quE|`nWZuANXu[bqliRiWSr_ZIh@xHpTcWt[Ysuu{RepmjwUwxo[MFB`ow[|qbi|ddjMYrekxiFHijuPzHyge[Q`hNBchKO{dS[Z]B\\U[lprijXYZ{Wow[MFB`o{^XqkiuhzE]pfkXwBVXFNU]QloLRCxUEg[WxHLGMiUlk^_vMie~Au\\bZTOw[MFB`o|c{txP|amijiiyik?wpqQYO\\TTpjRZZpMuUTXxjFxRijXYZ{WphMTSomCv{@~?^o?ArqNLT[^XHcqXKeRHBfDRFHQcln@mjMUwtZUrFN[leLlMLtTn_fSohf?uS?~_?F~}?YzGxyrqTqXKeRHcqQjG[hKXG^pTfWtjWu]xPt]qqtL}DkzEuiqkHLpSRBOF~~~???FHijuPzHyRHcqXKeQS_{cwiqKXquiupe~Dc{txP|anpMptUplZSRMHOsf`~_?F{@~?Fd^IMtuUXKeRHcqXGci_}OwphJUuNoZfTW}rdXTlRtTYZp}HrZAwiBSsge???N~{@~uFjInctbqXKeRHcqOWqYQgM[qExv`ZTplmQnWtkfgzWvT{J[[xoLRCxUEg??^o?B~~TpulfW]xQXKeRHcqOXIRCNHTFKXllM{TTjUM]u[d\\dZb{LhtSuedB[HMgw~~o????~pzMrc]TlXKeRHcqXGBERQT@reREZZRnDTZXNL]S^WjijR]NpMZCyeDKwEqnwB}?~_?FHijuPzHxapWkUJDbFMK[cecFT]IkzElZEuk[|kxIzJWvT{J[[yge[Q`hNA?~_?F~}?uFjInctbkUJDapWk]RHQW`xIgxTpjRZZpMxI|bUq]b}HuMiuLj[JagLRQaWB~~~_??@jkbfjNHUpWkUJDapk_[wiWxISdYup}B[yi]xPt]qqtfTUqsvwphhOvARiMNw?@~?^oAmMtkzBvHapWkUJDbkAjG[hKXG\\lwLtXqvFkkirrUNqUw~BY\\TLm@iWfIot???@~~_NxxVqbl\\ddapWkUJDatAQiBxBbEdMUtUuKvwTlZK[|quE~Au\\bZTPhMTSomCo?@~??N~}NXu[bqlipWkUJDapN?h@xHpTcWexv`ZTplg}rdXTlRuLlMLtTnaT`HmIaWZ~~_???@~k{brTVFuKUJDapWkTWEQcpBqTPpYup}B[yijYuWxzdkZEyn`ZbfQkHLpSRB^wB}?~_?@xVqbl\\dedQhSiTIdF{Ik`qcpc`r[zoliwutc{txP|am\\TZJR^bF`[T@iYSR?^o?B~~?PzMrc]TlYTIdQhSiVHYMK[cecFTRdlTlbL}G}rdXTlRqvFwZRihkfSohf?uS?~~~w???TpulfW]xSiTIdQhSjJWci_}OwphT[Ysuu{Rek[|kxIzMLlMLtTn`oLRCxUEh~??NwB}?xLT]qNXNSiTIdQhSl`k@rahbchQ[XllM{TTnHVkYuRs[vwUrkZYjSRMHOsf`???F~}?~u]PxijbzITIdQhSiRU[DGNHMIkbFpTfWtjWvkkirrUNqijR]NpMZHhOvARiM??B}??^~zVXFNU]QmdQhSiTIc]p_WqYQgM[qLn@mjMUwrvIMjuUUna\\bilbYsYRdTKJ`L~~_???@~uFjInctbsiTIdQhSd\\SAQiBxBbEcZf]DlVEuN[gynXXYj[^`lMieyaXpIEc{N{@~?^o?@jkbfjNHU[MFB`ow[bp~BERQT@reQjbUeuva\\Fu[jIli]L}DkzEuihhOvARiM?F{??~~o@xVqbl\\dcw[MFB`oxqxJTGNHMIkbFEZZRnDTYjYuWxzdkfTUqsvwpm@iWfIot?F~~~???Eo|XT{ek[w[MFB`oxXkl_wpqQYO\\Su{EykxZbxI|bUq]btThnFwfLhUCewiH`n{??~_NwANXu[bqli[MFB`ow[uZBWqSeG]QiM]IkzElZEzHxjqbzD]LlMLtTn_YRdTKJ`K???N~{@~TpulfW]xFB`ow[MFEjU[AjG[hKXG\\Yup}B[yitbflfHVX{Rk\\TkZUcyeDKwEq_?B}??^~|fc]Yiw}ow[MFB`ow]NWo@rahbchQXquiupe~EqqjNLW~HkZi}DmM\\`[T@iYSR~~o????~{einXFkfb`ow[MFBalVT?h@xHpTcWln@mjMUwuk[|kxIzHnolfWutVAwiBSsgf~?^oF{??TpulfW]xXKeRHcqXNC]NwqSeG]QiMRdlTlbL}BvIMjuUUlTYZp}HrXoLRCxUEg?~_?F~}?k{brTVFuXKeRHcqXDnJclKXLHSFMXDjZFwLrimqqjNLW~JEufEyivpSRMHOsf`?^~~{???PzMrc]Tl[eRHcqXKbYrXZAjG[hKXG^EZZRnDTZFu[jIli]ZEyn`ZbfBQ[ih`[Hnw?@~?^oBVXFNU]QnHcqXKeRGZuZBWMK[cecFTExv`ZTpldZUrFN[lfa\\bilbYtLIEwQ\\Po???N~{@~xLT]qNXNXKeRHcqXHrTjM?M[TK[dIRTpjRZZpMkfenINkTj[^`lMiexUCewiH`g?@~??N~~W]ki}RUNcqXKeRHcpfbuKCdSFqFELJpTfWtjWvqTzElc|FfTUqsvwpcyeDKwEqn~{????NxxVqbl\\dfHcqXKeRHTTiyg?[wiWxISfpTfWtjWvFu[jIli]{Rk\\TkZUm@iWfIotNwB}?~_?C]rkxFdZTSiTIdQhTw{Pw{]cFcfDUPalZW~@m\\TxI|bUq]bj[^`lMiephMTSomCoB}??^~wBctTzG|c{iTIdQhSiUj]VJcci_}OwphLn@mjMUwzHxjqbzDZWvT{J[[xLIEwQ\\Po?~~~w???k{brTVFuIdQhSiTIerYrXkeQcpBqTPovM{JYmLlkkirrUNqL}DkzEuicyeDKwEqnw?@~?^oEo|XT{ek\\SiTIdQhSZLzLeoKXLHSFMXHquiupe~BUM]u[d\\e\\TZJR^bFIocvDPKL???F~}?~l\\c[|XxItQhSiTIdSy[tYlOMK[cecFTWrZY\\wijRvIMjuUUmLlMLtTnbAwiBSsge??^o?B~~NI}S\\jkkidQhSiTIk]K{]N?TXBdHbHBt[Ysuu{RdZUrFN[ldTYZp}HrYge[Q`hNB~~_???@~TpulfW]xIdQhSiTIilTUjT_Ik`qcpc`xquiupe~FHVkYuRs^EufEyivoedB[HMgw~_NwB}??ZBtdVqYpow[MFB`o~aNwb}G{dSFqFELJEZZRnDTZkkirrUNq{Rk\\TkZUqkHLpSRBOF{??~~oAmMtkzBvGMFB`ow[MlxJ]QvcBfDRFHQcexv`ZTplek[|kxIzLTYZp}HrWYRdTKJ`K?~~~w???NI}S\\jkk`ow[MFB`utdlXZUPbHhI_xrHwirkYtkZTlZK[|quJ[^`lMie{JagLRQa^{??~_NwArqNLT[^WFB`ow[MFLzB]ovkDGNHMIkbEjbUeuva[]xPt]qqtZEyn`ZbfCyeDKwEq_??@~~_N{]rkxFdZSMFB`ow[NMYrekxiEQcpBqTPplwLtXqvFFu[jIli]fTUqsvwptCraSLHwO?B}??^~~HijuPzHwMFB`ow[NbNWruK{?wpqQYO\\SlZW~@m\\TkfenINkTe~Au\\bZTV?tKRdWYf~}????F|jkbfjNHUFB`ow[MFiiyimij?'

py3 without this patch but with canonical labeling

'~?ExH__gOWkwRGNvRBv?qFBBWHcsLb^sGQOUe_}rejchQkJC^GARlW\\@IpUAlDCFAplU[YI}QMYsqEBWr_TYx]AiIoZXcHzWyHuhVMTK{CGV^zVGGxICymlcuf^CGJ{KOTgBbVth?WeoQN??}\\rqZBx]rjaiX}qaqmeMTBkC{FA??hESePw@Am_lUhXedcAo\\wdGxugMiBQQ}kBF{Q}T_mI_Bp_~?tpWhMiXbQ^IjsWD\\loj|UQC@hi{YJrsyxinQ`ybF\\yJx{Bcyz|akU@yNlYU_fKt}xQ[nN}Y[C{aNoaRMedU~qDLSTMhJkXhxsEtiVYeqe^KGQIJy^lKVbHSyKolAdaKDevQTfLCA_^S^z]MWDSr}dMbMe{jECHU^MDG{QdL{dV|IDyH\\ZEbwkECO}uLOVIbOuoDYSpLHHTu]@zOxB`CPryhvD`hW}d|cUgJSNl}E^SK_FctfkvTNz|DpihjSUTM]k\\\\jl?NLbTXeNMAyUjWd\\{hcXo]XAEeByCZ]^~\\geTzqh@]^erkLYNtFEx[Rys|vCXGlFVBrmgukoYx`^e[J[EUyYFMbaartPyfreNrMqyEbDwErZXrKF|dskWbduZqOnDkifl}qnZndgqpLjOee|l?`ylvm{ZPUwRM]cInO{hCUMJ\\b|se_YVLAfvr_}JJNAajZgA}eKMlqkzbzwxvNrWtMT^YbAt^GzPO`[YX^}o^dCiyF^bxuI@GfnjIzpE_oW{\\mgM]]wDu{^er|IMrYEmj\\chjad|dQiTuBsm{{JHeiTY[ldZE^racrJGMEu^NKKTqsTV]iSLtXG^uYHMp\\ez`zX[yOLLtJt~MzXCxM??LjEBxzrBnrbDWxVGSxnqt_ylqvFkAzwQGWvT|wafzODSvK{|`}vqZcQztYtAzURcyliWm^Az[QZYqFwobOn[sVzNpdLuMNqE_fkLf~yP{T\\x@l_{nEhH[JHy\\I~`lq~rxKpmezvBWoDQnej`n|hLG^aBDMB_WtgFChuZtBwGpVSVDOXCbekEvJEbxfSu]Q_@aAG`AjvHzpvR`]yeJNAiGeVpH@?JWo_\\vxir@m@?aFMZafVCRV@{FqlY?rWF?MwyfW|Qv_FwM}\\SJAwat@GUiPjtcGVTPWp^QAKopzdJq}GVG_qaFCMNV?u}D]ZQGpY_WZs[Ey{Ma\\jWwRcBPVeZcqECWs|`Av_F}VBltyyHjgWIX^RJKapG?soPm?NuDl?p}uifgGtJcXN@}ni@xd`gJLMWm]CQeD]Z~QSC`}}XPPKIs`PNhFr_oO{\\XVrjBY?{`Gj@kvnCl~DYpWGltD\\{MsCP@JlzKySEjLkFESRxdVpQ{YKhb}`_ia_dVmzE{wPkmI[Dux\\cNVQ~N?ltLCgHKNEJhQieVI}Hx[tfTGdhb@i[jN?FZyB\\H?|BjZXhTdNpQoC|I?\\Kby@mIKrUjKWmMtN^SOD{zjYG~vRhk?`ZWrWuAxH\\AnvdmIG^\\o{vYrRc{Dca_WuWR{|eXXNQPx^ViGRDho_Ld`sRLdE`k?ZL{Qvwm]?ZtGnLSfx_fQgOXG~\\xhtMyhUgqS^qMS@mLZu\\vW]ts?IIHYiZ{@le{TFWxS|JDg|JRycQJKL~geszyGMKZX]^eoKGtkuFaJS{u_OvvsDN_\\y^CgoDAF]rD}|nic\\^aQ@BvT}Iwa\\s[BKqw|GrxMP^fz]NmIcAwkAsRhGUFtXOie~]SAoAwaxwMF\\TUHfzqj?RQ}@FwP}T@MC~}yM@kOkpm{xiJH}SQvd^iJHnPHKtDWdWaOcVv|EpjSk\\YJxcoVl?Niacz}WgLJU[RLy[SkOPQd]nMiRS`zqy{{uVDrKTeA~TyOWogL{sxBujXinx]uIUCyESv?EL|nbB`LtHiLpRn`ZddtKyKhFWIiCnbC}dRrPUZZ_KbEVjshSkkRHm@^\\lJvWE\\VLnk?hpV@f{zD}Qe_N@fPsQLFtMQHcl^aSqVQUbSbj]]SJxVonsHZj`QFDhvDUh}U?Z[VHafE[F[fOEI@]RxuFod[zlqQYzJ|_UfiuMpRKvzmOhr~hft_H?PWE@iM[ru^yvvn~RCe?nt[pWsGG?[X?Y|ZbJJS_}FPnLR}?}KskPPps~bk?G~t]skRMOdk{BhWluV_qqno_}hwm^s|no^s]OWeE\\io]bCAFiOBQT`|^kzOk}|?AbvfWcVwgOF}@iElc~z}~\\KkUJmLiDBY~nK_Bg`gVh[bP~hTNTQK|HpYpE}PgsZFkHWU@fF}NLWfoUN@RgrmpzUew`KTlysTvyBfFcnHxp@teK}q}bTHYAVBUxJTxrXYPSmRxdFm{ktkqJQYOQdd_w^FVfZSFl\\NaIsSfo`R|IZarXJkaRjmK]EWWn]?FjBqTgcc}ltxMSeXckcbOQqrUnN|@{t]OpQR]U`OOb]nIulLYs?\\txypDNnfHkgQv?_rm]eI\\Ks}Ahxk{SaUNJbjPVe]J`AvcerhVdd[]groGLSIqyv[][iueNiRM{@?zL`bZmhcllacHNF^S?[rFc~s`]`je~mmSWckNiIElH~}j~DJZHGxA?BjQQIGvJQbbo^R}[Y`bL{vnaGbLXAdXxYMa}\\TVgiqjeh@}u|_DbZU[FrSQmetmRw?}QlOikkLnzj_S@HeyTglFryMUTt~WNAMGc^E\\z\\xcaT@Pwr]pYU`yHy^GOKMJ]]_n[qhzZYv?cSFwVKxI{ykh~JqbklP_eIuQxFfNrDFKYiEzjnDcGjndhCUWLVH_rf?]{r?uRFCDf^~zl?TUZ\\qKYBhFpkVAizrusDqJ}AJvAakHxsNEfTOsuMOz@SKwLJwvBzk}RU@iR}IFxf[q]o~tcPs[{ldlIkSo\\KW|RBnByUZ[ZiSMA[gN|GPxbtxgHODzDlmYjPU]RD^k\\vBaKG]WLZ{zruGqFLmVTO_RyKdr{r`]WrL]C\\GHNMtT\\VABNex_idiQrgvnqk}VCsArE?bd@~iG`STZmQulnRO`j{^j\\idQENel]zCatnRSmCp@tAuUxZU\\bvCwQX@N?D~fsb\\eE@Iy}sf]X{J@uuTO[NtfdJOvyod@PUQKgy|n?[{ayTgVubtc]rzH~?_YKaR\\T\\}MeiRrMybnExEO]guG{bw]dPdUQIfxZS[TDjF~Le{JIA|WJuj@erX?vSs@dFW\\y]Zv[wpfSr]uAAXRudWSotGb}{iU?|capeu|kvSp[za]]hCCyHo~?zCpe`~EOU{fNzaUwnKjmBelmFs|yGRm?]ZrnRr?eoYcU`@@Sf?D_l{GpdM|z{X|ZsXe{JNhSshbN_JDtKp~x?BTlCVyw^ZTVCZaN}aJoZJZ?SM?nLyllVaQPwrEdFodE|{j{Sabu_HqVIdTDs@q^K\\\\dFzu`xXASUVUCWcz[j|eUYpC`dGYPUmiju{]FTyMXLcIafEShz]`uCATXzZUIALLZtxKrShmT{m`Kl`Mfrrpt?rBx`DxKoJmTu|EVUTwQbyJTZb_[V~SggRGljQAKOQNxvEzVamfYGQn@gW|}UE`y[W[hLamGJi@YzwxHfKW\\^_Yt}k@~RoqrLVDS[f]_kPKElJbpKPTL^YS~fVA?D^xlovbYzFTFeZEpSdTOM}vY`fVVhZOJl\\VPXqWqTX_dSyzknEgoafxRcemZxKq]dk[lzhtNs?K]_Re?F?C}b^XIeMzMLZq^qLB^KyUppeyE^AJPgvZzCUU@gWiBfN@|EeydUv]dJC^XfjQdRWWvzKSoTlmIrsEB?Zc?cT~fMuqQbuu~LLmQU|LCoJYTae]oeiAwGZLnCT~cdmjZBI_jtj[kjQjoCMYHUfnyZGFGBV{DAmzLTNX]M{IrU[trOKHfYpyHsLJ@T`Epb]Y~pB~bHg`kxZPVPvDtYLugANU^n?iAP}?NYBrxUZp~Bo^QBYZBWqTprU}FdNrMooAdQ?jp^]s^X|PsgpO`QjtZikThwb{GMRYqDrQg[VgHe[[xLJrNYxVovL{nC?N[]OEyRYQVS{FEwoSQ|~rxjXtXCT~fpkA_FBw|CsEoSiXOO]XtbxIG?????????????????B~~~~~~~~~~~~~~~~~~|HPb{uVf?o_BZQIGOSK~o]mg~v}T[Kl?XfY}iFEiww_MZhOLhGyeoK|}Kz^V@|~tbg\\GgrcHFAsbqmNArqDw~D@_\\_YBr^oHYyax~eP^`aW{dxFsjCfGctBOq_@NSrc]|~QFuAwMI]U{rVqXpLyOCUtaF]EjUUsWgM`WVll~rRawlU\\AuubKdTyWFGem|az\\Dy@EgTA[^W`SgtZJ\\eP|teh[j?dn{QbXXu[[XgaK{AK[u[koi]LD~egxXVQkpwI~TUQBaNW~SeWV{CFyNGikEIBjdyQD~RD}UPKmstI|`Ra|xesDEd[ZcHhp[PoFVJtYbrzUFX@O@^nsItYgvWVZ@dGS\\nANe?uVGF?Ne^cclx^Pzm[P|@CNzMi|yOTDh{bPyBLoHbhg\\SlWMilUS_C|mjt[zzPFslBPRUB@mHm}{IuL@kdryvMkaLegG~VZMFBdgF@NjrOSm_S\\Nm~KB`W_Bcd|`~UejqgPVefgqlFP[mNPArZsSIuBvLySI\\BHqjLfF[wGmC|RzqLjHKnkq{sJ\\ipAW\\FB|OUUSjJ[p}DM]eg\\VEh\\^UkHASML|HVNmwISPjSsSXXWOLzp?sVTwVTWY^LzcIjqI|_cX\\koEpdAx_Qf~SiUv]KMqzkg~vEXIY{SBdMITnglNgrOtl[EhMsxHorKR^Eo`|fbBhy{nq^?DE_zlb|mEjiD[C?Mq}dClTVbnHpfSfDpgFt?LbVeuVVFB~aJI`BqLBwCahvMlS|]Ju^~ek?Lw[[cAFGjmsHmwr|cE^mWBgcT_teW]cTlJXNBK|\\aH~zaTfTgO_]SyBi^BKdtYmSRHw`ZTyWFp|sZwr|N_d[wPFc`DhTI|v}]OHUKxig`z@}UOEc}}`PNN_kQyx{qmx`SSLmfsRAVMrF|GLWf\\C}IoSwZEopZNkGzzVeTIiTdu@WoxyxgLTdFFW|xNSdTBikANgNa`DTYtHcmD}uLubrT}zWIFEwVH{k}\\bSBL{lh@gxuvyUR\\N\\I?D{PhDZK`YAl]QZr\\f\\?A[L`ScpVI\\IZgVln?vdPaYqonX|IM}cCDUkiFdJHczStWVaDkpMbhYfWOs^YzFmEK^aXYRbVvCVEZShohgwCS^^vQ[atnhKvNiX}HG@H~abKrsLAm{LM[dWBMQ^jZ{htQgKOJnVbgsN{~KxV?BEUZ{?WOn\\s\\X_vWjoWuaPBTDniJ]pbi^DrynAP|aeWLF]r_Vw|FNH@^@qmYBvth}Ges@Xe{xVNWALQmKaiq}SvEnP}Zj`uxcdOG^XT}grJDxdvFOUEF]JX`ySlNaJEZER\\p|{ha_lPTmKQsuZ]lQDiB{KJInXANi[eG}ehZ`vOetJmUNV~IdmvOsb]EM^oPY[BIwuaRezi@XeJtKdpmRP\\x|ewWmvES]gYiqiLWHVrpZKBnuBoZDR]qbIleR|RqI`^zDSevdP`RUkc|@IVzlqejcKlX[}QX|OZv?fnbWEmCb^Dp]Gb^AsbYJjdwpGCrTiExkfjeLXuwt?AEJ[xph^YjfHj]gMjtgCw?ts_[\\xhy}JSolpxYTreC[Qh|fYoMLMXurHfEfFsVqBmCRCI^`qBvVTG\\wHJqRTFMqYxOUx|rcT||e~iYhsJFshtpR\\\\wgJePpHvXUlxbCQWioCusMzdenI@Tmtb\\UuBT?Jb]skzrSJNHOdQVhViEVOVbfH}^vEABi`Y[uVcXL\\gfbV[W^ac~O_cvastA\\y@_x`t`eq}hDln]}iREhXlXKtfA^cg]wRJfgUuPAaf}tbQqpD}nKdWlqM?pt}oAO^~]uBXfhhgTkDCELdaeqHVo^qQVGfif|s[NJ?ZvWBB{dR[~b|rpxX@uAHWkxOSg_s^eOu^BSX^}I\\gFqdRieDP[zXtwIzTH{WUpVUMDorLd@{kNFrEiM^Y{jsyOKBDsoxsQoi}MIwWLuI{vKQKkyr@rjnFdWmyttMbY@SiMbCkK\\oshdt\\XxQYNQf`TSB|]IMors\\Qivjk?X`zJivPLObwrkmrUVMrbH|LwB[epIrNz``CFUXIn~xGusM`UICXZpFDkdbspYzwZ^@zw[qPz]rK\\pOIsxGdwmI}_Xb{JVkCTyH{ohMxeI\\^?M@SdtijCavXqXHsNibkvnH@JsUxvRx?D}OyCwZL^RHADp\\r[HVBxnxz_XxlH{?WaF^Ts_I^Gk?{uZ@Pib~mAfRNTq]hHpmj_jH}~ruhPu?yOEIRmsxJjg{GCVp`gkmbjQ]DGa^`depwX@~VeYLFWNTM@~eDP{wiLv{FIBnZ}_?CygTDVAKH|qSiAQ^GWxvVs{YNBfFAwL[y^eFXqcAX`SZDq}oromw{Jy\\{EokwVRjtQT?]XrQpstbosmkWXlO}t^@audDzcwAorDCx`^WFDDiuey}_ldh|_xoHkemrcaHiEL`dUt]IZvpWWUt~HE?MzrRmrQd\\\\Ss[HDTBaKnbpJXZxH~PudILkSnsR`@gL?rlueCz}vDtm?kLXmYaUijELStU`HflmEnleVWc\\IBBYK[iIDB[yWwKjGFTMHTZkiD}eQk^lNrr]@FzKSeWlCAaJFzXXQn}^XbPAqwp{m{gHwaUfH`g`mzla@mucQ_{|\\VwPdiI}BhKi?eQIftnFq?TWNNUpxnxeKp_MNa~imQ\\@hCmeiqCHR]rUWbDvDBQHmnh]~Cj[QTqt_}SEYrJTERsctgVj?LhnTksdrYWH\\Wv?ep_TV}klgwPuj[VwY@TucWjVM~Y|xlEKMBKKPeXTMoENG~[GPHQfDHY`]pBnnlJ_QJhgmJ[z[xqxgYJpJrOYmPIaIxNg[LUdySj}JX\\un?_o~zqFbQCE~kBrT{`e\\?|iXHJCMrjClBElVWORNIkKk?qEvy~n]?UYdMG}IEziXf]hciLqR_MecHb}SUzAi}oqPnFpq~zGUdBWyh\\a?YxfO{p|ltCixKyjuTUdRcAq?YVjC_lg_o}H]mdGy]}GssgQf_nIxDakw~PQPE~dgNsx|goS_GR`\\PU~nN~VFdHnRrydY_Iais`zJeQJhTtjpyqYjHpNR]P?Th@l|S}EkhuwajZCgknOxU^LcfUIaxNNnkRPcYdT^TUFQ]J?KS|SH|WOkJ`_|URLTQOGyM{vRNKRyvgC\\_jLhV|pjK]duLI@sIsL|fuL_JVxGDN[SM@V~}KK~AiO}eEHL^KNoQYBXamJlbYPguh`kh`reCr]NbE_sbv^CGjxtma[?{]squM{}HUfDRm@GR}NBEBT~DKX_\\qTqfCVvEKpF?}w]AthKtY\\_m}kEkhgH|v`_nfTo_uQV{AtVCFFXbxuxlk^`i@un|MpF?IWpr[[j|pIE`@^`@q~aiNFaf{l^UAIWaImuGeNelbBho^\\Sqx`VasP{D{XIogn}StoRoxJHMP{eY\\csd@kDpF]QfdFcufil^OD[{]eWbASzWTXh]LrpYIhE~OIUZERgYLA[Ssvk{a|kBjM|SE`U~oAuMpT^@My}TkRHBRdQr]CaXRxv?\\?fFWAk~_N^LLLwtSzp_J}WKNcIYGKLCFVwhqy]psxs[Z@zVQQ}a]ODpYmmRm\\uVgZYj_s\\z\\WOAocqepoO^TSNxJFjLF[Krl]KME@nSPRqh^JaTq}LQzpN^i__]QhDsDvzRaJWcZRNFIy`fKPxTUuJgWPdSnPNkDVq\\^YthHRWDr{cbFXtL?~ybmPdJaiMv?aBf[@Zrlts@C_i]f~lQ]LxfLsaFSvkHm^CoH|fJDJJqVIPXSMhHuOzQZEfMMX~wWZUcFWffxad`vEUhBfxVLk_c_fyxKZexIFUBgl|HAfRUSPL[mUoTp{FB_yqjRd]CJBZVw]OlrtVu^eUG{g\\pXK?su_crXhaFKCCvhSRXu}DcmMs}}NYcc^_aMBL]N@CQMTZRnt\\yjEE@HdLPAEVzf?yVfj`kSaz[~avsWEt_q]KRIkMYfKq[|~KOkomoN_OnCsiARq~_}aTIb{?pvhBxz^NieVu`bsWLD_LxTP[`VM?V[KZ[E~EX_yde\\f?WHMdkefxr~mqzib^Sohz`QMrQ?iyGvQle_^fLxqhpBBL?rMBNn@GRcfeHGno~ITPRZTeALg{s~Ffxi`zL]yRdC\\Q`vbr@OG]RdW_JqLEo[WrvDTqlA[xmvMmPe@LLsJmx[{CdjMXp\\j}DIdWwTQYJ@LDBrFNSL[jKvfGeFrol\\n_Aq}i`M\\hyDfU?yyU[`|TYSwTkFB`FqF\\}@l]sWiDwPQOHNzl@TLiTjVchyDop`\\hiYmaMFd[awD@h`uvclTiVTxcnFfF_s@bUaelspYnOqVNlKlwWpJUxbUcjf?]OZNdgCcprjYn{Bx?qYRJl{O|?HumG^g@DzZPUm\\XhjP\\MNygZpciWK[lkILxI`aE}dkdheGQQVx_fXB@pfk\\kaSTwxtI[P|ZM}LiEHaJJYrJrC_LtmY@{\\CNO|bwZYBT]UpY[NFnzjhcaZWbGvPMkUky?GNSdZM{|VKvAHCrY`sz{V`}`DFSL@KNRvzFetRcff@tdZAO@zqXHgffJSaw_}uU`iKmFYzXSINSYow?P[Y]QqZmcLNK\\FXZsklkCItMQ]GxYvzG]UdVMeGdu?EzeWJLKeQnZ?otHItgzEb{qmgte^hXckmiiUEdb?JZmMAqsfBMlHNJEnTJBuFhUDMEDCxoQcyZvF_wo~w_wimfj^B\\mAwe]qE@UCMRbqrcUEhUxeawg}G{^`BaFAk]FT|VqPHLzRG~pLJkCsNWhOcmjZdbN_wUIokRWsjNmenBDMY]gk@Q?LlO~p`rM~Ta{}]UwEKgNtlbzgG{h_^KBslGBCCulZO_{~UDhSJ`W{s]Ix^erweOz~V{eO_hQHsZKejpqUOPhnaWiR`hX{xblzdHAC_xgFqc]ZNh`@^k\\|[YJ[qknANn?`^MZDnrDMQGoB_TGDOJEPfYfSe\\soDpz[DJ\\bqrISLT|B^OlTvuJDXVBBunSs_`\\QwcoPxUC}]oMEKVrdVFQ?qBThZe|{NF[nrASC^^P`YGQqTDGp}eX~AjqUa`qbFtC{bBUYkqrd?IaVI_^\\FmunUlDHxlThVIlV~ASIFrMAjGKwSJihOCfbWieNCBbXaG]a_OXLhEGAy?ytEiSW~Fr@YCU[}^oumDbCq`|^zNp`NeY`UMpqKRivzx~q{rko?DuOBaVu_?b}msY^oTHNWRUl[zr^R^zqKKZIlpO{|O[NE|zP^Rin~EE`]\\OQbGb}dONwAVBGfs~{rScDEBO|Xslyf|TsPE[vS{mQ`Bj[]ftn}x@QdyAsLLeUGiTqy_]Z{YokiaZkElzYseR\\iNu@xnItzAQr\\xulQBXfTObo|~@p_^kBwFA?{@|cSr_`x?^?~^m^_wNzs}fFB?|oBxz~oF}boNf\\@A^IA\\HcI}@mpJELcy]cn@\\VRQ`d\\TJQFeb^q}q`dTc]nXRBz[DS^Rfbe^CR`g@R@YjDvJbgMlMe[wRRp\\qenZZAeHSRZ}sF\\rvPGcKTnR`R`uj^WPgRhREddw[SRW]cBvrRFGRl~UOyxdhAeffv[FCPN\\CAnO]inzvcx|Q`XyIcBhLqLtr?Ag`x]|eaAj_uJKivbcgB~m]Zj^V^tGp\\ZGGZ~vkQ{GoX@OUNUSgUMb_RHcgd|{jXds^JEEiDItzsHlxY]baFacesZyUhxinK}ZC\\krfGVSxSmhUcGGLlDtMhdGsd_csJ{Kb[~eav|\\}u^kahk{LHWS[ygqv]ih\\aJEebak_d^JUt]XSy@hDz_OduluEnSK|]AnqvbjkdCsshqzKiec]C~xCmeMKMkAwt[dXS`?E^no_eAUrwTzmEWzwknvHVgV}MuoMFtoK[FFnvDxAypISuVNKAUBfSDtZMNCi^pUWInEjo_XKzbYZtVyYkjMVLqanhC[cqevwhXHBZ`erGKZvpd^^ia?AaC@SF{`v{zWFjzeWpVxP[YNOnsZfN@ZPLwuL`sPykMJS]CVfFKyEmkB?Rro{lg@OvV\\rdpPzrQNPkIkXbp}UwuVIrg\\qXWjXd@sW?|~RLOPhxPbtwByaHn~\\G[RAb`Hw]izNAy_[yWpSKpx~DzgVjqyEslDeITbBBQnHPU^K\\zWEw[BbF`WIVDkh]yr]Ut]VgjNQLExUyYRsNXuI_ufurPUHpdIjX^XSeYQDEinDl?}C}Rm{LFP|OtVp`]XF_]FSUnrNXgiD^L`yOnE}z[S]P`ZL?_wkba]Uq[dHUSIatE|`ugL{zLZup]C[`\\k\\s\\eQpRNm_vlQGXpaPHdB^Jpm}ew@Q?ZpS@zdVjZ}LDzCZswXeQHgYt_nr}C\\P{A]Ofr~VAHay?B~^CGecJMiZLZcS^|a`bal`WDRlj]mxi[KybJ?uICAN}~g{Jlu`m[wg^TD{\\KpEDvhNgYfTXaG[dOhQ|YUeqI~RBxI^IlbbZl@_f\\@}HP]iZKrvueKrrJq[gyTuL?XYachRBsT{bolYwMCM]WI`J~fxuJVMnnG@Y{pf`TouHTmXbPHx@n^GP[PLCJAUywZJukPrOnTm{IaR}Q_Wdz^tDx\\lNMM^?Ycgkl{WhtSv@ahdOMFaXyi}sW@Lp^LeKD|sBnP[XtqtAcvWXu{i^}c{MnaIeAWo}hWsG@BlgPavH{t?K^K\\snCClM^GS^^swUhiI}`QXJUBZv_GJTMn{uKflZsSk@k]TLerOtUslnEpAEOni|Aa}kJOPl\\?UyVmudrOnRkStiPGNDooaX~tF[p|Jh\\ky_x?aPdR`]iSldX\\KfrtQKZ^QhbJGDB^sfF}HYLRzC\\?dmLFx?m\\S|^@~`akHOAxDmDC|@V]@KRARl^FtPevL^kpMToe?io\\ZST~u]CaB\\{{C\\MSQXsyhtqJeLHP@G^c_ipxTvZOpNP\\rjxhXLUTBnHTa~tgLK?}B_cq~mdGA^nDTgXyv[LrFEBca?FplL\\MwY]A}|rIaNqyO`gKPnu[Qz|sqz@CL^UbPSReQh~N]R`gFLdS[gvN@PfH[`]@CSJYsm{xj~w?vyRG~BxQE{u@awfi}TSLbpBlISQwOt}Ny\\X_OFP_[XNcXaUuKNprDermoaEcAexlhEz}JCpJrfLk}O@Jzsm^[raG`hU[LVh\\ZpE{xZ@kd_mwAgnWTflT[`iUUC^vuirFhwQH\\Ecp[Sv}cbxjQErRUUFbJUQ[?_fWW?]gdtj}C]hfdEtQ[Skf}aj[EbfmcSW@reUR}Pm_HJJuU\\NVJd?jtE|ZebFGShzCOGEmd[N|heRIIlVjeBIW}^FeXt{dbu`@Yab@jGhX~[SZ]TMeDfQ^Na{AD[TDqsfqSBkVLucT_`[jlF}WPtb~@YYgzyPqGH]ucuw?CQyl^[hmkgdVmqJjT@yFEOfPXsfOWNrE|LpYDr[Iym{FKe[ZOjGNUlSiokW[FnZpVOlLrJGNF]dT]FVID}QSAdPWCnUAsf]|RZWfa^^WfmWbXEp\\aheMEKRDX]Rg}NYF]?\\IPNyt^gr?MEg[uTRZWv@jCUAeWHVvmB^_LPViSgVRph~^we_yJaIvySKiwX{gQMXZewV~A`dgipmLDfy@Cmy_T]mOUJ}Ur_w?vsVvx?spEFX}qFWxs|IzcsWnLKaoNRph_PXTMsWbLbDJVKKDT|fHu\\`t@[]cMQwutss|mUgW}@KCkJP^Am\\itCnZGfxPVHS\\NNzBaoDzMl{gIylfEB\\euCL{aF?M_FlPBnIUl~DftxXLlIuL?IuET^^FOkh`hm?PmuCMl{|cEt|b`aBiHXQLzHaSHFmYpBYc~U]XJFiohPQCFcfnMutlDgB}|Q|VOLL@~PwKKRMAXRXz|Eh]OduNOHtN?BmeVEYiRtnVog`ecm~dboMx[P]UsrqCK~SX^LYX|r^kCosiWBbOVA{byq`rnThNBqDgWlW`Hw}{LcXgjrGT~PeYW{QZjkiD[G}IGyEb^{OgsJXGqaJbNjYzibjNX^~t?[KGbCmtR?vQrJ?Qr_yB[^kYe^sgl[_@pYHD_XeXzMYuBujVddFSWAg_qpENyWdTQfUjEbnRrnmQLbTtCp{}bCJg\\EoXKGm_kMQ[McQRIMn\\cyV]WgNQokXkhgmxAgj~pCsDYVNJakQZQZqj\\FOSxqXtmpR`FpdKNXCOZ^|zTK`CB[BSuiYtls[V]RnXhOLU@rDvBd_o{?QgvDeKIdVD^M~XzTQtsmpsWDGE]cHs\\zSZmZWQx]cR@yBVoOT\\BdofVQ`Y}vn]~pkCKHHxCtV?G|rE|YVzFsARhP@kyasy`VBsPe}|TwM_MNfDowcTDE]qGLxr~[zcS`\\\\SxzD\\C|OueCdlp`eaoSnlR?tLPRTgnDvkqNFP\\sGblwJZgbEvktTTPJC^QjlmKmyVSTK?V{BzFGb@G{gJ\\dxwe|FA@\\je@DugWmz{FimRHL@qisHJ@ISvvMvycVzi|BACcfnVcbCEU|KWq\\heMW}eIzs\\mScfCdpRbJ\\s\\PAgTQwX[eyQe^bJOvlas\\`fykKilRyXbcPrDDJoonLu@KOqN`uSdq|rIx\\Ue@ctKUEHPgeOhpoUBWx\\}}qJyABV@SB@J~VNTmsn^T@Ja}LV_JxQ^JVJaF^Woex_rdcdmWdpTTHhpd?qz{cNXKP~g_^Af|R@@JW[H^uJsozoU|hYPKPANcM@cpptyP]JBe]qN{xM_Hf^\\gjbXMYYByTAS[NzTIOHTTSw@kJ\\iyhnbbBV]wbeyrk?~^yCKdcoJdOrk|K|Xo@nM@iomViE_^INuVTYFWcwvEU{KH|\\x@S`k^TiGkFAXh}XSOHkZ@m[CbuzpvTuSvWqJBLPv\\|Gabpyp_b_Ts~NEBSKLsEXZrkMd[xYS{\\@d[g~QU_ix`s[N@sSn]dzKYatd?CGy{Vd|lw\\\\MEEvoOejnYMUMhLJO`TrqGSA}cVfXK@d]@PIXAyBjy|xcEh~We`G|W[uMr\\Z\\Cub\\Hx?PtgXee[CzhOran~dSTAhpNU@\\?ZDnSXY_vTkxkbB]rjSicVP?W{TbbnK~ILOrEbUlkRyLcmSCElXyCD{xzQVRl]xR]cQ|@QDme|_`BWfvFwd`tbo}cIf[ftMCjpeatR?i|XhRbua_ZxN{bWCRqf[o^CPILra{kMvVTvPIu\\gAVBrH`uYelGPAiTvz@fP]dbnCKHY}Va|MYfQDrccHbTe]_tqV`KAu\\Tc|xIjiAwyQVxPpDYjT|GVxAImRlVOPDzwYanhka\\_\\{QGtS@YlAtz\\ettPkeFpVF|gRDR\\lsDth{@U@_p[T{Ef}j^XRbFHfm[?l~JA[_XF?gwEoV[ArpXxn~af_hCAsLPUe}YLEiKdQVA|f[[kSe|QupgpPELxPRoI~qgdi]MptMtvOflLWDLhSZbxRdE`I|yG{Wo\\sARcFhIIN|oxUkmuskWRXOEOx]{v[YLd`jGJB\\KtqrYFSshYH`l|[\\??i~g`Kg\\nAm^jBuUTwXZH\\kGmc]hPNRDnVy_t]cJYE`MWYxUyC\\NBex\\GLpwBbC]gcsg~fG_dLtf[HqlzQS\\{rIHG{BlGVYAn}}CNKTnkIM~pQzqMOd`oo[tS|PAKBad|WrTwgO||ERIoOmuu^PC`jsPOxhFhMhu|cFSkzPxEaOFhsZMjbQTCtjmksCeAGB|uRByFhhZyqVmVxClBhizyuCkd_ePGT}AU[s}ZZKn|JEUoNjX{mDGatEgwFT\\nOca~CQvfOKITyRMyE{}DkZL}YEtpM?DtooNRxEmwI[dw]ZdZhbHulbGWy^VW_UgF{LQwpv?|]}hQjWAISyZ`dKbLpqKeXwfhii@WyoNjnf{Ba|GX{CscwNaul?SwF{czDkkkVnHa]fP?|cfqxuhcJV_TQJoIEuWB|rTxpyTBRU\\qrfYrw{qAAm`SGrUwPRbPCN|QU{q\\jgBerSkZcWiJhzSj^DVB^BI[FpFHUYypdm[ozhkUCNIshoJ|dYXjtaLAfkel?i~bgIKX]RIq^ujPO}TX{?XjGbYhw?\\g|@b`NevYnnCKNLmVSEqxQQf@anCgme~xM?sZqlkkOicVKuFf_Ez?IHKvdxR{w|cAM@iqxavgTs\\Q{sQHchz}fDXKwrIiXFG`kMzQWJQFeinmneP`MwHlgwEbT}ak[mIkFYFYNx`@wFDIHNNDXW\\nwxCH\\pWRdtUeF\\Kgoq@zdWZW|DWhM\\RjbGQQg}OZfu`YOZ^tHIfGhIZCYBt|\\UMuvA]hGLWNUfeNLJ{OyXvnWKxDCkPGrE\\rEAVlfcBOYVlBpSeVae{cEn}M^hyIDSjNaqcYlvgw@MPdizLwqeOt}xQorraAERgY\\TIqxGTiv|dPSbTQH~@jSE~G|PZQimPhxklkj}cPYQnEkw@^dATc\\cHv{zV_WjUBO?I{~HcuUrfB^HygQs|BTsPWqUbPrStxZ_WjteZREZTZYnmmsXqcbuUAq]NWjgXRwLkO@QonyZLniKqv@lW_~AzhjDE}qCyP[cg|WKbXvSofI|SfIgUSTclSTSwM^~^s?ojcYwEj\\hM@ZGUCFDDtnydNsxpprHnS?LLLcDV]PtSf_p\\O{bzz@T|HbCkunIBAW|KEiNvV_yngZFeMRSYfEUsXoWl\\G|TIDnOtIxa@XuxG{jbQG{cLGdoTRlv|ioyDtHmMG{Bbpr^{zGM`@Kjtb}ocDgr@yYkdZQ\\mhqCrzRPUHkMIoXciNIwI|dIkAvDuPTexBjVDDbQZp~bDhNhX]LaIEXHlvyEG@|eNke[PkIJ`NnOMDkvVq?{@MFsbkP{sdXeaNVbv^RP`aVWkeiwdpXxe^bNsGpO]ZShIfGPewyzrkUuO~NVFc~AHDPyA@OH}t|PMLnnPB]]US@VBNxhIjcaIHM]]~p\\hIlAd}GFO\\\\JYf~LaIAKS]?MqwY~TMCbQ`E~wHJSy]]yTS@nKg{CX|BSQgBFRtzcrajVvtoljFJBgBq]SSYlCxOlDvvZktiT@UW|`gMnJ@_EikqzqNZ@q_Aom}t`{OdaXvw@xNQM|dZZSVfEJSXsW?KkbHy|ixHZZXsLL@x_}yXkGbt\\tCGEGSN]uVmivWeOcjE}dydM`kdrIJMdAHbm}SlAXBy?ecZEphZ}UsstoUE@ZIQ\\CfBnmViOnDKKl`zVrP}M{OR@B}GV[dHoBpz|nBNqPwqQZoMeOr\\k?[mZmCfjoCgiA}EWETjMCUXFQNu|L[p[s\\S]wthy\\sAx_\\[Ox{qu\\RUYoJplljZ?A@VYRfp`lw]q{_Ift~ALa|Vi?kPOzZEjq_QOFmHfHNHy\\gjvD[c~LsT_HMcEVIjbeqzNlQiknB[iJvhpGY_TThorbRO@}p[wixELAJgdro[oq^}OHidPFZy|Fh\\heQ_jfe^bIBz{vY`dDjh^KgQScEGvFzsXDQsFlFI`bF^ReG?WlF`YyAmkrGzv`nfaHdu`j{DJ@rIT{ttqRDTxP{{SZGPc~sx`HE~BMka@tYcs?SYtMztybXn@@IoLdGSVydr[dKhy^`uflaqauq\\QXJ`vx{WUveKD{C[guTpcEKPNUD^JvJBdqGnwGFm^FTiAHpGGDVywyBHlLepXutJg~FiMbsr?dlom}tnEIuRcKARTUIJJcGqE]Nvpw[|CSLc[E_vr`h\\DdKKJvipq}owGhY^lsy_`Fbz`xWutyiSfus[WzSsLJRTAt`a?XyFj\\B[fD_doqx[hMc@QuN{EXhFsRP]TLIwntorYt]zl_HhXv[t}GcLLqphv}gC\\lTYLJgW|PlWIncGchvRGC\\fob_JAvGUsS^}XAxcTNFbrdr?uZfshmwPtky?^ULWxbZl|PuLA^c?KlQiYiUxyBJPe_|JE]a}}BGEkKoDWkw?OUp^^bjc}\\@b[~u\\A[_{lQB~s`^W^a~mcfgGmM{MNKOR`PakOitjuI]BxwIM_GkCcJ^nFsiFg~]W~}n`wh`g]a[DVYAbcyqZzTntiUNuHHK{NMAMEm?SFqo_j^_LjrQIOwar_gsCtRJb|ydEXGayJ~zRh?JJPVs~][Ks~b^Rp`FjXNqPnBjLGvKiIxCxHhUe_NQHbVHBCVaKGbloHWS|cWr|]aRJHpoyDey^j[h{]nHcKpdi{eMhtkxvkftV[cs?}qsTCRKCfCEtwv\\SMExoGznQP_DbKLhKTO{a^[^FUn{{wcN`XYZ[v}xAu`_s{WXYp{}uKgPCEWNfBFbuBfGrkc\\k@XFMO[ywBowMCppxfPujy{]FBjYB`w}Ob}Uo^oBw~o^~b~w?xoB~rcRob_F??~~?]?^w?WR|c?F?Bo?Fw?N~}^o?^K~O]F{?^wFw?^~}Nf|bK????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

py3 with this patch but no canonical labeling

'~?Ex???C^ckeoLON?T_P~FHYklbWZBU[@zE@VT?bp~FJclUZJWuZBWYlXoFbuKAlVT?{Pw~`ZqxJRYrXZ@nXkLa[tYr_pfbuKDTUji_]NC]NFUj]VJcZLjLeqEr]rXkCy[tYlOpwrpw{AjTTitWFaNwb}GyvclxJ]PlXZUUtcLzB]ovkCxjMYregWruK|bN?iiyimij?fTUqsvwpwuswvTU}@nolfWutS{Rk\\TkZUailLw~CxkBWvT{J[[wAvFwZRihkAilLw~CxlFZEyn`Zbf[fa\\bilbYuqRijXYZ{W|_Uw~BY\\TLlOL}DkzEuif_WuswvTU}DWBWvT{J[[yNwfTUqsvwp{dhZb{LhtSvXZELlMLtTnbWZ@nolfWutTjMAilLw~Cxk]p_{Rk\\TkZUiygAvFwZRihmNF{E~Au\\bZT]VHYfTUqsvwpuZJWijR]NpMZZL`kWuswvTU}EjU[Fa\\bilbYs{]p_ZEyn`ZbfIt\\S?vwUrkZYjwbp~DTYZp}HrXZqxJULlMLtTn`lXkl`kZi}DmM[ZuZBW{Rk\\TkZUrejU[AvFwZRihnE]NWoRijXYZ{WyilVT?{Rk\\TkZU}NC]NFUw~BY\\TLjTnJdqLb\\VolprerYrXk`nolfWutSuZuZL_fTUqsvwprhrTitBEufEyivpbpfbpwDTYZp}HrYjTTitWELlMLtTnbpF{P~C^pMptUplYlxJ]QvcijR]NpMZLjJYqukavFwZRihkvkLzB]oLb\\VolprhrU[tfLOfTUqsvwpwruK|bN?L}DkzEuitT\\TVTT_CstRBI[BUIiRQq@rdQSe[WPhKxHWxDTGMobVDOeedX?|Ha[ci`L`dBV@MgFWfDSfHQB_eLRTHUDTQqF?zEQ?ugRdHkJaRcT@yPpaASwocplPLQM@xJDTc?RWXOtoRiIiUOwFWqW{hp`HbYaYRcT@yPpbqBY`MSeom?zCwicxITcobVDOeedKTSedcBfL_HhieESwEsb_]QpTXEgTHQXp`Ec{_]cpMQTPwB_eLRTHUCxHWxDTGMj?iQcrbALHq[agNQMKW~`L`dBV@MgpTQYUOM[xJR_eLRTHUEc[BqUIjHXZChp`HbYaWxHWxDTGNkL_ZSHqcuDpcBseHqQiYr_HhieESwEiiUOwFWqRuKECYwiCssgMpMIhMQcji_WPjagRRQiPoNHWikc]Nw[CpiYhIox?|Ha[cimVHYiQcrbALHkTSedcBfJLdkBY`MSeomDTJG[BkXMrWZAZBIEmA\\OxHWxDTGMtYr_dMKHKZSR@uHpTHqSbpzE?eeiWXR_ZHqI_|GwpTiygChp`HbYaZGFhKRcdTwbp~ECYwiCsshTQqF?zEQlx[dgeeiWXR_Y[ck[aicFZUZJW[CpiYhIoq[agNQMKR]rWZDQSe[WPhKMpMIhMQdMYlXoHkKgYwHtIPoNHWikeK{]p_EtA[hL`[KTSedcBfIilVT?[CpiYhIo`uHpTHqSnFaNFbbY`MSeomIPoNHWikatZqx[aZBIEmA\\QRcT@yPpauZUZLcHhieESwEx?|Ha[cibXnXkuASwocplPKpTQYUOM[fRejTiECYwiCssgxHWxDTGNbpfbpwDQSe[WPhLTQqF?zERTiitYk?ZSHqcuDo[ck[aicF{P~C^pFHhieESwE`uHpTHqSdnHZqU{chp`HbYaXTQqF?zEQukljJYqTHQXp`EcyPoNHWik`nWZuE|_obVDOeedQ[agNQMKXrU[tfLO[CpiYhIokTSedcBfKXzE]pf_HkKgYwHtK_]cpMQTTTVTTtTWFJWtTfg|eRHcqXKeRXxFeimNkuIrteNqYqXKeRHcqUmqM]k{dXi]uPt\\fdHcqXKeRHxLT]qNXNAmrFY{l`yRHcqXKeQ]T{gzVXX@yMjxUUmqRHcqXKeRkNUT^HjFANqkzEhxVHcqXKeRHTpulfW]x?kl]PzWjbqXKeRHcqW|fXqNIugEpU]kp}RTapWkUJDbqYi|c]q]bizK\\jquFeJDapWkUMo|XT{ek^cNPt^IqtuKUJDapWkUmqM]k{d\\ckl]PzWjbkUJDapWkT[\\jXuFmUoP}TfWtNIuJDapWkUHxVqbl\\ddiFJWtTfg|dapWkUJDbFkzMPxUtN?Yflc\\VXxKUJDapWkZNG{tTp|ak@i]uPt\\fdQhSiTIdQNI}S\\jkkp~@yMjxUUmqdQhSiTIdFkzMPxUtxJUpU]kp}RUdQhSiTIcjblZMo|qklaNqkzEhxVQhSiTIdQxLT]qNXNZBWTuWzVdkNSiTIdQhSjNG{tTp|bU[DdjqNZD[]dQhSiTIctuPrtfcjNWo[lbTU]buYTIdQhSiUo|XT{ek\\VT?TuWzVdkNFB`ow[MFEmqM]k{d[]Nwkl]PzWjbfB`ow[MFBqndFYzJNJclP}TfWtNIr`ow[MFBeo|XT{ek]rXZBS|kbizNGw[MFB`oxFkzMPxUtuZBWxZEik|FkfB`ow[MFD[\\jXuFmRTjMBWjNUW~Hi[MFB`ow[k{brTVFuFbuK@yMjxUUmow[MFB`oxqYi|c]q]Tiyg@yMjxUUmrHcqXKeRGjblZMo|q{Pw~aNqkzEhxVcqXKeRHck{brTVFuJ]VHYTuWzVdkNXKeRHcqXG|fXqNIujYrXZFJWtTfg|fHcqXKeRGtuPrtfcjLzL`kUUnG|kTp{eRHcqXKfHijuPzHy[tYr_Yflc\\VXxXKeRHcqXL`yqjxLW}K{]p_uIrteNqYxKeRHcqXBqndFYzJLTUji_P}TfWtNItQhSiTIdS]rkxFdZVpwbpw~JWtTfg|dSiTIdQhTqYi|c]q]Uj]VJckl]PzWjbidQhSiTIjNG{tTp|bXlXkuRWjNUW~HiiTIdQhSiuFjInctber]rXkBS|kbizNHSiTIdQhStuPrtfcjfRejTi@yMjxUUmpSiTIdQhS]T{gzVXXpwrpw{@VXbl]Uo{iTIdQhSiTpulfW]xTYilUj?kl]PzWjb`ow[MFB`|`yqjxLW~aNwb}GzS|kbizNGMFB`ow[MjblZMo|qU{dnHZq[lbTU]buOw[MFB`oxxVqbl\\ddlXZUUtcNPt^Iqtu@ow[MFB`zNG{tTp|`nWZuE|_uIrteNqY`ow[MFB`w|fXqNIukxjMYregIzK\\jquF_w[MFB`o~HijuPzHzE]pfkXwC^dXuLRqkMFB`ow[MtuPrtfcjiiyimij?RB[KigwHbQ[ih`[HerXkuZLerDTHhX?xqSR[WSougRiWSr_ZIZLerXkuZFHJFGih@ouTSHmCuET`HmIaWYuZLerXkuq@yRCxHTEEgL[QaYYge[Q`hNAuZLerXkuBkRaiRch?f`RT@khp`[T@iYSRZLerXkuZIiUOwFWqOiMHQWf`Em@iWfIotErXkuZLesfGiBsbbCB`KREwYchLIEwQ\\PouZLerXkuhF?{daiq?BXTOewRWQ\\RAe[BXSy\\MfRhsxTQqF?zERFHwStOZI[TCraSLHwXsy\\MfRhsfGiBsbbFcdCvEDKLiWVDOYedCxsy\\MfRho\\a[TQ[dIqTFChKRobSsgZ`HtFCy\\MfRhsxaicsk_[xkEEgL[QaYXoLRCxUEhMfRhsy\\MhF?{daiqLO[HaWvBSdBQ[ih`[Hhsy\\MfRhuONQWfHIg{@KLoqib_fIocvDPKLfRhsy\\MfFHJFGih@tWEEgL[QaYYT`HmIaWYlUjTitYlcxDO]c[Wp~B`KREwYcjAwiBSsgelUjTitYlWihLJGFM[digwdHa]CYRiWSr_ZIUjTitYlUsb_]QpTXJJWEqi`Loeom@iWfIotDitYlUjThqQpqIiO^WZAWZ`dTF@Mge[Q`hNAlUjTitYlq@yRCxHTLXoQaZbAeEtCsgZ`HtFAtYlUjTitTQqF?zEQ]p_HwStOZI[BQ[ih`[HditYlUjTg\\a[TQ[dHVT?dCvEDKLiTCraSLHw[]NFbpw{\\GwFckTUQNF{WY_tpIHhcsgZ`HtFENFbpw{]NGFhKRcdTqxJPNAeiBXR`oLRCxUEhbpw{]NFbWihLJGFMUZJW[HaWvBSdQkHLpSRB[]NFbpw{YidcM@uKfXkLagwdHa]CYLHqieDoepw{]NFbpfHJFGih@ujU[AWZ`dTF@KfSohf?uTbpw{]NFbBkRaiRchFbuK?uTSHmCuFAwiBSsgfbpw{]NFbcxDO]c[Wit\\SAgwdHa]CZ`[T@iYSRLerXkuZLx?|Ha[cinC]NwRB[KigwHm@iWfIotBXkuZLerYidcM@uKdZqxJR`KREwYcige[Q`hNAZLerXkuZMQUMPTQBljLdkQaZbAeEt@hMTSomCpkuZLerXmRcT@yPpaZuZBWEqi`LoeohhOvARiMBXkuZLerW\\a[TQ[dI[tYr_HwStOZI[QkHLpSRBRXkuZLer\\GwFckTURE]NWoWY_tpIHha\\RAe[BXPkuZLerXlaicsk_[xTTiygB`KREwYchoLRCxUEhTitYlUjTBkRaiRch]NC]NFEqi`LoeobQ[ih`[HilUjTitYlGwFckTUPYlx[mPKLoqib_eedB[HMgwitYlUjTiq[agNQMKUrYrXk`NAeiBXR_fSohf?uTTitYlUjTq@yRCxHTEr]rXkCgewoh`lQT`HmIaWZTitYlUjTWihLJGFMRhrTitBBSEmHPLL`[T@iYSRitYlUjTifHJFGih@{]K{]N?iMHQWf`EtCraSLHwYlUjTitYiidcM@uKejTTitW@NAeiBXR`LIEwQ\\Ppw{]NFbpwMQUMPTQB}G~aNwbtFChKRobXUCewiH`nbpw{]NF_MpMIhMQclxJ]Qvcot@jaSRRBQ[ih`[HnFbpw{]NAidcM@uKdlXZUUtcRB[KigwHwVDOYedC~Fbpw{]NDGwFckTUOvkLzB]oMCpKZ`iQa\\RAe[BXVbpw{]NFaRcT@yPpbMYrekxi?uTSHmCuEge[Q`hNBw{]NFbpwWihLJGFMWruK|bN?dCvEDKLiM@iWfIotNFbpw{]NEONQWfHIiijiiyik@kuZLerXlXxFeimNkxZEik|FkcstRBI[BXtTklL}KZXkuZLerXjkbfjNHVkTfjK^ctiQcrbALHwuswvTU}BXkuZLerZctTzG|c{tNZGymrqobVDOeedE~Au\\bZTPkuZLerXk]T{gzVXXTuWzVdkNHkKgYwHtNCzFTZEtgZLerXkuZZBtdVqYprs\\Vqkl\\b_eLRTHUEilLw~CxkBXkuZLerXVFYu\\`zdFxU\\bS{jEtA[hL`[Lb\\Volpr_LerXkuZLg|fXqNIuldjqNZD[]SwocplPKlp}EsyiZ?fRhsy\\Mf[einXFkflak|Xb{eiZBIEmA\\QilLw~CxlFfRhsy\\MfZBtdVqYpt\\eMtxZBshp`HbYaXkZi}DmM\\qRhsy\\MfRemqM]k{dXyMjxUUmoZSHqcuDpwfWyjWulkcy\\MfRhsxVFYu\\`zdXY{bupVFobVDOeedRijXYZ{W|_fRhsy\\MfFd^IMtuUW~IrkYfdXLLSoqf?tZb{LhtSutA\\MfRhsy\\FkzMPxUtxZEik|FktHQXp`Ecr^`ZMplihwCy\\MfRhsyrqNLT[^WtNZGymrq[CpiYhIowuswvTU}DWAtYlUjTis{jxPumqqtNZGymrqiQcrbALHlb\\Volprg~`YlUjTitZFkzMPxUtNPt^IqtuHkKgYwHtHtTklL}K^HYUjTitYlUiwzUrkN[lak|Xb{ej_eLRTHUDZb{LhtSvXZAtYlUjTivctTzG|c|FxU\\bS{jdMKHKZSRWuswvTU}L`kJTitYlUjZNG{tTp|amrFY{l`wZSHqcuDoZ{JXuLlTYr_UjTitYlUl\\c[|XxIzJVc]uIwxLLSoqf?uilLw~Cxk]p_UjTitYlUzBtdVqYp}UpijNPzMCYwiCssjpMptUplYji_W{]NFbpwumqM]k{dYmrFY{l`zAL[TAYYSlp}EsyiZbp~ENFbpw{]K{jxPumqrXY{bupVF[CpiYhIoe~Au\\bZT]VHYpw{]NFbpzBtdVqYpw~IrkYfd\\QSe[WPhM\\TZJR^bFXklbFbpw{]NFFkzMPxUtYflc\\VXxBY`MSeomIisvb{ReurWZENFbpw{]LVFYu\\`zdquLTXyNXRWXOtoRiWuswvTU}EjU[ENFbpw{]MrqNLT[^XkTfjK^ctdMKHKZSR]HuMiuLjRpzEBFbpw{]NFqYi|c]q]NPt^IqtuCstRBI[BUpmjwUwxqlVT?LerXkuZLiwzUrkN[bs\\Vqkl\\chp`HbYaWvwUrkZYjwbp~@kuZLerXmrqNLT[^XFxU\\bS{jobVDOeedTThnFwfLdnJclErXkuZLew|fXqNIuimrFY{l`weeiWXR_ZbZRb\\TZwZUZJWLerXkuZLl\\c[|XxI}UpijNPzJ_eLRTHUDkZi}DmM[ZuZBWLerXkuZL{einXFkfjJVc]uIw|QSe[WPhNpMptUplZMYlXoErXkuZLe|`yqjxLWzS|kbizNHL`dBV@Mglp}EsyiZpfbuK@kuZLerXk{jxPumqrkTfjK^ctEtA[hL`[RijXYZ{WyilVT?itYlUjTipzMrc]TlW~IrkYfdZ_eLRTHUFpMptUplZw{Pw{]jTitYlUjqYi|c]q]xZEik|FkbY`MSeomDmNoufTRYtZqx[dUjTitYlUrqNLT[^XXY{bupVFRWXOtoRiLb\\VolprerYrXkdUjTitYlVW]ki}RUNkTfjK^ctHhieESwEe~Au\\bZTRXnXkuAjTitYlUituPrtfcjYflc\\VXxQfECeLiHhtTklL}K[y[tYlOitYlUjTifd^IMtuURs\\Vqkl\\eCYwiCssjEufEyivpbpfbpwDUjTitYlTVFYu\\`zcjkpunJW]iQcrbALHtThnFwfLilTUjT_]NFbpw{]L`yqjxLW|djqNZD[[ZSHqcuDpbZRb\\TZw{P~C^pF{]NFbpw{IwzUrkN[ehzXFTu]PLLSoqf?vpMptUplYlxJ]Qvc{]NFbpw{Fd^IMtuU]UpijNPzKhp`HbYaYilLw~CxkukljJYq]NFbpw{]JNG{tTp|`yMjxUUmqhIRMKGselp}EsyiZLzB]ovkFbpw{]NFaNXu[bqljkTfjK^ctobVDOeedLb\\VolprhrU[tfLO{]NFbpw{[einXFkfd\\eMtxZBr_eLRTHUE\\TZJR^bFbNWruK{Bpw{]NFbotuPrtfcjb{jMpi]ThkKgYwHtB^`ZMplilTVTTtTW@pbccs_yijbUeuva\\~?^oF{??EcxTRAwRLerXkuZLcovBIiMAW[wiWxISdlwLtXqvE?~_?F~}?HtKIXoLdLerXkuZLhPLp`RBY`TcMSeKcNwirkYtkZ?^~~{???QkHLpSRBUrXkuZLeouTSHmCuCh@xHpTcWrdlTlbL}Nw?@~?^oDPKwdBQ]DkuZLerXl`iBVCgeeCdSFqFELHYup}B[yi???N~{@~omI_tLIHlerXkuZLa]DLSEqf?KXLHSFMXB[zoliwuo?@~??N~|oLRCxUEguZLerXkuiMHQWf`E_qSeG]QiMWrZY\\wij^~{????NyYSLocyb`kuZLerXkwRCpmEhI?WqYQgM[qWrZY\\wij^wB}?~_?@Mh`RM@ki\\MfRhsy[LdTAZ`L`bfEMQRQBinDU\\bUlbWB}??^~wAge[Q`hNBMfRhsy\\MHwStOZI[[eQcpBqTPqjbUeuva[?~~~w???omI_tLIHrhsy\\MfRhPLp`RBYdcBfDRFHQcjUuNoZfT^w?@~?^oAYSLocyba\\MfRhsy\\S[QcpNALu@TcMSeKcMu{EykxZb???F~}?~m@iWfIotHsy\\MfRhuEgL[QaYXiCdSFqFELI[lilkXno??^o?B~~EcxTRAwRRhsy\\MfRfAWeLotHPwDGNHMIkbCvM{JYmLl~~_???@~dWQZageErhsy\\MfRcovBIiMAYkBHQW`xIgwlZW~@m\\T~_NwB}??QkHLpSRBTitYlUjTmEgL[QaYYNwTXBdHbHBexv`ZTpl_F{??~~oEDpSEhhPLYlUjTitYwRCpmEhIxJPpbccs_yi[lilkXno?~~~w???HtKIXoLdJTitYlUjYbaSeHwPldkQTO^G[WsimLYZZ]Hv{??~_Nw@oLRCxUEglUjTitYlEqi`LoeozBWBfDRFHQcwrZY\\wijO??@~~_N|PKwdBQ]DYlUjTitYeEwXTPoRYr_h@xHpTcW}IkzElZEo?B}??^~yYSLocyb`YlUjTitZIHmKIWZSNWoKXLHSFMXEv_vTfJ[^~}????F{YRdTKJ`KlUjTitYlHwStOZI[IygCdSFqFELGvM{JYmLl~?^oF{??iHfCgYRow{]NFbpwxPLp`RBYc]NwWqYQgM[qT[Ysuu{R_F{??~~oAYSLocybbFbpw{]NF`iBVCgeex[dicFcfDUPbbLlhvail?^~~{???M@iWfIotK]NFbpw{XNAeiBXRarXZ@pbccs_yhlwLtXqvF~??NwB}?dWQZageEw{]NFbpwvAWeLotHUrWZEQcpBqTPrpTfWtjWu???N~{@~EcxTRAwRW{]NFbpwybaSeHwPjTjM@TcMSeKcMlZW~@m\\T??Nw?@~~cyeDKwEqk]NFbpw{YWZ`dTF@K{]p_BfDRFHQcrdlTlbL}N~{????N}DpSEhhPNFbpw{]NELdTAZ`L`TiygDGNHMIkbDlwLtXqvF~?^oF{??omI_tLIHerXkuZLeybaSeHwPnaNF{XIRCNHTFHquiupe~?B}??^~w@oLRCxUEgZLerXkuZRB[KigwHj]VHYWqYQgM[qJUuNoZfTOF~~~???DPKwdBQ]CuZLerXkuwRCpmEhIZUZJWTXBdHbHBwrZY\\wij^w?@~?^o?sfIiWVAWuZLerXkvIHmKIWZSLzL`kFEMQRQBib[zoliwuo???~~oF|LIEwQ\\PoZLerXkuZEqi`LoeorejU[?[wiWxISejbUeuva[??^o?B~~dWQZageEerXkuZLeq]DLSEqfEK{]p_ci_}Owph]IkzElZE~~{????NxMh`RM@kguZLerXkv`iBVCgeeiit\\S?M[TK[dIRwirkYtkZ~_NwB}??M@iWfIotIlUjTitYj`KREwYcjpwbpw|GNHMIkbDYup}B[yi?~_?F~}?EcxTRAwRTYlUjTitPkigR[HkItZqx[cdSFqFELHlwLtXqvE?~~~w???RQ`mCfS[TYlUjTitSovBIiMAZXlXkuRHQW`xIgwZf]DlVEu~_?F{@~?CyeDKwEqilUjTitYhNAeiBXR_uZuZL_WqYQgM[qRdlTlbL}???@~~_N{jAR[TCoujTitYlUjIHmKIWZSfRejTi@pbccs_yjEZZRnDTY??^o?B~~omI_tLIHtYlUjTit[LOYwdCsuNE]NF_Ik`qcpc`ymLYZZ]Hv~}????F}ge[Q`hNBTitYlUjTiMHQWf`EtYilUj?TXBdHbHBrdlTlbL}NwB}?~_?AYSLocybbpw{]NFboRohi_uSw{P~C^pFci_}OwphWrZY\\wijOF{??~~oCjAR[TCovpw{]NFbpS[QcpNALU{dnHZq@rahbchQR[zoliwuoB~~~_???YRdTKJ`Lw{]NFbpwot@jaSRRLjJYqukbERQT@reRpTfWtjWv~??NwB}?omI_tLIH}NFbpw{]CovBIiMAXnWZuE|_h@xHpTcWt[Ysuu{R_??@~~_NxMh`RM@kjpw{]NFbowRCpmEhIfLXrU[tBHQW`xIgwu{EykxZb??Nw?@~~tCraSLHw^Fbpw{]N?uTSHmCuFE]pfkXw@pbccs_yhYup}B[yj~~_???@~[BSpMT`i]NFbpw{]HPLp`RBYdTVTTtTW?B}?~_N~{wpqQYO\\SiMSkccMpk{brTVFu[lbTU]buXKeRHcqXKyiuUe~EN}?~~o?B}FMIeMQdHc`{ahbQML\\c[|XxI|ak|Xb{ekeRHcqXKfEufEyivo~_??B~~~ik`qcpc`oyha[hQ[fHijuPzHxi]uPt\\fdHcqXKeRHL}DkzEui_B~~?^oF}cFcfDUPaphIhHrGFNI}S\\jkkizK\\jquFhKeRHcqXNa\\bilbYs^~~{??~_HIgNcMKYTIQ[BxEIjW]ki}RUM]bi}TdjkcqXKeRHctThnFwfL_~~oF~}??KXLHSFMXKbCNQTFHImMtkzBvINqkzEhxVHcqXKeRHZEyn`Zbf???N~~~~?XIRCNHTFBeQQpBiiS]rkxFdZUqtxFlamNHcqXKeRHUw~BY\\TL_?NwB}?~~uKeciBfK`rHHW`tTJctTzG|c|kTfjK^ctWkUJDapWtThnFwfLg~{@~~_?F{wpqQYO\\SFTKRdIRcuFjInctbizK\\jquFeJDapWkUJWvT{J[[zc~_??B~~~xIRCNHTFDPqdcc`uJVXFNU]Qk|FT{jJVWpWkUJDap{Rk\\TkZUuO@~~_NwB}FMIeMQdHhQR_^GpTIwzUrkN[jJVc]uIwzDapWkUJE\\TZJR^bFkF~~~??Nw@TcMSeKcNHBxDREc[NI}S\\jkkp}TfWtNIuJDapWkUIvFwZRihliF~}?~~o?AQiBxBbEcphIhHrGFbu\\fG{jY{lbTU]buUJDapWkUHnolfWutS{???~~~~{@QBqRajGpqKO|HS[cu]PxijbzEhzXFTu]RDapWkUJFEufEyivoj??^oF{@~~xIRCNHTFIScwFqKTPxVqbl\\ddi]uPt\\fdQhSiTIdQZEyn`ZbfP~F{@~~_?F|TcMSeKcNcW`yQgxHbu\\fG{jYfgyndXYzITIdQhSiSyiuUe~ENcl^o??@~~~rbFHHh@tREcicfK_\\VFYu\\`zdkTfjK^cthSiTIdQhJ[^`lMiezJW?^~wB}?~qTO^G[WsdPqdcc`uNHijuPzHyNqkzEhxVQhSiTIdQplhpmil{ZBW~~~w?@~?@rahbchQReQQpBiiTfc]Yiw}pVXbl]Uo|QhSiTIdQL}DkzEuilXo^~wB~~??IO]Q[TXEG\\SpMShMPjkbfjNHVXY{bupVFhSiTIdQhTThnFwfLbuK??@~~~~w@bHhI_xrHHBxDREc[uFjInctb{lbTU]buYTIdQhSiVa\\bilbYtVT??^oF{@~~qTO^G[WskbCNQTFHJVXFNU]QlVXbl]Uo{[MFB`ow[Uw~BY\\TLpw~b}?~~o?B}pcsdO[xcTFIUQQFWfd^IMtuUZJVc]uIwxow[MFB`ovwUrkZYjqxJV{???^~~}cFcfDUPa[qQUG\\TQuFjInctbp}TfWtNIr`ow[MFBcyiuUe~EMrXZ?B~~?^oF{wpqQYO\\THBxDREc[bu\\fG{jYlRuqMjk{b`ow[MFBdTYZp}HrZXkLb~~~_?F{@chKO{dS[BieHqdHqIwzUrkN[mUpijNPzHow[MFB`rEufEyivotYr_~~oF~}??Ik`qcpc`yScwFqKTTfc]Yiw}rWjNUW~Hi[MFB`ow[{Rk\\TkZUfbuK??@~~~~w?M[TK[dIQphIhHrGFxLT]qNXNFgyndXYzB`ow[MFBbWvT{J[[xUji_?NwB}?~~yO]Q[TXEKcNcTKYPpVFYu\\`zc]bi}TdjkqXKeRHcqE~Au\\bZT^C]Nw~_N~{??~xIRCNHTFELHTHMX?|fc]Yiw}qNqkzEhxVcqXKeRHcijR]NpMZJ]VHY~_??B~~~kXLHSFMXIScwFqKTS]rkxFdZTVXbl]Uo|cqXKeRHcplhpmil{LjLdk?N~{@~?^tUOxQWqOxrHHW`tTHjkbfjNHVquLTXyNXqXKeRHcqLb\\Volprb]rWZF~~~??Nw?wpqQYO\\TcW`yQgxHxLT]qNXNUUnG|kTp{eRHcqXKfa\\bilbYu[tYr_~~oF~}??@rahbchQTPqdcc`uMo|XT{ek\\i]uPt\\fdcqXKeRHcUw~BY\\TLwrpzE???~~~~{@HT@{`pbQBieHqdHqFd^IMtuU\\ak|Xb{emRHcqXKeQ\\TZJR^bFTTiyg?B}?~_N~{M[TK[dIQFTKRdIRcbu\\fG{jYp}TfWtNItQhSiTIdVa\\bilbYvpwbpw~{@~~_?F}cFcfDUPbQcf?}PaixLT]qNXN[lbTU]buTQhSiTIdQvFwZRihlYlx[mR}???N~~~HT@{`pbQc`{ahbQMU]PxijbzJJVc]uIwyhSiTIdQhkZi}DmM[uZUZLc?^~wB}?~xIRCNHTFKbCNQTFHMo|XT{ek^WjNUW~HiiTIdQhSiL}DkzEuier]rXkF~~~??Nw@bHhI_xrGphIhHrGFYzGxyrqTlRuqMjk{dQhSiTIdSyiuUe~EM\\MYlUg^~wB~~??BbFHHh@tPrHHW`tTG{jxPumqq]bi}TdjkTIdQhSiTWuswvTU}K]K{]N???N~~~~?Ik`qcpc`tPqdcc`uImMtkzBvHVXbl]Uo{iTIdQhSiijR]NpMZTYilUj??^oF{@~~ik`qcpc`uLHTHMX?}o|XT{ek]qtxFlamMFB`ow[MFplhpmil{]G~aNwb~oF~}??^xIgNcMKYPrHHW`tTHVFYu\\`zctNZGymrqB`ow[MFB}HuMiuLjTnHZqU{f{???^~~{M[TK[dIRcW`yQgxHNI}S\\jkk{lbTU]buOw[MFB`o|TYZp}HrXlXZUUtc?^~wB}?~kXLHSFMX?yha[hQ[dfc]Yiw}o|FT{jJVWFB`ow[MFUw~BY\\TLe|`nWZuB~~~_?F{@QBqRajGpTFIUQQFWpzMrc]Tl\\ak|Xb{eg[MFB`ow\\kZi}DmM\\MYrekxiF~}?~~o?BHQW`xIgxHBxDREc[xLT]qNXNIzK\\jquF_w[MFB`o{yiuUe~ENE]pfkXw??@~~~~w?wpqQYO\\TQcf?}PaiYzGxyrqTp}TfWtNIow[MFB`oxnolfWutUijiiyik@S[hXHG\\a?~_NwB~~prbZXZwilerXkuZLcovBIiMAWsfIiWVAZXXTfek^cpTQYUOM[c`{ahbQM^oF~}??^~EMjMLjUrXkuZLerYSR[WSougRiWSr_ZITlZK[|quFHJFGih@o\\SpMShMR}???N~~~TLwtkxlwZLerXkuZBXTOewRWXUCewiH`hzdFTzJJVGFhKRcdSKYQiQ[q@oF~}?~_NyvouptR[xkuZLerXl`iBVCgeeiHfCgYRouRrVdFuIozCwicxIOhQR_^GpT^~~{??~_EtVoZprdjXkuZLerWf`RT@khp`[T@iYSRbzMTdUtNIiUOwFWqOqKO|HS[c~~wB~~??HrXZT{WrZXkuZLerYgwdHa]CYwEha[jBSxI|bUq]bq[agNQMKOFKcdaFTS_?B~~~~o@lZM{LimLkuZLerXkwRCpmEhIRQ`mCfS[LWxzXqTuYPoNHWik_@rHHW`tTG@~?^oF~~MZJYnbEZfRhsy\\MfBXTOewRWQ\\RAe[BXTc{txP|alTQqF?zERFBieHqdHq^oF~}??^{[wuuU}Iky\\MfRhswf`RT@khpSRMHOsf`Yprurcjkq[agNQMK]PS[hXHG\\b~???F~~~LjXv`lTprhsy\\MfRhPLp`RBYeDpSEhhPNcjuLZHyMFWfDSfHQkdIQ[BxEIg@~~_NwB~wptXplYufRhsy\\MfTFChKRobSsgZ`HtF@zdFTzJJTaicsk_[xkCcNcTKYPr~~~_?F{@TLwtkxlwfRhsy\\MfWY_tpIHhf?tKRdWYeqqjNLW~Ic[BqUIjGt@bQTQReON~~_N~{??ZT^@nFMUrhsy\\MfRfAWeLotHOsfIiWVAXUtkprvJXcBseHqQiN?qKO|HS[c_?F~~~~_Dn`lbiexsy\\MfRhsxKLoqib_fIocvDPKLbzMTdUtNFHJFGih@tWDIQ[BxEIg@~?^oF~}ZUrnBYjbUjTitYlUwY_tpIHhhUCewiH`iljXbfmUqRcT@yPpbF{XEG]ciMQ^wB~~??N|SvbUrev`YlUjTitYwRCpmEhIomI_tLIHuRrVdFuIuIiRQq@rfHYWsdScxcB~o??@~~~{[wuuU}IitYlUjTiugwdHa]CYRiWSr_ZIbzMTdUtNSb_]QpTXJJWTFIUQQFW_N~{@~?^utVoZprditYlUjTisZIiCvAZAwEha[jBSYprurcjkfHJFGih@|`kFKcdaFTSn~~}??^oFbFTfEtjXYlUjTitYeEwXTPoRiHfCgYRo{d]pjXNP{_]cpMQTRU[?\\SpMShMR~~?^~w??l{Lk\\SvMUjTitYlUqaZbAeEtCsgZ`HtFEqqjNLW~HTQqF?zEQ]p_c`{ahbQM??F~~~~_HrXZT{WrYtYlUjTisf`RT@khoLHqieDoeN[gynXXY`uHpTHqSd\\SBGpBsdPqQ?~_NwB~~ZT^@nFMUw{]NFbpwxPLp`RBYdPKwdBQ]C|qbi|ddjQM@xJDTcbp~AgxQqQOzF}?~~o?B~MZJYnbEZpw{]NFbpwY_tpIHhcsgZ`HtFC^XqkiuhzGFhKRcdTqxJPrHHW`tTJ}???N~~}l{Lk\\SvMpw{]NFbpc{IYgLdMF?tKRdWYaljXbfmUpaicsk_[xXklaQFqIeLGw?~~oF{@~prbZXZwiw{]NFbpwvAWeLotHSjAR[TCovcjuLZHyMihXB_\\bHuZBWBieHqdHq^~~{??~_BYu\\wZT[]NFbpw{]MgwdHa]CYLHqieDoekfenINkTfHJFGih@ujU[DIQ[BxEIj~~?^~w?@TLwtkxlwpw{]NFbph`mETS[Cq\\RAe[BXRUM]u[d\\cMpMIhMQc]NWoKYQiQ[q@o?B~~~~oFbFTfEtjZFbpw{]NELdTAZ`L`omI_tLIHzJIk{tb{hMPSFhFEIlVT?c`{ahbQM?NwB}?~~tn`lbiexpkuZLerXmgwdHa]CZ`[T@iYSRYprurcjkx?|Ha[cinC]NwWsdScxcB~oF~}??^rYu\\wZT[XkuZLerXlKLoqib_ewEha[jBSN[gynXXYiiUOwFWqTnJclShHoNcWinw???~~~{xkli}KXkuZLerXkuwRCpmEhIiHfCgYRozJIk{tb{bcdbcTS_zYrXZ@rHHW`tTG@~~_NwB~TLwtkxlwLerXkuZLqaZbAeEt@hMTSomCs^XqkiuhyRcT@yPpaZuZBWqKO|HS[c~~~{??~_K[wuuU}IhkuZLerXkZIiCvAZAedB[HMgwTlZK[|qu@uHpTHqShrTjM@S[hXHG\\b~~_N~{??{WykwulZErXkuZLeq]DLSEqfCjAR[TCouq]Y{g}pVQM@xJDTcpfbuK?\\SpMShMO??~~~~{?ui}B]M[lLerXkuZLwY_tpIHha\\RAe[BXVHVkYuRs\\aicsk_[xTTiyg?\\SpMShMO@~?^oF~~wptXplYuitYlUjTimCpKZ`iQf?tKRdWYc^XqkiuhwMpMIhMQdw{Pw{]dHM@{bDT~?^~w?@~U}EuMiZfTYlUjTitPkigR[HkGsfIiWVAZcjuLZHyNQM@xJDTcUj]VJcc`{ahbQM^o??@~~~utVoZprdlUjTitYlTKLoqib_eedB[HMgwkfenINkTq[agNQMKUrYrXkePaFhIbcc@~~_NwB}ZUrnBYjbitYlUjTic{IYgLdMA\\RAe[BXUqqjNLW~JGFhKRcdSZLzLeoKYQiQ[q@~~~}??^oCxkli}KXmjTitYlUjIHmKIWZSdWQZageElWxzXqTuUIiRQq@rcy[tYlOMXHJCMih^~wB~~??K[wuuU}IlUjTitYlVBSEmHPLL`[T@iYSRN[gynXXYfHJFGih@{]K{]N?TFIUQQFW_?F~~~~_IhnElfLnDUjTitYlUgwdHa]CZSRMHOsf`TlZK[|quIiUOwFWqYlTUjT_KYQiQ[q@oF{@~?^~|SvbUrevbpw{]NFboRohi_uSwRQ`mCfS[[d]pjXNPrcdbcTS_~aNwb}GxrHHW`tTJ}?~~o?B}ui}B]M[l{]NFbpw{TFChKRobXUCewiH`mqqjNLW~GMpMIhMQclxJ]QvcqKO|HS[c~o??@~~~~EMjMLjUvbpw{]NFbBSEmHPLKLHqieDoeYprurcjkiiUOwFWqUtdlXZUOMiWfISfG?~~oF{@~fLdlVpbL}NFbpw{]CovBIiMA]DpSEhhPLUtkprvJXQM@xJDTcLzB]ovkAgxQqQOzF~~~_?F{?l{Lk\\SvM{]NFbpw{MCpKZ`iQa\\RAe[BXPzdFTzJJURcT@yPpbMYrekxiCcNcTKYPr~~?^~w??ZUrnBYjb{]NFbpw{BXTOewRWYaXpIEc{K^Xqkiuhxaicsk_[xbNWruK{AdHM@{bDS??^~~~}?prbZXZwi}NFbpw{]HPLp`RBYb_YeHqkLQq]Y{g}pVcBseHqQiiiyimij?'

py3 with this patch and canonical labeling

'~?ExUARQHGKPKjGqIKmOkor_UXECpKN[G~SPBGl|?WcQucoQyisantYloNegE@bLW?uRs[SNnO{EXODSRx~?tWZSYCSJEkhHQKKkyB\\^oGqJCwYSG?la~^bW``tv`UOlUpCashl`^{AhVqPhy@Jireh@xmWSjTs\\IqczNOk_OdF\\J[Zhlm[DbF@A]jbKRUR`Z@mh{@gJ{p{udc`A@KQ{]EQ|XnE{M@gF[eVY]HHlqcAzoN^glTtI`valzLbu[@IgFyOsNgDkCuypRvL`yRRUEy|wJSYwyldAavwBFcrvtDh@|VrgE~QPcwFrxgoV|H]}sm?ai]Hx|[HMPIYQv|eYKY^UNxiLhGBoVYYhIibGutrN@dqebaHJ]At~~HorapD\\DttX`fRcD@kFJYHyk^k}CM\\bONVRS?Oxk~|Grk~XulbGK@UIchLM_vdmnA~CCVzUcr?qu`LPx}tp?C~@qvrQ[GtBVe@qLxbOx|FeJ@veOmJc]GrDtiWWluOn}^zeVChH\\nIRBA[wH{IRIZB{cwgmGjhtuDrVAnoCkLGiednimR@drrfnTZBWW_Icu^EdsFID}]ZA@ITV~EUwYkvtfS{PwhS`}eh}FYqGjDIs~tAgUTzXk[LK}P}c@PtmeRkiE\\}r|ZOAa}K~F}TMfwuJ_PleruMN}fWTeOBmSsNwsTifJaWvakhx?yNex|eUXK{Hs@|tFZRqY\\ZbGD{dgOSvYtDQYzRokMznVogGy{}SMo}PVvtEv~cGxT~FsBMrD@pyaRZzodKd~iPl}Q[XXUxE@oHJid}}v}oRjtuzFERkNt_TY{nyR`s]EyNLE^toYj`\\XR}dgC|NqiIjrYRZQtSbEN}rd{I[odywVMyBH|iJYxJrxQlisNqwm`bP|EPmfVbmj~pcsyFWcp^y`lT~|Kje|OumqKRS\\JDyaWr|llrxC}fWN|B|ow{K{b~mEqKgjFllg~owli[j\\K~znLTIeOvn~[uIpa|V@QykugHAa{QO?^Nfr@PdJOcVm{?WtQxd`Sq_mgQqcFIlzcBoUo~EeATXfpL?zXeWEGgqyraTl_S?YumM^wCD?M~dtMeF?NF[ANl?T_}A^KvgGIy_x\\F[`UuxJL?wSUENEsJuWp{uBbaUDZh?qTWjYLdLssc?THE[dNmmRWcBnrErJOrkAijwWxAZDwaC}XEZ`aBqxv@aqNdov?kwV~m\\DKsOnEw^S{TkBIpCVdPDdYvGnuMglPZhGQZCNnb_wwmRQvOo{RkTdUFIj^a@`m^DE}BojK}@L]YsQErbaotL[RqYuzDyKqsPAJ~hQPLPAJtizGvFxtSJHF{osfHi||p?GqO{utBSNBTt@YRqfmOkaIlHmCf{tKm?`jdYs}ILnQiNIKEEoK[YeFbnZEzaCCYDEzlo\\u@MUY}V^[{lPqqk@IVI}\\hGfkCr\\qh}~gPedYmRHSRGeCy@ZmKUUoz}gAuJAvZUpXgO_VD|jl_ShwfZJX?^aMnkU?gku|vqJjHindxyu_FKQLuUSIDXjeh\\^JbIKDPBgsYICx]vxX\\urYNqHLzFh`HfIw]zDPeOGzcWQr@NeYYAJBE_y?vvxJy^lRpJhvTb\\kiwBkcaeZAcyQzVSIYmiQe~gsbPcwp_Q|uQehj]LJwu^wcTfn?u?eicYpOY}AAKnyM^lKBQeWssU|gdA^KQN?{VLR]oNvoRTQGZ`\\vJ`HDhOYcygpIVkRzXZcfK_Df|TsF`DqOstMIgfUCuscxrcpa]`rdq_F|V]iZS`Ca]H|ZHnEW`x\\[kYkiReCK^FEN\\{l}dTi_GYkn|HJaMYekekxzfnjG{aUGAaTXMq_HT|hUTf|D}bDnoE?OtcZT|o}YWRSeL[QxMcb]smdbZJwAZmppKJdJcxzrLjorQpiCD\\Lm`@Ntm^dypHBRtFb^]nK`tqdYCjA{?j{bax]nyquB_ByrQHLBGKj|p}Al\\QEZQ^Loi`RfkrJeVL[H?gUefJbqEQxrOqET`|PRxiTDtdUUdT?D~wrf}xYrACzwrMMEoj?sGUxx{oWj{f}@{HPjglQsOJVKj`vPf^dOG]@vqP?ah~Rj]wV?zRn_DLJZuNHLmDI\\@ss\\h]_l`xib}dfgchm]S^tHs}SWcq|PbzQYjBvDaKxjTeS@B``Y^kNo[fMorxf`@OndYt\\pXIVdkLyXZpyUvQBXcSpWgucoyEzo`xwiyNZ\\GIxjuAHDEfLvYPqlptvbwevCJENa]byYm[MFb^ABA[VGRHNZUMYA~BkHFJg|zmG`DXuJZzswmEmdklliToM~WeWZOFTbSq}IZeZZOFHXJ\\]lerBCrqJRKXbsUpq~OT{bm|a@lX@@lavbAkyXJft\\]d{XuJv@wj{|WVtsJeHwIEDozsTW|UThikKeCVtyOSbiUCNqqkztevW|?xzkBrT\\wG?dfpNQF]{~NkBbLVCCE@tzCpMdkAV~dcy_fwQh]fUlWgfL@z~kwq[G^eMRlljiuON~[C@LTFm_Sp}QSmbZrAXXd`QfthjaCRZF|[|eoq_SzZWoA~rAnP^SjkjWy^[EdbGEhTox]DwhLykTpimysyM[DoqY^xnae\\b@Bofamn@asANB|n[k_L\\aV]dlWfm?BBfR}L]i?_UWIs{{x@r|fdTIAliLvGESdz^qPmQlgGNjkNVAHFYh^td{LEaoDx_t[^hURYcxVRbhmNidhM@Dezy@PzA^VkCI~\\xH_Th~pNK[{|ySa`{Ok_jgafOwfRCWmm}[z`}_\\xOTGVLWN[rX[ej~dcc|BEfowSEvH[]QzSfRXqYwAFqj^~GopRUe?MDexzd^YE]KFvflC]pod?VInFRcIoaGaVNj\\|YPAIzPHEyEKwzfUvCg~~T[SpSljQtItaH~ty_it\\oO{Tg\\@jb@sV}MlGZTOSW|O}RKxwyXtPl_}jMUn}cSlglSA~hNLW_fTp{HNuLDUj|wDPoU^n_EJ^kcNG`|C}K|slaplzePEUIcpVdXRFIc^]QakoIngNYsy~r_dWwKPZKtUphEQZs\\VsbPvs[n@}{dJ`c\\p{SJpWZTRW`ukevSEXVYALwXNnsFZP@~ApLWJO}[XewfOT|}kQsZgn|naA}tVXI]CmaEFJOKsdbk]r|SJJDXPS}rfX]msHXEY`eiYDM|YVQpga@KEyppzkvsDlDt]hB[g}Z]Bc[hKdEX\\yUJF^ARsJJiaM~UL|iJDOjYZnCJreCnHYTLQxRDEHwrrY`{VkdcUjC^kBnBX^WH?FdeRPo}yRAM_Ht}ndwYUIQO~xxSVQoXDt`QxSXnMlpuI^cm}SMVaFQXMP|Mbi{BxH]taUgW?rxwk~gUsjAI[P}suCu^Xz@OqRRK}sMuQ_U}I^jwja~]fAaGqdQhlfCn[SHTc}NL]f{OQjRetht_mY|slAdR^DgQ{xcddBN]BWiy[sQVOojgJzzHR}Uloj}[tO?]PNwvoGXgf[ehTEwL\\jmxV?tlosuddBzAlOYYCyBuwJRaOV\\rUtQnp~kYI}H]RQmIBBYH@f~A^OrHo]J}E?kKhNJfF_SbyE~Q[\\}hLbhjcJyue_?Ece}gz`vw\\kmbstgDxTCOD~uBfmHDK}tAdhXalXE}ExRSyUeEnUgq@]Na}oZIAsaYZr}iHJaCitJ[xFVYoCH~lD[B~JbGxbAi^ELg^Pg]Asp[\\{j[\\MNBFB]Km~XD[ACeviqMxsn_beoGsSf~oEltZwhDLbtZrKWgQFcaDvTJWr[jShpoVVuVzQpN`vgjNl\\IJ?eGBy^L?Js{`jyD_OJVw\\Zvzh`MilTsELbQ{]WwFVdznC?EGo@xqGvToaJTS^~~zXCYQsQvKwtbWfPe\\{TrP^KC_h`UTNHDvkyKX~XynQyoqCkSbvRPh`sa|oMWY_d\\cqXI?iuE}VyzZZUw{eoj`R|IVvwgX?OT_Pewgmfh}lMVmPTFxaPjMo\\x\\J}c?J[`oIgARuJ}PA\\~@UNtGf}{DQq|NGJNkmdUOCg]NKZsMKGaYEVtWbf~xmiF]\\{cJvVH\\EaceWESZ_C~@gp_?????????????????B~~~~~~~~~~~~~~~~~~U^QKUv?NOWTDFW\\@SbZu}{`cU]~hYjeWJh\\_xqcX_IBVbLXpzF|A?lOLVU}m]X^HXPGTVzYBfnjCfHIJqe[iPbG`XcwdXz@bhuJfb{F~KqHmlJGlYuOf]ULB[{XB@d?mNo|fQmzsgp|MFTsPKslH]{Juw_JuFKa_CFEVwwPxq}~dsryhLFARwNWdEFRnsEjo[[BowsSkDcFmhLfRW|hqGPsUzZ{wZRtoT_w?QnL\\lqkjYOqa\\h~Zd~UGLEVlSs{eYCiJdbNmDADJhl@Bwlnzo@MJzNYua`hUpMV\\AWTzpRkcC\\W\\gO^vHiCu^@Tczqngi]|E}qj?Y~AzO@qvQNLBPlCLoF`RrmyOjD~FS`kOZnppZl]iN\\SaJyEGoByIQyefyDIeK}hjd[e|vvJnkvcA?sKInq`qtFHEaJTlcf\\GHxKN{RbaXwEm[bVMDy[vVBRYMVZ`IwXJhkbRZY~?`K]SewsTK\\vbHI`YR^TnfXKZQe\\MN{UWkcKKm?^\\{OEpXhtLhGxyNpxkS\\EdNeMa?L@Iqayx^cPzIO{ljXSqKzNqlkrpz?[fo[iTqJzHPhE?N{^\\xDVRbuHeCdSp]EPk^AzHzhKia{W~^hgP]iTzR[InQ]e_[\\@xDr\\CWGfsk^uDKnB^zRGJXwOpfJMOfzCyTcq]D[lI}uhXzIC~`nKtJMxAoAWqMKYbbpoDBlbbwy]UipoN~dW_y?~Yqgcy_~GmzW[macRe?vNmft_|_BOvDq}LamtAisZSNh[jK[yFRXyMhLgrP}xYUtNBUF@{KIQGjzUPYCp}txkDoJmWMzoZirqHzrtTvD]d]SI?Qog\\MjLExKL{i]WBsrGYqy[fFEEVy^VEma?{L_aUxQtdBry|TsSYiczkdVXAu_FzJPRlRZdOw@L~s\\Z_z?RaXuWgRiiHP]G~BF~Vn@DkSJSa|M|W]moDSofbT}P@YW|[hLhWFzDKaXj^a{Rv}vAiRPJUkmDiwuyc_WQzeq`ezbogZQ~pLvkvaIWMdj@^@{j\\mK_P~k`|SOm`_SwYkX^hTIzD\\HQqkVuMZafwpBbTvbOEK[j|Bv[EXcZHRUm[Tt^V|eUiq@_`e[Qs{lnYpvTTaaADdMDeHFRn[qJjB}X|wScsdNg[RXNwev_pT|CRFQA`U^jDcksfRs{A}nhoopwnx`lVqa@gwZwnyZklaQjijkOTLGuqBFvMZ^zfpYsrOdCTLcehaKDsN[oUiru{KvK|cmeJlGOG_iz@DSY]ru}ElAn[fDlub[@t~LzzAxB??h@AF|jkp\\zO`|ft|b_B}MrphGLJ@YWelxHDT|lwJbxqH\\qUMPo`tnhWD`Ji[QBapyrVx\\`\\][Ry{{@dU\\abEWP]]w\\rbSRBMtWxDqljiEVJTKmwg]Ta\\d}|]UyuFT?eRR}OREX?wSqI{ZfsVWX}gsqBWl\\YUQvaZZJDjy{oHW`mVv?FaXk|]KLGJttx{kPLJG{@NgnyYrLlYJXzJw}wIaaTqHltIAftq}PBo\\bRe~c|CXgOh]aOzVBqY[Q^xAflz?f@~_UHIseHJK~xbidnSCsSxm`ToMJfsIBzXFLTdrC|xq]_v?Gxe@tfeki|fWyFo_IsmVJKi\\p|mtMydFsYFAp_o~bjgwFrp^LYHGqYDG\\UPDNr~NZ~?ziS\\PaElvjVSEVRSzAdLKLta|\\\\OTUqM`\\EFetU?MUeQnQyK|qnWmWsrKHf{dO`eYmG`|S}^A}leS{SHiSMCMDjInmNxOo?U|Pilopm|Bl_tdvbIvgYYJiODcjU^fKLpgjSxyoccmIum\\PTGwJ^@tqdZU|wJDaFzKIq?qtF{qXyzaucEijEtwokAEEKZy}yNOJvs\\M}VUNUEzSa?[NBPO}YYKThlyUuRRAotaN]owWRnAZ^Wb~_K^y}J@bfxIJqDClC[]b`aF?dB|jyxuoDPZ]?QqCXR]^zSjZmB`cVFpL_Y`Yd[Carw^b}r}ob]{~HeEUOdCA\\WxLMdzZdpF@YUyS~E_WdqrhRe_tcMyhUxfr?YIJ_j`kEbuyyeNGtgpm^HJpPc_T}ygT^odFfZtPzQGZGfru}x`EO}?]rTvr]WTTrKE}sEMdaooXUN\\SDSunEfITyx|C]UrVAFb_OzWg{{ghh{kbCFwm`HJ}WLLHDlfjFnQirSxFeLKBrnKigsDpEdYoYiw_qu|h`\\ZtC_klmcdtYY\\]N?bqlQZT`uqL`DFmpijoAu~i`n{XeLQ?y{AEV{`vmDoMOWR|VHLDHCganh}^ur|i]xb[VbOsdV`iraQ?IPVZax~Pc}zU^fPYr{??EcnXFoeSmHViBEWrrvr?VZov@Wnwj?JCmCby{X`fbXiWKu_JVmRXeUjKbdhODmhlufk?If}OEG^pZrXQhaPqiL^sNY{onQdRtgWSlo|yul?aCLHrecP^Mw`JjZu~`Yi]JgcBDNxRTVYVUnOjEKXpNtdVqiWOqjleBeoo[iDIXfUShELilITQZRZ?Eqpebj|rFAQ\\bhNyUqZDDSjZeE[}V}HSDHrtU~GkLk_YQxYU{E[lLXp[vIfqBUI|h{x`q_fBOMVbm~OfYO~{zGHsKZCpkpsb}[EiUFtp[dnVme`\\hPAhFMQAQw}PxJVtFUIcChWnLvNeyK^h?tdfP|i[ZVwzbIwF?z[@WDYIEvktGMO]Envw|qc@jp`DKzAEqYcYTYsdyFBWiM\\esp`|TY`xFwbKoeKxnk?JdMlsbrR}Jcth@FbT^lx{aARLBmFx`u@_`iLO_gLnbB^A\\^[uJiSzuO_{fGfXpLffPD}CTJXUnX?xWyKrXrLT\\BK|OG}wfACLn]duIyRdYksPVqVtXqMRHyziKd?rRDPUduGfwgvPlNI?s~zwkZPD^yQaycEqRA}QYrgt@pzrczqHJeDC|xISpouMst{iZmoVrCfE[FPdEsxoyhEsDy^icl@XcNsngBZ}cZ\\CKT`]woZoZvjpkP~[{O?EJhRbCzW}A\\ER@UxdEt~IBhXfsIhilqvdQ[WodvQeY]`yutdnX?XdN^FsMeJRjaR_\\_qt_Uowla}L@dos\\HMMQhRwUNFlqWz{iXMA`pOq]t^WAzvNyEDISic]O{gpnw]{lG|Zpz`xFfdoROvaPXipiFfYia[zXPtR_|pT_xB`zR|aOeWKZ\\EUkhdmXIW?|sTSWzrmdVLNrvTrHro_SlmLqI``AsfqRdmOqkfrc{Gm@Cd|VaerQ{[vOr]^YAFv]|}Ta[eP[OV__XhY_jIeX]xbpmZ|O{dKVum}kqTeDSC@~hIP?sKP_PtpTjfvfuFj|QgjIH[`rjah[}Cfp^Syf{EedOseHZGBvDoNBttSYTsLUhlGnmoOpr]XUIQTJKjhlrzuEhOxsOqtRLJ}org_wUlmaTERHNqSh[?pfoENQdY{otY[Wqd^Tqi`sMl^GUrQK][ZelXtRtIo{EC_TZHmjdY@\\TacNc^A|}MwIFUHbqNeY`EreuZosgWryBuYtPKK[bnDrnMe_RTTcvVSfdJj\\WLjQ\\EimnIRIojU\\{tneg`SGIp]PYLjRBCin@ncahZraUKnrKyyVS{VtLaE??JnkwgsV`gJdFB_al{~e~@IJc@rRUVW~AHVivzj^zbcZDG[dqUlW@HA`u_jf[zX^ZIsKp@v_GG^D@`REBVrwlFqlgxdKz`Ktm|BAB^ZbaImuef^t]JW`_T@maBTWFxEeRW@ZMVNlTMA[{VFBxNevVr_jaaclSpAy@SxjRr[jNDnJ?XUzDvTwjT?rOg{ZR`GMNRxsttqEonKwdMUQ}wwEejdnGYchEUvQMKahfMhht[o{lBFdVjkpJJWe`{^BDrbR?X^eNOqXlMDOY~bAeoxEYzjppEC]XEqEfNv^MDWs[~SsW?oKJ|a[~vWddHoqW]biQRP{KJ@W^NtPpDXq|lH`][oXHvRNmcU|VvWafM?Pdj\\Adfi?AVrlGy{sZHBVRjw_arc}tR^M]H{VgNXsIIq\\RRhX^qX_Yo|RnPD[}NXsaI_pb~NAR[GdHxGhP[mCuut^fMf\\h]\\Sd`?WTE]LPFkAbWN}G[wZhS`{RoNFw]J|NP]KWBeQzHTcFvi}`ogvbqzVA@OPR\\EXRsskT\\mqwpiX~Zt[kwGX?[\\XWAeOn^w]FkVytVXLYoGYWGgLB~oy`HFkZQBE~`igdwlOR[^M_cf`GO~u}vVD]qb[hHTOtiH]B]aN?ufHPjEFGM`{szkINqfsg?qWBXD}NDat[[y~oyy`CA~qpQrMHOepeiX\\`X\\TqLCsms{PtEmwRWxtj?KbQhO]{BlVsUX}Ak[lUPZDXrXV\\r^{r`aGYw@LiGAkPtDPhqdA~p`QNmOvL\\Qv@qT]pIJgygt~ha|ZtKQQZOKvvkJBKE@fbsADTgFmWWCbgn|NTir^ThEDzYIhonfq\\L`^IIo_BGePb\\gdzNF\\wKupFrNKCo\\KXihJeKXim}Zny]Spu[RHHoarjbeCOOfsqe_|sDf\\ciDSh{aM]o]Ii[]saLAnO{ttaCZQv^pF[MUUqKKd}OiMdgtDMmYHViH^L_Ve_XvPFc?RwZbeUrLJnNBEnOrP~VdATozboL`VTDy_iz[jhC@KhnSqM@AT|~WA_a~@T~ICmtQYQVVOwz_^Nazd|DtaBERWB^Q~hhaCqBhSGIiD[vfxmw_AqaI}flp^PlE|gdxC]@JfWxNrCXAFeLPZbje^_CgADKz]__EiP}LYXAk}mdrugd^Eu{tvKWY@uIt`RmmscGg}zQyOxSgHCNeto?OmaUI^fI^AUbmZ{PAl{RS{E|xwybr`YJeM?lLIX_U|`[LjqX@oJCel|SYmIIj@K@ziNuZhv?]inGMAzmM{kwJOZWZSHcvAyWAq}TUHiCbYY|b^Blx]GaHDQSkXqYGt^TB{]{NDRZXmZhWSN|J|TO`PEkNCCuGxyt]EagjsyO_mSo?[bVm^bZpcYyBYz`k}g?mzXZWDrTG_WA}_xuouSFNKpWITVQTB_wvoJTXK{}pwSFLuZuba~~A[HCwTiTzMlWGM|^l?_MG?|o@VRLfeljXms@CG?iKF\\iGqkuByVir}ft}TZ{kXmWJIqp_Q`I]?JHc\\TDZXY|HOCDwLqZ_Ohs]jwQOYlcse@b?IQJ[kAB~{p^piaqBXF^zi~jB}\\kYI]P|Z[rtaY]v?bOER\\QXNu?_g}Pf{Pgl|vu[ZKP}nGPzII~PSl_fYXHT|eJ~Ngd}JPtZDFBkZwoBGUPqHTiZrGJqhedLfenvMTygwsXxQm{SqLW~BrbyBpMrlleDb|JLSHqgWa_Q}af{KAXVfGBiDwxvBhzUmfn\\ofLhhl~~CDcTZuOivdUH`JaeSLKrwHTDEwP^xd~s?f~GOHEk{ixun`^iwgzHWEYO~zh^mWsVuc~RIs@LNKOQgtZ@FJtiIVEtWVpljX\\ogBJuD~earaOzH{]a|SzbrmyO{tV[VVCcKYMSgoFtDxKWl`bK[JmkXbfDtd^xWb}d`TF{wXqO~QvazmiXJjC`dywVIDgw^GpDyMZ`pjaJZOft|INUjRMI|GuUfyh_AoVI}\\ydPHwN~cJi@\\oaKeL}HFzE?z_mfxbqOw_UVc\\rN~tJpQFPLsQNMGs`XcbY{tzr}_qoPWJmaHy`@fXOFyz}`O_ZX}]rOcunv[BWTNjaN^QyK_t\\^Ou|uxeGxFeM?hbgHouzQEl\\WM^@VDsXHr\\}i{zahc\\kODrkFz`[s{XO\\nT~\\Fw_ETcV}[`bdJsMOLXAPNeArSnws@PXyFepciEqT~\\}RCZJ~Y^GlAMPnvvG\\`_yCDSqVW{kFalvAPvd?mRQ{]kD?mtu[PyEX[Zyxd@VIy_~Jg~QJ^j_lTmMUEW?BpD\\ov\\BrkFkOs]XRC~UXzpqkSB@[Fze|UpV@l{PmhNkK\\wYP@^x|FLlq@Th`iKmpEHQFzhegYfUXKVZ}KsBZGMjND]rs]tomI{EYQB\\?}ult^cJwSJyWfP]IZB?oBQ|e^_dS[}KUXNIua[jKjm~NQ^^}C@c~mEONAs|JOuNYM~h?QP|@u|]hpIClYQAiYI@hHGmFxkPH^\\ZZ~tSEcolTu~{?dSdzuEfW\\OYD`HUJ{P`bPJPN]L|@}hGdFtXxWt^IIMPzvEFt_Q{Q__N{^|]hzfKaeC@sakgadEqRDCHlGx|{ZltLXhSk|dUptoNHjC^a]yn~FxLPB_OGbyWL|UxMKNyXssTBrNZ@CQlPYWeweZFtEAfTHiEdb}vECz~CY_\\SyFTrYreVXCti}DxLssqwJzwQHCw}RRBhWJcGV^@HFANreJ]MzYUjmywyJ]XpSuek_oe[{nSdFbC@AtiULw{tVdp{kSWDjwFGEpkqRtrnBcXy|oh`VhDJtZjAhvqNDgVjQZ_pn{ChKI`EinYqjAQyGx^kll\\Oa_~I[{Xky`zJgszPsvkUZwrgDOa\\DvNs_LhikRhcDdOfhQAdwlYT~hd_[B}e\\ETSdTnxbFtB|bBiABjJ}`vkD|}WwWMWhl_tfAzcOdSJ|jYe?wvBqVgnVHpYug{vdgOZDVWpBrBBMCkoZ|zVjfJmIQgqQODR^kyMbPD]UEzcRU@M?m~RVIM^f_@ugc{~SMpIt|a`o\\viHk{h@sry[xAF`BtccoXXMQosr]MjMI[oE~cjPt}P^jXaPBllGq\\MAdTxUl{^gtLbW[InBDqCHf@QyiQqsKYjd|PTWdwBVQ~SdOhHrtnNqkUXcj\\T\\]|E^K[Vw?dJeh`QKzGfSgVdRVWhiHUXscPVOsqEZjmR`OmbLduyNQuhlFpSVnSaOSmlD}[mQiwP}tLRCoutY_VbgmWlNUbFKeLGG^YL_~d`~}Wqm@I^JaS?Tvn]hBoMfcMtx\\Ps\\_EM}FBG`[seYDrITRwmFsIeHeuoekXNuBU^dDt\\VixDFIlhxpsYoU_NzP][A?|pGfLNMbNZA|_@JWrbpxCTXo^RanyGvyUTISNefH\\?XcsqExHwqyr^VbS|A^hOKYSEonMBWY`s~uTmqaqNYtNIeGZzKpWxTPJnurR]kGFDfX`cqztmWaQHHleBgqGShaHNjZetkpRiiUGTKqrS`UxivK}AzYzobNc}oWf\\GpTJ\\`PdmtqxJugL[ZgP_sy]@vjCcrsyClaiXZKjVQe\\xgZ~kWbOc@xHzqwmTrwrBbAPs~wqMEQ\\idDkZHSVHy}?ce|`motcoAbll`mIdFU|NiSJ]tthJj{l?yY_cpwD`vs}RsPKpfnApZcH?X|NYYI{DgZaExEwoxPQuH~bzFLqPMjx\\IEm{PHUbwRG]sxphYEOJCkEZuAFM@IKV`EY\\Y~Rs{VacjV]_LKbN[RirUs_skoVx~KrsQyQIthrUeqUY}\\IDJwQXHRPmgoMyNvxYpJuO\\zkBXTfhsASPpszPx_EapTdslORUr}NNakZhImg{afrOYAh~Q^xHyGEglddXarFFdGn\\aIvhtNOkLShIuiUZy|ZF?BF]doJSC{uN@RCICHOcYNzNgudBgN~}Zm[YE?OXL\\xWOrZxzklmXxpbW_NmgQroE|QbsVeZqlzRBvoosT{joAJ?Nh|kN[?uqL_nfmBwvwHSsRfZ[YcNbY?KZh~ACwfE]^bZV@L_wNzXKTMLDBwqDe}PM[auGGbcLtokAbyLbyyS~~tTweVU@TVQiH?^fYMegCILowNtSr?xmkWgaLnHKeN\\ZBMpPAVU{JoElf~onjAFHCqFN~I^hcgurSrQQBGAl_Rime@xKWrIHkPFrj{xJEvixn]@c[@hfCv??~c~Umgg`bB{NMo]|w\\hWvXo?wcfpYxyW@_DjXvZ_vB|ff`wbq`VpvCAUbZQsfPR_q^nmuFQAbmkMvi_XLyXcZOgnnEyDmABrczbUjNCYQdtZOFNr[_BL^Jlot{AKo[bxU|FLFS]|Ut?IjwVXl`j_YMchVSxqhMYWkFXMV[a^WYX\\ROpDjATVJue^srDgHDVm[uhUU[VHAkRsaQ@~i{xTKJ@jSVG\\A][X^wA@nzBlU?NjTsugsW|noDl]xbgiBgEgb}dOzHd[^[`HQYvee`ROGDU_}XIvstTwL?GZIntaLR^Fcp`P^h`U~Q`J]TEwrHgGncnBFk\\[euWnLDTLPFgGqVydkf|fAODsPTAs}J|kkwemwFReFDk~WrRCdTFOfwIeX}oNhA|UOZwzkMEXlXscSQsBBheeUBLffnPu@WLD~IPiM}H`uQmPrhyssT|_CeAEMDgF^uekkflkba|qVAMI@mkVg\\CyILJdObXvBMnNPIgPB{U_mgEwJ~vZ}APegBB{hUi\\J`~nl?]aJMRMAvO[JhkQmQU\\XXMEfOi`LLFb}Zt``Sqed{AEJuyaMsR}C^PaZrvDmSNEc\\MeAy{WmTWvd]rYl{IjZI|T?dCw}?[`~QOcSMry_qExftf@dzlutMOlgYKE}]RmyLo`^@TWRerkNJWMouCoyxqKzVNocgs}oB]hd|XgkEgPAwk|dLju`Wb`XCEy|\\IXXY|XD|fEiGTRPwWOX`taeDopmkmQoZmJ}lqsW^SEOnkRYU^CxO|IIRBuZtuL\\ah}rLgJo?_aCx}ox{hMl@tlJ{d@HqpjpjgCtc_XUzqlRxSku_]LXlJgc]AXuIH}Qo~MAqa]td|`O~tse@FQQce^P?f[g`qmLrHzZuxi_q@txKvH]?FbKunp[pekymdN`s\\OK]OVRjIUr`YgYBvy]bg{jCan|\\HypDWJ?zjWsYWdH|_tLMsWyjekBoxaQRcnaKa}|GJxEtFtINR}PIRDvj{NHWnC{Q?w~D[kdHVwkD_G|OZ^s_f\\D{FziLyu@Az`YWbAd~GeFj[jiMigdkh]tMbEsuwrFhAfqzgcZJClqAAK_}jGj}?p}hWbu]vdqZw[D?]hnVz[[TQgWcB\\\\`fbhgnEO[YSXo}KRX^ubidYdY{dYVP}\\?@wd?ZSmk~eWwnlNAg~uaW_u?FiNeWFnPRIEbGx^uWyuaHLbhtjqtA|@gsg`?LHhsCtVB|iJt@}}|RurDYVe`pdN\\qkQ?Yd{{CtPMQQ{ohUGn{{cthE|RPuKwh[G?dRwwMTHrRZYttdd@}p?R|yhn@Y|c@B\\|b`KuhEww~oSXusCwS{N^IlFz|Yau?PKpd_C~EZR}KW~JxPE_rTFzESgX`?Ikcqr^RJA}^_k?dTzKkF^YI{SRCTjFfAgtZ_zclzw^s`j{oVZfpAoTou?ycOdzsN\\MKKjHbUvGSHzHZ]J_w@]eaNaORDyKXzsSb|hWUjfLcskqTGjCj~W[Pf}YPkVxSnHTHhE]Pt[m_?~KwwreHQM`m@NlaGANyVygfYjLTCtYys~[KBz\\{GYArUYHWx`sVq?lLczyQIMYbTMTSY{t@apsvpQrYhPoInklSee`oZNmvJGZFfIN`D_L`XLJ]s}\\BQpkT|V?[eBFM_{dinGQtz_WMmacTbxXxooXPExM~WlBjRsDcfxtUPvDmopp]WKLp]VDTEetS\\`CMJBiZSHsVH}VBSZbWQkNyrhu_yhL{xcZRwWHxUkk]EsZbojkjz[wLECcO_\\nvq?o`NCEzAWgHmn^[v\\krUrGfj]ImSaHZu|SrROCIdjKutefTEVVIxKXp_J_|QaU^VdrQB~WU|JADWtQv}gL?gsariepQkZmLqJhta`T}sGkf]Z@fnGSFfxOrf\\YWf@wnZ@?qfbdQUadE~zWxCP?sV\\fj`dIWNyGENFi~S^E?rmrdmJoAvMfRca_lNa]CRmWJ{{hsERVKrF`v?uXqXxDtazGB{HzkATTWyfOR]r?ywmabKAnm{jIFM[dsE?JSPOvFzSkTJP|N|t_LVLeZb`TKWPUadZw]PuDNYFTYuecK`t_xu`K~gMfyJpISSw]pi_s}ojen_Svd?xtkUeSjWZHCVBYzOK@jzjxAZjNkF_hGPKwMI~HiV?q[zgxzSeQ@i[zdvhbH{J[?|Dx\\u?PreEmCtN\\XsXjcsT`rfRgFAhqY?XJz~FrTqIbyPLp\\riLHhlxTpd_FXjXMnR_n@JaBPKByDn[MUDVouscxUwOndlQvA?o{MGEMhvpD~[GDDfvpA]`|IF{RbnmQYXkpoMkb\\`]PJNf@xWLbdouXKICQ~ymLea\\TBawdkJBv[sOSAzgF?pJZfE[j|RnKLM~PBgqaLf\\Dp[AfWisnT_nzHgpHIzWE_^EuKwi\\FLAXJudp`@LmVnQxW@NbAkfVBMPs~f_^\\|hQb`lwJMLPAyqcL{QhVEe_BgsukQdF[bH~iuHJoYfIl}behXqHWzNR{wBgPtUYJ`Lrt`PUJxi^MYWzcE[dQcR[d{`^GKzKMRfoaH~?hun?`qqwlk~GyAi]?leY?UvOjDZ^}MLsR{LO~gAXTbCyFHfx}PcivhWHEmAuYqprIgw~WoqqvKit]pu_hz@PHHitGxsDt|weNGZ|Q`][\\@{cJ}CErPPhkYKtZq?YZ@z|DHnaqGkClmxid^]FpJhFRtsOhl^?hr{bfnMC{F`TN?S{UuLDITAIS@~^m@UNvchVA^HaowLC[sg{G^uV^ktwoIDLXTy?eix`_x|eTnfA~jMiP[[HHMokTbPeSicjAHrXxyUxdtAAbHqztAeeNKYezP^WdO{qpQXhT?EbZE]Eq}vcsZb[pPep[CaKRHuESvYQiijp[piJ]cCk?iVH|qrZi]gXmmAHvefMLbI[gR]eIlto[fj@rCPEygxV{km^S{PXtBQgWAALsNNug|xXO`^rcG_GmWVCzeE~ZyLVhu^iBAa{aToM_[[NyTqveCyMnrPBhQRAoZeSZqXwozCME\\]fU?`xrNqr[KFMSeDhseBD?~{x~xu`D_WXbXeBYl`?TTrV}JNMmyg{xpHS@sWplpV[kWUM`t@jfG_qhCvAJ{\\kz{i_HoeonR[|DQdxfnqWtBhU|_ot`eVU{ss{Vgn}E{FDOd]CRrWn?ZeFK_GMWoYBDOJ|UzTFJ~[bFbwU~VtC}m?P]ZO@wf?e}kd}h\\th^gQsl\\OgrQzLA_cnuOUw\\fSJY@H_zWDBXXltTS^wg~clyP|gfdttd?NgmlYHgzsK{`Be|P|NHyYp_rjO@PQPj\\XmpDk|w\\t?WEXnEtUma_@^jiSwNFJ^wAzrHP}FUCdtZ~XOQe]iJqXw\\Rl_@oV`gwtyXC[oOy|ch}SRG\\a]}hqbWuBD?~GK^A_vfkksJDfvdIjWsVHrAfIjtZuIV{UsBnHcSTuoxWmWoyGPLxLYZPaJPlMUpHpUV\\KaiUMhE}{eILygK_hljXlbK~`kKMxIq]wJxnbROSeAUQDpc~YUZfGvRThOopaW{|tfCa_EiKwqmZjridQfSGT_kfI^fL}tpEY^_jCWaL~]nHuoKUwpiz_qfAtaIbD`mqfajpUPl[AQzOGnUTKsx[]}?aJSfNdyDN{nYpRE_jG~hgb}h?ez|\\uY|vQ_G?_I}\\vlYF]OTBXgxoC@zMXKlJVS}S]COfKjjcuqbj[`a|PkmayLKHQCeu^MEsxNnxxjySFM@|deTKdiSByGlFg\\IpehxOHhOoPg}~AMhWCMtWfVxw[xz\\MRnxyabGomQJFnmgwihT~saBAKj@lfb_zVSxgHYu_LV?RJPoxSV}_WrEylp]wkCZeQtJMlFRF{Nd]nAZ`mA[KdVUHX^z?jk?S_FS@NsMZmrxwjZVoNk]T_[OrFRKm?]Q[Y[siSRqjwqTyEvdp`wRSr}KrcQnSaZ^UDffeavMxbWhOBmHB@ieWysplY`{aqBRFkOs[YDVagLGg^_XuGL^}~z|kJE^o[nh^IR~gb`AhWztsAiawuetSn@mCmINgBTW_BAgrPmFxUmIpwBfRGQn\\~}cExUY[UpVsiIjcG|GIIdr`{{}FxZnx[tgog`RBxBnMJOcDB}ZaQR|oWeUExDBYBI[Z]ndyOGvXsOzNVNv?{_wekeC\\ckzu\\?Z}vmmcQpPkQXLhnrEoWOFvuGyUXhRX?ocZpmxkYOJDS\\JM[z?fKNmrBeFn}CcA}YvzqVrymqQtTk@NBCAGawjN`WdZ{mYNOwTc]sY?PIOatg^?{MvO^ybMS~}HXuPBeJLnC\\qwS{^rqgHuFUD]cc~zy`SwzJQMEZAJwAtWeFOs_E^uiXOQIhOzEg\\_ydm\\Ed}`YDm[t}sy{K{Xf|o`{M]FBoBxwyMv^lPFN[H?{EFo{NwAFAKfowGFoG~o[?^@~EM{PBKhFF{pe@@~`}N}\\kEzo^{N_B}@~?N~wFx}Oz\\?N?{F?B}?N{?F}?}FmsEW?Nw?N{??~~@}Br?uc~?Bo]?~~_@~}Bb~zs????????????????????????????????????N~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
dimpase commented 5 years ago
comment:33

OK, I checked these 4 graphs, and it appears that the 1st two are not isomorphic to the 2nd two (assuming we trust our py2 implementations of automorphism computations - the 1st two have groups of order 27, teh 2nd two of order 3). Quite unexpectedly to me, the 2nd two are strongly regular with the same parameters as the 1st two (this explains why it takes forever to try to compute isomorphisms).

So this invalidates my claim that the automorphism computation broke, it's the construction of this particular graph that broke (a bit).

dcoudert commented 5 years ago
comment:34

I can not help for checking the validity of MathonPseudocyclicStronglyRegularGraph...

dimpase commented 5 years ago
comment:35

The fact is that this doctest the latter produces different results in py2 and py3.

I understand that there is a way to skip a test for py3, so this can be done here, and another py3-specific ticket opened to deal with the discrepancy.

dcoudert commented 5 years ago
comment:36

You mean that we should hide the py3 failing doctest ? Is it really useful ?

Currently, this ticket align the behaviors of the 2 methods ('sage' and 'bliss'), do some cleaning and fix 1 doctest for py3. The other issues for which further work is needed are not touched.

dimpase commented 5 years ago
comment:37

Replying to @dcoudert:

I tried to investigate further on the possible cause of the issues with automorphism_group and the Python3 failing doctests in src/sage/graphs/generators/families.py.

The good news is that we have the same result with 'bliss' and 'sage'

sage: G = graphs.PaleyGraph(9)
sage: a = G.automorphism_group(partition=[sorted(G)])
sage: it = (x for x in a.normal_subgroups() if x.order() == 9)
sage: subg = next(iter(it))
sage: r = [matrix(libgap.PermutationMat(libgap(z), 9).sage())
....:      for z in subg]
sage: ff = list(map(lambda y: (y[0]-1,y[1]-1),
....:          Permutation(map(lambda x: 1+r.index(x^-1), r)).cycle_tuples()[1:]))
sage: L = sum(i*(r[a]-r[b]) for i,(a,b) in zip(range(1,len(ff)+1), ff))
sage: G.relabel()
sage: G3x3=graphs.MathonPseudocyclicStronglyRegularGraph(2,G=G,L=L)
sage: G3x3.is_strongly_regular(parameters=True)
(441, 220, 109, 110)
sage: G3x3.automorphism_group(algorithm="bliss").order() # optional - bliss
3  # <-- expect 27 in Python 2 
sage: G3x3.automorphism_group(algorithm="sage").order() # long time
3  # <-- expect 27 in Python 2 

The issue may come from PermutationGroup that is used in both case...

I'm checking this example in Py3, comparing with Py2, and I see that G.relabel() is the place where the first discrepancy occurs.

Namely, the order of the new vertices in Py3 differs from the one in Py2, where the order is the same as in the output of G.vertices() before relabeling.

In Py2 the edge (0,1), where 0,1 are elements of the finite field GF(9), and they also come the 1st in G.vertices(), is mapped by relabeling to (0,1), but in Py3 this edge is gone.

Is there a way to force G.relabel() to keep the order of G.vertices()?

dimpase commented 5 years ago
comment:38

In fact, this looks like a Py3-bug to me.

sage: G = graphs.PaleyGraph(9); G.relabel() 
sage: graphs.PaleyGraph(9).adjacency_matrix()==G.adjacency_matrix() # Py3 -in Py2 it's True
False

It is really totally unexpected that G.relabel() breaks the ordering. Imagine G being in the canonical form, and then G.relabel() breaking it.

I think G.relabel() must leave the adjacency matrix of G intact.

dcoudert commented 5 years ago
comment:39

I disagree with that. The only way to preserve the ordering is to sort vertex labels, and we want to avoid sorting as much as possible in py3. If a user wants a specific ordering, it is possible to use G.relabel(perm=G.vertices()). Similarly for the adjacency matrix, we can now specify the ordering of the vertices.

Now, for the canonical labeling, the labeling is not unique. It depends on the algorithm used ('sage' and 'bliss' can give different answers), and also on vertex labels.

So we need to find another solution.

7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Branch pushed to git repo; I updated commit sha1. New commits:

ad9b46frelabel with an identity perm
7ed8c4ca-6d56-4ae9-953a-41e42b4ed313 commented 5 years ago

Changed commit from 15790aa to ad9b46f