From: <Guardado por Microsoft Internet Explorer 7>
Subject: =?Windows-1252?Q?Blog_de_=C1lvaro_Valverde:_De_Extremadura?=
Date: Wed, 12 Aug 2009 08:35:23 +0200
MIME-Version: 1.0
Content-Type: multipart/related;
	type="multipart/alternative";
	boundary="----=_NextPart_000_0000_01CA1B27.D5B03590"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

This is a multi-part message in MIME format.

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/icon18_email.gif

R0lGODlhEgANAOMAAIqKioCAgOXl5f////Ly8urq6uTk5AAAAMzMzLS0tBoaGjMzM2ZmZk1NTf//
/////ywAAAAAEgANAAAEWRDISSsIk+jN+QUIQAxkaRIgVoSjWaKIoa6iOxygIQNFz56Lg27X89UO
isMiqZv1AAnRgdFYHoROqEAAQCqZxIJ2SxYsA03euLw9CBJozJpdhmMC+Lx+j48AADs=

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/icon18_edit_allbkg.gif

R0lGODlhEgASAOMAANDHu6pqNFRTUOWjJQAAABYWFhAJA9CPKUk1ErmIF+KjUygVBjMmBv/BMfy2
I9DHuyH5BAEAAA8ALAAAAAASABIAAARP8MlJq72TYLyM3hQRBB4oFcoxlhujAMAKIk6jKMKHIY0z
qLoLz3dIFEAMBzGBABkGy+aGkCAGpBjRcmEKAFKB4KUAg4kvhPJ5TCBgTfBKBAA7

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Location: http://buttons.blogger.com/bloggerbutton1.gif

R0lGODlhWAAfAOYAAPjx6P9mAABDev///+jcy8i1n+/m2e3j1ezi1O7k1vTr4fPr4PTs4vXt4vLp
3vPq3/Hp3fHo2/Dn2kJxl7bDy/+zgOfl4SFaiRFPgYSgtf/Zv/8AAP+MQFN9nw5NgNfa2XSUrf+W
UB1XhjJmkDxsk8bO0jxskv9wEGOJpjtrkUFwlrW/xJWrvLS+wrW/w/ngy//Gn/yaV9LSzrW/xdXW
0ztskv/iz0p2mPmWUsTKy/5uDvDUu0t3mZeruLbAxkt2mdXV0sTJybO/xv/s3/HWvlqAnvmVUYae
r4efsP9vD1F7naW0vcTKyniVqmmLpdTU0ZWptf+DMJirueTg2ixhjNTW1Et2mC1ijYegsniWq7O+
xv/172iKo6e2v5aruKSzu7TAxsPJzP+fYJaptsPIyHmWrGqMpkp1l2mLpLO9wQAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5
BAEAABsALAAAAABYAB8AAAf/gBsbBISFhoeIiYqLjI2OiIKDCJOUlZaXmJmam5ydlwSDB6KjpKWm
p6ipqqusqAUECbE7RgG1tre4tkY7sb2+v8DBwsPEwa8GBkQ6uczMOkTI0SkpUNFcKWdf0dvc3d7f
4NHHBjjN5rg43Gkp2ylHRyLh8vPzrxIS5/m29/wtNfwSarSQIUDGGA8iyCC5IcEDEn8Sbghg2IJK
QYAYM2q89ypCBGYhKogUKeaEOY8oXZhAGcFEERErPSxBYyKIBxcCrDQpskREBBEuXIgIwrKo0aMo
X0GAgOuEhgFQow7YEqLZ0qsrTFyFYALLCghMBEBYIVaAkx8efnjJIqDtiqxb/+PKnbv1lQMHuJ5K
3RuF2d2/M0j8dUBixl8BT3oIJuGhhwgROXKIACx4sOXLmP++evDgVoi9oGEw40z6igcppEn4IG3G
g4AuD8oIAMLDA+faHoD4IEG6t+/fwB+8WrDgVoWoMDgo/wx1CDPi0KNLh05jyvToNGhc385d+isF
CoxHrVrrxJCoJnGBX8++vZYw7ePLn0+f/isGDMRHtaFBr1QNHNyC34BKqGCgEkLgJ4QAKgzo4IMQ
RijhhPi90kAD+oEGWgW3XOhhWyAKUEUDYDDo4Ykopqjiiixe+AoAAGSooVQc2gLjjW0BYEEHAmQA
AAUCTHDjkEQWaeSRSML4Yv+Mthy3X3/92UDjLUTmCAAIPf4YJIwWoNAWChbAWMIFAoCQQQdcThAk
CxN8AGMGGAQZJgAdZOAlC0QumSF5nkVVYy1V9ggCBheECaSQAKh5AZmIknlBnALA6CWhbVEAAAsC
XDDClgC09ailQ+rZJHLKlcoBDH5SOWSIZcJ4qI4CYGCBBXFa8EGsWkYKAJkl0CqApZu6SWaYbX0w
Z6gEwNjnjHsFaOOqv1KwKQhaCvlqotFyaqWValraVgYZkOmtrkWKaot/zGqAS6Cu5vjqtd1eu62u
3XYa5AT4umlluckyaYtTzA6gQXrP4qhrBu5uaUGss9Z6Kwa5wsirr8AKUALHu0aa69lIHFfg7LrQ
4tsWmkBi4KOijEoswAiQSpopmb8CgDAGE7AM47559quPPkRCOvKcm6K5489ikomlrhaoWXPMMsPc
gZsYQJxxvzHsbE4MSWaNJM4w1qs1vzC+kITVuSTxwtdfs2AmjxeIiUIGR7uJNrI3vlA12bXEcPbc
WfPYFgZ4yhwitXzfuGThiPNdAgUUHAvAB4zLnXgBGxSQ+OWYZ65kJAV07vnnoIcu+uikl2766aFH
ovrqrLfu+uuwxy777IIEAgA7

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://s11.sitemeter.com/meter.asp?site=s11ltDDDlhf

R0lGODlhUAAPANUAAD8/P5+fn+Xs4W9vb36eaouneT5tH/L18HGUW9ji0qW7lpOTk+fn58/Pz7LF
pYeHh0t3LktLS1iAPVdXV8PDw2NjY/Pz89vb23t7e7/OtLe3t6urq5yok7TAq5ixiGWKTMzYwzFj
EAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABQAA8AAAb/QJFw
SCwaj8ikcskcjp7QqHRKrVqv2Kwwy+16u4kP4jDdUikDy3edzXgS04TH4QmFQGVRdRNhNDZscQpr
dh9TCHaId3lSDQ1qTwMDUBcNDFEgcCOZUAcgeCMehk8CIAKYZFGFUx+FdqBRZk8VABEYAQADALsB
DwC0GiAhEnYExCEFmwYQBhIFdiEezxDRwgSLI6UHq1AgB60h4LBQsg0AFCMMuCOSIxoAFyMBEdYj
zwQj1wcG+AIGCqI2LVIQwsGwUyP2hbgWDso1A+DEMXrCIEIFDfIAsJuEYUKAXgA4LBKGR1gdAh48
QEBpyIOBlM/qZOjmKty9iDUVGDCAcISsuhEXMAB4sK7dAI8fA3QYybROgZQe3LSEAHXOnW8GnoWr
ubUrzmjk9EhZAKDopAcRIAksyZTgICgeJIwgmGqtsBAGaoLzqteOh7BQKNyq4FEjrgUNInhcsIDk
2rXXUCIQQLBAhmUpCZC8S41vX89/n8i6sGDAAj8BRlh4MIABg9IPKAjwcGp2bdojHCD44OHAgQIf
TIlCoMD2iN0JgIMA7sDBBwXOC4SRLiYBgjGAA2nfvqaJ9+/gwxsJAgA7

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: http://www.blogger.com/img/navbar/1/btn_search_this.png

iVBORw0KGgoAAAANSUhEUgAAAGAAAAAPCAMAAAAs5DqFAAAAdVBMVEUfWIwJQ3h+seRhlckmX5MJ
QnhLgbUQSn88c6dSiLtonNAIQngYUYYIQndCd6t3qt0uZpo1bKFCeKxvo9ZDeq4/cqQwYpJCeKsS
S4ARRHdZjsISSoBDeKw+caMwYpMvYpI/caMlXJESSn0mXZElXZESSX0mXZKP7sSuAAABZUlEQVR4
XrWS14rlQAwFVerknH3jhM3//4mLLJjdl4F58cFGgS6KNpbfb9+G5ay8Xu7y/uvJabn9vMh+aznR
sMvSnyho20GufYJ51JmoqhGyZqwfZ5BVM1FBI7CpasBHVKNjcJAbhA1sl73U0DPIQoJxKsVISxMa
Q6gU1orun8CLj2zBMRcwqQmwXaeCvQKJqwy9CZqDjBGKzlqsrxtEC77/EPjoAsfAT7sguqhqsKR2
kZeUQFadiBoCTMrRN2P0Ox37D4GPLnDMT6z1/wK2EFUhschgAnj4x4U8hjFbnwOiHXz6iRxzAUXF
BIgWmop5JbpArqmFKj7q4+6FUMfaZHTa0dQxfiKom+IYGFmpGNqxbpN2dGNVKdAO8mKCHOqChBCE
IEiwhzxT6lBZb1vw4iMhiGNwkBPkEGbkYa2VDKlf/Dc9Le0ir7cTBf1tl8v3Z5vS/Yvxg1/O88+b
/Ljs1+Ws7O/3v7uMJw2wTNG0AAAAAElFTkSuQmCC

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: text/css;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/static/v1/v-css/navbar/2461938849-navbar1_bundle.css

BODY {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 100%; PADDING-BOTTOM: =
0px; MARGIN: 0px; PADDING-TOP: 0px; FONT-FAMILY: "Trebuchet =
MS",Verdana,Arial,Sans-serif; WHITE-SPACE: nowrap
}
A {
	TEXT-DECORATION: none
}
#b-navbar {
	FONT-SIZE: 0.85em; LINE-HEIGHT: 0.85em; BORDER-BOTTOM: #024 1px solid; =
