[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyQt] More itemview examples and fixes
From:       Hans-Peter Jansen <hpj () urpla ! net>
Date:       2017-04-12 9:20:58
Message-ID: 1839461.pE72cTKdk2 () xrated
[Download RAW message or body]

Hi Phil,

here's a bunch of new itemview example code:

	frozencolumn, interview and storageview

and some fixes:

 * combowidgetmapper.py gains python3 compatibility
 * dirview.py is a rewrite, syncing with upstream
 * editabletreemodel.py is from the nit picking department

All scripts are tested with Python 2 and 3.

Cheers,
Pete
["interview.tar.gz" (interview.tar.gz)]

./PaxHeaders.3334/interview0000644000000000000000000000013213073367343012634 \
x \
ustar00 \
 \
30 \
mtime=1491988195.911897793 30 atime=1491988198.771928042
30 ctime=1491988195.911897793
 \
 \
 \
 \
intervie \
w/0000775000175000042560000000000013073367343012532 \
5 \
ustar00hplisa \
00000000000000 \
 \
interview/PaxHeaders.3334/README \
0000644000000000000000000000007413037674712013442 \
x \
ustar00 \
 \
30 \
atime=1491926830.387232055 30 ctime=1491926829.463222342
 \
 \
 \
 \
 \
interview/README \
0000664000175000042560000000014513037674712013413 \
0 \
ustar00hplisa \
00000000000000 \
The \
interview example shows the same model and selection being shared between three \
different views.  \
 \
 \
 \
in \
terview/PaxHeaders.3334/images0000644000000000000000000000007413037674712013752 \
x \
ustar00 \
 \
30 \
atime=1491955457.665274932 30 ctime=1491926836.015291213
 \
 \
 \
 \
 \
interview/images/ \
0000775000175000042560000000000013037674712014000 \
5 \
ustar00hplisa \
00000000000000 \
 \
interview/images/PaxHeaders.3334/services.png \
0000644000000000000000000000007313037674712016357 \
x \
ustar00 \
 \
29 \
atime=1491926836.94730101 30 ctime=1491926836.011291172
 \
 \
 \
 \
 \
interview/images/services.png \
0000664000175000042560000000724513037674712016341 \
0 \
ustar00hplisa \
00000000000000 \
PNG
 

IHDR00WlIDATx^՘	p\ř73IӒe$_eYF!`ؘ1,6#(H \
rndk	9" \
Ēoɒ-[Ҍ4ҜޮX)T~}zG	zྻ.5u]ӆGyBM \
:ڷ]ɧ>OY`!_*_f'k~x%юl`Q~M$'?[>98=569y0Hl9hrv \
G]uYII)D*`lt`< ֕g/j&\sp \
fL.	ȱ䨯*3r+gܩH29|y+-B.1	.ɌF^J!G3gz5 \
3i(bQm]wW&s{ HC`6N !2S8r
vFK!ˀ?hq-kp9UdFd4%p] \`BX?B	UGq
;SLQyC^RSp)5)ɼp].Lx_ \
FBie(@%=kƢ(%cC/sP Yܸ$NArf؎7ja+ h& \
vb~`,#e(	* I(7=E <ZL*hTVdJw_z,z{;*+O&$-)B \
:B0***:;W_0cs^z \
8&ktPGB<LnЉ%	.aJ>D8SccrTSMަ57\?i \
gmc/Tܓ Yp j#^p7!t|<ι	L \
sU3u78!A@a0,au&˿y\q-gz0l+y \
]<=LZ8tzL:=>QUPNN	 hDgx@F \
\5M,\zt\xz<c#@ͷ&)TzAt147M}xcO;| '
Sd	(MT
DU4#،FT*  Pt`gΟ}09KL=VaȔvC}Iܳy0;~93y@
 ' 
%c%B&wph8s1wQ
2Gؿcz4uq8_{ѷG6=W	J9t|i \
kKbIuCFD:|/wpF(RF \
zTG:uMOg.wcw>*#5RQ^4ƚ5b4@8 \
?*Aﰃ+_Buѳ=ēsqUUpտ}Db̩65-g-BN \
2_L US瀻v! 1 Cu<-V՜O-\UUQT \
l)e/eкjzIp#~8Z6VqQ%3C' \
Cзc^RGwƪg5<X@rK/>_7&ӋJʀtІWZX^P~; \
y,y0;8)9ˁS.z\o@3czwQ~E SE.^  \
RF އ`3 B5CK)<B-> x s1t٥  \
Tq;xyNˏ>d2.$f>-	^y\eN/	*׬@!sx \
\	Px0|`T>n.!\ \
%]{ml5Pw<k^ܽ}OLÀa(LӄOG"X{wtttC5w	Ӌ+/9m6]y4 l$;W7- \
jeC.^F	JїPڡvظ|kOHtFPusoNػs;O;yfEͿW,VI4z/m:!68⪣@ \
A p{`};E9
o@2=H0z	ZnN6wz#zґ^;C3tFG"̈́J!c!n߶t[:%H:{j.TYm \
>}8oڨր,&ݻ)6UmӿyUw#N!0=}pk:$9 I \
> 37v!r>!00TL	CޓȤS?Yn_4q>AHT&
e=PE@"㡧^|_BYx//EwC04M17łIo,4r9
 j`9
ܜN-yh6n[^N5=@9r"ʈW$ɌCA*2~&A \
-ՏTzkO)sf"\4M+~ٍly<ANRW`	jX"P ٜ.\ \
(R)cǒw&J͏]|σ0믘gYc;: +߭	IRM \
×Xf2Rr<A߽ηG.|+KqE1E``L-+0G$I)9OCtX!-F`ۿݱk/޷|oQC9YQar{ȹ#
 BaxA RP%)'T	~E/<*ֱvVI5r,/
