Explorando Netflix

A continuación veremos algunas técnicas de análisis exploratorio utilizando un dataset muy intersante que contiene productos de Netflix con sus respectivas variables. El dataset puede encontrarse en el sitio de kaggle

La Base contiene 7787 productos de Netflix emitidos desde 2008-01-01 hasta 2021-01-16. Veamos como es la distribución por el tipo de show.

Series vs Películas

Puede verse que la proporción mayoritaria está compuesta por películas. Veamos como fue la evolución de esta segmentación.

Puede apreciarse un significativo crecimiento de la proporción de la oferta dedicada a las series.Veamos como se resuelve esta dicotomía al enfrentar las proporciones con la variable pais de origen. Dado que la variable “country” puede contener varios paises debido a coproducciones, puede resultar util generar un nuevo dataframe con todos los paises por separado. Luego, elaboraremos una nueva tabla que contenga las cifras de cada tipo de producción junto con el porcentaje que representa al interior de cada país. Estos son los 10 paises que encabezan el ranking

Tipo de Productos
Paises Películas TV Show Total
United States 2431 ( % 73.73) 866 ( % 26.27) 3297
India 915 ( % 92.42) 75 ( % 7.58) 990
United Kingdom 467 ( % 64.59) 256 ( % 35.41) 723
Canada 286 ( % 69.42) 126 ( % 30.58) 412
France 265 ( % 75.93) 84 ( % 24.07) 349
Japan 103 ( % 35.89) 184 ( % 64.11) 287
Spain 158 ( % 73.49) 57 ( % 26.51) 215
South Korea 55 ( % 25.94) 157 ( % 74.06) 212
Germany 157 ( % 78.89) 42 ( % 21.11) 199
Mexico 101 ( % 65.58) 53 ( % 34.42) 154

Veamos la misma información en formato gráfico:

La gráfica evidencia que Estados Unidos es el principal proovedor de contenido de la plataforma con una distancia de mayor amplitud en el caso de las peliculas, donde India supera a Gran Bretaña en el segundo lugar.

Duración

Veamos ahora la exploración de los contenidos según la duración.

Tambien podemos mostrar la misma información a partir de un gráfico de puntos:

Para finalizar, puede resultar de gran interés analizar la cantidad de temporadas de las series y su evolución con el correr de los años, tomando en consideración su año de lanzamiento.


  1. Soy sociólogo (FSOC-UBA). Me dedico al analisis de datos en temas como el estudio de la opinión pública, comportamiento electoral, analisis de texto, redes sociales y consumos culturales, todo mediante R y Phyton. Dirijo el Observatorio de Opinión Publica en ACDES y escribo en mi blog de temas de R y en mi blog de temas de generales. Contacto: ↩︎