HEIGHT: 29px
}
#b-navbar #b-logo {
	LEFT: 5px; POSITION: absolute; TOP: 0.15em
}
#b-navbar #b-logo #navbar-logo {
	WIDTH: 24px; HEIGHT: 24px
}
#b-navbar #b-logo SPAN {
	DISPLAY: block; LEFT: -9000px; POSITION: absolute
}
#b-search {
	PADDING-RIGHT: 1em; PADDING-LEFT: 0px; PADDING-BOTTOM: 3px; MARGIN: 0px =
0px 0px 34px; PADDING-TOP: 4px
}
#b-search-img {
	FLOAT: left; WIDTH: 3px; HEIGHT: 3px
}
#b-search TABLE {
	MARGIN-LEFT: 0.5em
}
#b-search TD {
	VERTICAL-ALIGN: middle
}
#b-query {
	MARGIN: 0px 0.5em 0px 0px
}
.btn {
	PADDING-RIGHT: 0px; BORDER-TOP: 1px solid; PADDING-LEFT: 0px; =
FONT-SIZE: 0.8em; PADDING-BOTTOM: 0px; MARGIN: 0px 0.5em 0px 1px; =
TEXT-TRANSFORM: uppercase; CURSOR: hand; LINE-HEIGHT: 0.85em; =
PADDING-TOP: 0px; BORDER-BOTTOM: 1px solid; WHITE-SPACE: nowrap
}
.btn DIV {
	BORDER-RIGHT: 1px solid; PADDING-RIGHT: 0.3em; PADDING-LEFT: 0.3em; =
PADDING-BOTTOM: 0.21em; MARGIN: 0px -1px; BORDER-LEFT: 1px solid; =
PADDING-TOP: 0.21em; POSITION: relative; HEIGHT: 0.85em
}
.btn DIV IMG {
	LEFT: 0.3em; POSITION: absolute; TOP: 0.2em
}
#bt-unflag-body {
	DISPLAY: none
}
.flagged #bt-flag-body {
	DISPLAY: none
}
.flagged #bt-unflag-body {
	DISPLAY: block
}
#flagi {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #333 1px =
solid; DISPLAY: none; PADDING-LEFT: 4px; FONT-SIZE: 0.7em; Z-INDEX: 300; =
PADDING-BOTTOM: 4px; BORDER-LEFT: #333 1px solid; COLOR: #000; =
LINE-HEIGHT: 0.8em; PADDING-TOP: 4px; BORDER-BOTTOM: #333 1px solid; =
TOP: 3px; BACKGROUND-COLOR: #ff9
}
#unflagi {
	BORDER-RIGHT: #333 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #333 1px =
solid; DISPLAY: none; PADDING-LEFT: 4px; FONT-SIZE: 0.7em; Z-INDEX: 300; =
PADDING-BOTTOM: 4px; BORDER-LEFT: #333 1px solid; COLOR: #000; =
LINE-HEIGHT: 0.8em; PADDING-TOP: 4px; BORDER-BOTTOM: #333 1px solid; =
TOP: 3px; BACKGROUND-COLOR: #ff9
}
#flagi A {
	COLOR: #36c; TEXT-DECORATION: underline
}
#unflagi A {
	COLOR: #36c; TEXT-DECORATION: underline
}
.b-mobile {
	DISPLAY: none
}
#b-sms {
	PADDING-RIGHT: 7px; PADDING-LEFT: 7px; FONT-SIZE: 100%; PADDING-BOTTOM: =
4px; MARGIN: 0px 0px 0px 100px; LINE-HEIGHT: 1em; PADDING-TOP: 4px; =
TEXT-ALIGN: left
}
#b-sms A {
	LINE-HEIGHT: 1em; MARGIN-RIGHT: 0.5em
}
#b-sms A:hover {
	TEXT-DECORATION: underline
}

@media Handheld   =20
{
BODY .b-mobile {
	DISPLAY: block
}
BODY #b-search {
	DISPLAY: none
}
BODY #flagi {
	DISPLAY: none
}
BODY #unflagi {
	DISPLAY: none
}
BODY #b-navbar #b-logo SPAN {
	DISPLAY: none
}
    }
.btn .flag-text {
	PADDING-LEFT: 10px
}
.btn .flag {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
1px 0px 0px; WIDTH: 6px; PADDING-TOP: 0px; HEIGHT: 8px
}
BODY {
	COLOR: #fff
}
A {
	COLOR: #9cf
}
.btn DIV {
	COLOR: #9cf
}
A:hover {
	COLOR: #fff
}
#navbar-logo {
	BACKGROUND: url(/img/navbar/1/navbar_sprite.png) no-repeat -6px 0px
}
#b-navbar {
	BORDER-BOTTOM: #024 1px solid; BACKGROUND-COLOR: #036
}
#b-search {
	BACKGROUND: #147
}
#b-search-img {
	BACKGROUND: url(/img/navbar/1/navbar_sprite.png) #147 no-repeat 0px 0px
}
#b-query {
	BORDER-RIGHT: #47a 1px solid; BORDER-TOP: #47a 1px solid; BORDER-LEFT: =
#47a 1px solid; BORDER-BOTTOM: #47a 1px solid
}
.btn {
	BORDER-LEFT-COLOR: #47a; BORDER-BOTTOM-COLOR: #47a; BORDER-TOP-COLOR: =
#47a; BORDER-RIGHT-COLOR: #47a
}
.btn DIV {
	BORDER-LEFT-COLOR: #47a; BORDER-BOTTOM-COLOR: #47a; BORDER-TOP-COLOR: =
#47a; BORDER-RIGHT-COLOR: #47a
}
.btn DIV:hover {
	BACKGROUND-COLOR: #47a
}
.btn #bt-flag-body .flag {
	BACKGROUND: url(/img/navbar/1/navbar_sprite.png) no-repeat 0px -11px
}
.btn #bt-unflag-body .flag {
	BACKGROUND: url(/img/navbar/1/navbar_sprite.png) no-repeat 0px -3px
}

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/static/v1/v-app/scripts/4095335807-common.js