x*
6tI
[}MVLO/6aPUW
(ߗel4P`&*w\BUwM@  \
((gNs˯%eʍ/6F$aIsc$,0q"[>[ \
%D/FrQJo]	u?j)"4 $ M.	4Hʦ?!W <@!#)l \
{W]VEy0lo+$)P~)ȢKH1`)	@Q}w7/FyTjPHz[?3a;l?U2 \
#+IczAZEKk\H]}Cr-#p X 2T߼%8MRD \
PD<Ф҂ldzd8(C<ZmAƫEy"1t"dN+QO %`zT \
M 4'2u #)/>۰At 1i	Fy&OY~4 $uB \
?}0MI=FY<T`~K$Pò1, \
`aKοp5.ZT*5g4ZcF}u[IхKUIENDB` \
 \
 \
 \
intervie \
w/images/PaxHeaders.3334/interview.png0000644000000000000000000000007313037674712016550 \
x \
ustar00 \
 \
29 \
atime=1491926836.94730101 30 ctime=1491926836.011291172
 \
 \
 \
 \
 \
interview/images/interview.png \
0000664000175000042560000000025613037674712016525 \
0 \
ustar00hplisa \
00000000000000 \
PNG
 

IHDRRPLTEc4`tRNS
cKIDATx^=
0=@TL
tAX|
-PjcҨ@\VjG
.P9eIdeIENDB` \
 \
 \
 \
interview/images/PaxHeaders.3334/folder.png \
0000644000000000000000000000007413037674712016010 \
x \
ustar00 \
 \
30 \
atime=1491926836.943300968 30 ctime=1491926836.015291213
 \
 \
 \
 \
 \
interview/images/folder.png \
0000664000175000042560000000750613037674712015771 \
0 \
ustar00hplisa \
00000000000000 \
PNG
 

IHDR00W
IDATx^Yk]uq;c<&qJtHi J* *
J*j"JH+*j#5ji6Z)	UBKӐ0xqscݵ9bb>J]OZ߷ۯ=,8${
 cL-ޘaLRR:J`` 1<τa\lc[,
f`` Vf7:thoUJYzD8}_ibqqqhLLMM2ў5ZPZQ奅oNx
 GO|--ϏߴO4m(@JAX&๓'/[?+7t_{{Z
Hf$S>~M(Ee\la04'i(RG	آr2777EĉO̜eQW:knh+˵M_
 2cgϞ7ԙD!Û5@8h =	@Y@ \
/Hx:2˧T#-ސ,6]oCq}%*u`>JR?xW-$ \
`n`$Pf"IK"k ^	&1A^4./!2gŋO \
+P'G^OLzaIfd@qGB\xYe=0 +Xu,A o]Qk@3
מo4Zm{mZR_]hB߱c#\qE-	WT)X-$Z#nе)^Zȫ:	y \
3X3 yZJ{QX_ [Wz&B)e(|dW@^ y08n3! \
:@HC`ۚ!l} o߉>dYBr(?TAIԬL \
qZ_}#3sƷ۪VZ!aD#6H>&Aa	2+e!wv؉u2ғN4&O \
,VUQɱS'էŶ>?vfqt`\$6+\*:eTضi;ŦM;01W \
#q,rATG|(IgĐwNڕr.F&DC*<h&  \
UDh}0v^~lݺk6lE24d08Zk&݅ }XJбy_"CtV- \
Ib8aX	wMኝĺQY\F%Ht8a 0B f5%M@`RQPS+P
()
)Khid Sb16#bI=K8 \
3@V"y&30k3ֳ@-ub='vep?mYxpIuȫn \
r0PBߟk`Ig&f@\iThcz3\`;߳C()Zi %3I[H9l^ \
O8BpP0 O B<D`YI(@,irFS,RA.vU \
Xa~:L'gWG>ߜ)J+&xݽ[(*nbVhCņ' \
=H[DKiLWz+`3wuJ+zIh-?L^?i*B9&D`@VMimW;-WG+ \
lN^ \]8Xߟ&)<N9&/ԥ'r@z(wmP9[I 'kVsD.R

&ߗ4a9lӄ2, 7o L%*XdF^]Β \
$GNZ.Y*YS	HG^hAXݰJu9$azI~ \
@	pWm@_sx~R(5n4nt^JX= ;pe Ge  @D \
APFvg=6 B҈*5Xe}@<T*5Xn|)%Af@#QDв`	Д2Fɹ*hBZCYXAY('PJiM=_ra!K:}RF)+046r{b	cuӲ \
+pPGԅ婢L.倲@@WR2 \
z/Q(6pcME1i_.ǾR-HHu{@	WQ8IKl!Rϒ'; \
B)R!tkˀ 2 Wт|bp
*18<ў8Հt
dIre_tC!ThMꂯ˦B/Bc'.
5M p;pay*j恑SSÞF-IS>$@j	:ߤ<IRv֢0`b \
2ߩc b6qˮ3?r )z_ҫsppf>O')n1/ˊ\ЊY	
+Z_{譜k!M,'f \
HO6<g/?gIw&	YewO~[\\:FND4ItI$7Yl \
uIsijґ|V\ęGqkgV0Pk$"$Q1??o_G+fkV
 |;W EFh,"P s%7<]̑yGȜ{tx<u 
/cF"rռcoNoc \
RjFx?[;u2?N5a;"˺FBkTSLHw=sáW`f \
6',ZsΙ	L;ÃK@h	!\I܍?+1*Y40=sT \
                tρcqg4#[^ 55H~G]j5a
- 	![%ܳF@ݑ@WcܹY82^}|ٔhtڍKD	3ٕb!EO<po۷	w8	E?@=W)g \
?T*V2-!$@#ޘȡ Μ<Z:PTs B\(~C:)#rtÖ%|l|] \
+@`#g	^7e|09A#Ѣx<ُ^y_N֩7V$.HcJ5=J_4kym2 \
=Gf}PWv~kߒ0=m{56=sÄ	ߦu_%|	#F(XX(@|{R\un(Dv&"I \
Da y_o}s=-,qFɱSiV:"d+
U}Aa9ص=,ħ
<ʼn!;LvT[pR DL$j^{4/-O/?b[͖hͯ8^<PgΞ
7=R.TKB +λx';XkOqG|V*Ȳ̾^8~_7)U!=I.hb^M\CC[޽{6o܀ \
og\IENDB` \
 \
interview/PaxHeaders.3334/interview.qrc \
0000644000000000000000000000007413037674712015305 \
x \
ustar00 \
 \
30 \
atime=1491926854.175482104 30 ctime=1491926853.311473022
 \
 \
 \
 \
 \
interview/interview.qrc \
0000664000175000042560000000026213037674712015256 \
0 \
ustar00hplisa \
00000000000000 \
<!DOCTYPE \
RCC><RCC version="1.0"> <qresource prefix="/">
	<file>images/folder.png</file>
	<file>images/services.png</file>
	<file>images/interview.png</file>
</qresource>
</RCC>
 \
 \
 \
interview/ \
PaxHeaders.3334/interview_rc.py0000644000000000000000000000012713073204461015621 \
x \
ustar00 \
 \
29 \
mtime=1491929393.64225832 29 atime=1491929412.80246079
29 ctime=1491929393.64225832
 \
 \
 \
 \
inter \
view/interview_rc.py0000664000175000042560000010156213073204461015600 \
0 \
ustar00hplisa \
00000000000000 \
# \
-*- coding: utf-8 -*-

# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.8.0)
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore

qt_resource_data = b"\
\x00\x00\x00\xae\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x10\x00\x00\x00\x10\x04\x03\x00\x00\x00\xed\xdd\xe2\x52\
\x00\x00\x00\x0f\x50\x4c\x54\x45\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\
\xc0\xff\xff\xff\x00\x00\x00\x63\x34\x8b\x60\x00\x00\x00\x03\x74\
\x52\x4e\x53\x00\x01\x02\x0d\x63\x94\xb3\x00\x00\x00\x4b\x49\x44\
\x41\x54\x78\x5e\x3d\x8a\xc1\x0d\xc0\x30\x0c\x02\x1d\x89\x01\xba\
\x8b\x3d\x40\x54\xb3\xff\x4c\x05\xa7\x0a\x0f\x74\xe6\x1c\x41\xf2\
\x89\x58\x81\xcc\x7c\x0d\x2d\xa8\x50\x06\x96\xc0\x6a\x63\x9f\xa9\
\xda\x12\xec\xd2\xa8\xa5\x40\x03\x5c\x56\x06\xfc\x6a\xfe\x47\x0d\
\xb8\x2e\x50\x39\xde\xf1\x65\xf8\x00\x49\xd8\x14\x02\x64\xfa\x65\
\x99\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
\x00\x00\x0f\x46\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x0f\x0d\x49\x44\x41\x54\x78\x5e\xed\x59\x6b\x8c\x5d\xd5\
\x75\xfe\xf6\xde\xe7\x71\xef\x9d\x3b\xef\xf1\x63\x3c\xb6\xf1\x03\
\xd7\x26\x71\x4a\x00\xf3\x74\x48\x69\xa0\x4a\x2a\xa0\x2a\x0d\x4a\
\xfa\x08\x2a\x6a\x22\x88\x4a\xab\xfc\x48\x2b\xda\x2a\x6a\x23\x35\
\x6a\xa4\xa8\x08\xa5\x69\x95\x36\x11\xa4\xaa\x5a\x29\x09\x55\xab\
\x42\x4b\xd3\x90\x80\x08\x84\x18\x30\x18\x1b\x1b\xdb\x78\xec\x71\
\xb0\x87\xb1\xc7\xf3\xba\xcf\x73\xcf\x63\xef\xdd\xb5\xf6\x39\xb9\
\xba\x62\x62\xe1\xab\x3e\xa4\x4a\x5d\xa3\x4f\xe7\xfa\xce\xd9\xde\
\xdf\x5a\xdf\xb7\xd6\xdd\xe7\x8e\xf8\xdb\xaf\x3d\x2c\xf0\x7f\x38\
\x24\xfe\x7b\xe2\xff\x13\xb0\xd6\x0a\x63\x4c\xc1\x07\xf6\x7f\x2d\
\x01\xde\x98\xd0\xf7\xc6\x05\x61\xc5\x00\x85\x17\x94\x4c\xa5\x52\
\xd1\x52\x3a\x4a\x82\x60\xff\xc7\x12\x60\xc2\xbc\x31\x93\xf0\x3c\
\xcf\x84\x61\xa8\x01\x5c\x6c\x63\xdb\x5b\xe1\x2c\x83\x07\x0a\xe5\
\x87\x66\x60\x60\x20\xab\x56\xab\x19\x91\xb6\xe7\xe7\x66\x37\x1f\
\x3a\x74\x68\x6f\xbb\xdd\x1e\x55\x4a\x59\xba\xf5\x92\x7a\xd3\xeb\
\xb7\xca\x44\x38\xf3\x7d\x5f\xd3\x15\x69\x9a\x62\x71\x71\x71\xbc\
\xd1\x68\x4c\x4c\x4d\x4d\x9d\x02\x90\x32\xd1\x9e\x35\xfc\x5a\x50\
\x18\x5a\xc3\x00\x91\xd3\x51\x14\x89\xe5\xa5\x85\xb5\xd3\x6f\x4e\
\xdf\x78\xe2\xe4\xcc\x0d\x47\x4f\x9e\xb9\xe5\x7c\x2d\xda\x11\x2d\
\xcf\x8f\xdf\xb4\xf7\xa6\xbf\xf8\xdd\x4f\xdf\xfb\x99\x34\x6d\x28\
\x40\xea\xff\x4a\x02\x16\x85\x94\x41\x10\x58\x26\x00\x8a\xc5\xe5\
\xda\xe0\xb9\x93\x27\x2f\x7f\xfd\xc8\xd1\x5b\x8f\x1d\x3f\xfd\xa1\
\xf3\x2b\xd1\xfb\x16\x97\x16\x37\xde\x74\xdd\xd5\x5f\x7b\xe0\xbe\
\x7b\xee\x8f\x5a\x0d\x9f\x48\x66\xac\x0c\xd9\x02\x9e\x04\x92\x24\
\xc1\xd2\xca\xd2\xc4\xe9\x53\xa7\xaf\x3e\x7e\xf4\xe4\x07\x8e\x4d\
\x9f\xfe\xb9\xd9\xe5\xc6\xfb\xa2\x28\x1e\x45\x65\x0c\x18\x5c\x0f\
\x6c\xdd\x61\x30\x34\x83\xc3\x27\xcf\xef\x69\xb7\x13\x28\x52\xa5\
\x97\x47\xbf\x09\xd8\xa2\x72\x96\xad\x32\x37\x37\x37\x45\x84\x7f\
\xe1\xc4\x89\x99\x1b\x4f\xcc\x9c\xbd\x65\x51\x57\xb6\xdb\xf2\x3a\
\xd8\xf1\x6b\x81\xf7\x6e\xb1\x68\xce\xe2\xd5\x03\xff\xf4\x2b\xcb\
\xb5\xc6\x1f\x4d\xad\x1b\x5f\xa4\x0a\xb3\x32\x63\x67\xcf\x9e\xdd\
\xfd\xc6\xe1\x37\x7f\xfe\xd4\x99\xb7\xaf\xff\xf1\xfc\xf2\xf5\xcd\
\x44\x8e\x21\xa8\x02\xc3\x9b\x81\xa9\x35\x40\x38\x68\x20\x3d\x0b\
\x93\x09\x40\x59\x40\xc2\x2f\xfb\x9e\xef\x0b\x48\x78\x3a\xcb\x32\
\xd9\xcb\xa7\x9f\x04\x04\xfb\x92\x88\x54\x1f\xfa\xca\x23\x8f\xcf\
\xcc\x2d\xde\x90\x8a\xb0\x2c\x36\x5d\x8b\x81\xab\x6f\x43\x95\x08\
\xc4\xd6\xd7\x71\x7d\x01\xe8\xd4\x25\x2a\xeb\x75\xc7\x60\xe2\xe9\
\xef\x3e\xf9\xc9\x4a\xa9\x52\x3f\x78\xe4\xf8\x9d\xb3\x17\x1a\x57\
\x2d\x99\xca\x24\xc2\x11\x60\xcd\x6e\x60\xd7\x24\x50\x1a\x66\x22\
\x1a\x49\x4b\x22\x6b\x0a\xa4\x1d\x89\xa4\x03\x08\x05\x0c\x84\x06\
\x5e\x09\x26\x31\x41\xbd\x5e\xaf\xea\x34\x2e\x0f\x0f\x0f\x2f\x0b\
\x21\x32\x67\xc5\x8b\xc4\x4f\xfd\x20\x2b\x9a\xd3\x50\x15\x27\xff\
\xe4\xe1\x47\x5e\xc1\xee\x4f\x4c\x7a\xc3\x13\x1a\x61\x15\x49\x66\
\x64\xa3\xd9\x16\x88\x96\x40\x04\x00\x93\x71\x47\x42\xce\x1f\x83\
\x5c\x78\x03\x59\x65\x3d\x30\xba\x0d\x18\xbf\x8c\x2b\x0c\x58\xab\
\x91\x75\x88\x2c\x41\xc7\xc2\xdd\x6f\x5d\xb1\xf3\xb5\x51\x07\x88\
\x6b\x40\xd2\x00\x1a\xb3\x10\x8b\x33\xcd\x0d\xeb\xd7\x9e\x6f\x34\
\x5a\x1b\xef\xbe\xeb\x8e\xdf\xfe\xf0\x6d\x7b\x1f\x6d\xb5\x5a\x9e\
\x94\x52\x5f\xaa\x02\x5d\xb9\x68\x42\xac\x94\x95\xdf\xb1\x63\x23\
\x5c\x71\x99\x45\x2d\x11\xa5\x16\xd0\x09\xe0\x57\x10\x54\x06\xc1\
\x8d\x29\xbd\x00\x58\xbf\x15\x2d\xdc\x01\x24\x5a\x23\x6e\xd0\xb5\
\x29\xd1\x5e\x16\xb0\x5a\x01\xc8\xab\x1c\x0c\x00\x3a\xcb\x09\xd7\
\xcf\x01\x8d\x79\x20\x33\x58\x33\xa0\xb0\x79\xe3\x5a\xac\x1b\xdf\
\x4a\x7b\xde\x51\x1d\x99\x58\x5f\xde\xff\xc2\xf7\xd4\x5b\xb3\xe7\
\xae\x57\xbe\x7a\xb4\x9f\x26\xb6\x14\x42\x29\x65\x28\x7c\xf2\xfe\
\x16\x9d\xb4\x94\xec\x64\xc4\x57\x40\xca\x00\x5e\x20\xe1\x79\x83\
\x30\x90\xac\x06\xa2\x38\x85\x6e\xb5\x80\xb4\x9d\xab\xa1\x33\x05\
\xa9\x00\x21\x80\xa0\x0c\x17\x3a\x02\x1a\x0b\x40\x8d\x48\xeb\x0e\
\x06\x43\x60\xdb\x9a\x21\x6c\xd9\x7d\x0d\xb6\x6f\xdf\x89\x91\xf1\
\xf5\xf0\xc8\x3e\x64\x59\x42\x03\xe5\x72\xd9\x28\x3f\x54\x41\x49\
\xd4\xac\xb6\xfd\x4c\xa1\xc2\xfb\x71\x5a\xf9\xca\x5f\x7d\xfd\xb1\
\x23\x33\x73\xbf\xa8\xc6\xb7\xdb\xaa\xd1\x56\x5a\x21\x84\xf2\x61\
\xac\x44\x23\x36\x48\xc9\x3e\x26\x8d\x41\xf6\x80\x0b\xe9\x03\x61\
\x09\x1c\xee\xbd\xc6\x32\x81\x08\xc7\x2b\x08\xac\xc6\x65\xc3\x21\
\xb6\xbd\x77\x03\x76\xee\xd8\x89\x75\x93\x97\xa1\x32\xb4\x16\xd2\
\x93\x88\xa3\x18\x9d\x4e\x07\x34\xff\x91\x26\x11\x4f\x2c\x56\x55\
\xc6\x51\x0b\xd5\xc9\xb1\x53\xb4\xeb\xa5\x27\xc0\xd5\xa7\xc5\xb6\
\x3e\x3f\xbf\x76\x66\xa1\x71\xdd\xf0\xcd\x0f\x88\x74\x60\x5c\x24\
\xec\xd9\x0c\x80\xb1\xb0\x36\x03\x8c\x81\x12\x16\x86\x2b\x5c\x2a\
\x81\x18\x10\x88\xf0\xd2\x1c\xd0\x3a\x0f\x99\x65\x98\x1a\x54\xd8\
\xb6\x69\x0c\x3b\xb6\xee\xc5\xa6\x4d\x3b\x30\x31\xb9\x91\x08\x57\
\xa0\x8d\xa6\xe4\x23\xc4\x71\x8c\x2c\x72\x8a\x41\xc0\x82\x54\x47\
\xa6\x7c\x28\x99\x80\x49\xf3\x67\xcc\xc4\x90\x77\xb6\xdf\xcf\x01\
\x4e\x02\xa1\xaf\xda\x95\x72\xb5\x2e\x46\x86\x26\xb2\x44\x43\x2a\
\x1f\x90\x02\x96\xbd\xae\x3c\x68\xcd\xfd\xdb\x26\xc2\xa7\x81\xfa\
\x19\xa0\x55\xc3\x44\x68\xb0\x7d\xdd\x30\x76\x5e\xf5\x7e\x6c\xdd\
\xba\x03\x6b\x36\x6c\x45\xa9\x32\x02\xab\x14\x34\x91\xed\xc4\x1d\
\x64\xed\x16\x84\xd0\x30\xc6\x38\x92\x12\x12\x90\x12\x5a\x6b\x26\
\xdd\x85\x15\x96\xa0\xb9\xb7\x84\xb5\x7d\x58\xa8\x98\xfb\x08\x4a\
\x95\xa6\xd0\xb1\x02\x79\x5f\x95\x07\xac\xf4\xaa\x22\xf5\x43\x74\
\x56\x96\x91\x2d\xbf\x0d\x49\xd3\x62\x38\xad\x61\xcb\x58\x09\xdb\
\x77\x4d\xe1\x8a\x9d\x1f\xc4\xba\x8d\xdb\x51\x1d\x59\x0f\xbf\x5c\
\x46\x12\x25\x48\x74\x82\x38\x89\x61\xb4\x81\xe5\x0a\x13\x84\x14\
\x30\x42\xc2\x66\x16\x85\x35\x9c\x25\x01\x4d\x40\x9e\x94\x92\x60\
\xdf\x1b\x52\x51\xa9\x50\x53\x02\xfd\x2b\x50\x0a\xbc\x28\x90\xb2\
\x13\x29\x0d\x29\x4b\x68\xbf\xf5\x06\xbc\x95\x69\xec\x64\xc2\x53\
\xeb\xc8\x16\xd7\x62\xe3\xe6\xcb\x31\x36\xb1\x99\x08\x0f\x82\x23\
\x62\xff\x92\xec\x49\xad\xd6\x3d\x14\xb9\x83\x99\x85\x4b\x00\xd6\
\x38\xf2\xc6\x00\xc2\x33\x40\x9a\x13\x56\xd2\x22\xd1\x79\x12\xdd\
\x04\x8c\x15\x26\x33\xf0\x02\xcf\x30\x1f\x6b\x15\x33\xbb\xb4\x04\
\x8c\x94\x10\xd6\xb3\xa5\x40\x2d\x75\x62\x8d\xa8\x3d\x27\x76\x65\
\xc7\x70\xef\xa7\x3f\x85\xb1\xc9\x6d\x18\x1a\x59\x0b\x78\x9e\xf3\
\x70\xda\x49\x9d\x9f\x75\xa6\x9d\xad\x84\x15\xae\x99\xa5\xc8\xab\
\x6e\xb4\xb3\x0a\x13\x72\xe4\x85\x30\x50\xd6\x42\x1b\xf4\x06\xdf\
\x9f\x6b\x60\xf3\xff\x83\x49\x67\x26\xe3\x66\xce\xf8\xb5\x94\xbc\
\x40\x5c\xda\x69\x54\x68\xcd\x63\x94\x7a\x33\x5c\x60\x3b\x99\xa8\
\x8d\xcb\xdf\xb3\x07\xef\xb9\xe6\x43\x28\x0f\x8c\xba\x29\x11\xb7\
\x5a\xb0\x69\x0a\x0e\x25\x15\x04\x93\x96\x92\xb8\x33\x49\x91\x5b\
\xc5\x48\xbe\xe6\x10\x39\x14\x6c\x5e\x20\x4f\x38\xa2\x42\xf5\x90\
\x12\x70\xeb\xac\x50\x30\xd6\xd0\x12\x0d\x4f\x95\xe2\xc2\x42\xf6\
\x92\x8f\xd3\x3c\x89\x98\x8c\xaf\x44\xdb\xea\x14\xfe\x60\x19\x06\
\x06\x59\xdc\xc9\x49\x28\xe5\x40\x2c\x1c\x69\x0b\xc5\xe4\x72\xf2\
\x46\xc0\x53\xce\x1a\x2c\x52\x41\xbc\x9b\x04\xab\xe0\x92\x80\x2e\
\x76\xee\x55\xa2\xa0\xe8\x14\xb3\xb9\x85\xfc\xc0\xef\x58\x61\xfb\
\x7e\x1e\xc8\x15\x08\xbc\x3a\x4c\x87\x27\x81\xe5\xf9\xef\xf9\x9e\
\xf3\x67\x17\xb2\x80\xcf\x57\x47\x3e\xdf\x9c\x29\x4a\x95\x2b\x00\
\x26\xfe\x0e\x78\x0e\x17\xdd\xbd\xb0\x1c\x5b\x28\x93\x2a\xe8\x08\
\xad\xfb\x6e\x62\x56\x80\x13\x68\x9a\xfc\x43\xc5\x86\xa1\x27\x20\
\x3d\x48\x91\x5b\x44\x4b\x01\x69\x4c\x57\x7a\x2b\xad\x03\x0c\x60\
\x33\x77\x75\x4a\x18\x2b\xf2\xc4\x7a\xfd\xab\x1d\xba\xa1\x8d\xc0\
\xaa\x49\x68\x8d\xf0\x90\x2d\x8c\x0e\xf9\x3f\xce\x4c\xfe\x5e\x3f\
\xc7\x69\x2a\xb8\x42\x39\x0c\x9b\x26\xa2\x04\x44\x60\xbd\x40\xe4\
\xd5\x56\xd2\x4d\x04\x69\x6d\x57\x3b\xab\x2d\xab\xc0\x57\x47\xbe\
\xe0\x9a\x2b\x20\x6c\x4e\x5e\xa0\xab\x86\x16\xc5\xd8\x5c\x5d\x38\
\x58\x93\xdf\x9f\x26\x29\x3c\x89\x4e\x39\xf4\x1b\x26\x2f\xd4\xa5\
\x27\xc0\x1b\xc3\x00\xe5\x72\xd8\x40\xab\x03\x19\x7a\x28\x12\x00\
\xc0\xbe\x77\x1e\xcd\x6d\x90\x00\x50\x39\x1f\x93\xb8\x89\xd3\x5b\
\x49\x97\x84\xb1\xfc\xda\xa0\x27\xba\x6b\x56\x9d\x73\x44\xbe\x2e\
\xcd\x52\xde\xcf\x0a\x0a\x26\xdf\x97\x85\xa4\x34\x96\x02\x61\x39\
\x6c\xa2\xd3\x84\x32\x2c\xa0\x9f\x37\x6f\xa0\xd8\x12\x8e\x80\xab\
\x4c\xd0\x25\x0f\x19\x14\x2a\x58\x0b\x93\xba\x64\xba\x00\xf2\x46\
\x5e\x5d\xf8\xd5\xe3\x94\x15\xce\x92\x0e\xdb\x20\xe3\x24\xfa\x7f\
\xa8\x47\x4e\xae\x5a\xaa\x2e\x00\x59\x2a\xa5\x14\xee\x59\xd6\x53\
\xe0\x1f\xcf\xf3\xf8\xca\x09\x15\x8a\x48\x47\x5e\x68\x41\x58\xdd\
\xb0\x4a\x75\x39\xb8\x24\xba\x61\x7a\x49\xdb\xde\x7e\xe0\x1e\x80\
\x1f\xfa\x9a\x13\xa0\x40\xff\x09\x70\x13\x57\xbc\xc8\xc4\x6d\xeb\
\xf9\x40\x10\x06\x8e\xb0\x5f\xf2\x73\x78\x7e\x9e\x88\x52\xf9\x28\
\x35\x6e\xf2\xac\x9e\x34\x1a\x6e\x74\x5e\x4a\x58\xe4\x3d\x20\xa5\
\x3b\xa1\xb2\x9a\x19\xa4\x87\xbe\x15\x70\x1d\x9f\x65\xa0\x47\xc3\
\x65\xc4\x1d\xc3\x0a\x94\xc2\x92\x9b\x40\xac\x44\x20\x03\x04\x41\
\x50\xbc\x96\x90\x46\x82\xb9\x76\x67\xbd\x91\x3d\x89\xbc\xc3\x36\
\x0a\xab\x42\x1b\xb1\xba\x07\xd2\x88\xf6\x2a\x35\x58\x65\x9e\x8a\
\x7d\xf5\x40\xf7\x3c\x54\x2a\x35\xac\x8e\x02\x58\x6e\xe2\x12\x7c\
\x29\x01\x25\x41\x02\xc0\x66\x40\x23\x51\x44\xd0\xb2\xdf\x60\x09\
\x9e\xd0\x94\xb7\x80\x32\x06\x46\x17\x16\xc9\xb9\x15\x2a\x68\xd8\
\xd4\x42\x5a\x43\xf7\x59\x58\x41\xb0\xd6\x59\x28\xcb\x27\x50\xd7\
\x4a\x69\xca\x4d\xac\x1a\x12\x3d\x5f\x72\xf5\x61\x21\x4b\x81\x81\
\xc1\x81\xba\xb0\x3a\xf3\x7d\x0b\xbf\x52\x46\x29\x00\x86\x2b\x84\
\x12\x30\x34\x00\x0c\x96\xc0\x36\x72\x92\x7b\xc5\xf4\x62\xeb\x09\
\x9f\xe5\x00\x63\x75\xd3\xb2\x20\x17\x2b\xa8\x70\xfd\x50\x9c\x88\
\xf9\xf3\x47\xd4\x85\x12\xef\xaa\x80\xbc\x88\x02\x4c\x2e\xe5\xef\
\x1d\x8c\xce\xdc\xe3\x1e\xe5\x80\xb2\x07\x94\x40\x10\x40\xd9\x07\
\x94\x57\xf4\x80\x52\x10\xc5\x0f\x32\xac\x0a\xae\x7a\x2f\x51\x28\
\x82\xec\x36\x70\x0e\x63\xbb\x4d\x1c\x45\x31\x86\x07\xfc\x69\x5f\
\x89\x2e\xc7\xbe\xa7\x90\x1f\x96\xa3\x52\xe0\x2d\xe8\x48\xf3\x48\
\x75\x7b\xfa\x16\x08\x02\x40\x09\xc0\x57\x80\x97\xfb\xfe\xe2\xe3\
\x51\xa1\x38\x49\xa2\x4b\x94\x93\xb1\x6c\x21\xed\x08\xaf\x52\x80\
\xef\xcf\x92\x04\x81\x27\x3b\xae\xa7\x20\xfb\x9e\x42\x96\x17\x29\
\xa5\x52\x21\x74\x07\x1e\x1f\x6b\xcb\x80\xe5\x0d\x08\x32\x07\xac\
\xbb\xba\x20\xa9\x57\x1f\xcc\x14\x1c\xd1\x82\x7c\xd7\xc5\x1a\x62\
\xb5\x02\x70\x0a\x14\xf7\x2a\x31\x38\x3c\x8a\xf3\x8b\xd1\x9e\x38\
\xd5\x80\xc9\x74\xdf\x0a\x64\x49\x86\x72\xe8\xc7\x65\x5f\xb4\x74\
\x12\x43\xf9\x21\x54\xf7\x88\x00\x68\x4d\x00\x90\xea\x82\xaf\xcb\
\xa6\xb0\x8a\x07\x42\x2f\xf9\xe2\x8a\x42\x01\x63\x8a\x27\x2e\xc3\
\x0a\x14\x0f\x35\xca\x4d\xb6\x20\xac\x70\xe1\xe4\xd6\xed\x3b\x70\
\x61\x79\xf9\x2a\x6a\xe6\x81\x91\xb1\x11\x53\xa8\xf7\xee\x53\x88\
\xad\xc3\x9e\x1e\x1e\x1e\x10\xb5\x46\x2d\x49\xa3\xa8\x93\xb5\x53\
\x3e\x89\xf2\x9e\x82\x00\x24\x40\x6a\x09\x3a\xbf\xdf\xa4\xce\x12\
\x8e\x3c\x49\x96\xff\x52\x76\x15\x80\xd6\xa2\x98\x30\x05\x60\x9d\
\x62\x9e\xf0\xa0\x32\x05\x0b\xdf\xa9\x63\xac\xe1\x05\x20\xd2\x62\
\xc3\xd4\x36\xb3\x71\xcb\xae\xa9\xbf\xff\xe6\xe3\xbf\xfa\x33\xdb\
\xd6\x3f\x72\xd3\x0d\xd7\x29\x7a\x5f\x17\xcf\xd2\xab\x12\xe8\xfa\
\x73\x70\x70\x10\xcd\x66\xd3\x3e\xf1\xef\x4f\xa9\x27\xfe\xed\x29\
\xbd\xb4\xb4\x9c\x6e\xba\x31\x2f\x1f\x17\xcb\x8a\x5c\x81\x84\xd0\
\x8a\x59\x09\x0d\x2b\xf3\xb5\x5a\x08\xe7\x5f\xe3\xa1\x7b\xa4\xe8\
\xad\x9c\x14\x92\x07\x83\x6b\xf8\xee\x9e\x01\x21\x4d\x91\xe9\x2c\
\x27\x66\x14\xfc\xa0\x0c\x48\x4f\xec\xb9\xee\x36\x3c\xf6\x0f\x0f\
\x7f\xe9\x99\x67\x9f\xfb\xc1\xf3\x2f\xec\x3f\xf1\xe0\x67\x1f\x90\
\x49\x92\xd8\x77\x26\xe1\x11\x09\xfe\xe6\x59\x94\xcb\x65\xfb\xe4\
\x77\x9e\xc6\xe3\x4f\x7e\xd7\x5b\x5c\x5c\xaa\x16\xb3\x02\x3a\x8d\
\x1d\xa1\x0e\x13\x46\xee\xfb\x4e\x02\x44\x89\x85\xce\x34\xab\xc0\
\x49\x74\x49\x9b\x24\xff\x37\x05\xab\x59\x6c\xe6\x75\x49\x73\x92\
\x69\x6a\xc1\xa3\xd2\x91\xa1\xa4\x7c\x56\xb4\x13\xa1\xd6\x5c\xc4\
\x99\xd3\x47\x71\xe4\xe0\x8b\xf6\xf4\xf4\x6b\x67\xa3\x56\xe3\xf1\
\x30\x50\xfe\x6b\x87\x8e\x94\x1f\xfa\xf2\xdf\x24\x9f\xfd\xcc\xfd\
\x86\x15\x22\xce\xdd\x24\xbc\xd1\xd1\x51\x31\x3f\x3f\x6f\xbf\xf8\
\xe7\x5f\x95\x47\x8f\x1d\x2b\x01\x18\xa5\x8d\xa7\x88\xd8\x66\x00\
\x6b\xd2\x56\x0d\x7c\x3b\x57\xbd\x93\xc2\x45\x9a\xc1\x91\xd7\x46\
\xc3\x68\xe3\x2c\x22\x8a\xc6\x50\xa1\x02\xff\x20\x73\x25\xe8\x12\
\x37\x3c\x5d\xe2\xcc\x91\x0e\x02\x01\x81\x90\x8a\xd2\xc4\xdc\xec\
\x0c\x8e\x1f\x79\x11\x47\x0f\xfe\xc8\x9c\x7b\xfb\x74\xb4\x78\xe1\
\xdc\x1c\x11\x3c\x0e\xe0\x75\xc2\xab\x84\x0a\xf1\x19\xd9\xff\xea\
\xc1\x95\xdf\xfb\xc3\x2f\xc4\x7f\xf0\xfb\xbf\x63\x46\x86\xaa\x22\
\xcb\x72\xd5\xbc\x63\x6f\x4e\xdb\x6f\xfc\xdd\x63\xf2\xc4\xf4\xf4\
\xa0\x52\x6a\x1d\x11\xdf\x46\x78\x3f\x80\x5b\x08\x3b\x75\xbb\xc1\
\x9b\x32\x3f\x4e\xc0\x35\x61\xa2\x8d\x3b\xf2\x22\xcb\xba\x95\x46\
\x10\x42\x16\xa3\x86\xe9\xc1\x87\x6b\x54\x53\x4c\x1a\xcf\x18\xa8\
\x90\x48\x77\x9a\x98\x3d\x73\x12\xc7\x0e\xef\xc3\xa1\x57\x7f\x60\
\x66\x8e\x1f\x20\xd7\x36\x16\x01\x9c\x27\x2c\x10\xe6\x89\xd8\x05\
\x5a\x73\xce\x99\x17\xbc\x94\x8d\x09\xb9\xbc\xb2\x4c\xeb\x3b\x10\
\xc3\x83\xac\xa6\x4b\x40\x14\x93\x68\x80\xb0\x81\x09\x13\xd8\xf5\
\x1f\x21\x5c\x49\x10\x03\xd7\xdc\x8d\x3f\xfd\xdc\x17\xf1\xc1\x2b\
\xb6\xa1\xde\x31\xf9\x89\xd2\x2a\xa8\xa2\xfd\x59\xce\x34\xb1\x30\
\x3d\x73\x54\xc2\x74\xa7\x0e\xf9\x16\x0b\xe7\xcf\x81\xaa\x8b\xe9\
\x63\xfb\x71\xe0\xc5\x67\xcc\xc9\xe3\xaf\x34\xea\xf5\x9a\x23\x5b\
\x10\x5e\x02\xb0\xcc\xa0\x35\x35\xbe\x16\xbf\x9b\xe5\xa4\x48\x01\
\x7e\xb0\x89\xef\xf9\xb5\xbb\xf5\x47\xef\xba\x5d\xd4\x6a\x35\x84\
\x61\xe8\xbe\x19\x11\x14\x15\xb6\x0d\x2d\xbc\x02\xc0\x1e\xc2\xad\
\x84\x9b\x09\x21\x01\xc1\xae\x5b\xf1\xb9\xcf\xff\x25\xee\xdc\xb3\
\x0b\x46\x03\xe3\xc3\x40\xc5\xcf\xdd\x91\xa4\x40\x9b\xc0\x57\x63\
\x00\x15\x00\xda\x00\x17\xea\xc0\xdc\xb9\x59\x9c\x38\xf2\x32\x5e\
\xd9\xf7\x7d\x1c\x7c\xe5\xd9\x94\x12\x68\x74\xda\x8d\xa5\xa2\xd2\
\x17\x08\x4b\x44\x9c\x09\x33\xd9\x95\x82\xf4\x62\x0f\xf8\xbd\x16\
\x21\x45\x4f\x3c\x70\xff\x6f\xd9\x1d\xdb\xb7\x8a\xc7\xfe\xf9\x09\
\xdc\xfd\xcb\x77\x38\x05\x86\x09\xe3\x45\xc5\x3f\x40\xb8\x3d\x57\
\xa2\x88\xe1\x29\xdc\xff\x67\xdf\xc2\xe7\x3f\xba\x17\x81\x0f\x54\
\x2a\xf9\x13\x56\xd2\x01\x32\x2d\x21\x24\x90\xa6\x40\x23\x01\xde\
\x98\xa9\xe1\xc8\xa1\x1f\xe2\xe5\x17\x9e\xc2\xc1\x97\xbf\x9f\xce\
\x9c\x3c\x5a\xd3\x3a\xbb\x50\x54\x73\xb1\x20\xbd\x42\xa4\x99\x5c\
\xb7\xea\x28\x7e\xd7\x43\x3a\x29\xec\x23\x72\x74\xc3\x96\xcb\x25\
\x7c\xe9\x0b\x7f\x6c\x0f\x1c\x7c\x5d\xb0\x0a\x02\xc0\x10\x2b\x40\
\x60\x05\xae\x23\xfc\x12\xe1\x67\x09\x5e\xb1\x18\x37\xdc\xf7\x65\
\x7c\xe3\xc1\x07\x30\x39\xa6\x88\xb4\x41\xb9\xcc\x23\xd1\xa2\xd6\
\x10\x78\xe9\xf0\x3c\x0e\x1f\xd9\x8f\xd7\x5e\x79\x1e\xfb\x5f\xf8\
\x4e\xfa\xd6\xa9\x37\x56\x92\x24\x2e\x48\x63\xa1\xb0\xc7\x4a\x8f\
\x35\x96\x18\x3d\xa4\xeb\xdd\x4a\x5f\x84\x34\xa1\xdb\x6b\xc6\x18\
\xfb\xeb\x1f\xbb\xcb\x12\x79\xf1\xfc\xbe\xfd\xee\xcd\x12\x6d\x32\
\x01\xe0\x1a\xc2\x3d\x84\x47\x08\xaf\x11\x66\xe9\x7d\x96\x50\x57\
\x76\x7f\xd8\x7e\x6b\xdf\x92\xa5\x30\xf5\xba\xb5\x07\x0e\x9c\xb3\
\x0f\x3d\xfc\x6d\x7b\xdb\x1d\xf7\xd8\x35\xeb\x36\xf0\x3d\x73\x84\
\xc3\x84\xa7\x09\xdf\xa6\x75\x5f\x25\x7c\x11\xc0\x83\x84\xfb\x09\
\x1f\x23\xdc\x46\xb8\x8a\xb0\xa5\x28\x58\x58\xf4\x9f\x28\xae\xea\
\xdd\x40\x7c\xdc\xfd\x7b\xae\xbe\x52\x5c\x75\xe5\x6e\x97\xa8\x28\
\x16\x04\x44\x76\x0c\xc0\x26\x22\xb9\x1b\xc0\xb5\x84\x49\xc2\x44\
\x61\xaf\x0d\xd7\xde\x79\x5f\xf5\xae\x9b\x6f\xc4\xfe\x7d\xdf\xc3\
\x73\xcf\x3d\x13\x2d\x2c\xcc\x71\x46\x17\x8a\xc9\xb1\xd8\x53\x69\
\xe7\xe7\x1e\xf4\x56\x3a\x22\x64\xab\x2b\x0d\x8b\x55\xb1\xea\x7d\
\x41\x61\x39\xae\xd8\xb5\xcb\xfd\x3d\xe1\xec\xec\x2c\xc4\xa7\xee\
\xfd\x0d\x3c\xfb\xc3\x17\xc5\x89\x13\xd3\x21\x3b\x9e\x88\x4c\x12\
\x76\x91\x54\x5b\x01\x70\x52\xe3\x05\xd6\x10\xc2\x82\x44\x83\xbd\
\x4c\xe0\x24\x6a\x84\xe5\x5e\x7b\xf4\xf8\xbb\x97\x34\xba\xa4\x2f\
\x2d\xec\x4f\xfb\x93\x2f\xe3\xce\xdb\x3f\x62\x5b\xcd\x96\x68\xb6\
\x9a\x10\xff\xf8\xcd\xaf\x8b\x38\x8a\xed\x8f\x5e\x3c\x80\x7f\xf9\
\xd7\xff\x50\x67\xce\x9e\x0d\x0b\x89\x37\x11\xd6\x17\x3d\x52\x2e\
\x54\xf2\x08\x8a\x08\x4b\x42\xc2\x89\xbc\xc3\xd3\x2b\x05\xe9\xce\
\xbb\x90\xb6\xb8\x78\x88\x8b\x27\x03\x3b\x58\xad\xda\xdf\xfc\xc4\
\xc7\xed\x6b\x07\x0f\x8b\x4f\xde\xfb\x71\x88\x47\xff\xfa\xa1\x7c\
\x96\x56\x2a\xc8\xb2\xcc\xbe\xb4\xff\x10\x5e\xd8\xf7\x92\x38\x7e\
\xe2\xa4\x5f\xaf\x37\x06\x8b\x29\x55\x21\x84\x3d\x8d\xad\x8b\x49\
\xd1\x2e\x92\x68\x12\x62\x82\x5e\x4d\xba\x7f\x5c\xac\xf2\xc3\x43\
\x43\xf6\xd6\x5b\xf6\xba\x06\xde\xbd\x7b\x17\x36\x6f\xdc\x80\xff\
\x04\xff\xc2\x6f\x67\x0f\x9f\xac\x5c\x00\x00\x00\x00\x49\x45\x4e\
\x44\xae\x42\x60\x82\
\x00\x00\x0e\xa5\
\x89\
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
\x00\x00\x30\x00\x00\x00\x30\x08\x06\x00\x00\x00\x57\x02\xf9\x87\
\x00\x00\x0e\x6c\x49\x44\x41\x54\x78\x5e\xd5\x98\x09\x70\x5c\xc5\
\x99\xc7\xff\xdd\xef\x9c\x37\x33\x9a\x19\x49\xa3\xd3\x92\x65\x24\
\x5f\xb2\x8d\x65\x59\x46\x21\x60\x0c\xd8\x98\x04\x83\x8d\x31\x2c\
\x36\xbb\x1c\x89\x13\xee\x23\x04\x28\x07\x48\x20\x09\xbb\xa1\xcc\
\x19\xc0\xae\x85\x80\x01\xef\x72\x6e\x08\x64\xb9\x96\x6b\x09\x0e\
\xb1\x39\x22\xc2\xe1\xc4\x92\x6f\xc9\x92\x2d\x5b\xd2\x8c\x34\xd2\
\x9c\xef\xe8\xde\xae\xa9\xae\xcd\x14\x58\x15\x29\xae\x82\xf0\x54\
\xbf\xea\x7e\xfd\xd4\xd2\xff\xff\xf5\xf7\x7d\x7a\x1a\xb2\xfe\xc1\
\x47\x09\x8e\xe0\x7a\xe0\xbe\xbb\x2e\x35\x75\xad\xed\xfb\x97\x5d\
\xd3\x86\xaf\xe0\xa2\x47\xb2\x79\x42\x4d\x0d\x3a\xda\xb7\x5d\xf0\
\xc9\xa7\x9f\x3e\x18\x4f\x0c\x59\xc1\x60\x11\x08\x21\x5f\x1f\x03\
\x94\x2a\x00\xd0\x5f\x66\xa2\xe9\x27\x6b\x7e\x78\x13\x08\x25\xa6\
\xe9\xfb\xfa\x18\x90\xd1\x8e\xfd\xe1\xb6\xd3\x08\x80\xab\xae\xbc\
\x6c\xf5\xec\x60\x51\x11\x14\x85\x7e\x4d\x0c\x08\x00\x24\xab\x27\
\x94\xb8\x3f\x5b\x3e\x39\x38\x9c\x18\xfc\xd5\xee\x3d\xbb\x35\x9f\
\xe5\xff\xc7\x36\xc0\x39\xe0\x79\x80\xe3\x30\x00\x48\x6c\xde\x39\
\x68\xdf\x72\x76\x03\x14\xa0\xe5\x47\xd7\x5d\x75\x59\x49\x49\x29\
\x44\x2a\xfd\xe3\x19\x60\x0c\xc8\xd9\x1c\xc9\x14\xe0\xb7\x6c\x94\
\x95\x11\x00\x74\x60\x7f\x3c\xed\xc1\x0a\xe0\x83\x8b\xab\x01\xe0\
\xd6\x95\x67\x2f\x9b\xa9\x6a\x26\x5c\x97\x81\x73\xfe\xd5\x1b\xe0\
\x1c\x70\x1c\x20\x95\x06\x66\x4c\x05\x96\x2e\x09\x92\x93\x17\x04\
\xc8\xb1\xc7\xe4\xa8\xaf\xb8\x2a\x33\x90\x72\x01\x2b\x88\xb9\xcb\
\x67\xe0\xdc\xa9\xfe\x48\x32\x39\x7c\xcf\x79\x2b\x9b\x11\x2d\xad\
\x42\x2e\xe7\x81\x31\xf6\x95\x19\x90\xe2\x09\x8a\x82\x2e\x96\x9c\
\xca\xc9\x8c\x46\x85\x06\xac\x5e\x4a\xe9\x21\x05\xac\x47\x99\x33\
\x67\x7a\xcc\x35\x0c\x0a\x33\x82\xee\x69\x13\xf1\xf0\xa5\x8d\x28\
\x0f\x62\x51\x6d\x5d\xeb\x77\x57\x9d\x1b\x26\x73\x9a\xa6\xe5\xcd\
\x7b\x1e\xfb\x92\x0d\x48\xf1\xb6\x43\x60\xe8\x36\x8e\xff\xa6\x4e\
\xc2\x21\x87\x32\x16\x53\x38\x72\x0a\x85\xab\xda\x76\x46\xab\x9f\
\xe8\x4b\x19\x21\xcb\x80\x3f\x8a\x68\x71\x2d\x86\xa7\xfa\xf1\xeb\
\x6b\xbf\x89\xf8\x70\xe2\xd6\x39\xcd\x17\x55\xb5\xb6\x64\x85\x89\
\x46\x64\xb3\x9e\x34\xf1\x25\x1a\x70\x5d\x20\x5c\xe4\x60\xf1\x42\
\x8d\x58\xbe\xa4\x10\x3f\x42\x09\xb7\x55\x02\x47\x07\x71\x0d\x3b\
\xe7\x18\x53\x1b\xdc\x4c\x51\x79\xd8\x43\xa8\x02\xba\x5e\x01\x52\
\x1b\xc5\xfc\x53\x1a\x70\xed\xd2\x29\x35\xb6\x9b\xbd\xcf\xf2\x0f\
\xd2\xc6\x29\xfb\xc9\xbc\x96\x99\x70\x5d\x2e\x4c\x78\x5f\x8e\x01\
\xc6\x20\xa2\x46\xd0\xda\x42\x89\x69\xe6\xa8\xe7\x65\x28\x81\xa7\
\x82\x40\x25\x80\x06\x0e\x3d\x6b\xdb\xc6\xa2\x85\xcd\x28\xa9\x0e\
\x25\xe1\x0b\xc1\x63\x11\x04\x43\x95\xe8\x2f\xf7\xe3\xe6\x95\x73\
\x50\x11\xc2\x59\xe7\xac\xdc\xb8\x24\x14\x4e\xd1\xfa\xba\x41\x72\
\xf4\xac\x66\xd8\x8e\x37\x6a\x61\x2b\x8a\x02\x7f\x20\x80\xd2\x68\
\x14\x13\x26\xd4\xa0\xa6\x76\x62\x7e\xee\xb3\xac\xf1\x1b\xb0\x1d\
\x60\xf6\x2c\x8e\xe2\x08\x23\x8c\x65\x28\x15\xe2\x09\xe1\x2a\xe0\
\xe9\x20\x9e\x49\x28\x37\x3d\xc7\xf5\x45\xc2\xe5\x3c\x5a\x1e\x4c\
\xc1\x2a\x01\x68\x11\x54\xab\x1c\x56\xb8\x04\x64\x4a\x04\x77\x5f\
\x7a\x2c\x7a\x7b\x3b\xee\xbd\xff\x81\xf6\x2a\x2b\xd0\x4f\x26\xd6\
\x24\x10\x2d\x29\x93\xa7\x00\x10\x42\xa0\xeb\x3a\x42\xa1\x30\x2a\
\x2a\x2a\xf3\x82\xbb\x3a\x3b\xfd\xab\x57\x5f\x30\x63\xd5\xca\x73\
\xce\x5e\x7a\xda\xc2\xf5\xe7\xae\x38\xe3\x26\x6b\x74\x03\x50\x47\
\x8b\xbe\x42\x3c\x4c\x6e\xd0\x89\xeb\x25\x09\xe7\x2e\x05\x61\x4a\
\x3e\xf2\x84\xeb\x04\x44\x07\xb8\xce\x38\x53\x19\x63\x8a\xe9\x63\
\x0c\x9a\x01\xc6\x72\x80\x1a\x80\x02\x8a\xac\xc5\xd1\xd4\x54\x8b\
\x53\x9a\xf6\x4d\xda\xf2\xde\xa6\x35\x37\x5c\x3f\xeb\x1a\xb0\x0c\
\x69\x99\xf7\x0d\xfe\xd9\x67\x6d\xb0\xfc\x16\x08\xa1\x88\xc5\x63\
\xf4\xb7\x2f\xbf\x54\xff\xdc\x93\x8f\x9d\x08\xa0\x59\x70\xbc\xa0\
\xe6\xd8\x6a\x23\xf8\x5e\x12\x00\x70\x37\x21\x74\x7c\x06\x3c\x0f\
\x88\x96\x99\xf0\xfb\xb3\xc4\xce\xb9\x94\x80\x09\xb8\x4c\x1f\xa2\
\x01\xdc\x00\xa0\x73\x0e\x55\xd3\x08\x33\x75\x37\x07\xc5\x00\x38\
\x05\x21\x41\x40\x61\x30\x2c\x82\x61\xf1\x75\xf5\xd2\x26\xac\xba\
\xe3\xf5\xcb\xbf\xb7\xfa\xb9\xe7\x1f\x79\xf4\x07\xef\x5c\x71\xcd\
\x2d\xe1\x67\x9f\x7a\xa4\x0e\x30\x85\xd0\x6c\x2b\x80\xf9\x82\xaa\
\x79\xa5\x0a\x5d\x3c\x3d\x4c\x5a\xeb\x02\x38\xa6\xc6\xc4\x05\xcf\
\x74\x02\xc0\xbb\x1b\x9f\x7a\xee\xe6\x4c\x3a\x3d\x3e\x03\xae\xc7\
\x51\x55\xc1\x89\xe3\x10\x10\xee\x12\x50\x4e\x01\x4e\x09\xa0\xe2\
\xaf\x68\xe0\x44\xd5\x15\x87\x67\x78\x96\x40\xd1\x00\xc7\x05\x15\
\x46\x18\xa7\x20\x5c\x07\x35\x4d\x18\x13\x2c\x5c\x7a\xca\x74\x5c\
\xf7\x78\xdb\x7a\x12\x3c\x63\x07\x92\x23\xd3\x03\x40\xcd\xb7\x26\
\x29\xfa\xb7\xa7\x54\x93\xe6\x7a\x0b\xc5\xf5\x41\x74\x31\x1b\x34\
\xe9\xc0\x37\xe0\xe2\x8e\x4d\x7d\x78\x63\x4f\xae\x3b\x10\x8e\x7c\
\xd7\xd0\x0d\x27\x1e\x1b\x18\x7f\x0a\x95\x16\x53\x10\x64\x09\xa3\
\x9c\x28\xe0\x84\x83\xe4\x4d\x08\x54\x00\x0a\x04\x1c\x44\x55\xb5\
\x34\x23\x84\xd8\x8c\xbb\x1e\xc0\x15\x46\x54\x80\x2a\x20\x20\x50\
\xb9\x89\x74\x60\x04\x67\xce\x9f\x08\x7d\x30\x39\xd5\x4b\x8c\x4c\
\x3d\xb9\x56\x87\x16\x61\xc8\x94\x02\x76\x80\x83\x87\x19\x06\x12\
\x43\x18\xfa\x88\xa1\xea\x10\xc5\xe6\x7d\x49\xdc\xb3\x79\x30\x3b\
\xa9\xae\x7e\xf5\xbd\xeb\x1e\xdc\x1d\x13\xe2\x39\xe7\xe3\x33\xc0\
\x79\x1e\xb9\x91\x08\x40\xfe\x0a\x27\x94\x80\xe4\x13\x18\x20\x9c\
\xab\x0a\x25\xbe\x0c\x63\xcc\x25\x80\x42\x88\x0e\x26\x77\x70\x81\
\xae\x68\x38\xe0\x73\x31\x77\x51\x0d\x98\x32\x80\x18\xeb\x07\x47\
\x16\xdc\xcd\xe5\x0f\xd6\x1d\xe2\xd8\xbf\x87\x63\x7a\xaf\x8e\x34\
\x75\x71\xf5\xab\x87\x38\x80\x5f\xac\x7b\xe8\xd1\xb7\x0e\xf6\xee\
\x47\x36\x9b\x3d\xf2\x57\x09\x4a\x39\x74\x1d\xb0\x7c\x04\xa6\x69\
\x20\x6b\x87\x4b\xfa\x62\xfa\x49\xf1\xc1\xdc\x75\x43\x89\xec\x46\
\xd3\x44\x0b\xf3\x3a\xd5\x7c\x11\xc3\x2f\x77\x11\x70\x06\x10\x46\
\x11\x28\x52\xa1\x46\x93\x20\x7a\x12\x54\x08\x47\x8e\x89\x91\x82\
\x11\x8a\xae\x03\x0c\x93\x3a\x75\x84\x4d\x8a\x95\x4f\xed\x01\x80\
\x67\x2e\xbf\xea\x87\x77\xc6\x63\xfd\x85\xe2\xc7\x77\x02\x3e\x9f\
\x8e\xd2\xd2\x08\x2a\xab\x0c\x00\x23\x02\x87\x7f\xb2\x35\x52\xfb\
\xe1\x07\xef\x9c\x51\x5e\xa9\x1f\x17\x34\xec\xc6\x9a\xea\xe2\xf2\
\xb2\x92\x08\x35\x0c\x1f\xa8\x62\x81\x91\x34\x40\x38\x98\x17\x97\
\xe1\xf7\x04\x1c\x9c\xb9\xe0\xae\x0b\xe6\xf0\xfc\x12\x18\xc9\x3f\
\xa7\x2a\x41\xef\xb0\x83\xd0\x0e\x8a\x06\x9f\x86\x2b\x5f\xee\x42\
\xfb\x10\xdf\x75\xf4\xd1\xb3\xaf\x3d\xf1\xc4\x93\x73\x83\x83\x71\
\x00\x18\xbb\x01\x55\x55\x84\x70\x0b\x96\xe5\x87\xe1\x0b\xe0\xfc\
\xd5\xbf\x0c\xb7\x7d\xfc\xd9\xdc\x44\x62\xe0\xcc\xa9\xd3\xca\xe7\
\x36\x35\x98\x2d\x67\x2d\x9c\x42\x8f\xab\x99\x4e\xc2\xd1\x32\x10\
\x5f\x10\x4c\xd3\xc0\x08\x07\x87\x0d\xf0\x11\x81\xcc\x55\xc6\x05\
\xae\xc0\x11\x53\x81\xe7\x80\xbb\x76\xde\x14\x21\x04\x9a\xc2\x31\
\x90\xf6\x90\xeb\xa0\x98\x43\x75\x3c\xb3\x2d\x8e\xf5\x7f\x1c\xee\
\x8f\x56\xd5\x9c\xf7\xd3\x7f\xbd\xa3\x4f\x14\x2d\x5c\xd7\x1d\xbb\
\x01\x55\x55\x51\x54\x14\xc2\x87\x1f\x6c\x29\xbd\xf7\xee\xb5\xcb\
\x65\x2f\xfe\x86\x65\xd0\xba\xb5\xcb\x1a\xd4\x15\xad\x95\xa4\x6a\
\x7a\x1d\xf4\x49\xd5\x70\x23\x7e\x38\x5a\x36\x9f\x56\x9c\x71\x80\
\xaa\x00\x97\x51\x25\x1c\x8c\x33\x90\xff\x17\x9d\x43\x1e\x27\x0b\
\xee\xd9\xf9\xd3\xa0\xd4\x43\xca\xf3\xd0\xb7\x97\x63\x5e\x52\x47\
\x77\xd6\xc6\xaa\x67\xf7\x83\xa8\xbe\x35\x8f\x3c\xfc\x58\xdb\x40\
\x7f\x1f\x72\xb9\x1c\x00\x8c\xcf\xc0\x4b\x2f\x3e\x5f\xfc\xd4\x13\
\x1b\x37\x03\xa8\x7f\xe8\x9f\x26\xd3\x8b\x97\xd5\x03\x4a\x06\x18\
\xca\x80\x11\x86\x74\xd0\x86\x57\xe4\x81\x5a\x1e\xc0\x58\x5e\x50\
\x7e\x3b\xd5\x05\x0a\x00\x80\x79\x2c\x1f\x79\xc6\x1c\x30\x3b\x05\
\x38\x29\xb0\xdc\x08\x98\x18\x39\xcb\x81\x08\x53\x2e\x18\xba\x7a\
\x5c\xcc\xdc\x6f\x40\x33\x81\x63\xee\xda\xc9\x01\xfc\xea\xd5\xd7\
\xde\x7a\xbc\x77\xff\xbe\x51\xf2\x7e\x0c\x45\x1c\xf0\x17\x0d\x53\
\x45\xf9\x0e\x80\xfb\x2e\xf9\xaf\x9d\x9d\xa5\x17\xbe\xe6\xdd\xf2\
\xf8\x5e\x9e\xf5\xc2\xa0\xd1\x52\x04\xba\x46\xa0\xfc\xae\x1d\xde\
\x87\x9d\x60\x07\x33\xa0\x08\x42\x35\x43\xf9\xa8\xc3\x4b\x03\xae\
\x10\x29\xc6\x3c\x8e\x98\xbb\x42\xb8\x2d\xb0\x93\xe2\x3e\x0d\x78\
\xc2\x00\x73\x31\x94\x74\x10\xd9\xa5\xa0\xc2\x54\x71\xfe\xb3\x9d\
\x88\x3b\x78\xbf\x79\x4e\xcb\x8f\xe3\xb1\x3e\x64\x32\x19\x8c\xf7\
\xca\x7f\x2e\x24\xf2\x1f\x66\x3e\xff\x2d\x18\x86\x09\xdd\xf0\xe1\
\xbc\x7f\x5e\x79\x5c\xfc\xe0\xbe\x65\x00\x4e\x2f\x09\x2a\xf5\xb7\
\x9f\xd7\xac\xae\x9a\xdf\x40\x02\xd5\x21\x80\x73\x78\x04\xc8\xf9\
\xfc\xc2\x5c\x09\xd4\x50\x10\xd0\x1c\x78\xf6\x30\xbc\x7c\xc4\xd3\
\x60\xd9\x54\x3e\xf2\x6e\x2e\x21\xd6\xc4\x5c\x00\xe6\xc2\x25\x0c\
\x5d\x7b\x6d\xd4\x6c\x35\x50\x77\x7f\x07\x9f\x3c\x6b\x5e\xe3\xfd\
\xf7\xdc\xbd\x7d\x7f\x4f\xb7\x4c\x9d\xbf\xc3\x80\x61\x18\x28\xbc\
\x4c\xd3\x84\x4f\x88\x0b\x47\x22\x58\x7b\xfb\xbf\x85\xda\x77\x74\
\xb4\x74\xf7\x74\x9f\x43\x35\x77\xc9\x09\xd3\x8b\x2b\x2f\x39\x6d\
\x36\x5d\x79\xe2\x34\x20\x6c\x01\xa9\x24\x1c\x3b\x0b\x57\x37\xc0\
\x2d\x0d\x6a\x65\x10\xae\x1b\x43\x2e\xd6\x05\xa1\x1a\x5e\x46\x98\
\xb2\xd3\xf0\xbc\x1c\xc0\x09\xa8\x4a\xd1\x97\xf2\x50\xda\xa1\xa2\
\xf5\xe6\x76\xf4\xd8\xb8\xed\xf5\xff\xdd\x7c\x6b\x4f\x8f\x48\x9f\
\xbf\xe7\x04\xd6\xdc\x74\x0b\x89\x46\xcb\x0e\xfb\x50\xd3\x75\x04\
\x02\x01\xbc\xf1\xfa\x1b\x98\xd7\x1c\xc0\x8a\x73\xae\xd0\x6f\xfd\
\xf9\xcf\x4e\xd8\xbb\xaf\x73\xd9\xce\xdd\x3b\x4f\x3b\x79\x66\x45\
\xcd\xbf\x1c\x57\xaf\x2c\x9a\x56\x49\x34\xd3\x05\x7a\xfb\x91\xaa\
\x2f\x07\xea\x6d\xe4\x3a\xb7\x03\x94\x21\x36\x38\x8c\xe2\xaa\xa3\
\x40\xf8\x20\xb2\x87\xfa\xc1\x41\xa1\x98\x0a\x0e\x1e\x70\xe0\x7b\
\x9f\x60\xda\x7d\x3b\x07\x45\x03\x39\xfe\xa1\x0d\xff\xd1\x1e\x8f\
\xc5\xc6\x6f\x40\x32\xee\x3d\x91\x48\x30\x7a\xec\x09\xf3\x5a\xb6\
\x6e\xfb\xcb\xd9\x4e\x36\x77\x7a\x95\xc5\x23\xff\xb9\x7a\x01\x1a\
\x17\xd5\xd2\x91\x8a\x5e\xd8\x3b\xb6\x43\x33\x14\x74\xec\x1a\x46\
\xed\x47\x1a\x22\x17\xcd\x84\x1d\x4a\x21\xb1\x63\x07\x14\xaa\x21\
\xe9\x02\x81\x6e\x8a\xef\xdf\xb6\x0f\xaf\x74\xa7\x7f\xfb\xda\xdb\
\x5b\xce\x3a\xd0\xdd\x25\xeb\xe0\x48\x0c\x8c\xdf\x0c\x3a\x7b\xf6\
\x6a\xad\x0b\x96\xfc\xf4\xfa\xc5\x13\x2e\xbd\xfe\xb2\xc9\xe1\x54\
\x59\x17\xec\x6d\x1d\x20\x3e\x1d\x7d\xbb\x1d\x38\x6f\xda\xa8\x9e\
\xd6\x80\xf0\x2c\x03\xd9\x26\x05\xf1\xdd\xbb\xc1\x1d\x07\xfd\x29\
\x8e\xf2\x36\x05\x55\xb7\x6d\x87\xcf\xf2\x9f\xfe\xc4\xd3\xbf\x79\
\x55\xbc\xb8\xc1\xb6\xed\xb1\x77\xa1\x23\x10\x4e\x21\xa9\x9b\x30\
\xc9\x3d\xd4\x7d\x70\x6b\x3a\x9d\x24\x00\x03\xd1\x39\x14\xc2\x91\
\xb1\x19\xa2\x49\x0d\x33\x37\x76\x21\x72\xe3\xef\xbd\xcf\x3e\x21\
\x30\xb7\x30\x54\x4c\x9e\x09\xcd\xef\x43\xb1\xc5\x11\x9f\xe8\xe2\
\xde\x93\xa3\xc8\xa4\x53\x3f\x59\xbf\x6e\x9d\x5f\x34\x93\xf1\xb5\
\xd1\x71\x18\xd5\x04\x3e\x41\x48\x10\x15\x54\x0b\x26\x0a\xea\xf2\
\xa3\x1d\xf7\x65\x1c\x10\xa4\x3d\x50\x45\x01\xa5\x40\x22\xe3\xa1\
\xa7\xdd\x06\x80\x5e\xc0\xb9\x7c\xf6\x8f\x5f\xe9\xfd\xe5\x8b\xfd\
\x9c\xbe\x98\x42\x59\xb0\x1e\xa1\xda\x1a\x78\xe5\x0c\x17\x2f\x2f\
\x45\x95\x82\xd6\x77\xde\xfe\x9f\xcb\x43\xe1\x30\x34\x4d\x1b\xbb\
\x81\x31\x8a\x37\x04\xc5\x82\x49\x82\xb9\x82\x05\x82\x6f\x0b\xce\
\x14\xac\x10\x2c\x17\x34\xa5\x72\x39\x0d\x9a\x0e\xaa\x6a\x60\x14\
\x08\x39\x0a\x9e\xdc\x9c\x00\x80\x17\x04\x0f\x0b\x4e\xbb\xf6\x89\
\x0f\xb7\x2d\x79\x68\xab\x87\x36\x82\xd0\x6e\x13\x93\x5b\x1a\xd1\
\x5e\x9e\xc1\x93\xe7\x4e\x00\xf3\xbc\x35\x8f\x3d\xbe\xb1\xd8\xf2\
\x07\x40\x08\x39\x72\x03\x12\x22\xa3\xef\x17\x94\xca\x88\xcf\x14\
\xb4\xca\x57\x8e\x93\x24\xb3\x12\xc9\x8c\x01\x43\x05\x05\x41\x2a\
\xeb\xa1\x32\xa1\xe1\xee\xb6\x7e\x0f\xc0\x26\x41\xad\x20\x2d\xb8\
\xe4\xd5\x8f\xf7\xbd\x54\x7a\xe5\x6b\xf6\xae\x4f\x15\xee\xfb\x9d\
\x83\x29\x73\x66\xa3\xfe\x94\x22\x5c\x34\x4d\x2b\x7e\xe1\xd9\x8d\
\xf7\xe4\x6c\x9b\x9a\xa6\x79\xc4\x06\x88\x84\x0b\x3c\x41\x4e\x90\
\x14\x0c\x0b\x52\x02\x57\x60\x09\x6a\x04\x8d\x82\xfa\x58\x22\x03\
\x50\x0a\x02\x05\xd9\x9c\x87\xbe\x1d\x2e\x5c\x20\x0e\xe0\x28\xc1\
\x52\xc1\x29\x82\x63\x04\x1f\xc7\x92\xe9\x77\x26\xdf\xf8\x4a\xfa\
\xcd\x8f\x5d\x1e\x7c\xcf\x83\xd1\x30\x01\xeb\xaf\x98\x01\x00\x67\
\xfd\xe8\xba\x1f\xcc\xf5\x59\x63\x3b\x05\x3a\x86\xce\xc4\x05\xb6\
\x20\x2b\xdf\xad\x07\x05\x09\x49\x52\xae\x1b\x82\x92\x91\xb4\x4d\
\xa0\xaa\x80\xae\xc3\x97\xa4\x58\xf7\x66\x0c\x00\x32\x82\xf9\x52\
\xfc\xa9\x72\x3c\x41\x9a\xdf\xbd\xf8\xce\xb7\x47\x2e\x7f\x7c\x17\
\x2b\xdb\xeb\x87\x15\xf2\xe1\xe1\xd3\x4b\x02\xfd\xfd\xbd\x0f\x71\
\x45\x31\xc5\x45\xc6\x60\x60\x4c\x2d\xd5\x2b\x30\x91\x94\xe2\x47\
\x24\x49\x29\xd2\x39\x10\x4f\x01\x86\x8a\xe1\x14\x43\x74\x58\xc1\
\xc3\x1f\xc5\x21\x85\xce\x10\xcc\x12\x1c\x2d\xc7\x46\x99\x8a\xba\
\x60\xdb\xbf\xbf\xdd\xb1\x6b\xfe\x2f\xde\xb7\x81\x1a\x7c\x6f\xf1\
\x51\x98\xec\x43\xd3\xc5\xdf\x39\x7f\x59\x51\xa4\x04\xba\x61\x8c\
\xc9\xc0\xdf\x72\xca\x05\xae\x84\xc9\x7b\xc8\xb9\x23\x0d\xd8\x03\
\x89\x1c\x87\x42\x11\x1b\xcc\x61\x78\x0f\xc3\x41\xdb\x05\x80\x88\
\xa0\x52\x50\x25\x29\x91\x27\xe6\xc8\x54\x8c\x09\x7e\xff\x87\x8e\
\xde\xe7\xc9\x45\x2f\x1c\x3c\x80\x2a\xd6\xb1\x76\x01\x92\x89\xd8\
\xed\x0f\xfc\xfc\x86\xf2\xbf\xd5\x56\xa9\x80\x8c\xa5\x03\x49\x11\
\x35\x72\x2c\x91\xed\xd4\x2f\xa3\xa8\x0a\x78\x2a\xe3\xe6\x0d\x84\
\x88\x86\xb6\x9d\x36\xe4\xa5\x08\x74\x89\xfa\xb9\xdf\x49\x0a\xee\
\xff\x02\xe6\xdc\x5b\x7d\xf5\x7f\xb7\xbd\xd5\x4d\xec\xbb\x56\x4c\
\xa9\xfb\xe0\xa3\x4f\x2f\x36\x03\x61\x50\x55\x1b\x57\x0d\x28\xb2\
\xdf\x97\x0b\x1a\x04\xb3\x65\xeb\x6c\x15\x34\xcb\x0e\xd4\x50\x60\
\x26\x2a\xa3\xec\x77\x5c\x87\x42\x55\x10\xed\x89\xe3\xb6\x77\xfb\
\x01\x00\x85\x4d\x40\xc2\xa5\x99\x80\x20\x28\x28\x92\x14\xcb\x67\
\x1b\x4e\xbd\x73\xcb\xaf\xf7\x25\x95\xc1\xe9\x65\xca\x8d\xed\x2f\
\xac\x9b\xa6\xea\xe6\xa8\xe5\xac\x16\x88\x36\xe5\x0f\x8d\xc8\xe8\
\x46\x24\x61\x49\xe4\x73\x63\xb1\x24\x2c\x30\xa5\x71\x22\x0c\x00\
\x5b\x0f\xe1\xdd\x3e\xa7\xb0\xf8\xd3\x12\x5b\xc0\x20\x03\x25\xe7\
\x44\xee\x2f\x92\x46\x15\xc0\xde\xf4\x72\xa7\xb2\xd3\x51\x4a\x97\
\xec\x6f\xff\xe0\x86\xb2\x05\xe7\x5d\xc6\x09\x75\xc0\x19\x3f\x9c\
\x81\x6a\x29\xa2\x90\x22\x89\x34\x82\xa0\x24\x20\xd7\x4d\x81\x2e\
\x05\x0c\x09\x34\x48\x11\x08\x1a\xca\xa6\x3f\xc6\x21\xeb\xa2\x57\
\xe6\xf8\xa0\xfc\xbe\xa4\x3c\x05\xb7\x40\xbc\x21\x23\x9f\x29\x6c\
\x0a\x7b\xb6\xff\xf9\xa3\xb3\x57\x5d\xf8\x56\x45\x79\x30\x6c\xf5\
\x6f\x0f\x0e\xfb\x2b\x86\x08\xe0\x1d\xce\xc0\x24\x29\xac\x50\xa4\
\x04\x7e\x29\x8e\xc8\xa2\x4b\x48\x31\xac\x60\xbf\x29\x09\x0b\xa6\
\x40\x51\x7d\x77\xbd\x9b\x37\xd0\x2f\xe8\x16\xec\x97\x46\x0e\x15\
\xb4\xdf\x11\x79\x1a\x54\x6a\x50\xe4\x48\xe4\x7a\x12\x82\xe7\x9e\
\xde\x18\x5b\xb8\xe1\x89\x3f\x33\x9f\x95\xa3\xc9\x61\xce\x19\x3b\
\x6c\xcf\x3f\xa6\xc0\x80\x55\x80\x8c\x32\x20\x23\x96\x2b\x80\x49\
\x63\x7a\x41\x5a\x45\x05\x4b\xb8\xbd\xb6\x84\xe8\x6b\x5c\x00\xef\
\x48\x13\x5d\x82\x7d\x92\x43\x72\x2d\x23\x70\x0b\x0a\x58\x20\xe7\
\x32\x15\x0b\xba\x54\xee\xd9\xdf\xbc\xe4\x25\x86\x86\xb8\xe3\x38\
\x87\x4d\xa1\x83\x52\x44\xa6\xa0\xab\x50\x99\xbb\x8e\x44\x1a\x90\
\xf3\x3c\xd0\xa4\xf1\xd2\x82\x0e\x95\xc9\x6c\xe9\x64\x00\x7a\x04\
\x07\x64\xfa\xf4\xc9\x13\x38\x28\xe7\x43\x05\xc5\x3c\x5a\x6d\x12\
\xf9\x9c\x41\xf0\xc6\xab\xaf\xe0\xa4\x45\x8b\x79\x22\x31\x74\xd8\
\x22\x1e\x94\xe2\x64\x4e\xc3\x2b\xc8\x51\x4f\xc2\x25\xac\x60\xae\
\xc9\x7a\xb0\x05\x90\xf7\x03\x97\xac\xdd\x54\x0e\xa0\x4d\xa6\xcf\
\xa0\x34\xd2\x27\xe7\x32\x75\x20\x23\x29\xc7\x2f\xe2\x15\x3e\xdb\
\xb0\xe1\x41\xbe\x74\xf9\x0a\x8c\x8c\x0c\x83\x31\xf6\x05\x03\x69\
\x09\x19\xe5\x0f\x18\x46\x79\x26\x4f\x05\x59\xf9\x7e\x34\x20\xd8\
\xf1\xf4\x9b\x1d\x95\x00\xfe\x24\x88\xcb\x75\x19\xf5\x42\xf1\x20\
\xa3\x8b\x07\x3f\x9c\xc1\xee\xee\x7d\x30\x4d\xf3\x0b\xff\xf8\x13\
\x49\xe1\x3d\x46\x59\xfb\x3c\x54\x60\x7e\xae\x9f\x7f\x4b\xd0\x24\
\xd8\x50\x90\xc3\xb2\xf0\x31\x2c\x0d\x60\x14\xd8\x61\xc5\x4b\xce\
\xbf\x70\x35\x16\x2e\x5a\x8c\x54\x2a\x35\xca\x67\xa3\x87\xd9\x34\
\x86\x1c\xb5\x0b\x5a\x63\x46\xf0\xa6\xe0\x7d\x19\x75\x5b\xae\x49\
\xe0\x8c\x1e\xed\xd1\x85\x4b\xe0\xba\xee\x17\xc4\x03\xc0\xff\x01\
\x1d\x08\x55\x94\x97\x90\x84\xa7\x00\x00\x00\x00\x49\x45\x4e\x44\
\xae\x42\x60\x82\
"

qt_resource_name = b"\
\x00\x06\
\x07\x03\x7d\xc3\
\x00\x69\
\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
\x00\x0d\
\x0f\x7f\xc5\x07\
\x00\x69\
\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x76\x00\x69\x00\x65\x00\x77\x00\x2e\x00\x70\x00\x6e\x00\x67\
 \x00\x0a\
\x0a\xc8\xfb\x07\
\x00\x66\
\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\
\x00\x0c\
\x06\xff\x6e\xa7\
\x00\x73\
\x00\x65\x00\x72\x00\x76\x00\x69\x00\x63\x00\x65\x00\x73\x00\x2e\x00\x70\x00\x6e\x00\x67\
 "

qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x02\
\x00\x00\x00\x4c\x00\x00\x00\x00\x00\x01\x00\x00\x0f\xfc\
\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x00\xb2\
\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"

def qInitResources():
    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, \
qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, \
qt_resource_data)

