Resumen

  • La producción de petróleo se concentra en Campos Gigantes, debido a que de 2 a 4 campos poseen históricamente, alrededor del 50% de la producción del país en todos los periodos analizados

  • El complejo Cantarell es el mayor productor histórico del país y al dejar de serlo, baja la producción de petróleo en México

  • Para los periodos comprendidos desde el año 2000 hasta la actualidad, la producción de petróleo se redujó de 3029 a 1724 y un ligero aumento del número de campos de 309 a 330

  • Históricamente, aproximadamente 90% de la producción se localiza en menos de 50 campos

  • La comparación de los percentiles 90% y 100% indica la ocurrencia del mayor número de campos denominados como Campos Marginales, considerados como tales por su menor aporte a la producción

1. Introducción

Para responde a la pregunta: ¿Por qué baja la producción de petróleo en México? se requiere analizar los datos de producción de petróleo de los campos mexicanos en el periodo que transcurre desde 1930 hasta 2020.

Desde el punto de vista metodológico, la historia de producción se divide en intervalos aproximados de 10 años, de esta forma se cuantifican los cambios ocurridos en términos de producción de petróleo y número de campos para cada intervalo.

Para cada intervalo, se segrega la producción total de petróleo en cuatro porciones arbitrarias, denominados Percentiles: 50%, 70%, 90% y 100%, de esa forma se obtiene, el número de campos y la producción acumulada de cada intervalo.

La visualización de los resultados se realiza utilizando un gráfico tipo Donut, el cual muestra la proporción de los cuatro percentiles mencionados en el párrafo anterior. El orden corresponde a 50% en la porción izquierda y 100% en el sector derecho de cada figura.

En cada recuadro de la figura, se muestra el número de campos que representa el porcentaje acumulado (percentil) de la producción total del país a la fecha indicada. También se incluye la producción acumulada de petróleo.

Este enfoque utiliza el “Principio de Pareto también conocido como la regla del 80-20 y ley de los pocos vitales, describe el fenómeno estadístico por el que en cualquier población que contribuye a un efecto común, es una proporción pequeña la que contribuye a la mayor parte del efecto”.

Por otra parte, en este documento se utilizan dos definiciones: 1) Campos Gigantes considerados aquellos con una recuperación final de 500 millones de barriles, y 2) Campos Marginales, considerados como tales por su menor aporte a la producción.

Los datos utilizados para realizar el presente análisis se localizan en la página web: CNH de la Comisión Nacional de Hidrocarburos.

2. Periodo Previo a 1970

Para el primer periodo analizado, comprendido desde el inicio de la producción de petróleo del país hasta el primero de enero de 1970, los resultados obtenidos se muestran en la siguiente figura:

2.1 Observaciones

  • Número total de campos: 53
  • Producción diaria total del país: 230 Mbd (miles de barriles por día)
  • 4 campos producen 120 Mbd lo que representa 52% de la producción total del país
  • Campos principales: San Andrés, Cinco Presidentes, Poza Rica y Tres Hermanos
  • 7 campos aportan el 69% de la producción
  • 17 campos aportan el 90% de la producción
  • 36 (53 menos 17) campos producen 22 Mbd (230 menos 208)

3. Periodo 1970 - 1980

La siguiente figura muestra los resultados obtenidos para el periodo finalizado el “1980-01-01”:

3.1 Observaciones

  • Número total de campos: 120
  • Producción diaria total del país: 1248 Mbd
  • 4 campos producen 626 Mbd lo que representa 50% de la producción total del país
  • Campos principales: Samaria, Cunduacán, Sitio Grande y Oxiacaque
  • 26 campos aportan el 90% de la producción
  • 94 (120 menos 26) campos producen 123 Mbd (1248 menos 1125)

El número de campos y la producción se incrementaron sustancialmente de 53 a 120 y 230 a 1248 respectivamente. La producción creció en más de un millón de barriles para el periodo 1980 al ser comparado con 1970.

4. Periodo 1980 - 1990

La siguiente figura muestra los resultados obtenidos para el periodo finalizado el “1990-01-01”:

4.1 Observaciones

  • Número total de campos: 129
  • Producción diaria total del país: 2396 Mbd
  • 2 campos producen 1268 Mbd lo que representa 53% de la producción total del país
  • Campos principales: Cantarell y Abkatún
  • 17 campos aportan el 90% de la producción
  • 112 (129 menos 17) campos aportan 245 Mbd (2396 menos 2151)
  • Cantarell se convierte en el principal productor del país

El número de campos se incrementó ligeramente de 120 a 129 y la producción casi se duplicó al pasar de 1248 a 2396, lo que representa un incremento de 1148 Mbd para el periodo 1990 al ser comparado con 1980.

5. Periodo 1990 - 2000

La siguiente figura muestra los resultados obtenidos para el periodo finalizado el “2000-01-01”:

5.1 Observaciones

  • Número total de campos: 309
  • Producción diaria total del país: 3029 Mbd
  • 2 campos producen 1645 Mbd lo que representa 54% de la producción total del país
  • Campos principales: Cantarell y Ku
  • 24 campos aportan el 90% de la producción
  • 285 (309 menos 24) campos aportan 310 Mbd (3039 menos 2729)
  • Se mantiene Cantarell como el principal productor del país

El número de campos se incrementó sustancialmente de 129 a 309 y la producción pasó de 2396 a 3029, lo que representa un incremento de 633 Mbd para el periodo 2000 al ser comparado con 1990.

Durante este periodo, el país logro alcanzar su máxima producción históríca de petróleo.

6. Periodo 2000 - 2010

La siguiente figura muestra los resultados obtenidos para el periodo finalizado el “2010-01-01”:

6.1 Observaciones

  • Número total de campos: 323
  • Producción diaria total del país: 2612 Mbd
  • 4 campos producen 1299 Mbd lo que representa 50% de la producción total del país
  • Campos principales: Cantarell, Abkatun, Zaap y Maloob
  • 13 campos contribuyen con 71 de la producción de 1844 Mbd
  • 46 campos aportan el 90% de la producción
  • 277 (323 menos 46) campos producen 262 Mbd (2612 menos 2350)
  • Se mantiene Cantarell como el principal productor del país

