Content-Type: multipart/related; start=; boundary=----------JVjTxU9jaTpGHMRtHCEzMY Content-Location: http://es.wikipedia.org/wiki/%C3%9Altimo_parte_de_la_Guerra_Civil_Espa%C3%B1ola Subject: =?utf-8?Q?=C3=9Altimo=20parte=20de=20la=20Guerra=20Civil=20Espa=C3=B1ola=20-=20Wikipedia,=20la=20enciclopedia=20libre?= MIME-Version: 1.0 ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename*0*=utf-8''%C3%9Altimo_parte_de_la_Guerra_Ci; filename*1*=vil_Espa%C3%B1ola.htm Content-Type: text/html; charset=utf-8; name*0*=utf-8''%C3%9Altimo_parte_de_la_Guerra_Ci; name*1*=vil_Espa%C3%B1ola.htm Content-ID: Content-Location: http://es.wikipedia.org/wiki/%C3%9Altimo_parte_de_la_Guerra_Civil_Espa%C3%B1ola Content-Transfer-Encoding: 8bit Último parte de la Guerra Civil Española - Wikipedia, la enciclopedia libre

Último parte de la Guerra Civil Española

De Wikipedia, la enciclopedia libre

El último parte de la Guerra Civil Española, firmado por Franco, publicado el 1 de abril de 1939, día final de la guerra, es un breve texto muy popular en España, que reza lo siguiente:

"En el día de hoy, cautivo y desarmado el ejército rojo, han alcanzado las tropas nacionales sus últimos objetivos militares. La guerra ha terminado. El Generalísimo: Franco. Burgos, 1º de abril de 1939."

Contenido

[editar] Lectura radiofónica

Fue el único parte firmado por Franco, que revisó minuciosamente su redacción e hizo varias correcciones. El texto definitivo fue llevado a toda prisa desde el burgalés Palacio de la Isla, sede del gobierno franquista durante la guerra, hasta el entonces estudio de Radio Nacional, en el cercano Paseo del Espolón. Fue leído a las 22:30 por el actor y locutor Fernando Fernández de Córdoba, con entonación y énfasis propios de la radiofonía de aquellos años.