qInitResources()
 \
interview/PaxHeaders.3334/inte \
rview.py0000644000000000000000000000013213073211364015131 \
x \
ustar00 \
 \
30 \
mtime=1491931892.100724217 30 atime=1491944819.437964649
30 ctime=1491931892.100724217
 \
 \
 \
 \
intervie \
w/interview.py0000664000175000042560000001605113073211364015112 \
0 \
ustar00hplisa \
00000000000000 \
#!/usr/bin/env \
python

#############################################################################
##
## Copyright (C) 2017 Hans-Peter Jansen <hpj@urpla.net>
## Copyright (C) 2016 The Qt Company Ltd.
##
## This file is part of the examples of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:BSD$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https:#www.qt.io/terms-conditions. For further
## information use the contact form at https:#www.qt.io/contact-us.
##
## BSD License Usage
## Alternatively, you may use self file under the terms of the BSD license
## as follows:
##
## "Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are
## met:
##   * Redistributions of source code must retain the above copyright
##     notice, self list of conditions and the following disclaimer.
##   * Redistributions in binary form must reproduce the above copyright
##     notice, self list of conditions and the following disclaimer in
##     the documentation and/or other materials provided with the
##     distribution.
##   * Neither the name of The Qt Company Ltd nor the names of its
##     contributors may be used to endorse or promote products derived
##     from self software without specific prior written permission.
##
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
##
## $QT_END_LICENSE$
##
#############################################################################