LS0tDQp0aXRsZTogIkVEQSBOZXRmbGl4Ig0KYXV0aG9yOiAiRmVyY2hlcm8gSnVhbiBHdWlsbGVybW8gKEBndWlsbGVhZGhvbm9yZW0pXlsgX1NveSBzb2Npw7Nsb2dvIChGU09DLVVCQSkuIE1lIGRlZGljbyBhbCBhbmFsaXNpcyBkZSBkYXRvcyBlbiB0ZW1hcyBjb21vIGVsIGVzdHVkaW8gZGUgbGEgb3BpbmnDs24gcMO6YmxpY2EsIGNvbXBvcnRhbWllbnRvIGVsZWN0b3JhbCwgYW5hbGlzaXMgZGUgdGV4dG8sIHJlZGVzIHNvY2lhbGVzIHkgY29uc3Vtb3MgY3VsdHVyYWxlcywgdG9kbyBtZWRpYW50ZSBSIHkgUGh5dG9uLiBEaXJpam8gZWwgT2JzZXJ2YXRvcmlvIGRlIE9waW5pw7NuIFB1YmxpY2EgIGVuXyBbQUNERVNdKGh0dHA6Ly93d3cuYWNkZXN3ZWIub3JnLykgX3kgZXNjcmlibyBlbl8gW21pIGJsb2cgZGUgdGVtYXMgZGUgUl0oaHR0cHM6Ly9ycHVicy5jb20vZ3VpbGxlZmVyY2hlcm8pIF95IGVuXyBbbWkgYmxvZyBkZSB0ZW1hcyBkZSBnZW5lcmFsZXNdKGh0dHBzOi8vYml0YWNvcmFtb2Rlcm5hYmxvZy53b3JkcHJlc3MuY29tKS4gX0NvbnRhY3RvXzogZ3VpbGxlZmVyY2hlcm9AZ21haWwuY29tXSINCmRhdGU6ICJBYnJpbCBkZSAyMDIxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2M6IFRSVUUNCiAgICBkZXB0aDogNQ0Kc3VidGl0bGU6IEV4cGxvcmFuZG8gcXVlIGhheSBkZXRyYXMgZGUgTmV0ZmxpeA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSkNCmBgYA0KDQojIyBFeHBsb3JhbmRvIE5ldGZsaXgNCg0KQSBjb250aW51YWNpw7NuIHZlcmVtb3MgYWxndW5hcyB0w6ljbmljYXMgZGUgYW7DoWxpc2lzIGV4cGxvcmF0b3JpbyB1dGlsaXphbmRvIHVuIGRhdGFzZXQgbXV5IGludGVyc2FudGUgcXVlIGNvbnRpZW5lIHByb2R1Y3RvcyBkZSBOZXRmbGl4IGNvbiBzdXMgcmVzcGVjdGl2YXMgdmFyaWFibGVzLiBFbCBkYXRhc2V0IHB1ZWRlIGVuY29udHJhcnNlIGVuIGVsIFtzaXRpb10oaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9zaGl2YW1iL25ldGZsaXgtc2hvd3MpIGRlIGthZ2dsZQ0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KI0xpbXBpYW1vcyBhbWJpZW50ZSBkZSB0cmFiYWpvDQoNCnJtKGxpc3QgPSBscygpKQ0KDQojSW5zdGFsYW1vcyBMaWJyZXLDrWFzDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeSgidGlkeXRleHQiKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQoNCiNMZWVtb3MgbG9zIGRhdG9zDQoNCkJhc2UgPC0gcmVhZF9jc3YoZmlsZSA9ICJuZXRmbGl4X3RpdGxlcy5jc3YiKQ0KDQojUHJpbWVyYSBhcHJveGltYWNpw7NuIA0KQmFzZSAlPiUgDQogIGhlYWQoKQ0KDQpCYXNlICU+JSANCiAgc3RyKCkNCg0KI0xpbXBpYW1vcyBjb2x1bW5hcw0KDQpCYXNlJHJhdGluZyA8LSBhcy5mYWN0b3IoQmFzZSRyYXRpbmcpDQpCYXNlJGRhdGVfYWRkZWQgPC0gbWR5KEJhc2UkZGF0ZV9hZGRlZCkNCkJhc2UkQcOxbyA8LSB5ZWFyKEJhc2UkZGF0ZV9hZGRlZCkNCkJhc2Ukc2hvd19pZCA8LSBOVUxMDQoNCiNnZW5lcmFtb3Mgb2JqZXRvcyBhdXhpbGlhcmVzIHBhcmEgdGV4dG8gZGluw6FtaWNvDQoNCkRlc2RlIDwtIEJhc2UgJT4lIA0KICBzZWxlY3QoZGF0ZV9hZGRlZCkgJT4lIA0KICBhcnJhbmdlKGRhdGVfYWRkZWQpICU+JSANCiAgaGVhZCgxKSAlPiUgDQogIHB1bGwoKQ0KDQpIYXN0YSA8LSBCYXNlICU+JSANCiAgc2VsZWN0KGRhdGVfYWRkZWQpICU+JSANCiAgYXJyYW5nZShkZXNjKGRhdGVfYWRkZWQpKSAlPiUgDQogIGhlYWQoMSkgJT4lIA0KICBwdWxsKCkNCg0KY2FudGlkYWQgPC0gbnJvdyhCYXNlKQ0KDQpgYGANCg0KTGEgQmFzZSBjb250aWVuZSBgciBjYW50aWRhZGAgcHJvZHVjdG9zIGRlIE5ldGZsaXggZW1pdGlkb3MgZGVzZGUgYHIgRGVzZGVgIGhhc3RhIGByIEhhc3RhYC4gVmVhbW9zIGNvbW8gZXMgbGEgZGlzdHJpYnVjacOzbiBwb3IgZWwgdGlwbyBkZSBzaG93Lg0KDQojIFNlcmllcyB2cyBQZWzDrWN1bGFzDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpUYWJsYV8xIDwtIEJhc2UgJT4lIA0KICBzZWxlY3QodHlwZSkgJT4lIA0KICBncm91cF9ieSh0eXBlKSAlPiUgDQogIHN1bW1hcmlzZShUb3RhbCA9IG4oKSkgJT4lIA0KICBtdXRhdGUoUG9yY2VudGFqZSA9IHJvdW5kKFRvdGFsL3N1bShUb3RhbCkqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YSA9IHBhc3RlMChUb3RhbCwgIiAoICUgIiwgUG9yY2VudGFqZSwgIikiKSkNCg0KZ2dwbG90KFRhYmxhXzEsIGFlcyh4ID0gIiIgLCB5ID0gVG90YWwsIGZpbGwgPSB0eXBlICkpKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAwLjUpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gRXRpcXVldGEpLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmNTU5NTEiLCAiI2YxZThlNiIpKSsNCiAgICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRhc2V0IE5ldGZsaXggIixEZXNkZSwgIiAtICIsIEhhc3RhKSwNCiAgICAgICBzdWJ0aXRsZSA9ICJUaXBvcyBkZSBQcm9kdWN0b3MiLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBLYWdnbGUiLA0KICAgICAgIHggPSAiIiwNCiAgICAgICB5ID0gIiIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkRlY2ltYSBXRSIsIGNvbG9yID0gImdyZXkyMCIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJUaW1lcyBOZXcgUm9tYW4iLCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpKSsNCiAgY29vcmRfZmxpcCgpDQoNCg0KYGBgDQoNClB1ZWRlIHZlcnNlIHF1ZSBsYSBwcm9wb3JjacOzbiBtYXlvcml0YXJpYSBlc3TDoSBjb21wdWVzdGEgcG9yIHBlbMOtY3VsYXMuIFZlYW1vcyBjb21vICBmdWUgbGEgZXZvbHVjacOzbiBkZSBlc3RhIHNlZ21lbnRhY2nDs24uDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzIgPC0gQmFzZSAlPiUgDQogIHNlbGVjdChBw7FvLHR5cGUpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKEHDsW8pKSAlPiUNCiAgZmlsdGVyKEHDsW8gJWluJSBjKDIwMTc6MjAyMCkpICU+JQ0KICBncm91cF9ieShBw7FvLHR5cGUpICU+JSANCiAgc3VtbWFyaXNlKFRvdGFsID0gbigpKSAlPiUgDQogIG11dGF0ZShQb3JjZW50YWplID0gcm91bmQoVG90YWwvc3VtKFRvdGFsKSoxMDAsMikpICU+JSANCiAgbXV0YXRlKEV0aXF1ZXRhID0gcGFzdGUwKFRvdGFsLCAiICggJSAiLCBQb3JjZW50YWplLCAiKSIpKQ0KDQoNClRhYmxhYXV4IDwtIFRhYmxhXzIgJT4lIA0KICBzZWxlY3QoQcOxbykgJT4lIA0KICBmaWx0ZXIoIWR1cGxpY2F0ZWQoQcOxbykpDQoNCmZpbGFzIDwtIG5yb3coVGFibGFhdXgpDQoNCmdncGxvdChUYWJsYV8yLCBhZXMoeCA9ICIiICwgeSA9IFRvdGFsLCBmaWxsID0gdHlwZSApKSsNCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHdpZHRoID0gMSkrDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBFdGlxdWV0YSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0yLjUpKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIjZjU1OTUxIiwgIiNmMWU4ZTYiKSkrDQogICAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0YXNldCBOZXRmbGl4ICIsRGVzZGUsICIgLSAiLCBIYXN0YSksDQogICAgICAgc3VidGl0bGUgPSAiVGlwb3MgZGUgUHJvZHVjdG9zIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogS2FnZ2xlIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41LCB2anVzdCA9IDAuNSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCkpKw0KICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSkpKw0KICBjb29yZF9mbGlwKCkrDQogIGZhY2V0X3dyYXAofkHDsW8sIG5yb3cgPSBmaWxhcykNCg0KYGBgDQoNCg0KUHVlZGUgYXByZWNpYXJzZSB1biBzaWduaWZpY2F0aXZvIGNyZWNpbWllbnRvIGRlIGxhIHByb3BvcmNpw7NuIGRlIGxhIG9mZXJ0YSBkZWRpY2FkYSBhIGxhcyBzZXJpZXMuVmVhbW9zIGNvbW8gc2UgcmVzdWVsdmUgZXN0YSBkaWNvdG9tw61hIGFsIGVuZnJlbnRhciBsYXMgcHJvcG9yY2lvbmVzIGNvbiBsYSB2YXJpYWJsZSBwYWlzIGRlIG9yaWdlbi4gDQpEYWRvIHF1ZSBsYSB2YXJpYWJsZSAiY291bnRyeSIgcHVlZGUgY29udGVuZXIgdmFyaW9zIHBhaXNlcyBkZWJpZG8gYSBjb3Byb2R1Y2Npb25lcywgcHVlZGUgcmVzdWx0YXIgdXRpbCBnZW5lcmFyIHVuIG51ZXZvIGRhdGFmcmFtZSBjb24gdG9kb3MgbG9zIHBhaXNlcyBwb3Igc2VwYXJhZG8uIA0KTHVlZ28sIGVsYWJvcmFyZW1vcyB1bmEgbnVldmEgdGFibGEgcXVlIGNvbnRlbmdhIGxhcyBjaWZyYXMgZGUgY2FkYSB0aXBvIGRlIHByb2R1Y2Npw7NuIGp1bnRvIGNvbiBlbCBwb3JjZW50YWplIHF1ZSByZXByZXNlbnRhIGFsIGludGVyaW9yIGRlIGNhZGEgcGHDrXMuIEVzdG9zIHNvbiBsb3MgMTAgcGFpc2VzIHF1ZSBlbmNhYmV6YW4gZWwgcmFua2luZw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpwYWlzZXMgPC0gc3Ryc3BsaXQoQmFzZSRjb3VudHJ5LCBzcGxpdCA9ICIsICIpDQpwYWlzZXNfc3BsaXQgPC0gZGF0YS5mcmFtZSh0aXBvID0gcmVwKEJhc2UkdHlwZSwgc2FwcGx5KHBhaXNlcywgbGVuZ3RoKSksIHBhaXNlcyA9IHVubGlzdChwYWlzZXMpKQ0KDQpwYWlzZXNfc3BsaXQkcGFpc2VzIDwtIGdzdWIoIiwiLCIiLHBhaXNlc19zcGxpdCRwYWlzZXMpDQoNCnByb2RfcG9yX3BhaXMgPC0gcGFpc2VzX3NwbGl0ICU+JSANCiAgZmlsdGVyKCFpcy5uYShwYWlzZXMpKSAlPiUNCiAgZ3JvdXBfYnkocGFpc2VzLHRpcG8pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gbigpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh0b3RhbCkpICU+JSANCiAgbXV0YXRlKHRpcG8gPSBjYXNlX3doZW4odGlwbyA9PSAiTW92aWUiIH4gIlBlbGljdWxhcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICB0aXBvID09ICJUViBTaG93IiB+ICJUViIpKQ0KDQoNCg0KcHJvZF9wb3JfcGFpc19zcHJlYWQgPC0gcHJvZF9wb3JfcGFpcyAlPiUgDQogIHNwcmVhZCguLHRpcG8sdG90YWwpICU+JQ0KICBtdXRhdGVfYWxsKC4sfnJlcGxhY2UoLixpcy5uYSguKSwwKSkgJT4lIA0KICBtdXRhdGUoVG90YWwgPSBQZWxpY3VsYXMgKyBUVikgJT4lIA0KICBtdXRhdGUoUG9yY19QZWxpY3VsYXMgPSByb3VuZChQZWxpY3VsYXMvVG90YWwqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShQb3JjX1RWID0gcm91bmQoVFYvVG90YWwqMTAwLDIpKSAlPiUgDQogIG11dGF0ZShFdGlxdWV0YV9QZWxpY3VsYXMgPSBwYXN0ZTAoUGVsaWN1bGFzLCAiICggJSAiLCBQb3JjX1BlbGljdWxhcywgIikiKSkgJT4lIA0KICBtdXRhdGUoRXRpcXVldGFfVFYgPSBwYXN0ZTAoVFYsICIgKCAlICIsIFBvcmNfVFYsICIpIikpICU+JSANCiAgYXJyYW5nZShkZXNjKFRvdGFsKSkNCiAgDQpUYWJsYV8zIDwtIHByb2RfcG9yX3BhaXNfc3ByZWFkICU+JSANCiAgc2VsZWN0KHBhaXNlcyxFdGlxdWV0YV9QZWxpY3VsYXMsRXRpcXVldGFfVFYsVG90YWwpICU+JQ0KICBoZWFkKDEwKQ0KICANCiNIQUNFUiBUQUJMQSBDT04gS0FCTEUNCg0Ka2FibGUoVGFibGFfMyxhbGlnbiA9ICJsIixkaWdpdHMgPSAzLGNvbC5uYW1lcyA9IGMoIlBhaXNlcyIsIlBlbMOtY3VsYXMiLCJUViBTaG93IiwiVG90YWwiKSklPiUgDQogICAgICAgIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFLCBjb2xvciA9ICIjZjU1OTUxIikgJT4lDQogIHJvd19zcGVjKDAsYmFja2dyb3VuZCA9ICIjZjU1OTUxIiwgY29sb3IgPSAid2hpdGUiKSAlPiUgDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgIlRpcG8gZGUgUHJvZHVjdG9zIj0gMiwNCiAgICAgICAgICAgICAgICAgICAgICIgIiA9MSkpICU+JSANCiAga2FibGVfbWluaW1hbCgpDQoNCg0KYGBgDQoNCg0KVmVhbW9zIGxhIG1pc21hIGluZm9ybWFjacOzbiBlbiBmb3JtYXRvIGdyw6FmaWNvOg0KDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNClRhYmxhXzQuMSA8LSBwcm9kX3Bvcl9wYWlzICU+JQ0KICBmaWx0ZXIodGlwbyA9PSAiVFYiKSAlPiUgDQogIGhlYWQoMTApDQoNClRhYmxhXzQuMiA8LSBwcm9kX3Bvcl9wYWlzICU+JQ0KICBmaWx0ZXIodGlwbyA9PSAiUGVsaWN1bGFzIikgJT4lIA0KICBoZWFkKDEwKQ0KDQpUYWJsYV80LjMgPC0gcmJpbmQoVGFibGFfNC4xLFRhYmxhXzQuMikgJT4lIA0KICBtdXRhdGUodGlwbyA9IGFzLmZhY3Rvcih0aXBvKSwNCiAgICAgICAgIHBhaXNlcyA9IHJlb3JkZXJfd2l0aGluKHBhaXNlcyx0b3RhbCx0aXBvKSkNCg0KZ2dwbG90KFRhYmxhXzQuMywgYWVzKHg9ZmN0X3Jlb3JkZXIocGFpc2VzLHRvdGFsKSwgeT10b3RhbCwgZmlsbCA9IHRpcG8pKSsNCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiNmNTU5NTEiLCAiI2YxZThlNiIpKSsNCiAgZmFjZXRfd3JhcCh+dGlwbywgc2NhbGVzID0gImZyZWVfeSIpKw0KICBjb29yZF9mbGlwKCkrDQogIHNjYWxlX3hfcmVvcmRlcmVkKCkrDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCkpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRhc2V0IE5ldGZsaXggIixEZXNkZSwgIi0iLCBIYXN0YSksDQogICAgICAgc3VidGl0bGUgPSAiRGlzdHJpYnVjacOzbiBkZSBwcm9kdWN0b3MgcG9yIHBhw61zIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogS2FnZ2xlIiwNCiAgICAgICB4ID0gIiIsDQogICAgICAgeSA9ICIiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSwgdmp1c3QgPSAwLjUpKQ0KICANCg0KDQojIEhBQ0VSIEdSQUZJQ08gRE9CTEUNCg0KDQpgYGANCg0KTGEgZ3LDoWZpY2EgZXZpZGVuY2lhIHF1ZSBFc3RhZG9zIFVuaWRvcyBlcyBlbCBwcmluY2lwYWwgcHJvb3ZlZG9yIGRlIGNvbnRlbmlkbyBkZSBsYSBwbGF0YWZvcm1hIGNvbiB1bmEgZGlzdGFuY2lhIGRlIG1heW9yIGFtcGxpdHVkIGVuIGVsIGNhc28gZGUgbGFzIHBlbGljdWxhcywgZG9uZGUgSW5kaWEgc3VwZXJhIGEgR3JhbiBCcmV0YcOxYSBlbiBlbCBzZWd1bmRvIGx1Z2FyLg0KDQoNCiMgRHVyYWNpw7NuDQoNClZlYW1vcyBhaG9yYSBsYSBleHBsb3JhY2nDs24gZGUgbG9zIGNvbnRlbmlkb3Mgc2Vnw7puIGxhIGR1cmFjacOzbi4NCg0KDQoNCg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpCYXNlJGR1cmFjaW9uIDwtIGFzLm51bWVyaWMoc3RyX2V4dHJhY3QoQmFzZSRkdXJhdGlvbiwnWzAtOV0rJykpDQoNCmdncGxvdChCYXNlICU+JSANCiAgICAgICAgIGZpbHRlcih0eXBlID09ICJNb3ZpZSIpLGFlcyh4ID0gZmFjdG9yKEHDsW8pLCB5ID0gZHVyYWNpb24pKSsNCiAgZ2VvbV9ib3hwbG90KGNvbG9yID0gIiNmNTU5NTEiKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0YXNldCBOZXRmbGl4ICIsRGVzZGUsICItIiwgSGFzdGEpLA0KICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBwZWzDrWN1bGFzIHBvciBhw7FvIiwNCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogS2FnZ2xlIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiRHVyYWNpw7NuIChlbiBtaW51dG9zKSIpKw0KICB0aGVtZV9taW5pbWFsKCkrDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSkNCiAgDQoNCg0KYGBgDQoNClRhbWJpZW4gcG9kZW1vcyBtb3N0cmFyIGxhIG1pc21hIGluZm9ybWFjacOzbiBhIHBhcnRpciBkZSB1biBncsOhZmljbyBkZSBwdW50b3M6DQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCkJhc2UkZHVyYWNpb24gPC0gYXMubnVtZXJpYyhzdHJfZXh0cmFjdChCYXNlJGR1cmF0aW9uLCdbMC05XSsnKSkNCg0KZ2dwbG90KEJhc2UgJT4lIA0KICAgICAgICAgZmlsdGVyKHR5cGUgPT0gIk1vdmllIiksYWVzKHggPSBmYWN0b3IoQcOxbyksIHkgPSBkdXJhY2lvbikpKw0KICBnZW9tX3BvaW50KGNvbG9yID0gIiNmNTU5NTEiKSsNCiAgbGFicyh0aXRsZSA9IHBhc3RlMCgiRGF0YXNldCBOZXRmbGl4ICIsRGVzZGUsICItIiwgSGFzdGEpLA0KICAgICAgIHN1YnRpdGxlID0gIkR1cmFjacOzbiBkZSBzZXJpZXMgcG9yIGHDsW8iLA0KICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiBLYWdnbGUiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeSA9ICJEdXJhY2nDs24gKGVuIGNhbnRpZGFkIGRlIHRlbXBvcmFkYXMpIikrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoIGhqdXN0ID0gMC41ICwgdmp1c3QgPSAwLjUpKQ0KICANCg0KDQpgYGANCg0KUGFyYSBmaW5hbGl6YXIsIHB1ZWRlIHJlc3VsdGFyIGRlIGdyYW4gaW50ZXLDqXMgYW5hbGl6YXIgbGEgY2FudGlkYWQgZGUgdGVtcG9yYWRhcyBkZSBsYXMgc2VyaWVzIHkgc3UgZXZvbHVjacOzbiBjb24gZWwgY29ycmVyIGRlIGxvcyBhw7FvcywgdG9tYW5kbyBlbiBjb25zaWRlcmFjacOzbiBzdSBhw7FvIGRlIGxhbnphbWllbnRvLg0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpCYXNlJGR1cmFjaW9uIDwtIGFzLm51bWVyaWMoc3RyX2V4dHJhY3QoQmFzZSRkdXJhdGlvbiwnWzAtOV0rJykpDQoNCmdncGxvdChCYXNlICU+JSANCiAgICAgICAgIGZpbHRlcih0eXBlID09ICJUViBTaG93IiksYWVzKHggPSBmYWN0b3IocmVsZWFzZV95ZWFyKSwgeSA9IGR1cmFjaW9uKSkrDQogIGdlb21fcG9pbnQoY29sb3IgPSAiI2Y1NTk1MSIpKw0KICBsYWJzKHRpdGxlID0gcGFzdGUwKCJEYXRhc2V0IE5ldGZsaXggIixEZXNkZSwgIi0iLCBIYXN0YSksDQogICAgICAgc3VidGl0bGUgPSAiRHVyYWNpw7NuIGRlIHNlcmllcyBwb3IgYcOxbyIsDQogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IEthZ2dsZSIsDQogICAgICAgeCA9ICJBw7FvIiwNCiAgICAgICB5ID0gIkR1cmFjacOzbiAoZW4gY2FudGlkYWQgZGUgdGVtcG9yYWRhcykiKSsNCiAgdGhlbWVfbWluaW1hbCgpKw0KICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KCBoanVzdCA9IDAuNSAsIHZqdXN0ID0gMC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dCggaGp1c3QgPSAwLjUgLCB2anVzdCA9IDAuNSksDQogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKQ0KICANCg0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=