// Copied from .../google3/javascript/common.js=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// This file contains common utilities and basic javascript =
infrastructure.=0A=
//=0A=
// Notes:=0A=
// * Press 'D' to toggle debug mode.=0A=
//=0A=
// Functions:=0A=
//=0A=
// - Assertions=0A=
// DEPRECATED: Use assert.js=0A=
// AssertTrue(): assert an expression. Throws an exception if false.=0A=
// Fail(): Throws an exception. (Mark block of code that should be =
unreachable)=0A=
// AssertEquals(): assert that two values are equal.=0A=
// AssertNumArgs(): assert number of arguments for the function=0A=
// AssertType(): assert that a value has a particular type=0A=
//=0A=
// - Cookies=0A=
// SetCookie(): Sets a cookie.=0A=
// GetCookie(): Gets a cookie value.=0A=
//=0A=
// - Dynamic HTML/DOM utilities=0A=
// MaybeGetElement(): get an element by its id=0A=
// GetElement(): get an element by its id=0A=
// ShowElement(): Show/hide element by setting the "display" css =
property.=0A=
// ShowBlockElement(): Show/hide block element=0A=
// AppendNewElement(): Create and append a html element to a parent node.=0A=
// HasClass(): check if element has a given class=0A=
// AddClass(): add a class to an element=0A=
// RemoveClass(): remove a class from an element=0A=
//=0A=
// - Window/Screen utiltiies=0A=
// GetPageOffsetLeft(): get the X page offset of an element=0A=
// GetPageOffsetTop(): get the Y page offset of an element=0A=
// GetPageOffset(): get the X and Y page offsets of an element=0A=
// GetPageOffsetRight() : get X page offset of the right side of an =
element=0A=
// GetPageOffsetBottom() : get Y page offset of the bottom of an element=0A=
// GetScrollTop(): get the vertical scrolling pos of a window.=0A=
// GetScrollLeft(): get the horizontal scrolling pos of a window=0A=
//=0A=
// - String utilties=0A=
// HtmlEscape(): html escapes a string=0A=
// HtmlUnescape(): remove html-escaping.=0A=
// CollapseWhitespace(): collapse multiple whitespace into one =
whitespace.=0A=
// Trim(): trim whitespace on ends of string=0A=
// IsEmpty(): check if CollapseWhiteSpace(String) =3D=3D ""=0A=
// IsLetterOrDigit(): check if a character is a letter or a digit=0A=
//=0A=
// - TextArea utilities=0A=
// SetCursorPos(): sets the cursor position in a textfield=0A=
//=0A=
// - Array utilities=0A=
// FindInArray(): do a linear search to find an element value.=0A=
// DeleteArrayElement(): return a new array with a specific value =
removed.=0A=
//=0A=
// - Miscellaneous=0A=
// IsDefined(): returns true if argument is not undefined=0A=
//-----------------------------------------------------------------------=
-=0A=
=0A=
// browser detection=0A=
var agent =3D navigator.userAgent.toLowerCase();=0A=
var is_ie =3D (agent.indexOf('msie') !=3D -1);=0A=
//var is_ie5 =3D (agent.indexOf('msie 5') !=3D -1 && document.all);=0A=
var is_konqueror =3D (agent.indexOf('konqueror') !=3D -1);=0A=
var is_safari =3D (agent.indexOf('safari') !=3D -1) || is_konqueror;=0A=
var is_nav =3D !is_ie && !is_safari && (agent.indexOf('mozilla') !=3D =
-1);=0A=
var is_win =3D (agent.indexOf('win') !=3D -1);=0A=
delete agent;=0A=
=0A=
=0A=
var BACKSPACE_KEYCODE =3D 8;=0A=
var COMMA_KEYCODE =3D 188;                // ',' key=0A=
var DEBUG_KEYCODE =3D 68;                 // 'D' key=0A=
var DELETE_KEYCODE =3D 46;=0A=
var DOWN_KEYCODE =3D 40;                  // DOWN arrow key=0A=
var ENTER_KEYCODE =3D 13;                 // ENTER key=0A=
var ESC_KEYCODE =3D 27;                   // ESC key=0A=
var LEFT_KEYCODE =3D 37;                  // LEFT arrow key=0A=
var RIGHT_KEYCODE =3D 39;                 // RIGHT arrow key=0A=
var SPACE_KEYCODE =3D 32;                 // space bar=0A=
var TAB_KEYCODE =3D 9;                    // TAB key=0A=
var UP_KEYCODE =3D 38;                    // UP arrow key=0A=
var SHIFT_KEYCODE =3D 16;=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Assertions=0A=
// DEPRECATED: Use assert.js=0A=
//-----------------------------------------------------------------------=
-=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 */=0A=
function raise(msg) {=0A=
  if (typeof Error !=3D 'undefined') {=0A=
    throw new Error(msg || 'Assertion Failed');=0A=
  } else {=0A=
    throw (msg);=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 *=0A=
 * Fail() is useful for marking logic paths that should=0A=
 * not be reached. For example, if you have a class that uses=0A=
 * ints for enums:=0A=
 *=0A=
 * MyClass.ENUM_FOO =3D 1;=0A=
 * MyClass.ENUM_BAR =3D 2;=0A=
 * MyClass.ENUM_BAZ =3D 3;=0A=
 *=0A=
 * And a switch statement elsewhere in your code that=0A=
 * has cases for each of these enums, then you can=0A=
 * "protect" your code as follows:=0A=
 *=0A=
 * switch(type) {=0A=
 *   case MyClass.ENUM_FOO: doFooThing(); break;=0A=
 *   case MyClass.ENUM_BAR: doBarThing(); break;=0A=
 *   case MyClass.ENUM_BAZ: doBazThing(); break;=0A=
 *   default:=0A=
 *     Fail("No enum in MyClass with value: " + type);=0A=
 * }=0A=
 *=0A=
 * This way, if someone introduces a new value for this enum=0A=
 * without noticing this switch statement, then the code will=0A=
 * fail if the logic allows it to reach the switch with the=0A=
 * new value, alerting the developer that he should add a=0A=
 * case to the switch to handle the new value he has introduced.=0A=
 *=0A=
 * @param {string} opt_msg to display for failure=0A=
 *                 DEFAULT: "Assertion failed"=0A=
 */=0A=
function Fail(opt_msg) {=0A=
  if (opt_msg =3D=3D=3D undefined) opt_msg =3D 'Assertion failed';=0A=
  if (IsDefined(DumpError)) DumpError(opt_msg + '\n');=0A=
  raise(opt_msg);=0A=
}=0A=
=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 *=0A=
 * Asserts that an expression is true (non-zero and non-null).=0A=
 *=0A=
 * Note that it is critical not to pass logic=0A=
 * with side-effects as the expression for AssertTrue=0A=
 * because if the assertions are removed by the=0A=
 * JSCompiler, then the expression will be removed=0A=
 * as well, in which case the side-effects will=0A=
 * be lost. So instead of this:=0A=
 *=0A=
 *  AssertTrue( criticalComputation() );=0A=
 *=0A=
 * Do this:=0A=
 *=0A=
 *  var result =3D criticalComputation();=0A=
 *  AssertTrue(result);=0A=
 *=0A=
 * @param {anything} expression to evaluate=0A=
 * @param {string}   opt_msg to display if the assertion fails=0A=
 *=0A=
 */=0A=
function AssertTrue(expression, opt_msg) {=0A=
  if (!expression) {=0A=
    if (opt_msg =3D=3D=3D undefined) opt_msg =3D 'Assertion failed';=0A=
    Fail(opt_msg);=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 *=0A=
 * Asserts that two values are the same.=0A=
 *=0A=
 * @param {anything} val1=0A=
 * @param {anything} val2=0A=
 * @param {string} opt_msg to display if the assertion fails=0A=
 */=0A=
function AssertEquals(val1, val2, opt_msg) {=0A=
  if (val1 !=3D val2) {=0A=
    if (opt_msg =3D=3D=3D undefined) {=0A=
      opt_msg =3D "AssertEquals failed: <" + val1 + "> !=3D <" + val2 + =
">";=0A=
    }=0A=
    Fail(opt_msg);=0A=
  }=0A=
}=0A=
=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 *=0A=
 * Asserts that a value is of the provided type.=0A=
 *=0A=
 *   AssertType(6, Number);=0A=
 *   AssertType("ijk", String);=0A=
 *   AssertType([], Array);=0A=
 *   AssertType({}, Object);=0A=
 *   AssertType(ICAL_Date.now(), ICAL_Date);=0A=
 *=0A=
 * @param {anything} value=0A=
 * @param {constructor function} type=0A=
 * @param {string} opt_msg to display if the assertion fails=0A=
 */=0A=
function AssertType(value, type, opt_msg) {=0A=
  // for backwards compatability only=0A=
  if (typeof value =3D=3D type) return;=0A=
=0A=
  if (value || value =3D=3D "") {=0A=
    try {=0A=
      if (type =3D=3D AssertTypeMap[typeof value] || value instanceof =
type) return;=0A=
    } catch (e) { /* failure, type was an illegal argument to instanceof =
*/ }=0A=
  }=0A=
  if (opt_msg =3D=3D=3D undefined) {=0A=
    if (typeof type =3D=3D 'function') {=0A=
      var match =3D type.toString().match(/^\s*function\s+([^\s\{]+)/);=0A=
      if (match) type =3D match[1];=0A=
    }=0A=
    opt_msg =3D "AssertType failed: <" + value + "> not typeof "+ type;=0A=
  }=0A=
  Fail(opt_msg);=0A=
}=0A=
=0A=
var AssertTypeMap =3D {=0A=
  'string'  : String,=0A=
  'number'  : Number,=0A=
  'boolean' : Boolean=0A=
};=0A=
=0A=
/**=0A=
 * DEPRECATED: Use assert.js=0A=
 *=0A=
 * Asserts that the number of arguments to a=0A=
 * function is num. For example:=0A=
 *=0A=
 * function myFunc(one, two, three) [=0A=
 *   AssertNumArgs(3);=0A=
 *   ...=0A=
 * }=0A=
 *=0A=
 * myFunc(1, 2); // assertion fails!=0A=
 *=0A=
 * Note that AssertNumArgs does not take the function=0A=
 * as an argument; it is simply used in the context=0A=
 * of the function.=0A=
 *=0A=
 * @param {int} number of arguments expected=0A=
 * @param {string} opt_msg to display if the assertion fails=0A=
 */=0A=
function AssertNumArgs(num, opt_msg) {=0A=
  var caller =3D AssertNumArgs.caller;  // This is not supported in =
safari 1.0=0A=
  if (caller && caller.arguments.length !=3D num) {=0A=
    if (opt_msg =3D=3D=3D undefined) {=0A=
      opt_msg =3D caller.name + ' expected ' + num + ' arguments '=0A=
                  + ' but received ' + caller.arguments.length;=0A=
    }=0A=
    Fail(opt_msg);=0A=
  }=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Cookies=0A=
//-----------------------------------------------------------------------=
-=0A=
var ILLEGAL_COOKIE_CHARS_RE =3D /[\s;]/=0A=
/**=0A=
 * Sets a cookie.=0A=
 * The max_age can be -1 to set a session cookie. To expire cookies, use=0A=
 * ExpireCookie() instead.=0A=
 *=0A=
 * @param name The cookie name.=0A=
 * @param value The cookie value.=0A=
 * @param opt_max_age The max age in seconds (from now). Use -1 to set a=0A=
 *   session cookie. If not provided, the default is -1 (i.e. set a =
session=0A=
 *   cookie).=0A=
 * @param opt_path The path of the cookie, or null to not specify a path=0A=
 *   attribute (browser will use the full request path). If not =
provided, the=0A=
 *   default is '/' (i.e. path=3D/).=0A=
 * @param opt_domain The domain of the cookie, or null to not specify a =
domain=0A=
 *   attribute (brower will use the full request host name). If not =
provided,=0A=
 *   the default is null (i.e. let browser use full request host name).=0A=
 * @return Void.=0A=
 */=0A=
function SetCookie(name, value, opt_max_age, opt_path, opt_domain) {=0A=
=0A=
  value =3D '' + value;=0A=
  AssertTrue((typeof name =3D=3D 'string' &&=0A=
              typeof value =3D=3D 'string' &&=0A=
              !name.match(ILLEGAL_COOKIE_CHARS_RE) &&=0A=
              !value.match(ILLEGAL_COOKIE_CHARS_RE)),=0A=
             'trying to set an invalid cookie');=0A=
=0A=
  if (!IsDefined(opt_max_age)) opt_max_age =3D -1;=0A=
  if (!IsDefined(opt_path)) opt_path =3D '/';=0A=
  if (!IsDefined(opt_domain)) opt_domain =3D null;=0A=
=0A=
  var domain_str =3D (opt_domain =3D=3D null) ? '' : ';domain=3D' + =
opt_domain;=0A=
  var path_str =3D (opt_path =3D=3D null) ? '' : ';path=3D' + opt_path;=0A=
=0A=
  var expires_str;=0A=
=0A=
  // Case 1: Set a session cookie.=0A=
  if (opt_max_age < 0) {=0A=
    expires_str =3D '';=0A=
=0A=
  // Case 2: Expire the cookie.=0A=
  // Note: We don't tell people about this option in the function doc =
because=0A=
  // we prefer people to use ExpireCookie() to expire cookies.=0A=
  } else if (opt_max_age =3D=3D 0) {=0A=
    // Note: Don't use Jan 1, 1970 for date because NS 4.76 will try to =
convert=0A=
    // it to local time, and if the local time is before Jan 1, 1970, =
then the=0A=
    // browser will ignore the Expires attribute altogether.=0A=
    var pastDate =3D new Date(1970, 1 /*Feb*/, 1);  // Feb 1, 1970=0A=
    expires_str =3D ';expires=3D' + pastDate.toUTCString();=0A=
=0A=
  // Case 3: Set a persistent cookie.=0A=
  } else {=0A=
    var futureDate =3D new Date(Now() + opt_max_age * 1000);=0A=
    expires_str =3D ';expires=3D' + futureDate.toUTCString();=0A=
  }=0A=
=0A=
  document.cookie =3D name + '=3D' + value + domain_str + path_str + =
expires_str;=0A=
}=0A=
=0A=
/** Returns the value for the first cookie with the given name=0A=
 * @param name : string=0A=
 * @return a string or the empty string if no cookie found.=0A=
 */=0A=
function GetCookie(name) {=0A=
  var nameeq =3D name + "=3D";=0A=
  var cookie =3D String(document.cookie);=0A=
  for (var pos =3D -1; (pos =3D cookie.indexOf(nameeq, pos + 1)) >=3D =
0;) {=0A=
    var i =3D pos;=0A=
    // walk back along string skipping whitespace and looking for a ; =
before=0A=
    // the name to make sure that we don't match cookies whose name =
contains=0A=
    // the given name as a suffix.=0A=
    while (--i >=3D 0) {=0A=
      var ch =3D cookie.charAt(i);=0A=
      if (ch =3D=3D ';') {=0A=
        i =3D -1;  // indicate success=0A=
        break;=0A=
      } else if (' \t'.indexOf(ch) < 0) {=0A=
        break;=0A=
      }=0A=
    }=0A=
    if (-1 =3D=3D=3D i) {  // first cookie in the string or we found a ;=0A=
      var end =3D cookie.indexOf(';', pos);=0A=
      if (end < 0) { end =3D cookie.length; }=0A=
      return cookie.substring(pos + nameeq.length, end);=0A=
    }=0A=
  }=0A=
  return "";=0A=
}=0A=
=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Time=0A=
//-----------------------------------------------------------------------=
-=0A=
function Now() {=0A=
  return (new Date()).getTime();=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Dynamic HTML/DOM utilities=0A=
//-----------------------------------------------------------------------=
-=0A=
// Gets a element by its id, may return null=0A=
function MaybeGetElement(win, id) {=0A=
  return win.document.getElementById(id);=0A=
}=0A=
=0A=
// Same as MaybeGetElement except that it throws an exception if it's =
null=0A=
function GetElement(win, id) {=0A=
  var el =3D win.document.getElementById(id);=0A=
  if (!el) {=0A=
    DumpError("Element " + id + " not found.");=0A=
  }=0A=
  return el;=0A=
}=0A=
=0A=
// Gets elements by its id/name=0A=
// IE treats getElementsByName as searching over ids, while Moz use =
names.=0A=
// so tags must have both id and name as the same string=0A=
function GetElements(win, id) {=0A=
  return win.document.getElementsByName(id);=0A=
}=0A=
=0A=
// Show/hide an element.=0A=
function ShowElement(el, show) {=0A=
  el.style.display =3D show ? "" : "none";=0A=
}=0A=
=0A=
// Show/hide a block element.=0A=
// ShowElement() doesn't work if object has an initial class with =
display:none=0A=
function ShowBlockElement(el, show) {=0A=
  el.style.display =3D show ? "block" : "none";=0A=
}=0A=
=0A=
// Show/hide an inline element.=0A=
// ShowElement() doesn't work when an element starts off display:none.=0A=
function ShowInlineElement(el, show) {=0A=
  el.style.display =3D show ? "inline" : "none";=0A=
}=0A=
=0A=
// Append a new HTML element to a HTML node.=0A=
function AppendNewElement(win, parent, tag) {=0A=
  var e =3D win.document.createElement(tag);=0A=
  parent.appendChild(e);=0A=
  return e;=0A=
}=0A=
=0A=
// Create a new TR containing the given td's=0A=
function Tr(win, tds) {=0A=
  var tr =3D win.document.createElement("TR");=0A=
  for (var i =3D 0; i < tds.length; i++) {=0A=
    tr.appendChild(tds[i]);=0A=
  }=0A=
  return tr;=0A=
}=0A=
=0A=
// Create a new TD, with an optional colspan=0A=
function Td(win, opt_colspan) {=0A=
  var td =3D win.document.createElement("TD");=0A=
  if (opt_colspan) {=0A=
    td.colSpan =3D opt_colspan;=0A=
  }=0A=
  return td;=0A=
}=0A=
=0A=
=0A=
// Check if an element has a given class=0A=
function HasClass(el, cl) {=0A=
  if (el =3D=3D null || el.className =3D=3D null) return false;=0A=
  var classes =3D el.className.split(" ");=0A=
  for (var i =3D 0; i < classes.length; i++) {=0A=
    if (classes[i] =3D=3D cl) {=0A=
      return true;=0A=
    }=0A=
  }=0A=
  return false;=0A=
}=0A=
=0A=
// Add a class to element=0A=
function AddClass(el, cl) {=0A=
  if (HasClass(el, cl)) return;=0A=
  el.className +=3D " " + cl;=0A=
}=0A=
=0A=
// Remove a class from an element=0A=
function RemoveClass(el, cl) {=0A=
  if (el.className =3D=3D null) return;=0A=
  var classes =3D el.className.split(" ");=0A=
  var result =3D [];=0A=
  var changed =3D false;=0A=
  for (var i =3D 0; i < classes.length; i++) {=0A=
    if (classes[i] !=3D cl) {=0A=
      if (classes[i]) { result.push(classes[i]); }=0A=
    } else {=0A=
      changed =3D true;=0A=
    }=0A=
  }=0A=
  if (changed) { el.className =3D result.join(" "); }=0A=
}=0A=
=0A=
// Performs an in-order traversal of the tree rooted at the given node=0A=
// (excluding the root node) and returns an array of nodes that match the=0A=
// given selector. The selector must implement the method:=0A=
//=0A=
// boolean select(node);=0A=
//=0A=
// This method is a generalization of the DOM method =
"getElementsByTagName"=0A=
//=0A=
function GetElementsBySelector(root, selector) {=0A=
  var nodes =3D [];=0A=
  for (var child =3D root.firstChild; child; child =3D =
child.nextSibling) {=0A=
    AddElementBySelector_(child, selector, nodes);=0A=
  }=0A=
  return nodes;=0A=
}=0A=
=0A=
// Recursive helper for GetElemnetsBySelector()=0A=
function AddElementBySelector_(root, selector, nodes) {=0A=
  // First test the parent=0A=
  if (selector.select(root)) {=0A=
    nodes.push(root);=0A=
  }=0A=
=0A=
  // Then recurse through the children=0A=
  for (var child =3D root.firstChild; child; child =3D =
child.nextSibling) {=0A=
    AddElementBySelector_(child, selector, nodes);=0A=
  }=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Window/screen utilities=0A=
// TODO: these should be renamed (e.g. GetWindowWidth to =
GetWindowInnerWidth=0A=
// and moved to geom.js)=0A=
//-----------------------------------------------------------------------=
-=0A=
// Get page offset of an element=0A=
function GetPageOffsetLeft(el) {=0A=
  var x =3D el.offsetLeft;=0A=
  if (el.offsetParent !=3D null)=0A=
    x +=3D GetPageOffsetLeft(el.offsetParent);=0A=
  return x;=0A=
}=0A=
=0A=
// Get page offset of an element=0A=
function GetPageOffsetTop(el) {=0A=
  var y =3D el.offsetTop;=0A=
  if (el.offsetParent !=3D null)=0A=
    y +=3D GetPageOffsetTop(el.offsetParent);=0A=
  return y;=0A=
}=0A=
=0A=
// Get page offset of an element=0A=
function GetPageOffset(el) {=0A=
  var x =3D el.offsetLeft;=0A=
  var y =3D el.offsetTop;=0A=
  if (el.offsetParent !=3D null) {=0A=
    var pos =3D GetPageOffset(el.offsetParent);=0A=
    x +=3D pos.x;=0A=
    y +=3D pos.y;=0A=
  }=0A=
  return {x: x, y: y};=0A=
}=0A=
=0A=
function GetPageOffsetRight(el) {=0A=
  return GetPageOffsetLeft(el) + el.offsetWidth;=0A=
}=0A=
=0A=
function GetPageOffsetBottom(el) {=0A=
  return GetPageOffsetTop(el) + el.offsetHeight;=0A=
}=0A=
=0A=
// Get the y position scroll offset.=0A=
function GetScrollTop(win) {=0A=
  // all except Explorer=0A=
  if ("pageYOffset" in win) {=0A=
    return win.pageYOffset;=0A=
  }=0A=
  // Explorer 6 Strict Mode=0A=
  else if ("documentElement" in win.document &&=0A=
           "scrollTop" in win.document.documentElement) {=0A=
    return win.document.documentElement.scrollTop;=0A=
  }=0A=
  // other Explorers=0A=
  else if ("scrollTop" in win.document.body) {=0A=
    return win.document.body.scrollTop;=0A=
  }=0A=
=0A=
  return 0;=0A=
}=0A=
=0A=
// Get the x position scroll offset.=0A=
function GetScrollLeft(win) {=0A=
  // all except Explorer=0A=
  if ("pageXOffset" in win) {=0A=
    return win.pageXOffset;=0A=
  }=0A=
  // Explorer 6 Strict Mode=0A=
  else if ("documentElement" in win.document &&=0A=
           "scrollLeft" in win.document.documentElement) {=0A=
    return win.document.documentElement.scrollLeft;=0A=
  }=0A=
  // other Explorers=0A=
  else if ("scrollLeft" in win.document.body) {=0A=
    return win.document.body.scrollLeft;=0A=
  }=0A=
=0A=
  return 0;=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// String utilities=0A=
//-----------------------------------------------------------------------=
-=0A=
// Do html escaping=0A=
var amp_re_ =3D /&/g;=0A=
var lt_re_ =3D /</g;=0A=
var gt_re_ =3D />/g;=0A=
=0A=
// Convert text to HTML format. For efficiency, we just convert '&', =
'<', '>'=0A=
// characters.=0A=
// Note: Javascript >=3D 1.3 supports lambda expression in the =
replacement=0A=
// argument. But it's slower on IE.=0A=
// Note: we can also implement HtmlEscape by setting the value=0A=
// of a textnode and then reading the 'innerHTML' value, but that=0A=
// that turns out to be slower.=0A=
// Params: str: String to be escaped.=0A=
// Returns: The escaped string.=0A=
function HtmlEscape(str) {=0A=
  if (!str) return "";=0A=
  return str.replace(amp_re_, "&amp;").replace(lt_re_, "&lt;").=0A=
    replace(gt_re_, "&gt;").replace(quote_re_, "&quot;");=0A=
}=0A=
=0A=
/** converts html entities to plain text.  It covers the most common =
named=0A=
 * entities and numeric entities.=0A=
 * It does not cover all named entities -- it covers =
&{lt,gt,amp,quot,nbsp}; but=0A=
 * does not handle some of the more obscure ones like &{ndash,eacute};.=0A=
 */=0A=
function HtmlUnescape(str) {=0A=
  if (!str) return "";=0A=
  return str.=0A=
    replace(/&#(\d+);/g,=0A=
      function (_, n) { return String.fromCharCode(parseInt(n, 10)); }).=0A=
    replace(/&#x([a-f0-9]+);/gi,=0A=
      function (_, n) { return String.fromCharCode(parseInt(n, 16)); }).=0A=
    replace(/&(\w+);/g, function (_, entity) {=0A=
      entity =3D entity.toLowerCase();=0A=
      return entity in HtmlUnescape.unesc ? HtmlUnescape.unesc[entity] : =
'?';=0A=
    });=0A=
}=0A=
HtmlUnescape.unesc =3D { lt: '<', gt: '>', quot: '"', nbsp: ' ', amp: =
'&' };=0A=
=0A=
// Escape double quote '"' characters in addition to '&', '<', '>' so =
that a=0A=
// string can be included in an HTML tag attribute value within double =
quotes.=0A=
// Params: str: String to be escaped.=0A=
// Returns: The escaped string.=0A=
var quote_re_ =3D /\"/g;=0A=
=0A=
var JS_SPECIAL_RE_ =3D /[\'\\\r\n\b\"<>&]/g;=0A=
=0A=
function JSEscOne_(s) {=0A=
  if (!JSEscOne_.js_escs_) {=0A=
    var escapes =3D {};=0A=
    escapes['\\'] =3D '\\\\';=0A=
    escapes['\''] =3D '\\047';=0A=
    escapes['\n'] =3D '\\n';=0A=
    escapes['\r'] =3D '\\r';=0A=
    escapes['\b'] =3D '\\b';=0A=
    escapes['\"'] =3D '\\042';=0A=
    escapes['<'] =3D  '\\074';=0A=
    escapes['>'] =3D  '\\076';=0A=
    escapes['&'] =3D  '\\046';=0A=
=0A=
    JSEscOne_.js_escs_ =3D escapes;=0A=
  }=0A=
=0A=
  return JSEscOne_.js_escs_[s];=0A=
}=0A=
=0A=
// converts multiple ws chars to a single space, and strips=0A=
// leading and trailing ws=0A=
var spc_re_ =3D /\s+/g;=0A=
var beg_spc_re_ =3D /^ /;=0A=
var end_spc_re_ =3D / $/;=0A=
function CollapseWhitespace(str) {=0A=
  if (!str) return "";=0A=
  return str.replace(spc_re_, " ").replace(beg_spc_re_, "").=0A=
    replace(end_spc_re_, "");=0A=
}=0A=
=0A=
var newline_re_ =3D /\r?\n/g;=0A=
var spctab_re_ =3D /[ \t]+/g;=0A=
var nbsp_re_ =3D /\xa0/g;=0A=
=0A=
function HtmlifyNewlines(str) {=0A=
  if (!str) return "";=0A=
  return str.replace(newline_re_, "<br>");=0A=
}=0A=
=0A=
// URL encodes the string.=0A=
function UrlEncode(str) {=0A=
  return encodeURIComponent(str);=0A=
}=0A=
=0A=
function Trim(str) {=0A=
  if (!str) return "";=0A=
  return str.replace(/^\s+/, "").replace(/\s+$/, "");=0A=
}=0A=
=0A=
function EndsWith(str, suffix) {=0A=
  if (!str) return !suffix;=0A=
  return (str.lastIndexOf(suffix) =3D=3D (str.length - suffix.length));=0A=
}=0A=
=0A=
// Check if a string is empty=0A=
function IsEmpty(str) {=0A=
  return CollapseWhitespace(str) =3D=3D "";=0A=
}=0A=
=0A=
// Check if a character is a letter=0A=
function IsLetterOrDigit(ch) {=0A=
  return ((ch >=3D "a" && ch <=3D "z") ||=0A=
          (ch >=3D "A" && ch <=3D "Z") ||=0A=
         (ch >=3D '0' && ch <=3D '9'));=0A=
}=0A=
=0A=
// Check if a character is a space character=0A=
function IsSpace(ch) {=0A=
  return (" \t\r\n".indexOf(ch) >=3D 0);=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// TextArea utilities=0A=
//-----------------------------------------------------------------------=
-=0A=
=0A=
function SetCursorPos(win, textfield, pos) {=0A=
  if (IsDefined(textfield.selectionEnd) &&=0A=
      IsDefined(textfield.selectionStart)) {=0A=
    // Mozilla directly supports this=0A=
    textfield.selectionStart =3D pos;=0A=
    textfield.selectionEnd =3D pos;=0A=
=0A=
  } else if (win.document.selection && textfield.createTextRange) {=0A=
    // IE has textranges. A textfield's textrange encompasses the=0A=
    // entire textfield's text by default=0A=
    var sel =3D textfield.createTextRange();=0A=
=0A=
    sel.collapse(true);=0A=
    sel.move("character", pos);=0A=
    sel.select();=0A=
  }=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Array utilities=0A=
//-----------------------------------------------------------------------=
-=0A=
// Find an item in an array, returns the key, or -1 if not found=0A=
function FindInArray(array, x) {=0A=
  for (var i =3D 0; i < array.length; i++) {=0A=
    if (array[i] =3D=3D x) {=0A=
      return i;=0A=
    }=0A=
  }=0A=
  return -1;=0A=
}=0A=
=0A=
// Inserts an item into an array, if it's not already in the array=0A=
function InsertArray(array, x) {=0A=
  if (FindInArray(array, x) =3D=3D -1) {=0A=
    array[array.length] =3D x;=0A=
  }=0A=
}=0A=
=0A=
// Delete an element from an array=0A=
function DeleteArrayElement(array, x) {=0A=
  var i =3D 0;=0A=
  while (i < array.length && array[i] !=3D x)=0A=
    i++;=0A=
  array.splice(i, 1);=0A=
}=0A=
=0A=
function GetEventTarget(/*Event*/ ev) {=0A=
// Event is not a type in IE; IE uses Object for events=0A=
//  AssertType(ev, Event, 'arg passed to GetEventTarget not an Event');=0A=
  return ev.srcElement || ev.target;=0A=
}=0A=
=0A=
//-----------------------------------------------------------------------=
-=0A=
// Misc=0A=
//-----------------------------------------------------------------------=
-=0A=
// Check if a value is defined=0A=
function IsDefined(value) {=0A=
  return (typeof value) !=3D 'undefined';=0A=
}=0A=
=0A=
function GetKeyCode(event) {=0A=
  var code;=0A=
  if (event.keyCode) {=0A=
    code =3D event.keyCode;=0A=
  } else if (event.which) {=0A=
    code =3D event.which;=0A=
  }=0A=
  return code;=0A=
}=0A=
=0A=
// define a forid function to fetch a DOM node by id.=0A=
function forid_1(id) {=0A=
  return document.getElementById(id);=0A=
}=0A=
function forid_2(id) {=0A=
  return document.all[id];=0A=
}=0A=
=0A=
/**=0A=
 * Fetch an HtmlElement by id.=0A=
 * DEPRECATED: use $ in dom.js=0A=
 */=0A=
var forid =3D document.getElementById ? forid_1 : forid_2;=0A=
=0A=
=0A=
=0A=
function log(msg) {=0A=
  /* a top level window is its own parent.  Use !=3D or else fails on IE =
with=0A=
   * infinite loop.=0A=
   */=0A=
  try {=0A=
    if (window.parent !=3D window && window.parent.log) {=0A=
      window.parent.log(window.name + '::' + msg);=0A=
      return;=0A=
    }=0A=
  } catch (e) {=0A=
    // Error: uncaught exception: Permission denied to get property =
Window.log=0A=
  }=0A=
  var logPane =3D forid('log');=0A=
  if (logPane) {=0A=
    var logText =3D '<p class=3Dlogentry><span class=3Dlogdate>' + new =
Date() +=0A=
                  '</span><span class=3Dlogmsg>' + msg + '</span></p>';=0A=
    logPane.innerHTML =3D logText + logPane.innerHTML;=0A=
  } else {=0A=
    window.status =3D msg;=0A=
  }=0A=
}=0A=

------=_NextPart_000_0000_01CA1B27.D5B03590
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_000F_01CA1B27.D5B27F80"


------=_NextPart_001_000F_01CA1B27.D5B27F80
Content-Type: text/html;
	charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Location: http://mayora.blogspot.com/2009/07/de-extremadura.html

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML lang=3Den dir=3Dltr xml:lang=3D"en"=20
xmlns=3D"http://www.w3.org/1999/xhtml"><HEAD><TITLE>Blog de =C3=81lvaro =
Valverde: De Extremadura</TITLE>
<SCRIPT type=3Dtext/javascript>(function() { var a=3Dwindow;function =
f(e){this.t=3D{};this.tick=3Dfunction(d,b,c){var i=3Dc?c:(new =
Date).getTime();this.t[d]=3D[i,b]};this.tick("start",null,e)}var g=3Dnew =
f;a.jstiming=3D{Timer:f,load:g};try{a.jstiming.pt=3Da.external.pageT}catc=
h(h){};a.tickAboveFold=3Dfunction(e){var =
d,b=3De,c=3D0;if(b.offsetParent){do =
c+=3Db.offsetTop;while(b=3Db.offsetParent)}d=3Dc;d<=3D750&&a.jstiming.loa=
d.tick("aft")};var j=3Dfalse;function =
k(){if(!j){j=3Dtrue;a.jstiming.load.tick("firstScrollTime")}}a.addEventLi=
stener?a.addEventListener("scroll",k,false):a.attachEvent("onscroll",k); =
})();</SCRIPT>

<META http-equiv=3DContent-Type content=3D"text/html; charset=3DUTF-8">
<META content=3Dtrue name=3DMSSmartTagsPreventParsing>
<META content=3D"MSHTML 6.00.6000.16890" name=3DGENERATOR><LINK=20
href=3D"http://www.blogger.com/favicon.ico" =
type=3Dimage/vnd.microsoft.icon=20
rel=3Dicon><LINK title=3D"Blog de =C3=81lvaro Valverde - Atom"=20
href=3D"http://mayora.blogspot.com/feeds/posts/default" =
type=3Dapplication/atom+xml=20
rel=3Dalternate><LINK title=3D"Blog de =C3=81lvaro Valverde - RSS"=20
href=3D"http://mayora.blogspot.com/feeds/posts/default?alt=3Drss"=20
type=3Dapplication/rss+xml rel=3Dalternate><LINK=20
title=3D"Blog de =C3=81lvaro Valverde - Atom"=20
href=3D"http://www.blogger.com/feeds/12417270/posts/default"=20
type=3Dapplication/atom+xml rel=3Dservice.post><LINK title=3DRSD=20
href=3D"http://www.blogger.com/rsd.g?blogID=3D12417270" =
type=3Dapplication/rsd+xml=20
rel=3DEditURI><LINK title=3D"Blog de =C3=81lvaro Valverde - Atom"=20
href=3D"http://mayora.blogspot.com/feeds/7073113173029571472/comments/def=
ault"=20
type=3Dapplication/atom+xml rel=3Dalternate><LINK=20
href=3D"http://www.blogger.com/static/v1/v-css/3727950723-blog_controls.c=
ss"=20
type=3Dtext/css rel=3Dstylesheet><LINK=20
href=3D"http://www.blogger.com/dyn-css/authorization.css?targetBlogID=3D1=
2417270&amp;zx=3Df4fa4cc5-3243-47cb-86e0-d6f69093237c"=20
type=3Dtext/css rel=3Dstylesheet>
<STYLE type=3Dtext/css>BODY {
	PADDING-RIGHT: 20px; PADDING-LEFT: 20px; BACKGROUND: #dd9; =
PADDING-BOTTOM: 40px; MARGIN: 0px; FONT: small Georgia,Serif; COLOR: =
#333; PADDING-TOP: 40px; TEXT-ALIGN: center
}
A:link {
	COLOR: #684; TEXT-DECORATION: none
}
A:visited {
	COLOR: #996; TEXT-DECORATION: none
}
A:hover {
	COLOR: #c60; TEXT-DECORATION: underline
}
A IMG {
	BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: =
0px; BORDER-RIGHT-WIDTH: 0px
}

@media All   =20
{
#header {
	BORDER-RIGHT: #ffc 1px solid; BORDER-TOP: #ffc 1px solid; MARGIN: 0px =
auto 10px; BORDER-LEFT: #ffc 1px solid; WIDTH: 660px; BORDER-BOTTOM: =
#ffc 1px solid
}

}

@media Handheld   =20
{
#header {
	WIDTH: 90%
}
    }
#blog-title {
	BORDER-RIGHT: #ee9 1px solid; PADDING-RIGHT: 20px; BORDER-TOP: #ee9 1px =
solid; PADDING-LEFT: 20px; FONT-WEIGHT: normal; FONT-SIZE: 200%; =
PADDING-BOTTOM: 0.25em; MARGIN: 5px 5px 0px; TEXT-TRANSFORM: uppercase; =
BORDER-LEFT: #ee9 1px solid; COLOR: #874; LINE-HEIGHT: 1.2em; =
PADDING-TOP: 20px; BORDER-BOTTOM: #ee9 0px solid; LETTER-SPACING: 0.2em
}
#blog-title A {
	COLOR: #874; TEXT-DECORATION: none
}
#blog-title A:hover {
	COLOR: #c60
}
#description {
	BORDER-RIGHT: #ee9 1px solid; PADDING-RIGHT: 20px; BORDER-TOP: #ee9 0px =
solid; PADDING-LEFT: 20px; MAX-WIDTH: 700px; PADDING-BOTTOM: 20px; =
MARGIN: 0px 5px 5px; FONT: 78%/1.4em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
BORDER-LEFT: #ee9 1px solid; COLOR: #a83; PADDING-TOP: 0px; =
BORDER-BOTTOM: #ee9 1px solid; LETTER-SPACING: 0.2em
}

@media All   =20
{
#content {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px =
auto; WIDTH: 660px; PADDING-TOP: 0px; TEXT-ALIGN: left
}
#main {
	FLOAT: left; WIDTH: 410px
}
#sidebar {
	FLOAT: right; WIDTH: 220px; COLOR: #863
}

}

@media Handheld   =20
{
#content {
	WIDTH: 90%
}
#main {
	FLOAT: none; WIDTH: 100%
}
#sidebar {
	FLOAT: none; WIDTH: 100%
}
    }