from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtCore import (
    QAbstractItemModel, QItemSelectionModel, QModelIndex, Qt,
)
from PyQt5.QtWidgets import (
    QAbstractItemView, QApplication, QFileIconProvider, QListView,
    QSplitter, QTableView, QTreeView,
)

# generate with: pyrcc5 interview.qrc -o interview_rc.py
import interview_rc    # __IGNORE_WARNING__


class Node(object):
    def __init__(self, parent = None):
        self.parent = parent
        self.children = []


class Model(QAbstractItemModel):
    def __init__(self, rows, columns, parent = None):
        super(Model, self).__init__(parent)
        self.services = QIcon(QPixmap(":/images/services.png"))
        self.rc = rows
        self.cc = columns
        self.tree = [Node() for node in range(rows)]
        self.iconProvider = QFileIconProvider()

    def index(self, row, column, parent):
        if row < self.rc and row >= 0 and column < self.cc and column >= 0:
            parentNode = parent.internalPointer()
            childNode = self.node(row, parentNode)
            if childNode is not None:
                return self.createIndex(row, column, childNode)
        return QModelIndex()

    def parent(self, child):
        if isinstance(child, QModelIndex):
            # parent of QModelIndex child
            if child.isValid():
                childNode = child.internalPointer()
                parentNode = self.parent(childNode)
                if parentNode:
                    return self.createIndex(self.row(parentNode), 0, parentNode)
            return QModelIndex()
        else:
            # parent of Node
            if child:
                return child.parent

    def rowCount(self, parent):
        if parent.isValid() and parent.column() != 0:
            return 0
        return self.rc

    def columnCount(self, parent):
        return self.cc

    def data(self, index, role):
        if not index.isValid():
            return None
        elif role == Qt.DisplayRole:
            return "Item %d:%s" % (index.row(), index.column())
        elif role == Qt.DecorationRole:
            if index.column() == 0:
                return self.iconProvider.icon(QFileIconProvider.Folder)
            return self.iconProvider.icon(QFileIconProvider.File)
        return None

    def headerData(self, section, orientation, role):
        if role == Qt.DisplayRole:
            return str(section)
        if role == Qt.DecorationRole:
            return self.services
        return super(Model, self).headerData(section, orientation, role)

    def hasChildren(self, parent):
        if parent.isValid() and parent.column() != 0:
            return False
        return self.rc > 0 and self.cc > 0

    def flags(self, index):
        if not index.isValid():
            return 0
        return Qt.ItemIsDragEnabled | super(Model, self).flags(index)

    def node(self, row, parent):
        if parent and not parent.children:
            parent.children = [Node(parent) for node in range(self.rc)]
        if parent:
            return parent.children[row]
        else:
            return self.tree[row]

    def row(self, node):
        if node.parent:
            return node.parent.children.index(node)
        else:
            return self.tree.index(node)