El número de campos se incrementó ligeramente de 309 a 323 y la producción se redujo de 3029 a 2612, lo que representa una disminución de 416 Mbd para el periodo 2010 al ser comparado con 2000. Esta es la primera reducción de producción observada en los periodos analizados.

7. Periodo 2010 - 2020

La siguiente figura muestra los resultados obtenidos para el periodo finalizado el “2020-01-01”:

7.1 Observaciones

  • Número total de campos: 330
  • Producción diaria total del país: 1724 Mbd
  • 4 campos producen 831 Mbd lo que representa 48% de la producción total del país
  • Campos principales: Maloob, Zaap, Abkatun y Ayatsil
  • 12 campos contribuyen con 70 de la producción de 1212 Mbd
  • 49 campos aportan el 90% de la producción
  • 281 (330 menos 49) campos aportan 171 Mbd (1724 menos 1553)
  • Cantarell deja de ser el principal productor del país

El número de campos se incrementó ligeramente de 323 a 330 y la producción se redujo de 2612 a 1724, lo que representa una disminución de 888 Mbd para el periodo 2020 al ser comparado con 2010.. Esta es la segunda reducción de producción observada en los periodos analizados. El campo Cantarell deja de pertenecer al renglón de campos principales.

8. Consideraciones Finales

  • La producción de petróleo se concentra en Campos Gigantes, debido a que de 2 a 4 campos poseen históricamente, alrededor del 50% de la producción del país en todos los periodos analizados

  • El complejo Cantarell es el mayor productor histórico del país y al dejar de serlo, baja la producción de petróleo en México

  • Para los periodos comprendidos desde 2000 hasta la actualidad, la producción de petróleo se redujó de 3029 a 1724 y un ligero aumento del número de campos de 309 a 330

  • Históricamente, aproximadamente 90% de la producción se localiza en menos de 50 campos

  • La comparación de los percentiles 90% y 100% indica la ocurrencia del mayor número de campos denominados como Campos Marginales, considerados como tales por su menor aporte a la producción