H2 {
	MARGIN: 1.5em 0px 0.75em; FONT: 78%/1.4em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
COLOR: #774; LETTER-SPACING: 0.2em
}

@media All   =20
{
.date-header {
	MARGIN: 1.5em 0px 0.5em
}
.post {
	PADDING-BOTTOM: 1.5em; MARGIN: 0.5em 0px 1.5em; BORDER-BOTTOM: #fff 1px =
dotted
}

}

@media Handheld   =20
{
.date-header {
	PADDING-RIGHT: 1.5em; PADDING-LEFT: 1.5em; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
.post {
	PADDING-RIGHT: 1.5em; PADDING-LEFT: 1.5em; PADDING-BOTTOM: 0px; =
PADDING-TOP: 0px
}
    }
.post-title {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: =
140%; PADDING-BOTTOM: 4px; MARGIN: 0.25em 0px 0px; COLOR: #c80; =
LINE-HEIGHT: 1.4em; PADDING-TOP: 0px
}
.post A {
	FONT-WEIGHT: bold
}
.post-title A {
	DISPLAY: block; FONT-WEIGHT: normal; COLOR: #b70; TEXT-DECORATION: none
}
.post-title A:visited {
	DISPLAY: block; FONT-WEIGHT: normal; COLOR: #b70; TEXT-DECORATION: none
}
.post-title STRONG {
	DISPLAY: block; FONT-WEIGHT: normal; COLOR: #b70; TEXT-DECORATION: none
}
.post-title STRONG {
	COLOR: #333
}
.post-title A:hover {
	COLOR: #333
}
.post DIV {
	MARGIN: 0px 0px 0.75em; LINE-HEIGHT: 1.6em
}
P.post-footer {
	MARGIN: -0.25em 0px 0px; COLOR: #a85
}
.post-footer EM {
	FONT: 78%/1.4em "Trebuchet MS",Trebuchet,Arial,Verdana,Sans-serif; =
TEXT-TRANSFORM: uppercase; LETTER-SPACING: 0.1em
}
.comment-link {
	FONT: 78%/1.4em "Trebuchet MS",Trebuchet,Arial,Verdana,Sans-serif; =
TEXT-TRANSFORM: uppercase; LETTER-SPACING: 0.1em
}
.post-footer EM {
	COLOR: #863; MARGIN-RIGHT: 0.6em; FONT-STYLE: normal
}
.comment-link {
	MARGIN-LEFT: 0.6em
}
.post IMG {
	BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ddd 1px =
solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #ddd 1px =
solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ddd 1px solid
}
.post BLOCKQUOTE {
	MARGIN: 1em 20px
}
.post BLOCKQUOTE P {
	MARGIN: 0.75em 0px
}
#comments H4 {
	MARGIN: 1em 0px; FONT: bold 78%/1.6em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
COLOR: #774; LETTER-SPACING: 0.2em
}
#comments H4 STRONG {
	FONT-SIZE: 130%
}
#comments-block {
	MARGIN: 1em 0px 1.5em; LINE-HEIGHT: 1.6em
}
#comments-block DT {
	MARGIN: 0.5em 0px
}
#comments-block DD {
	MARGIN: 0.25em 0px 0px
}
#comments-block DD.comment-timestamp {
	MARGIN: -0.25em 0px 2em; FONT: 78%/1.4em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