def main(args):
    app = QApplication(args)
    page = QSplitter()
    data = Model(1000, 10, page)
    selections = QItemSelectionModel(data)
    table = QTableView()
    table.setModel(data)
    table.setSelectionModel(selections)
    table.horizontalHeader().setSectionsMovable(True)
    table.verticalHeader().setSectionsMovable(True)
    # Set StaticContents to enable minimal repaints on resizes.
    table.viewport().setAttribute(Qt.WA_StaticContents)
    page.addWidget(table)
    tree = QTreeView()
    tree.setModel(data)
    tree.setSelectionModel(selections)
    tree.setUniformRowHeights(True)
    tree.header().setStretchLastSection(False)
    tree.viewport().setAttribute(Qt.WA_StaticContents)
    # Disable the focus rect to get minimal repaints when scrolling on Mac.
    tree.setAttribute(Qt.WA_MacShowFocusRect, False)
    page.addWidget(tree)
    list = QListView()
    list.setModel(data)
    list.setSelectionModel(selections)
    list.setViewMode(QListView.IconMode)
    list.setSelectionMode(QAbstractItemView.ExtendedSelection)
    list.setAlternatingRowColors(False)
    list.viewport().setAttribute(Qt.WA_StaticContents)
    list.setAttribute(Qt.WA_MacShowFocusRect, False)
    page.addWidget(list)
    page.setWindowIcon(QIcon(QPixmap(":/images/interview.png")))
    page.setWindowTitle("Interview")
    page.show()
    return app.exec_()