[editar] Influencia cultural

  • La ucronía titulada En el día de hoy, de Jesús Torbado (que obtuvo el Premio Planeta en 1976), toma su título de las primeras palabras del parte. En esta ucronía se novela qué podría haber pasado si el gobierno de la Segunda República hubiese ganado la Guerra Civil Española. La novela se aprovecha de lo conocido que es el parte, repitiéndolo palabra por palabra, pero cambiando "Nacionales" ("...tropas Nacionales...) por "Republicanas".
  • Muchos españoles aún se saben de memoria, por su importancia histórica, el texto del parte.
  • En España aún se hacen bromas que comienzan por "Cautivo y desarmado...".

[editar] Contexto histórico del parte

  • "Parte" . El Parte de guerra, emitido radiofónicamente durante la Guerra Civil, fue sustituido por un informativo más convencional, aunque mantuvo durante los años de dictadura el mismo nombre. Durante el franquismo todas las radios privadas tenían la obligación de conectar con la radio pública española a la hora del informativo o, como se le designó, "parte". De ahí que las personas que vivieron el franquismo todavía hoy sigan llamando "el parte" a cualquier tipo de informativo, tanto radiofónico como televisado.
  • El cuartel general del generalísimo estaba entonces en el Palacio de la Isla, en Burgos, que era la capital provisional del bando franquista durante la guerra.
  • III año triunfal era una manera protocolaria de llamar al año 1939. El bando franquista llamó a 1937 I año triunfal y a 1938 II año triunfal. 1939 fue también llamado por este bando como Año de la Victoria. Esta costumbre de asignar esloganes propagandísticos a los años puede estar copiada de la Italia de Mussolini, que numeraba los años en números romanos contando a partir de 1922 (año de la Marcha sobre Roma).
  • El primero de abril pasó a ser celebrado como Día de la victoria durante todo el franquismo.
  • Nótese que el parte habla de las tropas nacionales han alcanzado sus últimos objetivos militares. Franco subrayaba así la importancia política que para él tenía el ejército.
  • A pesar de ser considerado como el final de la Guerra Civil Española, aún hubo combates hasta finales del mes de abril de 1939 en zonas recónditas de España a las que las tropas de Franco aún no habían llegado. Incluso hubo conatos de guerrillas en las cercanías de Madrid durante los años de posguerra.

[editar] Fuente para el artículo

[editar] Enlace externo

------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=favicon.ico Content-Type: image/x-icon; name=favicon.ico Content-Location: http://es.wikipedia.org/favicon.ico Content-Transfer-Encoding: Base64 AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAAAAAAA AAAAAAAAEAAAAAAAAAAEAgQAhIOEAMjHyABIR0gA6ejpAGlqaQCpqKkAKCgoAPz9 /AAZGBkAmJiYANjZ2ABXWFcAent6ALm6uQA8OjwAiIiIiIiIiIiIiI4oiL6IiIiI gzuIV4iIiIhndo53KIiIiB/WvXoYiIiIfEZfWBSIiIEGi/foqoiIgzuL84i9iIjp GIoMiEHoiMkos3FojmiLlUipYliEWIF+iDe0GoRa7D6GPbjcu1yIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=shared.css Content-Type: text/css; charset=utf-8; name=shared.css Content-Location: http://es.wikipedia.org/skins-1.5/common/shared.css?233zz2 Content-Transfer-Encoding: 8bit /** * CSS in this file is used by *all* skins (that have any CSS at all). Be * careful what you put in here, since what looks good in one skin may not in * another, but don't ignore the poor non-Monobook users either. */ /* Colored watchlist and recent changes numbers */ .mw-plusminus-pos { color: #006400; } /* dark green */ .mw-plusminus-neg { color: #8b0000; } /* dark red */ .mw-plusminus-null { color: #aaa; } /* gray */ /* Comment and username portions of RC entries */ span.comment { font-style: italic; } span.changedby { font-size: 95%; } /* Math */ .texvc { direction: ltr; unicode-bidi: embed; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } /* add a bit of margin space between the preview and the toolbar */ /* this replaces the ugly


we used to insert into the page source */ #wikiPreview.ontop { margin-bottom: 1em; } /* Stop floats from intruding into edit area in previews */ #editform, #toolbar, #wpTextbox1 { clear: both; } div#mw-js-message { margin: 1em 5%; padding: 0.5em 2.5%; border: solid 1px #ddd; background-color: #fcfcfc; } /* Edit section links */ .editsection { float: right; margin-left: 5px; } /** * File histories */ table.filehistory th, table.filehistory td { vertical-align:top; } table.filehistory th { text-align: left; } table.filehistory td.mw-imagepage-filesize, table.filehistory th.mw-imagepage-filesize { white-space:nowrap; } table.filehistory td.filehistory-selected { font-weight: bold; } /* * rev_deleted stuff */ li span.deleted, span.history-deleted { text-decoration: line-through; color: #888; font-style: italic; } /** * Patrol stuff */ .not-patrolled { background-color: #ffa; } .unpatrolled { font-weight: bold; color: red; } div.patrollink { font-size: 75%; text-align: right; } /** * Forms */ body.ltr td.mw-label { text-align: right; } body.ltr td.mw-input { text-align: left; } body.ltr td.mw-submit { text-align: left; } body.rtl td.mw-label { text-align: left; } body.rtl td.mw-input { text-align: right; } body.rtl td.mw-submit { text-align: right; } td.mw-label { vertical-align: top; } .prefsection td.mw-label { width: 20%; } .prefsection table { width: 100%; } td.mw-submit { white-space: nowrap; } table.mw-htmlform-nolabel td.mw-label { width: 0 !important; } /** * Image captions */ body.rtl .thumbcaption { text-align:right; } body.rtl .magnify { float:left; } body.ltr .thumbcaption { text-align:left; } body.ltr .magnify { float:right; } /** * Hidden categories */ .mw-hidden-cats-hidden { display: none; } .catlinks-allhidden { display: none; } /* Convenience links to edit block, delete and protect reasons */ p.mw-ipb-conveniencelinks, p.mw-protect-editreasons, p.mw-filedelete-editreasons, p.mw-delete-editreasons, p.mw-revdel-editreasons { font-size: 90%; float: right; } /* Search results */ .searchresults { } .searchresults p { margin-left: 0.4em; margin-top: 1em; margin-bottom: 1.2em; } div.searchresult { font-size: 95%; width:38em; } .mw-search-results { margin-left: 0.4em; } .mw-search-results li { padding-bottom: 1em; list-style:none; list-style-image:none; } .mw-search-results li a { font-size: 108%; } .mw-search-result-data { color: green; font-size: 97%; } .mw-search-formheader { background-color: #f3f3f3; margin-top: 1em; border: 1px solid silver; } .mw-search-formheader div.search-types { float:left; padding-left: 0.25em; } .rtl .mw-search-formheader div.search-types { float: right; } .mw-search-formheader div.search-types ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.search-types ul li { float: left; margin: 0; padding: 0; } .mw-search-formheader div.search-types ul li a { display: block; padding: 0.5em; } .mw-search-formheader div.search-types ul li.current a { color: #333333; cursor: default; } .mw-search-formheader div.search-types ul li.current a:hover { text-decoration: none; } .mw-search-formheader div.results-info { float: right; padding: 0.5em; padding-right: 0.75em; } .mw-search-formheader div.results-info ul { margin: 0 !important; padding: 0 !important; list-style: none !important; } .mw-search-formheader div.results-info ul li { float: right; margin: 0; padding: 0; } fieldset#mw-searchoptions { margin: 0; padding-left: 0.75em !important; padding-right: 0.75em !important; padding-bottom: 0.5em !important; padding-top: 0.5em !important; border: none; background-color: #f9f9f9; border: 1px solid silver !important; border-top-width: 0 !important; } fieldset#mw-searchoptions legend { display: none; } fieldset#mw-searchoptions h4 { padding: 0; margin: 0; float: left; } .rtl fieldset#mw-searchoptions h4 { float: right; } fieldset#mw-searchoptions div#mw-search-togglebox { float: right; } .rtl fieldset#mw-searchoptions div#mw-search-togglebox { float: left; } fieldset#mw-searchoptions div#mw-search-togglebox label { margin-right: 0.25em; } fieldset#mw-searchoptions div#mw-search-togglebox input { margin-left: 0.25em; } fieldset#mw-searchoptions table { float: left; margin-right: 3em; } fieldset#mw-searchoptions table td { padding-right: 1em; } .rtl fieldset#mw-searchoptions table td { padding-left: 1em; padding-right: 0; } body.rtl fieldset#mw-searchoptions table { margin-right: 0; margin-left: 3em; float: right; } fieldset#mw-searchoptions div.divider { clear: both; border-bottom: 1px solid #DDDDDD; padding-top: 0.5em; margin-bottom: 0.5em; } td#mw-search-menu { padding-left:6em; font-size:85%; } div#mw-search-interwiki { float: right; width: 18em; border-style: solid; border-color: #AAAAAA; border-width: 1px; margin-top: 2ex; } .rtl div#mw-search-interwiki { float: left; } div#mw-search-interwiki li { font-size: 95%; } .mw-search-interwiki-more { float: right; font-size: 90%; } .rtl .mw-search-interwiki-more { float: left; } div#mw-search-interwiki-caption { text-align: center; font-weight: bold; font-size: 95%; } .mw-search-interwiki-project { font-size: 97%; text-align: left; padding-left: 0.2em; padding-right: 0.15em; padding-bottom: 0.2em; padding-top: 0.15em; background-color:#ececec; border-top:1px solid #BBBBBB; } .rtl .mw-search-interwiki-project { text-align: right; } span.searchalttitle { font-size: 95%; } div.searchdidyoumean { font-size: 127%; margin-top: 0.8em; /* Note that this color won't affect the link, as desired. */ color: #c00; } div.searchdidyoumean em { font-weight: bold; } .searchmatch { font-weight: bold; } table#mw-search-top-table { background-color: transparent; } /* * Advanced PowerSearch box */ td#mw-search-togglebox { text-align: right; } table#mw-search-powertable { width:100%; } form#powersearch { clear: both; } /* * UserRights stuff */ .mw-userrights-disabled { color: #888; } table.mw-userrights-groups * td,table.mw-userrights-groups * th { padding-right: 1.5em; } /* * OpenSearch ajax suggestions */ .os-suggest { overflow: auto; overflow-x: hidden; position: absolute; top: 0px; left: 0px; width: 0px; background-color: white; background-color: Window; border-style: solid; border-color: #AAAAAA; border-width: 1px; z-index:99; font-size:95%; } table.os-suggest-results { font-size: 95%; cursor: pointer; border: 0; border-collapse: collapse; width: 100%; } .os-suggest-result, .os-suggest-result-hl { white-space: nowrap; background-color: white; background-color: Window; color: black; color: WindowText; padding: 2px; } .os-suggest-result-hl, .os-suggest-result-hl-webkit { background-color: #4C59A6; color: white; } .os-suggest-result-hl { /* System colors are misimplemented in Safari 3.0 and earlier, making highlighted text illegible... */ background-color: Highlight; color: HighlightText; } .os-suggest-toggle { position: relative; left: 1ex; font-size: 65%; } .os-suggest-toggle-def { position: absolute; top: 0px; left: 0px; font-size: 65%; visibility: hidden; } /* Page history styling */ /* the auto-generated edit comments */ .autocomment { color: gray; } #pagehistory .history-user { margin-left: 0.4em; margin-right: 0.2em; } #pagehistory span.minor { font-weight: bold; } #pagehistory li { border: 1px solid white; } #pagehistory li.selected { background-color: #f9f9f9; border: 1px dashed #aaa; } /** Generic minor/bot/newpage styling */ .newpage, .minor, .bot { font-weight: bold; } /* Special:Contributions styling */ .mw-uctop { font-weight: bold; } /* Special:ListGroupRights styling */ table.mw-listgrouprights-table tr { vertical-align: top; } .listgrouprights-revoked { text-decoration: line-through; } /* Special:Statistics styling */ td.mw-statistics-numbers { text-align: right; } /* Special:SpecialPages styling */ h4.mw-specialpagesgroup { background-color: #dcdcdc; padding: 2px; margin: .3em 0em 0em 0em; } .mw-specialpagerestricted { font-weight: bold; } #shared-image-dup, #shared-image-conflict { font-style: italic; } /* Special:EmailUser styling */ table.mw-emailuser-table { width: 98%; } td#mw-emailuser-sender, td#mw-emailuser-recipient { font-weight: bold; } /* Special:Allpages styling */ table.allpageslist { background-color: transparent; } table.mw-allpages-table-form, table.mw-allpages-table-chunk { background-color: transparent; width: 100%; } td.mw-allpages-alphaindexline { text-align: right; } td.mw-allpages-nav, p.mw-allpages-nav { text-align: right; font-size: smaller; margin-bottom: 1em; } table.mw-allpages-table-form tr { vertical-align: top; } /* Special:Prefixindex styling */ table#mw-prefixindex-list-table, table#mw-prefixindex-nav-table { width: 98%; background-color: transparent; } td#mw-prefixindex-nav-form { font-size: smaller; margin-bottom: 1em; text-align: right; vertical-align: top; } /* * Recreating deleted page warning * Reupload file warning * Page protection warning * incl. log entries for these warnings */ div.mw-warning-with-logexcerpt { padding: 3px; margin-bottom: 3px; border: 2px solid #2F6FAB; } div.mw-warning-with-logexcerpt ul li { font-size: 90%; } /* (show/hide) revision deletion links */ span.mw-revdelundel-link, strong.mw-revdelundel-link { font-size: 90%; } /* feed links */ a.feedlink { background: url("images/feed-icon.png") center left no-repeat; padding-left: 16px; } /* Plainlinks - this can be used to switch * off special external link styling */ .plainlinks a { background: none !important; padding: 0 !important; } /* wikitable class for skinning normal tables */ table.wikitable { margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; } .wikitable th, .wikitable td { border: 1px #aaa solid; padding: 0.2em; } .wikitable th { background: #f2f2f2; text-align: center; } .wikitable caption { font-weight: bold; } /* hide initially collapsed collapsable tables */ table.collapsed tr.collapsable { display: none; } /* success and error messages */ .success { color: green; font-size: larger; } .error { color: red; font-size: larger; } .errorbox, .successbox { font-size: larger; border: 2px solid; padding: .5em 1em; float: left; margin-bottom: 2em; color: #000; } .errorbox { border-color: red; background-color: #fff2f2; } .successbox { border-color: green; background-color: #dfd; } .errorbox h2, .successbox h2 { font-size: 1em; font-weight: bold; display: inline; margin: 0 .5em 0 0; border: none; } .visualClear { clear: both; } #mw_trackbacks { border: solid 1px #bbbbff; background-color: #eeeeff; padding: 0.2em; } /* Table pager (e.g. Special:Imagelist) - remove underlines from the navigation link - collapse borders - set the borders to outsets (similar to Special:Allmessages) - remove line wrapping for all td and th, set background color - restore line wrapping for the last two table cells (description and size) */ .TablePager { min-width: 80%; } .TablePager_nav a { text-decoration: none; } .TablePager { border-collapse: collapse; } .TablePager, .TablePager td, .TablePager th { border: 1px solid #aaaaaa; padding: 0 0.15em 0 0.15em; } .TablePager th { background-color: #eeeeff } .TablePager td { background-color: #ffffff } .TablePager tr:hover td { background-color: #eeeeff } .imagelist td, .imagelist th { white-space: nowrap } .imagelist .TablePager_col_links { background-color: #eeeeff } .imagelist .TablePager_col_img_description { white-space: normal } .imagelist th.TablePager_sort { background-color: #ccccff } /* Allmessages table */ #mw-allmessagestable .allmessages-customised td.am_default { background-color: #fcffc4; } #mw-allmessagestable tr.allmessages-customised:hover td.am_default { background-color: #faff90; } #mw-allmessagestable td.am_actual { background-color: #e2ffe2; } #mw-allmessagestable tr.allmessages-customised:hover + tr.allmessages-customised td.am_actual { background-color: #b1ffb1; } /* filetoc */ ul#filetoc { text-align: center; border: 1px solid #aaaaaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; margin-bottom: 0.5em; margin-left: 0; margin-right: 0; } #filetoc li { display: inline; list-style-type: none; padding-right: 2em; } /* Classes for EXIF data display */ table.mw_metadata { font-size: 0.8em; margin-left: 0.5em; margin-bottom: 0.5em; width: 300px; } table.mw_metadata caption { font-weight: bold; } table.mw_metadata th { font-weight: normal; } table.mw_metadata td { padding: 0.1em; } table.mw_metadata { border: none; border-collapse: collapse; } table.mw_metadata td, table.mw_metadata th { text-align: center; border: 1px solid #aaaaaa; padding-left: 0.1em; padding-right: 0.1em; } table.mw_metadata th { background-color: #f9f9f9; } table.mw_metadata td { background-color: #fcfcfc; } /* Galleries */ table.gallery { border: 1px solid #ccc; margin: 2px; padding: 2px; background-color: white; } table.gallery tr { vertical-align: top; } table.gallery td { vertical-align: top; background-color: #f9f9f9; border: solid 2px white; } table.gallery caption { font-weight: bold; } div.gallerybox { margin: 2px; } div.gallerybox div.thumb { text-align: center; border: 1px solid #ccc; margin: 2px; } div.gallerytext { overflow: hidden; font-size: 94%; padding: 2px 4px; } table.mw-enhanced-rc { background: none; padding:0; border:0; border-spacing:0; } td.mw-enhanced-rc { white-space:nowrap; vertical-align:top; font-family:monospace } #mw-addcategory-prompt { display: inline; margin-left: 1em; } #mw-addcategory-prompt input { margin-left: 0.5em; margin-right: 0.5em; } .mw-remove-category { padding: 8px; background-image: url(images/remove.png); background-position: center center; background-repeat: no-repeat; } .mw-ajax-addcategory { padding-left: 20px; background-image: url(images/add.png); background-position: left center; background-repeat: no-repeat; } .mw-ajax-loader { background-image: url(images/ajax-loader.gif); background-position: center center; background-repeat: no-repeat; padding: 16px; position: relative; top: -16px; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=commonPrint.css Content-Type: text/css; charset=utf-8; name=commonPrint.css Content-Location: http://es.wikipedia.org/skins-1.5/common/commonPrint.css?233zz2 Content-Transfer-Encoding: 8bit /* ** MediaWiki Print style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke, http://www.aulinx.de/ ** ** Derived from the plone (http://plone.org/) styles ** Copyright Alexander Limi */ /* Thanks to A List Apart (http://alistapart.com/) for useful extras */ a.stub, a.new{ color:#ba0000; text-decoration:none; } #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; } .tocindent { margin-left: 2em; } .tocline { margin-bottom: 0px; } /* images */ div.floatright { float: right; clear: right; margin: 0; position:relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic;} div.floatleft { float: left; margin: 0.3em 0.5em 0.5em 0; position:relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; overflow: hidden; } div.thumb div { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; } div.thumb div a img { border:1px solid #cccccc; } div.thumb div div.thumbcaption { border: none; padding: 0.3em 0 0.1em 0; } div.magnify { display: none; } div.tright { float: right; clear: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } /* table standards */ table.rimage { float:right; width:1pt; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } body { background: White; /*font-size: 11pt !important;*/ color: Black; margin: 0; padding: 0; } .noprint, div#jump-to-nav, div.top, div#column-one, #colophon, .editsection, .toctoggle, .tochidden, div#f-poweredbyico, div#f-copyrightico, li#viewcount, li#about, li#disclaimer, li#privacy, #mw-hidden-catlinks { /* Hides all the elements irrelevant for printing */ display: none; } ul { list-style-type: square; } #content { background: none; border: none ! important; padding: 0 ! important; margin: 0 ! important; } #footer { background : white; color : black; border-top: 1px solid black; } h1, h2, h3, h4, h5, h6 { font-weight: bold; } p, .documentDescription { margin: 1em 0 ! important; line-height: 1.2em; } .tocindent p { margin: 0 0 0 0 ! important; } pre { border: 1pt dashed black; white-space: pre; font-size: 8pt; overflow: auto; padding: 1em 0; background : white; color : black; } table.listing, table.listing td { border: 1pt solid black; border-collapse: collapse; } a { color: Black !important; background: none !important; padding: 0 !important; } a:link, a:visited { color: #520; background: transparent; text-decoration: underline; } #content a.external.text:after, #content a.external.autonumber:after { /* Expand URLs for printing */ content: " (" attr(href) ") "; } #globalWrapper { width: 100% !important; min-width: 0 !important; } #content { background : white; color : black; } #column-content { margin: 0 !important; } #column-content #content { padding: 1em; margin: 0 !important; } /* MSIE/Win doesn't understand 'inherit' */ a, a.external, a.new, a.stub { color: black ! important; text-decoration: none ! important; } /* Continue ... */ a, a.external, a.new, a.stub { color: inherit ! important; text-decoration: inherit ! important; } img { border: none; } img.tex { vertical-align: middle; } span.texhtml { font-family: serif; } #siteNotice { display: none; } div.gallerybox { border: 1px solid #cccccc; background-color:#f9f9f9; width: 150px; } div.gallerytext { overflow: visible; } /* ** Diff rendering */ table.diff { background:white; } td.diff-otitle { background:#ffffff; } td.diff-ntitle { background:#ffffff; } td.diff-addedline { background:#ccffcc; font-size: smaller; border: solid 2px black; } td.diff-deletedline { background:#ffffaa; font-size: smaller; border: dotted 2px black; } td.diff-context { background:#eeeeee; font-size: smaller; } .diffchange { color: silver; font-weight: bold; text-decoration: underline; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline Content-Type: image/jpeg Content-Location: http://es.wikipedia.org/skins-1.5/monobook/headbg.jpg Content-Transfer-Encoding: Base64 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 pqmqalFqtJUGrOhqk4mqUtJqampqa/RqapquqRhbcdOIbqoSWMoZnG01aiZjs3Gf tdoO6lFFFFFFFFJRRRRRytyX9LwVBqmpqUclytrcHACgBSUqKJRRQALZYAFFABQB SUUUlFFHK2XClAAAFABCoUAAAABQAFACoFAqKAhl2c6KXHu6AiZdkpKWkprGFopR FSlAEUAARQAAABFEVAAAKKKKKKAKKTU1TU1KkAoqDWDWE1NTU0NTQ1NV1gqFSWZT WzU1NTU1KWpOVv6WxSiiiiiikoooooooXkDgoopKWjkF4ABRAoACgABQBAUAEKKK KSiilLAoAFBBQAAAAAARQAQUAAAEyZoopfLVgkpRQUsKAAAAAAAAAAAAAFAUUUUU UUUUUUUAAAUUUmpRRRQFFFFFAJRRqUUUUUUUUUUampRSgBRRRRRRRRRRRRRQKBRS UUUoAABRQAUAFAAAFFABRRRRQFFFAFFFAUUAUACoUUFAABQAUAAUAoIqSlFFFLEK gUUUUAAoAioqCoKICiCgAAAAAAAAAAAAAAAIogKAAAAIoAigAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAD//Z ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline Content-Type: image/gif Content-Location: http://es.wikipedia.org/skins-1.5/monobook/bullet.gif Content-Transfer-Encoding: Base64 R0lGODlhBQANAIAAAGOMnP///yH5BAEAAAEALAAAAAAFAA0AAAIJjI+pu+APo4Sp ADs= ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline Content-Type: image/png Content-Location: http://es.wikipedia.org/skins-1.5/monobook/external.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAMAAAC67D+PAAAAFVBMVEVmmcwzmcyZ zP8AZswAZv////////9E6giVAAAAB3RSTlP///////8AGksDRgAAADhJREFUGFcl y0ESAEAEA0Ei6/9P3sEcVB8kmrwFyni0bOeyyDpy9JTLEaOhQq7Ongf5FeMhHS/4 AVnsAZubxDVmAAAAAElFTkSuQmCC ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline Content-Type: image/gif Content-Location: http://es.wikipedia.org/skins-1.5/monobook/user.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKU5AFtJMlpJNFxIMU5OTm2XH3aIVJNkK5FmMJZnPbt6NIZzXId0 XpVwQZRzR5p7VI1+baZ3Tdl+Kt1/LIO2JYe5K4q8M4idYZKBbJK/QLqddZfDR5rF TZ/HVqfMZanNacKVWuKVQ+ejVuelVu21bPC/e5+XjKOjo7rXhr3aiM+1kNi4icff m8rio83jqNHmrtXotOPEl/HDg/LKjvfaq/ngut3Z1Nvrwd/tx/vqz/////////// /////////////////yH5BAEAAD8ALAAAAAAQABAAAAZiwJ9wSCwafxfF5VhUNBgH AVO4cKRgHwNg+sjQZrFEYFpSyUihyGD6M4lAEgRbCKnPTaYRjjRYH00vLAUkFhoV fkQmNy4rJxYcGBQTiEImNi0TKB0bHgSTRX2hon1zpaanP0EAOw== ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=main.css Content-Type: text/css; charset=utf-8; name=main.css Content-Location: http://es.wikipedia.org/skins-1.5/monobook/main.css?233zz2 Content-Transfer-Encoding: 8bit /* ** MediaWiki 'monobook' style sheet for CSS2-capable browsers. ** Copyright Gabriel Wicke - http://wikidev.net/ ** License: GPL (http://www.gnu.org/copyleft/gpl.html) ** ** Loosely based on http://www.positioniseverything.net/ordered-floats.html by Big John ** and the Plone 2.0 styles, see http://plone.org/ (Alexander Limi,Joe Geldart & Tom Croucher, ** Michael Zeltner and Geir Bækholt) ** All you guys rock :) */ #column-content { width: 100%; float: right; margin: 0 0 .6em -12.2em; padding: 0; } #content { margin: 2.8em 0 0 12.2em; padding: 0 1em 1em 1em; position: relative; z-index: 2; } #column-one { padding-top: 160px; } #content { background: white; color: black; border: 1px solid #aaa; border-right: none; line-height: 1.5em; } /* the left column width is specified in class .portlet */ /* Font size: ** We take advantage of keyword scaling- browsers won't go below 9px ** More at http://www.w3.org/2003/07/30-font-size ** http://style.cleverchimp.com/font_size_intervals/altintervals.html */ body { font: x-small sans-serif; background: #f9f9f9 url(headbg.jpg) 0 0 no-repeat; color: black; margin: 0; padding: 0; } /* scale back up to a sane default */ #globalWrapper { font-size: 127%; width: 100%; margin: 0; padding: 0; } /* general styles */ table { font-size: 100%; color: black; /* we don't want the bottom borders of

s to be visible through floated tables */ background-color: white; } fieldset table { /* but keep table layouts in forms clean... */ background: none; } a { text-decoration: none; color: #002bb8; background: none; } a:visited { color: #5a3696; } a:active { color: #faa700; } a:hover { text-decoration: underline; } a.stub { color: #772233; } a.new, #p-personal a.new { color: #ba0000; } a.new:visited, #p-personal a.new:visited { color: #a55858; } img { border: none; vertical-align: middle; } p { margin: .4em 0 .5em 0; line-height: 1.5em; } p img { margin: 0; } hr { height: 1px; color: #aaa; background-color: #aaa; border: 0; margin: .2em 0 .2em 0; } h1, h2, h3, h4, h5, h6 { color: black; background: none; font-weight: normal; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa; } h1 { font-size: 188%; } h1 .editsection { font-size: 53%; } h2 { font-size: 150%; } h2 .editsection { font-size: 67%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 76%; font-weight: normal; } h4 { font-size: 116%; } h4 .editsection { font-size: 86%; font-weight: normal; } h5 { font-size: 100%; } h5 .editsection { font-weight: normal; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; font-weight: normal; } ul { line-height: 1.5em; list-style-type: square; margin: .3em 0 0 1.5em; padding: 0; list-style-image: url(bullet.gif); } ol { line-height: 1.5em; margin: .3em 0 0 3.2em; padding: 0; list-style-image: none; } li { margin-bottom: .1em; } dt { font-weight: bold; margin-bottom: .1em; } dl { margin-top: .2em; margin-bottom: .5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: .1em; } fieldset { border: 1px solid #2f6fab; margin: 1em 0 1em 0; padding: 0 1em 1em; line-height: 1.5em; } fieldset.nested { margin: 0 0 0.5em 0; padding: 0 0.5em 0.5em; } legend { padding: .5em; font-size: 95%; } form { border: none; margin: 0; } textarea { width: 100%; padding: .1em; } input.historysubmit { padding: 0 .3em .3em .3em !important; font-size: 94%; cursor: pointer; height: 1.7em !important; margin-left: 1.6em; } select { vertical-align: top; } abbr, acronym, .explain { border-bottom: 1px dotted black; color: black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } /* disabled for now blockquote { font-family: Times, "Times New Roman", serif; font-style: italic; }*/ code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: black; background-color: #f9f9f9; line-height: 1.1em; } /* ** the main content area */ #siteSub { display: none; } #jump-to-nav { display: none; } #contentSub, #contentSub2 { font-size: 84%; line-height: 1.2em; margin: 0 0 1.4em 1em; color: #7d7d7d; width: auto; } span.subpages { display: block; } /* Some space under the headers in the content area */ #bodyContent h1, #bodyContent h2 { margin-bottom: .6em; } #bodyContent h3, #bodyContent h4, #bodyContent h5 { margin-bottom: .3em; } #firstHeading { margin-bottom: .1em; /* These two rules hack around bug 2013 (fix for more limited bug 11325). When bug 2013 is fixed properly, they should be removed. */ line-height: 1.2em; padding-bottom: 0; } /* user notification thing */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: black; font-weight: bold; margin: 2em 0 1em; padding: .5em 1em; vertical-align: middle; } #siteNotice { text-align: center; font-size: 95%; padding: 0 0.9em; } #siteNotice p { margin: 0; padding: 0; } .catlinks { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; margin-top: 1em; clear: both; } /* currently unused, intended to be used by a metadata box in the bottom-right corner of the content area */ .documentDescription { /* The summary text describing the document */ font-weight: bold; display: block; margin: 1em 0; line-height: 1.5em; } .documentByLine { text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } /* emulate center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100%; } /* ** content styles */ #toc, .toc, .mw-warning { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } #toc h2, .toc h2 { display: inline; border: none; padding: 0; font-size: 100%; font-weight: bold; } #toc #toctitle, .toc #toctitle, #toc .toctitle, .toc .toctitle { text-align: center; } #toc ul, .toc ul { list-style-type: none; list-style-image: none; margin-left: 0; padding-left: 0; text-align: left; } #toc ul ul, .toc ul ul { margin: 0 0 0 2em; } #toc .toctoggle, .toc .toctoggle { font-size: 94%; } .mw-warning { margin-left: 50px; margin-right: 50px; text-align: center; } /* images */ div.floatright, table.floatright { clear: right; float: right; position: relative; margin: 0 0 .5em .5em; border: 0; /* border: .5em solid white; border-width: .5em 0 .8em 1.4em; */ } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; position: relative; margin: 0 .5em .5em 0; border: 0; /* margin: .3em .5em .5em 0; border: .5em solid white; border-width: .5em 1.4em .8em 0; */ } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: .5em; border-style: solid; border-color: white; width: auto; } div.thumbinner { border: 1px solid #ccc; padding: 3px !important; background-color: #f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } html .thumbimage { border: 1px solid #ccc; } html .thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 3px !important; font-size: 94%; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: .5em 0 .8em 1.4em; } div.tleft { float: left; clear: left; margin-right: .5em; border-width: .5em 1.4em .8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* ** classes for special content elements like town boxes ** intended to be referenced directly from the wiki src */ /* ** User styles */ /* table standards */ table.rimage { float: right; position: relative; margin-left: 1em; margin-bottom: 1em; text-align: center; } .toccolours { border: 1px solid #aaa; background-color: #f9f9f9; padding: 5px; font-size: 95%; } /* ** edit views etc */ .special li { line-height: 1.4em; margin: 0; padding: 0; } /* ** keep the whitespace in front of the ^=, hides rule from konqueror ** this is css3, the validator doesn't like it when validating as css2 */ #bodyContent a.external, #bodyContent a.external[href ^="gopher://"] { background: url(external.png) center right no-repeat; padding: 0 13px; } .rtl #bodyContent a.external, .rtl #bodyContent a.external[href ^="gopher://"] { background-image: url(external-rtl.png); } #bodyContent a.external[href ^="https://"], .link-https { background: url(lock_icon.gif) center right no-repeat; padding: 0 16px; } #bodyContent a.external[href ^="mailto:"], .link-mailto { background: url(mail_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="news://"] { background: url(news_icon.png) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="ftp://"], .link-ftp { background: url(file_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href ^="irc://"], .link-irc { background: url(discussionitem_icon.gif) center right no-repeat; padding: 0 18px; } #bodyContent a.external[href $=".ogg"], #bodyContent a.external[href $=".OGG"], #bodyContent a.external[href $=".mid"], #bodyContent a.external[href $=".MID"], #bodyContent a.external[href $=".midi"], #bodyContent a.external[href $=".MIDI"], #bodyContent a.external[href $=".mp3"], #bodyContent a.external[href $=".MP3"], #bodyContent a.external[href $=".wav"], #bodyContent a.external[href $=".WAV"], #bodyContent a.external[href $=".wma"], #bodyContent a.external[href $=".WMA"], .link-audio { background: url("audio.png") center right no-repeat; padding: 0 13px; } #bodyContent a.external[href $=".ogm"], #bodyContent a.external[href $=".OGM"], #bodyContent a.external[href $=".avi"], #bodyContent a.external[href $=".AVI"], #bodyContent a.external[href $=".mpeg"], #bodyContent a.external[href $=".MPEG"], #bodyContent a.external[href $=".mpg"], #bodyContent a.external[href $=".MPG"], .link-video { background: url("video.png") center right no-repeat; padding: 0 13px; } #bodyContent a.external[href $=".pdf"], #bodyContent a.external[href $=".PDF"], #bodyContent a.external[href *=".pdf#"], #bodyContent a.external[href *=".PDF#"], #bodyContent a.external[href *=".pdf?"], #bodyContent a.external[href *=".PDF?"], .link-document { background: url("document.png") center right no-repeat; padding: 0 12px; } /* for rtl wikis */ .rtl #bodyContent a.external { background-position: left; padding-right: 0; } .rtl a.feedlink { background-position: right; padding-right: 16px; padding-left: 0; } /* correction for ltr wikis */ .ltr #bodyContent a.external { padding-left: 0; } /* disable interwiki styling */ #bodyContent a.extiw, #bodyContent a.extiw:active { color: #36b; } #bodyContent a.external { color: #36b; } /* ** Structural Elements */ /* ** general portlet styles (elements in the quickbar) */ .portlet { border: none; margin: 0 0 .5em; padding: 0; float: none; width: 11.6em; overflow: hidden; } .portlet h4 { font-size: 95%; font-weight: normal; white-space: nowrap; } .portlet h5 { background: transparent; padding: 0 1em 0 .5em; display: inline; height: 1em; text-transform: lowercase; font-size: 91%; font-weight: normal; white-space: nowrap; } .portlet h6 { background: #ffae2e; border: 1px solid #2f6fab; border-style: solid solid none solid; padding: 0 1em 0 1em; text-transform: lowercase; display: block; font-size: 1em; height: 1.2em; font-weight: normal; white-space: nowrap; } .pBody { font-size: 95%; background-color: white; color: black; border-collapse: collapse; border: 1px solid #aaa; padding: 0 .8em .3em .5em; } .portlet h1, .portlet h2, .portlet h3, .portlet h4 { margin: 0; padding: 0; } .portlet ul { line-height: 1.5em; list-style-type: square; list-style-image: url(bullet.gif); font-size: 95%; } .portlet li { padding: 0; margin: 0; } /* ** Logo properties */ #p-logo { top: 0; left: 0; position: absolute; /*needed to use z-index */ z-index: 3; height: 155px; width: 12em; overflow: visible; } #p-logo h5 { display: none; } #p-logo a, #p-logo a:hover { display: block; height: 155px; width: 12.2em; background-repeat: no-repeat; background-position: 35% 50% !important; text-decoration: none; } /* ** Search portlet */ #p-search { position: relative; z-index: 3; } input.searchButton { margin-top: 1px; font-size: 95%; } #searchGoButton { padding-left: .5em; padding-right: .5em; font-weight: bold; } #searchInput { width: 10.9em; margin: 0; font-size: 95%; } #p-search .pBody { padding: .5em .4em .4em .4em; text-align: center; } #p-search #searchform div div { margin-top: .4em; font-size: 95%; } /* ** the personal toolbar */ #p-personal { position: absolute; left: 0; top: 0; z-index: 0; } #p-personal { width: 100%; white-space: nowrap; padding: 0; margin: 0; border: none; background: none; overflow: visible; line-height: 1.2em; } #p-personal h5 { display: none; } #p-personal .portlet, #p-personal .pBody { z-index: 0; padding: 0; margin: 0; border: none; overflow: visible; background: none; } /* this is the ul contained in the portlet */ #p-personal ul { border: none; line-height: 1.4em; color: #2f6fab; padding: 0 2em 0 3em; margin: 0; text-align: right; list-style: none; z-index: 0; background: none; cursor: default; } #p-personal li { z-index: 0; border: none; padding: 0; display: inline; color: #2f6fab; margin-left: 1em; line-height: 1.2em; background: none; } #p-personal li a { text-decoration: none; color: #005896; padding-bottom: .2em; background: none; } #p-personal li a:hover { background-color: white; padding-bottom: .2em; text-decoration: none; } #p-personal li.active a:hover { background-color: transparent; } /* the icon in front of the user name, single quotes in bg url to hide it from iemac */ li#pt-userpage, li#pt-anonuserpage, li#pt-login { background: url(user.gif) top left no-repeat; padding-left: 20px; text-transform: none; } #p-personal ul { text-transform: lowercase; } #p-personal li.active { font-weight: bold; } /* ** the page-related actions- page/talk, edit etc */ #p-cactions { position: absolute; top: 1.3em; left: 11.5em; margin: 0; white-space: nowrap; width: 76%; line-height: 1.1em; overflow: visible; background: none; border-collapse: collapse; padding-left: 1em; list-style: none; font-size: 95%; } #p-cactions ul { list-style: none; } #p-cactions li { display: inline; border: 1px solid #aaa; border-bottom: none; padding: 0 0 .1em 0; margin: 0 .3em 0 0; overflow: visible; background: white; } #p-cactions li.selected { border-color: #fabd23; padding: 0 0 .2em 0; font-weight: bold; } #p-cactions li a { background-color: #fbfbfb; color: #002bb8; border: none; padding: 0 .8em .3em; position: relative; z-index: 0; margin: 0; text-decoration: none; } #p-cactions li.selected a { z-index: 3; padding: 0 1em .2em!important; background-color: white; } #p-cactions .new a { color: #ba0000; } #p-cactions li a:hover { z-index: 3; text-decoration: none; background-color: white; } #p-cactions h5 { display: none; } #p-cactions li.istalk { margin-right: 0; } #p-cactions li.istalk a { padding-right: .5em; } #p-cactions #ca-addsection a { padding-left: .4em; padding-right: .4em; } /* offsets to distinguish the tab groups */ li#ca-talk { margin-right: 1.6em; } li#ca-watch, li#ca-unwatch, li#ca-varlang-0, li#ca-print { margin-left: 1.6em; } #p-cactions .pBody { font-size: 1em; background-color: transparent; color: inherit; border-collapse: inherit; border: 0; padding: 0; } #p-cactions .hiddenStructure { display: none; } #p-cactions li a { text-transform: lowercase; } #p-lang { position: relative; z-index: 3; } /* Override text-transform on languages where capitalization is significant */ .capitalize-all-nouns .portlet h5, .capitalize-all-nouns .portlet h6, .capitalize-all-nouns #p-personal ul, .capitalize-all-nouns #p-cactions ul li a { text-transform: none; } /* TODO: #t-iscite is only used by the Cite extension, come up with some * system which allows extensions to add to this file on the fly */ #t-ispermalink, #t-iscite { color: #999; } /* ** footer */ #footer { background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; margin: .6em 0 1em 0; padding: .4em 0 1.2em 0; text-align: center; font-size: 90%; } #footer li { display: inline; margin: 0 1.3em; } #f-poweredbyico, #f-copyrightico { margin: 0 8px; position: relative; top: -2px; /* Bump it up just a tad */ } #f-poweredbyico { float: right; height: 1%; } #f-copyrightico { float: left; height: 1%; } .mw-htmlform-submit { font-weight: bold; padding-left: .3em; padding-right: .3em; margin-right: 2em; } /* js pref toc */ #preftoc { margin: 0; padding: 0; width: 100%; clear: both; } #preftoc li { background-color: #f0f0f0; color: #000; } #preftoc li { margin: 1px -2px 1px 2px; float: left; padding: 2px 0 3px 0; border: 1px solid #fff; border-right-color: #716f64; border-bottom: 0; position: relative; white-space: nowrap; list-style-type: none; list-style-image: none; z-index: 3; } #preftoc li.selected { font-weight: bold; background-color: #f9f9f9; border: 1px solid #aaa; border-bottom: none; cursor: default; top: 1px; padding-top: 2px; margin-right: -3px; } #preftoc > li.selected { top: 2px; } #preftoc a, #preftoc a:active { display: block; color: #000; padding: 0 .7em; position: relative; text-decoration: none; } #preftoc li.selected a { cursor: default; text-decoration: none; } #preferences { margin: 0; border: 1px solid #aaa; clear: both; padding: 1.5em; background-color: #F9F9F9; } .prefsection { border: none; padding: 0; margin: 0; } .prefsection legend { font-weight: bold; } .prefsection table, .prefsection legend { background-color: #F9F9F9; } .mainLegend { display: none; } td.htmlform-tip { font-size: x-small; padding: .2em 2em; color: #666; } .preferences-login { clear: both; margin-bottom: 1.5em; } .prefcache { font-size: 90%; margin-top: 2em; } div#userloginForm form, div#userlogin form#userlogin2 { margin: 0 3em 1em 0; border: 1px solid #aaa; clear: both; padding: 1.5em 2em; background-color: #f9f9f9; float: left; } .rtl div#userloginForm form, .rtl div#userlogin form#userlogin2 { float: right; } div#userloginForm table, div#userlogin form#userlogin2 table { background-color: #f9f9f9; } div#userloginForm h2, div#userlogin form#userlogin2 h2 { padding-top: 0; } div#userlogin .captcha, div#userloginForm .captcha { border: 1px solid #bbb; padding: 1.5em 2em; background-color: white; } #loginend, #signupend { clear: both; } #userloginprompt, #languagelinks { font-size: 85%; } #login-sectiontip { font-size: 85%; line-height: 1.2; padding-top: 2em; } #userlogin .loginText, #userlogin .loginPassword { width: 12em; } #userloginlink a, #wpLoginattempt, #wpCreateaccount { font-weight: bold; } /* ** IE/Mac fixes, hope to find a validating way to move this ** to a separate stylesheet. This would work but doesn't validate: ** @import("IEMacFixes.css"); */ /* tabs: border on the a, not the div */ * > html #p-cactions li { border: none; } * > html #p-cactions li a { border: 1px solid #aaa; border-bottom: none; } * > html #p-cactions li.selected a { border-color: #fabd23; } /* footer icons need a fixed width */ * > html #f-poweredbyico, * > html #f-copyrightico { width: 88px; } * > html #bodyContent, * > html #bodyContent pre { overflow-x: auto; width: 100%; padding-bottom: 25px; } /* more IE fixes */ /* float/negative margin brokenness */ * html #footer {margin-top: 0;} * html #column-content { display: inline; margin-bottom: 0; } * html div.editsection { font-size: smaller; } #pagehistory li.selected { position: relative; } /* Mac IE 5.0 fix; floated content turns invisible */ * > html #column-content { float: none; } * > html #column-one { position: absolute; left: 0; top: 0; } * > html #footer { margin-left: 13.2em; } .redirectText { font-size: 150%; margin: 5px; } .printfooter { display: none; } div.patrollink { clear: both; } .sharedUploadNotice { font-style: italic; } span.updatedmarker { color: black; background-color: #0f0; } .previewnote { color: #c00; margin-bottom: 1em; } .previewnote p { text-indent: 3em; margin: 0.8em 0; } .editExternally { border: 1px solid gray; background-color: #ffffff; padding: 3px; margin-top: 0.5em; float: left; font-size: small; text-align: center; } .editExternallyHelp { font-style: italic; color: gray; } .toggle { margin-left: 2em; text-indent: -2em; } input#wpSummary { width: 80%; } /* @bug 1714 */ input#wpSave, input#wpDiff { margin-right: 0.33em; } #wpSave { font-weight: bold; } /* Classes for article validation */ table.revisionform_default { border: 1px solid #000000; } table.revisionform_focus { border: 1px solid #000000; background-color:#00BBFF; } tr.revision_tr_default { background-color:#EEEEEE; } tr.revision_tr_first { background-color:#DDDDDD; } p.revision_saved { color: green; font-weight:bold; } /* noarticletext */ div.noarticletext { border: 1px solid #ccc; background: #fff; padding: .2em 1em; color: #000; } div#searchTargetContainer { left: 10px; top: 10px; width: 90%; background: white; } div#searchTarget { padding: 3px; margin: 5px; background: #F0F0F0; border: solid 1px blue; } div#searchTarget ul li { list-style: none; } div#searchTarget ul li:before { color: orange; content: "\00BB \0020"; } div#searchTargetHide { float:right; border:solid 1px black; background:#DCDCDC; padding:2px; } #powersearch p { margin-top:0px; } div.multipageimagenavbox { border: solid 1px silver; padding: 4px; margin: 1em; background: #f0f0f0; } div.multipageimagenavbox div.thumb { border: none; margin-left: 2em; margin-right: 2em; } div.multipageimagenavbox hr { margin: 6px; } table.multipageimage td { text-align: center; } .templatesUsed { margin-top: 1.5em; } .mw-summary-preview { margin: 0.1em 0; } /* Friendlier slave lag warnings */ div.mw-lag-warn-normal, div.mw-lag-warn-high { padding: 3px; text-align: center; margin: 3px auto; } div.mw-lag-warn-normal { border: 1px solid #FFCC66; background-color: #FFFFCC; } div.mw-lag-warn-high { font-weight: bold; border: 2px solid #FF0033; background-color: #FFCCCC; } .MediaTransformError { background-color: #ccc; padding: 0.1em; } .MediaTransformError td { text-align: center; vertical-align: middle; font-size: 90%; } /* God-damned hack for the crappy layout */ .os-suggest { font-size: 127%; } /* Sometimes people don't want personal tools to be lowercase! */ .no-text-transform { text-transform: none; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=main.css Content-Type: text/css; charset=utf-8; name=main.css Content-Location: http://es.wikipedia.org/skins-1.5/chick/main.css?233zz2 Content-Transfer-Encoding: 8bit /* ** MediaWiki 'chick' style sheet for PDAs or other small-screen devices. ** Copyright Timwi ** License: GPL (http://www.gnu.org/copyleft/gpl.html) ** ** Loosely based on Monobook by Gabriel Wicke */ body { font-family: sans-serif; color: Black; margin: 0; padding: 0.3em; } a { color: #002bb8; } a:visited { color: #5a3696; } a:active { color: #ffa500; } a.stub { color: #772233; } a.new, #p-personal a.new { color:#ba0000; } a.new:visited, #p-personal a.new:visited { color:#a55858; } img { border: none; vertical-align: middle; } p { margin: 0.4em 0em 0.5em 0em; line-height: 1.5em; } p img { margin: 0; } hr { height: 1px; color: #aaaaaa; background-color: #aaaaaa; border: 0; margin: 0.2em 0 0.2em 0; } h1, h2, h3, h4, h5, h6 { color: Black; background: none; font-weight: normal; margin: 0; padding-top: 0.5em; padding-bottom: 0.17em; border-bottom: 1px solid #aaaaaa; } .editsection { font-weight: normal; } h1 { font-size: 188%; } h1 .editsection { font-size: 53.2%; } h2 { font-size: 150%; } h2 .editsection { font-size: 66.7%; } h3, h4, h5, h6 { border-bottom: none; font-weight: bold; } h3 { font-size: 132%; } h3 .editsection { font-size: 75.8%; } h4 { font-size: 116%; } h4 .editsection { font-size: 86.2%; } h5 { font-size: 100%; } h6 { font-size: 80%; } h6 .editsection { font-size: 125%; } ul { line-height: 1.5em; margin: 0.3em 0 0 1.5em; padding:0; } ol { line-height: 1.5em; margin: 0.3em 0 0 3.2em; padding:0; list-style-image: none; } li { margin-bottom: 0.1em; } dt { font-weight: bold; margin-bottom: 0.1em; } dl{ margin-top: 0.2em; margin-bottom: 0.5em; } dd { line-height: 1.5em; margin-left: 2em; margin-bottom: 0.1em; } fieldset { border: 1px solid #2f6fab; margin: 1em 0em 1em 0em; padding: 0em 1em 1em 1em; line-height: 1.5em; } legend { background: White; padding: 0.5em; font-size: 95%; } form { border: none; margin: 0; } textarea { border: 1px solid #2f6fab; color: Black; background-color: white; width: 100%; padding: 0.1em; overflow: auto; } /* hide this from ie/mac and konq2.2 */ @media All { head:first-child+body input { visibility: visible; border: 1px solid #2f6fab; color: Black; background-color: white; vertical-align: middle; padding: 0.2em; } } input.historysubmit { padding: 0 0.3em 0.3em 0.3em !important; font-size: 94%; cursor: pointer; height: 1.7em !important; margin-left: 1.6em; } input[type="radio"], input[type="checkbox"] { border:none; } select { border: 1px solid #2f6fab; color: Black; vertical-align: top; } abbr, acronym, .explain { border-bottom: 1px dotted Black; color: Black; background: none; cursor: help; } q { font-family: Times, "Times New Roman", serif; font-style: italic; } code { background-color: #f9f9f9; } pre { padding: 1em; border: 1px dashed #2f6fab; color: Black; background-color: #f9f9f9; line-height: 1.1em; } /* ** the main content area */ span.subpages { display: block; } /* Some space under the headers in the content area */ #bodyContent h1, #bodyContent h2 { margin-bottom:0.6em; } #bodyContent h3, #bodyContent h4, #bodyContent h5 { margin-bottom: 0.3em; } #firstHeading { margin-bottom:0.1em; } /* user notification thing */ .usermessage { background-color: #ffce7b; border: 1px solid #ffa500; color: Black; font-weight: bold; margin: 0.1em 0 0 0; padding: 2px 5px; vertical-align: middle; } #siteNotice { text-align: center; font-size: 95%; padding: 0 0.9em 0 0.9em; } #siteNotice p { margin: 0; padding: 0; } .error { color: red; font-size: larger; } .catlinks { border:1px solid #aaaaaa; background-color:#f9f9f9; padding: 2px 5px; margin: 0.1em 0 0 0; clear: both; } .catlinks { margin: 0; padding: 0; } /* currently unused, intended to be used by a metadata box in the bottom-right corner of the content area */ .documentDescription { /* The summary text describing the document */ font-weight: bold; display: block; margin: 1em 0em; line-height: 1.5em; } .documentByLine { text-align: right; font-size: 90%; clear: both; font-weight: normal; color: #76797c; } /* emulate center */ .center { width: 100%; text-align: center; } *.center * { margin-left: auto; margin-right: auto; } /* small for tables and similar */ .small, .small * { font-size: 94%; } table.small { font-size: 100% } /* ** content styles */ #toc { /*border:1px solid #2f6fab;*/ border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%; } #toc ul { margin-left: 2em; } #toc .toctoggle { font-size: 94%; } #toc .editsection { margin-top: 0.7em; font-size: 94%; } /* images */ div.floatright, table.floatright { clear: right; float: right; margin: 0; position: relative; border: 0.5em solid White; border-width: 0.5em 0 0.8em 1.4em; } div.floatright p { font-style: italic; } div.floatleft, table.floatleft { float: left; clear: left; margin: 0.3em 0.5em 0.5em 0; position: relative; border: 0.5em solid White; border-width: 0.5em 1.4em 0.8em 0; } div.floatleft p { font-style: italic; } /* thumbnails */ div.thumb { margin-bottom: 0.5em; border-style: solid; border-color: White; width: auto; } div.thumb div { border:1px solid #cccccc; padding: 3px !important; background-color:#f9f9f9; font-size: 94%; text-align: center; overflow: hidden; } div.thumb div a img { border:1px solid #cccccc; } div.thumb div div.thumbcaption { border: none; text-align: left; line-height: 1.4em; padding: 0.3em 0 0.1em 0; } div.magnify { float: right; border: none !important; background: none !important; } div.magnify a, div.magnify img { display: block; border: none !important; background: none !important; } div.tright { clear: right; float: right; border-width: 0.5em 0 0.8em 1.4em; } div.tleft { float: left; clear: left; margin-right:0.5em; border-width: 0.5em 1.4em 0.8em 0; } img.thumbborder { border: 1px solid #dddddd; } .hiddenStructure { display: none; } /* ** classes for special content elements like town boxes ** intended to be referenced directly from the wiki src */ /* ** User styles */ /* table standards */ table.rimage { float:right; position:relative; margin-left:1em; margin-bottom:1em; text-align:center; } .toccolours { border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%; } /* ** edit views etc */ .special li { line-height: 1.4em; margin: 0; padding: 0; } a.external { color: #3366bb; } div#footer { text-align: center; } ul#f-list li { list-style: none; text-align: center; } div.portlet { margin: 0.5em 0; } .redirectText { font-size:150%; margin:5px; } ul.special li.not-patrolled, ol.special li.not-patrolled { background-color: #ffa; } div.patrollink { font-size: 75%; text-align: right; } span.updatedmarker { color:black; background-color:#00FF00; } div.gallerybox { width: 150px; } #xjump-to-nav { display: none; } .templatesUsed { margin-top: 1.5em; } .printfooter { display: none; } #footer { background-color: white; border-top: 1px solid #fabd23; border-bottom: 1px solid #fabd23; margin: .6em 0 1em 0; padding: .4em 0 1.2em 0; text-align: center; font-size: 90%; } #f-poweredbyico, #f-copyrightico { display: inline; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=utf-8; name=index.css Content-Location: http://es.wikipedia.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* Common CSS para todas las pieles */ /* Clases para las infoboxes V2 ("nuevas") */ .infobox_v2 { background-color:#f9f9f9; border:1px solid #aaa; clear:right; float:right; color:#000; font-size:90%; line-height:1.5em; margin:.5em 0 .5em 1em; padding:.4em; width:22.5em } .infobox_v2 td, .infobox_v2 th { vertical-align:top; text-align:left } .infobox_v2 .cabecera { font-size:140%; font-weight:bolder; height:45px; line-height:1.2em; text-align:center; vertical-align:middle } .infobox_v2 .media { font-weight:bolder; height:35px; text-align:center; vertical-align:middle } /* gráficos transparentes de cabecera */ .cabecera.default {} .media.audio {background:url(http://upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Gnome-speakernotes.png/35px-Gnome-speakernotes.png) no-repeat top left} .media.video {background:url(http://upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/35px-Tango-video-x-generic.png) no-repeat top left} /* hiddenStructure importado de w:en para permitir esconder automáticamente los parámetros vacíos en tablas */ .hiddenStructure { display: none; speak: none; } /******** CSS para infoboxes generales "viejas" (versión 1) ******* * las nuevas infobox deben basarse en la clase infobox_v2 ********/ .infobox { border: 1px solid #aaa; background-color: #f9f9f9; color: black; margin-bottom: 0.5em; margin-left: 1em; padding: 0.2em; float: right; clear: right; } .infobox td, .infobox th { vertical-align: top; } .infobox caption { font-size: larger; margin-left: inherit; } .infobox.bordered { border-collapse: collapse; } .infobox.bordered td, .infobox.bordered th { border: 1px solid #aaa; } .infobox.bordered .borderless td, .infobox.bordered .borderless th { border: 0; } .infobox.sisterproject { width: 20em; font-size: 90%; } @media print { .infobox.sisterproject { display: none; } } /*********** Códigos para algunas infoboxes aún más viejas ***** * MUY POSIBLEMENTE sea obsoleto y se pueda eliminar, en caso contrario * URGE ACTUALIZAR esas infoboxes para que no usen este código ****/ .InfoDerecha { clear: right; float: right; margin: 0 0 1em 1em; } .infobox.geography { border: 1px solid #ccd2d9; text-align: left; border-collapse: collapse; line-height: 1.2em; font-size: 90%; } .infobox.geography td, .infobox.geography th { border-top: solid 1px #ccd2d9; padding: 0.4em 0.2em 0.4em 0.8em; } .infobox.geography .mergedtoprow td, .infobox.geography .mergedtoprow th { border-top: solid 1px #ccd2d9; padding: 0.4em 0.2em 0.2em 0.8em; } .infobox.geography .mergedrow td, .infobox.geography .mergedrow th { border: 0; padding: 0 0.2em 0.2em 0.8em; } .infobox.geography .mergedbottomrow td, .infobox.geography .mergedbottomrow th { border-top: 0; border-bottom: solid 1px #ccd2d9; padding: 0 0.2em 0.4em 0.8em; } .infobox.geography .maptable td, .infobox.geography .maptable th { border: 0; padding: 0 0 0 0; } /*** Cajas de aviso en discusión nuevas (ambox) que son blancas y con * una cinta de color a la izquierda */ table.ambox { margin: 0 10%; /* Will not overlap with other elements */ border-collapse: collapse; background-color: #fbfbfb; border: 1px solid #aaa; border-left: 10px solid #1e90ff; /* Default "notice" blue */ } table.ambox th.ambox-text, table.ambox td.ambox-text { /* The message body cell(s) */ padding: 0.25em 0.5em; /* 0.5em left/right */ width: 100%; /* Make all templates the same width regardless of text size */ } table.ambox td.ambox-image { /* The left image cell */ padding: 2px 0px 2px 0.5em; /* 0.5em left, 0px right */ text-align: center; } table.ambox td.ambox-imageright { /* The right image cell */ padding: 2px 4px 2px 0px; /* 0px left, 4px right */ text-align: center; } table.ambox-notice {border-left: 10px solid #1e90ff} /* Blue */ table.ambox-delete, table.ambox-serious {border-left: 10px solid #b22222} /* Red */ table.ambox-content {border-left: 10px solid #f28500} /* Orange */ table.ambox-style {border-left: 10px solid #f4c430} /* Yellow */ table.ambox-merge {border-left: 10px solid #9932cc} /* Purple */ table.ambox-growth {border-left: 10px solid #228b22} /* Green */ table.ambox-protection {border-left: 10px solid #bba} /* Gray */ table.ambox.ambox-mini { /* Small floating box variant */ float: right; clear: right; margin: 0 0 0 1em; width: 25%; } @media print { /* Do not print article message box */ .ambox {display: none} } /****** Ciertas cajas para discusión que NO son ambox (no tienen cinta de color) * por ejemplo, la caja grande de artículo destacado ***/ .messagebox { border: 1px solid #aaaaaa; background-color: #f9f9f9; width: 85%; margin: 0 auto 1em auto; padding: .2em; text-align: justify; font-size: 90%; } .messagebox.merge { border: 1px solid #cf9fff; background-color: #f5edf5; text-align: center; } .messagebox.cleanup { border: 1px solid #9f9fff; background-color: #efefff; text-align: center; } .messagebox.standard-talk { border: 1px solid #c0c090; background-color: #f8eaba; text-align: center; } .messagebox.warning { border: 1px solid #fcc; background-color: #fee; text-align: center; font-size: 100%; } /********** Códigos sobre referencias ********/ ol.references {font-size: 100%} .references-small {font-size: 90%} .references-2column {font-size: 90%} /* Highlight clicked reference in blue to help navigation */ ol.references > li:target, sup.reference:target, cite:target { background-color: #DEF; } /* Llamadas al pie: Quitar corchetes */ .corchete-llamada {display: none} /* [[Plantilla:Listaref]] */ @media print {.listaref {-moz-column-count: 1 !important} } /* CSS relacionado con el uso de coordenadas To display coordinates using the notation in the source code, write this in your User:Username/monobook.css: .geo-default {display: inline} .geo-nondefault {display: none} .geo-dec {display: inline} .geo-dms {display: inline} To display coordinates using decimal notation, write this in your User:Username/monobook.css: .geo-default {display: inline} .geo-nondefault {display: inline} .geo-dec {display: inline} .geo-dms {display: none} To display coordinates using DMS notation, write this in your User:Username/monobook.css: .geo-default {display: inline} .geo-nondefault {display: inline} .geo-dec {display: none} .geo-dms {display: inline} To display coordinates in both decimal and DMS notation, write this in your User:Username/monobook.css: .geo-default {display: inline} .geo-nondefault {display: inline} .geo-dec {display: inline} .geo-dms {display: inline} .geo-multi-punct {display: inline} See [[Plantilla:Coor link]] for how these are used. Note that the classes "geo", "longitude", and "latitude" are not just styles but also used by the [[Geo microformat]], so the names should not be changed. */ .geo-default {display: inline;} .geo-nondefault {display: none;} .geo-dms {display: inline;} .geo-dec {display: inline;} .geo-multi-punct {display: none;} .longitude .latitude { white-space: nowrap; } /* This is used for the Geo microformat, but no style is needed for now other than .geo-dec. */ .geo { } /*******************************************************************/ /********* Estilos para diferentes funcionalidades menores *********/ /*******************************************************************/ #disambig { /* Desambiguaciones */ border-top: 3px double #cccccc; border-bottom: 3px double #cccccc; } .citado { /* Plantilla de cita */ font-size: 90%; padding: 0.1em; background-color: #F9F9F9; padding: 5px 10px; } /* Estilos para sitenotice y similares */ .notice { text-align: justify; margin: 1em; padding: 0.2em; } /****************** TABLAS ***************************/ table.wikitable, table.prettytable { margin: 1em 1em 1em 1em; padding: 0.5em; font-size: 95%; background-color: #f9f9f9; border: 1px #aaaaaa solid; border-collapse: collapse; } table.wikitable th, table.wikitable td, table.prettytable th, table.prettytable td { border: 1px #aaaaaa solid; padding: 0.2em; } table.wikitable th, table.prettytable th { background-color: #f2f2f2; text-align: center; } table.wikitable caption, table.prettytable caption { margin-left: inherit; margin-right: inherit; } /* Support for Template:IPA, Template:Unicode and Template:Polytonic. The inherit declaration resets the font for all browsers except MSIE6. The empty comment must remain. */ .IPA { font-family: Chrysanthi Unicode, Doulos SIL, Gentium, GentiumAlt, Code2000, TITUS Cyberbit Basic, DejaVu Sans, Bitstream Vera Sans, Bitstream Cyberbit, Arial Unicode MS, Lucida Sans Unicode, Hiragino Kaku Gothic Pro, Matrix Unicode; font-family /**/:inherit; } .Unicode { font-family: TITUS Cyberbit Basic, Code2000, Doulos SIL, Chrysanthi Unicode, Bitstream Cyberbit, Bitstream CyberBase, Thryomanes, Gentium, GentiumAlt, Visual Geez Unicode, Lucida Grande, Arial Unicode MS, Microsoft Sans Serif, Lucida Sans Unicode; font-family /**/:inherit; } .polytonic { font-family: Athena, Gentium, Palatino Linotype, Arial Unicode MS, Lucida Sans Unicode, Lucida Grande, Code2000; font-family /**/:inherit; } /** Estilos para tablas. ** EXPERIMENTAL ** la idea es, si se quiere que la primera columna de la tabla esté alineada a la derecha, la segunda centrada y la tercera a la izquierda, usar {| class="col1der col2cen col3izq" en vez de repetir "style='text-align:right'", etc, en '''cada''' celda **/ table.col1der TD:first-child {text-align:right;} table.col1izq TD:first-child {text-align:left;} table.col1cen TD:first-child {text-align:center;} table.col2der TD:first-child + TD {text-align:right;} table.col2izq TD:first-child + TD {text-align:left;} table.col2cen TD:first-child + TD {text-align:center;} table.col3der TD:first-child + TD + TD {text-align:right;} table.col3izq TD:first-child + TD + TD {text-align:left;} table.col3cen TD:first-child + TD + TD {text-align:center;} table.col4der TD:first-child + TD + TD + TD {text-align:right;} table.col4izq TD:first-child + TD + TD + TD {text-align:left;} table.col4cen TD:first-child + TD + TD + TD {text-align:center;} table.col5der TD:first-child + TD + TD + TD + TD {text-align:right;} table.col5izq TD:first-child + TD + TD + TD + TD {text-align:left;} table.col5cen TD:first-child + TD + TD + TD + TD {text-align:center;} /* Ayudita para [[Especial:Allpages]] y categorías: los redirects aparecen en cursiva */ .allpagesredirect, .redirect-in-category {font-style: italic} /* Put a checker background at the image description page only visible if the image has transparent background */ #file img {background: url(http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat} /* Disponibilidad para tareas de mantenimiento/Tablas por día/semana */ table.user-availability { text-align:center; border:1px solid #333366; } table.user-availability th { font-size:110% } table.user-availability .toprow td+td { width:30px; height:10px; background-color:#eeeeee; border:1px solid #aaaaaa } table.user-availability .off { font-size:80%; border:1px solid #aaaaaa; background-color:#ffffff; } table.user-availability .onn { font-size:80%; border:1px solid #aaaaaa; background-color:#ccffcc; } table.user-availability .wrk { font-size:80%; border:1px solid #aaaaaa; background-color:#ccccff; } table.user-availability .cll { font-size:80%; border:1px solid #aaaaaa; background-color:#ffffdd; } table.user-availability .key { font-size:90%; border-top:1px dashed black; text-align:right } table.user-availability .key span { padding:2px } /* Cambiar el icono de los archivos PDF */ #bodyContent a[href$=".pdf"].external, #bodyContent a[href*=".pdf?"].external, #bodyContent a[href*=".pdf#"].external, #bodyContent a[href$=".PDF"].external, #bodyContent a[href*=".PDF?"].external, #bodyContent a[href*=".PDF#"].external { background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat; padding-right: 16px; } /* Change the external link icon to an Adobe icon anywhere the PDFlink class */ /* is used (notably Template:PDFlink). This works in IE, unlike the above. */ span.PDFlink a { background: url(http://upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat !important; padding-right: 17px !important; } /* Ocultar texto para los no bibliotecarios */ .para_biblios {display: none} .rotate_0 {display: block} .rotate_1, .rotate_2, .rotate_3, .rotate_4, .rotate_5, .rotate_6, .rotate_7, .rotate_8, .rotate_9 {display: none} /* [[Especial:SpecialPages]]: alinear a la izquierda, en vez de estar justificado */ .mw-specialpages-table {text-align:left} /* Esto permite arreglar las duplicaciones de urls en plantillas de referencias como Plantilla:Citación. */ @media screen, handheld, projection {cite *.printonly {display: none}} /* Categorías con alineación a la izquierda, no justificada */ body.ns-14 div#mw-pages {text-align:left} /* otros */ body.page-Especial_Registro fieldset p small {font-size:100%} /*********** Código posiblemente obsoleto *************/ /* No encuentro páginas en que este código se use, posiblemente sean residuos * de css viejo que ya no está en uso - Drini - 9 mayo 09 */ /* Standard talk template style */ /* Drininota : Creo que esta y la siguiente se usaban en los carteles viejos de discu, antes de ambox .Talk-Notice { border: 1px solid #C0C090; background-color: #F8EABA; margin-bottom: 3px; width: 85%; border-spacing: 3px; margin-left: auto; margin-right: auto; } */ /* Make template background appear correctly on all browsers .Talk-Notice td { background: inherit; } */ /*Add formatting to make sure that "external references" from [[Plantilla:Ref]] do not get URL expansion, not even when printed... */ /* Drininota: La plantilla ref ya no se usa */ /* Remove padding from external links displayed without icon */ #bodyContent .plainlinks a, .plainlinksneverexpand { background: none ! important; padding: 0 ! important; } .plainlinksneverexpand .urlexpansion { display : none ! important; } /* Make sure that ext links displayed within "plainlinksneverexpand" don't get the arrow... */ .plainlinksneverexpand a { background: none !important; padding: 0 !important } /* With MediaWiki 1.5, the mechanism has changed: instead of a SPAN of class "urlexpansion" following the anchor A, the anchor itself now has class "external autonumber" and the expansion is inserted when printing (see the common printing style sheet at http://en.wikipedia.org/skins-1.5/common/commonPrint.css) using the ":after" pseudo- element of CSS. We have to switch this off for links due to Template:Ref! */ .plainlinksneverexpand a.external.text:after { display: none !important; } .plainlinksneverexpand a.external.autonumber:after { display: none !important; } /****** El siguiente código estaba "comentado accidentalmente" (se abría el * comentario pero no se cerraba y por tanto nunca tenía efecto: /* Importo formato para versos de WikiSource pre.verse { background-color: #ffffff; font-family:sans-serif; line-height: 150%; border: none; padding-left: 2em; margin: 0; white-space: pre; } .IconoPlantillaMantenimiento { float:left; margin-left: 1em; margin-right: 1em; } */ /*InterProject */ .interProject { display:none; clear: both; border-top: 2px dotted #AAAAAA; margin-top: 2em; } /* Reduce line-height for and */ sup, sub {line-height: 1em} /* [[Plantilla:No firmado]], más pequeño */ span.nofirmado {font-size:smaller} /* Traídos desde monobook.css para qe funcionen envector y los demás skins */ li.destacado { list-style-image: url("http://upload.wikimedia.org/wikipedia/en/d/d4/Monobook-bullet-star.png"); list-style-type: square; margin-left: 2px; } li.bueno { list-style-image: url("http://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Art%C3%ADculo_bueno.svg/10px-Art%C3%ADculo_bueno.svg.png"); list-style-type: square; margin-left: 2px; } /* CSS para cosas plegables */ div.BoxenVerschmelzen, div.NavFrame { margin: 0px; padding: 2px; border: 1px solid #aaaaaa; text-align: center; border-collapse: collapse; font-size: 95%; } div.BoxenVerschmelzen div.NavFrame { border-style: none; border-style: hidden; } div.NavFrame + div.NavFrame { border-top-style: none; border-top-style: hidden; } div.NavPic { background-color: #ffffff; margin: 0px; padding: 2px; float: left; display: none; } div.NavFrame div.NavHead { height: 1.6em; font-weight: bold; font-size: 100%; background-color: #efefef; } div.NavFrame p { font-size: 100%; } div.NavFrame div.NavContent { font-size: 100%; } div.NavFrame div.NavContent p { font-size: 100%; } div.NavEnd { margin: 0px; padding: 0px; line-height: 1px; clear: both; } .NavToggle { font-size: x-small; float:right; } .border-radius4 { border-radius: 4px; /* CSS 3 */ -moz-border-radius: 4px; /* Firefox 3.5+ */ -webkit-border-radius: 4px; /* Safari 3.0+ */ } .border-radius6 { border-radius: 6px; /* CSS 3 */ -moz-border-radius: 6px; /* Firefox 3.5+ */ -webkit-border-radius: 6px; /* Safari 3.0+ */ } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=utf-8; name=index.css Content-Location: http://es.wikipedia.org/w/index.php?title=MediaWiki:Print.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect the print output */ .ns-0 .ambox, .ns-104 .ambox, .ns-0 .navbox, .ns-104 .navbox, .ns-0 .infobox.sisterproject, .ns-104 .infobox.sisterproject, .ns-0 .dablink, .ns-104 .dablink, .ns-0 .metadata, .ns-104 .metadata, #privacy, #about, #disclaimer, #contentSub, .editlink, span.collapseButton, a.NavToggle, .noprint { display: none; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=utf-8; name=index.css Content-Location: http://es.wikipedia.org/w/index.php?title=MediaWiki:Handheld.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit /* CSS placed here will affect handheld devices based on the skin configured in $wgHandheldStyle */ ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=utf-8; name=index.css Content-Location: http://es.wikipedia.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&ctype=text%2Fcss&smaxage=2678400&action=raw&maxage=2678400 Content-Transfer-Encoding: 8bit @media print {#content { background: white } } /* Fondo blanco al imprimir */ a { text-decoration: none} /* Los enlaces no van subrayados */ a:hover { text-decoration: underline} /* "editar" en minúscula en algunas páginas especiales */ body.page-Especial_RedireccionesDobles a.new, body.page-Especial_Artilugios h2 a, body.page-Especial_Desambiguaciones ol.special li a[href *="/w/index.php"] { text-transform: lowercase } /* Ocultar título y categorías en la Portada*/ body.page-Wikipedia_Portada h1.firstHeading, body.page-Wikipedia_Portada#catlinks { display:none; } div.alreadyloggedin {color: red; font-weight: bold} /* Aviso rojo en ([[MediaWiki:Alreadyloggedin]]) */ form#userlogin { float: left; padding: 1em 1em .7em 1em; background-color: #ffffe6; border: 2px solid #fc6; color: #000; margin-right: 2em; } form#userlogin table { float: left; background-color: #ffffe6; color: #000; } p.error {font-weight: bold} /* redondeo de esquinas en ciertos navegadores */ .pBody { padding: 0.3em 0.1em; -moz-border-radius-topright: 0.5em; } .portlet h5 { background-color: #e0e3e6; border: thin solid silver; -moz-border-radius-topright: 0.5em; } /* CSS de tablas */ table.metadata { border: 1px solid #aaaaaa; display: none; /* A definir por cada usuario */ } .metadata-label {color: #aaaaaa} .searchbox .searchboxInput {background-color: transparent} #content {-moz-border-radius-topleft: 0.5em} #coordinates { position: absolute; z-index: 1; border: none; background: none; right: 20px; top: 3.7em; float: right; margin: 0.0em; padding: 0.0em; line-height: 1.5em; text-align: right; text-indent: 0; font-size: 85%; text-transform: none; white-space: nowrap; } #siteNotice {margin-top: 5px; margin-bottom: -.5em} /* Donations link to be uncommented during fundraising drives */ #ca-edit a {font-weight: bold !important} /* Bold 'edit this page' link to encourage newcomers */ #mw-dismissable-notice {background: transparent} #pt-login {font-weight: bold; font-size: 110%} ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.css Content-Type: text/css; charset=utf-8; name=index.css Content-Location: http://es.wikipedia.org/w/index.php?title=-&action=raw&maxage=2678400&gen=css Content-Transfer-Encoding: 8bit /* generated user stylesheet */ a.new, #quickbar a.new { color: #CC2200; } ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=wikibits.js Content-Type: application/x-javascript; charset=utf-8; name=wikibits.js Content-Location: http://es.wikipedia.org/skins-1.5/common/wikibits.js?233zz2 Content-Transfer-Encoding: Base64 Ly8gTWVkaWFXaWtpIEphdmFTY3JpcHQgc3VwcG9ydCBmdW5jdGlvbnMKCnZhciBj bGllbnRQQyA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsgLy8g R2V0IGNsaWVudCBpbmZvCnZhciBpc19nZWNrbyA9IC9nZWNrby8udGVzdCggY2xp ZW50UEMgKSAmJgoJIS9raHRtbHxzcG9vZmVyfG5ldHNjYXBlXC83XC4wLy50ZXN0 KGNsaWVudFBDKTsKdmFyIHdlYmtpdF9tYXRjaCA9IGNsaWVudFBDLm1hdGNoKC9h cHBsZXdlYmtpdFwvKFxkKykvKTsKaWYgKHdlYmtpdF9tYXRjaCkgewoJdmFyIGlz X3NhZmFyaSA9IGNsaWVudFBDLmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEg JiYKCQljbGllbnRQQy5pbmRleE9mKCdzcG9vZmVyJykgPT0gLTE7Cgl2YXIgaXNf c2FmYXJpX3dpbiA9IGlzX3NhZmFyaSAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7Cgl2YXIgd2Via2l0X3ZlcnNpb24gPSBwYXJzZUludCh3ZWJr aXRfbWF0Y2hbMV0pOwp9Ci8vIEZvciBhY2Nlc3NrZXlzOyBub3RlIHRoYXQgRkYz KyBpcyBpbmNsdWRlZCBoZXJlIQp2YXIgaXNfZmYyID0gL2ZpcmVmb3hcL1syLTld fG1pbmVmaWVsZFwvMy8udGVzdCggY2xpZW50UEMgKTsKdmFyIGZmMl9idWdzID0g L2ZpcmVmb3hcLzIvLnRlc3QoIGNsaWVudFBDICk7Ci8vIFRoZXNlIGFyZW4ndCB1 c2VkIGhlcmUsIGJ1dCBzb21lIGN1c3RvbSBzY3JpcHRzIHJlbHkgb24gdGhlbQp2 YXIgaXNfZmYyX3dpbiA9IGlzX2ZmMiAmJiBjbGllbnRQQy5pbmRleE9mKCd3aW5k b3dzJykgIT0gLTE7CnZhciBpc19mZjJfeDExID0gaXNfZmYyICYmIGNsaWVudFBD LmluZGV4T2YoJ3gxMScpICE9IC0xOwppZiAoY2xpZW50UEMuaW5kZXhPZignb3Bl cmEnKSAhPSAtMSkgewoJdmFyIGlzX29wZXJhID0gdHJ1ZTsKCXZhciBpc19vcGVy YV9wcmVzZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiAhZG9jdW1lbnQuY2hpbGROb2Rl czsKCXZhciBpc19vcGVyYV9zZXZlbiA9IHdpbmRvdy5vcGVyYSAmJiBkb2N1bWVu dC5jaGlsZE5vZGVzOwoJdmFyIGlzX29wZXJhXzk1ID0gL29wZXJhXC8oOVwuWzUt OV18WzEtOV1bMC05XSkvLnRlc3QoIGNsaWVudFBDICk7Cgl2YXIgb3BlcmE2X2J1 Z3MgPSBpc19vcGVyYV9wcmVzZXZlbjsKCXZhciBvcGVyYTdfYnVncyA9IGlzX29w ZXJhX3NldmVuICYmICFpc19vcGVyYV85NTsKCXZhciBvcGVyYTk1X2J1Z3MgPSAv b3BlcmFcLyg5XC41KS8udGVzdCggY2xpZW50UEMgKTsKfQoKLy8gR2xvYmFsIGV4 dGVybmFsIG9iamVjdHMgdXNlZCBieSB0aGlzIHNjcmlwdC4KLypleHRlcm4gdGEs IHN0eWxlcGF0aCwgc2tpbiAqLwoKLy8gYWRkIGFueSBvbmxvYWQgZnVuY3Rpb25z IGluIHRoaXMgaG9vayAocGxlYXNlIGRvbid0IGhhcmQtY29kZSBhbnkgZXZlbnRz IGluIHRoZSB4aHRtbCBzb3VyY2UpCnZhciBkb25lT25sb2FkSG9vazsKCmlmICgh d2luZG93Lm9ubG9hZEZ1bmN0cykgewoJdmFyIG9ubG9hZEZ1bmN0cyA9IFtdOwp9 CgovLyBjb2RlIHRoYXQgaXMgZGVwZW5kZW50IG9uIGpzMiBmdW5jdGlvbnMgc2hv dWxkIHVzZSBqczJBZGRPbmxvYWRIb29rCmZ1bmN0aW9uIGFkZE9ubG9hZEhvb2so aG9va0Z1bmN0KSB7CgkvLyBBbGxvd3MgYWRkLW9uIHNjcmlwdHMgdG8gYWRkIG9u bG9hZCBmdW5jdGlvbnMKCWlmKCFkb25lT25sb2FkSG9vaykgewoJCW9ubG9hZEZ1 bmN0c1tvbmxvYWRGdW5jdHMubGVuZ3RoXSA9IGhvb2tGdW5jdDsKCX0gZWxzZSB7 CgkJaG9va0Z1bmN0KCk7ICAvLyBidWcgaW4gTVNJRSBzY3JpcHQgbG9hZGluZwoJ fQp9CgoKZnVuY3Rpb24gaG9va0V2ZW50KGhvb2tOYW1lLCBob29rRnVuY3QpIHsK CWFkZEhhbmRsZXIod2luZG93LCBob29rTmFtZSwgaG9va0Z1bmN0KTsKfQoKZnVu Y3Rpb24gaW1wb3J0U2NyaXB0KHBhZ2UpIHsKCS8vIFRPRE86IG1pZ2h0IHdhbnQg dG8gaW50cm9kdWNlIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBtYXRjaCB3ZlVybGVu Y29kZSgpIGluIFBIUAoJdmFyIHVyaSA9IHdnU2NyaXB0ICsgJz90aXRsZT0nICsK CQllbmNvZGVVUklDb21wb25lbnQocGFnZS5yZXBsYWNlKC8gL2csJ18nKSkucmVw bGFjZSgvJTJGL2lnLCcvJykucmVwbGFjZSgvJTNBL2lnLCc6JykgKwoJCScmYWN0 aW9uPXJhdyZjdHlwZT10ZXh0L2phdmFzY3JpcHQnOwoJcmV0dXJuIGltcG9ydFNj cmlwdFVSSSh1cmkpOwp9Cgp2YXIgbG9hZGVkU2NyaXB0cyA9IHt9OyAvLyBpbmNs dWRlZC1zY3JpcHRzIHRyYWNrZXIKZnVuY3Rpb24gaW1wb3J0U2NyaXB0VVJJKHVy bCkgewoJaWYgKGxvYWRlZFNjcmlwdHNbdXJsXSkgewoJCXJldHVybiBudWxsOwoJ fQoJbG9hZGVkU2NyaXB0c1t1cmxdID0gdHJ1ZTsKCXZhciBzID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CglzLnNldEF0dHJpYnV0ZSgnc3JjJyx1 cmwpOwoJcy5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCd0ZXh0L2phdmFzY3JpcHQnKTsK CWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5k Q2hpbGQocyk7CglyZXR1cm4gczsKfQoKZnVuY3Rpb24gaW1wb3J0U3R5bGVzaGVl dChwYWdlKSB7CglyZXR1cm4gaW1wb3J0U3R5bGVzaGVldFVSSSh3Z1NjcmlwdCAr ICc/YWN0aW9uPXJhdyZjdHlwZT10ZXh0L2NzcyZ0aXRsZT0nICsgZW5jb2RlVVJJ Q29tcG9uZW50KHBhZ2UucmVwbGFjZSgvIC9nLCdfJykpKTsKfQoKZnVuY3Rpb24g aW1wb3J0U3R5bGVzaGVldFVSSSh1cmwsbWVkaWEpIHsKCXZhciBsID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwoJbC50eXBlID0gJ3RleHQvY3NzJzsK CWwucmVsID0gJ3N0eWxlc2hlZXQnOwoJbC5ocmVmID0gdXJsOwoJaWYobWVkaWEp IGwubWVkaWEgPSBtZWRpYQoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUo J2hlYWQnKVswXS5hcHBlbmRDaGlsZChsKTsKCXJldHVybiBsOwp9CgpmdW5jdGlv biBhcHBlbmRDU1ModGV4dCkgewoJdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdzdHlsZScpOwoJcy50eXBlID0gJ3RleHQvY3NzJzsKCXMucmVsID0gJ3N0 eWxlc2hlZXQnOwoJaWYgKHMuc3R5bGVTaGVldCkgcy5zdHlsZVNoZWV0LmNzc1Rl eHQgPSB0ZXh0IC8vSUUKCWVsc2Ugcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh dGVUZXh0Tm9kZSh0ZXh0ICsgJycpKSAvL1NhZmFyaSBzb21ldGltZXMgYm9ya3Mg b24gbnVsbAoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVsw XS5hcHBlbmRDaGlsZChzKTsKCXJldHVybiBzOwp9CgovLyBzcGVjaWFsIHN0eWxl c2hlZXQgbGlua3MKaWYgKHR5cGVvZiBzdHlsZXBhdGggIT0gJ3VuZGVmaW5lZCcg JiYgdHlwZW9mIHNraW4gIT0gJ3VuZGVmaW5lZCcpIHsKCS8vIEZJWE1FOiBUaGlz IHRyaWVzIHRvIGxvYWQgdGhlIHN0eWxlc2hlZXRzIGV2ZW4gZm9yIHNraW5zIHdo ZXJlIHRoZXkKCS8vIGRvbid0IGV4aXN0LCBpLmUuLCBldmVyeXRoaW5nIGJ1dCBN b25vYm9vay4KCWlmIChvcGVyYTZfYnVncykgewoJCWltcG9ydFN0eWxlc2hlZXRV Ukkoc3R5bGVwYXRoKycvJytza2luKycvT3BlcmE2Rml4ZXMuY3NzJyk7Cgl9IGVs c2UgaWYgKG9wZXJhN19idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHls ZXBhdGgrJy8nK3NraW4rJy9PcGVyYTdGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAo b3BlcmE5NV9idWdzKSB7CgkJaW1wb3J0U3R5bGVzaGVldFVSSShzdHlsZXBhdGgr Jy8nK3NraW4rJy9PcGVyYTlGaXhlcy5jc3MnKTsKCX0gZWxzZSBpZiAoZmYyX2J1 Z3MpIHsKCQlpbXBvcnRTdHlsZXNoZWV0VVJJKHN0eWxlcGF0aCsnLycrc2tpbisn L0ZGMkZpeGVzLmNzcycpOwoJfQp9CgoKaWYgKHdnQnJlYWtGcmFtZXMpIHsKCS8v IFVuLXRyYXAgdXMgZnJvbSBmcmFtZXNldHMKCWlmICh3aW5kb3cudG9wICE9IHdp bmRvdykgewoJCXdpbmRvdy50b3AubG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247 Cgl9Cn0KCmZ1bmN0aW9uIHNob3dUb2NUb2dnbGUoKSB7CglpZiAoZG9jdW1lbnQu Y3JlYXRlVGV4dE5vZGUpIHsKCQkvLyBVc2VzIERPTSBjYWxscyB0byBhdm9pZCBk b2N1bWVudC53cml0ZSArIFhIVE1MIGlzc3VlcwoKCQl2YXIgbGlua0hvbGRlciA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2N0aXRsZScpOwoJCXZhciBleGlz dGluZ0xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9nZ2xlbGluaycp OwoJCWlmICghbGlua0hvbGRlciB8fCBleGlzdGluZ0xpbmspIHsKCQkJLy8gRG9u J3QgYWRkIHRoZSB0b2dnbGUgbGluayB0d2ljZQoJCQlyZXR1cm47CgkJfQoKCQl2 YXIgb3V0ZXJTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwoJ CW91dGVyU3Bhbi5jbGFzc05hbWUgPSAndG9jdG9nZ2xlJzsKCgkJdmFyIHRvZ2ds ZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJdG9nZ2xlTGlu ay5pZCA9ICd0b2dnbGVsaW5rJzsKCQl0b2dnbGVMaW5rLmNsYXNzTmFtZSA9ICdp bnRlcm5hbCc7CgkJdG9nZ2xlTGluay5ocmVmID0gJ2phdmFzY3JpcHQ6dG9nZ2xl VG9jKCknOwoJCXRvZ2dsZUxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl VGV4dE5vZGUodG9jSGlkZVRleHQpKTsKCgkJb3V0ZXJTcGFuLmFwcGVuZENoaWxk KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdbJykpOwoJCW91dGVyU3Bhbi5hcHBl bmRDaGlsZCh0b2dnbGVMaW5rKTsKCQlvdXRlclNwYW4uYXBwZW5kQ2hpbGQoZG9j dW1lbnQuY3JlYXRlVGV4dE5vZGUoJ10nKSk7CgoJCWxpbmtIb2xkZXIuYXBwZW5k Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSk7CgkJbGlua0hvbGRl ci5hcHBlbmRDaGlsZChvdXRlclNwYW4pOwoKCQl2YXIgY29va2llUG9zID0gZG9j dW1lbnQuY29va2llLmluZGV4T2YoImhpZGV0b2M9Iik7CgkJaWYgKGNvb2tpZVBv cyA+IC0xICYmIGRvY3VtZW50LmNvb2tpZS5jaGFyQXQoY29va2llUG9zICsgOCkg PT0gMSkgewoJCQl0b2dnbGVUb2MoKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGNoYW5n ZVRleHQoZWwsIG5ld1RleHQpIHsKCS8vIFNhZmFyaSB3b3JrIGFyb3VuZAoJaWYg KGVsLmlubmVyVGV4dCkgewoJCWVsLmlubmVyVGV4dCA9IG5ld1RleHQ7Cgl9IGVs c2UgaWYgKGVsLmZpcnN0Q2hpbGQgJiYgZWwuZmlyc3RDaGlsZC5ub2RlVmFsdWUp IHsKCQllbC5maXJzdENoaWxkLm5vZGVWYWx1ZSA9IG5ld1RleHQ7Cgl9Cn0KCmZ1 bmN0aW9uIHRvZ2dsZVRvYygpIHsKCXZhciB0b2MgPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgndG9jJykuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3VsJylbMF07Cgl2 YXIgdG9nZ2xlTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2dnbGVs aW5rJyk7CgoJaWYgKHRvYyAmJiB0b2dnbGVMaW5rICYmIHRvYy5zdHlsZS5kaXNw bGF5ID09ICdub25lJykgewoJCWNoYW5nZVRleHQodG9nZ2xlTGluaywgdG9jSGlk ZVRleHQpOwoJCXRvYy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCQlkb2N1bWVu dC5jb29raWUgPSAiaGlkZXRvYz0wIjsKCX0gZWxzZSB7CgkJY2hhbmdlVGV4dCh0 b2dnbGVMaW5rLCB0b2NTaG93VGV4dCk7CgkJdG9jLnN0eWxlLmRpc3BsYXkgPSAn bm9uZSc7CgkJZG9jdW1lbnQuY29va2llID0gImhpZGV0b2M9MSI7Cgl9Cn0KCnZh ciBtd0VkaXRCdXR0b25zID0gW107CnZhciBtd0N1c3RvbUVkaXRCdXR0b25zID0g W107IC8vIGVnIHRvIGFkZCBpbiBNZWRpYVdpa2k6Q29tbW9uLmpzCgpmdW5jdGlv biBlc2NhcGVRdW90ZXModGV4dCkgewoJdmFyIHJlID0gbmV3IFJlZ0V4cCgiJyIs ImciKTsKCXRleHQgPSB0ZXh0LnJlcGxhY2UocmUsIlxcJyIpOwoJcmUgPSBuZXcg UmVnRXhwKCJcXG4iLCJnIik7Cgl0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlLCJcXG4i KTsKCXJldHVybiBlc2NhcGVRdW90ZXNIVE1MKHRleHQpOwp9CgpmdW5jdGlvbiBl c2NhcGVRdW90ZXNIVE1MKHRleHQpIHsKCXZhciByZSA9IG5ldyBSZWdFeHAoJyYn LCJnIik7Cgl0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlLCImYW1wOyIpOwoJcmUgPSBu ZXcgUmVnRXhwKCciJywiZyIpOwoJdGV4dCA9IHRleHQucmVwbGFjZShyZSwiJnF1 b3Q7Iik7CglyZSA9IG5ldyBSZWdFeHAoJzwnLCJnIik7Cgl0ZXh0ID0gdGV4dC5y ZXBsYWNlKHJlLCImbHQ7Iik7CglyZSA9IG5ldyBSZWdFeHAoJz4nLCJnIik7Cgl0 ZXh0ID0gdGV4dC5yZXBsYWNlKHJlLCImZ3Q7Iik7CglyZXR1cm4gdGV4dDsKfQoK Ci8qKgogKiBTZXQgdGhlIGFjY2Vzc2tleSBwcmVmaXggYmFzZWQgb24gYnJvd3Nl ciBkZXRlY3Rpb24uCiAqLwp2YXIgdG9vbHRpcEFjY2Vzc0tleVByZWZpeCA9ICdh bHQtJzsKaWYgKGlzX29wZXJhKSB7Cgl0b29sdGlwQWNjZXNzS2V5UHJlZml4ID0g J3NoaWZ0LWVzYy0nOwp9IGVsc2UgaWYgKCFpc19zYWZhcmlfd2luICYmIGlzX3Nh ZmFyaSAmJiB3ZWJraXRfdmVyc2lvbiA+IDUyNikgewoJdG9vbHRpcEFjY2Vzc0tl eVByZWZpeCA9ICdjdHJsLWFsdC0nOwp9IGVsc2UgaWYgKCFpc19zYWZhcmlfd2lu ICYmIChpc19zYWZhcmkKCQl8fCBjbGllbnRQQy5pbmRleE9mKCdtYWMnKSAhPSAt MQoJCXx8IGNsaWVudFBDLmluZGV4T2YoJ2tvbnF1ZXJvcicpICE9IC0xICkpIHsK CXRvb2x0aXBBY2Nlc3NLZXlQcmVmaXggPSAnY3RybC0nOwp9IGVsc2UgaWYgKGlz X2ZmMikgewoJdG9vbHRpcEFjY2Vzc0tleVByZWZpeCA9ICdhbHQtc2hpZnQtJzsK fQp2YXIgdG9vbHRpcEFjY2Vzc0tleVJlZ2V4cCA9IC9cWyhjdHJsLSk/KGFsdC0p PyhzaGlmdC0pPyhlc2MtKT8oLilcXSQvOwoKLyoqCiAqIEFkZCB0aGUgYXBwcm9w cmlhdGUgcHJlZml4IHRvIHRoZSBhY2Nlc3NrZXkgc2hvd24gaW4gdGhlIHRvb2x0 aXAuCiAqIElmIHRoZSBub2RlTGlzdCBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIG9ubHkg dGhvc2Ugbm9kZXMgYXJlIHVwZGF0ZWQ7CiAqIG90aGVyd2lzZSwgYWxsIHRoZSBu b2RlcyB0aGF0IHdpbGwgcHJvYmFibHkgaGF2ZSBhY2Nlc3NrZXlzIGJ5CiAqIGRl ZmF1bHQgYXJlIHVwZGF0ZWQuCiAqCiAqIEBwYXJhbSBBcnJheSBub2RlTGlzdCAt LSBsaXN0IG9mIGVsZW1lbnRzIHRvIHVwZGF0ZQogKi8KZnVuY3Rpb24gdXBkYXRl VG9vbHRpcEFjY2Vzc0tleXMoIG5vZGVMaXN0ICkgewoJaWYgKCAhbm9kZUxpc3Qg KSB7CgkJLy8gUmF0aGVyIHRoYW4gc2NhbiBhbGwgbGlua3Mgb24gdGhlIHdob2xl IHBhZ2UsIHdlIGNhbiBqdXN0IHNjYW4gdGhlc2UKCQkvLyBjb250YWluZXJzIHdo aWNoIGNvbnRhaW4gdGhlIHJlbGV2YW50IGxpbmtzLiBUaGlzIGlzIHJlYWxseSBq dXN0IGFuCgkJLy8gb3B0aW1pemF0aW9uIHRlY2huaXF1ZS4KCQl2YXIgbGlua0Nv bnRhaW5lcnMgPSBbCgkJCSJjb2x1bW4tb25lIiwgLy8gTW9ub2Jvb2sgYW5kIE1v ZGVybgoJCQkiaGVhZCIsICJwYW5lbCIsICJwLWxvZ28iIC8vIFZlY3RvcgoJCV07 CgkJZm9yICggdmFyIGkgaW4gbGlua0NvbnRhaW5lcnMgKSB7CgkJCXZhciBsaW5r Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGxpbmtDb250YWlu ZXJzW2ldICk7CgkJCWlmICggbGlua0NvbnRhaW5lciApIHsKCQkJCXVwZGF0ZVRv b2x0aXBBY2Nlc3NLZXlzKCBsaW5rQ29udGFpbmVyLmdldEVsZW1lbnRzQnlUYWdO YW1lKCJhIikgKTsKCQkJfQoJCX0KCQkvLyB0aGVzZSBhcmUgcmFyZSBlbm91Z2gg dGhhdCBubyBzdWNoIG9wdGltaXphdGlvbiBpcyBuZWVkZWQKCQl1cGRhdGVUb29s dGlwQWNjZXNzS2V5cyggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlu cHV0IikgKTsKCQl1cGRhdGVUb29sdGlwQWNjZXNzS2V5cyggZG9jdW1lbnQuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIikgKTsKCQlyZXR1cm47Cgl9CgoJZm9y ICggdmFyIGkgPSAwOyBpIDwgbm9kZUxpc3QubGVuZ3RoOyBpKysgKSB7CgkJdmFy IGVsZW1lbnQgPSBub2RlTGlzdFtpXTsKCQl2YXIgdGlwID0gZWxlbWVudC5nZXRB dHRyaWJ1dGUoInRpdGxlIik7CgkJaWYgKCB0aXAgJiYgdG9vbHRpcEFjY2Vzc0tl eVJlZ2V4cC5leGVjKHRpcCkgKSB7CgkJCXRpcCA9IHRpcC5yZXBsYWNlKHRvb2x0 aXBBY2Nlc3NLZXlSZWdleHAsCgkJCQkJICAiWyIrdG9vbHRpcEFjY2Vzc0tleVBy ZWZpeCsiJDVdIik7CgkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIHRp cCApOwoJCX0KCX0KfQoKLyoqCiAqIEFkZCBhIGxpbmsgdG8gb25lIG9mIHRoZSBw b3J0bGV0IG1lbnVzIG9uIHRoZSBwYWdlLCBpbmNsdWRpbmc6CiAqCiAqIHAtY2Fj dGlvbnM6IENvbnRlbnQgYWN0aW9ucyAoc2hvd24gYXMgdGFicyBhYm92ZSB0aGUg bWFpbiBjb250ZW50IGluIE1vbm9ib29rKQogKiBwLXBlcnNvbmFsOiBQZXJzb25h bCB0b29scyAoc2hvd24gYXQgdGhlIHRvcCByaWdodCBvZiB0aGUgcGFnZSBpbiBN b25vYm9vaykKICogcC1uYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uCiAqIHAtdGI6IFRv b2xib3gKICoKICogVGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yIHRoZSBjb252ZW5p ZW5jZSBvZiBjdXN0b20gSlMgYXV0aG9ycy4gIEFsbAogKiBidXQgdGhlIGZpcnN0 IHRocmVlIHBhcmFtZXRlcnMgYXJlIG9wdGlvbmFsLCB0aG91Z2ggcHJvdmlkaW5n IGF0CiAqIGxlYXN0IGFuIGlkIGFuZCBhIHRvb2x0aXAgaXMgcmVjb21tZW5kZWQu CiAqCiAqIEJ5IGRlZmF1bHQgdGhlIG5ldyBsaW5rIHdpbGwgYmUgYWRkZWQgdG8g dGhlIGVuZCBvZiB0aGUgbGlzdC4gIFRvCiAqIGFkZCB0aGUgbGluayBiZWZvcmUg YSBnaXZlbiBleGlzdGluZyBpdGVtLCBwYXNzIHRoZSBET00gbm9kZSBvZgogKiB0 aGF0IGl0ZW0gKGVhc2lseSBvYnRhaW5lZCB3aXRoIGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCkpIGFzIHRoZQogKiBuZXh0bm9kZSBwYXJhbWV0ZXI7IHRvIGFkZCB0 aGUgbGluayBfYWZ0ZXJfIGFuIGV4aXN0aW5nIGl0ZW0sIHBhc3MKICogdGhlIG5v ZGUncyBuZXh0U2libGluZyBpbnN0ZWFkLgogKgogKiBAcGFyYW0gU3RyaW5nIHBv cnRsZXQgLS0gaWQgb2YgdGhlIHRhcmdldCBwb3J0bGV0ICgicC1jYWN0aW9ucyIs ICJwLXBlcnNvbmFsIiwgInAtbmF2aWdhdGlvbiIgb3IgInAtdGIiKQogKiBAcGFy YW0gU3RyaW5nIGhyZWYgLS0gbGluayBVUkwKICogQHBhcmFtIFN0cmluZyB0ZXh0 IC0tIGxpbmsgdGV4dCAod2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxvd2VyY2FzZWQg YnkgQ1NTIGZvciBwLWNhY3Rpb25zIGluIE1vbm9ib29rKQogKiBAcGFyYW0gU3Ry aW5nIGlkIC0tIGlkIG9mIHRoZSBuZXcgaXRlbSwgc2hvdWxkIGJlIHVuaXF1ZSBh bmQgcHJlZmVyYWJseSBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwcmVmaXggKCJjYS0i LCAicHQtIiwgIm4tIiBvciAidC0iKQogKiBAcGFyYW0gU3RyaW5nIHRvb2x0aXAg LS0gdGV4dCB0byBzaG93IHdoZW4gaG92ZXJpbmcgb3ZlciB0aGUgbGluaywgd2l0 aG91dCBhY2Nlc3NrZXkgc3VmZml4CiAqIEBwYXJhbSBTdHJpbmcgYWNjZXNza2V5 IC0tIGFjY2Vzc2tleSB0byBhY3RpdmF0ZSB0aGlzIGxpbmsgKG9uZSBjaGFyYWN0 ZXIsIHRyeSB0byBhdm9pZCBjb25mbGljdHMpCiAqIEBwYXJhbSBOb2RlIG5leHRu b2RlIC0tIHRoZSBET00gbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBpdGVtIHNo b3VsZCBiZSBhZGRlZCwgc2hvdWxkIGJlIGFub3RoZXIgaXRlbSBpbiB0aGUgc2Ft ZSBsaXN0CiAqCiAqIEByZXR1cm4gTm9kZSAtLSB0aGUgRE9NIG5vZGUgb2YgdGhl IG5ldyBpdGVtIChhbiBMSSBlbGVtZW50KSBvciBudWxsCiAqLwpmdW5jdGlvbiBh ZGRQb3J0bGV0TGluayhwb3J0bGV0LCBocmVmLCB0ZXh0LCBpZCwgdG9vbHRpcCwg YWNjZXNza2V5LCBuZXh0bm9kZSkgewoJdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZChwb3J0bGV0KTsKCWlmICggIXJvb3QgKSByZXR1cm4gbnVsbDsK CXZhciBub2RlID0gcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInVsIiApWzBd OwoJaWYgKCAhbm9kZSApIHJldHVybiBudWxsOwoKCS8vIHVuaGlkZSBwb3J0bGV0 IGlmIGl0IHdhcyBoaWRkZW4gYmVmb3JlCglyb290LmNsYXNzTmFtZSA9IHJvb3Qu Y2xhc3NOYW1lLnJlcGxhY2UoIC8oXnwgKWVtcHR5UG9ydGxldCggfCQpLywgIiQy IiApOwoKCXZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNwYW4i ICk7CglzcGFuLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgg dGV4dCApICk7CgoJdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAi YSIgKTsKCWxpbmsuYXBwZW5kQ2hpbGQoIHNwYW4gKTsKCWxpbmsuaHJlZiA9IGhy ZWY7CgoJdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAibGkiICk7 CglpdGVtLmFwcGVuZENoaWxkKCBsaW5rICk7CglpZiAoIGlkICkgaXRlbS5pZCA9 IGlkOwoKCWlmICggYWNjZXNza2V5ICkgewoJCWxpbmsuc2V0QXR0cmlidXRlKCAi YWNjZXNza2V5IiwgYWNjZXNza2V5ICk7CgkJdG9vbHRpcCArPSAiIFsiK2FjY2Vz c2tleSsiXSI7Cgl9CglpZiAoIHRvb2x0aXAgKSB7CgkJbGluay5zZXRBdHRyaWJ1 dGUoICJ0aXRsZSIsIHRvb2x0aXAgKTsKCX0KCWlmICggYWNjZXNza2V5ICYmIHRv b2x0aXAgKSB7CgkJdXBkYXRlVG9vbHRpcEFjY2Vzc0tleXMoIG5ldyBBcnJheSgg bGluayApICk7Cgl9CgoJaWYgKCBuZXh0bm9kZSAmJiBuZXh0bm9kZS5wYXJlbnRO b2RlID09IG5vZGUgKQoJCW5vZGUuaW5zZXJ0QmVmb3JlKCBpdGVtLCBuZXh0bm9k ZSApOwoJZWxzZQoJCW5vZGUuYXBwZW5kQ2hpbGQoIGl0ZW0gKTsgIC8vIElFIGNv bXBhdGliaWxpdHkgKD8pCgoJcmV0dXJuIGl0ZW07Cn0KCmZ1bmN0aW9uIGdldElu bmVyVGV4dChlbCkgewoJaWYgKHR5cGVvZiBlbCA9PSAic3RyaW5nIikgcmV0dXJu IGVsOwoJaWYgKHR5cGVvZiBlbCA9PSAidW5kZWZpbmVkIikgeyByZXR1cm4gZWwg fTsKCWlmIChlbC50ZXh0Q29udGVudCkgcmV0dXJuIGVsLnRleHRDb250ZW50OyAv LyBub3QgbmVlZGVkIGJ1dCBpdCBpcyBmYXN0ZXIKCWlmIChlbC5pbm5lclRleHQp IHJldHVybiBlbC5pbm5lclRleHQ7ICAgICAvLyBJRSBkb2Vzbid0IGhhdmUgdGV4 dENvbnRlbnQKCXZhciBzdHIgPSAiIjsKCgl2YXIgY3MgPSBlbC5jaGlsZE5vZGVz OwoJdmFyIGwgPSBjcy5sZW5ndGg7Cglmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkr KykgewoJCXN3aXRjaCAoY3NbaV0ubm9kZVR5cGUpIHsKCQkJY2FzZSAxOiAvL0VM RU1FTlRfTk9ERQoJCQkJc3RyICs9IHRzX2dldElubmVyVGV4dChjc1tpXSk7CgkJ CQlicmVhazsKCQkJY2FzZSAzOgkvL1RFWFRfTk9ERQoJCQkJc3RyICs9IGNzW2ld Lm5vZGVWYWx1ZTsKCQkJCWJyZWFrOwoJCX0KCX0KCXJldHVybiBzdHI7Cn0KCgov KioKICogU2V0IHVwIGFjY2Vzc2tleXMvdG9vbHRpcHMgZnJvbSB0aGUgZGVwcmVj YXRlZCB0YSBhcnJheS4gIElmIGRvSWQKICogaXMgc3BlY2lmaWVkLCBvbmx5IHNl dCB1cCBmb3IgdGhhdCBpZC4gIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzCiAq IGRlcHJlY2F0ZWQgYW5kIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbmRlZmluaXRl bHkgLS0gdXNlCiAqIHVwZGF0ZVRvb2x0aXBBY2Nlc3NLZXkoKSBpbnN0ZWFkLgog KgogKiBAcGFyYW0gbWl4ZWQgZG9JZCBzdHJpbmcgb3IgbnVsbAogKi8KZnVuY3Rp b24gYWtleXR0KCBkb0lkICkgewoJLy8gQSBsb3Qgb2YgdXNlciBzY3JpcHRzIChh bmQgc29tZSBvZiB0aGUgY29kZSBiZWxvdykgYnJlYWsgaWYKCS8vIHRhIGlzbid0 IGRlZmluZWQsIHNvIHdlIG1ha2Ugc3VyZSBpdCBpcy4gIEV4cGxpY3RseSB1c2lu ZwoJLy8gd2luZG93LnRhIGF2b2lkcyBhICJ0YSBpcyBub3QgZGVmaW5lZCIgZXJy b3IuCglpZiAoIXdpbmRvdy50YSkgd2luZG93LnRhID0gbmV3IEFycmF5OwoKCS8v IE1ha2UgYSBsb2NhbCwgcG9zc2libHkgcmVzdHJpY3RlZCwgY29weSB0byBhdm9p ZCBjbG9iYmVyaW5nCgkvLyB0aGUgb3JpZ2luYWwuCgl2YXIgdGE7CglpZiAoIGRv SWQgKSB7CgkJdGEgPSBbZG9JZF07Cgl9IGVsc2UgewoJCXRhID0gd2luZG93LnRh OwoJfQoKCS8vIE5vdyBkZWFsIHdpdGggZXZpbCBkZXByZWNhdGVkIHRhCgl2YXIg d2F0Y2hDaGVja2JveEV4aXN0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAn d3BXYXRjaHRoaXMnICkgPyB0cnVlIDogZmFsc2U7Cglmb3IgKHZhciBpZCBpbiB0 YSkgewoJCXZhciBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwoJCWlm IChuKSB7CgkJCXZhciBhID0gbnVsbDsKCQkJdmFyIGFrID0gJyc7CgkJCS8vIEFy ZSB3ZSBwdXR0aW5nIGFjY2Vzc2tleSBpbiBpdAoJCQlpZiAodGFbaWRdWzBdLmxl bmd0aCA+IDApIHsKCQkJCS8vIElzIHRoaXMgb2JqZWN0IGEgb2JqZWN0PyBJZiBu b3QgYXNzdW1lIGl0J3MgdGhlIG5leHQgY2hpbGQuCgoJCQkJaWYgKG4ubm9kZU5h bWUudG9Mb3dlckNhc2UoKSA9PSAiYSIpIHsKCQkJCQlhID0gbjsKCQkJCX0gZWxz ZSB7CgkJCQkJYSA9IG4uY2hpbGROb2Rlc1swXTsKCQkJCX0KCQkJIAkvLyBEb24n dCBhZGQgYW4gYWNjZXNza2V5IGZvciB0aGUgd2F0Y2ggdGFiIGlmIHRoZSB3YXRj aAoJCQkgCS8vIGNoZWNrYm94IGlzIGFsc28gYXZhaWxhYmxlLgoJCQkJaWYgKGEg JiYgKChpZCAhPSAnY2Etd2F0Y2gnICYmIGlkICE9ICdjYS11bndhdGNoJykgfHwg IXdhdGNoQ2hlY2tib3hFeGlzdHMpKSB7CgkJCQkJYS5hY2Nlc3NLZXkgPSB0YVtp ZF1bMF07CgkJCQkJYWsgPSAnIFsnK3Rvb2x0aXBBY2Nlc3NLZXlQcmVmaXgrdGFb aWRdWzBdKyddJzsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCS8vIFdlIGRvbid0IGNh cmUgd2hhdCB0eXBlIHRoZSBvYmplY3QgaXMgd2hlbiBhc3NpZ25pbmcgdG9vbHRp cAoJCQkJYSA9IG47CgkJCQlhayA9ICcnOwoJCQl9CgoJCQlpZiAoYSkgewoJCQkJ YS50aXRsZSA9IHRhW2lkXVsxXSthazsKCQkJfQoJCX0KCX0KfQoKdmFyIGNoZWNr Ym94ZXM7CnZhciBsYXN0Q2hlY2tib3g7CgpmdW5jdGlvbiBzZXR1cENoZWNrYm94 U2hpZnRDbGljaygpIHsKCWNoZWNrYm94ZXMgPSBbXTsKCWxhc3RDaGVja2JveCA9 IG51bGw7Cgl2YXIgaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h bWUoJ2lucHV0Jyk7CglhZGRDaGVja2JveENsaWNrSGFuZGxlcnMoaW5wdXRzKTsK fQoKZnVuY3Rpb24gYWRkQ2hlY2tib3hDbGlja0hhbmRsZXJzKGlucHV0cywgc3Rh cnQpIHsKCWlmICggIXN0YXJ0KSBzdGFydCA9IDA7CgoJdmFyIGZpbmlzaCA9IHN0 YXJ0ICsgMjUwOwoJaWYgKCBmaW5pc2ggPiBpbnB1dHMubGVuZ3RoICkKCQlmaW5p c2ggPSBpbnB1dHMubGVuZ3RoOwoKCWZvciAoIHZhciBpID0gc3RhcnQ7IGkgPCBm aW5pc2g7IGkrKyApIHsKCQl2YXIgY2IgPSBpbnB1dHNbaV07CgkJaWYgKCAhY2Iu dHlwZSB8fCBjYi50eXBlLnRvTG93ZXJDYXNlKCkgIT0gJ2NoZWNrYm94JyApCgkJ CWNvbnRpbnVlOwoJCXZhciBlbmQgPSBjaGVja2JveGVzLmxlbmd0aDsKCQljaGVj a2JveGVzW2VuZF0gPSBjYjsKCQljYi5pbmRleCA9IGVuZDsKCQljYi5vbmNsaWNr ID0gY2hlY2tib3hDbGlja0hhbmRsZXI7Cgl9CgoJaWYgKCBmaW5pc2ggPCBpbnB1 dHMubGVuZ3RoICkgewoJCXNldFRpbWVvdXQoIGZ1bmN0aW9uICgpIHsKCQkJYWRk Q2hlY2tib3hDbGlja0hhbmRsZXJzKGlucHV0cywgZmluaXNoKTsKCQl9LCAyMDAg KTsKCX0KfQoKZnVuY3Rpb24gY2hlY2tib3hDbGlja0hhbmRsZXIoZSkgewoJaWYg KHR5cGVvZiBlID09ICd1bmRlZmluZWQnKSB7CgkJZSA9IHdpbmRvdy5ldmVudDsK CX0KCWlmICggIWUuc2hpZnRLZXkgfHwgbGFzdENoZWNrYm94ID09PSBudWxsICkg ewoJCWxhc3RDaGVja2JveCA9IHRoaXMuaW5kZXg7CgkJcmV0dXJuIHRydWU7Cgl9 Cgl2YXIgZW5kU3RhdGUgPSB0aGlzLmNoZWNrZWQ7Cgl2YXIgc3RhcnQsIGZpbmlz aDsKCWlmICggdGhpcy5pbmRleCA8IGxhc3RDaGVja2JveCApIHsKCQlzdGFydCA9 IHRoaXMuaW5kZXggKyAxOwoJCWZpbmlzaCA9IGxhc3RDaGVja2JveDsKCX0gZWxz ZSB7CgkJc3RhcnQgPSBsYXN0Q2hlY2tib3g7CgkJZmluaXNoID0gdGhpcy5pbmRl eCAtIDE7Cgl9Cglmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZmluaXNoOyArK2kg KSB7CgkJY2hlY2tib3hlc1tpXS5jaGVja2VkID0gZW5kU3RhdGU7CgkJaWYoIGkg PiBzdGFydCAmJiB0eXBlb2YgY2hlY2tib3hlc1tpXS5vbmNoYW5nZSA9PSAnZnVu Y3Rpb24nICkKCQkJY2hlY2tib3hlc1tpXS5vbmNoYW5nZSgpOyAvLyBmaXJlIHRy aWdnZXJzCgl9CglsYXN0Q2hlY2tib3ggPSB0aGlzLmluZGV4OwoJcmV0dXJuIHRy dWU7Cn0KCmZ1bmN0aW9uIHRvZ2dsZV9lbGVtZW50X2FjdGl2YXRpb24oaWRhLGlk YikgewoJaWYgKCAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKSB7CgkJcmV0dXJu OwoJfQoJLy8gU2hvdyB0aGUgYXBwcm9wcmlhdGUgdXBsb2FkIHNpemUgbGltaXQg bWVzc2FnZQoJaWYoIGlkYiA9PSAnd3BVcGxvYWRGaWxlVVJMJyApIHsKCQl2YXIg ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbXctdXBsb2FkLW1heGZpbGVz aXplJyApOwoJCWlmKCBlICkgZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoKCQl2 YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAnbXctdXBsb2FkLW1heGZp bGVzaXplLXVybCcgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlzcGxheSA9ICJibG9j ayI7Cgl9CglpZiggaWRiID09ICd3cFVwbG9hZEZpbGUnICkgewoJCXZhciBlID0g ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdtdy11cGxvYWQtbWF4ZmlsZXNpemUt dXJsJyApOwoJCWlmKCBlICkgZS5zdHlsZS5kaXNwbGF5ID0gICJub25lIjsKCgkJ dmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ213LXVwbG9hZC1tYXhm aWxlc2l6ZScgKTsKCQlpZiggZSApIGUuc3R5bGUuZGlzcGxheSA9ICAiYmxvY2si OwoJfQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGlkYSApLmRpc2FibGVkID0g dHJ1ZTsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZGIgKS5kaXNhYmxlZCA9 IGZhbHNlOwp9CgpmdW5jdGlvbiB0b2dnbGVfZWxlbWVudF9jaGVjayhpZGEsaWRi KSB7CglpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7CgkJcmV0dXJuOwoJ fQoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRhKS5jaGVja2VkPXRydWU7Cglk b2N1bWVudC5nZXRFbGVtZW50QnlJZChpZGIpLmNoZWNrZWQ9ZmFsc2U7Cn0KCi8q CglXcml0dGVuIGJ5IEpvbmF0aGFuIFNub29rLCBodHRwOi8vd3d3LnNub29rLmNh L2pvbmF0aGFuCglBZGQtb25zIGJ5IFJvYmVydCBOeW1hbiwgaHR0cDovL3d3dy5y b2JlcnRueW1hbi5jb20KCUF1dGhvciBzYXlzICJUaGUgY3JlZGl0IGNvbW1lbnQg aXMgYWxsIGl0IHRha2VzLCBubyBsaWNlbnNlLiBHbyBjcmF6eSB3aXRoIGl0ITot KSIKCUZyb20gaHR0cDovL3d3dy5yb2JlcnRueW1hbi5jb20vMjAwNS8xMS8wNy90 aGUtdWx0aW1hdGUtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZS8KKi8KZnVuY3Rpb24g Z2V0RWxlbWVudHNCeUNsYXNzTmFtZShvRWxtLCBzdHJUYWdOYW1lLCBvQ2xhc3NO YW1lcyl7Cgl2YXIgYXJyUmV0dXJuRWxlbWVudHMgPSBuZXcgQXJyYXkoKTsKCWlm ICggdHlwZW9mKCBvRWxtLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSA9PSAiZnVu Y3Rpb24iICkgewoJCS8qIFVzZSBhIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiB3aGVy ZSBwb3NzaWJsZSBGRjMsIFNhZjMuMiwgT3BlcmEgOS41ICovCgkJdmFyIGFyck5h dGl2ZVJldHVybiA9IG9FbG0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggb0NsYXNz TmFtZXMgKTsKCQlpZiAoIHN0clRhZ05hbWUgPT0gIioiICkKCQkJcmV0dXJuIGFy ck5hdGl2ZVJldHVybjsKCQlmb3IgKCB2YXIgaD0wOyBoIDwgYXJyTmF0aXZlUmV0 dXJuLmxlbmd0aDsgaCsrICkgewoJCQlpZiggYXJyTmF0aXZlUmV0dXJuW2hdLnRh Z05hbWUudG9Mb3dlckNhc2UoKSA9PSBzdHJUYWdOYW1lLnRvTG93ZXJDYXNlKCkg KQoJCQkJYXJyUmV0dXJuRWxlbWVudHNbYXJyUmV0dXJuRWxlbWVudHMubGVuZ3Ro XSA9IGFyck5hdGl2ZVJldHVybltoXTsKCQl9CgkJcmV0dXJuIGFyclJldHVybkVs ZW1lbnRzOwoJfQoJdmFyIGFyckVsZW1lbnRzID0gKHN0clRhZ05hbWUgPT0gIioi ICYmIG9FbG0uYWxsKT8gb0VsbS5hbGwgOiBvRWxtLmdldEVsZW1lbnRzQnlUYWdO YW1lKHN0clRhZ05hbWUpOwoJdmFyIGFyclJlZ0V4cENsYXNzTmFtZXMgPSBuZXcg QXJyYXkoKTsKCWlmKHR5cGVvZiBvQ2xhc3NOYW1lcyA9PSAib2JqZWN0Iil7CgkJ Zm9yKHZhciBpPTA7IGk8b0NsYXNzTmFtZXMubGVuZ3RoOyBpKyspewoJCQlhcnJS ZWdFeHBDbGFzc05hbWVzW2FyclJlZ0V4cENsYXNzTmFtZXMubGVuZ3RoXSA9CgkJ CQluZXcgUmVnRXhwKCIoXnxcXHMpIiArIG9DbGFzc05hbWVzW2ldLnJlcGxhY2Uo L1wtL2csICJcXC0iKSArICIoXFxzfCQpIik7CgkJfQoJfQoJZWxzZXsKCQlhcnJS ZWdFeHBDbGFzc05hbWVzW2FyclJlZ0V4cENsYXNzTmFtZXMubGVuZ3RoXSA9CgkJ CW5ldyBSZWdFeHAoIihefFxccykiICsgb0NsYXNzTmFtZXMucmVwbGFjZSgvXC0v ZywgIlxcLSIpICsgIihcXHN8JCkiKTsKCX0KCXZhciBvRWxlbWVudDsKCXZhciBi TWF0Y2hlc0FsbDsKCWZvcih2YXIgaj0wOyBqPGFyckVsZW1lbnRzLmxlbmd0aDsg aisrKXsKCQlvRWxlbWVudCA9IGFyckVsZW1lbnRzW2pdOwoJCWJNYXRjaGVzQWxs ID0gdHJ1ZTsKCQlmb3IodmFyIGs9MDsgazxhcnJSZWdFeHBDbGFzc05hbWVzLmxl bmd0aDsgaysrKXsKCQkJaWYoIWFyclJlZ0V4cENsYXNzTmFtZXNba10udGVzdChv RWxlbWVudC5jbGFzc05hbWUpKXsKCQkJCWJNYXRjaGVzQWxsID0gZmFsc2U7CgkJ CQlicmVhazsKCQkJfQoJCX0KCQlpZihiTWF0Y2hlc0FsbCl7CgkJCWFyclJldHVy bkVsZW1lbnRzW2FyclJldHVybkVsZW1lbnRzLmxlbmd0aF0gPSBvRWxlbWVudDsK CQl9Cgl9CglyZXR1cm4gKGFyclJldHVybkVsZW1lbnRzKQp9CgpmdW5jdGlvbiBy ZWRpcmVjdFRvRnJhZ21lbnQoZnJhZ21lbnQpIHsKCXZhciBtYXRjaCA9IG5hdmln YXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrKS8pOwoJaWYg KG1hdGNoKSB7CgkJdmFyIHdlYktpdFZlcnNpb24gPSBwYXJzZUludChtYXRjaFsx XSk7CgkJaWYgKHdlYktpdFZlcnNpb24gPCA0MjApIHsKCQkJLy8gUmVsZWFzZWQg U2FmYXJpIHcvIFdlYktpdCA0MTguOS4xIG1lc3NlcyB1cCBob3JyaWJseQoJCQkv LyBOaWdodGxpZXMgb2YgNDIwKyBhcmUgb2sKCQkJcmV0dXJuOwoJCX0KCX0KCWlm IChpc19nZWNrbykgewoJCS8vIE1vemlsbGEgbmVlZHMgdG8gd2FpdCB1bnRpbCBh ZnRlciBsb2FkLCBvdGhlcndpc2UgdGhlIHdpbmRvdyBkb2Vzbid0IHNjcm9sbAoJ CWFkZE9ubG9hZEhvb2soZnVuY3Rpb24gKCkgewoJCQlpZiAod2luZG93LmxvY2F0 aW9uLmhhc2ggPT0gIiIpCgkJCQl3aW5kb3cubG9jYXRpb24uaGFzaCA9IGZyYWdt ZW50OwoJCX0pOwoJfSBlbHNlIHsKCQlpZiAod2luZG93LmxvY2F0aW9uLmhhc2gg PT0gIiIpCgkJCXdpbmRvdy5sb2NhdGlvbi5oYXNoID0gZnJhZ21lbnQ7Cgl9Cn0K Ci8qCiAqIFRhYmxlIHNvcnRpbmcgc2NyaXB0IGJhc2VkIG9uIG9uZSAoYykgMTk5 Ny0yMDA2IFN0dWFydCBMYW5ncmlkZ2UgYW5kIEpvb3N0CiAqIGRlIFZhbGs6CiAq IGh0dHA6Ly93d3cuam9vc3RkZXZhbGsubmwvY29kZS9zb3J0YWJsZS10YWJsZS8K ICogaHR0cDovL3d3dy5rcnlvZ2VuaXgub3JnL2NvZGUvYnJvd3Nlci9zb3J0dGFi bGUvCiAqCiAqIEB0b2RvIGRvbid0IGJyZWFrIG9uIGNvbHNwYW5zL3Jvd3NwYW5z IChidWcgODAyOCkKICogQHRvZG8gbGFuZ3VhZ2Utc3BlY2lmaWMgZGlnaXQgZ3Jv dXBpbmcvZGVjaW1hbHMgKGJ1ZyA4MDYzKQogKiBAdG9kbyBzdXBwb3J0IGFsbCBh Y2NlcHRlZCBkYXRlIGZvcm1hdHMgKGJ1ZyA4MjI2KQogKi8KCnZhciB0c19pbWFn ZV9wYXRoID0gc3R5bGVwYXRoKyIvY29tbW9uL2ltYWdlcy8iOwp2YXIgdHNfaW1h Z2VfdXAgPSAic29ydF91cC5naWYiOwp2YXIgdHNfaW1hZ2VfZG93biA9ICJzb3J0 X2Rvd24uZ2lmIjsKdmFyIHRzX2ltYWdlX25vbmUgPSAic29ydF9ub25lLmdpZiI7 CnZhciB0c19ldXJvcGVhbmRhdGUgPSB3Z0NvbnRlbnRMYW5ndWFnZSAhPSAiZW4i OyAvLyBUaGUgbm9uLUFtZXJpY2FuLWluY2xpbmVkIGNhbiBjaGFuZ2UgdG8gInRy dWUiCnZhciB0c19hbHRlcm5hdGVfcm93X2NvbG9ycyA9IGZhbHNlOwp2YXIgdHNf bnVtYmVyX3RyYW5zZm9ybV90YWJsZSA9IG51bGw7CnZhciB0c19udW1iZXJfcmVn ZXggPSBudWxsOwoKZnVuY3Rpb24gc29ydGFibGVzX2luaXQoKSB7Cgl2YXIgaWRu dW0gPSAwOwoJLy8gRmluZCBhbGwgdGFibGVzIHdpdGggY2xhc3Mgc29ydGFibGUg YW5kIG1ha2UgdGhlbSBzb3J0YWJsZQoJdmFyIHRhYmxlcyA9IGdldEVsZW1lbnRz QnlDbGFzc05hbWUoZG9jdW1lbnQsICJ0YWJsZSIsICJzb3J0YWJsZSIpOwoJZm9y ICh2YXIgdGkgPSAwOyB0aSA8IHRhYmxlcy5sZW5ndGggOyB0aSsrKSB7CgkJaWYg KCF0YWJsZXNbdGldLmlkKSB7CgkJCXRhYmxlc1t0aV0uc2V0QXR0cmlidXRlKCdp ZCcsJ3NvcnRhYmxlX3RhYmxlX2lkXycraWRudW0pOwoJCQkrK2lkbnVtOwoJCX0K CQl0c19tYWtlU29ydGFibGUodGFibGVzW3RpXSk7Cgl9Cn0KCmZ1bmN0aW9uIHRz X21ha2VTb3J0YWJsZSh0YWJsZSkgewoJdmFyIGZpcnN0Um93OwoJaWYgKHRhYmxl LnJvd3MgJiYgdGFibGUucm93cy5sZW5ndGggPiAwKSB7CgkJaWYgKHRhYmxlLnRI ZWFkICYmIHRhYmxlLnRIZWFkLnJvd3MubGVuZ3RoID4gMCkgewoJCQlmaXJzdFJv dyA9IHRhYmxlLnRIZWFkLnJvd3NbdGFibGUudEhlYWQucm93cy5sZW5ndGgtMV07 CgkJfSBlbHNlIHsKCQkJZmlyc3RSb3cgPSB0YWJsZS5yb3dzWzBdOwoJCX0KCX0K CWlmICghZmlyc3RSb3cpIHJldHVybjsKCgkvLyBXZSBoYXZlIGEgZmlyc3Qgcm93 OiBhc3N1bWUgaXQncyB0aGUgaGVhZGVyLCBhbmQgbWFrZSBpdHMgY29udGVudHMg Y2xpY2thYmxlIGxpbmtzCglmb3IgKHZhciBpID0gMDsgaSA8IGZpcnN0Um93LmNl bGxzLmxlbmd0aDsgaSsrKSB7CgkJdmFyIGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tp XTsKCQlpZiAoKCIgIitjZWxsLmNsYXNzTmFtZSsiICIpLmluZGV4T2YoIiB1bnNv cnRhYmxlICIpID09IC0xKSB7CgkJCWNlbGwuaW5uZXJIVE1MICs9ICcmbmJzcDsm bmJzcDsnCgkJCQkrICc8YSBocmVmPSIjIiBjbGFzcz0ic29ydGhlYWRlciIgJwoJ CQkJKyAnb25jbGljaz0idHNfcmVzb3J0VGFibGUodGhpcyk7cmV0dXJuIGZhbHNl OyI+JwoJCQkJKyAnPHNwYW4gY2xhc3M9InNvcnRhcnJvdyI+JwoJCQkJKyAnPGlt ZyBzcmM9IicKCQkJCSsgdHNfaW1hZ2VfcGF0aAoJCQkJKyB0c19pbWFnZV9ub25l CgkJCQkrICciIGFsdD0iJmRhcnI7Ii8+PC9zcGFuPjwvYT4nOwoJCX0KCX0KCWlm ICh0c19hbHRlcm5hdGVfcm93X2NvbG9ycykgewoJCXRzX2FsdGVybmF0ZSh0YWJs ZSk7Cgl9Cn0KCmZ1bmN0aW9uIHRzX2dldElubmVyVGV4dChlbCkgewoJcmV0dXJu IGdldElubmVyVGV4dCggZWwgKTsKfQoKZnVuY3Rpb24gdHNfcmVzb3J0VGFibGUo bG5rKSB7CgkvLyBnZXQgdGhlIHNwYW4KCXZhciBzcGFuID0gbG5rLmdldEVsZW1l bnRzQnlUYWdOYW1lKCdzcGFuJylbMF07CgoJdmFyIHRkID0gbG5rLnBhcmVudE5v ZGU7Cgl2YXIgdHIgPSB0ZC5wYXJlbnROb2RlOwoJdmFyIGNvbHVtbiA9IHRkLmNl bGxJbmRleDsKCgl2YXIgdGFibGUgPSB0ci5wYXJlbnROb2RlOwoJd2hpbGUgKHRh YmxlICYmICEodGFibGUudGFnTmFtZSAmJiB0YWJsZS50YWdOYW1lLnRvTG93ZXJD YXNlKCkgPT0gJ3RhYmxlJykpCgkJdGFibGUgPSB0YWJsZS5wYXJlbnROb2RlOwoJ aWYgKCF0YWJsZSkgcmV0dXJuOwoKCWlmICh0YWJsZS5yb3dzLmxlbmd0aCA8PSAx KSByZXR1cm47CgoJLy8gR2VuZXJhdGUgdGhlIG51bWJlciB0cmFuc2Zvcm0gdGFi bGUgaWYgaXQncyBub3QgZG9uZSBhbHJlYWR5CglpZiAodHNfbnVtYmVyX3RyYW5z Zm9ybV90YWJsZSA9PSBudWxsKSB7CgkJdHNfaW5pdFRyYW5zZm9ybVRhYmxlKCk7 Cgl9CgoJLy8gV29yayBvdXQgYSB0eXBlIGZvciB0aGUgY29sdW1uCgkvLyBTa2lw IHRoZSBmaXJzdCByb3cgaWYgdGhhdCdzIHdoZXJlIHRoZSBoZWFkaW5ncyBhcmUK CXZhciByb3dTdGFydCA9ICh0YWJsZS50SGVhZCAmJiB0YWJsZS50SGVhZC5yb3dz Lmxlbmd0aCA+IDAgPyAwIDogMSk7CgoJdmFyIGl0bSA9ICIiOwoJZm9yICh2YXIg aSA9IHJvd1N0YXJ0OyBpIDwgdGFibGUucm93cy5sZW5ndGg7IGkrKykgewoJCWlm ICh0YWJsZS5yb3dzW2ldLmNlbGxzLmxlbmd0aCA+IGNvbHVtbikgewoJCQlpdG0g PSB0c19nZXRJbm5lclRleHQodGFibGUucm93c1tpXS5jZWxsc1tjb2x1bW5dKTsK CQkJaXRtID0gaXRtLnJlcGxhY2UoL15bXHNceGEwXSsvLCAiIikucmVwbGFjZSgv W1xzXHhhMF0rJC8sICIiKTsKCQkJaWYgKGl0bSAhPSAiIikgYnJlYWs7CgkJfQoJ fQoKCS8vIFRPRE86IGJ1ZyA4MjI2LCBsb2NhbGlzZWQgZGF0ZSBmb3JtYXRzCgl2 YXIgc29ydGZuID0gdHNfc29ydF9nZW5lcmljOwoJdmFyIHByZXByb2Nlc3NvciA9 IHRzX3RvTG93ZXJDYXNlOwoJaWYgKC9eXGRcZFtcLy4gLV1bYS16QS1aXXszfVtc Ly4gLV1cZFxkXGRcZCQvLnRlc3QoaXRtKSkgewoJCXByZXByb2Nlc3NvciA9IHRz X2RhdGVUb1NvcnRLZXk7Cgl9IGVsc2UgaWYgKC9eXGRcZFtcLy4tXVxkXGRbXC8u LV1cZFxkXGRcZCQvLnRlc3QoaXRtKSkgewoJCXByZXByb2Nlc3NvciA9IHRzX2Rh dGVUb1NvcnRLZXk7Cgl9IGVsc2UgaWYgKC9eXGRcZFtcLy4tXVxkXGRbXC8uLV1c ZFxkJC8udGVzdChpdG0pKSB7CgkJcHJlcHJvY2Vzc29yID0gdHNfZGF0ZVRvU29y dEtleTsKCS8vIHBvdW5kIGRvbGxhciBldXJvIHllbiBjdXJyZW5jeSBjZW50cwoJ fSBlbHNlIGlmICgvKF5bXHUwMGEzJFx1MjBhY1x1MDBhNFx1MDBhNV18XHUwMGEy JCkvLnRlc3QoaXRtKSkgewoJCXByZXByb2Nlc3NvciA9IHRzX2N1cnJlbmN5VG9T b3J0S2V5OwoJfSBlbHNlIGlmICh0c19udW1iZXJfcmVnZXgudGVzdChpdG0pKSB7 CgkJcHJlcHJvY2Vzc29yID0gdHNfcGFyc2VGbG9hdDsKCX0KCgl2YXIgcmV2ZXJz ZSA9IChzcGFuLmdldEF0dHJpYnV0ZSgic29ydGRpciIpID09ICdkb3duJyk7CgoJ dmFyIG5ld1Jvd3MgPSBuZXcgQXJyYXkoKTsKCXZhciBzdGF0aWNSb3dzID0gbmV3 IEFycmF5KCk7Cglmb3IgKHZhciBqID0gcm93U3RhcnQ7IGogPCB0YWJsZS5yb3dz Lmxlbmd0aDsgaisrKSB7CgkJdmFyIHJvdyA9IHRhYmxlLnJvd3Nbal07CgkJaWYo KCIgIityb3cuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiIHVuc29ydGFibGUgIikg PCAwKSB7CgkJCXZhciBrZXlUZXh0ID0gdHNfZ2V0SW5uZXJUZXh0KHJvdy5jZWxs c1tjb2x1bW5dKTsKCQkJdmFyIG9sZEluZGV4ID0gKHJldmVyc2UgPyAtaiA6IGop OwoJCQl2YXIgcHJlcHJvY2Vzc2VkID0gcHJlcHJvY2Vzc29yKCBrZXlUZXh0LnJl cGxhY2UoL15bXHNceGEwXSsvLCAiIikucmVwbGFjZSgvW1xzXHhhMF0rJC8sICIi KSApOwoKCQkJbmV3Um93c1tuZXdSb3dzLmxlbmd0aF0gPSBuZXcgQXJyYXkocm93 LCBwcmVwcm9jZXNzZWQsIG9sZEluZGV4KTsKCQl9IGVsc2Ugc3RhdGljUm93c1tz dGF0aWNSb3dzLmxlbmd0aF0gPSBuZXcgQXJyYXkocm93LCBmYWxzZSwgai1yb3dT dGFydCk7Cgl9CgoJbmV3Um93cy5zb3J0KHNvcnRmbik7CgoJdmFyIGFycm93SFRN TDsKCWlmIChyZXZlcnNlKSB7CgkJYXJyb3dIVE1MID0gJzxpbWcgc3JjPSInKyB0 c19pbWFnZV9wYXRoICsgdHNfaW1hZ2VfZG93biArICciIGFsdD0iJmRhcnI7Ii8+ JzsKCQluZXdSb3dzLnJldmVyc2UoKTsKCQlzcGFuLnNldEF0dHJpYnV0ZSgnc29y dGRpcicsJ3VwJyk7Cgl9IGVsc2UgewoJCWFycm93SFRNTCA9ICc8aW1nIHNyYz0i JysgdHNfaW1hZ2VfcGF0aCArIHRzX2ltYWdlX3VwICsgJyIgYWx0PSImdWFycjsi Lz4nOwoJCXNwYW4uc2V0QXR0cmlidXRlKCdzb3J0ZGlyJywnZG93bicpOwoJfQoK CWZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGljUm93cy5sZW5ndGg7IGkrKykgewoJ CXZhciByb3cgPSBzdGF0aWNSb3dzW2ldOwoJCW5ld1Jvd3Muc3BsaWNlKHJvd1sy XSwgMCwgcm93KTsKCX0KCgkvLyBXZSBhcHBlbmRDaGlsZCByb3dzIHRoYXQgYWxy ZWFkeSBleGlzdCB0byB0aGUgdGJvZHksIHNvIGl0IG1vdmVzIHRoZW0gcmF0aGVy IHRoYW4gY3JlYXRpbmcgbmV3IG9uZXMKCS8vIGRvbid0IGRvIHNvcnRib3R0b20g cm93cwoJZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdSb3dzLmxlbmd0aDsgaSsrKSB7 CgkJaWYgKCgiICIrbmV3Um93c1tpXVswXS5jbGFzc05hbWUrIiAiKS5pbmRleE9m KCIgc29ydGJvdHRvbSAiKSA9PSAtMSkKCQkJdGFibGUudEJvZGllc1swXS5hcHBl bmRDaGlsZChuZXdSb3dzW2ldWzBdKTsKCX0KCS8vIGRvIHNvcnRib3R0b20gcm93 cyBvbmx5Cglmb3IgKHZhciBpID0gMDsgaSA8IG5ld1Jvd3MubGVuZ3RoOyBpKysp IHsKCQlpZiAoKCIgIituZXdSb3dzW2ldWzBdLmNsYXNzTmFtZSsiICIpLmluZGV4 T2YoIiBzb3J0Ym90dG9tICIpICE9IC0xKQoJCQl0YWJsZS50Qm9kaWVzWzBdLmFw cGVuZENoaWxkKG5ld1Jvd3NbaV1bMF0pOwoJfQoKCS8vIERlbGV0ZSBhbnkgb3Ro ZXIgYXJyb3dzIHRoZXJlIG1heSBiZSBzaG93aW5nCgl2YXIgc3BhbnMgPSBnZXRF bGVtZW50c0J5Q2xhc3NOYW1lKHRyLCAic3BhbiIsICJzb3J0YXJyb3ciKTsKCWZv ciAodmFyIGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoOyBpKyspIHsKCQlzcGFuc1tp XS5pbm5lckhUTUwgPSAnPGltZyBzcmM9IicrIHRzX2ltYWdlX3BhdGggKyB0c19p bWFnZV9ub25lICsgJyIgYWx0PSImZGFycjsiLz4nOwoJfQoJc3Bhbi5pbm5lckhU TUwgPSBhcnJvd0hUTUw7CgoJaWYgKHRzX2FsdGVybmF0ZV9yb3dfY29sb3JzKSB7 CgkJdHNfYWx0ZXJuYXRlKHRhYmxlKTsKCX0KfQoKZnVuY3Rpb24gdHNfaW5pdFRy YW5zZm9ybVRhYmxlKCkgewoJaWYgKCB0eXBlb2Ygd2dTZXBhcmF0b3JUcmFuc2Zv cm1UYWJsZSA9PSAidW5kZWZpbmVkIgoJCQl8fCAoIHdnU2VwYXJhdG9yVHJhbnNm b3JtVGFibGVbMF0gPT0gJycgJiYgd2dEaWdpdFRyYW5zZm9ybVRhYmxlWzJdID09 ICcnICkgKQoJewoJCWRpZ2l0Q2xhc3MgPSAiWzAtOSwuXSI7CgkJdHNfbnVtYmVy X3RyYW5zZm9ybV90YWJsZSA9IGZhbHNlOwoJfSBlbHNlIHsKCQl0c19udW1iZXJf dHJhbnNmb3JtX3RhYmxlID0ge307CgkJLy8gVW5wYWNrIHRoZSB0cmFuc2Zvcm0g dGFibGUKCQkvLyBTZXBhcmF0b3JzCgkJYXNjaWkgPSB3Z1NlcGFyYXRvclRyYW5z Zm9ybVRhYmxlWzBdLnNwbGl0KCJcdCIpOwoJCWxvY2FsaXNlZCA9IHdnU2VwYXJh dG9yVHJhbnNmb3JtVGFibGVbMV0uc3BsaXQoIlx0Iik7CgkJZm9yICggdmFyIGkg PSAwOyBpIDwgYXNjaWkubGVuZ3RoOyBpKysgKSB7CgkJCXRzX251bWJlcl90cmFu c2Zvcm1fdGFibGVbbG9jYWxpc2VkW2ldXSA9IGFzY2lpW2ldOwoJCX0KCQkvLyBE aWdpdHMKCQlhc2NpaSA9IHdnRGlnaXRUcmFuc2Zvcm1UYWJsZVswXS5zcGxpdCgi XHQiKTsKCQlsb2NhbGlzZWQgPSB3Z0RpZ2l0VHJhbnNmb3JtVGFibGVbMV0uc3Bs aXQoIlx0Iik7CgkJZm9yICggdmFyIGkgPSAwOyBpIDwgYXNjaWkubGVuZ3RoOyBp KysgKSB7CgkJCXRzX251bWJlcl90cmFuc2Zvcm1fdGFibGVbbG9jYWxpc2VkW2ld XSA9IGFzY2lpW2ldOwoJCX0KCgkJLy8gQ29uc3RydWN0IHJlZ2V4IGZvciBudW1i ZXIgaWRlbnRpZmljYXRpb24KCQlkaWdpdHMgPSBbJzAnLCAnMScsICcyJywgJzMn LCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnLCcsICdcXC4nXTsKCQlt YXhEaWdpdExlbmd0aCA9IDE7CgkJZm9yICggdmFyIGRpZ2l0IGluIHRzX251bWJl cl90cmFuc2Zvcm1fdGFibGUgKSB7CgkJCS8vIEVzY2FwZSByZWdleCBtZXRhY2hh cmFjdGVycwoJCQlkaWdpdHMucHVzaCgKCQkJCWRpZ2l0LnJlcGxhY2UoIC9bXFxc XCRcKlwrXD9cLlwoXClcfFx7XH1cW1xdXC1dLywKCQkJCQlmdW5jdGlvbiggcyAp IHsgcmV0dXJuICdcXCcgKyBzOyB9ICkKCQkJKTsKCQkJaWYgKGRpZ2l0Lmxlbmd0 aCA+IG1heERpZ2l0TGVuZ3RoKSB7CgkJCQltYXhEaWdpdExlbmd0aCA9IGRpZ2l0 Lmxlbmd0aDsKCQkJfQoJCX0KCQlpZiAoIG1heERpZ2l0TGVuZ3RoID4gMSApIHsK CQkJZGlnaXRDbGFzcyA9ICdbJyArIGRpZ2l0cy5qb2luKCAnJywgZGlnaXRzICkg KyAnXSc7CgkJfSBlbHNlIHsKCQkJZGlnaXRDbGFzcyA9ICcoJyArIGRpZ2l0cy5q b2luKCAnfCcsIGRpZ2l0cyApICsgJyknOwoJCX0KCX0KCgkvLyBXZSBhbGxvdyBh IHRyYWlsaW5nIHBlcmNlbnQgc2lnbiwgd2hpY2ggd2UganVzdCBzdHJpcC4gIFRo aXMgd29ya3MgZmluZQoJLy8gaWYgcGVyY2VudHMgYW5kIHJlZ3VsYXIgbnVtYmVy cyBhcmVuJ3QgYmVpbmcgbWl4ZWQuCgl0c19udW1iZXJfcmVnZXggPSBuZXcgUmVn RXhwKAoJCSJeKCIgKwoJCQkiWystXT9bMC05XVswLTksXSooXFwuWzAtOSxdKik/ KEVbKy1dP1swLTldWzAtOSxdKik/IiArIC8vIEZvcnRyYW4tc3R5bGUgc2NpZW50 aWZpYwoJCQkifCIgKwoJCQkiWystXT8iICsgZGlnaXRDbGFzcyArICIrJT8iICsg Ly8gR2VuZXJpYyBsb2NhbGlzZWQKCQkiKSQiLCAiaSIKCSk7Cn0KCmZ1bmN0aW9u IHRzX3RvTG93ZXJDYXNlKCBzICkgewoJcmV0dXJuIHMudG9Mb3dlckNhc2UoKTsK fQoKZnVuY3Rpb24gdHNfZGF0ZVRvU29ydEtleShkYXRlKSB7CgkvLyB5Mmsgbm90 ZXM6IHR3byBkaWdpdCB5ZWFycyBsZXNzIHRoYW4gNTAgYXJlIHRyZWF0ZWQgYXMg MjBYWCwgZ3JlYXRlciB0aGFuIDUwIGFyZSB0cmVhdGVkIGFzIDE5WFgKCWlmIChk YXRlLmxlbmd0aCA9PSAxMSkgewoJCXN3aXRjaCAoZGF0ZS5zdWJzdHIoMywzKS50 b0xvd2VyQ2FzZSgpKSB7CgkJCWNhc2UgImphbiI6IHZhciBtb250aCA9ICIwMSI7 IGJyZWFrOwoJCQljYXNlICJmZWIiOiB2YXIgbW9udGggPSAiMDIiOyBicmVhazsK CQkJY2FzZSAibWFyIjogdmFyIG1vbnRoID0gIjAzIjsgYnJlYWs7CgkJCWNhc2Ug ImFwciI6IHZhciBtb250aCA9ICIwNCI7IGJyZWFrOwoJCQljYXNlICJtYXkiOiB2 YXIgbW9udGggPSAiMDUiOyBicmVhazsKCQkJY2FzZSAianVuIjogdmFyIG1vbnRo ID0gIjA2IjsgYnJlYWs7CgkJCWNhc2UgImp1bCI6IHZhciBtb250aCA9ICIwNyI7 IGJyZWFrOwoJCQljYXNlICJhdWciOiB2YXIgbW9udGggPSAiMDgiOyBicmVhazsK CQkJY2FzZSAic2VwIjogdmFyIG1vbnRoID0gIjA5IjsgYnJlYWs7CgkJCWNhc2Ug Im9jdCI6IHZhciBtb250aCA9ICIxMCI7IGJyZWFrOwoJCQljYXNlICJub3YiOiB2 YXIgbW9udGggPSAiMTEiOyBicmVhazsKCQkJY2FzZSAiZGVjIjogdmFyIG1vbnRo ID0gIjEyIjsgYnJlYWs7CgkJCS8vIGRlZmF1bHQ6IHZhciBtb250aCA9ICIwMCI7 CgkJfQoJCXJldHVybiBkYXRlLnN1YnN0cig3LDQpK21vbnRoK2RhdGUuc3Vic3Ry KDAsMik7Cgl9IGVsc2UgaWYgKGRhdGUubGVuZ3RoID09IDEwKSB7CgkJaWYgKHRz X2V1cm9wZWFuZGF0ZSA9PSBmYWxzZSkgewoJCQlyZXR1cm4gZGF0ZS5zdWJzdHIo Niw0KStkYXRlLnN1YnN0cigwLDIpK2RhdGUuc3Vic3RyKDMsMik7CgkJfSBlbHNl IHsKCQkJcmV0dXJuIGRhdGUuc3Vic3RyKDYsNCkrZGF0ZS5zdWJzdHIoMywyKStk YXRlLnN1YnN0cigwLDIpOwoJCX0KCX0gZWxzZSBpZiAoZGF0ZS5sZW5ndGggPT0g OCkgewoJCXlyID0gZGF0ZS5zdWJzdHIoNiwyKTsKCQlpZiAocGFyc2VJbnQoeXIp IDwgNTApIHsKCQkJeXIgPSAnMjAnK3lyOwoJCX0gZWxzZSB7CgkJCXlyID0gJzE5 Jyt5cjsKCQl9CgkJaWYgKHRzX2V1cm9wZWFuZGF0ZSA9PSB0cnVlKSB7CgkJCXJl dHVybiB5citkYXRlLnN1YnN0cigzLDIpK2RhdGUuc3Vic3RyKDAsMik7CgkJfSBl bHNlIHsKCQkJcmV0dXJuIHlyK2RhdGUuc3Vic3RyKDAsMikrZGF0ZS5zdWJzdHIo MywyKTsKCQl9Cgl9CglyZXR1cm4gIjAwMDAwMDAwIjsKfQoKZnVuY3Rpb24gdHNf cGFyc2VGbG9hdCggcyApIHsKCWlmICggIXMgKSB7CgkJcmV0dXJuIDA7Cgl9Cglp ZiAodHNfbnVtYmVyX3RyYW5zZm9ybV90YWJsZSAhPSBmYWxzZSkgewoJCXZhciBu ZXdOdW0gPSAnJywgYzsKCgkJZm9yICggdmFyIHAgPSAwOyBwIDwgcy5sZW5ndGg7 IHArKyApIHsKCQkJYyA9IHMuY2hhckF0KCBwICk7CgkJCWlmIChjIGluIHRzX251 bWJlcl90cmFuc2Zvcm1fdGFibGUpIHsKCQkJCW5ld051bSArPSB0c19udW1iZXJf dHJhbnNmb3JtX3RhYmxlW2NdOwoJCQl9IGVsc2UgewoJCQkJbmV3TnVtICs9IGM7 CgkJCX0KCQl9CgkJcyA9IG5ld051bTsKCX0KCgludW0gPSBwYXJzZUZsb2F0KHMu cmVwbGFjZSgvLC9nLCAiIikpOwoJcmV0dXJuIChpc05hTihudW0pID8gMCA6IG51 bSk7Cn0KCmZ1bmN0aW9uIHRzX2N1cnJlbmN5VG9Tb3J0S2V5KCBzICkgewoJcmV0 dXJuIHRzX3BhcnNlRmxvYXQocy5yZXBsYWNlKC9bXjAtOS4sXS9nLCcnKSk7Cn0K CmZ1bmN0aW9uIHRzX3NvcnRfZ2VuZXJpYyhhLCBiKSB7CglyZXR1cm4gYVsxXSA8 IGJbMV0gPyAtMSA6IGFbMV0gPiBiWzFdID8gMSA6IGFbMl0gLSBiWzJdOwp9Cgpm dW5jdGlvbiB0c19hbHRlcm5hdGUodGFibGUpIHsKCS8vIFRha2Ugb2JqZWN0IHRh YmxlIGFuZCBnZXQgYWxsIGl0J3MgdGJvZGllcy4KCXZhciB0YWJsZUJvZGllcyA9 IHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpOwoJLy8gTG9vcCB0 aHJvdWdoIHRoZXNlIHRib2RpZXMKCWZvciAodmFyIGkgPSAwOyBpIDwgdGFibGVC b2RpZXMubGVuZ3RoOyBpKyspIHsKCQkvLyBUYWtlIHRoZSB0Ym9keSwgYW5kIGdl dCBhbGwgaXQncyByb3dzCgkJdmFyIHRhYmxlUm93cyA9IHRhYmxlQm9kaWVzW2ld LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwoJCS8vIExvb3AgdGhyb3VnaCB0 aGVzZSByb3dzCgkJLy8gU3RhcnQgYXQgMSBiZWNhdXNlIHdlIHdhbnQgdG8gbGVh dmUgdGhlIGhlYWRpbmcgcm93IHVudG91Y2hlZAoJCWZvciAodmFyIGogPSAwOyBq IDwgdGFibGVSb3dzLmxlbmd0aDsgaisrKSB7CgkJCS8vIENoZWNrIGlmIGogaXMg ZXZlbiwgYW5kIGFwcGx5IGNsYXNzZXMgZm9yIGJvdGggcG9zc2libGUgcmVzdWx0 cwoJCQl2YXIgb2xkQ2xhc3NlcyA9IHRhYmxlUm93c1tqXS5jbGFzc05hbWUuc3Bs aXQoIiAiKTsKCQkJdmFyIG5ld0NsYXNzTmFtZSA9ICIiOwoJCQlmb3IgKHZhciBr ID0gMDsgayA8IG9sZENsYXNzZXMubGVuZ3RoOyBrKyspIHsKCQkJCWlmIChvbGRD bGFzc2VzW2tdICE9ICIiICYmIG9sZENsYXNzZXNba10gIT0gImV2ZW4iICYmIG9s ZENsYXNzZXNba10gIT0gIm9kZCIpCgkJCQkJbmV3Q2xhc3NOYW1lICs9IG9sZENs YXNzZXNba10gKyAiICI7CgkJCX0KCQkJdGFibGVSb3dzW2pdLmNsYXNzTmFtZSA9 IG5ld0NsYXNzTmFtZSArIChqICUgMiA9PSAwID8gImV2ZW4iIDogIm9kZCIpOwoJ CX0KCX0KfQoKLyoKICogRW5kIG9mIHRhYmxlIHNvcnRpbmcgY29kZQogKi8KCgov KioKICogQWRkIGEgY3V0ZSBsaXR0bGUgYm94IGF0IHRoZSB0b3Agb2YgdGhlIHNj cmVlbiB0byBpbmZvcm0gdGhlIHVzZXIgb2YKICogc29tZXRoaW5nLCByZXBsYWNp bmcgYW55IHByZWV4aXN0aW5nIG1lc3NhZ2UuCiAqCiAqIEBwYXJhbSBTdHJpbmcg LW9yLSBEb20gT2JqZWN0IG1lc3NhZ2UgSFRNTCB0byBiZSBwdXQgaW5zaWRlIHRo ZSByaWdodCBkaXYKICogQHBhcmFtIFN0cmluZyBjbGFzc05hbWUgICBVc2VkIGlu IGFkZGluZyBhIGNsYXNzOyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciBlYWNoCiAq ICAgY2FsbCB0byBhbGxvdyBDU1MvSlMgdG8gaGlkZSBkaWZmZXJlbnQgYm94ZXMu ICBudWxsID0gbm8gY2xhc3MgdXNlZC4KICogQHJldHVybiBCb29sZWFuICAgICAg IFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZQogKi8KZnVuY3Rpb24g anNNc2coIG1lc3NhZ2UsIGNsYXNzTmFtZSApIHsKCWlmICggIWRvY3VtZW50Lmdl dEVsZW1lbnRCeUlkICkgewoJCXJldHVybiBmYWxzZTsKCX0KCS8vIFdlIHNwZWNp YWwtY2FzZSBza2luIHN0cnVjdHVyZXMgcHJvdmlkZWQgYnkgdGhlIHNvZnR3YXJl LiAgU2tpbnMgdGhhdAoJLy8gY2hvb3NlIHRvIGFiYW5kb24gb3Igc2lnbmlmaWNh bnRseSBtb2RpZnkgb3VyIGZvcm1hdHRpbmcgY2FuIGp1c3QgZGVmaW5lCgkvLyBh biBtdy1qcy1tZXNzYWdlIGRpdiB0byBzdGFydCB3aXRoLgoJdmFyIG1lc3NhZ2VE aXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ213LWpzLW1lc3NhZ2UnICk7 CglpZiAoICFtZXNzYWdlRGl2ICkgewoJCW1lc3NhZ2VEaXYgPSBkb2N1bWVudC5j cmVhdGVFbGVtZW50KCAnZGl2JyApOwoJCWlmICggZG9jdW1lbnQuZ2V0RWxlbWVu dEJ5SWQoICdjb2x1bW4tY29udGVudCcgKQoJCSYmIGRvY3VtZW50LmdldEVsZW1l bnRCeUlkKCAnY29udGVudCcgKSApIHsKCQkJLy8gTW9ub0Jvb2ssIHByZXN1bWFi bHkKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoICdjb250ZW50JyApLmluc2Vy dEJlZm9yZSgKCQkJCW1lc3NhZ2VEaXYsCgkJCQlkb2N1bWVudC5nZXRFbGVtZW50 QnlJZCggJ2NvbnRlbnQnICkuZmlyc3RDaGlsZAoJCQkpOwoJCX0gZWxzZSBpZiAo IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250ZW50JykKCQkmJiBkb2N1bWVu dC5nZXRFbGVtZW50QnlJZCggJ2FydGljbGUnICkgKSB7CgkJCS8vIE5vbi1Nb25v Ym9vayBidXQgc3RpbGwgcmVjb2duaXphYmxlIChvbGQtc3R5bGUpCgkJCWRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCAnYXJ0aWNsZScpLmluc2VydEJlZm9yZSgKCQkJ CW1lc3NhZ2VEaXYsCgkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggJ2FydGlj bGUnICkuZmlyc3RDaGlsZAoJCQkpOwoJCX0gZWxzZSB7CgkJCXJldHVybiBmYWxz ZTsKCQl9Cgl9CgoJbWVzc2FnZURpdi5zZXRBdHRyaWJ1dGUoICdpZCcsICdtdy1q cy1tZXNzYWdlJyApOwoJbWVzc2FnZURpdi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2Nr JzsKCWlmKCBjbGFzc05hbWUgKSB7CgkJbWVzc2FnZURpdi5zZXRBdHRyaWJ1dGUo ICdjbGFzcycsICdtdy1qcy1tZXNzYWdlLScrY2xhc3NOYW1lICk7Cgl9CgoJaWYg KHR5cGVvZiBtZXNzYWdlID09PSAnb2JqZWN0JykgewoJCXdoaWxlIChtZXNzYWdl RGl2Lmhhc0NoaWxkTm9kZXMoKSkgLy8gUmVtb3ZlIG9sZCBjb250ZW50CgkJCW1l c3NhZ2VEaXYucmVtb3ZlQ2hpbGQobWVzc2FnZURpdi5maXJzdENoaWxkKTsKCQlt ZXNzYWdlRGl2LmFwcGVuZENoaWxkIChtZXNzYWdlKTsgLy8gQXBwZW5kIG5ldyBj b250ZW50Cgl9CgllbHNlIHsKCQltZXNzYWdlRGl2LmlubmVySFRNTCA9IG1lc3Nh Z2U7Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKLyoqCiAqIEluamVjdCBhIGN1dGUgbGl0 dGxlIHByb2dyZXNzIHNwaW5uZXIgYWZ0ZXIgdGhlIHNwZWNpZmllZCBlbGVtZW50 CiAqCiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gaW5qZWN0IGFmdGVyCiAq IEBwYXJhbSBpZCBJZGVudGlmaWVyIHN0cmluZyAoZm9yIHVzZSB3aXRoIHJlbW92 ZVNwaW5uZXIoKSwgYmVsb3cpCiAqLwpmdW5jdGlvbiBpbmplY3RTcGlubmVyKCBl bGVtZW50LCBpZCApIHsKCXZhciBzcGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCggImltZyIgKTsKCXNwaW5uZXIuaWQgPSAibXctc3Bpbm5lci0iICsgaWQ7 CglzcGlubmVyLnNyYyA9IHN0eWxlcGF0aCArICIvY29tbW9uL2ltYWdlcy9zcGlu bmVyLmdpZiI7CglzcGlubmVyLmFsdCA9IHNwaW5uZXIudGl0bGUgPSAiLi4uIjsK CWlmKCBlbGVtZW50Lm5leHRTaWJsaW5nICkgewoJCWVsZW1lbnQucGFyZW50Tm9k ZS5pbnNlcnRCZWZvcmUoIHNwaW5uZXIsIGVsZW1lbnQubmV4dFNpYmxpbmcgKTsK CX0gZWxzZSB7CgkJZWxlbWVudC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKCBzcGlu bmVyICk7Cgl9Cn0KCi8qKgogKiBSZW1vdmUgYSBwcm9ncmVzcyBzcGlubmVyIGFk ZGVkIHdpdGggaW5qZWN0U3Bpbm5lcigpCiAqCiAqIEBwYXJhbSBpZCBJZGVudGlm aWVyIHN0cmluZwogKi8KZnVuY3Rpb24gcmVtb3ZlU3Bpbm5lciggaWQgKSB7Cgl2 YXIgc3Bpbm5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAibXctc3Bpbm5l ci0iICsgaWQgKTsKCWlmKCBzcGlubmVyICkgewoJCXNwaW5uZXIucGFyZW50Tm9k ZS5yZW1vdmVDaGlsZCggc3Bpbm5lciApOwoJfQp9CgpmdW5jdGlvbiBydW5Pbmxv YWRIb29rKCkgewoJLy8gZG9uJ3QgcnVuIGFueXRoaW5nIGJlbG93IHRoaXMgZm9y IG5vbi1kb20gYnJvd3NlcnMKCWlmIChkb25lT25sb2FkSG9vayB8fCAhKGRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkICYmIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO YW1lKSkgewoJCXJldHVybjsKCX0KCgkvLyBzZXQgdGhpcyBiZWZvcmUgcnVubmlu ZyBhbnkgaG9va3MsIHNpbmNlIGFueSBlcnJvcnMgYmVsb3cKCS8vIG1pZ2h0IGNh dXNlIHRoZSBmdW5jdGlvbiB0byB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkKCWRvbmVP bmxvYWRIb29rID0gdHJ1ZTsKCgl1cGRhdGVUb29sdGlwQWNjZXNzS2V5cyggbnVs bCApOwoJYWtleXR0KCBudWxsICk7CglzZXR1cENoZWNrYm94U2hpZnRDbGljaygp OwoJc29ydGFibGVzX2luaXQoKTsKCgkvLyBSdW4gYW55IGFkZGVkLW9uIGZ1bmN0 aW9ucwoJZm9yICh2YXIgaSA9IDA7IGkgPCBvbmxvYWRGdW5jdHMubGVuZ3RoOyBp KyspIHsKCQlvbmxvYWRGdW5jdHNbaV0oKTsKCX0KfQoKLyoqCiAqIEFkZCBhbiBl dmVudCBoYW5kbGVyIHRvIGFuIGVsZW1lbnQKICoKICogQHBhcmFtIEVsZW1lbnQg ZWxlbWVudCBFbGVtZW50IHRvIGFkZCBoYW5kbGVyIHRvCiAqIEBwYXJhbSBTdHJp bmcgYXR0YWNoIEV2ZW50IHRvIGF0dGFjaCB0bwogKiBAcGFyYW0gY2FsbGFibGUg aGFuZGxlciBFdmVudCBoYW5kbGVyIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBhZGRI YW5kbGVyKCBlbGVtZW50LCBhdHRhY2gsIGhhbmRsZXIgKSB7CglpZiggd2luZG93 LmFkZEV2ZW50TGlzdGVuZXIgKSB7CgkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVy KCBhdHRhY2gsIGhhbmRsZXIsIGZhbHNlICk7Cgl9IGVsc2UgaWYoIHdpbmRvdy5h dHRhY2hFdmVudCApIHsKCQllbGVtZW50LmF0dGFjaEV2ZW50KCAnb24nICsgYXR0 YWNoLCBoYW5kbGVyICk7Cgl9Cn0KCi8qKgogKiBBZGQgYSBjbGljayBldmVudCBo YW5kbGVyIHRvIGFuIGVsZW1lbnQKICoKICogQHBhcmFtIEVsZW1lbnQgZWxlbWVu dCBFbGVtZW50IHRvIGFkZCBoYW5kbGVyIHRvCiAqIEBwYXJhbSBjYWxsYWJsZSBo YW5kbGVyIEV2ZW50IGhhbmRsZXIgY2FsbGJhY2sKICovCmZ1bmN0aW9uIGFkZENs aWNrSGFuZGxlciggZWxlbWVudCwgaGFuZGxlciApIHsKCWFkZEhhbmRsZXIoIGVs ZW1lbnQsICdjbGljaycsIGhhbmRsZXIgKTsKfQoKLyoqCiAqIFJlbW92ZXMgYW4g ZXZlbnQgaGFuZGxlciBmcm9tIGFuIGVsZW1lbnQKICoKICogQHBhcmFtIEVsZW1l bnQgZWxlbWVudCBFbGVtZW50IHRvIHJlbW92ZSBoYW5kbGVyIGZyb20KICogQHBh cmFtIFN0cmluZyByZW1vdmUgRXZlbnQgdG8gcmVtb3ZlCiAqIEBwYXJhbSBjYWxs YWJsZSBoYW5kbGVyIEV2ZW50IGhhbmRsZXIgY2FsbGJhY2sgdG8gcmVtb3ZlCiAq LwpmdW5jdGlvbiByZW1vdmVIYW5kbGVyKCBlbGVtZW50LCByZW1vdmUsIGhhbmRs ZXIgKSB7CglpZiggd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7CgkJZWxl bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCByZW1vdmUsIGhhbmRsZXIsIGZhbHNl ICk7Cgl9IGVsc2UgaWYoIHdpbmRvdy5kZXRhY2hFdmVudCApIHsKCQllbGVtZW50 LmRldGFjaEV2ZW50KCAnb24nICsgcmVtb3ZlLCBoYW5kbGVyICk7Cgl9Cn0KLy9u b3RlOiBhbGwgc2tpbnMgc2hvdWxkIGNhbGwgcnVuT25sb2FkSG9vaygpIGF0IHRo ZSBlbmQgb2YgaHRtbCBvdXRwdXQsCi8vICAgICAgc28gdGhlIGJlbG93IHNob3Vs ZCBiZSByZWR1bmRhbnQuIEl0J3MgdGhlcmUganVzdCBpbiBjYXNlLgpob29rRXZl bnQoImxvYWQiLCBydW5PbmxvYWRIb29rKTsK ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=ajax.js Content-Type: application/x-javascript; charset=utf-8; name=ajax.js Content-Location: http://es.wikipedia.org/skins-1.5/common/ajax.js?233zz2 Content-Transfer-Encoding: Base64 Ly8gcmVtb3RlIHNjcmlwdGluZyBsaWJyYXJ5Ci8vIChjKSBjb3B5cmlnaHQgMjAw NSBtb2Rlcm5tZXRob2QsIGluYwp2YXIgc2FqYXhfZGVidWdfbW9kZSA9IGZhbHNl Owp2YXIgc2FqYXhfcmVxdWVzdF90eXBlID0gIkdFVCI7CgovKioKKiBpZiBzYWph eF9kZWJ1Z19tb2RlIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24gb3V0cHV0cyBnaXZl biB0aGUgbWVzc2FnZSBpbnRvIAoqIHRoZSBlbGVtZW50IHdpdGggaWQgPSBzYWph eF9kZWJ1ZzsgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZG9jdW1l bnQsIAoqIGl0IGlzIGluamVjdGVkLgoqLwpmdW5jdGlvbiBzYWpheF9kZWJ1Zyh0 ZXh0KSB7CglpZiAoIXNhamF4X2RlYnVnX21vZGUpIHJldHVybiBmYWxzZTsKCgl2 YXIgZT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhamF4X2RlYnVnJyk7CgoJ aWYgKCFlKSB7CgkJZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwoJCWUu Y2xhc3NOYW1lPSAnc2FqYXhfZGVidWcnOwoJCWUuaWQ9ICdzYWpheF9kZWJ1Zyc7 CgoJCXZhciBiPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIp WzBdOwoKCQlpZiAoYi5maXJzdENoaWxkKSBiLmluc2VydEJlZm9yZShlLCBiLmZp cnN0Q2hpbGQpOwoJCWVsc2UgYi5hcHBlbmRDaGlsZChlKTsKCX0KCgl2YXIgbT0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgltLmFwcGVuZENoaWxkKCBk b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggdGV4dCApICk7CgoJZS5hcHBlbmRDaGls ZCggbSApOwoKCXJldHVybiB0cnVlOwp9CgovKioKKiBjb21wYXRpYmlsaXR5IHdy YXBwZXIgZm9yIGNyZWF0aW5nIGEgbmV3IFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4K Ki8KZnVuY3Rpb24gc2FqYXhfaW5pdF9vYmplY3QoKSB7CglzYWpheF9kZWJ1Zygi c2FqYXhfaW5pdF9vYmplY3QoKSBjYWxsZWQuLiIpCgl2YXIgQTsKCXRyeSB7CgkJ Ly8gVHJ5IHRoZSBuZXcgc3R5bGUgYmVmb3JlIEFjdGl2ZVggc28gd2UgZG9uJ3QK CQkvLyB1bm5lY2Vzc2FyaWx5IHRyaWdnZXIgd2FybmluZ3MgaW4gSUUgNyB3aGVu CgkJLy8gc2V0IHRvIHByb21wdCBhYm91dCBBY3RpdmVYIHVzYWdlCgkJQSA9IG5l dyBYTUxIdHRwUmVxdWVzdCgpOwoJfSBjYXRjaCAoZSkgewoJCXRyeSB7CgkJCUE9 bmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CgkJfSBjYXRjaCAo ZSkgewoJCQl0cnkgewoJCQkJQT1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0 LlhNTEhUVFAiKTsKCQkJfSBjYXRjaCAob2MpIHsKCQkJCUE9bnVsbDsKCQkJfQoJ CX0KCX0KCWlmICghQSkKCQlzYWpheF9kZWJ1ZygiQ291bGQgbm90IGNyZWF0ZSBj b25uZWN0aW9uIG9iamVjdC4iKTsKCglyZXR1cm4gQTsKfQoKLyoqCiogUGVyZm9y bSBhbiBhamF4IGNhbGwgdG8gbWVkaWF3aWtpLiBDYWxscyBhcmUgaGFuZGVsZWQg YnkgQWpheERpc3BhdGNoZXIucGhwCiogICBmdW5jX25hbWUgLSB0aGUgbmFtZSBv ZiB0aGUgZnVuY3Rpb24gdG8gY2FsbC4gTXVzdCBiZSByZWdpc3RlcmVkIGluICR3 Z0FqYXhFeHBvcnRMaXN0CiogICBhcmdzIC0gYW4gYXJyYXkgb2YgYXJndW1lbnRz IHRvIHRoYXQgZnVuY3Rpb24KKiAgIHRhcmdldCAtIHRoZSB0YXJnZXQgdGhhdCB3 aWxsIGhhbmRsZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsLiBJZiB0aGlzIGlzIGEg ZnVuY3Rpb24sCiogICAgICAgICAgICBpZiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRo ZSBYTUxIdHRwUmVxdWVzdCBhcyBhIHBhcmFtZXRlcjsgaWYgaXQncyBhbiBpbnB1 dAoqICAgICAgICAgICAgZWxlbWVudCwgaXRzIHZhbHVlIHdpbGwgYmUgc2V0IHRv IHRoZSByZXN1bHRUZXh0OyBpZiBpdCdzIGFub3RoZXIgdHlwZSBvZgoqICAgICAg ICAgICAgZWxlbWVudCwgaXRzIGlubmVySFRNTCB3aWxsIGJlIHNldCB0byB0aGUg cmVzdWx0VGV4dC4KKgoqIEV4YW1wbGU6CiogICAgc2FqYXhfZG9fY2FsbCgnZG9G b28nLCBbMSwgMiwgM10sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaG93Rm9v IikpOwoqCiogVGhpcyB3aWxsIGNhbGwgdGhlIGRvRm9vIGZ1bmN0aW9uIHZpYSBN ZWRpYVdpa2kncyBBamF4RGlzcGF0Y2hlciwgd2l0aAoqICgxLCAyLCAzKSBhcyB0 aGUgcGFyYW1ldGVyIGxpc3QsIGFuZCB3aWxsIHNob3cgdGhlIHJlc3VsdCBpbiB0 aGUgZWxlbWVudAoqIHdpdGggaWQgPSBzaG93Rm9vCiovCmZ1bmN0aW9uIHNhamF4 X2RvX2NhbGwoZnVuY19uYW1lLCBhcmdzLCB0YXJnZXQpIHsKCXZhciBpLCB4LCBu OwoJdmFyIHVyaTsKCXZhciBwb3N0X2RhdGE7Cgl1cmkgPSB3Z1NlcnZlciArCgkJ KCh3Z1NjcmlwdCA9PSBudWxsKSA/ICh3Z1NjcmlwdFBhdGggKyAiL2luZGV4LnBo cCIpIDogd2dTY3JpcHQpICsKCQkiP2FjdGlvbj1hamF4IjsKCWlmIChzYWpheF9y ZXF1ZXN0X3R5cGUgPT0gIkdFVCIpIHsKCQlpZiAodXJpLmluZGV4T2YoIj8iKSA9 PSAtMSkKCQkJdXJpID0gdXJpICsgIj9ycz0iICsgZW5jb2RlVVJJQ29tcG9uZW50 KGZ1bmNfbmFtZSk7CgkJZWxzZQoJCQl1cmkgPSB1cmkgKyAiJnJzPSIgKyBlbmNv ZGVVUklDb21wb25lbnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJn cy5sZW5ndGg7IGkrKykKCQkJdXJpID0gdXJpICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJCS8vdXJpID0gdXJpICsgIiZyc3Ju ZD0iICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7CgkJcG9zdF9kYXRhID0gbnVsbDsK CX0gZWxzZSB7CgkJcG9zdF9kYXRhID0gInJzPSIgKyBlbmNvZGVVUklDb21wb25l bnQoZnVuY19uYW1lKTsKCQlmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkr KykKCQkJcG9zdF9kYXRhID0gcG9zdF9kYXRhICsgIiZyc2FyZ3NbXT0iICsgZW5j b2RlVVJJQ29tcG9uZW50KGFyZ3NbaV0pOwoJfQoJeCA9IHNhamF4X2luaXRfb2Jq ZWN0KCk7CglpZiAoIXgpIHsKCQlhbGVydCgiQUpBWCBub3Qgc3VwcG9ydGVkIik7 CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXRyeSB7CgkJeC5vcGVuKHNhamF4X3JlcXVl c3RfdHlwZSwgdXJpLCB0cnVlKTsKCX0gY2F0Y2ggKGUpIHsKCQlpZiAod2luZG93 LmxvY2F0aW9uLmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCWFsZXJ0KCJZ b3VyIGJyb3dzZXIgYmxvY2tzIFhNTEh0dHBSZXF1ZXN0IHRvICdsb2NhbGhvc3Qn LCB0cnkgdXNpbmcgYSByZWFsIGhvc3RuYW1lIGZvciBkZXZlbG9wbWVudC90ZXN0 aW5nLiIpOwoJCX0KCQl0aHJvdyBlOwoJfQoJaWYgKHNhamF4X3JlcXVlc3RfdHlw ZSA9PSAiUE9TVCIpIHsKCQl4LnNldFJlcXVlc3RIZWFkZXIoIk1ldGhvZCIsICJQ T1NUICIgKyB1cmkgKyAiIEhUVFAvMS4xIik7CgkJeC5zZXRSZXF1ZXN0SGVhZGVy KCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv ZGVkIik7Cgl9Cgl4LnNldFJlcXVlc3RIZWFkZXIoIlByYWdtYSIsICJjYWNoZT15 ZXMiKTsKCXguc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby10 cmFuc2Zvcm0iKTsKCXgub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7 CgkJaWYgKHgucmVhZHlTdGF0ZSAhPSA0KQoJCQlyZXR1cm47CgoJCXNhamF4X2Rl YnVnKCJyZWNlaXZlZCAoIiArIHguc3RhdHVzICsgIiAiICsgeC5zdGF0dXNUZXh0 ICsgIikgIiArIHgucmVzcG9uc2VUZXh0KTsKCgkJLy9pZiAoeC5zdGF0dXMgIT0g MjAwKQoJCS8vCWFsZXJ0KCJFcnJvcjogIiArIHguc3RhdHVzICsgIiAiICsgeC5z dGF0dXNUZXh0ICsgIjogIiArIHgucmVzcG9uc2VUZXh0KTsKCQkvL2Vsc2UKCgkJ aWYgKCB0eXBlb2YoIHRhcmdldCApID09ICdmdW5jdGlvbicgKSB7CgkJCXRhcmdl dCggeCApOwoJCX0KCQllbHNlIGlmICggdHlwZW9mKCB0YXJnZXQgKSA9PSAnb2Jq ZWN0JyApIHsKCQkJaWYgKCB0YXJnZXQudGFnTmFtZSA9PSAnSU5QVVQnICkgewoJ CQkJaWYgKHguc3RhdHVzID09IDIwMCkgdGFyZ2V0LnZhbHVlPSB4LnJlc3BvbnNl VGV4dDsKCQkJCS8vZWxzZSBhbGVydCgiRXJyb3I6ICIgKyB4LnN0YXR1cyArICIg IiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIpIik7 CgkJCX0KCQkJZWxzZSB7CgkJCQlpZiAoeC5zdGF0dXMgPT0gMjAwKSB0YXJnZXQu aW5uZXJIVE1MID0geC5yZXNwb25zZVRleHQ7CgkJCQllbHNlIHRhcmdldC5pbm5l ckhUTUw9ICI8ZGl2IGNsYXNzPSdlcnJvcic+RXJyb3I6ICIgKyB4LnN0YXR1cyAr ICIgIiArIHguc3RhdHVzVGV4dCArICIgKCIgKyB4LnJlc3BvbnNlVGV4dCArICIp PC9kaXY+IjsKCQkJfQoJCX0KCQllbHNlIHsKCQkJYWxlcnQoImJhZCB0YXJnZXQg Zm9yIHNhamF4X2RvX2NhbGw6IG5vdCBhIGZ1bmN0aW9uIG9yIG9iamVjdDogIiAr IHRhcmdldCk7CgkJfQoKCQlyZXR1cm47Cgl9CgoJc2FqYXhfZGVidWcoZnVuY19u YW1lICsgIiB1cmkgPSAiICsgdXJpICsgIiAvIHBvc3QgPSAiICsgcG9zdF9kYXRh KTsKCXguc2VuZChwb3N0X2RhdGEpOwoJc2FqYXhfZGVidWcoZnVuY19uYW1lICsg IiB3YWl0aW5nLi4iKTsKCWRlbGV0ZSB4OwoKCXJldHVybiB0cnVlOwp9CgovKioK ICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgdGhlIGJyb3dzZXIgc3VwcG9ydHMg WE1MSHR0cFJlcXVlc3QKICovCmZ1bmN0aW9uIHdmU3VwcG9ydHNBamF4KCkgewoJ dmFyIHJlcXVlc3QgPSBzYWpheF9pbml0X29iamVjdCgpOwoJdmFyIHN1cHBvcnRz QWpheCA9IHJlcXVlc3QgPyB0cnVlIDogZmFsc2U7CglkZWxldGUgcmVxdWVzdDsK CXJldHVybiBzdXBwb3J0c0FqYXg7Cn0KCg== ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=mwsuggest.js Content-Type: application/x-javascript; charset=utf-8; name=mwsuggest.js Content-Location: http://es.wikipedia.org/skins-1.5/common/mwsuggest.js?233zz2 Content-Transfer-Encoding: Base64 LyoKICogT3BlblNlYXJjaCBhamF4IHN1Z2dlc3Rpb24gZW5naW5lIGZvciBNZWRp YVdpa2kKICoKICogdXNlcyBjb3JlIE1lZGlhV2lraSBvcGVuIHNlYXJjaCBzdXBw b3J0IHRvIGZldGNoIHN1Z2dlc3Rpb25zCiAqIGFuZCBzaG93IHRoZW0gYmVsb3cg c2VhcmNoIGJveGVzIGFuZCBvdGhlciBpbnB1dHMKICoKICogYnkgUm9iZXJ0IFN0 b2puaWMgKEFwcmlsIDIwMDgpCiAqLwoKLy8gc2VhcmNoX2JveF9pZCAtPiBSZXN1 bHRzIG9iamVjdAp2YXIgb3NfbWFwID0ge307Ci8vIGNhY2hlZCBkYXRhLCB1cmwg LT4ganNvbl90ZXh0CnZhciBvc19jYWNoZSA9IHt9OwovLyBnbG9iYWwgdmFyaWFi bGVzIGZvciBzdWdnZXN0X2tleXByZXNzCnZhciBvc19jdXJfa2V5cHJlc3NlZCA9 IDA7CnZhciBvc19rZXlwcmVzc2VkX2NvdW50ID0gMDsKLy8gdHlwZTogVGltZXIK dmFyIG9zX3RpbWVyID0gbnVsbDsKLy8gdGllIG1vdXNlZG93bi91cCBldmVudHMK dmFyIG9zX21vdXNlX3ByZXNzZWQgPSBmYWxzZTsKdmFyIG9zX21vdXNlX251bSA9 IC0xOwovLyBpZiB0cnVlLCB0aGUgbGFzdCBjaGFuZ2Ugd2FzIG1hZGUgYnkgbW91 c2UgKGFuZCBub3Qga2V5Ym9hcmQpCnZhciBvc19tb3VzZV9tb3ZlZCA9IGZhbHNl OwovLyBkZWxheSBiZXR3ZWVuIGtleXByZXNzIGFuZCBzdWdnZXN0aW9uIChpbiBt cykKdmFyIG9zX3NlYXJjaF90aW1lb3V0ID0gMjUwOwovLyB0aGVzZSBwYWlycyBv ZiBpbnB1dHMvZm9ybXMgd2lsbCBiZSBhdXRvbG9hZGVkIGF0IHN0YXJ0dXAKdmFy IG9zX2F1dG9sb2FkX2lucHV0cyA9IG5ldyBBcnJheSgnc2VhcmNoSW5wdXQnLCAn c2VhcmNoSW5wdXQyJywgJ3Bvd2VyU2VhcmNoVGV4dCcsICdzZWFyY2hUZXh0Jyk7 CnZhciBvc19hdXRvbG9hZF9mb3JtcyA9IG5ldyBBcnJheSgnc2VhcmNoZm9ybScs ICdzZWFyY2hmb3JtMicsICdwb3dlcnNlYXJjaCcsICdzZWFyY2gnICk7Ci8vIGlm IHdlIHN0b3BwZWQgdGhlIHNlcnZpY2UKdmFyIG9zX2lzX3N0b3BwZWQgPSBmYWxz ZTsKLy8gbWF4IGxpbmVzIHRvIHNob3cgaW4gc3VnZ2VzdCB0YWJsZQp2YXIgb3Nf bWF4X2xpbmVzX3Blcl9zdWdnZXN0ID0gNzsKLy8gbnVtYmVyIG9mIHN0ZXBzIHRv IGFuaW1hdGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0 aAp2YXIgb3NfYW5pbWF0aW9uX3N0ZXBzID0gNjsKLy8gbnVtIG9mIHBpeGVscyBv ZiBzbWFsbGVzdCBzdGVwCnZhciBvc19hbmltYXRpb25fbWluX3N0ZXAgPSAyOwov LyBkZWxheSBiZXR3ZWVuIHN0ZXBzIChpbiBtcykKdmFyIG9zX2FuaW1hdGlvbl9k ZWxheSA9IDMwOwovLyBtYXggd2lkdGggb2YgY29udGFpbmVyIGluIHBlcmNlbnQg b2Ygbm9ybWFsIHNpemUgKDEgPT0gMTAwJSkKdmFyIG9zX2NvbnRhaW5lcl9tYXhf d2lkdGggPSAyOwovLyBjdXJyZW50bHkgYWN0aXZlIGFuaW1hdGlvbiB0aW1lcgp2 YXIgb3NfYW5pbWF0aW9uX3RpbWVyID0gbnVsbDsKCi8qKiBUaW1lb3V0IHRpbWVy IGNsYXNzIHRoYXQgd2lsbCBmZXRjaCB0aGUgcmVzdWx0cyAqLwpmdW5jdGlvbiBv c19UaW1lcihpZCxyLHF1ZXJ5KXsKCXRoaXMuaWQgPSBpZDsKCXRoaXMuciA9IHI7 Cgl0aGlzLnF1ZXJ5ID0gcXVlcnk7Cn0KCi8qKiBUaW1lciB1c2VyIHRvIGFuaW1h dGUgZXhwYW5zaW9uL2NvbnRyYWN0aW9uIG9mIGNvbnRhaW5lciB3aWR0aCAqLwpm dW5jdGlvbiBvc19BbmltYXRpb25UaW1lcihyLCB0YXJnZXQpewoJdGhpcy5yID0g cjsKCXZhciBjdXJyZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5jb250 YWluZXIpLm9mZnNldFdpZHRoOwoJdGhpcy5pbmMgPSBNYXRoLnJvdW5kKCh0YXJn ZXQtY3VycmVudCkgLyBvc19hbmltYXRpb25fc3RlcHMpOwoJaWYodGhpcy5pbmMg PCBvc19hbmltYXRpb25fbWluX3N0ZXAgJiYgdGhpcy5pbmMgPj0wKQoJCXRoaXMu aW5jID0gb3NfYW5pbWF0aW9uX21pbl9zdGVwOyAvLyBtaW5pbWFsIGFuaW1hdGlv biBzdGVwCglpZih0aGlzLmluYyA+IC1vc19hbmltYXRpb25fbWluX3N0ZXAgJiYg dGhpcy5pbmMgPDApCgkJdGhpcy5pbmMgPSAtb3NfYW5pbWF0aW9uX21pbl9zdGVw OwoJdGhpcy50YXJnZXQgPSB0YXJnZXQ7Cn0KCi8qKiBQcm9wZXJ0eSBjbGFzcyBm b3Igc2luZ2xlIHNlYXJjaCBib3ggKi8KZnVuY3Rpb24gb3NfUmVzdWx0cyhuYW1l LCBmb3JtbmFtZSl7Cgl0aGlzLnNlYXJjaGZvcm0gPSBmb3JtbmFtZTsgLy8gaWQg b2YgdGhlIHNlYXJjaGZvcm0KCXRoaXMuc2VhcmNoYm94ID0gbmFtZTsgLy8gaWQg b2YgdGhlIHNlYXJjaGJveAoJdGhpcy5jb250YWluZXIgPSBuYW1lKyJTdWdnZXN0 IjsgLy8gZGl2IHRoYXQgaG9sZHMgcmVzdWx0cwoJdGhpcy5yZXN1bHRUYWJsZSA9 IG5hbWUrIlJlc3VsdCI7IC8vIGlkIGJhc2UgZm9yIHRoZSByZXN1bHQgdGFibGUg KCtudW0gPSB0YWJsZSByb3cpCgl0aGlzLnJlc3VsdFRleHQgPSBuYW1lKyJSZXN1 bHRUZXh0IjsgLy8gaWQgYmFzZSBmb3IgdGhlIHNwYW5zIHdpdGhpbiByZXN1bHQg dGFibGVzICgrbnVtKQoJdGhpcy50b2dnbGUgPSBuYW1lKyJUb2dnbGUiOyAvLyBk aXYgdGhhdCBoYXMgdGhlIHRvZ2dsZSAoZW5hYmxlL2Rpc2FibGUpIGxpbmsKCXRo aXMucXVlcnkgPSBudWxsOyAvLyBsYXN0IHByb2Nlc3NlZCBxdWVyeQoJdGhpcy5y ZXN1bHRzID0gbnVsbDsgIC8vIHBhcnNlZCB0aXRsZXMKCXRoaXMucmVzdWx0Q291 bnQgPSAwOyAvLyBudW1iZXIgb2YgcmVzdWx0cwoJdGhpcy5vcmlnaW5hbCA9IG51 bGw7IC8vIHF1ZXJ5IHRoYXQgdXNlciBlbnRlcmVkCgl0aGlzLnNlbGVjdGVkID0g LTE7IC8vIHdoaWNoIHJlc3VsdCBpcyBzZWxlY3RlZAoJdGhpcy5jb250YWluZXJD b3VudCA9IDA7IC8vIG51bWJlciBvZiByZXN1bHRzIHZpc2libGUgaW4gY29udGFp bmVyCgl0aGlzLmNvbnRhaW5lclJvdyA9IDA7IC8vIGhlaWdodCBvZiByZXN1bHQg ZmllbGQgaW4gdGhlIGNvbnRhaW5lcgoJdGhpcy5jb250YWluZXJUb3RhbCA9IDA7 IC8vIHRvdGFsIGhlaWdodCBvZiB0aGUgY29udGFpbmVyIHdpbGwgYWxsIHJlc3Vs dHMKCXRoaXMudmlzaWJsZSA9IGZhbHNlOyAvLyBpZiBjb250YWluZXIgaXMgdmlz aWJsZQoJdGhpcy5zdGF5SGlkZGVuID0gZmFsc2U7IC8vIGRvbid0IHRyeSB0byBz aG93IGlmIGxvc3QgZm9jdXMKfQoKLyoqIEhpZGUgcmVzdWx0cyBkaXYgKi8KZnVu Y3Rpb24gb3NfaGlkZVJlc3VsdHMocil7Cgl2YXIgYyA9IGRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCWlmKGMgIT0gbnVsbCkKCQljLnN0eWxl LnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKCXIudmlzaWJsZSA9IGZhbHNlOwoJci5z ZWxlY3RlZCA9IC0xOwp9CgovKiogU2hvdyByZXN1bHRzIGRpdiAqLwpmdW5jdGlv biBvc19zaG93UmVzdWx0cyhyKXsKCWlmKG9zX2lzX3N0b3BwZWQpCgkJcmV0dXJu OwoJaWYoci5zdGF5SGlkZGVuKQoJCXJldHVybgoJb3NfZml0Q29udGFpbmVyKHIp OwoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7 CglyLnNlbGVjdGVkID0gLTE7CglpZihjICE9IG51bGwpewoJCWMuc2Nyb2xsVG9w ID0gMDsKCQljLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7CgkJci52aXNp YmxlID0gdHJ1ZTsKCX0KfQoKZnVuY3Rpb24gb3Nfb3BlcmFXaWR0aEZpeCh4KXsK CS8vIEZvciBicm93c2VycyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgb3ZlcmZsb3ct eCwgZXN0aW1hdGUgc2Nyb2xsYmFyIHdpZHRoCglpZih0eXBlb2YgZG9jdW1lbnQu Ym9keS5zdHlsZS5vdmVyZmxvd1ggIT0gInN0cmluZyIpewoJCXJldHVybiAzMDsK CX0KCXJldHVybiAwOwp9CgpmdW5jdGlvbiBvc19lbmNvZGVRdWVyeSh2YWx1ZSl7 CiAgaWYgKGVuY29kZVVSSUNvbXBvbmVudCkgewogICAgcmV0dXJuIGVuY29kZVVS SUNvbXBvbmVudCh2YWx1ZSk7CiAgfQogIGlmKGVzY2FwZSkgewogICAgcmV0dXJu IGVzY2FwZSh2YWx1ZSk7CiAgfQogIHJldHVybiBudWxsOwp9CmZ1bmN0aW9uIG9z X2RlY29kZVZhbHVlKHZhbHVlKXsKICBpZiAoZGVjb2RlVVJJQ29tcG9uZW50KSB7 CiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTsKICB9CiAgaWYo dW5lc2NhcGUpewogIAlyZXR1cm4gdW5lc2NhcGUodmFsdWUpOwogIH0KICByZXR1 cm4gbnVsbDsKfQoKLyoqIEJyb3dlci1kZXBlbmRlbnQgZnVuY3Rpb25zIHRvIGZp bmQgd2luZG93IGlubmVyIHNpemUsIGFuZCBzY3JvbGwgc3RhdHVzICovCmZ1bmN0 aW9uIGZfY2xpZW50V2lkdGgoKSB7CglyZXR1cm4gZl9maWx0ZXJSZXN1bHRzICgK CQl3aW5kb3cuaW5uZXJXaWR0aCA/IHdpbmRvdy5pbm5lcldpZHRoIDogMCwKCQlk b2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1l bnQuY2xpZW50V2lkdGggOiAwLAoJCWRvY3VtZW50LmJvZHkgPyBkb2N1bWVudC5i b2R5LmNsaWVudFdpZHRoIDogMAoJKTsKfQpmdW5jdGlvbiBmX2NsaWVudEhlaWdo dCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJCXdpbmRvdy5pbm5lckhl aWdodCA/IHdpbmRvdy5pbm5lckhlaWdodCA6IDAsCgkJZG9jdW1lbnQuZG9jdW1l bnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJvZHkuY2xpZW50SGVp Z2h0IDogMAoJKTsKfQpmdW5jdGlvbiBmX3Njcm9sbExlZnQoKSB7CglyZXR1cm4g Zl9maWx0ZXJSZXN1bHRzICgKCQl3aW5kb3cucGFnZVhPZmZzZXQgPyB3aW5kb3cu cGFnZVhPZmZzZXQgOiAwLAoJCWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/IGRv Y3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogMCwKCQlkb2N1bWVu dC5ib2R5ID8gZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0IDogMAoJKTsKfQpmdW5j dGlvbiBmX3Njcm9sbFRvcCgpIHsKCXJldHVybiBmX2ZpbHRlclJlc3VsdHMgKAoJ CXdpbmRvdy5wYWdlWU9mZnNldCA/IHdpbmRvdy5wYWdlWU9mZnNldCA6IDAsCgkJ ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVt ZW50LnNjcm9sbFRvcCA6IDAsCgkJZG9jdW1lbnQuYm9keSA/IGRvY3VtZW50LmJv ZHkuc2Nyb2xsVG9wIDogMAoJKTsKfQpmdW5jdGlvbiBmX2ZpbHRlclJlc3VsdHMo bl93aW4sIG5fZG9jZWwsIG5fYm9keSkgewoJdmFyIG5fcmVzdWx0ID0gbl93aW4g PyBuX3dpbiA6IDA7CglpZiAobl9kb2NlbCAmJiAoIW5fcmVzdWx0IHx8IChuX3Jl c3VsdCA+IG5fZG9jZWwpKSkKCQluX3Jlc3VsdCA9IG5fZG9jZWw7CglyZXR1cm4g bl9ib2R5ICYmICghbl9yZXN1bHQgfHwgKG5fcmVzdWx0ID4gbl9ib2R5KSkgPyBu X2JvZHkgOiBuX3Jlc3VsdDsKfQoKLyoqIEdldCB0aGUgaGVpZ2h0IGF2YWlsYWJs ZSBmb3IgdGhlIHJlc3VsdHMgY29udGFpbmVyICovCmZ1bmN0aW9uIG9zX2F2YWls YWJsZUhlaWdodChyKXsKCXZhciBhYnNUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50 QnlJZChyLmNvbnRhaW5lcikuc3R5bGUudG9wOwoJdmFyIHB4ID0gYWJzVG9wLmxh c3RJbmRleE9mKCJweCIpOwoJaWYocHggPiAwKQoJCWFic1RvcCA9IGFic1RvcC5z dWJzdHJpbmcoMCxweCk7CglyZXR1cm4gZl9jbGllbnRIZWlnaHQoKSAtIChhYnNU b3AgLSBmX3Njcm9sbFRvcCgpKTsKfQoKCi8qKiBHZXQgZWxlbWVudCBhYnNvbHV0 ZSBwb3NpdGlvbiB7bGVmdCx0b3B9ICovCmZ1bmN0aW9uIG9zX2dldEVsZW1lbnRQ b3NpdGlvbihlbGVtSUQpewoJdmFyIG9mZnNldFRyYWlsID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoZWxlbUlEKTsKCXZhciBvZmZzZXRMZWZ0ID0gMDsKCXZhciBv ZmZzZXRUb3AgPSAwOwoJd2hpbGUgKG9mZnNldFRyYWlsKXsKCQlvZmZzZXRMZWZ0 ICs9IG9mZnNldFRyYWlsLm9mZnNldExlZnQ7CgkJb2Zmc2V0VG9wICs9IG9mZnNl dFRyYWlsLm9mZnNldFRvcDsKCQlvZmZzZXRUcmFpbCA9IG9mZnNldFRyYWlsLm9m ZnNldFBhcmVudDsKCX0KCWlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2Yo J01hYycpICE9IC0xICYmIHR5cGVvZiBkb2N1bWVudC5ib2R5LmxlZnRNYXJnaW4g IT0gJ3VuZGVmaW5lZCcpewoJCW9mZnNldExlZnQgKz0gZG9jdW1lbnQuYm9keS5s ZWZ0TWFyZ2luOwoJCW9mZnNldFRvcCArPSBkb2N1bWVudC5ib2R5LnRvcE1hcmdp bjsKCX0KCXJldHVybiB7bGVmdDpvZmZzZXRMZWZ0LHRvcDpvZmZzZXRUb3B9Owp9 CgovKiogQ3JlYXRlIHRoZSBjb250YWluZXIgZGl2IHRoYXQgd2lsbCBob2xkIHRo ZSBzdWdnZXN0ZWQgdGl0bGVzICovCmZ1bmN0aW9uIG9zX2NyZWF0ZUNvbnRhaW5l cihyKXsKCXZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Cgl2 YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KTsKCXZh ciBwb3MgPSBvc19nZXRFbGVtZW50UG9zaXRpb24oci5zZWFyY2hib3gpOwoJdmFy IGxlZnQgPSBwb3MubGVmdDsKCXZhciB0b3AgPSBwb3MudG9wICsgcy5vZmZzZXRI ZWlnaHQ7CgljLmNsYXNzTmFtZSA9ICJvcy1zdWdnZXN0IjsKCWMuc2V0QXR0cmli dXRlKCJpZCIsIHIuY29udGFpbmVyKTsKCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp bGQoYyk7CgoJLy8gZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHN0eWxlIHBhcmFtcwoJ Ly8gSUUgd29ya2Fyb3VuZCwgY2Fubm90IGV4cGxpY2l0ZWx5IHNldCAic3R5bGUi IGF0dHJpYnV0ZQoJYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFp bmVyKTsKCWMuc3R5bGUudG9wID0gdG9wKyJweCI7CgljLnN0eWxlLmxlZnQgPSBs ZWZ0KyJweCI7CgljLnN0eWxlLndpZHRoID0gcy5vZmZzZXRXaWR0aCsicHgiOwoK CS8vIG1vdXNlIGV2ZW50IGhhbmRsZXJzCgljLm9ubW91c2VvdmVyID0gZnVuY3Rp b24oZXZlbnQpIHsgb3NfZXZlbnRNb3VzZW92ZXIoci5zZWFyY2hib3gsIGV2ZW50 KTsgfTsKCWMub25tb3VzZW1vdmUgPSBmdW5jdGlvbihldmVudCkgeyBvc19ldmVu dE1vdXNlbW92ZShyLnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNlZG93 biA9IGZ1bmN0aW9uKGV2ZW50KSB7IHJldHVybiBvc19ldmVudE1vdXNlZG93bihy LnNlYXJjaGJveCwgZXZlbnQpOyB9OwoJYy5vbm1vdXNldXAgPSBmdW5jdGlvbihl dmVudCkgeyBvc19ldmVudE1vdXNldXAoci5zZWFyY2hib3gsIGV2ZW50KTsgfTsK CXJldHVybiBjOwp9CgovKiogY2hhbmdlIGNvbnRhaW5lciBoZWlnaHQgdG8gZml0 IHRvIHNjcmVlbiAqLwpmdW5jdGlvbiBvc19maXRDb250YWluZXIocil7Cgl2YXIg YyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKTsKCXZhciBo ID0gb3NfYXZhaWxhYmxlSGVpZ2h0KHIpIC0gMjA7Cgl2YXIgaW5jID0gci5jb250 YWluZXJSb3c7CgloID0gcGFyc2VJbnQoaC9pbmMpICogaW5jOwoJaWYoaCA8ICgy ICogaW5jKSAmJiByLnJlc3VsdENvdW50ID4gMSkgLy8gbWluOiB0d28gcmVzdWx0 cwoJCWggPSAyICogaW5jOwoJaWYoKGgvaW5jKSA+IG9zX21heF9saW5lc19wZXJf c3VnZ2VzdCApCgkJaCA9IGluYyAqIG9zX21heF9saW5lc19wZXJfc3VnZ2VzdDsK CWlmKGggPCByLmNvbnRhaW5lclRvdGFsKXsKCQljLnN0eWxlLmhlaWdodCA9IGgg KyJweCI7CgkJci5jb250YWluZXJDb3VudCA9IHBhcnNlSW50KE1hdGgucm91bmQo aC9pbmMpKTsKCX0gZWxzZXsKCQljLnN0eWxlLmhlaWdodCA9IHIuY29udGFpbmVy VG90YWwrInB4IjsKCQlyLmNvbnRhaW5lckNvdW50ID0gci5yZXN1bHRDb3VudDsK CX0KfQovKiogSWYgc29tZSBlbnRyaWVzIGFyZSBsb25nZXIgdGhhbiB0aGUgYm94 LCByZXBsYWNlIHRleHQgd2l0aCAiLi4uIiAqLwpmdW5jdGlvbiBvc190cmltUmVz dWx0VGV4dChyKXsKCS8vIGZpbmQgbWF4IHdpZHRoLCBmaXJzdCBzZWUgaWYgd2Ug Y291bGQgZXhwYW5kIHRoZSBjb250YWluZXIgdG8gZml0IGl0Cgl2YXIgbWF4VyA9 IDA7Cglmb3IodmFyIGk9MDtpPHIucmVzdWx0Q291bnQ7aSsrKXsKCQl2YXIgZSA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGV4dCtpKTsKCQlpZihl Lm9mZnNldFdpZHRoID4gbWF4VykKCQkJbWF4VyA9IGUub2Zmc2V0V2lkdGg7Cgl9 Cgl2YXIgdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuY29udGFpbmVyKS5v ZmZzZXRXaWR0aDsKCXZhciBmaXggPSAwOwoJaWYoci5jb250YWluZXJDb3VudCA8 IHIucmVzdWx0Q291bnQpewoJCWZpeCA9IDIwOyAvLyBnaXZlIDIwcHggZm9yIHNj cm9sbGJhcgoJfSBlbHNlCgkJZml4ID0gb3Nfb3BlcmFXaWR0aEZpeCh3KTsKCWlm KGZpeCA8IDQpCgkJZml4ID0gNDsgLy8gYmFzaWMgcGFkZGluZwoJbWF4VyArPSBm aXg7CgoJLy8gcmVzaXplIGNvbnRhaW5lciB0byBmaXQgbW9yZSBkYXRhIGlmIHBl cm1pdHRlZAoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5z ZWFyY2hib3gpLm9mZnNldFdpZHRoOwoJdmFyIHByb3AgPSBtYXhXIC8gbm9ybVc7 CglpZihwcm9wID4gb3NfY29udGFpbmVyX21heF93aWR0aCkKCQlwcm9wID0gb3Nf Y29udGFpbmVyX21heF93aWR0aDsKCWVsc2UgaWYocHJvcCA8IDEpCgkJcHJvcCA9 IDE7Cgl2YXIgbmV3VyA9IE1hdGgucm91bmQoIG5vcm1XICogcHJvcCApOwoJaWYo IHcgIT0gbmV3VyApewoJCXcgPSBuZXdXOwoJCWlmKCBvc19hbmltYXRpb25fdGlt ZXIgIT0gbnVsbCApCgkJCWNsZWFySW50ZXJ2YWwob3NfYW5pbWF0aW9uX3RpbWVy LmlkKQoJCW9zX2FuaW1hdGlvbl90aW1lciA9IG5ldyBvc19BbmltYXRpb25UaW1l cihyLHcpOwoJCW9zX2FuaW1hdGlvbl90aW1lci5pZCA9IHNldEludGVydmFsKCJv c19hbmltYXRlQ2hhbmdlV2lkdGgoKSIsb3NfYW5pbWF0aW9uX2RlbGF5KTsKCQl3 IC09IGZpeDsgLy8gdGhpcyBtdWNoIGlzIHJlc2VydmVkCgl9CgoJLy8gdHJpbSBy ZXN1bHRzCglpZih3IDwgMTApCgkJcmV0dXJuOwoJZm9yKHZhciBpPTA7aTxyLnJl c3VsdENvdW50O2krKyl7CgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChyLnJlc3VsdFRleHQraSk7CgkJdmFyIHJlcGxhY2UgPSAxOwoJCXZhciBsYXN0 VyA9IGUub2Zmc2V0V2lkdGgrMTsKCQl2YXIgaXRlcmF0aW9uID0gMDsKCQl2YXIg Y2hhbmdlZFRleHQgPSBmYWxzZTsKCQl3aGlsZShlLm9mZnNldFdpZHRoID4gdyAm JiAoZS5vZmZzZXRXaWR0aCA8IGxhc3RXIHx8IGl0ZXJhdGlvbjwyKSl7CgkJCWNo YW5nZWRUZXh0ID0gdHJ1ZTsKCQkJbGFzdFcgPSBlLm9mZnNldFdpZHRoOwoJCQl2 YXIgbCA9IGUuaW5uZXJIVE1MOwoJCQllLmlubmVySFRNTCA9IGwuc3Vic3RyaW5n KDAsbC5sZW5ndGgtcmVwbGFjZSkrIi4uLiI7CgkJCWl0ZXJhdGlvbisrOwoJCQly ZXBsYWNlID0gNDsgLy8gaG93IG1hbnkgY2hhcnMgdG8gcmVwbGFjZQoJCX0KCQlp ZihjaGFuZ2VkVGV4dCl7CgkJCS8vIHNob3cgaGludCBmb3IgdHJpbW1lZCB0aXRs ZXMKCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5yZXN1bHRUYWJsZStpKS5z ZXRBdHRyaWJ1dGUoInRpdGxlIixyLnJlc3VsdHNbaV0pOwoJCX0KCX0KfQoKLyoq IEludm9rZWQgb24gdGltZXIgdG8gYW5pbWF0ZSBjaGFuZ2UgaW4gY29udGFpbmVy IHdpZHRoICovCmZ1bmN0aW9uIG9zX2FuaW1hdGVDaGFuZ2VXaWR0aCgpewoJdmFy IHIgPSBvc19hbmltYXRpb25fdGltZXIucjsKCXZhciBjID0gZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoci5jb250YWluZXIpOwoJdmFyIHcgPSBjLm9mZnNldFdpZHRo OwoJdmFyIG5vcm1XID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hi b3gpLm9mZnNldFdpZHRoOwoJdmFyIG5vcm1MID0gb3NfZ2V0RWxlbWVudFBvc2l0 aW9uKHIuc2VhcmNoYm94KS5sZWZ0OwoJdmFyIGluYyA9IG9zX2FuaW1hdGlvbl90 aW1lci5pbmM7Cgl2YXIgdGFyZ2V0ID0gb3NfYW5pbWF0aW9uX3RpbWVyLnRhcmdl dDsKCXZhciBudyA9IHcgKyBpbmM7CglpZiggKGluYyA+IDAgJiYgbncgPj0gdGFy Z2V0KSB8fCAoaW5jIDw9IDAgJiYgbncgPD0gdGFyZ2V0KSApewoJCS8vIGZpbmlz aGVkICEKCQljLnN0eWxlLndpZHRoID0gdGFyZ2V0KyJweCI7CgkJY2xlYXJJbnRl cnZhbChvc19hbmltYXRpb25fdGltZXIuaWQpCgkJb3NfYW5pbWF0aW9uX3RpbWVy ID0gbnVsbDsKCX0gZWxzZXsKCQkvLyBpbi1wcm9ncmVzcwoJCWMuc3R5bGUud2lk dGggPSBudysicHgiOwoJCWlmKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIg PT0gInJ0bCIpCgkJCWMuc3R5bGUubGVmdCA9IChub3JtTCArIG5vcm1XICsgKHRh cmdldCAtIG53KSAtIG9zX2FuaW1hdGlvbl90aW1lci50YXJnZXQgLSAxKSsicHgi OwoJfQp9CgovKiogSGFuZGxlcyBkYXRhIGZyb20gWE1MSHR0cFJlcXVlc3QsIGFu ZCB1cGRhdGVzIHRoZSBzdWdnZXN0IHJlc3VsdHMgKi8KZnVuY3Rpb24gb3NfdXBk YXRlUmVzdWx0cyhyLCBxdWVyeSwgdGV4dCwgY2FjaGVLZXkpewoJb3NfY2FjaGVb Y2FjaGVLZXldID0gdGV4dDsKCXIucXVlcnkgPSBxdWVyeTsKCXIub3JpZ2luYWwg PSBxdWVyeTsKCWlmKHRleHQgPT0gIiIpewoJCXIucmVzdWx0cyA9IG51bGw7CgkJ ci5yZXN1bHRDb3VudCA9IDA7CgkJb3NfaGlkZVJlc3VsdHMocik7Cgl9IGVsc2V7 CgkJdHJ5IHsKCQkJdmFyIHAgPSBldmFsKCcoJyt0ZXh0KycpJyk7IC8vIHNpbXBs ZSBqc29uIHBhcnNlLCBjb3VsZCBkbyBhIHNhZmVyIG9uZQoJCQlpZihwLmxlbmd0 aDwyIHx8IHBbMV0ubGVuZ3RoID09IDApewoJCQkJci5yZXN1bHRzID0gbnVsbDsK CQkJCXIucmVzdWx0Q291bnQgPSAwOwoJCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ CQlyZXR1cm47CgkJCX0KCQkJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ ZChyLmNvbnRhaW5lcik7CgkJCWlmKGMgPT0gbnVsbCkKCQkJCWMgPSBvc19jcmVh dGVDb250YWluZXIocik7CgkJCWMuaW5uZXJIVE1MID0gb3NfY3JlYXRlUmVzdWx0 VGFibGUocixwWzFdKTsKCQkJLy8gaW5pdCBjb250YWluZXIgdGFibGUgc2l6ZXMK CQkJdmFyIHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnJlc3VsdFRhYmxl KTsKCQkJci5jb250YWluZXJUb3RhbCA9IHQub2Zmc2V0SGVpZ2h0OwoJCQlyLmNv bnRhaW5lclJvdyA9IHQub2Zmc2V0SGVpZ2h0IC8gci5yZXN1bHRDb3VudDsKCQkJ b3NfZml0Q29udGFpbmVyKHIpOwoJCQlvc190cmltUmVzdWx0VGV4dChyKTsKCQkJ b3Nfc2hvd1Jlc3VsdHMocik7CgkJfSBjYXRjaChlKXsKCQkJLy8gYmFkIHJlc3Bv bnNlIGZyb20gc2VydmVyIG9yIHN1Y2gKCQkJb3NfaGlkZVJlc3VsdHMocik7CgkJ CW9zX2NhY2hlW2NhY2hlS2V5XSA9IG51bGw7CgkJfQoJfQp9CgovKiogQ3JlYXRl IHRoZSByZXN1bHQgdGFibGUgdG8gYmUgcGxhY2VkIGluIHRoZSBjb250YWluZXIg ZGl2ICovCmZ1bmN0aW9uIG9zX2NyZWF0ZVJlc3VsdFRhYmxlKHIsIHJlc3VsdHMp ewoJdmFyIGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7 Cgl2YXIgd2lkdGggPSBjLm9mZnNldFdpZHRoIC0gb3Nfb3BlcmFXaWR0aEZpeChj Lm9mZnNldFdpZHRoKTsKCXZhciBodG1sID0gIjx0YWJsZSBjbGFzcz1cIm9zLXN1 Z2dlc3QtcmVzdWx0c1wiIGlkPVwiIityLnJlc3VsdFRhYmxlKyJcIiBzdHlsZT1c IndpZHRoOiAiK3dpZHRoKyJweDtcIj4iOwoJci5yZXN1bHRzID0gbmV3IEFycmF5 KCk7CglyLnJlc3VsdENvdW50ID0gcmVzdWx0cy5sZW5ndGg7Cglmb3IoaT0wO2k8 cmVzdWx0cy5sZW5ndGg7aSsrKXsKCQl2YXIgdGl0bGUgPSBvc19kZWNvZGVWYWx1 ZShyZXN1bHRzW2ldKTsKCQlyLnJlc3VsdHNbaV0gPSB0aXRsZTsKCQlodG1sICs9 ICI8dHI+PHRkIGNsYXNzPVwib3Mtc3VnZ2VzdC1yZXN1bHRcIiBpZD1cIiIrci5y ZXN1bHRUYWJsZStpKyJcIj48c3BhbiBpZD1cIiIrci5yZXN1bHRUZXh0K2krIlwi PiIrdGl0bGUrIjwvc3Bhbj48L3RkPjwvdHI+IjsKCX0KCWh0bWwrPSI8L3RhYmxl PiIKCXJldHVybiBodG1sOwp9CgovKiogRmV0Y2ggbmFtZXNwYWNlcyBmcm9tIGNo ZWNrYm94ZXMgb3IgaGlkZGVuIGZpZWxkcyBpbiB0aGUgc2VhcmNoIGZvcm0sCiAg ICBpZiBub25lIGRlZmluZWQgdXNlIHdnU2VhcmNoTmFtZXNwYWNlcyBnbG9iYWwg Ki8KZnVuY3Rpb24gb3NfZ2V0TmFtZXNwYWNlcyhyKXsKCXZhciBuYW1lc3BhY2Vz ID0gIiI7Cgl2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5mb3Jtc1tyLnNlYXJjaGZv cm1dLmVsZW1lbnRzOwoJZm9yKGk9MDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsr KXsKCQl2YXIgbmFtZSA9IGVsZW1lbnRzW2ldLm5hbWU7CgkJaWYodHlwZW9mIG5h bWUgIT0gJ3VuZGVmaW5lZCcgJiYgbmFtZS5sZW5ndGggPiAyCgkJJiYgbmFtZVsw XT09J24nICYmIG5hbWVbMV09PSdzJwoJCSYmICgoZWxlbWVudHNbaV0udHlwZT09 J2NoZWNrYm94JyAmJiBlbGVtZW50c1tpXS5jaGVja2VkKQoJCSAJfHwgKGVsZW1l bnRzW2ldLnR5cGU9PSdoaWRkZW4nICYmIGVsZW1lbnRzW2ldLnZhbHVlPT0iMSIp KSApewoJCQlpZihuYW1lc3BhY2VzIT0iIikKCQkJCW5hbWVzcGFjZXMrPSJ8IjsK CQkJbmFtZXNwYWNlcys9bmFtZS5zdWJzdHJpbmcoMik7CgkJfQoJfQoJaWYobmFt ZXNwYWNlcyA9PSAiIikKCQluYW1lc3BhY2VzID0gd2dTZWFyY2hOYW1lc3BhY2Vz LmpvaW4oInwiKTsKCXJldHVybiBuYW1lc3BhY2VzOwp9CgovKiogVXBkYXRlIHJl c3VsdHMgaWYgdXNlciBoYXNuJ3QgYWxyZWFkeSB0eXBlZCBzb21ldGhpbmcgZWxz ZSAqLwpmdW5jdGlvbiBvc191cGRhdGVJZlJlbGV2YW50KHIsIHF1ZXJ5LCB0ZXh0 LCBjYWNoZUtleSl7Cgl2YXIgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIu c2VhcmNoYm94KTsKCWlmKHQgIT0gbnVsbCAmJiB0LnZhbHVlID09IHF1ZXJ5KXsg Ly8gY2hlY2sgaWYgcmVzcG9uc2UgaXMgc3RpbGwgcmVsZXZhbnQKCQlvc191cGRh dGVSZXN1bHRzKHIsIHF1ZXJ5LCB0ZXh0LCBjYWNoZUtleSk7Cgl9CglyLnF1ZXJ5 ID0gcXVlcnk7Cn0KCi8qKiBGZXRjaCByZXN1bHRzIGFmdGVyIHNvbWUgdGltZW91 dCAqLwpmdW5jdGlvbiBvc19kZWxheWVkRmV0Y2goKXsKCWlmKG9zX3RpbWVyID09 IG51bGwpCgkJcmV0dXJuOwoJdmFyIHIgPSBvc190aW1lci5yOwoJdmFyIHF1ZXJ5 ID0gb3NfdGltZXIucXVlcnk7Cglvc190aW1lciA9IG51bGw7Cgl2YXIgcGF0aCA9 IHdnTVdTdWdnZXN0VGVtcGxhdGUucmVwbGFjZSgie25hbWVzcGFjZXN9Iixvc19n ZXROYW1lc3BhY2VzKHIpKQoJCQkJCQkJICAJICAucmVwbGFjZSgie2RibmFtZX0i LHdnREJuYW1lKQoJCQkJCQkJICAJICAucmVwbGFjZSgie3NlYXJjaFRlcm1zfSIs b3NfZW5jb2RlUXVlcnkocXVlcnkpKTsKCgkvLyB0cnkgdG8gZ2V0IGZyb20gY2Fj aGUsIGlmIG5vdCBmZXRjaCB1c2luZyBhamF4Cgl2YXIgY2FjaGVkID0gb3NfY2Fj aGVbcGF0aF07CglpZihjYWNoZWQgIT0gbnVsbCl7CgkJb3NfdXBkYXRlSWZSZWxl dmFudChyLCBxdWVyeSwgY2FjaGVkLCBwYXRoKTsKCX0gZWxzZXsKCQl2YXIgeG1s aHR0cCA9IHNhamF4X2luaXRfb2JqZWN0KCk7CgkJaWYoeG1saHR0cCl7CgkJCXRy eSB7CgkJCQl4bWxodHRwLm9wZW4oIkdFVCIsIHBhdGgsIHRydWUpOwoJCQkJeG1s aHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXsKCQkgICAgICAgIAlp ZiAoeG1saHR0cC5yZWFkeVN0YXRlPT00ICYmIHR5cGVvZiBvc191cGRhdGVJZlJl bGV2YW50ID09ICdmdW5jdGlvbicpIHsKCQkgICAgICAgIAkJb3NfdXBkYXRlSWZS ZWxldmFudChyLCBxdWVyeSwgeG1saHR0cC5yZXNwb25zZVRleHQsIHBhdGgpOwoJ ICAgICAgICAJCX0KCSAgICAgIAkJfTsKCSAgICAgCQl4bWxodHRwLnNlbmQobnVs bCk7CgkgICAgIAl9IGNhdGNoIChlKSB7CgkJCQlpZiAod2luZG93LmxvY2F0aW9u Lmhvc3RuYW1lID09ICJsb2NhbGhvc3QiKSB7CgkJCQkJYWxlcnQoIllvdXIgYnJv d3NlciBibG9ja3MgWE1MSHR0cFJlcXVlc3QgdG8gJ2xvY2FsaG9zdCcsIHRyeSB1 c2luZyBhIHJlYWwgaG9zdG5hbWUgZm9yIGRldmVsb3BtZW50L3Rlc3RpbmcuIik7 CgkJCQl9CgkJCQl0aHJvdyBlOwoJCQl9CgkJfQoJfQp9CgovKiogSW5pdCB0aW1l ZCB1cGRhdGUgdmlhIG9zX2RlbGF5ZWRVcGRhdGUoKSAqLwpmdW5jdGlvbiBvc19m ZXRjaFJlc3VsdHMociwgcXVlcnksIHRpbWVvdXQpewoJaWYocXVlcnkgPT0gIiIp ewoJCXIucXVlcnkgPSAiIjsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQlyZXR1cm47 Cgl9IGVsc2UgaWYocXVlcnkgPT0gci5xdWVyeSkKCQlyZXR1cm47IC8vIG5vIGNo YW5nZQoKCW9zX2lzX3N0b3BwZWQgPSBmYWxzZTsgLy8gbWFrZSBzdXJlIHdlJ3Jl IHJ1bm5pbmcKCgkvKiB2YXIgY2FjaGVLZXkgPSB3Z0RCbmFtZSsiOiIrcXVlcnk7 Cgl2YXIgY2FjaGVkID0gb3NfY2FjaGVbY2FjaGVLZXldOwoJaWYoY2FjaGVkICE9 IG51bGwpewoJCW9zX3VwZGF0ZVJlc3VsdHMocix3Z0RCbmFtZSxxdWVyeSxjYWNo ZWQpOwoJCXJldHVybjsKCX0gKi8KCgkvLyBjYW5jZWwgYW55IHBlbmRpbmcgZmV0 Y2hlcwoJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxs KQoJCWNsZWFyVGltZW91dChvc190aW1lci5pZCk7CgkvLyBzY2hlZHVsZSBkZWxh eWVkIGZldGNoaW5nIG9mIHJlc3VsdHMKCWlmKHRpbWVvdXQgIT0gMCl7CgkJb3Nf dGltZXIgPSBuZXcgb3NfVGltZXIoc2V0VGltZW91dCgib3NfZGVsYXllZEZldGNo KCkiLHRpbWVvdXQpLHIscXVlcnkpOwoJfSBlbHNlewoJCW9zX3RpbWVyID0gbmV3 IG9zX1RpbWVyKG51bGwscixxdWVyeSk7CgkJb3NfZGVsYXllZEZldGNoKCk7IC8v IGRvIGl0IG5vdyEKCX0KCn0KLyoqIENoYW5nZSB0aGUgaGlnaGxpZ2h0ZWQgcm93 IChpLmUuIHN1Z2dlc3Rpb24pLCBmcm9tIHBvc2l0aW9uIGN1ciB0byBuZXh0ICov CmZ1bmN0aW9uIG9zX2NoYW5nZUhpZ2hsaWdodChyLCBjdXIsIG5leHQsIHVwZGF0 ZVNlYXJjaEJveCl7CglpZiAobmV4dCA+PSByLnJlc3VsdENvdW50KQoJCW5leHQg PSByLnJlc3VsdENvdW50LTE7CglpZiAobmV4dCA8IC0xKQoJCW5leHQgPSAtMTsK CXIuc2VsZWN0ZWQgPSBuZXh0OwogICAJaWYgKGN1ciA9PSBuZXh0KQogICAgCXJl dHVybjsgLy8gbm90aGluZyB0byBkby4KCiAgICBpZihjdXIgPj0gMCl7CiAgICAJ dmFyIGN1clJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFi bGUgKyBjdXIpOwogICAgCWlmKGN1clJvdyAhPSBudWxsKQogICAgCQljdXJSb3cu Y2xhc3NOYW1lID0gIm9zLXN1Z2dlc3QtcmVzdWx0IjsKICAgIH0KICAgIHZhciBu ZXdUZXh0OwogICAgaWYobmV4dCA+PSAwKXsKICAgIAl2YXIgbmV4dFJvdyA9IGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKHIucmVzdWx0VGFibGUgKyBuZXh0KTsKICAg IAlpZihuZXh0Um93ICE9IG51bGwpCiAgICAJCW5leHRSb3cuY2xhc3NOYW1lID0g b3NfSGlnaGxpZ2h0Q2xhc3MoKTsKICAgIAluZXdUZXh0ID0gci5yZXN1bHRzW25l eHRdOwogICAgfSBlbHNlCiAgICAJbmV3VGV4dCA9IHIub3JpZ2luYWw7CgogICAg Ly8gYWRqdXN0IHRoZSBzY3JvbGxiYXIgaWYgYW55CiAgICBpZihyLmNvbnRhaW5l ckNvdW50IDwgci5yZXN1bHRDb3VudCl7CiAgICAJdmFyIGMgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLmNvbnRhaW5lcik7CiAgICAJdmFyIHZTdGFydCA9IGMu c2Nyb2xsVG9wIC8gci5jb250YWluZXJSb3c7CiAgICAJdmFyIHZFbmQgPSB2U3Rh cnQgKyByLmNvbnRhaW5lckNvdW50OwogICAgCWlmKG5leHQgPCB2U3RhcnQpCiAg ICAJCWMuc2Nyb2xsVG9wID0gbmV4dCAqIHIuY29udGFpbmVyUm93OwogICAgCWVs c2UgaWYobmV4dCA+PSB2RW5kKQogICAgCQljLnNjcm9sbFRvcCA9IChuZXh0IC0g ci5jb250YWluZXJDb3VudCArIDEpICogci5jb250YWluZXJSb3c7CiAgICB9Cgog ICAgLy8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgc2VhcmNoIGJveAogICAg aWYodXBkYXRlU2VhcmNoQm94KXsKICAgIAlvc191cGRhdGVTZWFyY2hRdWVyeShy LG5ld1RleHQpOwogICAgfQp9CgpmdW5jdGlvbiBvc19IaWdobGlnaHRDbGFzcygp IHsKCXZhciBtYXRjaCA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxl V2ViS2l0XC8oXGQrKS8pOwoJaWYgKG1hdGNoKSB7CgkJdmFyIHdlYktpdFZlcnNp b24gPSBwYXJzZUludChtYXRjaFsxXSk7CgkJaWYgKHdlYktpdFZlcnNpb24gPCA1 MjMpIHsKCQkJLy8gQ1NTIHN5c3RlbSBoaWdobGlnaHQgY29sb3JzIGJyb2tlbiBv biBvbGQgU2FmYXJpCgkJCS8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df YnVnLmNnaT9pZD02MTI5CgkJCS8vIFNhZmFyaSAzLjAuNCwgMy4xIGtub3duIG9r CgkJCXJldHVybiAib3Mtc3VnZ2VzdC1yZXN1bHQtaGwtd2Via2l0IjsKCQl9Cgl9 CglyZXR1cm4gIm9zLXN1Z2dlc3QtcmVzdWx0LWhsIjsKfQoKZnVuY3Rpb24gb3Nf dXBkYXRlU2VhcmNoUXVlcnkocixuZXdUZXh0KXsKCWRvY3VtZW50LmdldEVsZW1l bnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9IG5ld1RleHQ7CiAgICByLnF1ZXJ5 ID0gbmV3VGV4dDsKfQoKLyoqIEZpbmQgZXZlbnQgdGFyZ2V0ICovCmZ1bmN0aW9u IG9zX2dldFRhcmdldChlKXsKCWlmICghZSkgZSA9IHdpbmRvdy5ldmVudDsKCWlm IChlLnRhcmdldCkgcmV0dXJuIGUudGFyZ2V0OwoJZWxzZSBpZiAoZS5zcmNFbGVt ZW50KSByZXR1cm4gZS5zcmNFbGVtZW50OwoJZWxzZSByZXR1cm4gbnVsbDsKfQoK CgovKioqKioqKioqKioqKioqKioqKioKICogIEtleWJvYXJkIGV2ZW50cwogKioq KioqKioqKioqKioqKioqKiovCgovKiogRXZlbnQgaGFuZGxlciB0aGF0IHdpbGwg ZmV0Y2ggcmVzdWx0cyBvbiBrZXl1cCAqLwpmdW5jdGlvbiBvc19ldmVudEtleXVw KGUpewoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21h cFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5vdCBvdXIg ZXZlbnQKCgkvLyBzb21lIGJyb3dzZXJzIHdvbid0IGdlbmVyYXRlIGtleXByZXNz ZWQgZm9yIGFycm93IGtleXMsIGNhdGNoIGl0CglpZihvc19rZXlwcmVzc2VkX2Nv dW50ID09IDApewoJCW9zX3Byb2Nlc3NLZXkocixvc19jdXJfa2V5cHJlc3NlZCx0 YXJnKTsKCX0KCXZhciBxdWVyeSA9IHRhcmcudmFsdWU7Cglvc19mZXRjaFJlc3Vs dHMocixxdWVyeSxvc19zZWFyY2hfdGltZW91dCk7Cn0KCi8qKiBjYXRjaCBhcnJv d3MgdXAvZG93biBhbmQgZXNjYXBlIHRvIGhpZGUgdGhlIHN1Z2dlc3Rpb25zICov CmZ1bmN0aW9uIG9zX3Byb2Nlc3NLZXkocixrZXlwcmVzc2VkLHRhcmcpewoJaWYg KGtleXByZXNzZWQgPT0gNDApeyAvLyBBcnJvdyBEb3duCiAgICAJaWYgKHIudmlz aWJsZSkgewogICAgICAJCW9zX2NoYW5nZUhpZ2hsaWdodChyLCByLnNlbGVjdGVk LCByLnNlbGVjdGVkKzEsIHRydWUpOwogICAgCX0gZWxzZSBpZihvc190aW1lciA9 PSBudWxsKXsKICAgIAkJLy8gdXNlciB3YW50cyB0byBnZXQgc3VnZ2VzdGlvbnMg bm93CiAgICAJCXIucXVlcnkgPSAiIjsKCQkJb3NfZmV0Y2hSZXN1bHRzKHIsdGFy Zy52YWx1ZSwwKTsKICAgIAl9CiAgCX0gZWxzZSBpZiAoa2V5cHJlc3NlZCA9PSAz OCl7IC8vIEFycm93IFVwCiAgCQlpZiAoci52aXNpYmxlKXsKICAJCQlvc19jaGFu Z2VIaWdobGlnaHQociwgci5zZWxlY3RlZCwgci5zZWxlY3RlZC0xLCB0cnVlKTsK ICAJCX0KICAJfSBlbHNlIGlmKGtleXByZXNzZWQgPT0gMjcpeyAvLyBFc2NhcGUK ICAJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIuc2VhcmNoYm94KS52YWx1ZSA9 IHIub3JpZ2luYWw7CiAgCQlyLnF1ZXJ5ID0gci5vcmlnaW5hbDsKICAJCW9zX2hp ZGVSZXN1bHRzKHIpOwogIAl9IGVsc2UgaWYoci5xdWVyeSAhPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLnNlYXJjaGJveCkudmFsdWUpewogIAkJLy8gb3NfaGlk ZVJlc3VsdHMocik7IC8vIGRvbid0IHNob3cgb2xkIHN1Z2dlc3Rpb25zCiAgCX0K fQoKLyoqIFdoZW4ga2V5cyBpcyBoZWxkIGRvd24gdXNlIGEgdGltZXIgdG8gb3V0 cHV0IHJlZ3VsYXIgZXZlbnRzICovCmZ1bmN0aW9uIG9zX2V2ZW50S2V5cHJlc3Mo ZSl7Cgl2YXIgdGFyZyA9IG9zX2dldFRhcmdldChlKTsKCXZhciByID0gb3NfbWFw W3RhcmcuaWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBl dmVudAoKCXZhciBrZXlwcmVzc2VkID0gb3NfY3VyX2tleXByZXNzZWQ7CgoJb3Nf a2V5cHJlc3NlZF9jb3VudCsrOwoJb3NfcHJvY2Vzc0tleShyLGtleXByZXNzZWQs dGFyZyk7Cn0KCi8qKiBDYXRjaCB0aGUga2V5IGNvZGUgKEZpcmVmb3ggYnVnKSAg Ki8KZnVuY3Rpb24gb3NfZXZlbnRLZXlkb3duKGUpewoJaWYgKCFlKSBlID0gd2lu ZG93LmV2ZW50OwoJdmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9 IG9zX21hcFt0YXJnLmlkXTsKCWlmKHIgPT0gbnVsbCkKCQlyZXR1cm47IC8vIG5v dCBvdXIgZXZlbnQKCglvc19tb3VzZV9tb3ZlZCA9IGZhbHNlOwoKCW9zX2N1cl9r ZXlwcmVzc2VkID0gKGUua2V5Q29kZSA9PSB1bmRlZmluZWQpID8gZS53aGljaCA6 IGUua2V5Q29kZTsKCW9zX2tleXByZXNzZWRfY291bnQgPSAwOwp9CgovKiogRXZl bnQ6IGxvc3Mgb2YgZm9jdXMgb2YgaW5wdXQgYm94ICovCmZ1bmN0aW9uIG9zX2V2 ZW50Qmx1cihlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIg PSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51bGwpCgkJcmV0dXJuOyAvLyBu b3Qgb3VyIGV2ZW50CglpZighb3NfbW91c2VfcHJlc3NlZCl7CgkJb3NfaGlkZVJl c3VsdHMocik7CgkJLy8gZm9yY2UgY2FudmFzIHRvIHN0YXkgaGlkZGVuCgkJci5z dGF5SGlkZGVuID0gdHJ1ZQoJCS8vIGNhbmNlbCBhbnkgcGVuZGluZyBmZXRjaGVz CgkJaWYob3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKQoJ CQljbGVhclRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbAoJ fQp9CgovKiogRXZlbnQ6IGZvY3VzIChjYXRjaCBvbmx5IHdoZW4gc3RvcHBlZCkg Ki8KZnVuY3Rpb24gb3NfZXZlbnRGb2N1cyhlKXsKCXZhciB0YXJnID0gb3NfZ2V0 VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBbdGFyZy5pZF07CglpZihyID09IG51 bGwpCgkJcmV0dXJuOyAvLyBub3Qgb3VyIGV2ZW50CglyLnN0YXlIaWRkZW4gPSBm YWxzZQp9CgoKCi8qKioqKioqKioqKioqKioqKioqKgogKiAgTW91c2UgZXZlbnRz CiAqKioqKioqKioqKioqKioqKioqKi8KCi8qKiBNb3VzZSBvdmVyIHRoZSBjb250 YWluZXIgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW92ZXIoc3JjSWQsIGUpewoJ dmFyIHRhcmcgPSBvc19nZXRUYXJnZXQoZSk7Cgl2YXIgciA9IG9zX21hcFtzcmNJ ZF07CglpZihyID09IG51bGwgfHwgIW9zX21vdXNlX21vdmVkKQoJCXJldHVybjsg Ly8gbm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0 YXJnLmlkKTsKCWlmKG51bSA+PSAwKQoJCW9zX2NoYW5nZUhpZ2hsaWdodChyLHIu c2VsZWN0ZWQsbnVtLGZhbHNlKTsKCn0KCi8qIEdldCByb3cgd2hlcmUgdGhlIGV2 ZW50IG9jY3VyZWQgKGZyb20gaXRzIGlkKSAqLwpmdW5jdGlvbiBvc19nZXROdW1i ZXJTdWZmaXgoaWQpewoJdmFyIG51bSA9IGlkLnN1YnN0cmluZyhpZC5sZW5ndGgt Mik7CglpZiggISAobnVtLmNoYXJBdCgwKSA+PSAnMCcgJiYgbnVtLmNoYXJBdCgw KSA8PSAnOScpICkKCQludW0gPSBudW0uc3Vic3RyaW5nKDEpOwoJaWYob3NfaXNO dW1iZXIobnVtKSkKCQlyZXR1cm4gcGFyc2VJbnQobnVtKTsKCWVsc2UKCQlyZXR1 cm4gLTE7Cn0KCi8qKiBTYXZlIG1vdXNlIG1vdmUgYXMgbGFzdCBhY3Rpb24gKi8K ZnVuY3Rpb24gb3NfZXZlbnRNb3VzZW1vdmUoc3JjSWQsIGUpewoJb3NfbW91c2Vf bW92ZWQgPSB0cnVlOwp9CgovKiogTW91c2UgYnV0dG9uIGhlbGQgZG93biwgcmVn aXN0ZXIgcG9zc2libGUgY2xpY2sgICovCmZ1bmN0aW9uIG9zX2V2ZW50TW91c2Vk b3duKHNyY0lkLCBlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFy IHIgPSBvc19tYXBbc3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8g bm90IG91ciBldmVudAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJn LmlkKTsKCglvc19tb3VzZV9wcmVzc2VkID0gdHJ1ZTsKCWlmKG51bSA+PSAwKXsK CQlvc19tb3VzZV9udW0gPSBudW07CgkJLy8gb3NfdXBkYXRlU2VhcmNoUXVlcnko cixyLnJlc3VsdHNbbnVtXSk7Cgl9CgkvLyBrZWVwIHRoZSBmb2N1cyBvbiB0aGUg c2VhcmNoIGZpZWxkCglkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGJv eCkuZm9jdXMoKTsKCglyZXR1cm4gZmFsc2U7IC8vIHByZXZlbnRzIHNlbGVjdGlv bgp9CgovKiogTW91c2UgYnV0dG9uIHJlbGVhc2VkLCBjaGVjayBmb3IgY2xpY2sg b24gc29tZSByb3cgKi8KZnVuY3Rpb24gb3NfZXZlbnRNb3VzZXVwKHNyY0lkLCBl KXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoJdmFyIHIgPSBvc19tYXBb c3JjSWRdOwoJaWYociA9PSBudWxsKQoJCXJldHVybjsgLy8gbm90IG91ciBldmVu dAoJdmFyIG51bSA9IG9zX2dldE51bWJlclN1ZmZpeCh0YXJnLmlkKTsKCglpZihu dW0gPj0gMCAmJiBvc19tb3VzZV9udW0gPT0gbnVtKXsKCQlvc191cGRhdGVTZWFy Y2hRdWVyeShyLHIucmVzdWx0c1tudW1dKTsKCQlvc19oaWRlUmVzdWx0cyhyKTsK CQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pLnN1Ym1pdCgp OwoJfQoJb3NfbW91c2VfcHJlc3NlZCA9IGZhbHNlOwoJLy8ga2VlcCB0aGUgZm9j dXMgb24gdGhlIHNlYXJjaCBmaWVsZAoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ci5zZWFyY2hib3gpLmZvY3VzKCk7Cn0KCi8qKiBDaGVjayBpZiB4IGlzIGEgdmFs aWQgaW50ZWdlciAqLwpmdW5jdGlvbiBvc19pc051bWJlcih4KXsKCWlmKHggPT0g IiIgfHwgaXNOYU4oeCkpCgkJcmV0dXJuIGZhbHNlOwoJZm9yKHZhciBpPTA7aTx4 Lmxlbmd0aDtpKyspewoJCXZhciBjID0geC5jaGFyQXQoaSk7CgkJaWYoICEgKGMg Pj0gJzAnICYmIGMgPD0gJzknKSApCgkJCXJldHVybiBmYWxzZTsKCX0KCXJldHVy biB0cnVlOwp9CgoKLyoqIFdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkIGhpZGUg ZXZlcnl0aGluZywgY2FuY2VsIHVwZGF0ZXMuLi4gKi8KZnVuY3Rpb24gb3NfZXZl bnRPbnN1Ym1pdChlKXsKCXZhciB0YXJnID0gb3NfZ2V0VGFyZ2V0KGUpOwoKCW9z X2lzX3N0b3BwZWQgPSB0cnVlOwoJLy8ga2lsbCB0aW1lZCByZXF1ZXN0cwoJaWYo b3NfdGltZXIgIT0gbnVsbCAmJiBvc190aW1lci5pZCAhPSBudWxsKXsKCQljbGVh clRpbWVvdXQob3NfdGltZXIuaWQpOwoJCW9zX3RpbWVyID0gbnVsbDsKCX0KCS8v IEhpZGUgYWxsIHN1Z2dlc3Rpb25zCglmb3IoaT0wO2k8b3NfYXV0b2xvYWRfaW5w dXRzLmxlbmd0aDtpKyspewoJCXZhciByID0gb3NfbWFwW29zX2F1dG9sb2FkX2lu cHV0c1tpXV07CgkJaWYociAhPSBudWxsKXsKCQkJdmFyIGIgPSBkb2N1bWVudC5n ZXRFbGVtZW50QnlJZChyLnNlYXJjaGZvcm0pOwoJCQlpZihiICE9IG51bGwgJiYg YiA9PSB0YXJnKXsKCQkJCS8vIHNldCBxdWVyeSB2YWx1ZSBzbyB0aGUgaGFuZGxl ciB3b24ndCB0cnkgdG8gZmV0Y2ggYWRkaXRpb25hbCByZXN1bHRzCgkJCQlyLnF1 ZXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoci5zZWFyY2hib3gpLnZhbHVl OwoJCQl9CgkJCW9zX2hpZGVSZXN1bHRzKHIpOwoJCX0KCX0KCXJldHVybiB0cnVl Owp9CgpmdW5jdGlvbiBvc19ob29rRXZlbnQoZWxlbWVudCwgaG9va05hbWUsIGhv b2tGdW5jdCkgewoJaWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikgewoJCWVs ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihob29rTmFtZSwgaG9va0Z1bmN0LCBmYWxz ZSk7Cgl9IGVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCkgewoJCWVsZW1lbnQu YXR0YWNoRXZlbnQoIm9uIiArIGhvb2tOYW1lLCBob29rRnVuY3QpOwoJfQp9Cgov KiogSW5pdCBSZXN1bHQgb2JqZWN0cyBhbmQgZXZlbnQgaGFuZGxlcnMgKi8KZnVu Y3Rpb24gb3NfaW5pdEhhbmRsZXJzKG5hbWUsIGZvcm1uYW1lLCBlbGVtZW50KXsK CXZhciByID0gbmV3IG9zX1Jlc3VsdHMobmFtZSwgZm9ybW5hbWUpOwoJLy8gZXZl bnQgaGFuZGxlcgoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJrZXl1cCIsIGZ1bmN0 aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5dXAoZXZlbnQpOyB9KTsKCW9zX2hvb2tF dmVudChlbGVtZW50LCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2 ZW50S2V5ZG93bihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50KGVsZW1lbnQsICJr ZXlwcmVzcyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50S2V5cHJlc3MoZXZl bnQpOyB9KTsKCW9zX2hvb2tFdmVudChlbGVtZW50LCAiYmx1ciIsIGZ1bmN0aW9u KGV2ZW50KSB7IG9zX2V2ZW50Qmx1cihldmVudCk7IH0pOwoJb3NfaG9va0V2ZW50 KGVsZW1lbnQsICJmb2N1cyIsIGZ1bmN0aW9uKGV2ZW50KSB7IG9zX2V2ZW50Rm9j dXMoZXZlbnQpOyB9KTsKCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxl dGUiLCJvZmYiKTsKCS8vIHN0b3BwaW5nIGhhbmRsZXIKCW9zX2hvb2tFdmVudChk b2N1bWVudC5nZXRFbGVtZW50QnlJZChmb3JtbmFtZSksICJzdWJtaXQiLCBmdW5j dGlvbihldmVudCl7IHJldHVybiBvc19ldmVudE9uc3VibWl0KGV2ZW50KTsgfSk7 Cglvc19tYXBbbmFtZV0gPSByOwoJLy8gdG9nZ2xlIGxpbmsKCWlmKGRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKHIudG9nZ2xlKSA9PSBudWxsKXsKCQkvLyBUT0RPOiBk aXNhYmxlIHRoaXMgd2hpbGUgd2UgZmlndXJlIG91dCBhIHdheSBmb3IgdGhpcyB0 byB3b3JrIGluIGFsbCBicm93c2VycwoJCS8qIGlmKG5hbWU9PSdzZWFyY2hJbnB1 dCcpewoJCQkvLyBzcGVjaWFsIGNhc2U6IHBsYWNlIGFib3ZlIHRoZSBtYWluIHNl YXJjaCBib3gKCQkJdmFyIHQgPSBvc19jcmVhdGVUb2dnbGUociwib3Mtc3VnZ2Vz dC10b2dnbGUiKTsKCQkJdmFyIHNlYXJjaEJvZHkgPSBkb2N1bWVudC5nZXRFbGVt ZW50QnlJZCgnc2VhcmNoQm9keScpOwoJCQl2YXIgZmlyc3QgPSBzZWFyY2hCb2R5 LnBhcmVudE5vZGUuZmlyc3RDaGlsZC5uZXh0U2libGluZy5hcHBlbmRDaGlsZCh0 KTsKCQl9IGVsc2V7CgkJCS8vIGRlZmF1bHQ6IHBsYWNlIGJlbG93IHNlYXJjaCBi b3ggdG8gdGhlIHJpZ2h0CgkJCXZhciB0ID0gb3NfY3JlYXRlVG9nZ2xlKHIsIm9z LXN1Z2dlc3QtdG9nZ2xlLWRlZiIpOwoJCQl2YXIgdG9wID0gZWxlbWVudC5vZmZz ZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodDsKCQkJdmFyIGxlZnQgPSBlbGVt ZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoOwoJCQl0LnN0eWxl LnBvc2l0aW9uID0gImFic29sdXRlIjsKCQkJdC5zdHlsZS50b3AgPSB0b3AgKyAi cHgiOwoJCQl0LnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKCQkJZWxlbWVudC5w YXJlbnROb2RlLmFwcGVuZENoaWxkKHQpOwoJCQkvLyBvbmx5IG5vdyB3aWR0aCBn ZXRzIGNhbGN1bGF0ZWQsIHNoaWZ0IHJpZ2h0CgkJCWxlZnQgLT0gdC5vZmZzZXRX aWR0aDsKCQkJdC5zdHlsZS5sZWZ0ID0gbGVmdCArICJweCI7CgkJCXQuc3R5bGUu dmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsKCQl9ICovCgl9Cgp9CgovKiogUmV0dXJu IHRoZSBzcGFuIGVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgdG9nZ2xlIGxpbmsg Ki8KZnVuY3Rpb24gb3NfY3JlYXRlVG9nZ2xlKHIsY2xhc3NOYW1lKXsKCXZhciB0 ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwoJdC5jbGFzc05hbWUg PSBjbGFzc05hbWU7Cgl0LnNldEF0dHJpYnV0ZSgiaWQiLCByLnRvZ2dsZSk7Cgl2 YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCWxpbmsuc2V0 QXR0cmlidXRlKCJocmVmIiwiamF2YXNjcmlwdDp2b2lkKDApOyIpOwoJbGluay5v bmNsaWNrID0gZnVuY3Rpb24oKXsgb3NfdG9nZ2xlKHIuc2VhcmNoYm94LHIuc2Vh cmNoZm9ybSkgfTsKCXZhciBtc2cgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh3 Z01XU3VnZ2VzdE1lc3NhZ2VzWzBdKTsKCWxpbmsuYXBwZW5kQ2hpbGQobXNnKTsK CXQuYXBwZW5kQ2hpbGQobGluayk7CglyZXR1cm4gdDsKfQoKLyoqIENhbGwgd2hl biB1c2VyIGNsaWNrcyBvbiBzb21lIG9mIHRoZSB0b2dnbGUgbGlua3MgKi8KZnVu Y3Rpb24gb3NfdG9nZ2xlKGlucHV0SWQsZm9ybU5hbWUpewoJciA9IG9zX21hcFtp bnB1dElkXTsKCXZhciBtc2cgPSAnJzsKCWlmKHIgPT0gbnVsbCl7CgkJb3NfZW5h YmxlU3VnZ2VzdGlvbnNPbihpbnB1dElkLGZvcm1OYW1lKTsKCQlyID0gb3NfbWFw W2lucHV0SWRdOwoJCW1zZyA9IHdnTVdTdWdnZXN0TWVzc2FnZXNbMF07Cgl9IGVs c2V7CgkJb3NfZGlzYWJsZVN1Z2dlc3Rpb25zT24oaW5wdXRJZCxmb3JtTmFtZSk7 CgkJbXNnID0gd2dNV1N1Z2dlc3RNZXNzYWdlc1sxXTsKCX0KCS8vIGNoYW5nZSBt ZXNzYWdlCgl2YXIgbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHIudG9n Z2xlKS5maXJzdENoaWxkOwoJbGluay5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3Jl YXRlVGV4dE5vZGUobXNnKSxsaW5rLmZpcnN0Q2hpbGQpOwp9CgovKiogQ2FsbCB0 aGlzIHRvIGVuYWJsZSBzdWdnZXN0aW9ucyBvbiBpbnB1dCAoaWQ9aW5wdXRJZCks IG9uIGEgZm9ybSAobmFtZT1mb3JtTmFtZSkgKi8KZnVuY3Rpb24gb3NfZW5hYmxl U3VnZ2VzdGlvbnNPbihpbnB1dElkLCBmb3JtTmFtZSl7Cglvc19pbml0SGFuZGxl cnMoIGlucHV0SWQsIGZvcm1OYW1lLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp bnB1dElkKSApOwp9CgovKiogQ2FsbCB0aGlzIHRvIGRpc2FibGUgc3VnZ2VzdGlv cyBvbiBpbnB1dCBib3ggKGlkPWlucHV0SWQpICovCmZ1bmN0aW9uIG9zX2Rpc2Fi bGVTdWdnZXN0aW9uc09uKGlucHV0SWQpewoJciA9IG9zX21hcFtpbnB1dElkXTsK CWlmKHIgIT0gbnVsbCl7CgkJLy8gY2FuY2VsL2hpZGUgcmVzdWx0cwoJCW9zX3Rp bWVyID0gbnVsbDsKCQlvc19oaWRlUmVzdWx0cyhyKTsKCQkvLyB0dXJuIGF1dG9j b21wbGV0ZSBvbiAhCgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCku c2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJvbiIpOwoJCS8vIHJlbW92ZSBk ZXNjcmlwdG9yCgkJb3NfbWFwW2lucHV0SWRdID0gbnVsbDsKCX0KfQoKLyoqIElu aXRpYWxpemF0aW9uLCBjYWxsIHVwb24gcGFnZSBvbmxvYWQgKi8KZnVuY3Rpb24g b3NfTVdTdWdnZXN0SW5pdCgpIHsKCWZvcihpPTA7aTxvc19hdXRvbG9hZF9pbnB1 dHMubGVuZ3RoO2krKyl7CgkJdmFyIGlkID0gb3NfYXV0b2xvYWRfaW5wdXRzW2ld OwoJCXZhciBmb3JtID0gb3NfYXV0b2xvYWRfZm9ybXNbaV07CgkJZWxlbWVudCA9 IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCApOwoJCWlmKGVsZW1lbnQgIT0g bnVsbCkKCQkJb3NfaW5pdEhhbmRsZXJzKGlkLGZvcm0sZWxlbWVudCk7Cgl9Cn0K Cmhvb2tFdmVudCgibG9hZCIsIG9zX01XU3VnZ2VzdEluaXQpOwo= ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=centralnotice.js Content-Type: text/javascript; charset=utf-8; name=centralnotice.js Content-Location: http://upload.wikimedia.org/centralnotice/wikipedia/es/centralnotice.js?233zz2 Content-Transfer-Encoding: Quoted-Printable function toggleNotice() { var notice =3D document.getElementById('centralNotice'); if (!wgNoticeToggleState) { notice.className =3D notice.className.replace('collapsed', 'expanded')= ; toggleNoticeCookie('0'); } else { notice.className =3D notice.className.replace('expanded', 'collapsed')= ; toggleNoticeCookie('1'); } wgNoticeToggleState =3D !wgNoticeToggleState; } function toggleNoticeStyle(elems, display) { if(elems) for(var i=3D0;i' + wgNotice+''; ------------JVjTxU9jaTpGHMRtHCEzMY Content-Disposition: inline; filename=index.js Content-Type: text/javascript; charset=utf-8; name=index.js Content-Location: http://es.wikipedia.org/w/index.php?title=-&action=raw&gen=js&useskin=monobook Content-Transfer-Encoding: 8bit /* generated javascript */ var skin = 'monobook'; var stylepath = '/skins-1.5'; /* MediaWiki:Common.js */ window.hitos = []; function hito(nombre) { window.hitos.push([nombre, new Date().getTime()]); } hito("C Common.js"); /** Execute function on page load ********************************************* * * Description: Wrapper around addOnloadHook() for backwards compatibility. * Will be removed in the near future. * Maintainers: [[User:R. Koot]] */ function addLoadEvent( f ) { addOnloadHook( f ); } /* Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]] */ var hasClass = (function () { var reCache = {}; return function (element, className) { return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className); }; })(); /** Internet Explorer bug fix ************************************************** * * Description: UNDOCUMENTED * Maintainers: [[User:Tom-]]? */ if (window.showModalDialog && document.compatMode) { var oldWidth; var docEl = document.documentElement; function fixIEScroll() { if (!oldWidth || docEl.clientWidth > oldWidth) doFixIEScroll(); else setTimeout(doFixIEScroll, 1); oldWidth = docEl.clientWidth; } function doFixIEScroll() { docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : ""; } try { document.attachEvent("onreadystatechange", fixIEScroll); attachEvent("onresize", fixIEScroll); } catch(e) { } } /** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See * [[Wikipedia:NavFrame]]. * Maintainers: [[User:R. Koot]] */ var autoCollapse = 2; var collapseCaption = "ocultar"; var expandCaption = "mostrar"; function collapseTable( tableIndex ) { var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; } var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; } Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; } Button.firstChild.data = collapseCaption; } } function createCollapseButtons() { hito("C createCollapseButtons"); var tableIndex = 0; var NavigationBoxes = new Object(); var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.style.styleFloat = "right"; Button.style.cssFloat = "right"; Button.style.fontWeight = "normal"; Button.style.textAlign = "right"; Button.style.width = "6em"; ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; } } for ( var i = 0; i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); } } hito("F createCollapseButtons"); } addOnloadHook( createCollapseButtons ); //fix edit summary prompt for undo //this code fixes the fact that the undo function combined with the "no edit summary prompter" causes problems if leaving the //edit summary unchanged //this was added by [[User:Deskana]], code by [[User:Tra]] addOnloadHook(function () { if (document.location.search.indexOf("undo=") != -1 && document.getElementsByName('wpAutoSummary')[0]) { document.getElementsByName('wpAutoSummary')[0].value=''; } }) /* == Búsqueda especial extendida (specialsearch) == Añade a la página [[Special:Search]] enlaces a buscadores externos como Yahoo, Google, MSN Live y Exalead. Trabaja en conjunto con el módulo [[MediaWiki:SpecialSearch.js]] y está basado en [[w:fr:MediaWiki:Monobook.js]].
 */

addOnloadHook( function() {
if ((wgCanonicalNamespace == "Special") && (wgCanonicalSpecialPageName == "Search"))
   importScript('MediaWiki:SpecialSearch.js');
} );

/*
== Cerrar mensajes == Ver ejemplo en [[Usuario:Chabacano/Fírmalo]], por [[Usuario:Platonides]].
 */

 addOnloadHook( function() {
 hito("C cerrar mensajes");
 if (document.getElementById("cierraPadre")) {
      document.getElementById("cierraPadre").childNodes[0].onclick= function () { 
      document.getElementById("cierraPadre").style.cursor = 'pointer';
      document.getElementById("cierraPadre").parentNode.style.display = 'none';
      return false; /*no seguir el href*/} 
   }
 hito("F cerrar mensajes");
 });


/*
== Scripts sólo para biblios ==
 */

function userInGroup(group) {
  return (wgUserGroups && (('|' + wgUserGroups.join('|') + '|').indexOf('|' + group + '|') != -1));
}

if ( userInGroup('sysop') ) 
    importScript( "MediaWiki:Sysop.js" );

/*
== Wikimedia Player == Añade reproductor en la misma página.
 */

document.write('');


/** WikiMiniAtlas *******************************************************
  *
  *  Description: WikiMiniAtlas is a popup click and drag world map.
  *               This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
  *               The script itself is located on meta because it is used by many projects.
  *               See [[Meta:WikiMiniAtlas]] for more information. 
  *  Created by: [[User:Dschwen]]
  */
 
document.write('');

/*
== Mejoras de diseño de la Portada ==
 */

/** Mejoras de diseño de la Portada *********************************************************
  *
  *  Descripción:        Varias mejoras de diseño para la portada, incluyendo un
  *                      enlace adicional a la lista completa de idiomas disponibles.
  *  Adaptado de [[en:MediaWiki:Common.js]]
  */
 
 function mainPageAppendCompleteListLink() {
     hito("C mainPageAppendCompleteListLink");
     try {
         var node = document.getElementById( "p-lang" )
                            .getElementsByTagName('div')[0]
                            .getElementsByTagName('ul')[0];
 
         var aNode = document.createElement( 'a' );
         var liNode = document.createElement( 'li' );
 
         aNode.appendChild( document.createTextNode( 'Lista completa' ) );
         aNode.setAttribute( 'href' , 'http://meta.wikimedia.org/wiki/Lista_de_Wikipedias' );
         liNode.appendChild( aNode );
         liNode.style.fontWeight = 'bold';
         node.appendChild( liNode );
      } catch(e) {
        // lets just ignore what's happened
        //return;
     }
     hito("F mainPageAppendCompleteListLink");
 }

 if ( wgPageName == "Wikipedia:Portada" ) {
        addOnloadHook( mainPageAppendCompleteListLink );
 }
/*
== Redefinición de ordenación de tablas "sortable" == Traido de la Inclopedia. Ordena nombres de meses en español y cambia puntos por comas.
*/

function ts_resortTable(lnk) {
	// get the span
	var span = lnk.getElementsByTagName('span')[0];

	var td = lnk.parentNode;
	var tr = td.parentNode;
	var column = td.cellIndex;

	var table = tr.parentNode;
	while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
		table = table.parentNode;
	if (!table) return;

	if (table.rows.length <= 1) return;

	// Generate the number transform table if it's not done already
	if (ts_number_transform_table == null) {
		ts_initTransformTable();
	}

	// Work out a type for the column
	// Skip the first row if that's where the headings are
	var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);

	var itm = "";
	for (var i = rowStart; i < table.rows.length; i++) {
		if (table.rows[i].cells.length > column) {
			itm = ts_getInnerText(table.rows[i].cells[column]);
			itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
			if (itm != "") break;
		}
	}

	// TODO: bug 8226, localised date formats
	var sortfn = ts_sort_generic;
	var preprocessor = ts_toLowerCase;
	if (/\d\d? de [a-zA-Z]+ de \d+$/.test(itm)) {
		preprocessor = ts_dateToSortKey;
	} else if (/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/.test(itm)) {
		preprocessor = ts_dateToSortKey;
	} else if (/^\d\d[\/.-]\d\d[\/.-]\d\d$/.test(itm)) {
		preprocessor = ts_dateToSortKey;
	// pound dollar euro yen currency cents
	} else if (/(^[\u00a3$\u20ac\u00a4\u00a5]|\u00a2$)/.test(itm)) {
		preprocessor = ts_currencyToSortKey;
	} else if (ts_number_regex.test(itm)) {
		preprocessor = ts_parseFloat;
	}

	var reverse = (span.getAttribute("sortdir") == 'down');

	var newRows = new Array();
	var staticRows = new Array();
	for (var j = rowStart; j < table.rows.length; j++) {
		var row = table.rows[j];
		if((" "+row.className+" ").indexOf(" unsortable ") < 0) {
			var keyText = ts_getInnerText(row.cells[column]);
			var oldIndex = (reverse ? -j : j);
			var preprocessed = preprocessor( keyText );

			newRows[newRows.length] = new Array(row, preprocessed, oldIndex);
		} else staticRows[staticRows.length] = new Array(row, false, j-rowStart);
	}

	newRows.sort(sortfn);

	var arrowHTML;
	if (reverse) {
		arrowHTML = '↓';
		newRows.reverse();
		span.setAttribute('sortdir','up');
	} else {
		arrowHTML = '↑';
		span.setAttribute('sortdir','down');
	}

	for (var i = 0; i < staticRows.length; i++) {
		var row = staticRows[i];
		newRows.splice(row[2], 0, row);
	}

	// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
	// don't do sortbottom rows
	for (var i = 0; i < newRows.length; i++) {
		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
			table.tBodies[0].appendChild(newRows[i][0]);
	}
	// do sortbottom rows only
	for (var i = 0; i < newRows.length; i++) {
		if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
			table.tBodies[0].appendChild(newRows[i][0]);
	}

	// Delete any other arrows there may be showing
	var spans = getElementsByClassName(tr, "span", "sortarrow");
	for (var i = 0; i < spans.length; i++) {
		spans[i].innerHTML = '↓';
	}
	span.innerHTML = arrowHTML;

	if (ts_alternate_row_colors) {
		ts_alternate(table);
	}
}