LETTER-SPACING: 0.1em
}
#comments-block DD P {
	MARGIN: 0px 0px 0.75em
}
.deleted-comment {
	COLOR: gray; FONT-STYLE: italic
}
.paging-control-container {
	FONT-SIZE: 80%; FLOAT: right; MARGIN: 0px 6px 0px 0px
}
.unneeded-paging-control {
	VISIBILITY: hidden
}
#sidebar UL {
	PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1.5em; MARGIN: =
0px 0px 1.5em; PADDING-TOP: 0px; BORDER-BOTTOM: #fff 1px dotted; =
LIST-STYLE-TYPE: none
}
#sidebar LI {
	PADDING-RIGHT: 0px; PADDING-LEFT: 15px; PADDING-BOTTOM: 0.25em; MARGIN: =
0px; TEXT-INDENT: -15px; LINE-HEIGHT: 1.5em; PADDING-TOP: 0px
}
#sidebar P {
	LINE-HEIGHT: 1.5em
}
#profile-container {
	PADDING-BOTTOM: 1.5em; MARGIN: 0px 0px 1.5em; BORDER-BOTTOM: #fff 1px =
dotted
}
.profile-datablock {
	MARGIN: 0.5em 0px
}
.profile-img {
	DISPLAY: inline
}
.profile-img IMG {
	BORDER-RIGHT: #ffc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ffc 1px =
solid; PADDING-LEFT: 4px; FLOAT: left; PADDING-BOTTOM: 4px; MARGIN: 0px =
8px 3px 0px; BORDER-LEFT: #ffc 1px solid; PADDING-TOP: 4px; =
BORDER-BOTTOM: #ffc 1px solid
}
.profile-data {
	MARGIN: 0px; FONT: bold 78%/1.6em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
COLOR: #763; LETTER-SPACING: 0.1em
}
.profile-data STRONG {
	DISPLAY: none
}
.profile-textblock {
	MARGIN: 0px 0px 0.5em
}
.profile-link {
	MARGIN: 0px; FONT: 78%/1.4em "Trebuchet =
MS",Trebuchet,Arial,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
LETTER-SPACING: 0.1em
}
#footer {
	CLEAR: both; MARGIN: 0px auto; WIDTH: 660px
}
#footer HR {
	DISPLAY: none
}
#footer P {
	MARGIN: 0px; FONT: 78%/1.6em "Trebuchet =
