1. Statistiques descriptives univariées
1.1. Fonction générique summary()
- Fournit les principales mesures de tendance centrale et de dispersion d’une distribution avec quartiles
- C’est une fonction dont le comportement s’adapte au type d’objet
- Élimine d’emblée valeurs manquantes
Afficher
## id age sexe
## Min. : 1.0 Min. :18.00 Homme: 899
## 1st Qu.: 500.8 1st Qu.:35.00 Femme:1101
## Median :1000.5 Median :48.00
## Mean :1000.5 Mean :48.16
## 3rd Qu.:1500.2 3rd Qu.:60.00
## Max. :2000.0 Max. :97.00
##
## nivetud poids
## Enseignement technique ou professionnel court :463 Min. : 78.08
## Enseignement superieur y compris technique superieur:441 1st Qu.: 2221.82
## Derniere annee d'etudes primaires :341 Median : 4631.19
## 1er cycle :204 Mean : 5535.61
## 2eme cycle :183 3rd Qu.: 7626.53
## (Other) :256 Max. :31092.14
## NA's :112
## occup qualif freres.soeurs
## Exerce une profession:1049 Employe :594 Min. : 0.000
## Chomeur : 134 Ouvrier qualifie :292 1st Qu.: 1.000
## Etudiant, eleve : 94 Cadre :260 Median : 2.000
## Retraite : 392 Ouvrier specialise :203 Mean : 3.283
## Retire des affaires : 77 Profession intermediaire:160 3rd Qu.: 5.000
## Au foyer : 171 (Other) :144 Max. :22.000
## Autre inactif : 83 NA's :347
## clso relig
## Oui : 936 Pratiquant regulier :266
## Non :1037 Pratiquant occasionnel :442
## Ne sait pas: 27 Appartenance sans pratique :760
## Ni croyance ni appartenance:399
## Rejet : 93
## NSP ou NVPR : 40
##
## trav.imp trav.satisf hard.rock lecture.bd
## Le plus important : 29 Satisfaction :480 Non:1986 Non:1953
## Aussi important que le reste:259 Insatisfaction:117 Oui: 14 Oui: 47
## Moins important que le reste:708 Equilibre :451
## Peu important : 52 NA's :952
## NA's :952
##
##
## peche.chasse cuisine bricol cinema sport heures.tv
## Non:1776 Non:1119 Non:1147 Non:1174 Non:1277 Min. : 0.000
## Oui: 224 Oui: 881 Oui: 853 Oui: 826 Oui: 723 1st Qu.: 1.000
## Median : 2.000
## Mean : 2.247
## 3rd Qu.: 3.000
## Max. :12.000
## NA's :5
Afficher
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 35.00 48.00 48.16 60.00 97.00
Afficher
## Exerce une profession Chomeur Etudiant, eleve
## 1049 134 94
## Retraite Retire des affaires Au foyer
## 392 77 171
## Autre inactif
## 83
1.2. Autres fonctions pour indicateurs individuels
Afficher
## [1] 2
Afficher
## [1] 2.246566
Afficher
## [1] 12
Afficher
## [1] 0
Afficher
## [1] 4481.9
Afficher
## [1] 0 12
Afficher
## [1] 3.153653
Afficher
## [1] 1.775853
Afficher
## 0% 25% 50% 75% 100%
## 0 1 2 3 12
Fonctions de normalité
Afficher
## [1] 1.308538
Afficher
## [1] 3.230284
1.3. La très utile fonction apply()
Afficher
## age heures.tv freres.soeurs
## 48.157000 2.246566 3.283000
1.4. Table de fréquences
Fonction table() - Tableaux d’effectifs
Afficher
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 22
## 167 407 427 284 210 151 99 94 52 37 21 21 8 10 4 4 1 2 1
Autres fonctions pertinentes
Afficher
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 0.12280702 0.17664852 0.05202662
## Profession intermediaire Cadre Employe
## 0.09679371 0.15728978 0.35934664
## Autre
## 0.03508772
Afficher
##
## Ouvrier specialise Ouvrier qualifie Technicien
## 12 18 5
## Profession intermediaire Cadre Employe
## 10 16 36
## Autre
## 4
Afficher
## n % val%
## Ouvrier specialise 203 10.2 12.3
## Ouvrier qualifie 292 14.6 17.7
## Technicien 86 4.3 5.2
## Profession intermediaire 160 8.0 9.7
## Cadre 260 13.0 15.7
## Employe 594 29.7 35.9
## Autre 58 2.9 3.5
## NA 347 17.3 NA
Afficher
## n % %cum
## Autre 58 4 4
## Technicien 86 5 9
## Profession intermediaire 160 10 18
## Ouvrier specialise 203 12 31
## Cadre 260 16 46
## Ouvrier qualifie 292 18 64
## Employe 594 36 100
## Total 1653 100 100
2. Statistiques descriptives bivariées
2.1. Tableaux croisées
Fonction table() et cie.
- 1er argument var en ligne (x), 2e var en colonne (y)
Afficher
##
## Homme Femme
## Satisfaction 233 247
## Insatisfaction 61 56
## Equilibre 226 225
Afficher
##
## Homme Femme Sum
## Satisfaction 233 247 480
## Insatisfaction 61 56 117
## Equilibre 226 225 451
## Sum 520 528 1048
Afficher
##
## Homme Femme Total
## Satisfaction 22.2 23.6 45.8
## Insatisfaction 5.8 5.3 11.2
## Equilibre 21.6 21.5 43.0
## Total 49.6 50.4 100.0
Afficher
##
## Homme Femme
## Satisfaction 0.4480769 0.4678030
## Insatisfaction 0.1173077 0.1060606
## Equilibre 0.4346154 0.4261364
Afficher
##
## Homme Femme Ensemble
## Satisfaction 44.8% 46.8% 45.8%
## Insatisfaction 11.7% 10.6% 11.2%
## Equilibre 43.5% 42.6% 43.0%
## Total 100.0% 100.0% 100.0%
Afficher
##
## Homme Femme Total
## Satisfaction 49% 51% 100%
## Insatisfaction 52% 48% 100%
## Equilibre 50% 50% 100%
## Ensemble 50% 50% 100%
2.2. Comparer des groupes : by() et tapply()
- Les très pratiques fonctions by() et tapply() (variante de la fonction apply)
- Permettent d’appliquer une fonction sur une variable quantitative (1er) selon les modalités d’une variable catégorielle (2iem)
Afficher
## bd$sexe: Homme
## [1] 48.16129
## ------------------------------------------------------------
## bd$sexe: Femme
## [1] 48.1535
Afficher
## Homme Femme
## 48.16129 48.15350
Afficher
## $Homme
##
## Pratiquant regulier Pratiquant occasionnel
## 86 170
## Appartenance sans pratique Ni croyance ni appartenance
## 365 210
## Rejet NSP ou NVPR
## 52 16
##
## $Femme
##
## Pratiquant regulier Pratiquant occasionnel
## 180 272
## Appartenance sans pratique Ni croyance ni appartenance
## 395 189
## Rejet NSP ou NVPR
## 41 24
Afficher
## $Homme
## n % val%
## Pratiquant regulier 86 9.6 9.6
## Pratiquant occasionnel 170 18.9 18.9
## Appartenance sans pratique 365 40.6 40.6
## Ni croyance ni appartenance 210 23.4 23.4
## Rejet 52 5.8 5.8
## NSP ou NVPR 16 1.8 1.8
##
## $Femme
## n % val%
## Pratiquant regulier 180 16.3 16.3
## Pratiquant occasionnel 272 24.7 24.7
## Appartenance sans pratique 395 35.9 35.9
## Ni croyance ni appartenance 189 17.2 17.2
## Rejet 41 3.7 3.7
## NSP ou NVPR 24 2.2 2.2
- Repose sur l’utilisation de la notation formule qui définissent les relations entre les variables : NomFonction(VD ~ VI).
- Puisque le tableau croisé n’attribue pas de rôle spécifique aux variables, on place les deux variables après le tilde: ~ x + y.
- On indique le nom du tableau après la virgule.
Afficher
## occup
## sexe Exerce une profession Chomeur Etudiant, eleve Retraite
## Homme 520 54 48 208
## Femme 529 80 46 184
## occup
## sexe Retire des affaires Au foyer Autre inactif
## Homme 39 0 30
## Femme 38 171 53
LS0tDQp0aXRsZTogIkNhcHN1bGUgNjogU3RhdGlzdGlxdWVzIGRlc2NyaXB0aXZlcyINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIGhpZ2hsaWdodDogaGFkZG9jaw0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIFNtb290aF9zY3JvbGw6IHRydWUNCiAgICB0b2NfZGVwdGg6IDMNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQpjc3M6IGhpZGUuY3NzDQotLS0NCg0KPHNjcmlwdCBzcmM9ImhpZGVPdXRwdXQuanMiPjwvc2NyaXB0Pg0KDQpDYXJvbGluZSBQYXRlbmF1ZGUgPGJyPiANCipbQmlibGlvdGjDqWNhaXJlIC0gQmlibGlvdGjDqHF1ZSBkZXMgbGV0dHJlcyBldCBzY2llbmNlcyBodW1haW5lc10oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2d1aWRlcy9kb25uZWVzLXN0YXRpc3RpcXVlcy1nZW9zcGF0aWFsZXMvZG9ubmVlcy1zdGF0aXN0aXF1ZXMpKiANCjxicj4gDQoNCltTY3JpcHQgQ29sYWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9Db3Vycy1FRFVsaWIvRkFTLUlTRFMvYmxvYi9tYWluL21vZHVsZS00LzRfMV9zdGF0aXN0aXF1ZXNfZGVzY3JpcHRpdmVzLmlweW5iKSB8IFtTY3JpcHQgUl0oaHR0cHM6Ly9naXRodWIuY29tL0NvdXJzLUVEVWxpYi9GQVMtSVNEUy9ibG9iL21haW4vbW9kdWxlLTQvNC4xLXN0YXRpc3RpcXVlcy1kZXNjcmlwdGl2ZXMuUikgDQoNCjxicj4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KDQoNCjxkaXYgY2xhc3M9ImZvbGQgbyI+DQpgYGB7cn0NCiMgQ2hhcmdlbWVudCBkZXMgbW9kdWxlcyBuw6ljZXNzYWlyZXMNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShxdWVzdGlvbnIpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShIbWlzYykNCg0KIyBBam91dGVyIGxhIGZvbmN0aW9uIGRlIHTDqWzDqWNoYXJnZW1lbnQgc2kgbsOpY2Vzc2FpcmU6DQojIGluc3RhbGwucGFja2FnZXMoImNhciIsIGRlcGVuZGVuY2llcz1UUlVFKQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJxdWVzdGlvbnIiLCBkZXBlbmRlbmNpZXM9VFJVRSkNCiMgaW5zdGFsbC5wYWNrYWdlcygicHN5Y2giLCBkZXBlbmRlbmNpZXM9VFJVRSkNCiMgaW5zdGFsbC5wYWNrYWdlcygiSG1pc2MiLCBkZXBlbmRlbmNpZXM9VFJVRSkNCg0KIyBUw6lsw6ljaGFyZ2VtZW50IGRlIGxhIGJhc2UgZGUgZG9ubsOpZXMgaGR2MjAwMyBkdSBtb2R1bGUgcXVlc3Rpb25yDQojIChFeHRyYWl0IGRlIGwnZW5xdcOqdGUgIkhpc3RvaXJlIGRlIHZpZSIgZGUgbCdJbnNlZSAtIGh0dHBzOi8vd3d3Lmluc2VlLmZyL2ZyL3N0YXRpc3RpcXVlcy8yNTMyMjQ0KQ0KZGF0YShoZHYyMDAzKQ0KDQojIENvcGllIGRlIGxhIGJhc2UgZGUgZG9ubsOpZXMgZGFucyB1biBvYmpldCAoZGF0YXRhYmxlKSBub21tw6kgYmQNCmJkIDwtIGhkdjIwMDMNCmBgYA0KDQo8YnI+DQoNCg0KIyAxLiBTdGF0aXN0aXF1ZXMgZGVzY3JpcHRpdmVzIHVuaXZhcmnDqWVzDQoNCjxicj4NCg0KIyMgMS4xLiBGb25jdGlvbiBnw6luw6lyaXF1ZSBzdW1tYXJ5KCkgDQoqICAgRm91cm5pdCBsZXMgcHJpbmNpcGFsZXMgbWVzdXJlcyBkZSB0ZW5kYW5jZSBjZW50cmFsZSBldCBkZSBkaXNwZXJzaW9uIGTigJl1bmUgZGlzdHJpYnV0aW9uIGF2ZWMgcXVhcnRpbGVzIA0KKiAgIEPigJllc3QgdW5lIGZvbmN0aW9uIGRvbnQgbGUgY29tcG9ydGVtZW50IHPigJlhZGFwdGUgYXUgdHlwZSBk4oCZb2JqZXQNCiogICDDiWxpbWluZSBkJ2VtYmzDqWUgdmFsZXVycyBtYW5xdWFudGVzDQoNCmBgYHtyfQ0Kc3VtbWFyeShiZCkgIyBiYXNlIGRlIGRvbm7DqWVzIA0KYGBgDQoNCg0KYGBge3J9DQpzdW1tYXJ5KGJkJGFnZSkgIyB2YXJpYWJsZSBxdWFudGl0YXRpdmUNCmBgYA0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShiZCRvY2N1cCkgIyB2YXJpYWJsZSBxdWFsaXRhdGl2ZQ0KYGBgDQoNCjxicj4NCg0KIyMgMS4yLiBBdXRyZXMgZm9uY3Rpb25zIHBvdXIgaW5kaWNhdGV1cnMgaW5kaXZpZHVlbHMNCg0KYGBge3J9DQojIEZvbmN0aW9ucyBkaXZlcnNlcyBwZXJtZXR0YW50IGQnZXhwbG9yZXIgbGVzIGluZGljYXRldXJzIGRlIGNlbnRyYWxpdMOpIA0KIyBldCBkZSBkaXNwZXJzaW9uIHBvdXIgdmFyaWFibGUgcXVhbnRpdGF0aXZlDQojIFRvdWpvdXJzIGFqb3V0ZXIgbmEucm09VCBlbiBhcmd1bWVudA0KDQptZWRpYW4oYmQkaGV1cmVzLnR2LCBuYS5ybT1UUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQptZWFuKGJkJGhldXJlcy50diwgbmEucm09VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0KbWF4KGJkJGhldXJlcy50diwgbmEucm09VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0KbWluKGJkJGhldXJlcy50diwgbmEucm09VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0Kc3VtKGJkJGhldXJlcy50diwgbmEucm09VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmFuZ2UoYmQkaGV1cmVzLnR2LCBuYS5ybT1UUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQp2YXIoYmQkaGV1cmVzLnR2LCBuYS5ybT1UUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQpzZChiZCRoZXVyZXMudHYsIG5hLnJtPVRSVUUpDQpgYGANCg0KDQpgYGB7cn0NCnF1YW50aWxlKGJkJGhldXJlcy50diwgbmEucm09VFJVRSkNCmBgYA0KDQo8YnI+DQoNCiMjIyBGb25jdGlvbnMgZGUgbm9ybWFsaXTDqQ0KDQpgYGB7cn0NCnNrZXcoYmQkaGV1cmVzLnR2LCBuYS5ybT1UUlVFKSAjIG1vZHVsZSBwc3ljaA0KYGBgDQoNCg0KYGBge3J9DQprdXJ0b3NpKGJkJGhldXJlcy50diwgbmEucm09VFJVRSkgIyBtb2R1bGUgcHN5Y2gNCmBgYA0KDQo8YnI+DQoNCiMjIyBGb25jdGlvbnMgZGUgdHJhbnNmb3JtYXRpb246IG5vcm1hbGl0w6kgJiByYW5nDQoNCmBgYHtyfQ0KYmQkYWdlLmxvZyA8LSBsb2coYmQkYWdlLCBiYXNlPTEwKSAgICAgIyBMb2dhcml0aG1lICgsIGJhc2U9MTApDQpgYGANCg0KDQpgYGB7cn0NCmJkJGFnZS5zcXJ0IDwtIHNxcnQoYmQkYWdlKSAgICAjIFJhY2luZSBjYXJyw6llDQpgYGANCg0KDQpgYGB7cn0NCmJkJGFnZS5zY2FsZSA8LSBzY2FsZShiZCRhZ2UsIGNlbnRlciA9IFRSVUUsIHNjYWxlID0gVFJVRSkgICAgIyBTdGFuZGFyZGlzYXRpb246IGNlbnRyYWdlIGV0IHLDqWR1Y3Rpb24gKFpzY29yZSkNCmBgYA0KDQoNCjxicj4NCg0KIyMgMS4zLiBMYSB0csOocyB1dGlsZSBmb25jdGlvbiBhcHBseSgpDQoNCmBgYHtyfQ0KIyMjIFBvdXIgYXBwbGlxdWVyIHVuZSBmb25jdGlvbiBzdXIgcGx1c2lldXJzIHZhcmlhYmxlcyDDoCBsYSBmb2lzDQphcHBseShiZFsgLGMoImFnZSIsICJoZXVyZXMudHYiLCJmcmVyZXMuc29ldXJzIildLCBuYS5ybT1UUlVFLCBNQVJHSU49MiwgRlVOPW1lYW4pDQoNCiMgYygpIGluZGlxdWUgbGVzIHZhcmlhYmxlcyDDoCB1dGlsaXNlciBkYW5zIGxlIGNhbGN1bA0KIyBNQVJHSU49MjogY2FsY3VsIMOgIHRyYXZlcnMgbGVzIHBhcnRpY2lwYW50cyAoaWNpIG1veWVubmUgZGUgY29sb25uZXMpLCA9MSBlc3Qgw6AgdHJhdmVycyBsZXMgcmFuZ8OpZXMNCiMgRlVOPW1lYW46IGxhIGZvbmN0aW9uIMOgIGFwcGxpcXVlciwgcG91cnJhaXQgw6p0cmUgbidpbXBvcnRlIGxhcXVlbGxlIGNvbW1lIHNvbW1lLCB2YXJpYW5jZS4uLg0KYGBgDQoNCjxicj4NCg0KIyMgMS40LiBUYWJsZSBkZSBmcsOpcXVlbmNlcw0KDQo8YnI+DQoNCiMjIyBGb25jdGlvbiB0YWJsZSgpIC0gVGFibGVhdXggZCdlZmZlY3RpZnMgDQoNCmBgYHtyfQ0KdGFibGUoYmQkZnJlcmVzLnNvZXVycykgICAgIyB2YXIgbnVtw6lyaXF1ZQ0KYGBgDQoNCg0KYGBge3J9DQp0Yi5jYXQgPC0gdGFibGUoYmQkcXVhbGlmKSAgICAgICAgICAgICMgdmFyIHF1YWxpIChyw6lzdWx0YXQgcGFyZWlsIMOgIHN1bW1hcnkoKSkNCg0KIyBFeGNsdSBOQSBwYXIgZMOpZmF1dCwgc2lub24gaWwgZmF1dCB1dGlsaXNlciBs4oCZYXJndW1lbnQgdXNlTkEgPSJhbHdheXMiIG91ICJpZmFueSINCiMgT24gcGxhY2UgbGEgdGFibGUgZGFucyB1biBub3V2ZWwgb2JqZXQgcG91ciBwb3V2b2lyIGx1aSBhcHBsaXF1ZXIgZCdhdXRyZXMgb3DDqXJhdGlvbnMNCmBgYA0KDQoNCjxicj4NCg0KIyMjIEF1dHJlcyBmb25jdGlvbnMgcGVydGluZW50ZXMNCg0KYGBge3J9DQpwcm9wLnRhYmxlKHRiLmNhdCkgIyBBcHBsaXF1w6llIMOgIHVuZSAidGFibGUiIHBvdXIgdHJhbnNmb3JtZXIgbGVzIHZhbGV1cnMgZW4gcHJvcG9ydGlvbnMNCmBgYA0KDQpgYGB7cn0NCiMgQWZmaWNoZXIgZW4gJSBldCBhcnJvbmRpcg0KDQpyb3VuZCgocHJvcC50YWJsZSh0Yi5jYXQpKSoxMDApIA0KYGBgDQoNCg0KYGBge3J9DQojIEZvbmN0aW9uIGZyZXEgKG1vZHVsZSBxdWVzdGlvbnIpDQoNCmZyZXEoYmQkcXVhbGlmKSAjIGFmZmljaGUgbGVzIE5BIHBhciBkw6lmYXV0DQpgYGANCg0KDQpgYGB7cn0NCiMjIyBGb25jdGlvbiBmcmVxOiBub21icmV1eCBhcmd1bWVudHMgdXRpbGVzIHBvc3NpYmxlcw0KDQpmcmVxKGJkJHF1YWxpZiwgY3VtID0gVFJVRSwgdG90YWwgPSBUUlVFLCBzb3J0ID0gImluYyIsIGRpZ2l0cyA9IDAsIGV4Y2x1ZGUgPSBOQSkNCg0KICAjIGN1bTogYWZmaWNoZXIgb3Ugbm9uIGxlcyAlIGN1bXVsw6lzDQogICMgdG90YWw6IGFqb3V0ZXIgbGVzIGVmZmVjdGlmcyB0b3RhdXgNCiAgIyBzb3J0OiB0cmllciBsZSB0YWJsZWF1IHBhciBmcsOpcXVlbmNlIGNyb2lzc2FudGUgKHNvcnQ9ImluYyIpIG91IGTDqWNyb2lzc2FudGUgKHNvcnQ9ImRlYyIpDQogICMgZGlnaXRzOiBhcnJvbmRpcg0KICAjIGV4Y2x1ZGU6IGV4Y2x1cmUgdmFsZXVycyBtYW5xdWFudGVzDQpgYGANCg0KPGJyPg0KDQojIDIuIFN0YXRpc3RpcXVlcyBkZXNjcmlwdGl2ZXMgYml2YXJpw6llcw0KDQo8YnI+DQoNCiMjIDIuMS4gVGFibGVhdXggY3JvaXPDqWVzDQoNCjxicj4NCg0KIyMjIEZvbmN0aW9uIHRhYmxlKCkgZXQgY2llLg0KKiAgIDFlciBhcmd1bWVudCB2YXIgZW4gbGlnbmUgKHgpLCAyZSB2YXIgZW4gY29sb25uZSAoeSkNCg0KYGBge3J9DQp0YiA8LXRhYmxlKGJkJHRyYXYuc2F0aXMsIGJkJHNleGUpIA0KDQojIHBvdXIgdW5lIHRhYmxlIMOgIHBsdXMgZGUgZGV1eCBuaXZlYXV4LCBzaW1wbGVtZW50IGFqb3V0ZXIgdW5lIHZhcmlhYmxlIGFkZGl0aW9ubmVsbGUNCmBgYA0KDQoNCmBgYHtyfQ0KdGIgIyBEaXN0cmlidXRpb24gZGUgbGEgc2F0aXNmYWN0aW9uIGF1IHRyYXZhaWwgc2Vsb24gbGUgc2V4ZQ0KYGBgDQoNCmBgYHtyfQ0KIyBBam91dGVyIGxlcyB0b3RhdXggZGVzIGVmZmVjdGlmcw0KDQphZGRtYXJnaW5zKHRiKSAgICANCmBgYA0KDQoNCmBgYHtyfQ0KIyAlIFRvdGF1eCANCnByb3AodGIpICAgICAgDQpgYGANCg0KDQpgYGB7cn0NCiMgJSBUb3RhdXgNCg0KcHJvcC50YWJsZSh0YiwgbWFyZ2luID0gMikgICAgDQoNCiMgbWFyZ2luID0gMSBwb3VyIHByb3BvcnRpb24gZW4gcmFuZ8OpZXMNCiMgbWFyZ2luID0gMiBwb3VyIHByb3BvcnRpb24gZW4gY29sb25uZXMNCiMgKjEwMA0KYGBgDQoNCg0KYGBge3J9DQojIHJwcm9wIGV0IGNwcm9wIGRlIHF1ZXN0aW9uciBwb3VyICUNCg0KY3Byb3AodGIsIHBlcmNlbnQgPSBUUlVFKSAgICAjICUgZW4gY29sb25uZXMNCg0KIyBBcmd1bWVudCBwZXJjZW50IHBvdXIgYWZmaWNoZXIgbGVzICUNCmBgYA0KDQpgYGB7cn0NCnJwcm9wKHRiLCBwZXJjZW50ID0gVFJVRSwgZGlnaXRzID0gMCkgICAgIyAlIGVuIGxpZ25lcywgYXJndW1lbnQgZGlnaXRzIHBvdXIgYXJyb25kaXINCmBgYA0KDQo8YnI+DQoNCiMjIyAyLjIuIENvbXBhcmVyIGRlcyBncm91cGVzIDogYnkoKSBldCB0YXBwbHkoKSANCg0KKiAgIExlcyB0csOocyBwcmF0aXF1ZXMgZm9uY3Rpb25zIGJ5KCkgZXQgdGFwcGx5KCkgKHZhcmlhbnRlIGRlIGxhIGZvbmN0aW9uIGFwcGx5KQ0KKiAgIFBlcm1ldHRlbnQgZCdhcHBsaXF1ZXIgdW5lIGZvbmN0aW9uIHN1ciB1bmUgdmFyaWFibGUgcXVhbnRpdGF0aXZlICgxZXIpIHNlbG9uIGxlcyBtb2RhbGl0w6lzIGQndW5lIHZhcmlhYmxlIGNhdMOpZ29yaWVsbGUgKDJpZW0pDQoNCmBgYHtyfQ0KYnkoYmQkYWdlLCBiZCRzZXhlLCBtZWFuLCBuYS5ybT1UUlVFKQ0KYGBgDQoNCmBgYHtyfQ0KdGFwcGx5KGJkJGFnZSwgYmQkc2V4ZSwgbWVhbiwgbmEucm09VFJVRSkNCmBgYA0KDQpgYGB7cn0NCnRhcHBseShiZCRyZWxpZywgYmQkc2V4ZSwgdGFibGUpIA0KYGBgDQoNCmBgYHtyfQ0KdGFwcGx5KGJkJHJlbGlnLCBiZCRzZXhlLCBmcmVxKQ0KYGBgDQoNCjxicj4NCg0KIyMjIDIuMy4gRm9uY3Rpb24geHRhYnMgLSBOb3RhdGlvbiBmb3JtdWxlDQoNCiogUmVwb3NlIHN1ciBsJ3V0aWxpc2F0aW9uIGRlIGxhIG5vdGF0aW9uIGZvcm11bGUgcXVpIGTDqWZpbmlzc2VudCBsZXMgcmVsYXRpb25zIGVudHJlIGxlcyB2YXJpYWJsZXMgOiBOb21Gb25jdGlvbihWRCB+IFZJKS4NCiogUHVpc3F1ZSBsZSB0YWJsZWF1IGNyb2lzw6kgbidhdHRyaWJ1ZSBwYXMgZGUgcsO0bGUgc3DDqWNpZmlxdWUgYXV4IHZhcmlhYmxlcywgb24gcGxhY2UgbGVzIGRldXggdmFyaWFibGVzIGFwcsOocyBsZSB0aWxkZTogfiB4ICsgeS4NCiogT24gaW5kaXF1ZSBsZSBub20gZHUgdGFibGVhdSBhcHLDqHMgbGEgdmlyZ3VsZS4NCg0KYGBge3J9DQp4dGFicyAofiBzZXhlICsgb2NjdXAsIGJkKQ0KYGBgDQoNCjxicj4NCg0KKioqDQoNCjwvZGl2Pg==