0:00:00.512,0:00:17.222 (musica de jazz) 0:00:17.222,0:00:20.166 Sandi: Então você pensaria que escrever 0:00:20.166,0:00:23.288 código orientado a objetos [br]fosse difícil. 0:00:23.288,0:00:26.661 Tudo que precisa fazer é[br]olhas nossos apps, certo? 0:00:26.661,0:00:29.972 Temos boas intenções, [br]e quase sempre escrevemos 0:00:29.972,0:00:35.261 códigos que podemos vir a[br]odiar. 0:00:35.261,0:00:36.965 E quando mais eu penso [br]nisso, vejo que, 0:00:36.965,0:00:39.449 meu trabalho é pensar em [br]como escrever código melhor. 0:00:39.449,0:00:42.598 E quanto mais penso,[br]mais acho que 0:00:42.598,0:00:47.340 todos os problemas, tem uma[br]mesma solução simples 0:00:47.340,0:00:49.463 e agora quando pessoas me perguntam 0:00:49.463,0:00:51.254 como escrever código [br]orientado a objetos, 0:00:51.254,0:00:54.771 eu dou-lhes uma pequena dica. 0:00:54.771,0:00:58.425 Eu digo "criar coisas menores", é só isso. 0:00:58.425,0:01:00.593 Criar classes menores, métodos menores, 0:01:00.593,0:01:04.931 e deixar-lhes saber o mínimo possível [br]um sobre o outro. 0:01:04.931,0:01:06.640 E ultimamente estou em uma missão 0:01:06.640,0:01:08.234 Tenho tido essa obsessão [br]nos últimos meses, 0:01:08.234,0:01:10.483 e é sobre condicionais. 0:01:10.483,0:01:11.448 Tem muito código por aí 0:01:11.448,0:01:12.867 com condicionais feios nele, 0:01:12.867,0:01:15.685 e ando me questionando [br]quando eu deveria substituir 0:01:15.685,0:01:17.874 trocar condicionais por objetos pequenos 0:01:17.874,0:01:19.634 e como eu deveria fazer isso 0:01:19.634,0:01:22.594 e o que aconteceria com meu código [br]se eu fizesse isso. 0:01:22.594,0:01:24.378 Eu estava muito confiante [br]em Miami em novembro 0:01:24.378,0:01:26.970 e eu tive essa obsessão em Jim Weirich, 0:01:26.970,0:01:29.650 quem alguns de vocês [br]provavelmente conheceram, 0:01:29.650,0:01:33.449 e ele me direcionou para o 'Gilded Rose'. 0:01:33.449,0:01:34.879 Isso é um 'Kata', [br]aparentemente é 0:01:34.879,0:01:37.226 muito conhecido, [br]mas eu não saio muito, 0:01:37.226,0:01:38.838 então eu [br](risos) 0:01:38.838,0:01:40.629 nunca tinha ouvido disso. 0:01:40.629,0:01:43.689 É tão famoso que você pode[br]simplesmente botar no Google 0:01:43.689,0:01:46.729 e achar uma explicação do problema,[br]mas eu não fiz isso. 0:01:46.729,0:01:48.379 Eu queria tratar esse [br]problema como 0:01:48.379,0:01:50.345 se fosse um problema de produção mesmo, 0:01:50.345,0:01:51.973 e que minha única informação 0:01:51.973,0:01:54.152 fosse o teste e o código. 0:01:54.152,0:01:56.337 Então eu olhei para o dele. 0:01:56.337,0:01:58.391 Eu baixei o repositório dele, 0:01:58.391,0:01:59.317 e olhei para o problema, 0:01:59.317,0:02:02.330 e tinha tanta interesse nele [br]que tirei ideias 0:02:02.330,0:02:06.776 da minha palestra de hoje. 0:02:06.776,0:02:09.574 Eu alterei o código dele só um pouco, 0:02:09.574,0:02:11.256 mas só para ser [br]mais fácil de falar 0:02:11.256,0:02:13.688 Isso realmente é a 'Gilded Rose Kata', 0:02:13.688,0:02:14.514 então, vamos. 0:02:14.514,0:02:17.368 Tem a classe 'Gilded Rose', e essa[br]é a estrutura 0:02:17.368,0:02:20.454 Ela tem atributos para nome, qualidade[br]e dias restantes 0:02:20.454,0:02:22.326 ela initializa valores, 0:02:22.326,0:02:24.934 e tem um método "tick". 0:02:24.934,0:02:27.527 Agora aqui tem o método 'tick', [br]não, na verdade 0:02:27.527,0:02:32.836 isso é apenas a primeira metade dele, [br]aqui tem o resto. 0:02:32.836,0:02:34.336 Eu sei que não dá para ler isso 0:02:34.336,0:02:36.229 Nem tente, mesmo se conseguir, ok? 0:02:36.229,0:02:37.384 Aqui é o método inteiro. 0:02:37.384,0:02:38.999 Eu só quero que vocês tenham uma ideia 0:02:38.999,0:02:39.845 do tamanho e forma dele. 0:02:39.845,0:02:43.255 É um 'if' de 43 linhas. 0:02:43.255,0:02:45.441 E para mim isso é muito, muito difícil, 0:02:45.441,0:02:48.752 mas eu sou conhecida por[br]ser boolean-impedida. 0:02:48.752,0:02:50.440 (risos) 0:02:50.440,0:02:52.344 Eu sei que é subjetivo o meu senso de[br]quão dificil 0:02:52.344,0:02:55.268 de entender algo. [br]E isso possivelmente é errado 0:02:55.268,0:02:57.330 então em vez disso eu usei algumas métricas. 0:02:57.330,0:03:00.513 Analisei ele usando a métrica "Flog". 0:03:00.513,0:03:02.476 "Flog" é uma métrica. [br]Ok, o que é uma métrica? 0:03:02.476,0:03:06.391 Uma métrica é uma ideia "crowdsource" sobre alguma coisa. 0:03:06.391,0:03:09.619 Ok? Eu tenho minha própria opinião [br]sobre quanto isso é complexo, 0:03:09.619,0:03:12.563 mas eu posso usar a sabedoria-da-multidão [br]dessa métrica, 0:03:12.563,0:03:14.658 a métrica Flog, que anota.... 0:03:14.658,0:03:17.250 É uma métrica ABC, então anota atribuições, 0:03:17.250,0:03:18.789 'branches', e condicionais. 0:03:18.789,0:03:20.660 Ela simplesmente conta coisas e soma-las. 0:03:20.660,0:03:21.957 Pontuações maiores são piores. 0:03:21.957,0:03:23.890 Elas indicam código mais complexo, 0:03:23.890,0:03:25.240 código que vai ser mais difícil 0:03:25.240,0:03:26.951 a entender e raciocinar. 0:03:26.951,0:03:30.454 Então, Flog disse que a classe GildedRose registrou 50, 0:03:30.454,0:03:33.611 e aquele método "tick" ganhou 45. 0:03:33.611,0:03:36.121 (lamentação)[br]Dói, né? 0:03:36.121,0:03:38.153 Então Flog disse que é complicado, 0:03:38.153,0:03:40.169 mas antes de continuar eu quero introduzir 0:03:40.169,0:03:44.370 uma métrica muito subjetiva [br]sobre complexidade. 0:03:44.370,0:03:45.686 Então, passo muito tempo esses dias 0:03:45.686,0:03:51.200 indo para lugares e olhando código [br]sobre qual eu não sei nada. 0:03:51.200,0:03:52.641 Pessoas me ligam, e vou pro escritório deles, 0:03:52.641,0:03:54.305 e passo alguns dias. 0:03:54.305,0:03:55.943 E como você poderia imaginar, 0:03:55.943,0:03:59.749 ninguém me liga se as coisas [br]estão indo bem. 0:03:59.749,0:04:01.800 (risos)[br]Né? 0:04:01.800,0:04:03.593 E quando eu chegar, eles não me pedem 0:04:03.593,0:04:06.650 para olhar o código do[br]qual eles tem orgulho. 0:04:06.650,0:04:09.304 Eles me pedem para olhar as [br]partes mais hediondas, 0:04:09.304,0:04:11.178 as coisas que tem contextos meio longos 0:04:11.178,0:04:13.650 e complexos na história. 0:04:13.650,0:04:16.584 Código que tem saído completamente [br]do controle. 0:04:16.584,0:04:19.509 E as explicações não são apenas [br]longas e confusas 0:04:19.509,0:04:21.750 porque o problema é difícil, 0:04:21.750,0:04:22.490 mas eles fazem aquilo que [br]todos nós fazemos, 0:04:22.490,0:04:24.504 você sabe aquilo que faz quando precisa 0:04:24.504,0:04:26.406 explicar um pouco de código que você escreveu 0:04:26.406,0:04:28.416 de qual você tem vergonha? 0:04:28.416,0:04:30.489 Você não apenas explica como funciona. 0:04:30.489,0:04:31.559 Você se sente obrigado a explicar 0:04:31.559,0:04:34.914 todos os motivos por ter ficado assim.[br](risos) Né? 0:04:34.914,0:04:37.155 Podem rir. Eu faço. Eu sei que vocês[br]também fazem, né? 0:04:37.155,0:04:38.594 Simplesmente dói. Odiamos isso. 0:04:38.594,0:04:40.177 Então essas explicações são longas 0:04:40.177,0:04:41.367 e confusas e tem muitas 0:04:41.367,0:04:44.332 informações paralelas 0:04:44.332,0:04:46.199 E chega um ponto, eu entendo... 0:04:46.199,0:04:47.449 mas chega um ponto durante toda 0:04:47.449,0:04:50.210 explicação quando eu começo a [br]me sentir igual aquele cachorro, 0:04:50.210,0:04:54.720 Ginger, no desenho do Gary Larson. 0:04:54.720,0:04:56.483 quando começa a virar "blah, blah, blah," 0:04:56.483,0:04:58.474 Sandi "blah, blah, blah"[br](risos) 0:04:58.474,0:05:00.400 E de repente eu volto 0:05:00.400,0:05:01.512 para ouvir eles dizendo 0:05:01.512,0:05:03.556 então, o que você acha que [br]deveríamos fazer 0:05:03.556,0:05:07.211 sobre essa linha de código?[br](risos) 0:05:07.211,0:05:08.937 E antigamente me assustava muito 0:05:08.937,0:05:10.801 Senti como se precisasse entender tudo 0:05:10.801,0:05:12.931 para poder ajudar com alguma coisa. 0:05:12.931,0:05:14.371 Mas depois de algumas viagens, 0:05:14.371,0:05:15.956 eu percebi que tem algo muito 0:05:15.956,0:05:17.413 simples que poderia fazer para me ajudar 0:05:17.413,0:05:19.977 a identificar o que eles poderiam [br]se beneficiar modificando. 0:05:19.977,0:05:24.242 Eu chamo isso do "teste vesgo".[br](risos) 0:05:24.242,0:05:25.862 É assim que funciona: 0:05:25.862,0:05:29.173 Aperte os olhos, se incline 0:05:29.173,0:05:30.856 e olhe o código. 0:05:30.856,0:05:36.329 Buscamos por mudanças[br]na forma (risos) 0:05:36.329,0:05:39.701 e mudanças de cor. 0:05:41.270,0:05:44.208 Mudanças da forma quer dizer [br]que temos condicionais aninhados 0:05:44.208,0:05:45.640 e são difíceis de racionalizar. 0:05:45.640,0:05:48.890 Mudanças de cor dizem que seu código está 0:05:48.890,0:05:50.337 em níveis diferentes de abstração, 0:05:50.337,0:05:52.343 e querem dizer que a história que conta 0:05:52.343,0:05:53.685 vai ser difícil a seguir. 0:05:53.685,0:05:55.512 Agora, o que é sobre esse código? 0:05:55.512,0:05:56.977 Bem, ele tem 16 condicionais "if", 0:05:56.977,0:05:58.570 algumas delas são negadas, 0:05:58.570,0:06:00.730 e conectam algo com um "&", 0:06:00.730,0:06:01.559 tem 3 Strings mágicos, que são usados em todo lugar, 0:06:01.559,0:06:04.554 e vários números mágicos, 0:06:04.554,0:06:06.210 nem sei quantos.[br](risos) 0:06:06.210,0:06:07.956 Agora, pelo menos tem testes. 0:06:07.956,0:06:08.856 Ah, desculpe, aqui são os Strings mágicos. 0:06:08.856,0:06:11.655 Essas três coisas: 0:06:11.655,0:06:13.365 Brie, Sulfuras, e Backstage passes, 0:06:13.365,0:06:17.797 sei lá o que isso quer dizer. 0:06:17.797,0:06:21.632 E tem testes e eles passam. 0:06:21.632,0:06:24.820 Agora, tem seis testes pulados, certo?[br](risos) 0:06:24.820,0:06:26.934 Então sei lá o que é isso. 0:06:26.934,0:06:31.153 Então eu abro o código e só [br]olho esse primeiro teste. 0:06:31.153,0:06:32.736 Ah, desculpe, os testes são relacionados[br]as Strings mágicas 0:06:32.736,0:06:34.185 exceto desse grupo que é sobre 0:06:34.185,0:06:37.712 algo que se chama "Normal", 0:06:37.712,0:06:40.370 que nunca é mencionada nas condicionais.[br](risos) 0:06:40.370,0:06:41.410 Eu suspeito que tem um "else" 0:06:41.410,0:06:42.976 em algum lugar que importa, certo? 0:06:42.976,0:06:46.199 Então eu abro o teste e olho nele. 0:06:46.199,0:06:50.410 Aqui tem um, são todos assim. 0:06:50.410,0:06:51.622 Estou vendendo algo, certo? 0:06:51.622,0:06:55.106 Presumindo um GildedRose [br]que tem esse nome, 0:06:55.106,0:06:59.704 atributo e qualidade, [br]esses são nossos três attr_readers, 0:06:59.704,0:07:02.305 quando eu dou 'tick', nesse caso, [br]qualidade baixa por um, 0:07:02.305,0:07:03.224 dias sobrando baixa por um, 0:07:03.224,0:07:04.258 ambos baixam por um. 0:07:04.258,0:07:06.563 É como seu eu estivesse vendendo leite, 0:07:06.563,0:07:10.377 ou ovos, ou queijo ou algo [br]que tem validade, 0:07:10.377,0:07:12.625 que vai expirar, onde eles [br]ficam ruins em alguma data. 0:07:12.625,0:07:15.145 Então, ainda estou explorando, 0:07:15.145,0:07:17.576 ainda nem sei qual é meu trabalho, 0:07:17.576,0:07:22.850 e olho para os três testes pulados, 0:07:22.850,0:07:23.279 e tem algo que se chama "Conjurado",[br](risos) 0:07:23.279,0:07:24.872 e todos seguem a mesma linha, 0:07:24.872,0:07:26.809 todos os testes parecem que supondo isso 0:07:26.809,0:07:30.138 quando eu dou "tick", vejo essa mudança. 0:07:30.138,0:07:33.457 E agora eu percebo, caramba, 0:07:33.457,0:07:36.948 eu preciso modificar esse código.[br](risos) 0:07:36.948,0:07:41.961 Então eu tentei, eu tentei, 0:07:41.961,0:07:43.121 muito obedientemente, eu tentei, mas foi uma falha miserável. 0:07:43.121,0:07:44.704 Eu não consegui. 0:07:44.704,0:07:47.920 Aquele condicional de 43 linhas me venceu. 0:07:47.920,0:07:49.123 Toda vez que eu tentei, eu tipo abri [br]um teste Conjurado 0:07:49.123,0:07:51.940 eu fui fazer uma mudança [br]naquele condicional 0:07:51.940,0:07:53.129 para fazer o teste passar, [br]quebraria mais algo. 0:07:53.129,0:07:54.793 Gastei horas nisso. 0:07:54.793,0:07:56.916 Agora, eu fui prejudicada, [br]mas realmente, foi difícil. 0:07:56.916,0:07:58.743 Seria difícil para você também, eu acho. 0:07:58.743,0:08:00.308 Então, se mudar aquele condicional 0:08:00.308,0:08:02.297 fosse tão difícil, você precisa perguntar, 0:08:02.297,0:08:03.457 por que eu estava tentando? Por que eu tentei fazer, 0:08:03.457,0:08:09.145 o que me levou a tentar alterar 0:08:09.145,0:08:12.456 aquele pedação de código incrívelmente complicado. 0:08:12.456,0:08:13.634 E a resposta é que me senti que eu deveria. 0:08:13.634,0:08:16.720 E isso é o que acontece, né? 0:08:16.720,0:08:17.610 Você escreve um código, e alguém pede uma mudança. 0:08:17.610,0:08:18.279 O que nos fazemos? 0:08:18.279,0:08:20.743 Você roda o código procurando 0:08:20.743,0:08:22.495 um código que é parecido com 0:08:22.495,0:08:24.657 a coisa nova que está tentando fazer, 0:08:24.657,0:08:25.368 e você coloque o código aí. 0:08:25.368,0:08:28.480 É assim que agimos. 0:08:28.480,0:08:30.615 Novatos mais, eles tem medo de criar novos objetos, 0:08:30.615,0:08:32.515 então eles só coloquem mais código aonde conseguem 0:08:32.515,0:08:34.283 achar algo parecido com aquilo que estão tentando adicionar, 0:08:34.283,0:08:36.948 e se aquele lugar já tem um "if", 0:08:36.948,0:08:38.590 eles adicionam mais um galho, né? 0:08:38.590,0:08:40.111 É assim que funciona. 0:08:40.111,0:08:41.288 E o que acontece é, a tendência natural 0:08:41.288,0:08:42.460 é que código cresce, 0:08:42.460,0:08:43.465 e cresce, e cresce. 0:08:43.465,0:08:44.416 E chega um ponto, né? 0:08:44.416,0:08:46.306 Ele cresce, e cresce, e cresce. 0:08:46.306,0:08:48.115 E chega um ponto em que vira, 0:08:48.115,0:08:50.536 e naquele ponto é tão grande que 0:08:50.536,0:08:53.216 você não consegue imaginar colocando código em outro lugar. 0:08:53.216,0:08:55.863 0:08:55.863,0:08:59.193 0:08:59.193,0:09:01.720 0:09:01.720,0:09:04.213 0:09:04.213,0:09:05.636 0:09:05.636,0:09:09.235 0:09:09.235,0:09:12.809 0:09:12.809,0:09:14.295 0:09:14.295,0:09:17.170 0:09:17.170,0:09:19.410 0:09:19.410,0:09:21.390 0:09:21.390,0:09:23.290 0:09:23.290,0:09:25.810 0:09:25.810,0:09:26.673 0:09:26.673,0:09:28.888 0:09:28.888,0:09:30.515 0:09:30.515,0:09:31.643 0:09:31.643,0:09:34.979 0:09:34.979,0:09:36.681 0:09:36.681,0:09:38.966 0:09:38.966,0:09:39.890 0:09:39.890,0:09:41.814 0:09:41.814,0:09:43.304 0:09:43.304,0:09:44.726 0:09:44.726,0:09:45.731 0:09:45.731,0:09:47.270 0:09:47.270,0:09:49.412 0:09:49.412,0:09:51.367 0:09:51.367,0:09:54.550 0:09:54.550,0:09:56.197 0:09:56.197,0:09:57.701 0:09:57.701,0:09:59.624 0:09:59.624,0:10:01.608 0:10:01.608,0:10:04.871 0:10:04.871,0:10:08.533 0:10:08.533,0:10:09.793 0:10:09.793,0:10:13.139 0:10:13.139,0:10:15.353 0:10:15.353,0:10:17.928 0:10:17.928,0:10:23.173 0:10:23.173,0:10:26.962 0:10:26.962,0:10:29.733 0:10:29.733,0:10:33.144 0:10:33.144,0:10:34.340 0:10:34.340,0:10:36.625 0:10:36.625,0:10:38.434 0:10:38.434,0:10:41.862 0:10:41.862,0:10:45.242 0:10:45.242,0:10:47.710 0:10:47.710,0:10:52.248 0:10:52.248,0:10:54.575 0:10:54.575,0:10:56.431 0:10:56.431,0:10:58.826 0:10:58.826,0:11:03.226 0:11:03.226,0:11:07.300 0:11:07.300,0:11:10.513 0:11:10.513,0:11:12.513 0:11:12.513,0:11:14.993 0:11:14.993,0:11:17.511 0:11:17.511,0:11:20.320 0:11:20.320,0:11:24.839 0:11:24.839,0:11:26.962 0:11:26.962,0:11:28.688 0:11:28.688,0:11:30.371 0:11:30.371,0:11:32.922 0:11:32.922,0:11:37.993 0:11:37.993,0:11:39.936 0:11:39.936,0:11:41.817 0:11:41.817,0:11:46.145 0:11:46.145,0:11:49.105 0:11:49.105,0:11:51.761 0:11:51.761,0:11:53.831 0:11:53.831,0:11:56.248 0:11:56.248,0:11:58.968 0:11:58.968,0:12:02.551 0:12:02.551,0:12:05.650 0:12:05.650,0:12:06.311 0:12:06.311,0:12:08.246 0:12:08.246,0:12:10.920 0:12:10.920,0:12:13.970 0:12:13.970,0:12:14.211 0:12:14.211,0:12:17.825 0:12:17.825,0:12:20.546 0:12:20.546,0:12:22.273 0:12:22.273,0:12:24.695 0:12:24.695,0:12:25.929 0:12:25.929,0:12:28.537 0:12:28.537,0:12:31.138 0:12:31.138,0:12:33.190 0:12:33.190,0:12:34.364 0:12:34.364,0:12:36.472 0:12:36.472,0:12:37.482 0:12:37.482,0:12:39.936 0:12:39.936,0:12:42.259 0:12:42.259,0:12:43.960 0:12:43.960,0:12:46.640 0:12:46.640,0:12:48.378 0:12:48.378,0:12:51.367 0:12:51.367,0:12:52.725 0:12:52.725,0:12:56.772 0:12:56.772,0:12:57.925 0:12:57.925,0:13:00.579 0:13:00.579,0:13:02.658 0:13:02.658,0:13:04.322 0:13:04.322,0:13:05.528 0:13:05.528,0:13:08.922 0:13:08.922,0:13:09.830 0:13:09.830,0:13:11.521 0:13:11.521,0:13:13.581 0:13:13.581,0:13:17.470 0:13:17.470,0:13:19.107 0:13:19.107,0:13:20.582 0:13:20.582,0:13:21.755 0:13:21.755,0:13:22.868 0:13:22.868,0:13:25.225 0:13:25.225,0:13:27.000 0:13:27.000,0:13:28.728 0:13:28.728,0:13:29.985 0:13:29.985,0:13:31.525 0:13:31.525,0:13:33.809 0:13:33.809,0:13:34.835 0:13:34.835,0:13:37.121 0:13:37.121,0:13:38.968 0:13:38.968,0:13:41.539 0:13:41.539,0:13:42.647 0:13:42.647,0:13:43.986 0:13:43.986,0:13:45.417 0:13:45.417,0:13:48.900 0:13:48.900,0:13:50.461 0:13:50.461,0:13:53.497 0:13:53.497,0:13:55.523 0:13:55.523,0:13:59.924 0:13:59.924,0:14:01.178 0:14:01.178,0:14:02.499 0:14:02.499,0:14:06.537 0:14:06.537,0:14:10.297 0:14:10.297,0:14:12.547 0:14:12.547,0:14:14.690 0:14:14.690,0:14:17.297 0:14:17.297,0:14:18.799 0:14:18.799,0:14:22.193 0:14:22.193,0:14:23.704 0:14:23.704,0:14:25.891 0:14:25.891,0:14:28.393 0:14:28.393,0:14:29.697 0:14:29.697,0:14:30.840 0:14:30.840,0:14:33.703 0:14:33.703,0:14:36.256 0:14:36.256,0:14:37.589 0:14:37.589,0:14:39.520 0:14:39.520,0:14:42.710 0:14:42.710,0:14:44.393 0:14:44.393,0:14:47.606 0:14:47.606,0:14:50.700 0:14:50.700,0:14:52.599 0:14:52.599,0:14:56.818 0:14:56.818,0:14:59.545 0:14:59.545,0:15:00.984 0:15:00.984,0:15:03.157 0:15:03.157,0:15:05.849 0:15:05.849,0:15:09.443 0:15:09.443,0:15:10.857 0:15:10.857,0:15:13.790 0:15:13.790,0:15:15.178 0:15:15.178,0:15:20.916 0:15:20.916,0:15:22.989 0:15:22.989,0:15:24.903 0:15:24.903,0:15:26.448 0:15:26.448,0:15:29.842 0:15:29.842,0:15:31.921 0:15:31.921,0:15:33.930 0:15:33.930,0:15:35.207 0:15:35.207,0:15:36.627 0:15:36.627,0:15:37.697 0:15:37.697,0:15:40.119 0:15:40.119,0:15:43.386 0:15:43.386,0:15:45.571 0:15:45.571,0:15:46.988 0:15:46.988,0:15:49.270 0:15:49.270,0:15:50.178 0:15:50.178,0:15:51.825 0:15:51.825,0:15:54.147 0:15:54.147,0:15:56.561 0:15:56.561,0:15:59.554 0:15:59.554,0:16:00.714 0:16:00.714,0:16:02.840 0:16:02.840,0:16:06.104 0:16:06.104,0:16:12.178 0:16:12.178,0:16:13.949 0:16:13.949,0:16:14.826 0:16:14.826,0:16:16.560 0:16:16.560,0:16:17.866 0:16:17.866,0:16:20.527 0:16:20.527,0:16:22.230 0:16:22.230,0:16:23.446 0:16:23.446,0:16:26.155 0:16:26.155,0:16:30.617 0:16:30.617,0:16:33.945 0:16:33.945,0:16:35.475 0:16:35.475,0:16:37.346 0:16:37.346,0:16:39.462 0:16:39.462,0:16:41.820 0:16:41.820,0:16:44.231 0:16:44.231,0:16:46.922 0:16:46.922,0:16:48.407 0:16:48.407,0:16:50.634 0:16:50.634,0:16:52.933 0:16:52.933,0:16:55.785 0:16:55.785,0:16:57.207 0:16:57.207,0:17:00.230 0:17:00.230,0:17:02.851 0:17:02.851,0:17:06.607 0:17:06.607,0:17:11.640 0:17:11.640,0:17:13.512 0:17:13.512,0:17:14.664 0:17:14.664,0:17:16.329 0:17:16.329,0:17:19.016 0:17:19.016,0:17:20.690 0:17:20.690,0:17:24.992 0:17:24.992,0:17:27.950 0:17:27.950,0:17:29.267 0:17:29.267,0:17:31.750 0:17:31.750,0:17:32.165 0:17:32.165,0:17:34.773 0:17:34.773,0:17:37.347 0:17:37.347,0:17:39.894 0:17:39.894,0:17:41.154 0:17:41.154,0:17:42.406 0:17:42.406,0:17:43.719 0:17:43.719,0:17:44.833 0:17:44.833,0:17:47.560 0:17:47.560,0:17:48.612 0:17:48.612,0:17:51.556 0:17:51.556,0:17:52.393 0:17:52.393,0:17:53.651 0:17:53.651,0:17:55.423 0:17:55.423,0:17:56.737 0:17:56.737,0:17:58.492 0:17:58.492,0:18:02.166 0:18:02.166,0:18:04.216 0:18:04.216,0:18:06.510 0:18:06.510,0:18:08.248 0:18:08.248,0:18:10.866 0:18:10.866,0:18:14.915 0:18:14.915,0:18:18.182 0:18:18.182,0:18:20.665 0:18:20.665,0:18:22.810 0:18:22.810,0:18:26.194 0:18:26.194,0:18:27.847 0:18:27.847,0:18:30.808 0:18:30.808,0:18:32.580 0:18:32.580,0:18:33.419 0:18:33.419,0:18:36.855 0:18:36.855,0:18:39.688 0:18:39.688,0:18:41.361 0:18:41.361,0:18:43.673 0:18:43.673,0:18:46.168 0:18:46.168,0:18:47.380 0:18:47.380,0:18:48.640 0:18:48.640,0:18:50.809 0:18:50.809,0:18:53.342 0:18:53.342,0:18:54.498 0:18:54.498,0:18:55.856 0:18:55.856,0:18:58.609 0:18:58.609,0:18:59.824 0:18:59.824,0:19:02.615 0:19:02.615,0:19:05.863 0:19:05.863,0:19:09.957 0:19:09.957,0:19:15.285 0:19:15.285,0:19:16.823 0:19:16.823,0:19:19.578 0:19:19.578,0:19:21.865 0:19:21.865,0:19:24.266 0:19:24.266,0:19:25.974 0:19:25.974,0:19:29.209 0:19:29.209,0:19:31.715 0:19:31.715,0:19:35.250 0:19:35.250,0:19:36.278 0:19:36.278,0:19:38.646 0:19:38.646,0:19:43.819 0:19:43.819,0:19:48.551 0:19:48.551,0:19:51.186 0:19:51.186,0:19:53.240 0:19:53.240,0:19:55.492 0:19:55.492,0:19:59.817 0:19:59.817,0:20:02.822 0:20:02.822,0:20:04.170 0:20:04.170,0:20:05.593 0:20:05.593,0:20:08.490 0:20:08.490,0:20:10.183 0:20:10.183,0:20:13.764 0:20:13.764,0:20:17.569 0:20:17.569,0:20:20.935 0:20:20.935,0:20:23.797 0:20:23.797,0:20:26.830 0:20:26.830,0:20:29.960 0:20:29.960,0:20:34.327 0:20:34.327,0:20:37.861 0:20:37.861,0:20:38.951 0:20:38.951,0:20:43.450 0:20:43.450,0:20:46.424 0:20:46.424,0:20:47.543 0:20:47.543,0:20:49.496 0:20:49.496,0:20:51.772 0:20:51.772,0:20:54.680 0:20:54.680,0:20:58.135 0:20:58.135,0:21:01.264 0:21:01.264,0:21:03.749 0:21:03.749,0:21:05.144 0:21:05.144,0:21:07.206 0:21:07.206,0:21:10.598 0:21:10.598,0:21:12.585 0:21:12.585,0:21:14.636 0:21:14.636,0:21:19.216 0:21:19.216,0:21:20.341 0:21:20.341,0:21:23.465 0:21:23.465,0:21:24.789 0:21:24.789,0:21:26.576 0:21:26.576,0:21:30.617 0:21:30.617,0:21:34.326 0:21:34.326,0:21:35.661 0:21:35.661,0:21:37.155 0:21:37.155,0:21:40.460 0:21:40.460,0:21:43.247 0:21:43.247,0:21:45.367 0:21:45.367,0:21:47.400 0:21:47.400,0:21:53.150 0:21:53.150,0:21:55.713 0:21:55.713,0:21:57.559 0:21:57.559,0:22:00.890 0:22:00.890,0:22:02.483 0:22:02.483,0:22:04.100 0:22:04.100,0:22:06.504 0:22:06.504,0:22:08.680 0:22:08.680,0:22:10.921 0:22:10.921,0:22:12.991 0:22:12.991,0:22:14.528 0:22:14.528,0:22:16.438 0:22:16.438,0:22:18.223 0:22:18.223,0:22:20.568 0:22:20.568,0:22:22.989 0:22:22.989,0:22:24.553 0:22:24.553,0:22:27.946 0:22:27.946,0:22:30.440 0:22:30.440,0:22:34.694 0:22:34.694,0:22:36.726 0:22:36.726,0:22:38.374 0:22:38.374,0:22:40.500 0:22:40.500,0:22:43.341 0:22:43.341,0:22:45.736 0:22:45.736,0:22:48.264 0:22:48.264,0:22:50.775 0:22:50.775,0:22:52.753 0:22:52.753,0:22:54.176 0:22:54.176,0:22:56.633 0:22:56.633,0:22:57.966 0:22:57.966,0:23:00.358 0:23:00.358,0:23:02.103 0:23:02.103,0:23:05.890 0:23:05.890,0:23:07.225 0:23:07.225,0:23:09.814 0:23:09.814,0:23:12.631 0:23:12.631,0:23:14.503 0:23:14.503,0:23:16.231 0:23:16.231,0:23:18.784 0:23:18.784,0:23:21.313 0:23:21.313,0:23:25.110 0:23:25.110,0:23:27.378 0:23:27.378,0:23:29.990 0:23:29.990,0:23:31.833 0:23:31.833,0:23:34.983 0:23:34.983,0:23:36.755 0:23:36.755,0:23:38.131 0:23:38.131,0:23:39.704 0:23:39.704,0:23:41.505 0:23:41.505,0:23:43.018 0:23:43.018,0:23:44.525 0:23:44.525,0:23:47.611 0:23:47.611,0:23:49.352 0:23:49.352,0:23:50.855 0:23:50.855,0:23:52.672 0:23:52.672,0:23:56.534 0:23:56.534,0:23:59.431 0:23:59.431,0:24:02.355 0:24:02.355,0:24:03.813 0:24:03.813,0:24:07.206 0:24:07.206,0:24:08.825 0:24:08.825,0:24:10.994 0:24:10.994,0:24:12.163 0:24:12.163,0:24:13.765 0:24:13.765,0:24:16.564 0:24:16.564,0:24:18.248 0:24:18.248,0:24:20.180 0:24:20.180,0:24:21.188 0:24:21.188,0:24:23.204 0:24:23.204,0:24:25.445 0:24:25.445,0:24:28.800 0:24:28.800,0:24:32.600 0:24:32.600,0:24:34.560 0:24:34.560,0:24:35.584 0:24:35.584,0:24:36.873 0:24:36.873,0:24:38.851 0:24:38.851,0:24:41.924 0:24:41.924,0:24:43.333 0:24:43.333,0:24:45.492 0:24:45.492,0:24:47.570 0:24:47.570,0:24:49.317 0:24:49.317,0:24:50.919 0:24:50.919,0:24:52.486 0:24:52.486,0:24:53.800 0:24:53.800,0:24:58.296 0:24:58.296,0:24:59.783 0:24:59.783,0:25:00.890 0:25:00.890,0:25:02.680 0:25:02.680,0:25:05.766 0:25:05.766,0:25:06.838 0:25:06.838,0:25:09.472 0:25:09.472,0:25:11.344 0:25:11.344,0:25:15.800 0:25:15.800,0:25:21.332 0:25:21.332,0:25:23.250 0:25:23.250,0:25:27.442 0:25:27.442,0:25:28.423 0:25:28.423,0:25:29.765 0:25:29.765,0:25:31.491 0:25:31.491,0:25:33.995 0:25:33.995,0:25:37.350 0:25:37.350,0:25:39.410 0:25:39.410,0:25:41.444 0:25:41.444,0:25:44.906 0:25:44.906,0:25:46.510 0:25:46.510,0:25:48.400 0:25:48.400,0:25:49.560 0:25:49.560,0:25:51.800 0:25:51.800,0:25:55.122 0:25:55.122,0:25:56.616 0:25:56.616,0:25:59.664 0:25:59.664,0:26:02.455 0:26:02.455,0:26:04.633 0:26:04.633,0:26:05.576 0:26:05.576,0:26:06.711 0:26:06.711,0:26:09.723 0:26:09.723,0:26:12.217 0:26:12.217,0:26:14.540 0:26:14.540,0:26:17.162 0:26:17.162,0:26:18.552 0:26:18.552,0:26:20.820 0:26:20.820,0:26:22.530 0:26:22.530,0:26:25.697 0:26:25.697,0:26:28.810 0:26:28.810,0:26:31.266 0:26:31.266,0:26:34.920 0:26:34.920,0:26:36.345 0:26:36.345,0:26:37.702 0:26:37.702,0:26:38.904 0:26:38.904,0:26:40.000 0:26:40.000,0:26:41.930 0:26:41.930,0:26:42.514 0:26:42.514,0:26:44.793 0:26:44.793,0:26:46.612 0:26:46.612,0:26:48.430 0:26:48.430,0:26:49.288 0:26:49.288,0:26:52.686 0:26:52.686,0:26:56.371 0:26:56.371,0:26:58.262 0:26:58.262,0:27:00.709 0:27:00.709,0:27:02.476 0:27:02.476,0:27:04.856 0:27:04.856,0:27:08.916 0:27:08.916,0:27:12.857 0:27:12.857,0:27:15.907 0:27:15.907,0:27:19.201 0:27:19.201,0:27:20.433 0:27:20.433,0:27:22.999 0:27:22.999,0:27:24.358 0:27:24.358,0:27:26.580 0:27:26.580,0:27:29.400 0:27:29.400,0:27:32.437 0:27:32.437,0:27:34.390 0:27:34.390,0:27:35.644 0:27:35.644,0:27:38.852 0:27:38.852,0:27:40.662 0:27:40.662,0:27:43.297 0:27:43.297,0:27:46.500 0:27:46.500,0:27:48.128 0:27:48.128,0:27:50.595 0:27:50.595,0:27:55.750 0:27:55.750,0:27:59.495 0:27:59.495,0:28:01.699 0:28:01.699,0:28:05.110 0:28:05.110,0:28:06.368 0:28:06.368,0:28:09.677 0:28:09.677,0:28:11.767 0:28:11.767,0:28:13.217 0:28:13.217,0:28:15.396 0:28:15.396,0:28:17.976 0:28:17.976,0:28:19.794 0:28:19.794,0:28:21.235 0:28:21.235,0:28:23.881 0:28:23.881,0:28:26.334 0:28:26.334,0:28:28.425 0:28:28.425,0:28:31.492 0:28:31.492,0:28:33.384 0:28:33.384,0:28:35.417 0:28:35.417,0:28:37.737 0:28:37.737,0:28:39.609 0:28:39.609,0:28:41.940 0:28:41.940,0:28:44.199 0:28:44.199,0:28:45.476 0:28:45.476,0:28:46.825 0:28:46.825,0:28:48.274 0:28:48.274,0:28:50.346 0:28:50.346,0:28:51.849 0:28:51.849,0:28:53.349 0:28:53.349,0:28:54.834 0:28:54.834,0:28:57.706 0:28:57.706,0:28:59.684 0:28:59.684,0:29:01.818 0:29:01.818,0:29:04.390 0:29:04.390,0:29:07.420 0:29:07.420,0:29:09.367 0:29:09.367,0:29:11.238 0:29:11.238,0:29:16.404 0:29:16.404,0:29:18.670 0:29:18.670,0:29:19.713 0:29:19.713,0:29:20.983 0:29:20.983,0:29:23.556 0:29:23.556,0:29:25.590 0:29:25.590,0:29:27.310 0:29:27.310,0:29:29.783 0:29:29.783,0:29:31.368 0:29:31.368,0:29:34.903 0:29:34.903,0:29:37.684 0:29:37.684,0:29:41.138 0:29:41.138,0:29:43.973 0:29:43.973,0:29:45.190 0:29:45.190,0:29:48.274 0:29:48.274,0:29:49.768 0:29:49.768,0:29:51.506 0:29:51.506,0:29:54.457 0:29:54.457,0:29:56.553 0:29:56.553,0:29:57.736 0:29:57.736,0:30:01.699 0:30:01.699,0:30:03.221 0:30:03.221,0:30:04.166 0:30:04.166,0:30:06.494 0:30:06.494,0:30:09.610 0:30:09.610,0:30:11.401 0:30:11.401,0:30:14.425 0:30:14.425,0:30:17.286 0:30:17.286,0:30:19.633 0:30:19.633,0:30:20.642 0:30:20.642,0:30:24.458 0:30:24.458,0:30:26.995 0:30:26.995,0:30:29.398 0:30:29.398,0:30:31.457 0:30:31.457,0:30:34.535 0:30:34.535,0:30:37.146 0:30:37.146,0:30:40.339 0:30:40.339,0:30:42.741 0:30:42.741,0:30:44.388 0:30:44.388,0:30:46.196 0:30:46.196,0:30:50.227 0:30:50.227,0:30:52.104 0:30:52.104,0:30:55.240 0:30:55.240,0:30:57.193 0:30:57.193,0:30:59.291 0:30:59.291,0:31:01.906 0:31:01.906,0:31:04.372 0:31:04.372,0:31:06.515 0:31:06.515,0:31:08.150 0:31:08.150,0:31:10.819 0:31:10.819,0:31:13.352 0:31:13.352,0:31:15.494 0:31:15.494,0:31:17.514 0:31:17.514,0:31:19.563 0:31:19.563,0:31:23.746 0:31:23.746,0:31:26.499 0:31:26.499,0:31:29.352 0:31:29.352,0:31:30.802 0:31:30.802,0:31:32.372 0:31:32.372,0:31:35.200 0:31:35.200,0:31:37.700 0:31:37.700,0:31:39.511 0:31:39.511,0:31:42.400 0:31:42.400,0:31:45.640 0:31:45.640,0:31:50.104 0:31:50.104,0:31:54.933 0:31:54.933,0:31:59.496 0:31:59.496,0:32:01.673 0:32:01.673,0:32:06.470 0:32:06.470,0:32:09.671 0:32:09.671,0:32:11.770 0:32:11.770,0:32:12.167 0:32:12.167,0:32:14.126 0:32:14.126,0:32:17.248 0:32:17.248,0:32:20.886 0:32:20.886,0:32:24.384 0:32:24.384,0:32:26.392 0:32:26.392,0:32:27.717 0:32:27.717,0:32:30.387 0:32:30.387,0:32:33.123 0:32:33.123,0:32:37.361 0:32:37.361,0:32:39.989 0:32:39.989,0:32:44.470 0:32:44.470,0:32:46.530 0:32:46.530,0:32:48.645 0:32:48.645,0:32:51.154 0:32:51.154,0:32:52.675 0:32:52.675,0:32:54.220 0:32:54.220,0:32:57.202 0:32:57.202,0:32:58.634 0:32:58.634,0:33:01.830 0:33:01.830,0:33:03.140 0:33:03.140,0:33:07.360 0:33:07.360,0:33:10.419 0:33:10.419,0:33:12.522 0:33:12.522,0:33:14.200 0:33:14.200,0:33:15.902 0:33:15.902,0:33:18.545 0:33:18.545,0:33:21.570 0:33:21.570,0:33:23.989 0:33:23.989,0:33:26.499 0:33:26.499,0:33:28.759 0:33:28.759,0:33:31.989 0:33:31.989,0:33:35.507 0:33:35.507,0:33:38.326 0:33:38.326,0:33:40.663 0:33:40.663,0:33:42.277 0:33:42.277,0:33:44.101 0:33:44.101,0:33:47.810 0:33:47.810,0:33:48.601 0:33:48.601,0:33:51.730 0:33:51.730,0:33:54.377 0:33:54.377,0:33:56.789 0:33:56.789,0:34:00.990 0:34:00.990,0:34:02.170 0:34:02.170,0:34:05.714 0:34:05.714,0:34:08.179 0:34:08.179,0:34:11.400 0:34:11.400,0:34:14.351 0:34:14.351,0:34:18.951 0:34:18.951,0:34:20.775 0:34:20.775,0:34:23.827 0:34:23.827,0:34:25.475 0:34:25.475,0:34:26.474 0:34:26.474,0:34:29.928 0:34:29.928,0:34:30.755 0:34:30.755,0:34:33.159 0:34:33.159,0:34:36.830 0:34:36.830,0:34:38.855 0:34:38.855,0:34:40.510 0:34:40.510,0:34:41.905 0:34:41.905,0:34:43.956 0:34:43.956,0:34:46.405 0:34:46.405,0:34:48.565 0:34:48.565,0:34:50.321 0:34:50.321,0:34:53.201 0:34:53.201,0:34:54.385 0:34:54.385,0:34:57.670 0:34:57.670,0:34:59.130 0:34:59.130,0:35:00.856 0:35:00.856,0:35:02.629 0:35:02.629,0:35:05.401 0:35:05.401,0:35:07.212 0:35:07.212,0:35:10.537 0:35:10.537,0:35:13.921 0:35:13.921,0:35:19.622 0:35:19.622,0:35:20.724 0:35:20.724,0:35:23.350 0:35:23.350,0:35:30.343 0:35:30.343,0:35:34.580 0:35:34.580,0:35:38.387 0:35:38.387,0:35:41.242 0:35:41.242,0:35:45.100 0:35:45.100,0:35:48.314 0:35:48.314,0:35:49.697 0:35:49.697,0:35:51.255 0:35:51.255,0:35:53.170 0:35:53.170,0:35:54.442 0:35:54.442,0:35:57.169 0:35:57.169,0:35:58.886 0:35:58.886,0:36:01.477 0:36:01.477,0:36:03.574 0:36:03.574,0:36:06.496 0:36:06.496,0:36:08.295 0:36:08.295,0:36:10.548 0:36:10.548,0:36:14.215 0:36:14.215,0:36:16.200 0:36:16.200,0:36:18.250 0:36:18.250,0:36:20.564 0:36:20.564,0:36:22.645 0:36:22.645,0:36:26.152 0:36:26.152,0:36:29.609 0:36:29.609,0:36:32.202 0:36:32.202,0:36:35.500 0:36:35.500,0:36:38.712 0:36:38.712,0:36:42.768 0:36:42.768,0:36:45.420 0:36:45.420,0:36:46.855 0:36:46.855,0:36:50.761 0:36:50.761,0:36:52.419 0:36:52.419,0:36:56.330 0:36:56.330,0:37:00.326 0:37:00.326,0:37:02.524 0:37:02.524,0:37:04.545 0:37:04.545,0:37:07.832 0:37:07.832,0:37:12.152 0:37:12.152,0:37:14.678 0:37:14.678,0:37:17.630 0:37:17.630,0:37:20.148 0:37:20.148,0:37:22.514 0:37:22.514,0:37:25.306 0:37:25.306,0:37:26.952 0:37:26.952,0:37:30.308 0:37:30.308,0:37:32.458 0:37:32.458,0:37:35.320 0:37:35.320,0:37:39.400 0:37:39.400,0:37:43.130 0:37:43.130,0:37:44.371 0:37:44.371,0:37:46.919 0:37:46.919,0:37:50.393 0:37:50.393,0:37:53.604 0:37:53.604,0:37:56.945 0:37:56.945,0:38:01.522 0:38:01.522,0:38:04.565 0:38:04.565,0:38:06.780 0:38:06.780,0:38:07.173 0:38:07.173,0:38:09.310 0:38:09.310,0:38:11.681 0:38:11.681,0:38:13.921 0:38:13.921,0:38:15.541 0:38:15.541,0:38:26.890 (aplausos) 0:38:26.890,0:38:44.484