LS0tCnRpdGxlOiAiwr9Qb3IgcXXDqSBiYWphIGxhIHByb2R1Y2Npw7NuIGRlIHBldHLDs2xlbyBlbiBNw6l4aWNvPyIKYXV0aG9yOiAiRXVsZXJFbmVyZ3lAZ21haWwuY29tIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOiAKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdGhlbWU6IHNpbXBsZXgKICAgIGNzczogfi9Eb2N1bWVudHMvUi9NUFAvc2NyaXBzL3N0eWxlLmNzcwogICAgdG9jX2Zsb2F0OiB5ZXMKICAgIHRvYzogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKLS0tCgojIFJlc3VtZW4gIAoKLSAqKkxhIHByb2R1Y2Npw7NuIGRlIHBldHLDs2xlbyBzZSBjb25jZW50cmEgZW4gW0NhbXBvcyBHaWdhbnRlc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2lhbnRfb2lsX2FuZF9nYXNfZmllbGRzKSwgZGViaWRvIGEgcXVlIGRlIDIgYSA0IGNhbXBvcyBwb3NlZW4gaGlzdMOzcmljYW1lbnRlLCBhbHJlZGVkb3IgZGVsIDUwJSBkZSBsYSBwcm9kdWNjacOzbiBkZWwgcGHDrXMgZW4gdG9kb3MgbG9zIHBlcmlvZG9zIGFuYWxpemFkb3MqKgoKLSAqKkVsIGNvbXBsZWpvIENhbnRhcmVsbCBlcyBlbCBtYXlvciBwcm9kdWN0b3IgaGlzdMOzcmljbyBkZWwgcGHDrXMgeSBhbCBkZWphciBkZSBzZXJsbywgYmFqYSBsYSBwcm9kdWNjacOzbiBkZSBwZXRyw7NsZW8gZW4gTcOpeGljbyoqCgotICoqUGFyYSBsb3MgcGVyaW9kb3MgY29tcHJlbmRpZG9zIGRlc2RlIGVsIGHDsW8gMjAwMCBoYXN0YSBsYSBhY3R1YWxpZGFkLCBsYSBwcm9kdWNjacOzbiBkZSBwZXRyw7NsZW8gc2UgcmVkdWrDsyBkZSAzMDI5IGEgMTcyNCB5IHVuIGxpZ2VybyBhdW1lbnRvIGRlbCBuw7ptZXJvIGRlIGNhbXBvcyBkZSAzMDkgYSAzMzAqKgogCi0gKipIaXN0w7NyaWNhbWVudGUsIGFwcm94aW1hZGFtZW50ZSA5MCUgZGUgbGEgcHJvZHVjY2nDs24gc2UgbG9jYWxpemEgZW4gbWVub3MgZGUgNTAgY2FtcG9zKiogIAoKLSAqKkxhIGNvbXBhcmFjacOzbiBkZSBsb3MgcGVyY2VudGlsZXMgOTAlIHkgMTAwJSBpbmRpY2EgbGEgb2N1cnJlbmNpYSBkZWwgbWF5b3IgbsO6bWVybyBkZSBjYW1wb3MgZGVub21pbmFkb3MgY29tbyBbQ2FtcG9zIE1hcmdpbmFsZXNdKGh0dHBzOi8vd3d3Lm9lZGlnaXRhbC5jb20vbmV3cy80NzQwNzYtbWFyZ2luYWwtZmllbGRzLWdsb2JhbC1vcHBvcnR1bml0eSksIGNvbnNpZGVyYWRvcyBjb21vIHRhbGVzIHBvciBzdSBtZW5vciBhcG9ydGUgYSBsYSBwcm9kdWNjacOzbioqCgojIDEuIEludHJvZHVjY2nDs24gIAoKUGFyYSByZXNwb25kZSBhIGxhIHByZWd1bnRhOiDCv1BvciBxdcOpIGJhamEgbGEgcHJvZHVjY2nDs24gZGUgcGV0csOzbGVvIGVuIE3DqXhpY28/IHNlIHJlcXVpZXJlIGFuYWxpemFyIGxvcyBkYXRvcyBkZSBwcm9kdWNjacOzbiBkZSBwZXRyw7NsZW8gZGUgbG9zIGNhbXBvcyBtZXhpY2Fub3MgZW4gZWwgcGVyaW9kbyBxdWUgdHJhbnNjdXJyZSBkZXNkZSAqKjE5MzAqKiBoYXN0YSAqKjIwMjAqKi4KCkRlc2RlIGVsIHB1bnRvIGRlIHZpc3RhIG1ldG9kb2zDs2dpY28sIGxhIGhpc3RvcmlhIGRlIHByb2R1Y2Npw7NuIHNlIGRpdmlkZSBlbiAqKmludGVydmFsb3MqKiBhcHJveGltYWRvcyBkZSAxMCBhw7FvcywgZGUgZXN0YSBmb3JtYSBzZSBjdWFudGlmaWNhbiBsb3MgY2FtYmlvcyBvY3Vycmlkb3MgZW4gdMOpcm1pbm9zIGRlIHByb2R1Y2Npw7NuIGRlIHBldHLDs2xlbyB5IG7Dum1lcm8gZGUgY2FtcG9zIHBhcmEgY2FkYSBpbnRlcnZhbG8uIAoKUGFyYSBjYWRhIGludGVydmFsbywgc2Ugc2VncmVnYSBsYSBwcm9kdWNjacOzbiB0b3RhbCBkZSBwZXRyw7NsZW8gZW4gY3VhdHJvIHBvcmNpb25lcyBhcmJpdHJhcmlhcywgZGVub21pbmFkb3MgW1BlcmNlbnRpbGVzXShodHRwczovL2VzLndpa2lwZWRpYS5vcmcvd2lraS9QZXJjZW50aWwpOiA1MCUsIDcwJSwgOTAlIHkgMTAwJSwgZGUgZXNhIGZvcm1hIHNlIG9idGllbmUsIGVsIG7Dum1lcm8gZGUgY2FtcG9zIHkgbGEgcHJvZHVjY2nDs24gYWN1bXVsYWRhIGRlIGNhZGEgaW50ZXJ2YWxvLgoKTGEgdmlzdWFsaXphY2nDs24gZGUgbG9zIHJlc3VsdGFkb3Mgc2UgcmVhbGl6YSB1dGlsaXphbmRvIHVuIGdyw6FmaWNvIHRpcG8gW0RvbnV0XShodHRwczovL3d3dy5tYXRoc2lzZnVuLmNvbS9kZWZpbml0aW9ucy9waWUtY2hhcnQtcGllLWdyYXBoLmh0bWwpLCBlbCBjdWFsIG11ZXN0cmEgbGEgcHJvcG9yY2nDs24gZGUgbG9zIGN1YXRybyBwZXJjZW50aWxlcyBtZW5jaW9uYWRvcyBlbiBlbCBww6FycmFmbyBhbnRlcmlvci4gRWwgb3JkZW4gY29ycmVzcG9uZGUgYSA1MCUgZW4gbGEgcG9yY2nDs24gaXpxdWllcmRhIHkgMTAwJSBlbiBlbCBzZWN0b3IgZGVyZWNobyBkZSBjYWRhIGZpZ3VyYS4gIAoKRW4gY2FkYSByZWN1YWRybyBkZSBsYSBmaWd1cmEsIHNlIG11ZXN0cmEgZWwgbsO6bWVybyBkZSBjYW1wb3MgcXVlIHJlcHJlc2VudGEgZWwgcG9yY2VudGFqZSBhY3VtdWxhZG8gKHBlcmNlbnRpbCkgZGUgbGEgcHJvZHVjY2nDs24gdG90YWwgZGVsIHBhw61zIGEgbGEgZmVjaGEgaW5kaWNhZGEuICBUYW1iacOpbiBzZSBpbmNsdXllIGxhIHByb2R1Y2Npw7NuIGFjdW11bGFkYSBkZSBwZXRyw7NsZW8uCgpFc3RlIGVuZm9xdWUgdXRpbGl6YSBlbCAiW1ByaW5jaXBpbyBkZSBQYXJldG9dKGh0dHBzOi8vZXMubS53aWtpcGVkaWEub3JnL3dpa2kvUHJpbmNpcGlvX2RlX1BhcmV0bykgdGFtYmnDqW4gY29ub2NpZG8gY29tbyBsYSByZWdsYSBkZWwgKio4MC0yMCoqIHkgKipsZXkgZGUgbG9zIHBvY29zIHZpdGFsZXMsKiogZGVzY3JpYmUgZWwgZmVuw7NtZW5vIGVzdGFkw61zdGljbyBwb3IgZWwgcXVlIGVuIGN1YWxxdWllciBwb2JsYWNpw7NuIHF1ZSBjb250cmlidXllIGEgdW4gZWZlY3RvIGNvbcO6biwgZXMgdW5hIHByb3BvcmNpw7NuIHBlcXVlw7FhIGxhIHF1ZSBjb250cmlidXllIGEgbGEgbWF5b3IgcGFydGUgZGVsIGVmZWN0byIuCgpQb3Igb3RyYSBwYXJ0ZSwgZW4gZXN0ZSBkb2N1bWVudG8gc2UgdXRpbGl6YW4gZG9zIGRlZmluaWNpb25lczogMSkgW0NhbXBvcyBHaWdhbnRlc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2lhbnRfb2lsX2FuZF9nYXNfZmllbGRzKSBjb25zaWRlcmFkb3MgYXF1ZWxsb3MgY29uIHVuYSByZWN1cGVyYWNpw7NuIGZpbmFsIGRlIDUwMCBtaWxsb25lcyBkZSBiYXJyaWxlcywgeSAyKSBbQ2FtcG9zIE1hcmdpbmFsZXNdKGh0dHBzOi8vd3d3Lm9lZGlnaXRhbC5jb20vbmV3cy80NzQwNzYtbWFyZ2luYWwtZmllbGRzLWdsb2JhbC1vcHBvcnR1bml0eSksIGNvbnNpZGVyYWRvcyBjb21vIHRhbGVzIHBvciBzdSBtZW5vciBhcG9ydGUgYSBsYSBwcm9kdWNjacOzbi4KCkxvcyBkYXRvcyB1dGlsaXphZG9zIHBhcmEgcmVhbGl6YXIgZWwgcHJlc2VudGUgYW7DoWxpc2lzIHNlIGxvY2FsaXphbiBlbiBsYSBww6FnaW5hIHdlYjogW0NOSF0oaHR0cHM6Ly9kYXRvcy5nb2IubXgvYnVzY2EvZGF0YXNldC9yZXBvcnRlLWRlLXJlc2VydmFzLWRlLWhpZHJvY2FyYnVyb3MpIGRlIGxhIENvbWlzacOzbiBOYWNpb25hbCBkZSBIaWRyb2NhcmJ1cm9zLiAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvPUYsIAogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1GQUxTRSwgCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nPUZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQgPSAxMCwgCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSAxMCkKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIGh0dHBzOi8vdHdpdHRlci5jb20vRWR1YXJkb0pNZW5lc2VzL3N0YXR1cy8xMzEzMjQzOTA0MDY2NTE0OTQ0L3Bob3RvLzEKcm0obGlzdCA9IGxzKCkpCnN0YXJ0X3RpbWUgPC0gU3lzLnRpbWUoKQojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBzZWxlY3QgbGlicmFyaWVzCmxpYnJhcnkoInRpZHl2ZXJzZSIpCmxpYnJhcnkoImdnZm9yY2UiKQp0aGVtZV9zZXQodGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQoKIyMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgc291cmNlCnNvdXJjZSgifi9Eb2N1bWVudHMvUi9DTkgvUi9mdW5jdGlvbnNfQ05ILlIiKQojIHNvdXJjZSBzZXZlcmFsIGZ1bmN0aW9ucyAmIGxpYnJhcmllcwpzb3VyY2UoIn4vRG9jdW1lbnRzL1IvY29sb21iaWEvUi9wZm1fY29sb21iaWFfZnVuY3Rpb25zLlIiKQoKIyBTdXBwcmVzcyBzdW1tYXJpemUgaW5mbwpvcHRpb25zKGRwbHlyLnN1bW1hcmlzZS5pbmZvcm0gPSBGQUxTRSkKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHBhbGV0dGUgY29sb3VyCnBhcmxEaWFnX2NvbG9yID0gYygiI0U1RkZDQyIsICAiI0IyRkY2NiIsIiM4MEZGMDAiLCAiIzY2Q0MwMCIpIAoKIyMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhlbWUKVGhlbWUgPC0gdGhlbWUocGxvdC50aXRsZSA9IAogICAgICAgICAgICAgICAgIGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiSGVsdmV0aWNhIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgPSAiYm9sZCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gKDE4KSkpCgojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbG9nb19ldWxlcmVuZXJneSA8LSBpbWFnZV9yZWFkKCJ+L0RvY3VtZW50cy9ldWxlciBlbmVyZ3kvbG9nb19FdWxlckVuZXJneS5wbmciKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmaWxlcyA8LSAifi9Eb2N1bWVudHMvUi9DTkgvZGF0YS9wcm9jZXNzZWQiCmxpc3QuZmlsZXMoZmlsZXMpCiMgc2V0IGxvY2F0aW9uIGZvciBwcm9kdWN0aW9uIGRhdGEKcHJkIDwtICJ+L0RvY3VtZW50cy9SL0NOSC9kYXRhL3Byb2Nlc3NlZC9wcm9kXzE0c2VwdDIwMjAuUmRhIgojIHJlYWQgYWN0dWFsIHByb2R1Y3Rpb24gZGF0YQpwcmQgPC0gcmVhZFJEUyhwcmQpCmBgYAoKIyAyLiBQZXJpb2RvIFByZXZpbyBhIDE5NzAKClBhcmEgZWwgcHJpbWVyIHBlcmlvZG8gYW5hbGl6YWRvLCBjb21wcmVuZGlkbyBkZXNkZSBlbCBpbmljaW8gZGUgbGEgcHJvZHVjY2nDs24gZGUgcGV0csOzbGVvIGRlbCBwYcOtcyBoYXN0YSBlbCAqKnByaW1lcm8gZGUgZW5lcm8gZGUgMTk3MCoqLCBsb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3Mgc2UgbXVlc3RyYW4gZW4gbGEgc2lndWllbnRlIGZpZ3VyYToKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGF0ZV9hbmFseXNpcyA8LSAiMTk3MC0wMS0wMSIKIyBydW4gcGFybERpYWdfcHJlcCAKZGEgPC0gcGFybERpYWdfcHJlcChkYXRlX2FuYWx5c2lzKQojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBydW4gcGFybERpYWcgZnVuY3Rpb24gIApwYXJsRGlhZyhkYSRjYW1wb3MsIHJvdW5kKGRhJHByb2QsIDApLCBwYXJsRGlhZ19jb2xvcikgKwogIFRoZW1lICsgbGFicyh0aXRsZT0gIkVuZXJvIDE5NzAiKQpncmlkOjpncmlkLnJhc3Rlcihsb2dvX2V1bGVyZW5lcmd5LCB4ID0gMC45LCB5ID0gMC45LCAKICAgICAgICAgICAgICAgICAganVzdCA9IGMoJ3JpZ2h0JywgJ3RvcCcpLCAKICAgICAgICAgICAgICAgICAgd2lkdGggPSB1bml0KDIuNSwgJ2luY2hlcycpKQpgYGAKCiMjIDIuMSBPYnNlcnZhY2lvbmVzICAKCi0gTsO6bWVybyB0b3RhbCBkZSBjYW1wb3M6ICoqNTMqKiAKLSBQcm9kdWNjacOzbiBkaWFyaWEgdG90YWwgZGVsIHBhw61zOiAqKjIzMCoqIE1iZCAobWlsZXMgZGUgYmFycmlsZXMgcG9yIGTDrWEpIAotICoqNCoqIGNhbXBvcyBwcm9kdWNlbiAqKjEyMCoqIE1iZCBsbyBxdWUgcmVwcmVzZW50YSAqKjUyJSoqIGRlIGxhIHByb2R1Y2Npw7NuIHRvdGFsIGRlbCBwYcOtcyAKLSAqKkNhbXBvcyBwcmluY2lwYWxlcyoqOiBTYW4gQW5kcsOpcywgQ2luY28gUHJlc2lkZW50ZXMsIFBvemEgUmljYSB5IFRyZXMgSGVybWFub3MgIAotICoqNyoqIGNhbXBvcyBhcG9ydGFuIGVsICoqNjklKiogZGUgbGEgcHJvZHVjY2nDs24gCi0gKioxNyoqIGNhbXBvcyBhcG9ydGFuIGVsICoqOTAlKiogZGUgbGEgcHJvZHVjY2nDs24gIAotICoqMzYqKiAoNTMgbWVub3MgMTcpIGNhbXBvcyBwcm9kdWNlbiAqKjIyKiogTWJkICgyMzAgbWVub3MgMjA4KSAKCiMgMy4gUGVyaW9kbyAxOTcwIC0gMTk4MAoKTGEgc2lndWllbnRlIGZpZ3VyYSBtdWVzdHJhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBwYXJhIGVsIHBlcmlvZG8gZmluYWxpemFkbyBlbCAqKiIxOTgwLTAxLTAxIioqOgoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRlX2FuYWx5c2lzIDwtICIxOTgwLTAxLTAxIgojIHJ1biBwYXJsRGlhZ19wcmVwIApkYSA8LSBwYXJsRGlhZ19wcmVwKGRhdGVfYW5hbHlzaXMpCgojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBydW4gcGFybERpYWcgZnVuY3Rpb24gIApwYXJsRGlhZyhkYSRjYW1wb3MsIHJvdW5kKGRhJHByb2QsIDApLCBjb2xzID0gcGFybERpYWdfY29sb3IpICArCiAgVGhlbWUgKyBsYWJzKHRpdGxlID0gIkVuZXJvIDE5ODAiKQpncmlkOjpncmlkLnJhc3Rlcihsb2dvX2V1bGVyZW5lcmd5LCB4ID0gMC45LCB5ID0gMC45LCAKICAgICAgICAgICAgICAgICAganVzdCA9IGMoJ3JpZ2h0JywgJ3RvcCcpLCAKICAgICAgICAgICAgICAgICAgd2lkdGggPSB1bml0KDIuNSwgJ2luY2hlcycpKQpgYGAKIyMgMy4xIE9ic2VydmFjaW9uZXMgIAoKLSBOw7ptZXJvIHRvdGFsIGRlIGNhbXBvczogKioxMjAqKiAKLSBQcm9kdWNjacOzbiBkaWFyaWEgdG90YWwgZGVsIHBhw61zOiAqKjEyNDgqKiBNYmQKLSAqKjQqKiBjYW1wb3MgcHJvZHVjZW4gKio2MjYqKiBNYmQgbG8gcXVlIHJlcHJlc2VudGEgKio1MCUqKiBkZSBsYSBwcm9kdWNjacOzbiB0b3RhbCBkZWwgcGHDrXMgIAotICoqQ2FtcG9zIHByaW5jaXBhbGVzKio6IFNhbWFyaWEsIEN1bmR1YWPDoW4sIFNpdGlvIEdyYW5kZSB5IE94aWFjYXF1ZQotICoqMjYqKiBjYW1wb3MgYXBvcnRhbiBlbCAqKjkwJSoqIGRlIGxhIHByb2R1Y2Npw7NuICAKLSAqKjk0KiogKDEyMCBtZW5vcyAyNikgY2FtcG9zIHByb2R1Y2VuICoqMTIzKiogTWJkICgxMjQ4IG1lbm9zIDExMjUpIAoKRWwgbsO6bWVybyBkZSBjYW1wb3MgeSBsYSBwcm9kdWNjacOzbiBzZSBpbmNyZW1lbnRhcm9uIHN1c3RhbmNpYWxtZW50ZSBkZSAqKjUzKiogYSAqKjEyMCoqIHkgKioyMzAqKiBhICoqMTI0OCoqIHJlc3BlY3RpdmFtZW50ZS4gIExhIHByb2R1Y2Npw7NuIGNyZWNpw7MgZW4gbcOhcyBkZSB1biBtaWxsw7NuIGRlIGJhcnJpbGVzIHBhcmEgZWwgcGVyaW9kbyAqKjE5ODAqKiBhbCBzZXIgY29tcGFyYWRvIGNvbiAqKjE5NzAqKi4KCiMgNC4gUGVyaW9kbyAxOTgwIC0gMTk5MCAgCgpMYSBzaWd1aWVudGUgZmlndXJhIG11ZXN0cmEgbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zIHBhcmEgZWwgcGVyaW9kbyBmaW5hbGl6YWRvIGVsICoqIjE5OTAtMDEtMDEiKio6CgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRhdGVfYW5hbHlzaXMgPC0gIjE5OTAtMDEtMDEiCiMgcnVuIHBhcmxEaWFnX3ByZXAgCmRhIDwtIHBhcmxEaWFnX3ByZXAoZGF0ZV9hbmFseXNpcykKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ1biBwYXJsRGlhZyBmdW5jdGlvbiAgCnBhcmxEaWFnKGRhJGNhbXBvcywgcm91bmQoZGEkcHJvZCwgMCksIGNvbHMgPSBwYXJsRGlhZ19jb2xvcikgICsKICBUaGVtZSArIAogIGxhYnModGl0bGUgPSAiRW5lcm8gMTk5MCIpCmdyaWQ6OmdyaWQucmFzdGVyKGxvZ29fZXVsZXJlbmVyZ3ksIHggPSAwLjksIHkgPSAwLjksIAogICAgICAgICAgICAgICAgICBqdXN0ID0gYygncmlnaHQnLCAndG9wJyksIAogICAgICAgICAgICAgICAgICB3aWR0aCA9IHVuaXQoMi41LCAnaW5jaGVzJykpCmBgYAoKIyMgNC4xIE9ic2VydmFjaW9uZXMgIAoKLSBOw7ptZXJvIHRvdGFsIGRlIGNhbXBvczogKioxMjkqKiAKLSBQcm9kdWNjacOzbiBkaWFyaWEgdG90YWwgZGVsIHBhw61zOiAqKjIzOTYqKiBNYmQKLSAqKjIqKiBjYW1wb3MgcHJvZHVjZW4gKioxMjY4KiogTWJkIGxvIHF1ZSByZXByZXNlbnRhICoqNTMlKiogZGUgbGEgcHJvZHVjY2nDs24gdG90YWwgZGVsIHBhw61zCi0gKipDYW1wb3MgcHJpbmNpcGFsZXMqKjogQ2FudGFyZWxsIHkgQWJrYXTDum4KLSAqKjE3KiogY2FtcG9zIGFwb3J0YW4gZWwgKio5MCUqKiBkZSBsYSBwcm9kdWNjacOzbiAgCi0gKioxMTIqKiAoMTI5IG1lbm9zIDE3KSBjYW1wb3MgYXBvcnRhbiAqKjI0NSoqIE1iZCAoMjM5NiBtZW5vcyAyMTUxKQotICoqQ2FudGFyZWxsKiogc2UgY29udmllcnRlIGVuIGVsIHByaW5jaXBhbCBwcm9kdWN0b3IgZGVsIHBhw61zCgpFbCBuw7ptZXJvIGRlIGNhbXBvcyBzZSBpbmNyZW1lbnTDsyBsaWdlcmFtZW50ZSBkZSAqKjEyMCoqIGEgKioxMjkqKiB5IGxhIHByb2R1Y2Npw7NuIGNhc2kgc2UgZHVwbGljw7MgYWwgcGFzYXIgZGUgKioxMjQ4KiogYSAqKjIzOTYqKiwgbG8gcXVlIHJlcHJlc2VudGEgdW4gaW5jcmVtZW50byBkZSAqKjExNDggTWJkKiogcGFyYSBlbCBwZXJpb2RvICoqMTk5MCoqIGFsIHNlciBjb21wYXJhZG8gY29uICoqMTk4MCoqLiAKCiMgNS4gUGVyaW9kbyAxOTkwIC0gMjAwMCAgIAoKTGEgc2lndWllbnRlIGZpZ3VyYSBtdWVzdHJhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBwYXJhIGVsIHBlcmlvZG8gZmluYWxpemFkbyBlbCAqKiIyMDAwLTAxLTAxIioqOgoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRlX2FuYWx5c2lzIDwtICIyMDAwLTAxLTAxIgojIHJ1biBwYXJsRGlhZ19wcmVwIApkYSA8LSBwYXJsRGlhZ19wcmVwKGRhdGVfYW5hbHlzaXMpCgojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBydW4gcGFybERpYWcgZnVuY3Rpb24gIApwYXJsRGlhZyhkYSRjYW1wb3MsIHJvdW5kKGRhJHByb2QsIDApLCBjb2xzID0gcGFybERpYWdfY29sb3IpICArCiAgVGhlbWUgKyAKICBsYWJzKHRpdGxlID0gIkVuZXJvIDIwMDAiKQpncmlkOjpncmlkLnJhc3Rlcihsb2dvX2V1bGVyZW5lcmd5LCB4ID0gMC45LCB5ID0gMC45LCAKICAgICAgICAgICAgICAgICAganVzdCA9IGMoJ3JpZ2h0JywgJ3RvcCcpLCAKICAgICAgICAgICAgICAgICAgd2lkdGggPSB1bml0KDIuNSwgJ2luY2hlcycpKQpgYGAKCiMjIDUuMSBPYnNlcnZhY2lvbmVzICAKCi0gTsO6bWVybyB0b3RhbCBkZSBjYW1wb3M6ICoqMzA5KiogCi0gUHJvZHVjY2nDs24gZGlhcmlhIHRvdGFsIGRlbCBwYcOtczogKiozMDI5KiogTWJkCi0gKioyKiogY2FtcG9zIHByb2R1Y2VuICoqMTY0NSoqIE1iZCBsbyBxdWUgcmVwcmVzZW50YSAqKjU0JSoqIGRlIGxhIHByb2R1Y2Npw7NuIHRvdGFsIGRlbCBwYcOtcwotICoqQ2FtcG9zIHByaW5jaXBhbGVzKio6IENhbnRhcmVsbCB5IEt1Ci0gKioyNCoqIGNhbXBvcyBhcG9ydGFuIGVsICoqOTAlKiogZGUgbGEgcHJvZHVjY2nDs24gIAotICoqMjg1KiogKDMwOSBtZW5vcyAyNCkgY2FtcG9zIGFwb3J0YW4gKiozMTAqKiBNYmQgKDMwMzkgbWVub3MgMjcyOSkKLSBTZSBtYW50aWVuZSBDYW50YXJlbGwgY29tbyBlbCBwcmluY2lwYWwgcHJvZHVjdG9yIGRlbCBwYcOtcwoKRWwgbsO6bWVybyBkZSBjYW1wb3Mgc2UgaW5jcmVtZW50w7Mgc3VzdGFuY2lhbG1lbnRlIGRlICoqMTI5KiogYSAqKjMwOSoqIHkgbGEgcHJvZHVjY2nDs24gcGFzw7MgZGUgKioyMzk2KiogYSAqKjMwMjkqKiwgbG8gcXVlIHJlcHJlc2VudGEgdW4gaW5jcmVtZW50byBkZSAqKjYzMyBNYmQqKiBwYXJhIGVsIHBlcmlvZG8gKioyMDAwKiogYWwgc2VyIGNvbXBhcmFkbyBjb24gKioxOTkwKiouIAoKRHVyYW50ZSBlc3RlIHBlcmlvZG8sIGVsIHBhw61zIGxvZ3JvIGFsY2FuemFyIHN1ICoqbcOheGltYSBwcm9kdWNjacOzbiBoaXN0w7Nyw61jYSoqIGRlIHBldHLDs2xlby4KCiMgNi4gUGVyaW9kbyAyMDAwIC0gMjAxMCAgICAgCgpMYSBzaWd1aWVudGUgZmlndXJhIG11ZXN0cmEgbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zIHBhcmEgZWwgcGVyaW9kbyBmaW5hbGl6YWRvIGVsICoqIjIwMTAtMDEtMDEiKio6CgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyMjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRhdGVfYW5hbHlzaXMgPC0gIjIwMTAtMDEtMDEiCiMgcnVuIHBhcmxEaWFnX3ByZXAgCmRhIDwtIHBhcmxEaWFnX3ByZXAoZGF0ZV9hbmFseXNpcykKCiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ1biBwYXJsRGlhZyBmdW5jdGlvbiAgCnBhcmxEaWFnKGRhJGNhbXBvcywgcm91bmQoZGEkcHJvZCwgMCksIGNvbHMgPSBwYXJsRGlhZ19jb2xvcikgICsKICBUaGVtZSArIAogIGxhYnModGl0bGUgPSAiRW5lcm8gMjAxMCIpCmdyaWQ6OmdyaWQucmFzdGVyKGxvZ29fZXVsZXJlbmVyZ3ksIHggPSAwLjksIHkgPSAwLjksIAogICAgICAgICAgICAgICAgICBqdXN0ID0gYygncmlnaHQnLCAndG9wJyksIAogICAgICAgICAgICAgICAgICB3aWR0aCA9IHVuaXQoMi41LCAnaW5jaGVzJykpCmBgYAoKIyMgNi4xIE9ic2VydmFjaW9uZXMgIAoKLSBOw7ptZXJvIHRvdGFsIGRlIGNhbXBvczogKiozMjMqKiAKLSBQcm9kdWNjacOzbiBkaWFyaWEgdG90YWwgZGVsIHBhw61zOiAqKjI2MTIqKiBNYmQKLSAqKjQqKiBjYW1wb3MgcHJvZHVjZW4gKioxMjk5KiogTWJkIGxvIHF1ZSByZXByZXNlbnRhICoqNTAlKiogZGUgbGEgcHJvZHVjY2nDs24gdG90YWwgZGVsIHBhw61zCi0gKipDYW1wb3MgcHJpbmNpcGFsZXMqKjogQ2FudGFyZWxsLCBBYmthdHVuLCBaYWFwIHkgTWFsb29iCi0gKioxMyoqIGNhbXBvcyBjb250cmlidXllbiBjb24gKio3MSoqIGRlIGxhIHByb2R1Y2Npw7NuIGRlICoqMTg0NCoqIE1iZAotICoqNDYqKiBjYW1wb3MgYXBvcnRhbiBlbCAqKjkwJSoqIGRlIGxhIHByb2R1Y2Npw7NuICAKLSAqKjI3NyoqICgzMjMgbWVub3MgNDYpIGNhbXBvcyBwcm9kdWNlbiAqKjI2MioqIE1iZCAoMjYxMiBtZW5vcyAyMzUwKQotIFNlIG1hbnRpZW5lIENhbnRhcmVsbCBjb21vIGVsIHByaW5jaXBhbCBwcm9kdWN0b3IgZGVsIHBhw61zIAoKRWwgbsO6bWVybyBkZSBjYW1wb3Mgc2UgaW5jcmVtZW50w7MgbGlnZXJhbWVudGUgZGUgKiozMDkqKiBhICoqMzIzKiogeSBsYSBwcm9kdWNjacOzbiBzZSByZWR1am8gZGUgKiozMDI5KiogYSAqKjI2MTIqKiwgbG8gcXVlIHJlcHJlc2VudGEgdW5hICoqZGlzbWludWNpw7NuKiogZGUgKio0MTYgTWJkKiogcGFyYSBlbCBwZXJpb2RvICoqMjAxMCoqIGFsIHNlciBjb21wYXJhZG8gY29uICoqMjAwMCoqLiBFc3RhIGVzIGxhICoqcHJpbWVyYSoqIHJlZHVjY2nDs24gZGUgcHJvZHVjY2nDs24gb2JzZXJ2YWRhIGVuIGxvcyBwZXJpb2RvcyBhbmFsaXphZG9zLgoKIyA3LiBQZXJpb2RvIDIwMTAgLSAyMDIwICAgIAoKTGEgc2lndWllbnRlIGZpZ3VyYSBtdWVzdHJhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcyBwYXJhIGVsIHBlcmlvZG8gZmluYWxpemFkbyBlbCAqKiIyMDIwLTAxLTAxIioqOgoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMjIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkYXRlX2FuYWx5c2lzIDwtICIyMDIwLTAxLTAxIgojIHJ1biBwYXJsRGlhZ19wcmVwIApkYSA8LSBwYXJsRGlhZ19wcmVwKGRhdGVfYW5hbHlzaXMpCgojIyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBydW4gcGFybERpYWcgZnVuY3Rpb24gIApwYXJsRGlhZyhkYSRjYW1wb3MsIHJvdW5kKGRhJHByb2QsIDApLCBjb2xzID0gcGFybERpYWdfY29sb3IpICArCiAgVGhlbWUgKyAKICBsYWJzKHRpdGxlID0gIkVuZXJvIDIwMjAiKQpncmlkOjpncmlkLnJhc3Rlcihsb2dvX2V1bGVyZW5lcmd5LCB4ID0gMC45LCB5ID0gMC45LCAKICAgICAgICAgICAgICAgICAganVzdCA9IGMoJ3JpZ2h0JywgJ3RvcCcpLCAKICAgICAgICAgICAgICAgICAgd2lkdGggPSB1bml0KDIuNSwgJ2luY2hlcycpKQpgYGAKCiMjIDcuMSBPYnNlcnZhY2lvbmVzIAoKLSBOw7ptZXJvIHRvdGFsIGRlIGNhbXBvczogKiozMzAqKiAKLSBQcm9kdWNjacOzbiBkaWFyaWEgdG90YWwgZGVsIHBhw61zOiAqKjE3MjQqKiBNYmQKLSAqKjQqKiBjYW1wb3MgcHJvZHVjZW4gKio4MzEqKiBNYmQgbG8gcXVlIHJlcHJlc2VudGEgKio0OCUqKiBkZSBsYSBwcm9kdWNjacOzbiB0b3RhbCBkZWwgcGHDrXMgIAotICoqQ2FtcG9zIHByaW5jaXBhbGVzKio6IE1hbG9vYiwgWmFhcCwgQWJrYXR1biB5IEF5YXRzaWwgCi0gKioxMioqIGNhbXBvcyBjb250cmlidXllbiBjb24gKio3MCoqIGRlIGxhIHByb2R1Y2Npw7NuIGRlICoqMTIxMioqIE1iZAotICoqNDkqKiBjYW1wb3MgYXBvcnRhbiBlbCAqKjkwJSoqIGRlIGxhIHByb2R1Y2Npw7NuICAKLSAqKjI4MSoqICgzMzAgbWVub3MgNDkpIGNhbXBvcyBhcG9ydGFuICoqMTcxKiogTWJkICgxNzI0IG1lbm9zIDE1NTMpIAotIENhbnRhcmVsbCBkZWphIGRlIHNlciBlbCBwcmluY2lwYWwgcHJvZHVjdG9yIGRlbCBwYcOtcwoKRWwgbsO6bWVybyBkZSBjYW1wb3Mgc2UgaW5jcmVtZW50w7MgbGlnZXJhbWVudGUgZGUgKiozMjMqKiBhICoqMzMwKiogeSBsYSBwcm9kdWNjacOzbiBzZSByZWR1am8gZGUgKioyNjEyKiogYSAqKjE3MjQqKiwgbG8gcXVlIHJlcHJlc2VudGEgdW5hIGRpc21pbnVjacOzbiBkZSAqKjg4OCBNYmQqKiBwYXJhIGVsIHBlcmlvZG8gKioyMDIwKiogYWwgc2VyIGNvbXBhcmFkbyBjb24gKioyMDEwKiouLiBFc3RhIGVzIGxhICoqc2VndW5kYSoqIHJlZHVjY2nDs24gZGUgcHJvZHVjY2nDs24gb2JzZXJ2YWRhIGVuIGxvcyBwZXJpb2RvcyBhbmFsaXphZG9zLiAgRWwgY2FtcG8gKipDYW50YXJlbGwqKiBkZWphIGRlIHBlcnRlbmVjZXIgYWwgcmVuZ2zDs24gZGUgY2FtcG9zIHByaW5jaXBhbGVzLgoKIyA4LiBDb25zaWRlcmFjaW9uZXMgRmluYWxlcyAgICAKCi0gTGEgcHJvZHVjY2nDs24gZGUgcGV0csOzbGVvIHNlIGNvbmNlbnRyYSBlbiBbQ2FtcG9zIEdpZ2FudGVzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HaWFudF9vaWxfYW5kX2dhc19maWVsZHMpLCBkZWJpZG8gYSBxdWUgZGUgKioyKiogYSAqKjQqKiBjYW1wb3MgcG9zZWVuIGhpc3TDs3JpY2FtZW50ZSwgYWxyZWRlZG9yIGRlbCAqKjUwJSoqIGRlIGxhIHByb2R1Y2Npw7NuIGRlbCBwYcOtcyBlbiB0b2RvcyBsb3MgcGVyaW9kb3MgYW5hbGl6YWRvcwoKLSBFbCBjb21wbGVqbyBDYW50YXJlbGwgZXMgZWwgbWF5b3IgcHJvZHVjdG9yIGhpc3TDs3JpY28gZGVsIHBhw61zIHkgYWwgZGVqYXIgZGUgc2VybG8sIGJhamEgbGEgcHJvZHVjY2nDs24gZGUgcGV0csOzbGVvIGVuIE3DqXhpY28KCi0gUGFyYSBsb3MgcGVyaW9kb3MgY29tcHJlbmRpZG9zIGRlc2RlICoqMjAwMCoqIGhhc3RhIGxhIGFjdHVhbGlkYWQsIGxhIHByb2R1Y2Npw7NuIGRlIHBldHLDs2xlbyBzZSByZWR1asOzIGRlICoqMzAyOSoqIGEgKioxNzI0KiogeSB1biBsaWdlcm8gYXVtZW50byBkZWwgbsO6bWVybyBkZSBjYW1wb3MgZGUgKiozMDkqKiBhICoqMzMwKioKIAotIEhpc3TDs3JpY2FtZW50ZSwgYXByb3hpbWFkYW1lbnRlICoqOTAlKiogZGUgbGEgcHJvZHVjY2nDs24gc2UgbG9jYWxpemEgZW4gbWVub3MgZGUgKio1MCoqIGNhbXBvcyAgCgotIExhIGNvbXBhcmFjacOzbiBkZSBsb3MgcGVyY2VudGlsZXMgOTAlIHkgMTAwJSBpbmRpY2EgbGEgb2N1cnJlbmNpYSBkZWwgbWF5b3IgbsO6bWVybyBkZSBjYW1wb3MgZGVub21pbmFkb3MgY29tbyBbQ2FtcG9zIE1hcmdpbmFsZXNdKGh0dHBzOi8vd3d3Lm9lZGlnaXRhbC5jb20vbmV3cy80NzQwNzYtbWFyZ2luYWwtZmllbGRzLWdsb2JhbC1vcHBvcnR1bml0eSksIGNvbnNpZGVyYWRvcyBjb21vIHRhbGVzIHBvciBzdSBtZW5vciBhcG9ydGUgYSBsYSBwcm9kdWNjacOzbgoKCgoK