if __name__ == '__main__':
    import sys
    main(sys.argv)
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \




["frozencolumn.tar.gz" (frozencolumn.tar.gz)]

./PaxHeaders.2135/frozencolumn0000644000000000000000000000013213073367110013327 \
x \
ustar00 \
 \
30 \
mtime=1491988040.462253638 30 atime=1491988040.982259138
30 ctime=1491988040.462253638
 \
 \
 \
 \
frozenco \
lumn/0000775000175000042560000000000013073367110013227 \
5 \
ustar00hplisa \
00000000000000 \
 \
frozencolumn/PaxHeaders.2135/grades.qrc \
0000644000000000000000000000007413037674712015241 \
x \
ustar00 \
 \
30 \
atime=1491919673.847770551 30 ctime=1491919672.835759781
 \
 \
 \
 \
 \
frozencolumn/grades.qrc \
0000664000175000042560000000013213037674712015210 \
0 \
ustar00hplisa \
00000000000000 \
<RCC>
  <qresource prefix="/" >
        <file>grades.txt</file>
    </qresource>
</RCC>
 \
 \
 \
 \
frozenco \
lumn/PaxHeaders.2135/grades.txt0000644000000000000000000000007413037674712015273 \
x \
ustar00 \
 \
30 \
atime=1491919673.847770551 30 ctime=1491919672.843759865
 \
 \
 \
 \
 \
frozencolumn/grades.txt \
0000664000175000042560000000335513037674712015254 \
0 \
ustar00hplisa \
00000000000000 \
 \
France , Norway , YDS , UK(tech.), UK(adj.) , UIAA , Ger , Australia , Finland , \
Brazil

1,   , 5.2,   ,   , I , I ,   ,   , Isup
2,   , 5.3,   ,   , II , II , 11,   , II
3, 3, 5.4,   ,   , III , III , 12,   , IIsup
4, 4, 5.5, 4a , VD , IV , IV , 12,   , III
5a , 5-, 5.6,   , S , V- , V , 13, 5-, IIIsup
5b , 5, 5.7, 4b , HS , V , VI , 14, 5, IV
  ,   ,   , 4c ,   , V+ ,   , 15,   ,  
5c , 5+, 5.8,   , VS , VI- , VIIa , 16, 5, IVsup
6a , 6-, 5.9, 5a , HVS , VI , VIIb , 17,   , V
6a+ , 6-/6 , 5.10a ,   , E1 , VI+ , VIIc , 18, 6-, VI
6b ,   , 5.10b , 5b ,   ,   ,   , 19,   , VI/VI+
6b+ , 6, 5.10c ,   , E2 , VII- , VIIIa , 20, 6, VIsup/VI+
6c , 6+, 5.10d , 5c ,   , VII , VIIIb , 21,   , VIsup
6c+ , 7-, 5.11a ,   , E3 , VII+ , VIIIc , 22, 6, 7a
6c+ , 7, 5.11b ,   ,   ,   ,   , 23,   , 7b
7a , 7+, 5.11c , 6a , E4 , VIII- , IXa , 24, 7-, 7c
7a , 7+/8- , 5.11d ,   ,   , VIII , IXb ,   , , 7c
7a+ , 8-, 5.12a ,   , E5 , VIII+ , IXc , 25, 7, 8a
7b , 8, 5.12b , 6b ,   ,   ,   , 26, 8-, 8b
7b+ , 8/8+ , 5.12c ,   , E6 , IX- , Xa , 27, 8, 8c
7c , 8+, 5.12d , 6c ,   , IX , Xb , 28, 8, 9a
7c+ , 9-, 5.13a ,   , E7 , IX+ , Xc , 29, 9-, 9b
8a ,   , 5.13b ,   ,   ,   ,   ,   , 9, 9c
8a+ , 9-/9 , 5.13c , 7a ,   , X- ,   , 30, 9, 10a
8b , 9, 5.13d ,   , E8 , X ,   , 31, 10-, 10b
8b+ , 9/9+ , 5.14a ,   ,   , X+ ,   , 32, 10, 10c
8c , 9+, 5.14b , 7b ,   ,   ,   , 33, 10, 11a
8c+ , 10-, 5.14c ,   , E9 , XI- ,   , 34, 11-, 11b
9a , 10, 5.14d , 7c ,   , XI ,   , 35, 11, 11c
9a+ ,   , 5.15a , ,   , XI+ ,   ,   ,   , 12a
9b , , 5.15b  , ,   , , , , , 12b

# Wikipedia contributors. Grade (climbing). Wikipedia, The Free Encyclopedia. May 15, \
2009, 20:42 UTC.  # Available at: \
http://en.wikipedia.org/w/index.php?title=Grade_(climbing)&oldid=290165724. Accessed \
May 28, 2009.   \
 \
 \