function ts_dateToSortKey(date) {	
	if (date.length > 14) {
		date = date.toLowerCase();
		if (date.charAt(1) == " " || date.charAt(1) == "-") {
			var dia = '0' + date.charAt(0);
		} else {
			var dia = date.substr(0, 2);
		}
		var iniciomes = date.indexOf(" de ") + 4;
		var finmes = date.lastIndexOf(" de ");
		var longmes = finmes - iniciomes;
		
		switch (date.substr(iniciomes, longmes)) {
			case "enero": var mes = "01"; break;
			case "febrero": var mes = "02"; break;
			case "marzo": var mes = "03"; break;
			case "abril": var mes = "04"; break;
			case "mayo": var mes = "05"; break;
			case "junio": var mes = "06"; break;
			case "julio": var mes = "07"; break;
			case "agosto": var mes = "08"; break;
			case "septiembre": var mes = "09"; break;
			case "octubre": var mes = "10"; break;
			case "noviembre": var mes = "11"; break;
			case "diciembre": var mes = "12"; break;
		}

		for (var anno = date.substr(finmes + 4); anno.length < 4; anno = '0' + anno);
		return anno + mes + dia;
	} else if (date.length == 10) {
		if (ts_europeandate == false) {
			return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
		} else {
			return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
		}
	} else if (date.length == 8) {
		yr = date.substr(6,2);
		if (parseInt(yr) < 50) { 
			yr = '20'+yr; 
		} else { 
			yr = '19'+yr; 
		}
		if (ts_europeandate == true) {
			return yr+date.substr(3,2)+date.substr(0,2);
		} else {
			return yr+date.substr(0,2)+date.substr(3,2);
		}
	}
	return "00000000";
}

function ts_parseFloat(num) {
        if (!num) return 0;
        num = num.replace(/\./g, "");
        num = num.replace(/,/, ".");
        num = parseFloat(num);
        return (isNaN(num) ? 0 : num);
}

function ts_sort_generic(a,b) {
  if ( (typeof a[1] == "string") && (typeof b[1] == "string") ) {
    /* Don't do this if it's eg. 'number'. We don't want that and number doesn't have .toLowerCase() */
    var aa = a[1].toLowerCase();
    var bb = b[1].toLowerCase();
    return(aa.localeCompare(bb));
  } else {
    return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]; //Original ts_sort_generic
  }
}


addOnloadHook ( function() {
     hito("C función extraña");
     var n = Math.round(Math.random() * 9); //10 opciones

       for (i=0; i < document.styleSheets.length; i++) {
         if (document.styleSheets[0].href.substring(0, wgServer.length) == wgServer) { //NS_ERROR_DOM_SECURITY_ERR: http://permalink.gmane.org/gmane.science.linguistics.wikipedia.technical/40588

             if (document.styleSheets[0].cssRules) {
                for (i=document.styleSheets.length-1; i >= 0; i--) {
                    try {
                         //Añadir al final (Gecko)
                         document.styleSheets[i].insertRule('.rotate_0 { display: none }', document.styleSheets[i].cssRules.length);
                         document.styleSheets[i].insertRule('.rotate_' + n + ' { display: block; }', document.styleSheets[i].cssRules.length);
                         break;
                     } catch(e) {
                         //Ignorar el error y probar con la hoja de estilos anterior.
                         //Así, por ejemplo [[Usuario:Axxgreazz/Monobook-Suite/popups.js]] carga una hoja de estilos desde en.wikipedia.org, lo que provoca un error 'Access to URI denied' (NS_ERROR_DOM_BAD_URI).
                     }
                 }
             } else if (document.styleSheets[0].rules) { //IE
                document.styleSheets[document.styleSheets.length-1].addRule('.rotate_0', 'display: none');
                document.styleSheets[document.styleSheets.length-1].addRule('.rotate_' + n, 'display: block');
             }
             break;
        }
  }
  hito("F función extraña");
} );

var wma_settings =
{
buttonImage: "http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Erioll_world.svg/15px-Erioll_world.svg.png"
}







// == Código del plegado/desplegado de plantillas ==

var NavigationBarHide = 'Plegar';
var NavigationBarShow = 'Desplegar';

var NavigationBarShowDefault = 0;

document.write('