MS",Trebuchet,Verdana,Sans-serif; TEXT-TRANSFORM: uppercase; =
PADDING-TOP: 15px; LETTER-SPACING: 0.1em
}
#blogfeeds {
	COLOR: #774
}
#postfeeds {
=09
}
</STYLE>
<!-- -->
<STYLE type=3Dtext/css>@import url( =
http://www.blogger.com/static/v1/v-css/navbar/697174003-classic.css );
DIV.b-mobile {
	DISPLAY: none
}
</STYLE>
</HEAD>
<BODY>
<SCRIPT type=3Dtext/javascript>=0A=
    function setAttributeOnload(object, attribute, val) {=0A=
      if(window.addEventListener) {=0A=
        window.addEventListener("load",=0A=
          function(){ object[attribute] =3D val; }, false);=0A=
      } else {=0A=
        window.attachEvent('onload', function(){ object[attribute] =3D =
val; });=0A=
      }=0A=
    }=0A=
  </SCRIPT>
<IFRAME id=3Dnavbar-iframe title=3D"Blogger Navigation and Search" =
marginWidth=3D0=20
marginHeight=3D0=20
src=3D"http://www.blogger.com/navbar.g?targetBlogID=3D12417270&amp;blogNa=
me=3DBlog+de+%C3%81lvaro+Valverde&amp;publishMode=3DPUBLISH_MODE_BLOGSPOT=
&amp;navbarType=3DBLUE&amp;layoutType=3DCLASSIC&amp;searchRoot=3Dhttp%3A%=
2F%2Fmayora.blogspot.com%2Fsearch&amp;blogLocale=3Des_ES&amp;homepageUrl=3D=
http%3A%2F%2Fmayora.blogspot.com%2F"=20
frameBorder=3D0 width=3D"100%" scrolling=3Dno height=3D30></IFRAME>
<DIV></DIV>
<DIV id=3Dheader>
<H1 id=3Dblog-title><A href=3D"http://mayora.blogspot.com/">Blog de =
=C3=81lvaro Valverde=20
</A></H1>
<P id=3Ddescription></P></DIV><!-- Begin #content -->
<DIV id=3Dcontent><!-- Begin #main -->
<DIV id=3Dmain>
<DIV id=3Dmain2>
<H2 class=3Ddate-header>20.7.09</H2><!-- Begin .post -->
<DIV class=3Dpost><A name=3D7073113173029571472></A>
<H3 class=3Dpost-title>De Extremadura </H3>
<DIV class=3Dpost-body>
<DIV>
<DIV style=3D"CLEAR: both"></DIV>
<DIV style=3D"TEXT-ALIGN: justify">As=C3=AD<SPAN style=3D"FONT-STYLE: =
italic"> De=20
Extremadura</SPAN> se titula el libro del inolvidable Fernando =
P=C3=A9rez Marqu=C3=A9s que=20
ha rescatado con acierto el Ayuntamiento de M=C3=A9rida (de la mano =
directa de su=20
alcalde, =C3=81ngel Calle, y de la bibliotecaria por excelencia de la =
ciudad,=20
Magdalena -o Leni- Ortiz) y que publica la Editora. Detr=C3=A1s, la mano =
discreta de=20
Celes P=C3=A9rez Gonz=C3=A1lez, hija del secreto escritor de San =
Vicente. <SPAN=20
style=3D"FONT-STYLE: italic">Cuatro esquinas de atenci=C3=B3n </SPAN>se =
subtitula, las=20
que dan a la presencia de Extremadura en la obra de <SPAN=20
style=3D"FONT-STYLE: italic">Azor=C3=ADn</SPAN>; a Manuel Godoy; a una =
tragedia, la del=20
<SPAN style=3D"FONT-STYLE: italic">Alcalde de Zalamea</SPAN> y, por fin, =
a los=20
"trasuntos literarios" de M=C3=A9rida. De su salida <A=20
href=3D"http://malama.blogspot.com/2009/06/cuatro-esquinas-extremenas-de-=
atencion.html">dio=20
cuenta</A> su certero prologuista, el profesor Miguel =C3=81ngel =
Lama.<BR>En lo=20
primero que hemos pensado, la verdad, es en la alegr=C3=ADa que se =
hubiera llevado=20
Fernando hijo al ver de nuevo impresa la obra de su padre. Despu=C3=A9s, =
ya dentro=20
del libro, nos hemos reafirmado en las bondades de la prosa del escritor =
y del=20
maestro que llegamos a conocer en Badajoz (donde tiene calle) all=C3=A1 =
por el 82 del=20
siglo pasado. Tan menudo =C3=A9l como su escritura, de deliberado gusto =
azoriniano.=20
Precisa, sobria, modesta, del todo alejada de la =C3=A9sa dizque lujosa, =
de sonajero=20
(Mars=C3=A9 <SPAN style=3D"FONT-STYLE: italic">dixit</SPAN>), que les =
gusta gastar a=20
ciertas <SPAN style=3D"FONT-STYLE: italic">plumas</SPAN> provinciales =
que, por=20
cierto, se atreven a tomar su nombre en vano. Una prosa que uno lee con =
sucesivo=20
placer y que si le recuerda a lo antiguo es por el regusto cl=C3=A1sico =
que=20
rezuma.<BR>Del cap=C3=ADtulo dedicado a <SPAN=20
style=3D"FONT-STYLE: italic">Azor=C3=ADn</SPAN>, destacar=C3=ADa lo que =
escribe sobre "Las=20
tierras" y "Las ciudades". M=C3=A1s por las l=C3=ADneas que uno y otro =
(tanto monta, monta=20
tanto) dedican al paisaje extreme=C3=B1o (donde P=C3=A9rez Marqu=C3=A9s =
no puede evitar la=20
menci=C3=B3n de Ortega Mu=C3=B1oz) y al "alfoz" de Plasencia, tan caro =
al escritor de=20
Mon=C3=B3var.<BR>Todo es aprovechable y sustancioso en el final, el =
dedicado a M=C3=A9rida=20
en los libros. De Plinio el Viejo a Lorca pasando por Ponz, Larra, =
Azor=C3=ADn,=20
Borrow, Pem=C3=A1n, Santos Torroella, Ridruejo, Valhondo, Pacheco, etc. =
De Luis=20
Bello, otro viajero que pas=C3=B3 por all=C3=AD, se public=C3=B3 hace =
unos a=C3=B1os en la=20
benem=C3=A9rita colecci=C3=B3n "Un libro, un euro" (que la actual =
consejera de Cultura se=20
encarg=C3=B3 de cerrar) <SPAN style=3D"FONT-STYLE: italic">Viaje a las =
escuelas de=20
Extremadura. </SPAN>Pues bien,<SPAN style=3D"FONT-STYLE: italic"> =
</SPAN>no por=20
casualidad llevaba en la cubierta una vieja fotograf=C3=ADa de unos =
alumnos de don=20
Fernando P=C3=A9rez Marqu=C3=A9s.<BR>Fernando hijo, por lo dem=C3=A1s, =
rescat=C3=B3 en la Editora=20
otra obra de la que habla con la debida atenci=C3=B3n su padre. Me =
refiero a <SPAN=20
style=3D"FONT-STYLE: italic">La =C3=BAltima cig=C3=BCe=C3=B1a</SPAN>, de =
Urabayen.<BR>Qu=C3=A9 bien me=20
habr=C3=ADa venido, y termino, haber le=C3=ADdo esas p=C3=A1ginas cuando =
me invitaron a=20
escribir sobre <A=20
href=3D"http://mayora.blogspot.com/2009/01/peatn-en-mrida.html">M=C3=A9ri=
da</A>. Qu=C3=A9=20
envidia para cualquier ciudad que alguien escriba con tanta necesaria =
erudici=C3=B3n=20
y con tanto acierto sobre sus cosas. Sobre las que de veras=20
importan.<BR><BR><SPAN style=3D"FONT-SIZE: 85%">Nota. Enrique =
Baltan=C3=A1s se hace eco=20
en su <A=20
href=3D"http://almargendelosdias.blogspot.com/2009/07/escritores-locales-=
fernando-perez.html">blog</A>=20
de la aparici=C3=B3n del libro.</SPAN><BR></DIV>
<DIV style=3D"CLEAR: both; PADDING-BOTTOM: 0.25em"></DIV></DIV></DIV>
<P class=3Dpost-footer><EM>entrada de =C3=81.V. a las <A =
class=3Dpost-footer-link=20
title=3D"permanent link"=20
href=3D"http://mayora.blogspot.com/2009/07/de-extremadura.html">17:58=20
</A></EM><SPAN class=3Ditem-action><A=20
title=3D"Enviar entrada por correo electr=C3=B3nico"=20
href=3D"http://www.blogger.com/email-post.g?blogID=3D12417270&amp;postID=3D=
7073113173029571472"><IMG=20
class=3Dicon-action height=3D13 alt=3D""=20
src=3D"http://www.blogger.com/img/icon18_email.gif" =
width=3D18></A></SPAN><SPAN=20
class=3D"item-control blog-admin pid-1949177062"><A title=3D"Editar =
entrada"=20
style=3D"BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; =
BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none"=20
href=3D"http://www.blogger.com/post-edit.g?blogID=3D12417270&amp;postID=3D=
7073113173029571472"><IMG=20
class=3Dicon-action height=3D18 alt=3D""=20
src=3D"http://www.blogger.com/img/icon18_edit_allbkg.gif" =
width=3D18></A></SPAN>=20
</P></DIV><!-- End .post --><!-- Begin #comments -->
<DIV id=3Dcomments>
<P class=3Dcomment-timestamp><A =
href=3D"http://mayora.blogspot.com/">&lt;&lt; P=C3=A1gina=20
principal</A> </P></DIV><!-- End #comments --></DIV></DIV><!-- End #main =
--><!-- Begin #sidebar -->
<DIV id=3Dsidebar>
<DIV id=3Dsidebar2>=C3=81lvaro Valverde (Plasencia, 1959). Es autor de =
libros de poes=C3=ADa=20
como "Las aguas detenidas","Una oculta raz=C3=B3n" (Premio Loewe), "A =
debida=20
distancia", "Ensayando c=C3=ADrculos" o "Mec=C3=A1nica terrestre". =
Tambi=C3=A9n ha publicado=20
dos novelas ("Las murallas del mundo" y "Alguien que no existe"), un =
libro de=20
art=C3=ADculos ("El lector invisible") y otro de viajes ("Lejos de =
aqu=C3=AD"). Tusquets=20
ha publicado su =C3=BAltimo libro de poes=C3=ADa, "Desde fuera", donde =
se re=C3=BAnen poemas=20
escritos entre los a=C3=B1os 2000 y 2007. <!-- End #profile -->
<H2 class=3Dsidebar-title>Entradas anteriores</H2>
<UL id=3Drecently>
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/moga-y-familia.html">Moga y=20
  familia</A>=20
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/caceres-revocado.html">C=C3=A1=
ceres=20
  revocado</A>=20
  <LI><A=20
  =
href=3D"http://mayora.blogspot.com/2009/07/descredito-del-critico.html">D=
escr=C3=A9dito=20
  del cr=C3=ADtico</A>=20
  <LI><A=20
  =
href=3D"http://mayora.blogspot.com/2009/07/esto-fue-la-libreria-cervantes=
.html">Ruinas=20
  de la librer=C3=ADa Cervantes</A>=20
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/jaime-naranjo.html">Jaime=20
  Naranjo</A>=20
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/resenina.html">Rese=C3=B1ina</=
A>=20
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/driade.html">Driade</A>=20
  <LI><A=20
  =
href=3D"http://mayora.blogspot.com/2009/07/necrologica.html">Necrol=C3=B3=
gica</A>=20
  <LI><A=20
  =
href=3D"http://mayora.blogspot.com/2009/07/biblioteca-de-sibila.html">Bib=
lioteca=20
  de Sibila</A>=20
  <LI><A =
href=3D"http://mayora.blogspot.com/2009/07/tumbas.html">Tumbas</A>=20
</LI></UL>
<P id=3Dpowered-by><A href=3D"http://www.blogger.com/"><IMG =
alt=3D"Powered by Blogger"=20
src=3D"http://buttons.blogger.com/bloggerbutton1.gif"></A></P>
<P id=3Dblogfeeds>Suscribirse a<BR>Entradas [<A=20
href=3D"http://mayora.blogspot.com/feeds/posts/default" target=3D_blank=20
type=3Dapplication/atom+xml>Atom</A>]</P><!--
  <p>This is a paragraph of text that could go in the sidebar.</p>
  --></DIV></DIV><!-- End #sidebar --></DIV><!-- End #content --><!-- =
Begin #footer -->
<DIV id=3Dfooter>
<HR>

<P><!--This is an optional footer. If you want text here, place it =
inside these tags, and remove this comment. -->&nbsp;</P></DIV><!-- End =
#footer --><!-- Site Meter --><A=20
href=3D"http://s11.sitemeter.com/stats.asp?site=3Ds11ltDDDlhf" =
target=3D_top><IMG=20
alt=3D"Site Meter" =
src=3D"http://s11.sitemeter.com/meter.asp?site=3Ds11ltDDDlhf"=20
border=3D0></A> <!-- Copyright (c)2006 Site Meter --></BODY></HTML>

------=_NextPart_001_000F_01CA1B27.D5B27F80
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.blogger.com/navbar.g?targetBlogID=12417270&blogName=Blog+de+%C3%81lvaro+Valverde&publishMode=PUBLISH_MODE_BLOGSPOT&navbarType=BLUE&layoutType=CLASSIC&searchRoot=http%3A%2F%2Fmayora.blogspot.com%2Fsearch&blogLocale=es_ES&homepageUrl=http%3A%2F%2Fmayora.blogspot.com%2F

=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML dir=3Dltr><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dutf-8"><LINK=20
href=3D"http://www.blogger.com/static/v1/v-css/navbar/2461938849-navbar1_=
bundle.css"=20
type=3Dtext/css rel=3Dstylesheet>
<META content=3D"MSHTML 6.00.6000.16890" name=3DGENERATOR></HEAD>
<BODY class=3D"null lang_es">
<SCRIPT=20
src=3D"http://www.blogger.com/static/v1/v-app/scripts/4095335807-common.j=
s"=20
type=3Dtext/javascript></SCRIPT>

<SCRIPT type=3Dtext/javascript>=0A=
         =0A=
       function showDrop() {=0A=
         var overlap =3D 5;=0A=
         var dropdown_position =3D=0A=
           GetPageOffsetRight(document.getElementById('b-flag-this')) - =
overlap + "px";=0A=
=0A=
         document.getElementById('flagi').style.display =3D 'inline';=0A=
         document.getElementById('flagi').style.left =3D =
dropdown_position;=0A=
       }=0A=
=0A=
       =0A=
       function hideDrop() {=0A=
         document.getElementById('flagi').style.display =3D "none";=0A=
       }=0A=
     </SCRIPT>

<DIV id=3Dflagi onmouseover=3DshowDrop() style=3D"POSITION: absolute"=20
onmouseout=3DhideDrop();>Notificar a Blogger la presencia de <A=20
href=3D"http://help.blogger.com/bin/answer.py?answer=3D42517"=20
target=3D_blank>contenido de dudosa reputaci=C3=B3n</A> en esta =
p=C3=A1gina.</DIV>
<DIV id=3Dunflagi onmouseover=3DshowDrop() style=3D"POSITION: absolute"=20
onmouseout=3DhideDrop()>Has marcado este blog, indicando que contiene <A =

href=3D"http://help.blogger.com/bin/answer.py?answer=3D42517"=20
target=3D_blank>contenido de dudosa reputaci=C3=B3n</A>.</DIV>
<DIV id=3Db-navbar><A id=3Db-logo title=3D"Ir a Blogger.com" =
tabIndex=3D1=20
href=3D"http://www.blogger.com/">
<DIV id=3Dnavbar-logo><SPAN>Blogger</SPAN></DIV></A>
<DIV class=3Db-mobile id=3Db-sms><A tabIndex=3D2=20
href=3D"sms:?body=3DHola%2C%20echa%20un%20vistazo%20a%20Blog%20de%20%C3%8=
1lvaro%20Valverde%20en%20http%3A%2F%2Fmayora.blogspot.com%2F.">Enviar=20
como SMS</A></DIV>
<DIV id=3Db-search>
<TABLE cellSpacing=3D0 cellPadding=3D0 border=3D0>
  <TBODY>
  <TR>
    <TD class=3Dnavsearch vAlign=3Dcenter noWrap>
      <FORM id=3Dsearchthis style=3D"DISPLAY: inline"=20
      action=3Dhttp://mayora.blogspot.com/search method=3Dget>
      <TABLE cellSpacing=3D0 cellPadding=3D0>
        <TBODY>
        <TR>
          <TD vAlign=3Dcenter><INPUT id=3Db-query title=3D"Buscar blog" =
tabIndex=3D3=20
            name=3Dq></TD>
          <TD class=3Dnavbutton vAlign=3Dcenter><NOSCRIPT><INPUT =
id=3Db-searchbtn=20
            title=3D"Buscar este blog" tabIndex=3D4 type=3Dimage=20
            alt=3D"Buscar este blog"=20
            =
src=3D"http://www.blogger.com/img/navbar/1/btn_search_this.png"></NOSCRIP=
T>
            <SCRIPT type=3Dtext/javascript>=0A=
  document.write("\x3cdiv id\x3d\x22b-search-this\x22 =
class\x3d\x22btn\x22 =
onclick\x3d\x22document.getElementById(\x26#39;searchthis\x26#39;).submit=
()\x22 tabindex\x3d\x224\x22\x3e\x3cdiv\x3eBuscar =
blog\x3c/div\x3e\x3c/div\x3e");=0A=
</SCRIPT>
             </TD>
          <TD class=3Dnavbutton vAlign=3Dcenter>
            <SCRIPT type=3Dtext/javascript>=0A=
  document.write("\x3cdiv id\x3d\x22b-flag-this\x22 class\x3d\x22btn\x22 =
onmouseover\x3d\x22showDrop()\x22 onmouseout\x3d\x22hideDrop()\x22 =
tabindex\x3d\x225\x22 =
onclick\x3d\x22window.open(\x26quot;http://help.blogger.com/?action\\x3df=
lag\\x26blog_ID\\x3d12417270\\x26blog_URL\\x3dhttp%3A%2F%2Fmayora.blogspo=
t.com%2F\x26quot;)\x22\x3e\x3cdiv id\x3d\x22bt-flag-body\x22\x3e\x3cimg =
class\x3d\x22flag\x22 alt\x3d\x22\x22 =
src\x3d\x22/img/blank.gif\x22\x3e\n\x3cspan =
class\x3d\x22flag-text\x22\x3eMarcar =
blog\x3c/span\x3e\x3c/div\x3e\x3c/div\x3e");=0A=
</SCRIPT>
          </TD></TR></TBODY></TABLE></FORM></TD>
    <TD vAlign=3Dcenter noWrap width=3D"100%"><A id=3Db-next =
tabIndex=3D6=20
      href=3D"http://www.blogger.com/next-blog?navBar=3Dtrue">Siguiente =
blog=C2=BB</A></TD>
    <TD class=3Dnavbar-right vAlign=3Dcenter noWrap align=3Dright><A =
id=3Db-getorpost=20
      tabIndex=3D7 href=3D"http://www.blogger.com/signup.g">Crear un =
blog</A> | <A=20
      tabIndex=3D8 =
href=3D"http://www.blogger.com/">Acceder</A></TD></TR></TBODY></TABLE>
<DIV id=3Db-search-img></DIV></DIV></DIV>
<SCRIPT type=3Dtext/javascript>=0A=
        function closePopup(wnd) {=0A=
          wnd.close();=0A=
        }=0A=
      </SCRIPT>
</BODY></HTML>

------=_NextPart_001_000F_01CA1B27.D5B27F80--

------=_NextPart_000_0000_01CA1B27.D5B03590--