frozencolumn/PaxHeaders.2135/grades_rc.py \
0000644000000000000000000000013213073177203015554 \
x \
ustar00 \
 \
30 \
mtime=1491926659.641437486 30 atime=1491945076.648685988
30 ctime=1491926659.641437486
 \
 \
 \
 \
frozenco \
lumn/grades_rc.py0000664000175000042560000001763413073177203015547 \
0 \
ustar00hplisa \
00000000000000 \
# \
-*- coding: utf-8 -*-

# Resource object code
#
# Created by: The Resource Compiler for PyQt5 (Qt v5.8.0)
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore

qt_resource_data = b"\
\x00\x00\x06\xed\
\x20\
\x46\x72\x61\x6e\x63\x65\x20\x2c\x20\x4e\x6f\x72\x77\x61\x79\x20\
\x2c\x20\x59\x44\x53\x20\x2c\x20\x55\x4b\x28\x74\x65\x63\x68\x2e\
\x29\x2c\x20\x55\x4b\x28\x61\x64\x6a\x2e\x29\x20\x2c\x20\x55\x49\
\x41\x41\x20\x2c\x20\x47\x65\x72\x20\x2c\x20\x41\x75\x73\x74\x72\
\x61\x6c\x69\x61\x20\x2c\x20\x46\x69\x6e\x6c\x61\x6e\x64\x20\x2c\
\x20\x42\x72\x61\x7a\x69\x6c\x0a\x0a\x31\x2c\x20\x20\x20\x2c\x20\
\x35\x2e\x32\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x49\x20\x2c\
\x20\x49\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x49\x73\x75\
\x70\x0a\x32\x2c\x20\x20\x20\x2c\x20\x35\x2e\x33\x2c\x20\x20\x20\
\x2c\x20\x20\x20\x2c\x20\x49\x49\x20\x2c\x20\x49\x49\x20\x2c\x20\
\x31\x31\x2c\x20\x20\x20\x2c\x20\x49\x49\x0a\x33\x2c\x20\x33\x2c\
\x20\x35\x2e\x34\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x49\x49\
\x49\x20\x2c\x20\x49\x49\x49\x20\x2c\x20\x31\x32\x2c\x20\x20\x20\
\x2c\x20\x49\x49\x73\x75\x70\x0a\x34\x2c\x20\x34\x2c\x20\x35\x2e\
\x35\x2c\x20\x34\x61\x20\x2c\x20\x56\x44\x20\x2c\x20\x49\x56\x20\
\x2c\x20\x49\x56\x20\x2c\x20\x31\x32\x2c\x20\x20\x20\x2c\x20\x49\
\x49\x49\x0a\x35\x61\x20\x2c\x20\x35\x2d\x2c\x20\x35\x2e\x36\x2c\
\x20\x20\x20\x2c\x20\x53\x20\x2c\x20\x56\x2d\x20\x2c\x20\x56\x20\
\x2c\x20\x31\x33\x2c\x20\x35\x2d\x2c\x20\x49\x49\x49\x73\x75\x70\
\x0a\x35\x62\x20\x2c\x20\x35\x2c\x20\x35\x2e\x37\x2c\x20\x34\x62\
\x20\x2c\x20\x48\x53\x20\x2c\x20\x56\x20\x2c\x20\x56\x49\x20\x2c\
\x20\x31\x34\x2c\x20\x35\x2c\x20\x49\x56\x0a\x20\x20\x2c\x20\x20\
\x20\x2c\x20\x20\x20\x2c\x20\x34\x63\x20\x2c\x20\x20\x20\x2c\x20\
\x56\x2b\x20\x2c\x20\x20\x20\x2c\x20\x31\x35\x2c\x20\x20\x20\x2c\
\x20\x20\x0a\x35\x63\x20\x2c\x20\x35\x2b\x2c\x20\x35\x2e\x38\x2c\
\x20\x20\x20\x2c\x20\x56\x53\x20\x2c\x20\x56\x49\x2d\x20\x2c\x20\
\x56\x49\x49\x61\x20\x2c\x20\x31\x36\x2c\x20\x35\x2c\x20\x49\x56\
\x73\x75\x70\x0a\x36\x61\x20\x2c\x20\x36\x2d\x2c\x20\x35\x2e\x39\
\x2c\x20\x35\x61\x20\x2c\x20\x48\x56\x53\x20\x2c\x20\x56\x49\x20\
\x2c\x20\x56\x49\x49\x62\x20\x2c\x20\x31\x37\x2c\x20\x20\x20\x2c\
\x20\x56\x0a\x36\x61\x2b\x20\x2c\x20\x36\x2d\x2f\x36\x20\x2c\x20\
\x35\x2e\x31\x30\x61\x20\x2c\x20\x20\x20\x2c\x20\x45\x31\x20\x2c\
\x20\x56\x49\x2b\x20\x2c\x20\x56\x49\x49\x63\x20\x2c\x20\x31\x38\
\x2c\x20\x36\x2d\x2c\x20\x56\x49\x0a\x36\x62\x20\x2c\x20\x20\x20\
\x2c\x20\x35\x2e\x31\x30\x62\x20\x2c\x20\x35\x62\x20\x2c\x20\x20\
\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x31\x39\x2c\x20\x20\
\x20\x2c\x20\x56\x49\x2f\x56\x49\x2b\x0a\x36\x62\x2b\x20\x2c\x20\
\x36\x2c\x20\x35\x2e\x31\x30\x63\x20\x2c\x20\x20\x20\x2c\x20\x45\
\x32\x20\x2c\x20\x56\x49\x49\x2d\x20\x2c\x20\x56\x49\x49\x49\x61\
\x20\x2c\x20\x32\x30\x2c\x20\x36\x2c\x20\x56\x49\x73\x75\x70\x2f\
\x56\x49\x2b\x0a\x36\x63\x20\x2c\x20\x36\x2b\x2c\x20\x35\x2e\x31\
\x30\x64\x20\x2c\x20\x35\x63\x20\x2c\x20\x20\x20\x2c\x20\x56\x49\
\x49\x20\x2c\x20\x56\x49\x49\x49\x62\x20\x2c\x20\x32\x31\x2c\x20\
\x20\x20\x2c\x20\x56\x49\x73\x75\x70\x0a\x36\x63\x2b\x20\x2c\x20\
\x37\x2d\x2c\x20\x35\x2e\x31\x31\x61\x20\x2c\x20\x20\x20\x2c\x20\
\x45\x33\x20\x2c\x20\x56\x49\x49\x2b\x20\x2c\x20\x56\x49\x49\x49\
\x63\x20\x2c\x20\x32\x32\x2c\x20\x36\x2c\x20\x37\x61\x0a\x36\x63\
\x2b\x20\x2c\x20\x37\x2c\x20\x35\x2e\x31\x31\x62\x20\x2c\x20\x20\
\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x32\
\x33\x2c\x20\x20\x20\x2c\x20\x37\x62\x0a\x37\x61\x20\x2c\x20\x37\
\x2b\x2c\x20\x35\x2e\x31\x31\x63\x20\x2c\x20\x36\x61\x20\x2c\x20\
\x45\x34\x20\x2c\x20\x56\x49\x49\x49\x2d\x20\x2c\x20\x49\x58\x61\
\x20\x2c\x20\x32\x34\x2c\x20\x37\x2d\x2c\x20\x37\x63\x0a\x37\x61\
\x20\x2c\x20\x37\x2b\x2f\x38\x2d\x20\x2c\x20\x35\x2e\x31\x31\x64\
\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x56\x49\x49\x49\x20\
\x2c\x20\x49\x58\x62\x20\x2c\x20\x20\x20\x2c\x20\x2c\x20\x37\x63\
\x0a\x37\x61\x2b\x20\x2c\x20\x38\x2d\x2c\x20\x35\x2e\x31\x32\x61\
\x20\x2c\x20\x20\x20\x2c\x20\x45\x35\x20\x2c\x20\x56\x49\x49\x49\
\x2b\x20\x2c\x20\x49\x58\x63\x20\x2c\x20\x32\x35\x2c\x20\x37\x2c\
\x20\x38\x61\x0a\x37\x62\x20\x2c\x20\x38\x2c\x20\x35\x2e\x31\x32\
\x62\x20\x2c\x20\x36\x62\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\
\x20\x20\x20\x2c\x20\x32\x36\x2c\x20\x38\x2d\x2c\x20\x38\x62\x0a\
\x37\x62\x2b\x20\x2c\x20\x38\x2f\x38\x2b\x20\x2c\x20\x35\x2e\x31\
\x32\x63\x20\x2c\x20\x20\x20\x2c\x20\x45\x36\x20\x2c\x20\x49\x58\
\x2d\x20\x2c\x20\x58\x61\x20\x2c\x20\x32\x37\x2c\x20\x38\x2c\x20\
\x38\x63\x0a\x37\x63\x20\x2c\x20\x38\x2b\x2c\x20\x35\x2e\x31\x32\
\x64\x20\x2c\x20\x36\x63\x20\x2c\x20\x20\x20\x2c\x20\x49\x58\x20\
\x2c\x20\x58\x62\x20\x2c\x20\x32\x38\x2c\x20\x38\x2c\x20\x39\x61\
\x0a\x37\x63\x2b\x20\x2c\x20\x39\x2d\x2c\x20\x35\x2e\x31\x33\x61\
\x20\x2c\x20\x20\x20\x2c\x20\x45\x37\x20\x2c\x20\x49\x58\x2b\x20\
\x2c\x20\x58\x63\x20\x2c\x20\x32\x39\x2c\x20\x39\x2d\x2c\x20\x39\
\x62\x0a\x38\x61\x20\x2c\x20\x20\x20\x2c\x20\x35\x2e\x31\x33\x62\
\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x20\
\x20\x2c\x20\x20\x20\x2c\x20\x39\x2c\x20\x39\x63\x0a\x38\x61\x2b\
\x20\x2c\x20\x39\x2d\x2f\x39\x20\x2c\x20\x35\x2e\x31\x33\x63\x20\
\x2c\x20\x37\x61\x20\x2c\x20\x20\x20\x2c\x20\x58\x2d\x20\x2c\x20\
\x20\x20\x2c\x20\x33\x30\x2c\x20\x39\x2c\x20\x31\x30\x61\x0a\x38\
\x62\x20\x2c\x20\x39\x2c\x20\x35\x2e\x31\x33\x64\x20\x2c\x20\x20\
\x20\x2c\x20\x45\x38\x20\x2c\x20\x58\x20\x2c\x20\x20\x20\x2c\x20\
\x33\x31\x2c\x20\x31\x30\x2d\x2c\x20\x31\x30\x62\x0a\x38\x62\x2b\
\x20\x2c\x20\x39\x2f\x39\x2b\x20\x2c\x20\x35\x2e\x31\x34\x61\x20\
\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x58\x2b\x20\x2c\x20\x20\
\x20\x2c\x20\x33\x32\x2c\x20\x31\x30\x2c\x20\x31\x30\x63\x0a\x38\
\x63\x20\x2c\x20\x39\x2b\x2c\x20\x35\x2e\x31\x34\x62\x20\x2c\x20\
\x37\x62\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x20\x20\x2c\
\x20\x33\x33\x2c\x20\x31\x30\x2c\x20\x31\x31\x61\x0a\x38\x63\x2b\
\x20\x2c\x20\x31\x30\x2d\x2c\x20\x35\x2e\x31\x34\x63\x20\x2c\x20\
\x20\x20\x2c\x20\x45\x39\x20\x2c\x20\x58\x49\x2d\x20\x2c\x20\x20\
\x20\x2c\x20\x33\x34\x2c\x20\x31\x31\x2d\x2c\x20\x31\x31\x62\x0a\
\x39\x61\x20\x2c\x20\x31\x30\x2c\x20\x35\x2e\x31\x34\x64\x20\x2c\
\x20\x37\x63\x20\x2c\x20\x20\x20\x2c\x20\x58\x49\x20\x2c\x20\x20\
\x20\x2c\x20\x33\x35\x2c\x20\x31\x31\x2c\x20\x31\x31\x63\x0a\x39\
\x61\x2b\x20\x2c\x20\x20\x20\x2c\x20\x35\x2e\x31\x35\x61\x20\x2c\
\x20\x2c\x20\x20\x20\x2c\x20\x58\x49\x2b\x20\x2c\x20\x20\x20\x2c\
\x20\x20\x20\x2c\x20\x20\x20\x2c\x20\x31\x32\x61\x0a\x39\x62\x20\
\x2c\x20\x2c\x20\x35\x2e\x31\x35\x62\x20\x20\x2c\x20\x2c\x20\x20\
\x20\x2c\x20\x2c\x20\x2c\x20\x2c\x20\x2c\x20\x31\x32\x62\x0a\x0a\
\x23\x20\x57\x69\x6b\x69\x70\x65\x64\x69\x61\x20\x63\x6f\x6e\x74\
\x72\x69\x62\x75\x74\x6f\x72\x73\x2e\x20\x47\x72\x61\x64\x65\x20\
\x28\x63\x6c\x69\x6d\x62\x69\x6e\x67\x29\x2e\x20\x57\x69\x6b\x69\
\x70\x65\x64\x69\x61\x2c\x20\x54\x68\x65\x20\x46\x72\x65\x65\x20\
\x45\x6e\x63\x79\x63\x6c\x6f\x70\x65\x64\x69\x61\x2e\x20\x4d\x61\
\x79\x20\x31\x35\x2c\x20\x32\x30\x30\x39\x2c\x20\x32\x30\x3a\x34\
\x32\x20\x55\x54\x43\x2e\x20\x0a\x23\x20\x41\x76\x61\x69\x6c\x61\
\x62\x6c\x65\x20\x61\x74\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\x65\
\x6e\x2e\x77\x69\x6b\x69\x70\x65\x64\x69\x61\x2e\x6f\x72\x67\x2f\
\x77\x2f\x69\x6e\x64\x65\x78\x2e\x70\x68\x70\x3f\x74\x69\x74\x6c\
\x65\x3d\x47\x72\x61\x64\x65\x5f\x28\x63\x6c\x69\x6d\x62\x69\x6e\
\x67\x29\x26\x6f\x6c\x64\x69\x64\x3d\x32\x39\x30\x31\x36\x35\x37\
\x32\x34\x2e\x20\x41\x63\x63\x65\x73\x73\x65\x64\x20\x4d\x61\x79\
\x20\x32\x38\x2c\x20\x32\x30\x30\x39\x2e\x20\x0a\
"

qt_resource_name = b"\
\x00\x0a\
\x0a\xcb\x8b\x14\
\x00\x67\
\x00\x72\x00\x61\x00\x64\x00\x65\x00\x73\x00\x2e\x00\x74\x00\x78\x00\x74\
"

qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
"

def qInitResources():
    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, \
qt_resource_data)

def qCleanupResources():
    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, \
qt_resource_data)

qInitResources()
 \
frozencolumn/PaxHeaders.2135/frozencolumn.py \
0000644000000000000000000000013213073211400016330 \
x \
ustar00 \
 \
30 \
mtime=1491931904.568857023 30 atime=1491945076.572685184
30 ctime=1491931904.572857066
 \
 \
 \
 \
frozenco \
lumn/frozencolumn.py0000664000175000042560000001575313073211400016323 \
0 \
ustar00hplisa \
00000000000000 \
#!/usr/bin/env \
python

#############################################################################
##
## Copyright (C) 2017 Hans-Peter Jansen <hpj@urpla.net>
## Copyright (C) 2016 The Qt Company Ltd.
##
## This file is part of the examples of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:BSD$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https:#www.qt.io/terms-conditions. For further
## information use the contact form at https:#www.qt.io/contact-us.
##
## BSD License Usage
## Alternatively, you may use self file under the terms of the BSD license
## as follows:
##
## "Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are
## met:
##   * Redistributions of source code must retain the above copyright
##     notice, self list of conditions and the following disclaimer.
##   * Redistributions in binary form must reproduce the above copyright
##     notice, self list of conditions and the following disclaimer in
##     the documentation and/or other materials provided with the
##     distribution.
##   * Neither the name of The Qt Company Ltd nor the names of its
##     contributors may be used to endorse or promote products derived
##     from self software without specific prior written permission.
##
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
##
## $QT_END_LICENSE$
##
#############################################################################

from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtCore import QFile, Qt
from PyQt5.QtWidgets import QApplication, QHeaderView, QTableView

# generate with: pyrcc5 grades.qrc -o grades_rc.py
import grades_rc    # __IGNORE_WARNING__

class FreezeTableWidget(QTableView):
    def __init__(self, model):
        super(FreezeTableWidget, self).__init__()
        self.setModel(model)
        self.frozenTableView = QTableView(self)
        self.init()
        self.horizontalHeader().sectionResized.connect(self.updateSectionWidth)
        self.verticalHeader().sectionResized.connect(self.updateSectionHeight)
        self.frozenTableView.verticalScrollBar().valueChanged.connect(
            self.verticalScrollBar().setValue)
        self.verticalScrollBar().valueChanged.connect(
            self.frozenTableView.verticalScrollBar().setValue)

    def init(self):
        self.frozenTableView.setModel(self.model())
        self.frozenTableView.setFocusPolicy(Qt.NoFocus)
        self.frozenTableView.verticalHeader().hide()
        self.frozenTableView.horizontalHeader().setSectionResizeMode(
                QHeaderView.Fixed)
        self.viewport().stackUnder(self.frozenTableView)

        self.frozenTableView.setStyleSheet("""
            QTableView { border: none;
                         background-color: #8EDE21;
                         selection-background-color: #999;
            }""") # for demo purposes

        self.frozenTableView.setSelectionModel(self.selectionModel())
        for col in range(1, self.model().columnCount()):
            self.frozenTableView.setColumnHidden(col, True)
        self.frozenTableView.setColumnWidth(0, self.columnWidth(0))
        self.frozenTableView.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.frozenTableView.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.frozenTableView.show()
        self.updateFrozenTableGeometry()
        self.setHorizontalScrollMode(self.ScrollPerPixel)
        self.setVerticalScrollMode(self.ScrollPerPixel)
        self.frozenTableView.setVerticalScrollMode(self.ScrollPerPixel)

    def updateSectionWidth(self, logicalIndex, oldSize, newSize):
        if self.logicalIndex == 0:
            self.frozenTableView.setColumnWidth(0, newSize)
            self.updateFrozenTableGeometry()

    def updateSectionHeight(self, logicalIndex, oldSize, newSize):
        self.frozenTableView.setRowHeight(logicalIndex, newSize)

    def resizeEvent(self, event):
        super(FreezeTableWidget, self).resizeEvent(event)
        self.updateFrozenTableGeometry()

    def moveCursor(self, cursorAction, modifiers):
        current = super(FreezeTableWidget, self).moveCursor(cursorAction, modifiers)
        if (cursorAction == self.MoveLeft and
                self.current.column() > 0 and
                self.visualRect(current).topLeft().x() <
                    self.frozenTableView.columnWidth(0)):
            newValue = (self.horizontalScrollBar().value() +
                        self.visualRect(current).topLeft().x() -
                        self.frozenTableView.columnWidth(0))
            self.horizontalScrollBar().setValue(newValue)
        return current

    def scrollTo(self, index, hint):
        if index.column() > 0:
            super(FreezeTableWidget, self).scrollTo(index, hint)

    def updateFrozenTableGeometry(self):
        self.frozenTableView.setGeometry(
                self.verticalHeader().width() + self.frameWidth(),
                self.frameWidth(), self.columnWidth(0),
                self.viewport().height() + self.horizontalHeader().height())


def main(args):
    def split_and_strip(s, splitter):
        return [s.strip() for s in line.split(splitter)]

    app = QApplication(args)
    model = QStandardItemModel()
    file = QFile(":/grades.txt")
    if file.open(QFile.ReadOnly):
        line = file.readLine(200).decode('utf-8')
        header = split_and_strip(line, ',')
        model.setHorizontalHeaderLabels(header)
        row = 0
        while file.canReadLine():
            line = file.readLine(200).decode('utf-8')
            if not line.startswith('#') and ',' in line:
                fields = split_and_strip(line, ',')
                for col, field in enumerate(fields):
                    newItem = QStandardItem(field)
                    model.setItem(row, col, newItem)
                row += 1
    file.close()
    tableView = FreezeTableWidget(model)
    tableView.setWindowTitle("Frozen Column Example")
    tableView.resize(560, 680)
    tableView.show()
    return app.exec_()


if __name__ == '__main__':
    import sys
    main(sys.argv)
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \
 \




["storageview.py" (storageview.py)]

#!/usr/bin/env python

#############################################################################
##
## Copyright (C) 2017 Hans-Peter Jansen <hpj@urpla.net>
## Copyright (C) 2016 The Qt Company Ltd.
## Copyright (C) 2016 Ivan Komissarov
##
## This file is part of the examples of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:BSD$
## Commercial License Usage
## Licensees holding valid commercial Qt licenses may use this file in
## accordance with the commercial license agreement provided with the
## Software or, alternatively, in accordance with the terms contained in
## a written agreement between you and The Qt Company. For licensing terms
## and conditions see https:#www.qt.io/terms-conditions. For further
## information use the contact form at https:#www.qt.io/contact-us.
##
## BSD License Usage
## Alternatively, you may use self file under the terms of the BSD license
## as follows:
##
## "Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions are
## met:
##   * Redistributions of source code must retain the above copyright
##     notice, self list of conditions and the following disclaimer.
##   * Redistributions in binary form must reproduce the above copyright
##     notice, self list of conditions and the following disclaimer in
##     the documentation and/or other materials provided with the
##     distribution.
##   * Neither the name of The Qt Company Ltd nor the names of its
##     contributors may be used to endorse or promote products derived
##     from self software without specific prior written permission.
##
##
## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
##
## $QT_END_LICENSE$
##
#############################################################################

from PyQt5.QtCore import QAbstractTableModel, QByteArray, QDir, QStorageInfo, Qt
from PyQt5.QtWidgets import QAbstractItemView, QApplication, QTreeView

import math


def sizeToString(size):
    if size <= 0:
        return "0 b"
    decimals = 2
    units = ["b", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
    power = int(math.log(size, 1024))
    try:
        unit = units[power]
    except IndexError:
        unit = units[-1]
        power = len(units) - 1
    if power == 0:
        decimals = 0
    normsize = size / math.pow(1024, power)
    #: this should expand to "1.23 GB"
    return "%0.*f %s" % (decimals, normsize, unit)


class StorageModel(QAbstractTableModel):
    ColumnRootPath, ColumnName, ColumnDevice, ColumnFileSystemName, \
    ColumnTotal, ColumnFree, ColumnAvailable, ColumnIsReady, \
    ColumnIsReadOnly, ColumnIsValid, ColumnCount = range(11)

    columnFuncMap = {
        ColumnRootPath: lambda volume: QDir.toNativeSeparators(volume.rootPath()),
        ColumnName: lambda volume: volume.name(),
        ColumnDevice: lambda volume: volume.device(),
        ColumnFileSystemName: lambda volume: volume.fileSystemType(),
        ColumnTotal: lambda volume: sizeToString(volume.bytesTotal()),
        ColumnFree: lambda volume: sizeToString(volume.bytesFree()),
        ColumnAvailable: lambda volume: sizeToString(volume.bytesAvailable()),
        ColumnIsReady: lambda volume: volume.isReady(),
        ColumnIsReadOnly: lambda volume: volume.isReadOnly(),
        ColumnIsValid: lambda volume: volume.isValid(),
    }

    columnNameMap = {
        ColumnRootPath: "Root path",
        ColumnName: "Volume Name",
        ColumnDevice: "Device",
        ColumnFileSystemName: "File system",
        ColumnTotal: "Total",
        ColumnFree: "Free",
        ColumnAvailable: "Available",
        ColumnIsReady: "Ready",
        ColumnIsReadOnly: "Read-only",
        ColumnIsValid: "Valid",
    }

    def __init__(self, parent = None):
        super(StorageModel, self).__init__(parent)
        self.volumes = QStorageInfo.mountedVolumes()

    def columnCount(self, parent = None):
        return self.ColumnCount

    def rowCount(self, parent):
        if parent.isValid():
            return 0
        return len(self.volumes)

    def data(self, index, role):
        if not index.isValid():
            return None
        if role == Qt.DisplayRole:
            volume = self.volumes[index.row()]
            func = self.columnFuncMap.get(index.column())
            if func is not None:
                return func(volume)

        elif role == Qt.ToolTipRole:
            volume = self.volumes[index.row()]
            tooltip = []
            for column in range(self.ColumnCount):
                label = self.columnNameMap.get(column)
                value = self.columnFuncMap[column](volume)
                if isinstance(value, QByteArray):
                    value = str(bytes(value).decode('utf-8'))
                tooltip.append("{0}: {1}".format(label, value))
            return "\n".join(tooltip)

    def headerData(self, section, orientation, role):
        if orientation != Qt.Horizontal:
            return None
        if role != Qt.DisplayRole:
            return None
        return self.columnNameMap.get(section)


def main(args):
    app = QApplication (args)
    view = QTreeView()
    view.setModel(StorageModel(view))
    view.resize(640, 480)
    view.setSelectionBehavior(QAbstractItemView.SelectRows)
    for column in range(view.model().columnCount()):
        view.resizeColumnToContents(column)
    view.show()
    return app.exec_()


if __name__ == '__main__':
    import sys
    main(sys.argv)

["editabletreemodel.diff" (editabletreemodel.diff)]

--- examples/itemviews/editabletreemodel/editabletreemodel.py	2017-03-30 10:46:55.000000000 +0200
+++ examples/itemviews/editabletreemodel/editabletreemodel.py	2017-04-11 15:12:36.312417206 +0200
@@ -154,7 +154,7 @@ class TreeModel(QAbstractItemModel):
         if not index.isValid():
             return 0
 
-        return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
+        return Qt.ItemIsEditable | super(TreeModel, self).flags(index)
 
     def getItem(self, index):
         if index.isValid():

["dirview.diff" (dirview.diff)]

--- examples/itemviews/dirview.py	2017-03-30 10:46:55.000000000 +0200
+++ examples/itemviews/dirview.py	2017-04-11 14:19:32.538317782 +0200
@@ -3,6 +3,7 @@
 
 #############################################################################
 ##
+## Copyright (C) 2017 Hans-Peter Jansen <hpj@urpla.net>
 ## Copyright (C) 2013 Riverbank Computing Limited.
 ## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ## All rights reserved.
@@ -41,25 +42,60 @@
 ##
 #############################################################################
 
-
-import sys
-
-from PyQt5.QtWidgets import QApplication, QFileSystemModel, QTreeView
-
-
-app = QApplication(sys.argv)
-
-model = QFileSystemModel()
-model.setRootPath('')
-tree = QTreeView()
-tree.setModel(model)
-
-tree.setAnimated(False)
-tree.setIndentation(20)
-tree.setSortingEnabled(True)
-
-tree.setWindowTitle("Dir View")
-tree.resize(640, 480)
-tree.show()
-
-sys.exit(app.exec_())
+from PyQt5.QtCore import (
+    QCommandLineParser, QCommandLineOption, QCoreApplication,
+    QDir, QT_VERSION_STR,
+)
+from PyQt5.QtWidgets import (
+    QApplication, QFileIconProvider, QFileSystemModel, QTreeView
+)
+
+def main(args):
+    app = QApplication(args)
+
+    QCoreApplication.setApplicationVersion(QT_VERSION_STR)
+    parser = QCommandLineParser()
+    parser.setApplicationDescription("Qt Dir View Example")
+    parser.addHelpOption()
+    parser.addVersionOption()
+
+    dontUseCustomDirectoryIconsOption = QCommandLineOption("c",
+        "Set QFileIconProvider.DontUseCustomDirectoryIcons")
+    parser.addOption(dontUseCustomDirectoryIconsOption)
+    parser.addPositionalArgument("directory", "The directory to start in.")
+    parser.process(app)
+    try:
+        rootPath = parser.positionalArguments().pop(0)
+    except IndexError:
+        rootPath = None
+
+    model = QFileSystemModel()
+    model.setRootPath("")
+    if (parser.isSet(dontUseCustomDirectoryIconsOption)):
+        model.iconProvider().setOptions(
+            QFileIconProvider.DontUseCustomDirectoryIcons)
+    tree = QTreeView()
+    tree.setModel(model)
+    if rootPath is not None:
+        rootIndex = model.index(QDir.cleanPath(rootPath))
+        if rootIndex.isValid():
+            tree.setRootIndex(rootIndex)
+
+    # Demonstrating look and feel features
+    tree.setAnimated(False)
+    tree.setIndentation(20)
+    tree.setSortingEnabled(True)
+
+    availableSize = QApplication.desktop().availableGeometry(tree).size()
+    tree.resize(availableSize / 2)
+    tree.setColumnWidth(0, tree.width() / 3)
+
+    tree.setWindowTitle("Dir View")
+    tree.show()
+
+    sys.exit(app.exec_())
+
+
+if __name__ == '__main__':
+    import sys
+    main(sys.argv)

["combowidgetmapper.diff" (combowidgetmapper.diff)]

--- examples/itemviews/combowidgetmapper.py	2017-03-30 10:46:55.000000000 +0200
+++ examples/itemviews/combowidgetmapper.py	2017-04-11 23:13:56.070371959 +0200
@@ -65,9 +65,11 @@ class Window(QWidget):
         typeComboBox = QComboBox()
         self.nextButton = QPushButton("&Next")
         self.previousButton = QPushButton("&Previous")
+
         nameLabel.setBuddy(nameEdit)
         addressLabel.setBuddy(addressEdit)
         typeLabel.setBuddy(typeComboBox)
+
         typeComboBox.setModel(self.typeModel)
 
         # Set up the mapper.
@@ -75,7 +77,7 @@ class Window(QWidget):
         self.mapper.setModel(self.model)
         self.mapper.addMapping(nameEdit, 0)
         self.mapper.addMapping(addressEdit, 1)
-        self.mapper.addMapping(typeComboBox, 2, 'currentIndex')
+        self.mapper.addMapping(typeComboBox, 2, 'currentIndex'.encode())
 
         # Set up connections and layouts.
         self.previousButton.clicked.connect(self.mapper.toPrevious)
@@ -112,12 +114,9 @@ class Window(QWidget):
         types = ("0", "1", "2", "0", "2")
         
         for row, name in enumerate(names):
-            item = QStandardItem(name)
-            self.model.setItem(row, 0, item)
-            item = QStandardItem(addresses[row])
-            self.model.setItem(row, 1, item)
-            item = QStandardItem(types[row])
-            self.model.setItem(row, 2, item)
+            self.model.setItem(row, 0, QStandardItem(name))
+            self.model.setItem(row, 1, QStandardItem(addresses[row]))
+            self.model.setItem(row, 2, QStandardItem(types[row]))
  
     def updateButtons(self, row):
         self.previousButton.setEnabled(row > 0)

[Attachment #9 (text/plain)]

_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic