<table class="altgray"><tr><td>

La frase 'una vez par siempre aparece algunas veces en el argumento de Hebreos:

*//...porque esto lo hizo ''una vez para siempre'', ofreciéndose a sí mismo.// (7.27)
*//y no por sangre de machos cabríos ni de becerros, sino por su propia sangre, entró ''una vez para siempre'' en el Lugar Santísimo, habiendo obtenido eterna redención.// (9.12)
*//De otra manera le hubiera sido necesario padecer muchas veces desde el principio del mundo; pero ahora, en la consumación de los siglos, se presentó ''una vez para siempre'' por el sacrificio de sí mismo para quitar de en medio el pecado.// (9.26)
*//así también Cristo fue ofrecido ''una sola vez'' para llevar los pecados de muchos;// (9.28)
*//En esa voluntad somos santificados mediante la ofrenda del cuerpo de Jesucristo hecha ''una vez para siempre.''//  (10.10)

</td></tr></table>
<pre>

.stretch-closed {
background:#fff; color: #999; text-decoration: underline;
  display:inline-block;
  padding: 0 3px 0 2px;
  margin:0px -2px 0 -1px;
  line-height:96%;
  border: 0px solid lightgray; 
/*  box-shadow: inset 0 0 5px #b3b3b3; */
  margin-right:2px; 
}

.gstretch .stretch-closed {
background: #ff9; color: #fa3;text-decoration: none;
  display:inline-block;
  padding: 0 3px 0 2px;
  margin:0px -2px 0 -1px;
  line-height:96%;
  border: 0px solid lightgray; 
/*  box-shadow: inset 0 0 5px #b3b3b3; */
  margin-right:2px; 
}

.stretch-open {
  display:inline-block; color: #999; background:#fff;  text-decoration: none;
  padding: 0px 3px; /*0 3*/
  margin:0 -2px;
  border: 0px solid transparent; border-bottom:0px solid silver;
}

.gstretch .stretch-open {
background: #ff9; color: #fa3;text-decoration: none;
  display:inline-block; 
  padding: 0px 3px; /*0 3*/
  margin:0 -2px;
  border: 0px solid transparent; border-bottom:0px solid silver;
}

.stretch-outline {
   display:inline-block; color: #999;
/* box-shadow: inset 0 0 2px gray; */
   padding-right:2px; padding-left:0px; /*2*/
   -webkit-animation: revealoutline 3.5s ease 1 running;
   animation: revealoutline 3.5s ease 1 running;
   outline: solid 0px red; 
   outline-offset:1px;
/* margin-right:0px; */
}

@-webkit-keyframes revealoutline {
  0%  { outline: transparent solid 1px; }
  25.0%  { outline: white solid 1px; }
  50.0%  { outline: white solid 1px; }
  100.0%  { outline: transparent solid 1px; }
}
@keyframes revealoutline {
  0%  {outline: transparent solid 1px; }
  25.0%  { outline: white solid 1px; }
  50.0%  { outline: white solid 1px; }
  100.0%  { outline: transparent solid 1px; }
}

.stretch-open:hover + .stretch-outline { outline:silver solid 1px; }

.stretch-content { 
  padding: 0 0px; /*0 3 */
  white-space: pre-wrap; 
/*   margin-right:-6px;  -6 */
   -webkit-animation: revealcontent .4s ease 1 running;
   animation: revealcontent .4s ease 1 running;
   opacity:1;
}

@-webkit-keyframes revealcontent {
  0%  {opacity:0;} 100.0% {opacity:1;}
}
@keyframes revealcontent {
  0%  {opacity:0;} 100.0% {opacity:1;}
}

</pre>
\define cont() $(content)$

\define stretch(label, restornothing, content)
<$vars restornothing="""$restornothing$""" content="""$content$""">
<$set name="contentToReveal" filter="[<content>regexp[^$]]"
          value=<<restornothing>> emptyValue=<<content>>>
<$set name="rest" filter="[<content>regexp[^$]]"
          value="" emptyValue=<<restornothing>>>
<$set name="qualstate" value=<<qualify "$:/state/$label$">> >
   <$reveal type="nomatch" state=<<qualstate>> text="show" animate="yes">
      <$button set=<<qualstate>> setTo="show" class="stretch-closed" >
         <$list filter="[[$label$]splitbefore[_]removesuffix[_]] [[$label$]splitbefore[_]] +[first[]]" variable="lab"><<lab>></$list>
      </$button>"""<<rest>>"""
   </$reveal><$reveal type="match" state=<<qualstate>> text="show" animate="yes">
      <$button set=<<qualstate>> setTo="hide" class="stretch-open" >
         <$action-setfield $tiddler=<<qualstate>>/>
         <$list filter="[[$label$]splitbefore[_]removesuffix[_]] [[$label$]splitbefore[_]] +[first[]]" variable="lab"><<lab>></$list>
      </$button> """<<rest>>"""<span class="stretch-outline">
         <span class="stretch-content"><<contentToReveal>></span>
      </span></$reveal>
</$set>
</$set>
</$set>
</$vars>
\end
/*BOXES*/

html body.tc-body .graybox {display:block;background-color:#eee;padding:10px;margin-left:0px;margin-top:10px;margin-bottom:20px;width:95%;}

/*FONT BASIC*/

body p {font-family: 'Arial', sans-serif;font-size:12pt;color:#000;line-height:normal;font-weight:normal;}
pre {font-size:14pt;font-family: 'Arial', sans-serif;f}
.tc-edit-texteditor {font-size:14pt;font-family: 'Arial', sans-serif;}
strong {color:#666;font-family: 'Fira Sans', 'Fira Sans Condensed', 'Arial', sans-serif;}

/*FONT STUFF (colors)*/
html body.tc-body .red {color: red; font-weight: bold;}
html body.tc-body .thinred {color: red; }
html body.tc-body .green {color:#0a5;font-weight:bold;}
html body.tc-body .blue {color:#0000ee;font-weight:bold;}
html body.tc-body .thinblue {color:#0000ee;font-weight:normal;}
html body.tc-body .bigblue {color:#0000ee;font-size:20pt;font-weight:bold;}
html body.tc-body .orange {color:#e81;font-weight: bold;}
html body.tc-body .dkgrn {color:#063;font-weight: bold;}
html body.tc-body .pink {color:#e0b;font-weight: bold;}
html body.tc-body .purple {color:#990099;font-weight: bold;}
html body.tc-body .gray {color:#777777;font-weight: bold;}
html body.tc-body .thingray {color:#999;}
html body.tc-body .wine {color:#903;font-weight: bold;}
html body.tc-body .thinwine {color:#903;}
html body.tc-body .brown {color:#773300;font-weight: bold;}
html body.tc-body .gold {color:#aa0;font-weight: bold;}
html body.tc-body .white {color: white;}
html body.tc-body .teal {color:#0099bb;font-weight: bold;}
html body.tc-body .pine {color:#066;font-weight: bold;}

html body.tc-body .greenbk {background:#cf9;padding:1px 4px 1px 4px;}
html body.tc-body .grassbk {background:#1B0;padding:1px 4px 1px 4px;}
html body.tc-body .bluebk {background:#eef;padding:1px 4px 1px 4px;}
html body.tc-body .orangebk {background:#fd7;padding:1px 4px 1px 4px;}
html body.tc-body .pinkbk {background:#fde;padding:1px 4px 1px 4px;}
html body.tc-body .purplebk {background:#ecf;padding:1px 4px 1px 4px;}
html body.tc-body .graybk {background:#ddd;padding:1px 4px 1px 4px;}
html body.tc-body .tanbk {background:#e8dfa1;padding:1px 4px 1px 4px;}
html body.tc-body .yellowbk {background:#ffc;padding:1px 4px 1px 4px;}
html body.tc-body .turqbk {background:#bdb;padding:1px 4px 1px 4px;}

html body.tc-body .subtopicgreen {color:#0a5;font-weight:bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicmagenta {color:#c09;font-weight:bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicblue {color:#0000ee;font-weight:bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicorange {color:#dd6633;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicpine {color:#558877;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopiclav {color:#cc88bb;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicpurple {color:#8833dd;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicgray {color:#777777;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicnavy {color:#00a;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicwine {color:#906;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicbrown {color:#773300;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicgold {color:#bbaa11;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicteal {color:#0099bb;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicolive {color:#aabb66;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicturq {color:#55ddbb;font-weight: bold;font-size:18pt;text-align:center;}
html body.tc-body .subtopicslate {color:#8888cc;font-weight: bold;font-size:18pt;text-align:center;}

/*FONT STUFF SOURCES*/

html body.tc-body .source {color:#777;font-size:10pt;}

/*HEADERS (h2 is for tiddler titles)*/

h1 {text-align:center;color:#0000ee;font-size: 22pt;font-weight: bold;}
h2 {font-weight: bold; font-family: 'Fira Sans', 'Fira Sans Condensed', 'Arial', sans-serif; }
.notetitle {font-size:125%;font-weight: bold;}
h3 {font-size:125%;font-weight: bold;}
h4 {font-size:125%;font-weight: bold;font-family: 'Fira Sans', 'Fira Sans Condensed', 'Arial', sans-serif;}
h5 {font-size:125%;font-weight: bold;}

/*HORIZONTAL RULE*/

html body.tc-body hr {border:0px;}

html body.tc-body hr {
	border-top: 1px solid #999;
	text-align: center;
width:100%; margin-top:15px; margin-bottom:15px;

}

/*ICONS*/

html body.tc-body .tc-image-edit-button {stroke: white;fill:#000;}
html body.tc-body .tc-image-delete-button {stroke: white;fill:#ff2222;}
html body.tc-body .tc-image-cancel-button {stroke: white;fill:#ffdd55;}
html body.tc-body .tc-image-done-button {stroke: white;fill:#99ee22;}
html body.tc-body .tc-image-home-button {stroke: white;fill:#5778d8;height:20px;}
html body.tc-body .tc-image-palette {stroke: white;fill:#7897fc;}
html body.tc-body .tc-image-new-button {stroke: white;fill:#7897fc;}
html body.tc-body .tc-image-heading-1 {stroke: white;fill:#7897fc;}
html body.tc-body .tc-image-favicon {stroke: white;fill:#7897fc;}
html body.tc-body .tc-image-stamp {stroke: white;fill:#ff2277;}
html body.tc-body .tc-image-copy-clipboard {stroke: white;fill:#80e;}

/*INDENTING*/

html body.tc-body .indent {margin-left:3em;}
html body.tc-body .indent1 {margin-left:1.5em;display:block;}
html body.tc-body .indent1gray {margin-left:1.5em;display:block;color:#777;}
html body.tc-body .indent2 {margin-left:6em;display:block;}
html body.tc-body .indent3 {margin-left:9em;display:block;}
html body.tc-body .indent4 {margin-left:12em;display:block;}
html body.tc-body .indent5 {margin-left:15em;display:block;}
html body.tc-body .indent6 {margin-left:18em;display:block;}
html body.tc-body .indent7 {margin-left:21em;display:block;}

/*LINKS*/

html body.tc-body a.tc-tiddlylink {text-decoration: none;font-style: normal;font-weight: normal;color:#66f;}
html body.tc-body  a.tc-tiddlylink-missing {font-weight:normal; background-color:#ffc; color:#66f;font-weight:normal;}
html body.tc-body a.tc-tiddlylink-external {text-decoration: none;font-weight: normal;color: #43c;}
html body.tc-body a.tc-tiddlylink-visited {text-decoration: none;font-weight: normal;color: #66f;}

/*LISTS BASIC*/


html body.tc-body ol {font-family: 'Arial', sans-serif;font-size:12pt;}
html body.tc-body ul li {padding-bottom:.2em;padding-top:.2em;line-height:14pt;font-family: 'Arial', sans-serif;color:#000;font-size:12pt;}
html body.tc-body ul li li {color:#000;}
html body.tc-body ul li li li {color:#000;}
html body.tc-body ul li li li li {color:#000;}

html body.tc-body .singlelist ul li {padding-bottom:.0em;padding-top:.0em;line-height:14pt;color:#black; font-size:12pt;font-family: 'Arial', sans-serif;}
html body.tc-body .doublelist ul li {padding-bottom:.5em;padding-top:.5em;line-height:14pt;color:#black; font-size:12pt;font-family: 'Arial', sans-serif;}
html body.tc-body .cheatlist ul li {padding-bottom:.5em;padding-top:.5em;line-height:14pt;color:#black; font-size:12pt;font-family: 'Arial', sans-serif;}

/*LIST BULLETS*/

html body.tc-body ul {list-style: none;}
html body.tc-body ul li::before {content: "•"; color: #fb0;font-size:150%;
 display: inline-block; width: .8em;vertical-align:middle;margin-left:-.8em;}

/*SITETITLE*/

html body.tc-body .tc-site-title  {font-weight:bold;font-family: 'Fira Sans', 'Fira Sans Condensed', 'Arial', sans-serif;}

/*STICKY EDITORTOOLBAR*/

.tc-editor-toolbar {
  position:sticky;
  position: -webkit-sticky;
  position: sticky;
  top: 30px; /* distance to stick from top, e.g if you use top bar */
  left:0;
  width:100%;
  font-size:.90em;
  padding:0;
  border:5px solid transparent;
  background: white;
  z-index: 100;
}

/*TABLES BASIC*/

html body.tc-body table {margin-bottom:30px;border: 1px solid #aaa;}
html body.tc-body th {font-size:12pt;padding: 10px;font-weight:normal;border: 1px solid #aaa;}
html body.tc-body td {font-size:12pt;padding: 10px;border: 1px solid #aaa;}

/*TABLES BLUEALTROWS*/

html body.tc-body .bluealtrows th {padding: 10px; border: 1px solid #aaa; vertical-align:top;text-align:left;}
html body.tc-body .bluealtrows td {padding: 10px; border: 1px solid #aaa; vertical-align:top;}
html body.tc-body .bluealtrows tr:nth-child(even) td {background-color:#E8EDFE;}
html body.tc-body .bluealtrows tr:nth-child(odd) td {background-color:#DDE4FE;}

html body.tc-body .bluealtrows {
-moz-box-shadow: 10px 10px 5px #bbb;
-webkit-box-shadow: 10px 10px 5px #bbb;
box-shadow: 10px 10px 5px #bbb;
}

/*TABLES BLUEBYCELL*/

html body.tc-body .bluebycell th {padding: 10px; vertical-align:top;font-weight:normal;text-align:left;background:#DDF;}
html body.tc-body .bluebycell td {padding: 10px; vertical-align:top;background: #EEF;}

html body.tc-body .bluebycell {
-moz-box-shadow: 10px 10px 5px #bbb;
-webkit-box-shadow: 10px 10px 5px #bbb;
box-shadow: 10px 10px 5px #bbb;
}

/*TABLES GRAYALTROWS*/

html body.tc-body .grayaltrows th {padding: 10px; vertical-align:top;text-align:left;background-color:#DDD;}
html body.tc-body .grayaltrows td {padding: 10px; vertical-align:top;}
html body.tc-body .grayaltrows tr:nth-child(even) td {background-color:#F8F8F8;}
html body.tc-body .grayaltrows tr:nth-child(odd) td {background-color:#E8E8E8;}

html body.tc-body .grayaltrows {
-moz-box-shadow: 10px 10px 5px #bbb;
-webkit-box-shadow: 10px 10px 5px #bbb;
box-shadow: 10px 10px 5px #bbb;
}

/*TABLES ALTGRAY*/

html body.tc-body .altgray {width: 100%;}
html body.tc-body .altgray td {border: 1px solid #fff;font-size:100%;padding-left:20px;}
html body.tc-body .altgray th {border: 1px solid #fff;font-size:100%;padding-left:20px;}
html body.tc-body .altgray tr {border: 1px solid #fff;font-size:100%;padding-left:20px;}
html body.tc-body .altgray table {border: 1px solid #fff;font-size:100%;padding-left:20px;}
html body.tc-body .altgray tr:nth-child(even) td {background-color:#eee;}
html body.tc-body .altgray tr:nth-child(odd) td {background-color:#fff;}

/*TABLES GREENALTROWS*/

html body.tc-body .greenaltrows th {padding: 10px; border: 1px solid #aaa; vertical-align:top;text-align:left;}
html body.tc-body .greenaltrows td {padding: 10px; border: 1px solid #aaa; vertical-align:top;}
html body.tc-body .greenaltrows tr:nth-child(even) td {background-color:#F3F6F5;}
html body.tc-body .greenaltrows tr:nth-child(odd) td {background-color:#E7EDEB;}

html body.tc-body .greenaltrows {
-moz-box-shadow: 10px 10px 5px #bbb;
-webkit-box-shadow: 10px 10px 5px #bbb;
box-shadow: 10px 10px 5px #bbb;
}

/*TABLES ROTATE*/

html body.tc-body .rotate table {border:none;}
html body.tc-body .rotate th {border:1px solid #fff;border-bottom:1px solid #777;background-color:#fff;font-size:9pt;}
html body.tc-body .rotate td {border:1px solid #777;background-color:#fff;font-size:9pt;border-top:1px solid #777;}

th.rotate {
  /* Something you can count on */
  height: 100px;
  white-space: nowrap;
border-top:none;
}

th.rotate > div {
  transform: 
    /* Magic Numbers */
    translate(25px, 25px)
    /* 45 is really 360 - 45 */
    rotate(315deg);
  width: 30px;
}
th.rotate > div > span {
  border-bottom: 1px solid #777;
  padding: 5px;
}

/*TAG EDITOR AND DROPDOWNS*/

html body.tc-body .tc-block-dropdown-wrapper {width:800px;color:#2200bb;}
html body.tc-body .tc-block-dropdown {width:800px;white-space:normal;color:#2200bb;}
html body.tc-body .tc-block-dropdown a {display: inline-block;color:#2200bb;}
html body.tc-body .tc-block-dropdown svg {height: 1.2em;fill:#ccc;display:inline;color:#2200bb;}

/*TAG LABELS*/

html body.tc-body .tc-tag-label {font-family: 'Arial'; font-size:10pt; color:#2200bb;background-color:#eee;margin-bottom:6px;font-weight: bold;}
html body.tc-body .tc-menu-list-item {font-weight: bold; color:#2200bb;}

/*HIDE SECTIONS FOR PRINTING*/

@media print {#tc-page-background {display: none ! important;}} 
@media print {.tc-tags-wrapper {display: none ! important;}} 

 @media print { body.tc-body {background-color: transparent;}
 @media print {.tc-image-chevron-up {display: none ! important;}} 
 @media print {.tc-image-chevron-down {display: none ! important;}} 
 @media print {button.leftbar-toggle {display: none ! important;}} 

@media print {

.story-river {
margin: 0;
padding: 0;
}

html body.tc-body .tc-tiddler-frame {
margin: 0;
border-bottom: 1px solid #fff;
padding: 5px;}

html body.tc-body a.tc-tiddlylink-external:hover {
border: 1px solid <<colour tiddler-border>>;
}

html body.tc-body .tc-tiddler-info {
padding: 14px 42px 14px 42px;
background-color: <<colour tiddler-info-background>>;}

}
}
\define indexvalue() $(title)$|$(caption)$|$(tags)$

<$wikify name=indextitle text={{{ [{$:/SiteTitle}addprefix[index-for-]] }}} >

<$button>Make Index
<$list filter="[all[tiddlers]!is[system]]">
<$vars title={{!!title}} caption={{!!caption}} tags={{!!tags}} >
<$action-setfield $tiddler=<<indextitle>> $index=<<currentTiddler>> $value=<<indexvalue>>/>
</$vars>
</$list>
<$wikify name=tiddlywiki text={{{ [{$:/SiteTitle}addsuffix[.html]][{$:/config/SaveWikiButton/Filename}]+[!is[blank]last[]] }}} >
<$action-setfield $tiddler=<<indextitle>> $field="tiddlywiki" $value=<<tiddlywiki>>/>
<$action-setfield $tiddler=<<indextitle>> $field="index-source" $value="https://giffmex.org/wiki/nt3.html"/>
</$wikify>
</$button>
<$vars tv-config-toolbar-class="tc-button tt-button">
<$list filter="[<indextitle>!is[missing]]">{{||$:/core/ui/Buttons/export-tiddler}}</$list>
</$vars>
</$wikify>

<span class="source"><<stretch "fuente:" "Michaels, //NIBC: John//, ">></span>
<<stretch "{{$:/core/images/options-button}}" "<h8>Michaels, //NIBC: John//, </h8>">>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="replace-selection"
    text="<img src='https://www.giffmex.org/wiki/images/XX/XX'>"
/>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="replace-selection"
    text="<h4></h4><span class='indent1'>


</span>"
/>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="replace-selection"
    text={{$:/.giffmex/currentsource!!text}}  
/>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="replace-selection"
    text={{$:/.giffmex/currentstretch!!text}}  
/>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="wrap-selection"
    prefix="""<span class="">"""
    suffix="""</span>"""
/>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="wrap-selection"
    prefix="[ext[(liga)|"
    suffix="]]"
/>
<$list filter="[!is[system]!has[draft.of]!sort[modified]limit[1]]">
<$view field="modified" format="date" template="0DD de MMM de YYYY"/>
</$list>
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:200, 350,350i,700" rel="stylesheet"> 
iVBORw0KGgoAAAANSUhEUgAAABUAAAAQCAAAAADcsWv5AAAUdXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarZppchy7lYX/5yq8BMwXWA7GiN5BL9/fQZYoiU/PDrtbDLGKxUwMdzgDks/+3/85zz/4l71PT8pWSyvF8S+11ELnTXXvv/fVu3S/vz/kz+/8758/n1fnAh9FXuP7Y9mf6zuf5583WPp8Pn7//LH5Gad+Bvox8mfAqJkDbz7X1c9AMbyf+8/PT/vc19Mv2/n8D3YXr9nfyb79nIxgrMx4MTxhRx8d36tmiawgttj57vkeYuYidz9JMd5P0p9j93y9/Ra8Gf8cO9c/V8TfQ/G48rmgfItR+crSH2N3I/Qta/4z82+/2MkH9+u/X2J3zqrn7Hd3PRUiVZ7PptxniPuOCwlnive2wpfxP/Pe7lfjq7LFScYW2Rx8zcc3H4j28ckv3/3x+75OP1liCjsYryHMEO9nNVpoYd6kJH35E4xkrCdWMjHJWuTj8LUWf+dtd77pKzMvz5XBM5jnjr98PX/68L/5+hroHJWu9wrmjDdWfA8KOMtQ5vSdq0iIP5+Y5hvf+/V8pfXnPyU2ksF8w1zZYHfjHWJk/7O24s1z5Lrs0vMWvfO2PgMQIubOLIbqTt4VH7Mv3lkIBlzEUMlPZ+UUeRhkwOccln8OuYmxkJwaNDf3mL/Xhhzej4EWEpFjiUZqaBeSlVKmfixVaqjnmNOTcy7Zcs0t9xJLKrmUYkUY1S1asmzFzKo16zXWVHMt1WqtrfYWWgTCcivNnlZba70zaWfozt2dK3ofYcSRRh5l2KijjT4pn5lmnmXarLPNvsKKi/ZfZdmz6mqrb78ppZ123mXbrrvtfqi1E086+ZRjp552+lfWPln9PWv+W+b+ddb8J2vKWLrX2c+s8bHZjyG84CQrZ2QsJE/GTRmgoINy5qpPKShzyplrgabIgaz5rOQsr4yRwbR9yMd/5e5n5v5l3p6c/qO8hb/L3KPU/X9k7lHqPpn7a97+kLXVL6O83aguVExdPAAbF/VQe6IDlJe0el5rL7YOQEdNGdxmYfyYfcr+x2vTkCuQscV7BsqdbZqNLHxdTLN+vfzzShLrvTUr0G2wMgAz3pkHc47nDze8l3eQrhRoU78khPG9qxIQNsBidY1p4rve59vkQZ3MG3IWWh7ktdyb/Cptxv5tpQDItjOtE6Ptz9wjcHm00vzYu3XuaHse4Ivwt0iv7JxQAZHA78ayScWdVUFw75qf+6bajSmCAXoJVMS428hBH7s7RY/8t7uStXpp69tWnm+BrVQrOLQo8BuJfW/4MS3rANryGPBaOguoG73lvJqPT9kJXE4nTGcn953i2T7GFcfZVteys04Y2ubM2ZKHbs5pPm2qZq8GT9aZqbinsJ2TFuWTixtr5DRqXSE5CnDS/jFCZ9bPyPkMP1qyMcmcK5S1hkdnzFlqfO4PLg87p3omYW/DLC19DqGmTEkfaRB4c2+fOqkAEOgL6+w4jkgdrX0eYiGVpdr++Uo3/YyT165+TdAfX58FMFAPI+9U+sypj5LYS+pzrWIztUKVrNYznZosDhYHJDl2h5CaPq5J3Jn7WXm2Aw1Mo79OptFOnqR9gUuJ4Zgt+Oloj8TmMwhFsCchO0rDSLfaQh9PO6MeHxahsxjmHCTEA1hkkVBoTuZhxuXHXKmfBcXlcki2XxQUb4/vzP6svnpjcIfyIOPnRBCDMgT2Rj9pFnAmeZAwn+has+r1tUYkfp1VzRDAoSMYiVx6F3h60StQ7/aOaVLPkeFAhsJSF+gTZtqpAXYWcwH4Vk1UPmVexuMGS+2xqm5JqgRvLrdRa0glAOI1CDK7F+w2P/esSYAcaX1yGp1NgwCefmo4KFy/qj+LKnZaFamnXH0hmiqpuBTqseuy4U4FSymP49jSLJ2dxp0fgJQb+64UQFw7DeE1xV7cUQOnsT2LtoZUoMHA9lJ8C3Zon0xP3epOBRHRDdxjKQRjWBnT6Cx3WnXb1d5RnAxtcbs5kNt3UsDhHJR4H1SNEY0y1grPpiPq6pFYDyiztmlg++kXeg1U/zWtR2kVrJBY+jqT0OFvk0HZJPmMM9fZMXc6DnDcKjriQuu/qdzMSiRJRi8rFApt0XfNt9UcjMle01NiSNB1VAbCJpOAI3vtvAmRUp+QW5rVoUTJb2KQDUzWCFAcBSICIQRloEb27LvwA/Gc7CvW5qtkWaDGEwk4lYa57QFtUYGnb2T0sb1Ydx2qulP8ExKimjQ0yHe0tdyZUHSkfxHPMw9+Cr0ORqWmcoaCoKFBwkfusDGMEFLt1T8l0V44j3TrR6g9BNYF5ldVXmD5/RXNLfgIOVmjUbgsQI0PUaf/O7JgSnu0rO6EkkOf4Goto2mCATZoV+vWDS2m0eg/8tcPPLP2E8VGopyb2CmPcfRLSmbRO7T8IcuUHhavBNCapI+DghlVnpEan6oHVC1MRBGPxajlbro5yp4iXGtSmw2FtWaqkItbQHbB1sS5XWMBbAoOqYB5j89mMw09El5CpBGd6qqwUjLpBxgLXBYckBXQN8zaokd3JVzKPJQNGgDJBIwoo9Rg0YZK0YYaNe+6als3hlVyQNigwRYol6cvdG3OEYjdji2eoPoFjxpdQkxkRAhdu+CpOELWXWV10Z3hwkUtmH4DzpWe9BmO2mZYsTGe0eqY6UINoaDzI+2dM1FHdcG9PlqFH3fKEBoF6ERZBahglCU6mMPSptcIPhqttrEPlUUZJmo2+U7WB2Upvp37g6Ar6LWqm7NtGlpY4APsfbc2vmCBZEEFZRDoCAkY0YhvefWAdKg5ey200N01wbFdqAyaTFb9TC0bSX1xEcl5X10Dj5mhv/GynRUMMhdHM3cB01MaDDuPr0Vxf7ZCaXXfygWZaGg4s6CIiBP8QNqRZqU10ibJEHAe7exO8+8MSgu5iTNCC8IJ0hR+FFNPe1EMOwi8PZ9q12/6RSaqvQyWdvmmHtoZmpRWe2isOKFNf9NNv8IuCAOYGqWFcuhxlEIAW1lcCdtMR12rcpHhqO48Vq4goWTN7mZsumXIaM3INPQNFdO5HWbsJ6L90KCSTiT/5dEP4Fpu26Pl2yMqRHGBjVCfrwkPFDZvJz5mSVkitaF2lf6+e0BdXBhh5ZIqJiZtDqEVYxPCZhJA1plEomfCUmg8lMaRa1j0EZu5Ku3UL+GA2ThuX2I+T0ZCrN3o9iKXgt51QKEzxOvRXpa8E6NhSC5fxFm0v/NSk4ajNcYtyJwETDTpVWWpnVtT8GHu0FZCEIK0AN9elarpE5AH1CEe9MrEt6FY0CuA/3E4HcZCahLSnhqgwa24rZrwqHB5m+jsY5ibTqTT2xpO6b1TbpiYOgKdBmqDejBxAwAgyp6SVVgIRcVUfZRL0hZHD3JdVtE7/hq2ggXE+CHiiXmXSryHTKtbIPaD1oSImxQ+7CmLQmuz4rqOyfqQZ7AbUiPGABgscmDNIAnesEysDMOWyLqnRtOBbKFKzKK0rYKbDJr+UthDWm6s7nd/oupRjEEpk1AorhBMOWU0JI5EFQzT7Jngkw3poUheOXaioPZtos2KblKLWDOBVXAfTZxZXfBl0IbULeXESseA2xM0rRODYJDibdwoc8BEj2HRrteB1fHBiITYrhQH/Ah2qoI7TxhyoHfhXoTqAXanGjxQAyLzgtBSjE0iEwpzKDyKtXdwFbUmed1Bf5x+k6CbG0xDpRK5dx/imUXd0nrgUcMVY0tIKhmGWAxlnMLB4YLBov7hEOGnU3bI7oHuBAmhzirgwoUCMOCge8C7rN6u8Qy0hNzRJDgAyZFrxKdBt2AF6bCKEoVZfaUB2C9bsUJciGEu2Cw0yh6yU2gtSYJ48QK8hhJud+1xp78yHx2KAEL4w0qUVMs2V1NXykHSChL9iBp43+N0iZLwlA2B96+1rmFHkZmXDqNOPdC7selTOaYu3TOR7+WE28t0MRXYbiv4vEXe3dlbiOXSAqJLqHF7DuThcmwQ2JHdg2ZEjSCaw5iERsYPiOJSv8UD2LOtrjPD+J32iulZqyoItNjiMDCruidKkPeT6+1kfpeHL4T/JSbWuFQLmaBGv6CmgyBdHbV4qYo6rajiFsIDUk/adoO+Yv8G+sRZwURljphUhKehRMgh0geMVHGGew8FoiXtIyB7qNhcbhwKlp9lxXP7p+54Y71S44q6AIsy+9ABy4696lji4Abxwz05TODz4kcAM+G5yDqZjjWZ6jehNroOD+g1AA+TgxpCVUegUicywAM6+Ejqq9eYekeuOnWWM1tEBwqEl5fm6Cg5OCRLwN8oUqW80PpUSqGExIm1Af6IdEhwIf72ROuj5GkTVHCNe0vDR20TK1VGt6pT3WO3THtgAvyfqMEEtUHHhMKXSD9AUPRBn4F9eG1jztkWgTiTWwSIJa26LlqwAZJzHyMEDMzTdXIuyQOu3guWjmYCrdRZ234PSVC0DV1NAoqsn8+IEUxBp1jILO2e9j1AaALSaX5c+eCQosVHCASERacCQgsBSUvLX/MNs3S1F90UIAesHej70BPUYgp4F0QwcWGC2KqOtHGBbaNK0LXEA4AS0HZfIHGD9aqsvaAsWlT6Ebu0F6mLQ49wJomgte6mYAr0VbrZisvLrYEqw/ecsp+w3MSyYsDwteFBBtzCcLClnlF4aQeR2WsWQugSHSiIil5CZNWFAREN7qwua4h8ah8LIfV+8FoCcmTCzeBAP9sIm53sXQ8FPcX33qeLjzbvGj9zoIgQa+fRuQYuIElsSgfI5UHc2wIT/HpklXSQHhDtyi2SaIfwUjd2/Zz8iO7uGdACKUzshnymTZo8NyIsETXiwbbQ+NjmtN88m/LMNqYwdZtORqNkLZx/BcGJ4XOIVCIs9BrfTjODxuqRhDc7aWCEUWwVdh+zbTwiLAKkzEoFE912W+5IFTbwEevB/I6fwLUGRwFOTWfo2Xuw7xSbvTnpvII5Bvn8dSJ5dTTy1Pr8eU9LcIR2Gh2qoy7KUqRPg1OKM7+0vcALRCKLfGD8gF1RDJL0GCV1m9IkFWmuLsU3Q5cmpbWbBMX1+9BC8RD5OHqeV/H91B2iApcT0GIY4mWgBh1MbAX+OjtyOt8yeQQZQebxUtzAHqQQcBQEBJfNVQGaQUajoCiWAflSlahoOq3G64dg4nohdUL+Jd+NkzTxn8qMSR+6b4n4jJLDgvXX/+g4xGOPMMUJ9mOGSUrAQ0Q02Ws4KQoFKb1B7qUjpweJwX0suiQxaVVHVTKFD6C45Aawqgt/w304JviKgisIYtyep/9xme+pH2ULLLZcqTsJdI/EL1vHl7ct0C7idomVrKWjV3MIVcKJTqFsgsAmrPQcnFM1gw7lZNBO+1P4UkCLitNiBwQ7dQTgi9QXDU+NLvRXTTq9CtbtkUl6yRhBggh+T/bFpupPUYVMmN3q18NJmlmbR7bhjaKMtdnHQfbTXl5PIny60a/lFS8ZJlQBLkaghqrWIxB8L6Xf4n2y7Ar6xmtM0dHAixJ8XAWWkpIf9PeqcssyuAxlTofG6AciqCMPDOolJtD01r+yHh6vEwpAT71BF6IN9j2TQiZuFN4gCz2FhrhopEPHOrfhWYaev11QGX86GP/26rU3IIpIDpe2Gx6A8RmFIqDHwtkFKdJIsJfqTEBEeg5YLG9AysjUprtZw1ov6kwdkqFM9WCJDonnPc9OVznA/Tmj5oFsOQuuLQgz1V1l1M1dpH2hC+7JwHvGnW9hZApDJ594hBl2fXDeVG0QhwP1PcgSuUJiTkQ9Q5EgD5XQr9xChIxfC+SiBkr3k/4KuNiQhZ1HXhbgNvQnPYM8gIWwPDqsk24KuH2kCogIqnkjj269dvBBkpx7oMoGRIGoTjU1ERLkciMrt/iyxgt3B+lwjxlgAHFf8mhihNbQQbonJ4S1wiyswSAawBfMh3bp30ShLsOj6vnDPQphuHsSosdUXidI5QnQOFJqDIxH1kk6tptk5w6ZSUriSe/TgNu0KPAC7IFjERWkIymgiLKIYLbTAT3MDpXv9/kHpaDQbnc5hMiBN/k9eUhtpPrSkZ5u1vup4t3sqR3ZF1aOypBJBUWwsyZ5RnTFpo9gQDzV7JAzYAd1KzRpyNZF0yeMsShIXAcIg5wqST1nPb2zE2XVGij4JvsVZEdMiX9W3+eisx5Ijrw8zD3omKq/6TjOSmV2bG5PaTiCN8BtileHhBCvzpl7JJEsmhXQpliPXie7eZC74HC++AFqwFT7b05Ev05Gm7tv08Q6mVTMfS6iM44CIOYuoxv0ZxP3Gdn7/IvRG24j6QwRCZNQfiQnTByu1wGyztp9p38zlU3WieJekCBse0BUr+dLfZb39PaHavLjF9V084tuIlwxCKSfRn+XhtZNqF+UM0yREuRLj+mkktB1ZIsPIAnNSsrksvIgcGWiGZAg0q2rPaMPa7ljVwMWEfb1ngTljs6RW+XXbHTjAmkIS3UNQ4Y4ZdQduwZJMOzHQ4LbtvegC3rMyI+EniFBeA9BzPXONNmWK7VbpSxER/3xvQ+gw76q14JNnXfEjEzGFgad58eSpIos0Giz6ElGOSrxQkfgC4Ke0Z77wPq2DxoS74WNKrrQHODFqODQvKc5U3er14DOce2uE0URyb8G/kEwVh2TLS8pUX4s9ggZ2Ulps99HwJNSQKugjCMtOrz+auH+cUs7tG4NT5QQiUePpCg2ub/791LF/fEhH674ffCK53s/hN8RS60/KUpRRT14bQxUVLQy/IXC/xO9VB0GjbQLPKQn7VNCatl82j3MQ9/r0T2kXlXObFHGTSUTaXJIQ95Kp4iXokCr9QaBJr1GhhhFVe5AzDMgEHtP1vtkdsABXsY46gEcjHi+tkhfZ2pXanVItfLL0B6dWEZP25n//nj6veu24j16XIQwvHtPLyQpC1BZyrE/932R0aXt/7bj71NWfHDZP678PPX+eij7/PJ0tugPza75M2AbA5FvFtLnyf1fWP3HI/2GSNnPO9m/f6D7716f/H8c4H3FHEPj7fkneZm0hM41qL8AAAACYktHRAAAqo0jMgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAAAd0SU1FB+MLGQ8rGGiFyIoAAADxSURBVBjTbYo9SkNRGETPd28qEbQXXYS7cAfByiaWKVLZyWts7YWABrKGQIRYiZ3YCmIjvgRNER4x5P3cbywSO6eZOYcx4QGQwV/JAglASgA1gMtbiQCYR/jgwDY7xAhABA3njQMWCQBU9wOxej+6GywBNnZ6+XRizHb2T6veqwPIy4f2uJSrP5I3L2fDHzleZN3cVad1Z+a1a5F1vr1lOODRFuxZMBX58a4hVZP2uJRGfUn1pP1YS0hSfpF9Nd03qbjufUpbq/X4dn6+lN8MV9raJEn+fOVSmSRJMjUhAGmqQ0jBQB4sKcKWNwcpmPgnv6+gp3tdTJ7nAAAAAElFTkSuQmCC
AAABAAEAGRYAAAEACADoBgAAFgAAACgAAAAZAAAALAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAICAgAJCQkANjY2AEBAQABMTEwAUFBQAFFRUQBTU1MAV1dXAF1dXQBfX18AYGBgAGFhYQBpaWkAbGxsAG5ubgB+fn4AgoKCAIeHhwCJiYkAjIyMAJKSkgCUlJQAm5ubAKCgoACkpKQApqamAKmpqQCzs7MAtbW1ALa2tgC5ubkAurq6AMXFxQDLy8sAzMzMAM/PzwDR0dEA0tLSANXV1QDW1tYA2dnZANra2gDc3NwA3d3dAN7e3gDi4uIA4+PjAOfn5wDo6OgA6+vrAOzs7ADu7u4A8/PzAPb29gD39/cA+Pj4APn5+QD7+/sA/v7+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PgAAAD4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4AAAA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+AAAAPj4+Pj4+Pj4+Pj4+Pj4+PiodIDc+Pj4+PgAAAD4+Pj4+Pj4+Pj4+Pj4+PiMAAAANOj4+Pj4AAAA+Pj4+Pj4+Pj4+Pj4+Pj4OAAAAACY+Pj4+AAAAPj4+Pj4+Pj4+Pj4+Pj41BAAAAAAmPj4+PgAAAD4+Pj4+Pj4+Pj4+PjUaAwcAAAAMOT4+Pj4AAAA+Pj4+PjwsKzw+NBoBECY9KRweNz4+Pj4+AAAAPj4+PjgPAAAPGQIRJz0+Pj4+Pj4+Pj4+PgAAAD4+Pj4fAAAAAAsoPj4+Pj4+Pj4+Pj4+Pj4AAAA+Pj4+GwAAAAAYPj4+Pj4+Pj4+Pj4+Pj4+AAAAPj4+PiUAAAAAABYxPj4+Pj4+Pj4+Pj4+PgAAAD4+Pj4+IQgJIiwSABUwPj4+Pj4+Pj4+Pj4AAAA+Pj4+Pj4+Pj4+Pi4TABQrFwEGJj4+Pj4+AAAAPj4+Pj4+Pj4+Pj4+Pi8TAAAAAAAzPj4+PgAAAD4+Pj4+Pj4+Pj4+Pj4+PgUAAAAAJD4+Pj4AAAA+Pj4+Pj4+Pj4+Pj4+Pj4TAAAAAC0+Pj4+AAAAPj4+Pj4+Pj4+Pj4+Pj4+MgoAAB0+Pj4+PgAAAD4+Pj4+Pj4+Pj4+Pj4+Pj47MjY+Pj4+Pj4AAAA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+AAAAPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAC3npUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHja7ZdRstsqDIbfWUWXgCSExHIwmJnu4C6/P5jjnOS0nbm9fbgPMROMZfgF+gRJwvnP9xG+4aIiMSQ1zyXniCuVVLii4fG6rjvFtOrrIe939GwP9wuGSXCX6zGfu3+FXR8DLG378WwP1raObyG6hdcl0/Ns736+hYQvO+3nUPa4mj4tZ3+4bdkt/vqcDMHoCj3hwKeQRNQ+vQhmIEUqakLNUnhaDO0oglrkF7ELd/MleHfrJXaxbrs8hyLEj2DnlxhtO+mLXW43/Ezt4fnphcnt4kvsxug+xnmtrqaMSOWwF/WxlNVCxwOhlDUsoxg+iratUlAcS2wg1kHzQGmBCjGiPShRp0qDznVv1DDFxCcb7syNZdlcjAu3BSXNQoMNeHoQB5sGagIz33Oh5bcsf40cnjuhJxPECCO+lPAz45+UW2iMmbpE0e9YYV48cxrTmORmjV4AQmPHVFd8Vwmf8iZ+AisgqCvMjgXWeFwSh9Ijt2RxFvTTmEK8tgZZ3wIIEXwrJoPsThQziVKmaMxGhDg6+FTMnCXxAQKkyp3CABuRDDjO0zfGGK2+rHyZcbQAhErGVvG5gQArJUX+WHLkUFXRFFQ1q6lr0Zolp6w5Z8vzjKomlkwtm5lbseriydWzm7sXr4WL4AjTkouF4qWUWuG0QrpidEWPWg8+5EiHHvmww49y1Ib0aalpy82at9Jq5y4d27/nbqF7L72edCKVznTqmU87/SxnHci1ISMNHXnY8FFGvaltqs/U6IXc76nRpjaJpdXPHtRgNvuQoHmc6GQGYpwIxG0SQELzZBadUuJJbjKLhbEplEGNdMLpNImBYDqJddDN7kHut9yCpn/FjX9FLkx0f4NcmOg2ua/cfkKt1/WNIgvQ3IUzplEGDjZ0OL2y1/md9Mf38F8F3kJvobfQW+gt9BZ6C/1/hAZ+POCvZvgBvBqRK+fClXsAAAAGYktHRAAAAAAAAPlDu38AAAAJcEhZcwAALiMAAC4jAXilP3YAAAAHdElNRQfjCx0XAx5B7KaKAAABEklEQVQ4y93VsS8EURDH8Q8uEUqVSiNXiIRKJFr1KUQtoaQg8S8odUo5EX+BKEjQavgTXDQS4ioJEgpHM5vcnbu1u6e6XzJ5k30v38zMvjdDqzbwhO+M9o4qRqRoHl85oM1WxSwGOoG3C0ITa2A/gQ82gYcUVw3X2MRMO7gXPeMwop3IA17FeKTcTS17WcEvqOdJoZSyV8dZ+A8R0VGkO425ouA7rLV9W491pxfwFE7D38UtTiLiyV5KMYZK+AexVro9gnb913XrA3Ap47ktLGetbx7wYt/VuJ4GbhSEvmEvrcZX+MQwLnHxRzeDD5zjPiaImEK//vJKNJpR3OTsaAsx+8p47HSgjGO85hxNNSwlkB8qP15q5AigKwAAAABJRU5ErkJggg==
https://giffmex.org/wiki/nt3.html
<span class="tiny">[ext[Índice de giffmex.org|www.giffmex.org/wiki/index.html]] > [[Índice de este archivo|Índice, Nuevo Testamento 3]], actualizada<span class="tinybold">{{$:/.giffmex/fecha}}</span></span>
<$action-sendmessage
    $message="tm-edit-text-operation"
    $param="wrap-selection"
    prefix="""[ext[XXX|"""
    suffix="""https://www.biblestudytools.com/nvi/2-cronicas/passage/?q=2-cronicas+3:12-13]]"""
/>
[img width="50%"[]]
<<list-search "[!is[system]sort[title]]" "search" "$:/temp/list-search-example" "$:/core/ui/ListItemTemplate" placeholder:"" >>
!!Compartir ligas

Usa el botón {{$:/.giffmex/images/share.ico}} en la parte superior derecha de cualquier ficha para copiar la liga de la ficha a tu portapapeles. Comparte esta liga con tus amigos en textos, redes sociales o correos electrónicos. Usa este método también para guardar la liga a la ficha en tus marcadores.
<span class="singlelist">   
 
*[[Hebreos]]
*[[Santiago]]
*[[1 Pedro]]
*[[2 Pedro]]
*[[1 Juan]]
*[[2 Juan]]
*[[3 Juan]]
*[[Judas]]
*[[Apocalipsis]]

</span>
!!Descargar

<span class="indent1">Puedes descargar este archivo haciendo clic en este botón: {{$:/core/ui/Buttons/save-wiki}}

Ojo: Las imágenes no aparecerán cuando no estás conectado al Internet.

</span>
\whitespace trim
!!Imprimir

Usa tu navegador web para imprimir los materiales que deseas. 
<<tabs "$:/.giffmex/tabs/refrescar $:/.giffmex/tabs/navegar $:/.giffmex/tabs/imprimir $:/.giffmex/tabs/compartir $:/.giffmex/tabs/descargar $:/.giffmex/tabs/tamano.letra $:/.giffmex/tabs/reportar.errores $:/.giffmex/tabs/otros.materiales" "$:/.giffmex/tabs/tamano.letra" "$:/state/tabinstr" "tc-vertical">>
!!Navegar

*Haz clic en las ligas para abrir los materiales.
*Haz clic en la ''X'' en la parte superior derecha de una ficha para cerra la ficha y regresar a la ficha anterior.
*Otra opción para regresar al Índice principal más rápido es refrescar la página en tu navegador web.

Si sucede que abras una ficha a modo de editar, no te preocupes. No vas a afectar la página o su información. Haz clic en {{$:/core/images/cancel-button}} o {{$:/core/images/done-button}} para regresar al modo de lectura. O puedes refrescar la página en tu navegador web sin peligro.
!!Nuestros otros archivos de materiales

El índice de todos nuestros archivos está [ext[aquí|index.html]]
{{$:/core/ui/MoreSideBar/Recent}}
!!Refrescar para confirmar última versión

Nuestras notas son colecciones que se van expandiendo mientras añadimos más contenido. Cuando regresas a nuestras notas, recomendamos que refresques la página en tu navegador web para confirmar que la versión que aparece es la versión más reciente.
!!Reportar errores

Favor de reportar errores de contenido y/o de ortografía por correo electrónico: dgifford@crcna.org
''Add a link''

*In target file/tiddler, permalink and copy from the file name to the right.
*In linking file/tiddler, stamp the external link text with the {{{$:/core/images/linkify}}} icon, and paste what you copied in the previous step.

''Link to a Bible verse''

*Use the {{{$:/core/images/file}}} to stamp the Bible gateway link.
**MULTIPLE VERSES: use the stamp as is
**SINGLE VERSE: /nvi/filemon/1-4.html
**CHAPTER: /nvi/filipenses/4.html
''Before uploading:''

*[[Disable link-to-tabs|$:/plugins/wikilabs/link-to-tabs]]
*Refresh page
*Hide sidebar
*Save changes in viewtoolbar buttons
!!Cambiar el tamaño de la letra

Usa `Ctrl + +` para aumentar el tamaño de la letra, y `Ctrl + -` para reducirlo.
\define list-search(
filter:"[tags[]]",
search:"search:title",
state:"$:/temp/list-search",
template:"$:/core/ui/ListItemTemplate",
placeholder:"Filter",
limit:100000
)
<div>
<$edit-text
tiddler="$state$"
type="search"
tag="input"
default=""
placeholder="$placeholder$"/>
</div>

<$reveal state="$state$" type="match" text="">
<$list filter="$filter$+[limit[$limit$]]" template="$template$"/>
</$reveal>

<$reveal state="$state$" type="nomatch" text="">
<$list filter="$filter$+[$search${$state$}]+[limit[$limit$]]" template="$template$"/>
</$reveal>
\end
20
$:/core/ui/MoreSideBar/System
$:/core/ui/SideBar/More
permalink
yes
yes
yes
show
hide
disable
{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
        },
        "$:/core/copyright.txt": {
            "title": "$:/core/copyright.txt",
            "type": "text/plain",
            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2018, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
        },
        "$:/core/icon": {
            "title": "$:/core/icon",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/add-comment": {
            "title": "$:/core/images/add-comment",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-add-comment tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M56 56H36a8 8 0 1 0 0 16h20v20a8 8 0 1 0 16 0V72h20a8 8 0 1 0 0-16H72V36a8 8 0 1 0-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n        <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n    </g>\n</svg>"
        },
        "$:/core/images/auto-height": {
            "title": "$:/core/images/auto-height",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-auto-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M67.9867828,114.356363 L67.9579626,99.8785426 C67.9550688,98.4248183 67.1636987,97.087107 65.8909901,96.3845863 L49.9251455,87.5716209 L47.992126,95.0735397 L79.8995411,95.0735397 C84.1215894,95.0735397 85.4638131,89.3810359 81.686497,87.4948823 L49.7971476,71.5713518 L48.0101917,79.1500092 L79.992126,79.1500092 C84.2093753,79.1500092 85.5558421,73.4676733 81.7869993,71.5753162 L49.805065,55.517008 L48.0101916,63.0917009 L79.9921259,63.0917015 C84.2035118,63.0917016 85.5551434,57.4217887 81.7966702,55.5218807 L65.7625147,47.4166161 L67.9579705,50.9864368 L67.9579705,35.6148245 L77.1715737,44.8284272 C78.7336709,46.3905243 81.2663308,46.3905243 82.8284279,44.8284271 C84.390525,43.2663299 84.390525,40.7336699 82.8284278,39.1715728 L66.8284271,23.1715728 C65.2663299,21.6094757 62.73367,21.6094757 61.1715729,23.1715729 L45.1715729,39.1715729 C43.6094757,40.73367 43.6094757,43.26633 45.1715729,44.8284271 C46.73367,46.3905243 49.26633,46.3905243 50.8284271,44.8284271 L59.9579705,35.6988837 L59.9579705,50.9864368 C59.9579705,52.495201 60.806922,53.8755997 62.1534263,54.5562576 L78.1875818,62.6615223 L79.9921261,55.0917015 L48.0101917,55.0917009 C43.7929424,55.0917008 42.4464755,60.7740368 46.2153183,62.6663939 L78.1972526,78.7247021 L79.992126,71.1500092 L48.0101917,71.1500092 C43.7881433,71.1500092 42.4459197,76.842513 46.2232358,78.7286665 L78.1125852,94.6521971 L79.8995411,87.0735397 L47.992126,87.0735397 C43.8588276,87.0735397 42.4404876,92.5780219 46.0591064,94.5754586 L62.024951,103.388424 L59.9579785,99.8944677 L59.9867142,114.32986 L50.8284271,105.171573 C49.26633,103.609476 46.73367,103.609476 45.1715729,105.171573 C43.6094757,106.73367 43.6094757,109.26633 45.1715729,110.828427 L61.1715729,126.828427 C62.73367,128.390524 65.2663299,128.390524 66.8284271,126.828427 L82.8284278,110.828427 C84.390525,109.26633 84.390525,106.73367 82.8284279,105.171573 C81.2663308,103.609476 78.7336709,103.609476 77.1715737,105.171573 L67.9867828,114.356363 L67.9867828,114.356363 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n</svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"></svg>"
        },
        "$:/core/images/bold": {
            "title": "$:/core/images/bold",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-bold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.1456583,51.8095238 L41.1456583,21.8711485 L67.4985994,21.8711485 C70.0084159,21.8711485 72.4285598,22.0802967 74.7591036,22.4985994 C77.0896475,22.9169022 79.1512515,23.6638602 80.9439776,24.7394958 C82.7367036,25.8151314 84.170863,27.3090474 85.2464986,29.2212885 C86.3221342,31.1335296 86.859944,33.5835518 86.859944,36.5714286 C86.859944,41.9496067 85.2465147,45.8337882 82.0196078,48.2240896 C78.792701,50.614391 74.6694929,51.8095238 69.6498599,51.8095238 L41.1456583,51.8095238 Z M13,0 L13,128 L75.0280112,128 C80.7647346,128 86.3519803,127.28292 91.789916,125.848739 C97.2278517,124.414559 102.068139,122.203563 106.310924,119.215686 C110.553709,116.22781 113.929959,112.373506 116.439776,107.652661 C118.949592,102.931816 120.204482,97.3445701 120.204482,90.8907563 C120.204482,82.8832466 118.262391,76.0411115 114.378151,70.3641457 C110.493911,64.6871798 104.607883,60.7133634 96.719888,58.442577 C102.456611,55.6937304 106.788968,52.1680887 109.717087,47.8655462 C112.645206,43.5630037 114.109244,38.1849062 114.109244,31.7310924 C114.109244,25.7553389 113.123259,20.7357813 111.151261,16.6722689 C109.179262,12.6087565 106.400578,9.35201972 102.815126,6.90196078 C99.2296739,4.45190185 94.927196,2.68908101 89.907563,1.61344538 C84.8879301,0.537809748 79.3305627,0 73.2352941,0 L13,0 Z M41.1456583,106.128852 L41.1456583,70.9915966 L71.8011204,70.9915966 C77.896389,70.9915966 82.7964334,72.3958776 86.5014006,75.2044818 C90.2063677,78.0130859 92.0588235,82.7039821 92.0588235,89.2773109 C92.0588235,92.6237329 91.4911355,95.3725383 90.3557423,97.5238095 C89.2203491,99.6750808 87.6965548,101.378145 85.7843137,102.633053 C83.8720726,103.887961 81.661077,104.784311 79.1512605,105.322129 C76.641444,105.859947 74.0121519,106.128852 71.2633053,106.128852 L41.1456583,106.128852 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t    <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n    <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n        <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n        <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n        <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n        <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n        <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/copy-clipboard": {
            "title": "$:/core/images/copy-clipboard",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-copy-clipboard tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\">\n\t\t<rect x=\"40\" y=\"40\" width=\"33\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"82\" width=\"17\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"54\" width=\"17\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"96\" width=\"33\" height=\"8\" rx=\"4\"></rect>\n\t\t<rect x=\"40\" y=\"68\" width=\"12\" height=\"8\" rx=\"4\"></rect>\n\t\t<path d=\"M40,16 L23.9992458,16 C19.5813843,16 16,19.5907123 16,24 C16,24.0016363 16.0000005,24.0032725 16.0000015,24.0049086 C16.0000005,24.0065441 16,24.0081803 16,24.0098166 L16,119.990183 C16,119.99182 16.0000005,119.993456 16.0000015,119.995092 C16.0000005,119.996727 16,119.998364 16,120 C16,124.409288 19.5813843,128 23.9992458,128 L104.000754,128 C106.205061,128 108.203844,127.105595 109.652065,125.659342 C111.102424,124.21251 112,122.214511 112,120.007595 L112,103.992405 C112,99.5776607 108.418278,96 104,96 C99.5907123,96 96,99.5783218 96,103.992405 L96,112 L32,112 L32,32 L96,32 L96,40.0075946 C96,44.4223393 99.581722,48 104,48 C108.409288,48 112,44.4216782 112,40.0075946 L112,23.9924054 C112,21.7851587 111.104671,19.7871591 109.657101,18.3409203 C108.203844,16.8944047 106.205061,16 104.000754,16 L88,16 C88,11.5907123 84.4151006,8 79.9929031,8 L48.0070969,8 C43.5881712,8 40,11.581722 40,16 Z M44,14.9958262 C44,12.7889923 45.7964248,11 48.0000255,11 L79.9999745,11 C82.2091276,11 84,12.7965212 84,14.9958262 L84,19.0041738 C84,21.2110077 82.2035752,23 79.9999745,23 L48.0000255,23 C45.7908724,23 44,21.2034788 44,19.0041738 L44,14.9958262 Z\"></path>\n\t\t<rect x=\"62\" y=\"64\" width=\"66\" height=\"16\" rx=\"8\"></rect>\n\t\t<path d=\"M60.6568542,85.6568542 L76.6568542,69.6568543 L65.3431458,69.6568542 L81.3431458,85.6568542 C84.4673401,88.7810486 89.5326599,88.7810486 92.6568542,85.6568542 C95.7810486,82.5326599 95.7810486,77.4673401 92.6568542,74.3431458 L76.6568542,58.3431458 C73.5326599,55.2189514 68.4673401,55.2189514 65.3431458,58.3431457 L49.3431458,74.3431457 C46.2189514,77.4673401 46.2189514,82.5326599 49.3431457,85.6568542 C52.4673401,88.7810486 57.5326599,88.7810486 60.6568542,85.6568542 L60.6568542,85.6568542 Z\" transform=\"translate(71.000000, 72.000000) rotate(-90.000000) translate(-71.000000, -72.000000) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n        <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n        <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/erase": {
            "title": "$:/core/images/erase",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-erase tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60.0870401,127.996166 L123.102318,64.980888 C129.636723,58.4464827 129.629513,47.8655877 123.098967,41.3350425 L99.4657866,17.7018617 C92.927448,11.1635231 82.3486358,11.1698163 75.8199411,17.698511 L4.89768189,88.6207702 C-1.63672343,95.1551755 -1.6295126,105.736071 4.90103262,112.266616 L20.6305829,127.996166 L60.0870401,127.996166 Z M25.1375576,120.682546 L10.812569,106.357558 C7.5455063,103.090495 7.54523836,97.793808 10.8048093,94.5342371 L46.2691086,59.0699377 L81.7308914,94.5317205 L55.5800654,120.682546 L25.1375576,120.682546 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/excise": {
            "title": "$:/core/images/excise",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-excise tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M56,107.313709 L53.6568542,109.656854 C50.5326599,112.781049 45.4673401,112.781049 42.3431457,109.656854 C39.2189514,106.53266 39.2189514,101.46734 42.3431458,98.3431457 L58.3431458,82.3431457 C61.4673401,79.2189514 66.5326599,79.2189514 69.6568542,82.3431458 L85.6568542,98.3431458 C88.7810486,101.46734 88.7810486,106.53266 85.6568542,109.656854 C82.5326599,112.781049 77.4673401,112.781049 74.3431458,109.656854 L72,107.313708 L72,121.597798 C72,125.133636 68.418278,128 64,128 C59.581722,128 56,125.133636 56,121.597798 L56,107.313709 Z M0,40.0070969 C0,35.5848994 3.59071231,32 8,32 C12.418278,32 16,35.5881712 16,40.0070969 L16,71.9929031 C16,76.4151006 12.4092877,80 8,80 C3.581722,80 0,76.4118288 0,71.9929031 L0,40.0070969 Z M32,40.0070969 C32,35.5848994 35.5907123,32 40,32 C44.418278,32 48,35.5881712 48,40.0070969 L48,71.9929031 C48,76.4151006 44.4092877,80 40,80 C35.581722,80 32,76.4118288 32,71.9929031 L32,40.0070969 Z M80,40.0070969 C80,35.5848994 83.5907123,32 88,32 C92.418278,32 96,35.5881712 96,40.0070969 L96,71.9929031 C96,76.4151006 92.4092877,80 88,80 C83.581722,80 80,76.4118288 80,71.9929031 L80,40.0070969 Z M56,8.00709688 C56,3.58489938 59.5907123,0 64,0 C68.418278,0 72,3.58817117 72,8.00709688 L72,39.9929031 C72,44.4151006 68.4092877,48 64,48 C59.581722,48 56,44.4118288 56,39.9929031 L56,8.00709688 Z M112,40.0070969 C112,35.5848994 115.590712,32 120,32 C124.418278,32 128,35.5881712 128,40.0070969 L128,71.9929031 C128,76.4151006 124.409288,80 120,80 C115.581722,80 112,76.4118288 112,71.9929031 L112,40.0070969 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/file": {
            "title": "$:/core/images/file",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-file tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z\"></path>\n        <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"68\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"84\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"100\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/fixed-height": {
            "title": "$:/core/images/fixed-height",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fixed-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60,35.6568542 L50.8284271,44.8284271 C49.26633,46.3905243 46.73367,46.3905243 45.1715729,44.8284271 C43.6094757,43.26633 43.6094757,40.73367 45.1715729,39.1715729 L61.1715729,23.1715729 C62.73367,21.6094757 65.2663299,21.6094757 66.8284271,23.1715728 L82.8284278,39.1715728 C84.390525,40.7336699 84.390525,43.2663299 82.8284279,44.8284271 C81.2663308,46.3905243 78.7336709,46.3905243 77.1715737,44.8284272 L68,35.6568539 L68,93.3431461 L77.1715737,84.1715728 C78.7336709,82.6094757 81.2663308,82.6094757 82.8284279,84.1715729 C84.390525,85.7336701 84.390525,88.2663301 82.8284278,89.8284272 L66.8284271,105.828427 C65.2663299,107.390524 62.73367,107.390524 61.1715729,105.828427 L45.1715729,89.8284271 C43.6094757,88.26633 43.6094757,85.73367 45.1715729,84.1715729 C46.73367,82.6094757 49.26633,82.6094757 50.8284271,84.1715729 L60,93.3431458 L60,35.6568542 L60,35.6568542 Z M16,116 L112,116 C114.209139,116 116,114.209139 116,112 C116,109.790861 114.209139,108 112,108 L16,108 C13.790861,108 12,109.790861 12,112 C12,114.209139 13.790861,116 16,116 L16,116 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-all-button": {
            "title": "$:/core/images/fold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,58.6235628 C61.9791013,58.6242848 59.9275217,57.8435723 58.3632024,56.279253 L35.7458219,33.6618725 C32.6211696,30.5372202 32.6166093,25.4673401 35.7408036,22.3431458 C38.8586409,19.2253085 43.9325646,19.2211982 47.0595304,22.348164 L64.0250749,39.3137085 L80.9906194,22.348164 C84.1152717,19.2235117 89.1851518,19.2189514 92.3093461,22.3431458 C95.4271834,25.460983 95.4312937,30.5349067 92.3043279,33.6618725 L69.6869474,56.279253 C68.1237851,57.8424153 66.0737951,58.6247195 64.0241231,58.6250809 Z\" transform=\"translate(64.024316, 39.313708) scale(1, -1) translate(-64.024316, -39.313708) \"></path>\n        <path d=\"M64.0292774,123.621227 C61.9791013,123.621949 59.9275217,122.841236 58.3632024,121.276917 L35.7458219,98.6595365 C32.6211696,95.5348842 32.6166093,90.4650041 35.7408036,87.3408098 C38.8586409,84.2229725 43.9325646,84.2188622 47.0595304,87.345828 L64.0250749,104.311373 L80.9906194,87.345828 C84.1152717,84.2211757 89.1851518,84.2166154 92.3093461,87.3408098 C95.4271834,90.458647 95.4312937,95.5325707 92.3043279,98.6595365 L69.6869474,121.276917 C68.1237851,122.840079 66.0737951,123.622383 64.0241231,123.622745 Z\" transform=\"translate(64.024316, 104.311372) scale(1, -1) translate(-64.024316, -104.311372) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-button": {
            "title": "$:/core/images/fold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,63.6235628 C61.9791013,63.6242848 59.9275217,62.8435723 58.3632024,61.279253 L35.7458219,38.6618725 C32.6211696,35.5372202 32.6166093,30.4673401 35.7408036,27.3431458 C38.8586409,24.2253085 43.9325646,24.2211982 47.0595304,27.348164 L64.0250749,44.3137085 L80.9906194,27.348164 C84.1152717,24.2235117 89.1851518,24.2189514 92.3093461,27.3431458 C95.4271834,30.460983 95.4312937,35.5349067 92.3043279,38.6618725 L69.6869474,61.279253 C68.1237851,62.8424153 66.0737951,63.6247195 64.0241231,63.6250809 Z\" transform=\"translate(64.024316, 44.313708) scale(1, -1) translate(-64.024316, -44.313708) \"></path>\n        <path d=\"M64.0049614,105.998482 C61.9547853,105.999204 59.9032057,105.218491 58.3388864,103.654172 L35.7215059,81.0367916 C32.5968535,77.9121393 32.5922933,72.8422592 35.7164876,69.7180649 C38.8343248,66.6002276 43.9082485,66.5961173 47.0352144,69.7230831 L64.0007589,86.6886276 L80.9663034,69.7230831 C84.0909557,66.5984308 89.1608358,66.5938705 92.2850301,69.7180649 C95.4028673,72.8359021 95.4069777,77.9098258 92.2800119,81.0367916 L69.6626314,103.654172 C68.099469,105.217334 66.0494791,105.999639 63.999807,106 Z\" transform=\"translate(64.000000, 86.688628) scale(1, -1) translate(-64.000000, -86.688628) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-others-button": {
            "title": "$:/core/images/fold-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-others tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"56.0314331\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M101.657101,104.948818 C100.207918,103.498614 98.2051847,102.599976 95.9929031,102.599976 L72,102.599976 L72,78.6070725 C72,76.3964271 71.1036108,74.3936927 69.6545293,72.9441002 L69.6571005,72.9488183 C68.2079177,71.4986143 66.2051847,70.5999756 63.9929031,70.5999756 L32.0070969,70.5999756 C27.5881712,70.5999756 24,74.1816976 24,78.5999756 C24,83.0092633 27.5848994,86.5999756 32.0070969,86.5999756 L56,86.5999756 L56,110.592879 C56,112.803524 56.8963895,114.806259 58.3454713,116.255852 L58.3429,116.251133 C59.7920828,117.701337 61.7948156,118.599976 64.0070969,118.599976 L88,118.599976 L88,142.592879 C88,147.011804 91.581722,150.599976 96,150.599976 C100.409288,150.599976 104,147.015076 104,142.592879 L104,110.607072 C104,108.396427 103.103611,106.393693 101.654529,104.9441 Z\" transform=\"translate(64.000000, 110.599976) rotate(-45.000000) translate(-64.000000, -110.599976) \"></path>\n        <path d=\"M101.725643,11.7488671 C100.27646,10.2986632 98.2737272,9.40002441 96.0614456,9.40002441 L72.0685425,9.40002441 L72.0685425,-14.5928787 C72.0685425,-16.8035241 71.1721533,-18.8062584 69.7230718,-20.255851 L69.725643,-20.2511329 C68.2764602,-21.7013368 66.2737272,-22.5999756 64.0614456,-22.5999756 L32.0756394,-22.5999756 C27.6567137,-22.5999756 24.0685425,-19.0182536 24.0685425,-14.5999756 C24.0685425,-10.1906879 27.6534419,-6.59997559 32.0756394,-6.59997559 L56.0685425,-6.59997559 L56.0685425,17.3929275 C56.0685425,19.6035732 56.964932,21.6063078 58.4140138,23.0559004 L58.4114425,23.0511823 C59.8606253,24.5013859 61.8633581,25.4000244 64.0756394,25.4000244 L88.0685425,25.4000244 L88.0685425,49.3929275 C88.0685425,53.8118532 91.6502645,57.4000244 96.0685425,57.4000244 C100.47783,57.4000244 104.068542,53.815125 104.068542,49.3929275 L104.068542,17.4071213 C104.068542,15.1964759 103.172153,13.1937416 101.723072,11.744149 Z\" transform=\"translate(64.068542, 17.400024) scale(1, -1) rotate(-45.000000) translate(-64.068542, -17.400024) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/folder": {
            "title": "$:/core/images/folder",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-folder tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z\"></path>\n        <path d=\"M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g>\n        <g>\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-github tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n        <g fill-rule=\"evenodd\">\n            <path d=\"M63.9383506,1.60695328 C28.6017227,1.60695328 -0.055756057,30.2970814 -0.055756057,65.6906208 C-0.055756057,94.003092 18.2804728,118.019715 43.7123154,126.493393 C46.9143781,127.083482 48.0812647,125.104717 48.0812647,123.405261 C48.0812647,121.886765 48.02626,117.85449 47.9948287,112.508284 C30.1929317,116.379268 26.4368926,103.916587 26.4368926,103.916587 C23.5255693,96.5129372 19.3294921,94.5420399 19.3294921,94.5420399 C13.5186324,90.5687739 19.7695302,90.6474524 19.7695302,90.6474524 C26.1933001,91.099854 29.5721638,97.2525155 29.5721638,97.2525155 C35.2808718,107.044059 44.5531024,104.215566 48.1991321,102.575118 C48.7806109,98.4366275 50.4346826,95.612068 52.2616263,94.0109598 C38.0507543,92.3941159 23.1091047,86.8944862 23.1091047,62.3389152 C23.1091047,55.3443933 25.6039634,49.6205298 29.6978889,45.1437211 C29.0378318,43.5229433 26.8415704,37.0044266 30.3265147,28.1845627 C30.3265147,28.1845627 35.6973364,26.4615028 47.9241083,34.7542205 C53.027764,33.330139 58.5046663,32.6220321 63.9462084,32.5944947 C69.3838216,32.6220321 74.856795,33.330139 79.9683085,34.7542205 C92.1872225,26.4615028 97.5501864,28.1845627 97.5501864,28.1845627 C101.042989,37.0044266 98.8467271,43.5229433 98.190599,45.1437211 C102.292382,49.6205298 104.767596,55.3443933 104.767596,62.3389152 C104.767596,86.9574291 89.8023734,92.3744463 75.5482834,93.9598188 C77.8427675,95.9385839 79.8897303,99.8489072 79.8897303,105.828476 C79.8897303,114.392635 79.8111521,121.304544 79.8111521,123.405261 C79.8111521,125.120453 80.966252,127.114954 84.2115327,126.489459 C109.623731,117.996111 127.944244,93.9952241 127.944244,65.6906208 C127.944244,30.2970814 99.2867652,1.60695328 63.9383506,1.60695328\"></path>\n        </g>\n    </svg>\n"
        },
        "$:/core/images/gitter": {
            "title": "$:/core/images/gitter",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-gitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 18 25\">\n  <rect x=\"15\" y=\"5\" width=\"2\" height=\"10\"></rect>\n  <rect x=\"10\" y=\"5\" width=\"2\" height=\"20\"></rect>\n  <rect x=\"5\" y=\"5\" width=\"2\" height=\"20\"></rect>\n  <rect width=\"2\" height=\"15\"></rect>\n</svg>\n"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n        <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n        <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-1": {
            "title": "$:/core/images/heading-1",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-1 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M14,30 L27.25,30 L27.25,60.104 L61.7,60.104 L61.7,30 L74.95,30 L74.95,105.684 L61.7,105.684 L61.7,71.552 L27.25,71.552 L27.25,105.684 L14,105.684 L14,30 Z M84.3350766,43.78 C86.8790893,43.78 89.3523979,43.5680021 91.7550766,43.144 C94.1577553,42.7199979 96.3307336,42.0133383 98.2740766,41.024 C100.21742,40.0346617 101.87807,38.7626744 103.256077,37.208 C104.634084,35.6533256 105.535075,33.7453446 105.959077,31.484 L115.817077,31.484 L115.817077,105.684 L102.567077,105.684 L102.567077,53.32 L84.3350766,53.32 L84.3350766,43.78 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-2": {
            "title": "$:/core/images/heading-2",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-2 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M125.519077,105.684 L74.8510766,105.684 C74.9217436,99.5359693 76.4057288,94.1653563 79.3030766,89.572 C82.2004244,84.9786437 86.1577182,80.986017 91.1750766,77.594 C93.5777553,75.8273245 96.0863969,74.113675 98.7010766,72.453 C101.315756,70.792325 103.718399,69.0080095 105.909077,67.1 C108.099754,65.1919905 109.901736,63.1250111 111.315077,60.899 C112.728417,58.6729889 113.47041,56.1113478 113.541077,53.214 C113.541077,51.8713266 113.382078,50.4403409 113.064077,48.921 C112.746075,47.4016591 112.127748,45.9883399 111.209077,44.681 C110.290405,43.3736601 109.018418,42.2783377 107.393077,41.395 C105.767735,40.5116622 103.647756,40.07 101.033077,40.07 C98.6303979,40.07 96.6340846,40.5469952 95.0440766,41.501 C93.4540687,42.4550048 92.1820814,43.762325 91.2280766,45.423 C90.2740719,47.083675 89.5674123,49.0446554 89.1080766,51.306 C88.648741,53.5673446 88.3837436,56.0053203 88.3130766,58.62 L76.2290766,58.62 C76.2290766,54.5213128 76.7767378,50.7230175 77.8720766,47.225 C78.9674154,43.7269825 80.610399,40.7060127 82.8010766,38.162 C84.9917542,35.6179873 87.6593942,33.6216739 90.8040766,32.173 C93.948759,30.7243261 97.6057224,30 101.775077,30 C106.297766,30 110.078395,30.7419926 113.117077,32.226 C116.155758,33.7100074 118.611401,35.5826554 120.484077,37.844 C122.356753,40.1053446 123.681739,42.5609868 124.459077,45.211 C125.236414,47.8610133 125.625077,50.3873213 125.625077,52.79 C125.625077,55.7580148 125.165748,58.4433213 124.247077,60.846 C123.328405,63.2486787 122.091751,65.4569899 120.537077,67.471 C118.982402,69.4850101 117.215753,71.3399915 115.237077,73.036 C113.2584,74.7320085 111.209087,76.3219926 109.089077,77.806 C106.969066,79.2900074 104.849087,80.7033266 102.729077,82.046 C100.609066,83.3886734 98.6480856,84.7313266 96.8460766,86.074 C95.0440676,87.4166734 93.47175,88.8123261 92.1290766,90.261 C90.7864032,91.7096739 89.8677458,93.2466585 89.3730766,94.872 L125.519077,94.872 L125.519077,105.684 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-3": {
            "title": "$:/core/images/heading-3",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-3 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M94.8850766,62.224 C96.8637532,62.294667 98.8424001,62.1533351 100.821077,61.8 C102.799753,61.4466649 104.566402,60.8283378 106.121077,59.945 C107.675751,59.0616623 108.930072,57.8426744 109.884077,56.288 C110.838081,54.7333256 111.315077,52.8253446 111.315077,50.564 C111.315077,47.3839841 110.237421,44.8400095 108.082077,42.932 C105.926733,41.0239905 103.153094,40.07 99.7610766,40.07 C97.641066,40.07 95.8037511,40.4939958 94.2490766,41.342 C92.6944022,42.1900042 91.4047484,43.3383261 90.3800766,44.787 C89.3554048,46.2356739 88.5957458,47.860991 88.1010766,49.663 C87.6064075,51.465009 87.3944096,53.3199905 87.4650766,55.228 L75.3810766,55.228 C75.5224107,51.623982 76.1937373,48.2850154 77.3950766,45.211 C78.596416,42.1369846 80.2393995,39.4693446 82.3240766,37.208 C84.4087537,34.9466554 86.9350618,33.1800064 89.9030766,31.908 C92.8710915,30.6359936 96.2277246,30 99.9730766,30 C102.870424,30 105.714729,30.4239958 108.506077,31.272 C111.297424,32.1200042 113.806065,33.3566585 116.032077,34.982 C118.258088,36.6073415 120.042403,38.6743208 121.385077,41.183 C122.72775,43.6916792 123.399077,46.5713171 123.399077,49.822 C123.399077,53.5673521 122.551085,56.8356527 120.855077,59.627 C119.159068,62.4183473 116.509095,64.4499936 112.905077,65.722 L112.905077,65.934 C117.145098,66.7820042 120.448731,68.8843166 122.816077,72.241 C125.183422,75.5976835 126.367077,79.6786426 126.367077,84.484 C126.367077,88.017351 125.660417,91.1796527 124.247077,93.971 C122.833736,96.7623473 120.925755,99.129657 118.523077,101.073 C116.120398,103.016343 113.329093,104.517995 110.149077,105.578 C106.969061,106.638005 103.612428,107.168 100.079077,107.168 C95.7683884,107.168 92.005426,106.549673 88.7900766,105.313 C85.5747272,104.076327 82.8894207,102.327345 80.7340766,100.066 C78.5787325,97.8046554 76.9357489,95.0840159 75.8050766,91.904 C74.6744043,88.7239841 74.0737436,85.1906861 74.0030766,81.304 L86.0870766,81.304 C85.9457426,85.8266893 87.0587315,89.5896517 89.4260766,92.593 C91.7934218,95.5963483 95.3443863,97.098 100.079077,97.098 C104.107097,97.098 107.481396,95.9496782 110.202077,93.653 C112.922757,91.3563219 114.283077,88.0880212 114.283077,83.848 C114.283077,80.9506522 113.717749,78.6540085 112.587077,76.958 C111.456404,75.2619915 109.972419,73.9723378 108.135077,73.089 C106.297734,72.2056623 104.230755,71.6580011 101.934077,71.446 C99.6373985,71.2339989 97.2877553,71.163333 94.8850766,71.234 L94.8850766,62.224 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-4": {
            "title": "$:/core/images/heading-4",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-4 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8,30 L21.25,30 L21.25,60.104 L55.7,60.104 L55.7,30 L68.95,30 L68.95,105.684 L55.7,105.684 L55.7,71.552 L21.25,71.552 L21.25,105.684 L8,105.684 L8,30 Z M84.5890766,78.548 L107.061077,78.548 L107.061077,45.9 L106.849077,45.9 L84.5890766,78.548 Z M128.049077,88.088 L118.509077,88.088 L118.509077,105.684 L107.061077,105.684 L107.061077,88.088 L75.2610766,88.088 L75.2610766,76.11 L107.061077,31.484 L118.509077,31.484 L118.509077,78.548 L128.049077,78.548 L128.049077,88.088 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-5": {
            "title": "$:/core/images/heading-5",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-5 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M83.7550766,31.484 L122.127077,31.484 L122.127077,42.296 L92.7650766,42.296 L88.9490766,61.164 L89.1610766,61.376 C90.7864181,59.5386575 92.8533974,58.1430048 95.3620766,57.189 C97.8707558,56.2349952 100.361731,55.758 102.835077,55.758 C106.509762,55.758 109.795729,56.3763272 112.693077,57.613 C115.590424,58.8496729 118.0284,60.5809889 120.007077,62.807 C121.985753,65.0330111 123.487405,67.6653181 124.512077,70.704 C125.536748,73.7426819 126.049077,77.028649 126.049077,80.562 C126.049077,83.5300148 125.572081,86.5863176 124.618077,89.731 C123.664072,92.8756824 122.144754,95.7376538 120.060077,98.317 C117.9754,100.896346 115.30776,103.016325 112.057077,104.677 C108.806394,106.337675 104.919766,107.168 100.397077,107.168 C96.7930586,107.168 93.454092,106.691005 90.3800766,105.737 C87.3060613,104.782995 84.6030883,103.35201 82.2710766,101.444 C79.939065,99.5359905 78.0840835,97.1863473 76.7060766,94.395 C75.3280697,91.6036527 74.5684107,88.3353521 74.4270766,84.59 L86.5110766,84.59 C86.8644117,88.6180201 88.2423979,91.7096559 90.6450766,93.865 C93.0477553,96.0203441 96.2277235,97.098 100.185077,97.098 C102.729089,97.098 104.884401,96.6740042 106.651077,95.826 C108.417752,94.9779958 109.848738,93.8120074 110.944077,92.328 C112.039415,90.8439926 112.816741,89.1126766 113.276077,87.134 C113.735412,85.1553234 113.965077,83.0353446 113.965077,80.774 C113.965077,78.7246564 113.682413,76.763676 113.117077,74.891 C112.55174,73.018324 111.703749,71.3753404 110.573077,69.962 C109.442404,68.5486596 107.976086,67.4180042 106.174077,66.57 C104.372068,65.7219958 102.269755,65.298 99.8670766,65.298 C97.3230639,65.298 94.9380878,65.7749952 92.7120766,66.729 C90.4860655,67.6830048 88.8784149,69.4673203 87.8890766,72.082 L75.8050766,72.082 L83.7550766,31.484 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-6": {
            "title": "$:/core/images/heading-6",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-6 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M112.587077,50.246 C112.304409,47.2073181 111.226753,44.751676 109.354077,42.879 C107.481401,41.006324 104.955093,40.07 101.775077,40.07 C99.584399,40.07 97.6940846,40.4763293 96.1040766,41.289 C94.5140687,42.1016707 93.1714154,43.1793266 92.0760766,44.522 C90.9807378,45.8646734 90.0974133,47.401658 89.4260766,49.133 C88.7547399,50.864342 88.2070787,52.6839905 87.7830766,54.592 C87.3590745,56.5000095 87.0587442,58.390324 86.8820766,60.263 C86.7054091,62.135676 86.5464107,63.8846585 86.4050766,65.51 L86.6170766,65.722 C88.2424181,62.7539852 90.4860623,60.5456739 93.3480766,59.097 C96.2100909,57.6483261 99.3017267,56.924 102.623077,56.924 C106.297762,56.924 109.583729,57.5599936 112.481077,58.832 C115.378424,60.1040064 117.834067,61.8529889 119.848077,64.079 C121.862087,66.3050111 123.399071,68.9373181 124.459077,71.976 C125.519082,75.0146819 126.049077,78.300649 126.049077,81.834 C126.049077,85.438018 125.466082,88.7769846 124.300077,91.851 C123.134071,94.9250154 121.455754,97.6103219 119.265077,99.907 C117.074399,102.203678 114.459758,103.987994 111.421077,105.26 C108.382395,106.532006 105.025762,107.168 101.351077,107.168 C95.9097161,107.168 91.4400941,106.16101 87.9420766,104.147 C84.4440591,102.13299 81.6880867,99.3770175 79.6740766,95.879 C77.6600666,92.3809825 76.2644138,88.2823568 75.4870766,83.583 C74.7097394,78.8836432 74.3210766,73.8133605 74.3210766,68.372 C74.3210766,63.9199777 74.7980719,59.4326893 75.7520766,54.91 C76.7060814,50.3873107 78.278399,46.2710186 80.4690766,42.561 C82.6597542,38.8509815 85.5393921,35.8300117 89.1080766,33.498 C92.6767611,31.1659883 97.0757171,30 102.305077,30 C105.273091,30 108.064397,30.4946617 110.679077,31.484 C113.293756,32.4733383 115.608067,33.8513245 117.622077,35.618 C119.636087,37.3846755 121.27907,39.5046543 122.551077,41.978 C123.823083,44.4513457 124.529743,47.2073181 124.671077,50.246 L112.587077,50.246 Z M100.927077,97.098 C103.117754,97.098 105.025735,96.6563378 106.651077,95.773 C108.276418,94.8896623 109.636738,93.7413404 110.732077,92.328 C111.827415,90.9146596 112.640074,89.271676 113.170077,87.399 C113.700079,85.526324 113.965077,83.6006766 113.965077,81.622 C113.965077,79.6433234 113.700079,77.7353425 113.170077,75.898 C112.640074,74.0606575 111.827415,72.4530069 110.732077,71.075 C109.636738,69.6969931 108.276418,68.5840042 106.651077,67.736 C105.025735,66.8879958 103.117754,66.464 100.927077,66.464 C98.736399,66.464 96.8107516,66.8703293 95.1500766,67.683 C93.4894017,68.4956707 92.0937489,69.5909931 90.9630766,70.969 C89.8324043,72.3470069 88.9844128,73.9546575 88.4190766,75.792 C87.8537405,77.6293425 87.5710766,79.5726564 87.5710766,81.622 C87.5710766,83.6713436 87.8537405,85.6146575 88.4190766,87.452 C88.9844128,89.2893425 89.8324043,90.9323261 90.9630766,92.381 C92.0937489,93.8296739 93.4894017,94.9779958 95.1500766,95.826 C96.8107516,96.6740042 98.736399,97.098 100.927077,97.098 L100.927077,97.098 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-help tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M36.0548906,111.44117 C30.8157418,115.837088 20.8865444,118.803477 9.5,118.803477 C7.86465619,118.803477 6.25937294,118.742289 4.69372699,118.624467 C12.612543,115.984876 18.7559465,110.02454 21.0611049,102.609942 C8.74739781,92.845129 1.04940554,78.9359851 1.04940554,63.5 C1.04940554,33.9527659 29.2554663,10 64.0494055,10 C98.8433448,10 127.049406,33.9527659 127.049406,63.5 C127.049406,93.0472341 98.8433448,117 64.0494055,117 C53.9936953,117 44.48824,114.999337 36.0548906,111.44117 L36.0548906,111.44117 Z M71.4042554,77.5980086 C71.406883,77.2865764 71.4095079,76.9382011 71.4119569,76.5610548 C71.4199751,75.3262169 71.4242825,74.0811293 71.422912,72.9158546 C71.4215244,71.736154 71.4143321,70.709635 71.4001396,69.8743525 C71.4078362,68.5173028 71.9951951,67.7870427 75.1273009,65.6385471 C75.2388969,65.5619968 76.2124091,64.8981068 76.5126553,64.6910879 C79.6062455,62.5580654 81.5345849,60.9050204 83.2750652,58.5038955 C85.6146327,55.2762841 86.8327108,51.426982 86.8327108,46.8554323 C86.8327108,33.5625756 76.972994,24.9029551 65.3778484,24.9029551 C54.2752771,24.9029551 42.8794554,34.5115163 41.3121702,47.1975534 C40.9043016,50.4989536 43.2499725,53.50591 46.5513726,53.9137786 C49.8527728,54.3216471 52.8597292,51.9759763 53.2675978,48.6745761 C54.0739246,42.1479456 60.2395837,36.9492759 65.3778484,36.9492759 C70.6427674,36.9492759 74.78639,40.5885487 74.78639,46.8554323 C74.78639,50.4892974 73.6853224,52.008304 69.6746221,54.7736715 C69.4052605,54.9593956 68.448509,55.6118556 68.3131127,55.7047319 C65.6309785,57.5445655 64.0858213,58.803255 62.6123358,60.6352315 C60.5044618,63.2559399 59.3714208,66.3518252 59.3547527,69.9487679 C59.3684999,70.8407274 59.3752803,71.8084521 59.3765995,72.9300232 C59.3779294,74.0607297 59.3737237,75.2764258 59.36589,76.482835 C59.3634936,76.8518793 59.3609272,77.1924914 59.3583633,77.4963784 C59.3568319,77.6778944 59.3556368,77.8074256 59.3549845,77.8730928 C59.3219814,81.1994287 61.9917551,83.9227111 65.318091,83.9557142 C68.644427,83.9887173 71.3677093,81.3189435 71.4007124,77.9926076 C71.4014444,77.9187458 71.402672,77.7856841 71.4042554,77.5980086 Z M65.3778489,102.097045 C69.5359735,102.097045 72.9067994,98.7262189 72.9067994,94.5680944 C72.9067994,90.4099698 69.5359735,87.0391439 65.3778489,87.0391439 C61.2197243,87.0391439 57.8488984,90.4099698 57.8488984,94.5680944 C57.8488984,98.7262189 61.2197243,102.097045 65.3778489,102.097045 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <g transform=\"translate(0.049406, 0.000000)\">\n            <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n            <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n            <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/italic": {
            "title": "$:/core/images/italic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-italic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n         <polygon points=\"66.7114846 0 89.1204482 0 62.4089636 128 40 128\"></polygon>\n    </g>\n</svg>"
        },
        "$:/core/images/left-arrow": {
            "title": "$:/core/images/left-arrow",
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-left-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path transform=\"rotate(135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25075c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056z\"/>\n</svg>\n"
        },
        "$:/core/images/line-width": {
            "title": "$:/core/images/line-width",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-line-width tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M128,-97 L112.992786,-97 C112.452362,-97 112,-96.5522847 112,-96 C112,-95.4438648 112.444486,-95 112.992786,-95 L128,-95 L128,-97 Z M128,-78.6794919 L111.216185,-88.3696322 C110.748163,-88.6398444 110.132549,-88.4782926 109.856406,-88 C109.578339,-87.5183728 109.741342,-86.9117318 110.216185,-86.6375814 L128,-76.3700908 L128,-78.6794919 Z M78.6794919,-128 L88.3696322,-111.216185 C88.6437826,-110.741342 88.4816272,-110.134474 88,-109.856406 C87.5217074,-109.580264 86.9077936,-109.748163 86.6375814,-110.216185 L76.3700908,-128 L78.6794919,-128 Z M97,-128 L97,-112.992786 C97,-112.444486 96.5561352,-112 96,-112 C95.4477153,-112 95,-112.452362 95,-112.992786 L95,-128 L97,-128 Z M115.629909,-128 L105.362419,-110.216185 C105.088268,-109.741342 104.481627,-109.578339 104,-109.856406 C103.521707,-110.132549 103.360156,-110.748163 103.630368,-111.216185 L113.320508,-128 L115.629909,-128 Z M128,-113.320508 L111.216185,-103.630368 C110.741342,-103.356217 110.134474,-103.518373 109.856406,-104 C109.580264,-104.478293 109.748163,-105.092206 110.216185,-105.362419 L128,-115.629909 L128,-113.320508 Z M48,-96 C48,-96.5522847 48.4523621,-97 48.9927864,-97 L79.0072136,-97 C79.5555144,-97 80,-96.5561352 80,-96 C80,-95.4477153 79.5476379,-95 79.0072136,-95 L48.9927864,-95 C48.4444856,-95 48,-95.4438648 48,-96 Z M54.4307806,-120 C54.706923,-120.478293 55.3225377,-120.639844 55.7905589,-120.369632 L81.7838153,-105.362419 C82.2586577,-105.088268 82.4216611,-104.481627 82.1435935,-104 C81.8674512,-103.521707 81.2518365,-103.360156 80.7838153,-103.630368 L54.7905589,-118.637581 C54.3157165,-118.911732 54.152713,-119.518373 54.4307806,-120 Z M104,-82.1435935 C104.478293,-82.4197359 105.092206,-82.2518365 105.362419,-81.7838153 L120.369632,-55.7905589 C120.643783,-55.3157165 120.481627,-54.7088482 120,-54.4307806 C119.521707,-54.1546382 118.907794,-54.3225377 118.637581,-54.7905589 L103.630368,-80.7838153 C103.356217,-81.2586577 103.518373,-81.865526 104,-82.1435935 Z M96,-80 C96.5522847,-80 97,-79.5476379 97,-79.0072136 L97,-48.9927864 C97,-48.4444856 96.5561352,-48 96,-48 C95.4477153,-48 95,-48.4523621 95,-48.9927864 L95,-79.0072136 C95,-79.5555144 95.4438648,-80 96,-80 Z M88,-82.1435935 C88.4782926,-81.8674512 88.6398444,-81.2518365 88.3696322,-80.7838153 L73.3624186,-54.7905589 C73.0882682,-54.3157165 72.4816272,-54.152713 72,-54.4307806 C71.5217074,-54.706923 71.3601556,-55.3225377 71.6303678,-55.7905589 L86.6375814,-81.7838153 C86.9117318,-82.2586577 87.5183728,-82.4216611 88,-82.1435935 Z M82.1435935,-88 C82.4197359,-87.5217074 82.2518365,-86.9077936 81.7838153,-86.6375814 L55.7905589,-71.6303678 C55.3157165,-71.3562174 54.7088482,-71.5183728 54.4307806,-72 C54.1546382,-72.4782926 54.3225377,-73.0922064 54.7905589,-73.3624186 L80.7838153,-88.3696322 C81.2586577,-88.6437826 81.865526,-88.4816272 82.1435935,-88 Z M1.30626177e-08,-41.9868843 L15.0170091,-57.9923909 L20.7983821,-52.9749272 L44.7207091,-81.2095939 L73.4260467,-42.1002685 L85.984793,-56.6159488 L104.48741,-34.0310661 L127.969109,-47.4978019 L127.969109,7.99473128e-07 L1.30626177e-08,7.99473128e-07 L1.30626177e-08,-41.9868843 Z M96,-84 C102.627417,-84 108,-89.372583 108,-96 C108,-102.627417 102.627417,-108 96,-108 C89.372583,-108 84,-102.627417 84,-96 C84,-89.372583 89.372583,-84 96,-84 Z\"></path>\n        <path d=\"M16,18 L112,18 C113.104569,18 114,17.1045695 114,16 C114,14.8954305 113.104569,14 112,14 L16,14 C14.8954305,14 14,14.8954305 14,16 C14,17.1045695 14.8954305,18 16,18 L16,18 Z M16,35 L112,35 C114.209139,35 116,33.209139 116,31 C116,28.790861 114.209139,27 112,27 L16,27 C13.790861,27 12,28.790861 12,31 C12,33.209139 13.790861,35 16,35 L16,35 Z M16,56 L112,56 C115.313708,56 118,53.3137085 118,50 C118,46.6862915 115.313708,44 112,44 L16,44 C12.6862915,44 10,46.6862915 10,50 C10,53.3137085 12.6862915,56 16,56 L16,56 Z M16,85 L112,85 C117.522847,85 122,80.5228475 122,75 C122,69.4771525 117.522847,65 112,65 L16,65 C10.4771525,65 6,69.4771525 6,75 C6,80.5228475 10.4771525,85 16,85 L16,85 Z M16,128 L112,128 C120.836556,128 128,120.836556 128,112 C128,103.163444 120.836556,96 112,96 L16,96 C7.163444,96 0,103.163444 0,112 C0,120.836556 7.163444,128 16,128 L16,128 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/link": {
            "title": "$:/core/images/link",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-link tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M128.719999,57.568543 C130.219553,53.8628171 131.045202,49.8121445 131.045202,45.5685425 C131.045202,27.8915447 116.718329,13.5685425 99.0452364,13.5685425 L67.0451674,13.5685425 C49.3655063,13.5685425 35.0452019,27.8954305 35.0452019,45.5685425 C35.0452019,63.2455403 49.3720745,77.5685425 67.0451674,77.5685425 L99.0452364,77.5685425 C100.406772,77.5685425 101.748384,77.4835732 103.065066,77.3186499 C96.4792444,73.7895096 91.1190212,68.272192 87.7873041,61.5685425 L67.0506214,61.5685425 C58.2110723,61.5685425 51.0452019,54.4070414 51.0452019,45.5685425 C51.0452019,36.7319865 58.2005234,29.5685425 67.0506214,29.5685425 L99.0397824,29.5685425 C107.879331,29.5685425 115.045202,36.7300436 115.045202,45.5685425 C115.045202,48.9465282 113.99957,52.0800164 112.21335,54.6623005 C114.314383,56.4735917 117.050039,57.5685425 120.041423,57.5685425 L128.720003,57.5685425 Z\" transform=\"translate(83.045202, 45.568542) rotate(-225.000000) translate(-83.045202, -45.568542)\"></path>\n        <path d=\"M-0.106255113,71.0452019 C-1.60580855,74.7509276 -2.43145751,78.8016001 -2.43145751,83.0452019 C-2.43145751,100.7222 11.8954151,115.045202 29.568508,115.045202 L61.568577,115.045202 C79.2482381,115.045202 93.5685425,100.718314 93.5685425,83.0452019 C93.5685425,65.3682041 79.2416699,51.0452019 61.568577,51.0452019 L29.568508,51.0452019 C28.206973,51.0452019 26.8653616,51.1301711 25.5486799,51.2950943 C32.1345,54.8242347 37.4947231,60.3415524 40.8264403,67.0452019 L61.563123,67.0452019 C70.4026721,67.0452019 77.5685425,74.206703 77.5685425,83.0452019 C77.5685425,91.8817579 70.413221,99.0452019 61.563123,99.0452019 L29.573962,99.0452019 C20.7344129,99.0452019 13.5685425,91.8837008 13.5685425,83.0452019 C13.5685425,79.6672162 14.6141741,76.533728 16.4003949,73.9514439 C14.2993609,72.1401527 11.5637054,71.0452019 8.5723215,71.0452019 L-0.106255113,71.0452019 Z\" transform=\"translate(45.568542, 83.045202) rotate(-225.000000) translate(-45.568542, -83.045202)\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/linkify": {
            "title": "$:/core/images/linkify",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"><path d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/list-bullet": {
            "title": "$:/core/images/list-bullet",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-list-bullet tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M11.6363636,40.2727273 C18.0629498,40.2727273 23.2727273,35.0629498 23.2727273,28.6363636 C23.2727273,22.2097775 18.0629498,17 11.6363636,17 C5.20977746,17 0,22.2097775 0,28.6363636 C0,35.0629498 5.20977746,40.2727273 11.6363636,40.2727273 Z M11.6363636,75.1818182 C18.0629498,75.1818182 23.2727273,69.9720407 23.2727273,63.5454545 C23.2727273,57.1188684 18.0629498,51.9090909 11.6363636,51.9090909 C5.20977746,51.9090909 0,57.1188684 0,63.5454545 C0,69.9720407 5.20977746,75.1818182 11.6363636,75.1818182 Z M11.6363636,110.090909 C18.0629498,110.090909 23.2727273,104.881132 23.2727273,98.4545455 C23.2727273,92.0279593 18.0629498,86.8181818 11.6363636,86.8181818 C5.20977746,86.8181818 0,92.0279593 0,98.4545455 C0,104.881132 5.20977746,110.090909 11.6363636,110.090909 Z M34.9090909,22.8181818 L128,22.8181818 L128,34.4545455 L34.9090909,34.4545455 L34.9090909,22.8181818 Z M34.9090909,57.7272727 L128,57.7272727 L128,69.3636364 L34.9090909,69.3636364 L34.9090909,57.7272727 Z M34.9090909,92.6363636 L128,92.6363636 L128,104.272727 L34.9090909,104.272727 L34.9090909,92.6363636 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/list-number": {
            "title": "$:/core/images/list-number",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-list-number tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M33.8390805,22.3563218 L128,22.3563218 L128,34.1264368 L33.8390805,34.1264368 L33.8390805,22.3563218 Z M33.8390805,57.6666667 L128,57.6666667 L128,69.4367816 L33.8390805,69.4367816 L33.8390805,57.6666667 Z M33.8390805,92.9770115 L128,92.9770115 L128,104.747126 L33.8390805,104.747126 L33.8390805,92.9770115 Z M0.379509711,42.6307008 L0.379509711,40.4082314 L1.37821948,40.4082314 C2.20382368,40.4082314 2.82301754,40.268077 3.23581964,39.9877642 C3.64862174,39.7074513 3.85501969,39.0400498 3.85501969,37.9855395 L3.85501969,22.7686318 C3.85501969,21.3270228 3.66193774,20.4327047 3.27576803,20.0856507 C2.88959832,19.7385967 1.79768657,19.5650723 0,19.5650723 L0,17.4226919 C3.50215975,17.2758613 6.25191314,16.4683055 8.24934266,15 L10.3666074,15 L10.3666074,37.865406 C10.3666074,38.786434 10.5164123,39.4404875 10.8160268,39.8275862 C11.1156412,40.2146849 11.764796,40.4082314 12.7635108,40.4082314 L13.7622206,40.4082314 L13.7622206,42.6307008 L0.379509711,42.6307008 Z M0.0798967812,77.9873934 L0.0798967812,76.0852799 C7.27064304,69.5312983 10.8659622,63.5046623 10.8659622,58.005191 C10.8659622,56.4434479 10.5397203,55.195407 9.88722667,54.2610308 C9.23473303,53.3266546 8.36253522,52.8594735 7.27060709,52.8594735 C6.3784219,52.8594735 5.61608107,53.1764892 4.98356173,53.8105302 C4.35104238,54.4445712 4.03478745,55.1753759 4.03478745,56.0029663 C4.03478745,56.9773871 4.28113339,57.8316611 4.77383268,58.5658139 C4.88036225,58.7259926 4.93362624,58.8461249 4.93362624,58.9262143 C4.93362624,59.0730449 4.77383427,59.2065252 4.45424555,59.3266593 C4.2411864,59.4067486 3.70188852,59.6336652 2.83633573,60.0074156 C1.99741533,60.3811661 1.47809145,60.5680386 1.2783485,60.5680386 C1.03865696,60.5680386 0.765679018,60.1976307 0.459406492,59.4568039 C0.153133966,58.715977 0,57.9184322 0,57.0641453 C0,55.1153036 0.848894811,53.5202138 2.5467099,52.2788283 C4.24452499,51.0374428 6.34512352,50.4167594 8.84856852,50.4167594 C11.3120649,50.4167594 13.3793735,51.0874979 15.0505562,52.4289952 C16.7217389,53.7704924 17.5573177,55.5224215 17.5573177,57.684835 C17.5573177,58.9662652 17.2743527,60.2076321 16.7084144,61.4089729 C16.142476,62.6103138 14.7875733,64.4623531 12.6436656,66.9651465 C10.4997579,69.4679398 8.40914641,71.7804862 6.3717683,73.902855 L17.8169822,73.902855 L16.7982982,79.6292176 L14.6810335,79.6292176 C14.7609307,79.3489048 14.8008787,79.0952922 14.8008787,78.8683723 C14.8008787,78.4812736 14.7010087,78.237672 14.5012658,78.1375603 C14.3015228,78.0374485 13.9020429,77.9873934 13.3028141,77.9873934 L0.0798967812,77.9873934 Z M12.2042333,97.1935484 C13.9486551,97.2335931 15.4400468,97.8309175 16.6784531,98.9855395 C17.9168594,100.140162 18.5360532,101.75861 18.5360532,103.840934 C18.5360532,106.830938 17.4041935,109.233584 15.14044,111.048943 C12.8766866,112.864303 10.1402492,113.771969 6.93104577,113.771969 C4.92030005,113.771969 3.26245842,113.388213 1.95747114,112.62069 C0.652483855,111.853166 0,110.848727 0,109.607341 C0,108.833144 0.26964894,108.209124 0.808954909,107.735261 C1.34826088,107.261399 1.93749375,107.024472 2.57667119,107.024472 C3.21584864,107.024472 3.73850152,107.224692 4.14464552,107.625139 C4.55078953,108.025586 4.92696644,108.67964 5.27318756,109.587319 C5.73925445,110.855401 6.51158227,111.489433 7.59019421,111.489433 C8.85523291,111.489433 9.87723568,111.012241 10.6562332,110.057842 C11.4352307,109.103444 11.8247236,107.371536 11.8247236,104.862069 C11.8247236,103.153495 11.7048796,101.838714 11.4651881,100.917686 C11.2254966,99.9966584 10.6728827,99.5361513 9.80732989,99.5361513 C9.22141723,99.5361513 8.62219737,99.843156 8.00965231,100.457175 C7.51695303,100.951059 7.07752513,101.197998 6.69135542,101.197998 C6.3584505,101.197998 6.08880156,101.051169 5.88240051,100.757508 C5.67599946,100.463847 5.57280049,100.183539 5.57280049,99.916574 C5.57280049,99.5962164 5.67599946,99.3225818 5.88240051,99.0956618 C6.08880156,98.8687419 6.57150646,98.5016711 7.33052967,97.9944383 C10.2068282,96.0722929 11.6449559,93.9766521 11.6449559,91.7074527 C11.6449559,90.5194601 11.3386879,89.615131 10.7261429,88.9944383 C10.1135978,88.3737455 9.37455999,88.0634038 8.5090072,88.0634038 C7.71003539,88.0634038 6.98431355,88.3270274 6.33181991,88.8542825 C5.67932627,89.3815377 5.35308434,90.0122321 5.35308434,90.7463849 C5.35308434,91.3871 5.60608828,91.9810874 6.11210376,92.5283648 C6.28521432,92.7285883 6.3717683,92.8954387 6.3717683,93.028921 C6.3717683,93.1490551 5.80250943,93.4560598 4.6639746,93.9499444 C3.52543978,94.4438289 2.80970494,94.6907675 2.51674861,94.6907675 C2.10394651,94.6907675 1.76771758,94.3570667 1.50805174,93.6896552 C1.24838591,93.0222436 1.11855494,92.4082342 1.11855494,91.8476085 C1.11855494,90.0989901 2.04734573,88.6240327 3.90495518,87.4226919 C5.76256463,86.2213511 7.86982116,85.6206897 10.226788,85.6206897 C12.2907985,85.6206897 14.0784711,86.0678487 15.5898594,86.9621802 C17.1012478,87.8565117 17.8569306,89.0778566 17.8569306,90.6262514 C17.8569306,91.987771 17.2876717,93.2491599 16.1491369,94.4104561 C15.0106021,95.5717522 13.6956474,96.4994404 12.2042333,97.1935484 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/list": {
            "title": "$:/core/images/list",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-list tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M0.719999312,185.568543 C2.21955287,181.862817 3.0452019,177.812144 3.0452019,173.568542 C3.0452019,155.891545 -11.2816707,141.568542 -28.9547636,141.568542 L-60.9548326,141.568542 C-78.6344937,141.568542 -92.9547981,155.895431 -92.9547981,173.568542 C-92.9547981,191.24554 -78.6279255,205.568542 -60.9548326,205.568542 L-28.9547636,205.568542 C-27.593228,205.568542 -26.2516158,205.483573 -24.9349335,205.31865 C-31.5207556,201.78951 -36.8809788,196.272192 -40.2126959,189.568542 L-60.9493786,189.568542 C-69.7889277,189.568542 -76.9547981,182.407041 -76.9547981,173.568542 C-76.9547981,164.731986 -69.7994766,157.568542 -60.9493786,157.568542 L-28.9602176,157.568542 C-20.1206685,157.568542 -12.9547981,164.730044 -12.9547981,173.568542 C-12.9547981,176.946528 -14.0004297,180.080016 -15.7866505,182.6623 C-13.6856165,184.473592 -10.949961,185.568542 -7.9585771,185.568542 L0.720002586,185.568542 Z\" transform=\"translate(-44.954798, 173.568542) rotate(-225.000000) translate(44.954798, -173.568542) \"></path>\n        <path d=\"M87.7480315,128 L23.9992458,128 C19.5813843,128 16,124.409247 16,119.993027 L16,8.00697327 C16,3.58484404 19.5881049,0 23.9992458,0 L104.000754,0 C108.418616,0 112,3.59075293 112,8.00697327 L112,104 L91.2492027,104 C90.2848199,104 89.410573,104.391703 88.7768998,105.025201 C88.1373658,105.661376 87.7480315,106.53563 87.7480315,107.501171 L87.7480315,128 Z M95.7480315,127.879386 L111.627417,112 L95.7480315,112 L95.7480315,127.879386 Z M40,15.5089165 C40,13.5709954 41.5636015,12 43.4998101,12 L98.5001899,12 C100.433082,12 102,13.5614718 102,15.5089165 L102,16.4910835 C102,18.4290046 100.436399,20 98.5001899,20 L43.4998101,20 C41.5669183,20 40,18.4385282 40,16.4910835 L40,15.5089165 Z M32,22 C35.3137085,22 38,19.3137085 38,16 C38,12.6862915 35.3137085,10 32,10 C28.6862915,10 26,12.6862915 26,16 C26,19.3137085 28.6862915,22 32,22 Z M40,31.5089165 C40,29.5709954 41.5636015,28 43.4998101,28 L98.5001899,28 C100.433082,28 102,29.5614718 102,31.5089165 L102,32.4910835 C102,34.4290046 100.436399,36 98.5001899,36 L43.4998101,36 C41.5669183,36 40,34.4385282 40,32.4910835 L40,31.5089165 Z M40,47.5089165 C40,45.5709954 41.5636015,44 43.4998101,44 L98.5001899,44 C100.433082,44 102,45.5614718 102,47.5089165 L102,48.4910835 C102,50.4290046 100.436399,52 98.5001899,52 L43.4998101,52 C41.5669183,52 40,50.4385282 40,48.4910835 L40,47.5089165 Z M40,63.5089165 C40,61.5709954 41.5636015,60 43.4998101,60 L98.5001899,60 C100.433082,60 102,61.5614718 102,63.5089165 L102,64.4910835 C102,66.4290046 100.436399,68 98.5001899,68 L43.4998101,68 C41.5669183,68 40,66.4385282 40,64.4910835 L40,63.5089165 Z M40,79.5089165 C40,77.5709954 41.5636015,76 43.4998101,76 L98.5001899,76 C100.433082,76 102,77.5614718 102,79.5089165 L102,80.4910835 C102,82.4290046 100.436399,84 98.5001899,84 L43.4998101,84 C41.5669183,84 40,82.4385282 40,80.4910835 L40,79.5089165 Z M40,95.5089165 C40,93.5709954 41.5636015,92 43.4998101,92 L98.5001899,92 C100.433082,92 102,93.5614718 102,95.5089165 L102,96.4910835 C102,98.4290046 100.436399,100 98.5001899,100 L43.4998101,100 C41.5669183,100 40,98.4385282 40,96.4910835 L40,95.5089165 Z M40,111.508916 C40,109.570995 41.5680474,108 43.4972017,108 L76.5027983,108 C78.4342495,108 80,109.561472 80,111.508916 L80,112.491084 C80,114.429005 78.4319526,116 76.5027983,116 L43.4972017,116 C41.5657505,116 40,114.438528 40,112.491084 L40,111.508916 Z M32,38 C35.3137085,38 38,35.3137085 38,32 C38,28.6862915 35.3137085,26 32,26 C28.6862915,26 26,28.6862915 26,32 C26,35.3137085 28.6862915,38 32,38 Z M32,54 C35.3137085,54 38,51.3137085 38,48 C38,44.6862915 35.3137085,42 32,42 C28.6862915,42 26,44.6862915 26,48 C26,51.3137085 28.6862915,54 32,54 Z M32,70 C35.3137085,70 38,67.3137085 38,64 C38,60.6862915 35.3137085,58 32,58 C28.6862915,58 26,60.6862915 26,64 C26,67.3137085 28.6862915,70 32,70 Z M32,86 C35.3137085,86 38,83.3137085 38,80 C38,76.6862915 35.3137085,74 32,74 C28.6862915,74 26,76.6862915 26,80 C26,83.3137085 28.6862915,86 32,86 Z M32,102 C35.3137085,102 38,99.3137085 38,96 C38,92.6862915 35.3137085,90 32,90 C28.6862915,90 26,92.6862915 26,96 C26,99.3137085 28.6862915,102 32,102 Z M32,118 C35.3137085,118 38,115.313708 38,112 C38,108.686292 35.3137085,106 32,106 C28.6862915,106 26,108.686292 26,112 C26,115.313708 28.6862915,118 32,118 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mail tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M122.826782,104.894066 C121.945525,105.22777 120.990324,105.41043 119.993027,105.41043 L8.00697327,105.41043 C7.19458381,105.41043 6.41045219,105.289614 5.67161357,105.064967 L5.67161357,105.064967 L39.8346483,70.9019325 L60.6765759,91.7438601 C61.6118278,92.679112 62.8865166,93.0560851 64.0946097,92.8783815 C65.2975108,93.0473238 66.5641085,92.6696979 67.4899463,91.7438601 L88.5941459,70.6396605 C88.6693095,70.7292352 88.7490098,70.8162939 88.8332479,70.9005321 L122.826782,104.894066 Z M127.903244,98.6568194 C127.966933,98.2506602 128,97.8343714 128,97.4103789 L128,33.410481 C128,32.7414504 127.917877,32.0916738 127.763157,31.4706493 L94.2292399,65.0045665 C94.3188145,65.0797417 94.4058701,65.1594458 94.4901021,65.2436778 L127.903244,98.6568194 Z M0.205060636,99.2178117 C0.0709009529,98.6370366 0,98.0320192 0,97.4103789 L0,33.410481 C0,32.694007 0.0944223363,31.9995312 0.27147538,31.3387595 L0.27147538,31.3387595 L34.1777941,65.2450783 L0.205060636,99.2178117 L0.205060636,99.2178117 Z M5.92934613,25.6829218 C6.59211333,25.5051988 7.28862283,25.4104299 8.00697327,25.4104299 L119.993027,25.4104299 C120.759109,25.4104299 121.500064,25.5178649 122.201605,25.7184927 L122.201605,25.7184927 L64.0832611,83.8368368 L5.92934613,25.6829218 L5.92934613,25.6829218 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>"
        },
        "$:/core/images/mono-block": {
            "title": "$:/core/images/mono-block",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mono-block tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M23.9653488,32.9670593 L24.3217888,32.9670593 C25.0766067,32.9670593 25.6497006,33.1592554 26.0410876,33.5436534 C26.4324747,33.9280514 26.6281653,34.4906619 26.6281653,35.2315017 C26.6281653,36.0562101 26.4219913,36.6502709 26.009637,37.0137017 C25.5972828,37.3771326 24.9158602,37.5588453 23.9653488,37.5588453 L17.6542639,37.5588453 C16.6897744,37.5588453 16.0048573,37.380627 15.5994921,37.0241852 C15.1941269,36.6677435 14.9914474,36.0701882 14.9914474,35.2315017 C14.9914474,34.4207713 15.1941269,33.8406885 15.5994921,33.4912358 C16.0048573,33.141783 16.6897744,32.9670593 17.6542639,32.9670593 L18.388111,32.9670593 L17.5284616,30.5139133 L8.47069195,30.5139133 L7.5691084,32.9670593 L8.30295547,32.9670593 C9.25346691,32.9670593 9.93488953,33.1452775 10.3472438,33.5017193 C10.759598,33.8581611 10.965772,34.4347494 10.965772,35.2315017 C10.965772,36.0562101 10.759598,36.6502709 10.3472438,37.0137017 C9.93488953,37.3771326 9.25346691,37.5588453 8.30295547,37.5588453 L2.89345418,37.5588453 C1.92896463,37.5588453 1.24404754,37.3771326 0.838682371,37.0137017 C0.433317198,36.6502709 0.230637652,36.0562101 0.230637652,35.2315017 C0.230637652,34.4906619 0.426328248,33.9280514 0.817715312,33.5436534 C1.20910238,33.1592554 1.78219626,32.9670593 2.53701417,32.9670593 L2.89345418,32.9670593 L8.51262607,17.3256331 L6.83526132,17.3256331 C5.88474988,17.3256331 5.20332727,17.1439204 4.79097304,16.7804895 C4.37861882,16.4170587 4.1724448,15.8299869 4.1724448,15.0192565 C4.1724448,14.1945481 4.37861882,13.6004873 4.79097304,13.2370565 C5.20332727,12.8736257 5.88474988,12.691913 6.83526132,12.691913 L14.6979086,12.691913 C15.9419603,12.691913 16.815579,13.3628521 17.318791,14.7047506 L17.318791,14.7676518 L23.9653488,32.9670593 Z M12.9786097,17.3256331 L9.9383861,26.1737321 L16.0188333,26.1737321 L12.9786097,17.3256331 Z M35.3809383,26.6979086 L35.3809383,33.0928616 L38.5259972,33.0928616 C40.7485166,33.0928616 42.3140414,32.8482484 43.2226185,32.3590146 C44.1311956,31.8697807 44.5854773,31.0520736 44.5854773,29.9058686 C44.5854773,28.7456855 44.1521624,27.9209895 43.2855197,27.4317556 C42.4188769,26.9425218 40.9022748,26.6979086 38.7356678,26.6979086 L35.3809383,26.6979086 Z M46.0741385,24.370565 C47.5977525,24.9296893 48.7159844,25.6949794 49.428868,26.666458 C50.1417516,27.6379366 50.498188,28.8784752 50.498188,30.388111 C50.498188,31.6601189 50.1906743,32.8202846 49.5756374,33.8686428 C48.9606006,34.917001 48.0799929,35.7766419 46.933788,36.4475911 C46.2628387,36.8389782 45.5115266,37.1220307 44.6798291,37.296757 C43.8481316,37.4714834 42.6704935,37.5588453 41.1468796,37.5588453 L39.3856466,37.5588453 L30.2020747,37.5588453 C29.2795194,37.5588453 28.6190637,37.3771326 28.2206876,37.0137017 C27.8223114,36.6502709 27.6231264,36.0562101 27.6231264,35.2315017 C27.6231264,34.4906619 27.811828,33.9280514 28.189237,33.5436534 C28.5666459,33.1592554 29.118773,32.9670593 29.8456347,32.9670593 L30.2020747,32.9670593 L30.2020747,17.3256331 L29.8456347,17.3256331 C29.118773,17.3256331 28.5666459,17.1299425 28.189237,16.7385554 C27.811828,16.3471683 27.6231264,15.7740744 27.6231264,15.0192565 C27.6231264,14.2085262 27.8258059,13.6179599 28.2311711,13.24754 C28.6365363,12.8771201 29.2934976,12.691913 30.2020747,12.691913 L39.8469219,12.691913 C42.796303,12.691913 45.0362615,13.2650068 46.5668644,14.4112118 C48.0974674,15.5574168 48.8627574,17.2347648 48.8627574,19.443306 C48.8627574,20.5335986 48.6286276,21.4945792 48.1603609,22.3262767 C47.6920943,23.1579742 46.9966938,23.8393968 46.0741385,24.370565 L46.0741385,24.370565 Z M35.3809383,17.1998307 L35.3809383,22.4835296 L38.2114913,22.4835296 C39.9307988,22.4835296 41.1433816,22.2808501 41.8492761,21.8754849 C42.5551706,21.4701197 42.9081126,20.7852027 42.9081126,19.8207131 C42.9081126,18.912136 42.5901154,18.2481858 41.9541114,17.8288425 C41.3181074,17.4094992 40.2872373,17.1998307 38.8614701,17.1998307 L35.3809383,17.1998307 Z M71.244119,13.3838259 C71.5236812,12.880614 71.8102281,12.5241775 72.1037684,12.3145059 C72.3973087,12.1048342 72.7677231,12 73.2150226,12 C73.8999499,12 74.3856819,12.1817127 74.6722332,12.5451435 C74.9587844,12.9085744 75.1020579,13.5305909 75.1020579,14.4112118 L75.143992,19.8626472 C75.143992,20.8271368 74.9867406,21.4771091 74.6722332,21.8125837 C74.3577257,22.1480584 73.7881263,22.3157932 72.9634178,22.3157932 C72.3763372,22.3157932 71.92555,22.1760142 71.6110425,21.896452 C71.2965351,21.6168898 71.0274605,21.0997075 70.8038107,20.3448896 C70.4403799,19.0169692 69.8602971,18.0629775 69.0635448,17.482886 C68.2667926,16.9027945 67.1625385,16.612753 65.7507494,16.612753 C63.5981206,16.612753 61.9487284,17.3396038 60.8025235,18.7933272 C59.6563185,20.2470506 59.0832246,22.3507245 59.0832246,25.104412 C59.0832246,27.8441215 59.6633074,29.9477954 60.8234905,31.4154969 C61.9836736,32.8831984 63.6400547,33.6170381 65.7926836,33.6170381 C67.2603851,33.6170381 68.878327,33.1278116 70.6465578,32.149344 C72.4147886,31.1708763 73.5295261,30.6816498 73.9908037,30.6816498 C74.53595,30.6816498 74.9937262,30.9122852 75.3641461,31.3735628 C75.734566,31.8348404 75.9197732,32.4079343 75.9197732,33.0928616 C75.9197732,34.3229353 74.836486,35.4831009 72.669879,36.5733935 C70.5032721,37.663686 68.0641285,38.2088241 65.3523753,38.2088241 C61.6901107,38.2088241 58.7267959,36.9997358 56.4623422,34.5815228 C54.1978885,32.1633099 53.0656786,29.0043046 53.0656786,25.104412 C53.0656786,21.3443006 54.2118664,18.22024 56.5042763,15.7321366 C58.7966863,13.2440331 61.7040894,12 65.226573,12 C66.2190187,12 67.1974717,12.1118232 68.1619613,12.3354729 C69.1264508,12.5591227 70.1538264,12.9085702 71.244119,13.3838259 L71.244119,13.3838259 Z M81.4645862,32.9670593 L81.4645862,17.3256331 L81.1081461,17.3256331 C80.3533282,17.3256331 79.7802344,17.1299425 79.3888473,16.7385554 C78.9974602,16.3471683 78.8017696,15.7740744 78.8017696,15.0192565 C78.8017696,14.2085262 79.0114381,13.6179599 79.4307814,13.24754 C79.8501247,12.8771201 80.5280528,12.691913 81.4645862,12.691913 L85.4063933,12.691913 L86.6434498,12.691913 C89.5648747,12.691913 91.7034933,12.8177141 93.0593699,13.06932 C94.4152465,13.320926 95.5684233,13.740263 96.5189347,14.3273436 C98.210286,15.3337675 99.5067362,16.7699967 100.408324,18.6360743 C101.309912,20.5021519 101.7607,22.6582429 101.7607,25.104412 C101.7607,27.6903623 101.247012,29.9512876 100.219621,31.8872557 C99.1922296,33.8232239 97.7350336,35.2874089 95.8479888,36.2798546 C94.9953241,36.7271541 93.9959043,37.0521403 92.8496993,37.2548229 C91.7034944,37.4575055 89.9981906,37.5588453 87.7337369,37.5588453 L85.4063933,37.5588453 L81.4645862,37.5588453 C80.5000966,37.5588453 79.8151795,37.380627 79.4098143,37.0241852 C79.0044492,36.6677435 78.8017696,36.0701882 78.8017696,35.2315017 C78.8017696,34.4906619 78.9974602,33.9280514 79.3888473,33.5436534 C79.7802344,33.1592554 80.3533282,32.9670593 81.1081461,32.9670593 L81.4645862,32.9670593 Z M86.8740874,17.2417648 L86.8740874,32.9670593 L88.0692098,32.9670593 C90.7110725,32.9670593 92.6609895,32.3205814 93.9190194,31.0276063 C95.1770492,29.7346312 95.8060547,27.7462749 95.8060547,25.0624779 C95.8060547,22.4206153 95.1665658,20.4497314 93.8875688,19.1497672 C92.6085718,17.849803 90.6831161,17.1998307 88.1111439,17.1998307 C87.7756693,17.1998307 87.5205727,17.2033252 87.3458463,17.2103142 C87.1711199,17.2173033 87.0138685,17.2277867 86.8740874,17.2417648 L86.8740874,17.2417648 Z M121.94052,17.1159625 L112.190837,17.1159625 L112.190837,22.4835296 L115.88104,22.4835296 L115.88104,22.2319249 C115.88104,21.4351727 116.055763,20.841112 116.405216,20.4497249 C116.754669,20.0583378 117.285829,19.8626472 117.998713,19.8626472 C118.627728,19.8626472 119.141415,20.0408655 119.539792,20.3973072 C119.938168,20.753749 120.137353,21.2045363 120.137353,21.7496826 C120.137353,21.7776388 120.144342,21.8684951 120.15832,22.0222543 C120.172298,22.1760135 120.179287,22.3297704 120.179287,22.4835296 L120.179287,26.8237109 C120.179287,27.7602442 120.011552,28.4311834 119.676077,28.8365486 C119.340603,29.2419138 118.795465,29.4445933 118.040647,29.4445933 C117.327763,29.4445933 116.789614,29.2558917 116.426183,28.8784827 C116.062752,28.5010738 115.88104,27.9419578 115.88104,27.201118 L115.88104,26.8237109 L112.190837,26.8237109 L112.190837,33.0928616 L121.94052,33.0928616 L121.94052,30.5977816 C121.94052,29.6612482 122.118738,28.9903091 122.47518,28.5849439 C122.831622,28.1795787 123.415199,27.9768992 124.225929,27.9768992 C125.022682,27.9768992 125.592281,28.1760842 125.934745,28.5744604 C126.277208,28.9728365 126.448438,29.6472701 126.448438,30.5977816 L126.448438,35.6718099 C126.448438,36.4266278 126.30167,36.9298322 126.008129,37.1814382 C125.714589,37.4330442 125.134506,37.5588453 124.267863,37.5588453 L107.095842,37.5588453 C106.173287,37.5588453 105.512831,37.3771326 105.114455,37.0137017 C104.716079,36.6502709 104.516894,36.0562101 104.516894,35.2315017 C104.516894,34.4906619 104.705595,33.9280514 105.083004,33.5436534 C105.460413,33.1592554 106.01254,32.9670593 106.739402,32.9670593 L107.095842,32.9670593 L107.095842,17.3256331 L106.739402,17.3256331 C106.026518,17.3256331 105.477886,17.126448 105.093488,16.7280719 C104.70909,16.3296957 104.516894,15.7600963 104.516894,15.0192565 C104.516894,14.2085262 104.719573,13.6179599 105.124938,13.24754 C105.530304,12.8771201 106.187265,12.691913 107.095842,12.691913 L124.267863,12.691913 C125.120528,12.691913 125.697116,12.8212085 125.997646,13.0798036 C126.298175,13.3383986 126.448438,13.8520864 126.448438,14.6208824 L126.448438,19.3175037 C126.448438,20.2680151 126.273714,20.9494377 125.924261,21.361792 C125.574808,21.7741462 125.008703,21.9803202 124.225929,21.9803202 C123.415199,21.9803202 122.831622,21.7706517 122.47518,21.3513084 C122.118738,20.9319652 121.94052,20.254037 121.94052,19.3175037 L121.94052,17.1159625 Z M19.7719369,47.6405477 C20.037521,47.1373358 20.3205734,46.7808993 20.6211028,46.5712277 C20.9216322,46.361556 21.295541,46.2567218 21.7428405,46.2567218 C22.4277678,46.2567218 22.9134998,46.4384345 23.2000511,46.8018653 C23.4866023,47.1652962 23.6298758,47.7873127 23.6298758,48.6679336 L23.6718099,54.119369 C23.6718099,55.0838586 23.5145586,55.7338309 23.2000511,56.0693055 C22.8855436,56.4047802 22.3089553,56.572515 21.4702687,56.572515 C20.8831881,56.572515 20.4254119,56.4292415 20.0969263,56.1426902 C19.7684407,55.856139 19.4993662,55.3424512 19.2896945,54.6016114 C18.9122856,53.2597129 18.3322027,52.3022267 17.5494286,51.7291243 C16.7666545,51.1560218 15.6693894,50.8694748 14.2576003,50.8694748 C12.1049715,50.8694748 10.4590738,51.5963256 9.31985785,53.050049 C8.18064193,54.5037724 7.61104252,56.6074463 7.61104252,59.3611338 C7.61104252,62.1148214 8.20859773,64.2429566 9.40372609,65.7456034 C10.5988544,67.2482501 12.2936748,67.9995623 14.488238,67.9995623 C14.9914499,67.9995623 15.5645438,67.9401562 16.2075368,67.8213423 C16.8505299,67.7025283 17.6053364,67.5173212 18.4719792,67.2657152 L18.4719792,63.9529198 L16.1027015,63.9529198 C15.1521901,63.9529198 14.4777564,63.7781961 14.0793803,63.4287433 C13.6810042,63.0792906 13.4818191,62.4992078 13.4818191,61.6884774 C13.4818191,60.8497908 13.6810042,60.2522356 14.0793803,59.8957938 C14.4777564,59.5393521 15.1521901,59.3611338 16.1027015,59.3611338 L23.6718099,59.3611338 C24.6502776,59.3611338 25.3386891,59.5358576 25.7370653,59.8853103 C26.1354414,60.2347631 26.3346265,60.8218348 26.3346265,61.6465433 C26.3346265,62.3873831 26.1354414,62.9569825 25.7370653,63.3553586 C25.3386891,63.7537347 24.7621008,63.9529198 24.0072829,63.9529198 L23.6718099,63.9529198 L23.6718099,68.9430799 L23.6718099,69.1946846 C23.6718099,69.6419841 23.6228873,69.9529924 23.5250405,70.1277188 C23.4271937,70.3024451 23.2315031,70.4806634 22.9379628,70.6623788 C22.1412106,71.1376345 20.8762107,71.5569715 19.1429251,71.9204023 C17.4096396,72.2838332 15.6554131,72.4655459 13.8801932,72.4655459 C10.2179286,72.4655459 7.25461383,71.2564576 4.99016011,68.8382446 C2.72570638,66.4200317 1.59349651,63.2610264 1.59349651,59.3611338 C1.59349651,55.6010224 2.73968428,52.4769618 5.03209423,49.9888583 C7.32450417,47.5007549 10.2319073,46.2567218 13.7543909,46.2567218 C14.7328585,46.2567218 15.7078171,46.368545 16.6792957,46.5921947 C17.6507743,46.8158445 18.6816444,47.165292 19.7719369,47.6405477 L19.7719369,47.6405477 Z M35.611576,51.5823548 L35.611576,56.4047785 L42.4678043,56.4047785 L42.4678043,51.5823548 L42.1323314,51.5823548 C41.3775135,51.5823548 40.8009251,51.3866642 40.402549,50.9952772 C40.0041729,50.6038901 39.8049878,50.0307962 39.8049878,49.2759783 C39.8049878,48.4512699 40.0111618,47.8572091 40.4235161,47.4937783 C40.8358703,47.1303474 41.5172929,46.9486347 42.4678043,46.9486347 L47.8773056,46.9486347 C48.8278171,46.9486347 49.5022507,47.1303474 49.9006269,47.4937783 C50.299003,47.8572091 50.498188,48.4512699 50.498188,49.2759783 C50.498188,50.0307962 50.3059919,50.6038901 49.9215939,50.9952772 C49.5371959,51.3866642 48.9745854,51.5823548 48.2337456,51.5823548 L47.8773056,51.5823548 L47.8773056,67.2237811 L48.2337456,67.2237811 C48.9885636,67.2237811 49.5616574,67.4159772 49.9530445,67.8003752 C50.3444316,68.1847732 50.5401222,68.7473837 50.5401222,69.4882235 C50.5401222,70.3129319 50.3374426,70.9069927 49.9320774,71.2704235 C49.5267123,71.6338543 48.8417952,71.815567 47.8773056,71.815567 L42.4678043,71.815567 C41.5033148,71.815567 40.8183977,71.6373488 40.4130325,71.280907 C40.0076674,70.9244652 39.8049878,70.32691 39.8049878,69.4882235 C39.8049878,68.7473837 40.0041729,68.1847732 40.402549,67.8003752 C40.8009251,67.4159772 41.3775135,67.2237811 42.1323314,67.2237811 L42.4678043,67.2237811 L42.4678043,61.0384986 L35.611576,61.0384986 L35.611576,67.2237811 L35.9470489,67.2237811 C36.7018668,67.2237811 37.2784552,67.4159772 37.6768313,67.8003752 C38.0752074,68.1847732 38.2743925,68.7473837 38.2743925,69.4882235 C38.2743925,70.3129319 38.0682185,70.9069927 37.6558642,71.2704235 C37.24351,71.6338543 36.5620874,71.815567 35.611576,71.815567 L30.2020747,71.815567 C29.2375851,71.815567 28.552668,71.6373488 28.1473029,71.280907 C27.7419377,70.9244652 27.5392581,70.32691 27.5392581,69.4882235 C27.5392581,68.7473837 27.7349487,68.1847732 28.1263358,67.8003752 C28.5177229,67.4159772 29.0908168,67.2237811 29.8456347,67.2237811 L30.2020747,67.2237811 L30.2020747,51.5823548 L29.8456347,51.5823548 C29.1047949,51.5823548 28.5421844,51.3866642 28.1577864,50.9952772 C27.7733884,50.6038901 27.5811923,50.0307962 27.5811923,49.2759783 C27.5811923,48.4512699 27.7803773,47.8572091 28.1787534,47.4937783 C28.5771296,47.1303474 29.2515632,46.9486347 30.2020747,46.9486347 L35.611576,46.9486347 C36.5481093,46.9486347 37.2260374,47.1303474 37.6453807,47.4937783 C38.064724,47.8572091 38.2743925,48.4512699 38.2743925,49.2759783 C38.2743925,50.0307962 38.0752074,50.6038901 37.6768313,50.9952772 C37.2784552,51.3866642 36.7018668,51.5823548 35.9470489,51.5823548 L35.611576,51.5823548 Z M67.365213,51.5823548 L67.365213,67.2237811 L70.887679,67.2237811 C71.8381904,67.2237811 72.519613,67.4019993 72.9319673,67.7584411 C73.3443215,68.1148829 73.5504955,68.6914712 73.5504955,69.4882235 C73.5504955,70.2989538 73.340827,70.8895201 72.9214837,71.25994 C72.5021404,71.6303599 71.8242123,71.815567 70.887679,71.815567 L58.4332458,71.815567 C57.4827343,71.815567 56.8013117,71.6338543 56.3889575,71.2704235 C55.9766033,70.9069927 55.7704292,70.3129319 55.7704292,69.4882235 C55.7704292,68.6774931 55.9731088,68.0974103 56.378474,67.7479575 C56.7838391,67.3985048 57.4687562,67.2237811 58.4332458,67.2237811 L61.9557117,67.2237811 L61.9557117,51.5823548 L58.4332458,51.5823548 C57.4827343,51.5823548 56.8013117,51.4006421 56.3889575,51.0372113 C55.9766033,50.6737805 55.7704292,50.0867087 55.7704292,49.2759783 C55.7704292,48.4512699 55.9731088,47.8641981 56.378474,47.5147453 C56.7838391,47.1652926 57.4687562,46.9905689 58.4332458,46.9905689 L70.887679,46.9905689 C71.8801247,46.9905689 72.5720308,47.1652926 72.9634178,47.5147453 C73.3548049,47.8641981 73.5504955,48.4512699 73.5504955,49.2759783 C73.5504955,50.0867087 73.347816,50.6737805 72.9424508,51.0372113 C72.5370856,51.4006421 71.8521685,51.5823548 70.887679,51.5823548 L67.365213,51.5823548 Z M97.8608265,51.5823548 L97.8608265,63.1771386 L97.8608265,63.5755127 C97.8608265,65.4485794 97.7385199,66.8044357 97.493903,67.6431222 C97.2492861,68.4818088 96.8404325,69.2296264 96.26733,69.8865976 C95.5264902,70.7392623 94.4991146,71.3822457 93.1851723,71.815567 C91.87123,72.2488884 90.2917273,72.4655459 88.4466169,72.4655459 C87.1466527,72.4655459 85.8921362,72.3397448 84.6830298,72.0881388 C83.4739233,71.8365328 82.3102631,71.4591296 81.1920144,70.9559176 C80.5769776,70.6763554 80.175113,70.31293 79.9864085,69.8656305 C79.797704,69.418331 79.7033532,68.6914802 79.7033532,67.6850564 L79.7033532,63.3658422 C79.7033532,62.1637247 79.8780769,61.3250508 80.2275297,60.849795 C80.5769824,60.3745393 81.185021,60.136915 82.0516638,60.136915 C83.2957156,60.136915 83.9806326,61.0524675 84.1064356,62.8835998 C84.1204137,63.2050963 84.1413806,63.4497096 84.1693368,63.6174469 C84.3370741,65.2389076 84.7144774,66.3466561 85.301558,66.9407258 C85.8886386,67.5347954 86.8251579,67.8318258 88.1111439,67.8318258 C89.7046484,67.8318258 90.8263749,67.4089943 91.476357,66.5633187 C92.126339,65.7176431 92.4513252,64.1765796 92.4513252,61.9400821 L92.4513252,51.5823548 L88.9288593,51.5823548 C87.9783478,51.5823548 87.2969252,51.4006421 86.884571,51.0372113 C86.4722168,50.6737805 86.2660427,50.0867087 86.2660427,49.2759783 C86.2660427,48.4512699 86.4652278,47.8641981 86.8636039,47.5147453 C87.26198,47.1652926 87.9503916,46.9905689 88.9288593,46.9905689 L99.6220595,46.9905689 C100.600527,46.9905689 101.288939,47.1652926 101.687315,47.5147453 C102.085691,47.8641981 102.284876,48.4512699 102.284876,49.2759783 C102.284876,50.0867087 102.078702,50.6737805 101.666348,51.0372113 C101.253994,51.4006421 100.572571,51.5823548 99.6220595,51.5823548 L97.8608265,51.5823548 Z M112.505343,51.5823548 L112.505343,57.9353738 L118.984165,51.4565525 C118.257303,51.3726838 117.747109,51.1665098 117.453569,50.8380242 C117.160029,50.5095387 117.013261,49.9888619 117.013261,49.2759783 C117.013261,48.4512699 117.212446,47.8572091 117.610822,47.4937783 C118.009198,47.1303474 118.683632,46.9486347 119.634143,46.9486347 L124.771073,46.9486347 C125.721584,46.9486347 126.396018,47.1303474 126.794394,47.4937783 C127.19277,47.8572091 127.391955,48.4512699 127.391955,49.2759783 C127.391955,50.0447743 127.19277,50.6213627 126.794394,51.0057607 C126.396018,51.3901587 125.812441,51.5823548 125.043645,51.5823548 L124.561402,51.5823548 L118.459988,57.641835 C119.592215,58.4805215 120.626579,59.5812811 121.563113,60.9441468 C122.499646,62.3070125 123.596911,64.400203 124.854941,67.2237811 L125.127513,67.2237811 L125.546854,67.2237811 C126.371563,67.2237811 126.98659,67.4124827 127.391955,67.7898917 C127.79732,68.1673006 128,68.7334056 128,69.4882235 C128,70.3129319 127.793826,70.9069927 127.381472,71.2704235 C126.969118,71.6338543 126.287695,71.815567 125.337183,71.815567 L122.758235,71.815567 C121.626008,71.815567 120.710456,71.0537715 120.01155,69.5301576 C119.885747,69.2505954 119.787902,69.026949 119.718012,68.8592117 C118.795456,66.9022764 117.949793,65.3926632 117.180997,64.3303269 C116.412201,63.2679906 115.510627,62.2965265 114.476247,61.4159056 L112.505343,63.302941 L112.505343,67.2237811 L112.840816,67.2237811 C113.595634,67.2237811 114.172222,67.4159772 114.570599,67.8003752 C114.968975,68.1847732 115.16816,68.7473837 115.16816,69.4882235 C115.16816,70.3129319 114.961986,70.9069927 114.549631,71.2704235 C114.137277,71.6338543 113.455855,71.815567 112.505343,71.815567 L107.095842,71.815567 C106.131352,71.815567 105.446435,71.6373488 105.04107,71.280907 C104.635705,70.9244652 104.433025,70.32691 104.433025,69.4882235 C104.433025,68.7473837 104.628716,68.1847732 105.020103,67.8003752 C105.41149,67.4159772 105.984584,67.2237811 106.739402,67.2237811 L107.095842,67.2237811 L107.095842,51.5823548 L106.739402,51.5823548 C105.998562,51.5823548 105.435952,51.3866642 105.051554,50.9952772 C104.667156,50.6038901 104.474959,50.0307962 104.474959,49.2759783 C104.474959,48.4512699 104.674145,47.8572091 105.072521,47.4937783 C105.470897,47.1303474 106.14533,46.9486347 107.095842,46.9486347 L112.505343,46.9486347 C113.441877,46.9486347 114.119805,47.1303474 114.539148,47.4937783 C114.958491,47.8572091 115.16816,48.4512699 115.16816,49.2759783 C115.16816,50.0307962 114.968975,50.6038901 114.570599,50.9952772 C114.172222,51.3866642 113.595634,51.5823548 112.840816,51.5823548 L112.505343,51.5823548 Z M13.439885,96.325622 L17.4445933,84.4372993 C17.6961993,83.6545252 18.0456468,83.0849258 18.4929463,82.728484 C18.9402458,82.3720422 19.5343065,82.193824 20.2751463,82.193824 L23.5460076,82.193824 C24.496519,82.193824 25.1779416,82.3755367 25.5902958,82.7389675 C26.0026501,83.1023984 26.2088241,83.6964591 26.2088241,84.5211676 C26.2088241,85.2759855 26.009639,85.8490794 25.6112629,86.2404664 C25.2128868,86.6318535 24.6362984,86.8275441 23.8814805,86.8275441 L23.5460076,86.8275441 L24.1330852,102.46897 L24.4895252,102.46897 C25.2443431,102.46897 25.8104481,102.661166 26.187857,103.045564 C26.565266,103.429962 26.7539676,103.992573 26.7539676,104.733413 C26.7539676,105.558121 26.5547826,106.152182 26.1564064,106.515613 C25.7580303,106.879044 25.0835967,107.060756 24.1330852,107.060756 L19.4154969,107.060756 C18.4649855,107.060756 17.7905518,106.882538 17.3921757,106.526096 C16.9937996,106.169654 16.7946145,105.572099 16.7946145,104.733413 C16.7946145,103.992573 16.9868106,103.429962 17.3712086,103.045564 C17.7556066,102.661166 18.325206,102.46897 19.0800239,102.46897 L19.4154969,102.46897 L19.1219581,89.6790642 L16.0607674,99.1981091 C15.8371177,99.9109927 15.5191204,100.42468 15.1067662,100.739188 C14.694412,101.053695 14.1248126,101.210947 13.3979509,101.210947 C12.6710892,101.210947 12.0945008,101.053695 11.6681685,100.739188 C11.2418362,100.42468 10.91685,99.9109927 10.6932002,99.1981091 L7.65297664,89.6790642 L7.35943781,102.46897 L7.69491075,102.46897 C8.44972866,102.46897 9.01932808,102.661166 9.40372609,103.045564 C9.78812409,103.429962 9.98032022,103.992573 9.98032022,104.733413 C9.98032022,105.558121 9.77764067,106.152182 9.3722755,106.515613 C8.96691032,106.879044 8.29597114,107.060756 7.35943781,107.060756 L2.62088241,107.060756 C1.68434908,107.060756 1.01340989,106.879044 0.608044719,106.515613 C0.202679546,106.152182 0,105.558121 0,104.733413 C0,103.992573 0.192196121,103.429962 0.57659413,103.045564 C0.960992139,102.661166 1.53059155,102.46897 2.28540946,102.46897 L2.62088241,102.46897 L3.22892713,86.8275441 L2.89345418,86.8275441 C2.13863627,86.8275441 1.56204791,86.6318535 1.16367179,86.2404664 C0.765295672,85.8490794 0.5661106,85.2759855 0.5661106,84.5211676 C0.5661106,83.6964591 0.772284622,83.1023984 1.18463885,82.7389675 C1.59699308,82.3755367 2.27841569,82.193824 3.22892713,82.193824 L6.49978838,82.193824 C7.22665007,82.193824 7.81022738,82.3685477 8.25053783,82.7180005 C8.69084827,83.0674532 9.05077919,83.6405471 9.33034138,84.4372993 L13.439885,96.325622 Z M43.8935644,98.3803938 L43.8935644,86.8275441 L42.7403761,86.8275441 C41.8178209,86.8275441 41.1573651,86.6458314 40.758989,86.2824006 C40.3606129,85.9189697 40.1614278,85.3318979 40.1614278,84.5211676 C40.1614278,83.7104372 40.3606129,83.119871 40.758989,82.7494511 C41.1573651,82.3790312 41.8178209,82.193824 42.7403761,82.193824 L48.6950209,82.193824 C49.6035981,82.193824 50.2605593,82.3790312 50.6659245,82.7494511 C51.0712897,83.119871 51.2739692,83.7104372 51.2739692,84.5211676 C51.2739692,85.2620074 51.0817731,85.8316068 50.6973751,86.2299829 C50.3129771,86.628359 49.7643445,86.8275441 49.051461,86.8275441 L48.6950209,86.8275441 L48.6950209,105.865634 C48.6950209,106.522605 48.6251315,106.934953 48.4853504,107.10269 C48.3455693,107.270428 48.0310665,107.354295 47.5418327,107.354295 L45.4451268,107.354295 C44.7741775,107.354295 44.3024234,107.284406 44.0298503,107.144625 C43.7572771,107.004843 43.5231473,106.76023 43.3274538,106.410777 L34.6051571,91.0838571 L34.6051571,102.46897 L35.8212466,102.46897 C36.7298237,102.46897 37.379796,102.643694 37.7711831,102.993147 C38.1625701,103.3426 38.3582607,103.922682 38.3582607,104.733413 C38.3582607,105.558121 38.1590757,106.152182 37.7606995,106.515613 C37.3623234,106.879044 36.7158456,107.060756 35.8212466,107.060756 L29.8037005,107.060756 C28.8951234,107.060756 28.2381621,106.879044 27.832797,106.515613 C27.4274318,106.152182 27.2247522,105.558121 27.2247522,104.733413 C27.2247522,103.992573 27.4134539,103.429962 27.7908629,103.045564 C28.1682718,102.661166 28.7273878,102.46897 29.4682276,102.46897 L29.8037005,102.46897 L29.8037005,86.8275441 L29.4682276,86.8275441 C28.755344,86.8275441 28.203217,86.628359 27.8118299,86.2299829 C27.4204428,85.8316068 27.2247522,85.2620074 27.2247522,84.5211676 C27.2247522,83.7104372 27.4309263,83.119871 27.8432805,82.7494511 C28.2556347,82.3790312 28.9091015,82.193824 29.8037005,82.193824 L33.2422983,82.193824 C34.0670067,82.193824 34.6261227,82.3021527 34.919663,82.5188134 C35.2132033,82.7354741 35.5416839,83.1722835 35.9051148,83.8292546 L43.8935644,98.3803938 Z M64.6604624,86.3662688 C62.8572863,86.3662688 61.4420239,87.0931196 60.4146329,88.546843 C59.3872418,90.0005663 58.873554,92.0203728 58.873554,94.6063231 C58.873554,97.1922733 59.3907363,99.2190688 60.4251164,100.68677 C61.4594965,102.154472 62.8712644,102.888312 64.6604624,102.888312 C66.4636385,102.888312 67.8823953,102.157966 68.9167754,100.697254 C69.9511555,99.2365414 70.4683378,97.2062514 70.4683378,94.6063231 C70.4683378,92.0203728 69.95465,90.0005663 68.9272589,88.546843 C67.8998679,87.0931196 66.4776166,86.3662688 64.6604624,86.3662688 L64.6604624,86.3662688 Z M64.6604624,81.501911 C68.0990773,81.501911 70.929602,82.7319662 73.1521214,85.1921135 C75.3746408,87.6522607 76.4858838,90.7902992 76.4858838,94.6063231 C76.4858838,98.4503032 75.3816297,101.595331 73.1730884,104.0415 C70.9645471,106.487669 68.1270335,107.710735 64.6604624,107.710735 C61.2358256,107.710735 58.4053009,106.477185 56.1688034,104.010049 C53.9323059,101.542913 52.8140739,98.4083688 52.8140739,94.6063231 C52.8140739,90.7763211 53.9218224,87.6347881 56.1373528,85.1816299 C58.3528831,82.7284717 61.1938912,81.501911 64.6604624,81.501911 L64.6604624,81.501911 Z M87.4611651,98.1707232 L87.4611651,102.46897 L89.6207722,102.46897 C90.5293493,102.46897 91.1758272,102.643694 91.5602252,102.993147 C91.9446232,103.3426 92.1368193,103.922682 92.1368193,104.733413 C92.1368193,105.558121 91.9411287,106.152182 91.5497417,106.515613 C91.1583546,106.879044 90.5153712,107.060756 89.6207722,107.060756 L82.3661697,107.060756 C81.4436145,107.060756 80.7831587,106.879044 80.3847826,106.515613 C79.9864065,106.152182 79.7872214,105.558121 79.7872214,104.733413 C79.7872214,103.992573 79.9759231,103.429962 80.353332,103.045564 C80.730741,102.661166 81.282868,102.46897 82.0097297,102.46897 L82.3661697,102.46897 L82.3661697,86.8275441 L82.0097297,86.8275441 C81.2968461,86.8275441 80.7482136,86.628359 80.3638155,86.2299829 C79.9794175,85.8316068 79.7872214,85.2620074 79.7872214,84.5211676 C79.7872214,83.7104372 79.989901,83.119871 80.3952661,82.7494511 C80.8006313,82.3790312 81.4575926,82.193824 82.3661697,82.193824 L91.0255652,82.193824 C94.450202,82.193824 97.0396079,82.8507853 98.7938606,84.1647276 C100.548113,85.4786699 101.425227,87.414609 101.425227,89.972603 C101.425227,92.6703781 100.551608,94.7111515 98.8043442,96.0949843 C97.0570805,97.4788171 94.4641801,98.1707232 91.0255652,98.1707232 L87.4611651,98.1707232 Z M87.4611651,86.8275441 L87.4611651,93.4531348 L90.4384875,93.4531348 C92.0879044,93.4531348 93.328443,93.1735768 94.1601405,92.6144525 C94.9918381,92.0553281 95.4076806,91.2166541 95.4076806,90.0984053 C95.4076806,89.0500471 94.9778602,88.2428234 94.1182064,87.67671 C93.2585527,87.1105966 92.031992,86.8275441 90.4384875,86.8275441 L87.4611651,86.8275441 Z M114.727851,107.396229 L113.092421,109.03166 C113.69348,108.835966 114.284046,108.689198 114.864137,108.591352 C115.444229,108.493505 116.013828,108.444582 116.572953,108.444582 C117.677223,108.444582 118.840883,108.608823 120.063968,108.937308 C121.287053,109.265794 122.031376,109.430034 122.29696,109.430034 C122.744259,109.430034 123.327837,109.279772 124.047709,108.979242 C124.767582,108.678713 125.253314,108.52845 125.50492,108.52845 C126.02211,108.52845 126.45193,108.727636 126.794394,109.126012 C127.136858,109.524388 127.308087,110.024098 127.308087,110.625156 C127.308087,111.421909 126.836333,112.099837 125.892811,112.658961 C124.949288,113.218086 123.792617,113.497643 122.422762,113.497643 C121.486229,113.497643 120.28413,113.277492 118.816428,112.837181 C117.348727,112.396871 116.286406,112.176719 115.629435,112.176719 C114.636989,112.176719 113.518757,112.449288 112.274706,112.994434 C111.030654,113.53958 110.261869,113.812149 109.968329,113.812149 C109.36727,113.812149 108.857077,113.612964 108.437734,113.214588 C108.01839,112.816212 107.808722,112.337469 107.808722,111.778345 C107.808722,111.386958 107.941512,110.971115 108.207096,110.530805 C108.47268,110.090494 108.94094,109.520895 109.611889,108.821989 L111.729562,106.683349 C109.395218,105.830685 107.536157,104.29661 106.152324,102.08108 C104.768491,99.8655494 104.076585,97.3180772 104.076585,94.4385866 C104.076585,90.6365409 105.180839,87.5299526 107.389381,85.1187288 C109.597922,82.7075049 112.442425,81.501911 115.922974,81.501911 C119.389545,81.501911 122.227059,82.7109994 124.4356,85.1292123 C126.644141,87.5474252 127.748395,90.650519 127.748395,94.4385866 C127.748395,98.2126762 126.65113,101.322759 124.456567,103.768928 C122.262004,106.215097 119.480402,107.438163 116.111677,107.438163 C115.888028,107.438163 115.660887,107.434669 115.430248,107.42768 C115.199609,107.420691 114.965479,107.410207 114.727851,107.396229 L114.727851,107.396229 Z M115.922974,86.3662688 C114.119798,86.3662688 112.704535,87.0931196 111.677144,88.546843 C110.649753,90.0005663 110.136065,92.0203728 110.136065,94.6063231 C110.136065,97.1922733 110.653248,99.2190688 111.687628,100.68677 C112.722008,102.154472 114.133776,102.888312 115.922974,102.888312 C117.72615,102.888312 119.144907,102.157966 120.179287,100.697254 C121.213667,99.2365414 121.730849,97.2062514 121.730849,94.6063231 C121.730849,92.0203728 121.217161,90.0005663 120.18977,88.546843 C119.162379,87.0931196 117.740128,86.3662688 115.922974,86.3662688 L115.922974,86.3662688 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mono-line": {
            "title": "$:/core/images/mono-line",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mono-line tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60.4374591,84.522627 L61.3450888,84.522627 C63.2671377,84.522627 64.7264493,85.0120303 65.7230673,85.9908515 C66.7196852,86.9696727 67.2179868,88.4022896 67.2179868,90.288745 C67.2179868,92.3887615 66.6929905,93.9014625 65.6429823,94.8268935 C64.5929741,95.7523244 62.857817,96.215033 60.4374591,96.215033 L44.3670747,96.215033 C41.9111232,96.215033 40.1670679,95.7612227 39.1348565,94.8535884 C38.102645,93.9459542 37.586547,92.424355 37.586547,90.288745 C37.586547,88.2243221 38.102645,86.747214 39.1348565,85.8573766 C40.1670679,84.9675391 41.9111232,84.522627 44.3670747,84.522627 L46.235724,84.522627 L44.0467348,78.2759992 L20.9822627,78.2759992 L18.6864935,84.522627 L20.5551429,84.522627 C22.9755008,84.522627 24.7106579,84.9764373 25.7606661,85.8840716 C26.8106743,86.7917058 27.3356705,88.2599156 27.3356705,90.288745 C27.3356705,92.3887615 26.8106743,93.9014625 25.7606661,94.8268935 C24.7106579,95.7523244 22.9755008,96.215033 20.5551429,96.215033 L6.78052766,96.215033 C4.32457622,96.215033 2.58052094,95.7523244 1.54830946,94.8268935 C0.516097994,93.9014625 0,92.3887615 0,90.288745 C0,88.4022896 0.498301511,86.9696727 1.49491948,85.9908515 C2.49153745,85.0120303 3.95084902,84.522627 5.87289797,84.522627 L6.78052766,84.522627 L21.0890427,44.6937008 L16.8178442,44.6937008 C14.3974863,44.6937008 12.6623292,44.2309922 11.612321,43.3055613 C10.5623128,42.3801303 10.0373165,40.8852258 10.0373165,38.8208028 C10.0373165,36.7207864 10.5623128,35.2080854 11.612321,34.2826544 C12.6623292,33.3572234 14.3974863,32.8945149 16.8178442,32.8945149 L36.8390873,32.8945149 C40.0069087,32.8945149 42.231469,34.6029772 43.512835,38.0199531 L43.512835,38.180123 L60.4374591,84.522627 Z M32.4611088,44.6937008 L24.7195615,67.224273 L40.2026561,67.224273 L32.4611088,44.6937008 Z M89.5058233,68.5590225 L89.5058233,84.8429669 L97.5143205,84.8429669 C103.173687,84.8429669 107.160099,84.22009 109.473676,82.9743176 C111.787254,81.7285451 112.944025,79.6463566 112.944025,76.7276897 C112.944025,73.7734293 111.840643,71.6734444 109.633846,70.4276719 C107.427049,69.1818994 103.565213,68.5590225 98.0482204,68.5590225 L89.5058233,68.5590225 Z M116.734714,62.6327346 C120.614405,64.0564746 123.461842,66.0051894 125.277111,68.4789376 C127.092379,70.9526857 128,74.1115614 128,77.9556593 C128,81.1946677 127.216955,84.1488838 125.650841,86.8183962 C124.084727,89.4879087 121.84237,91.676876 118.923703,93.385364 C117.215215,94.3819819 115.302093,95.1027395 113.18428,95.5476582 C111.066467,95.9925769 108.06776,96.215033 104.188068,96.215033 L99.7033098,96.215033 L76.3184979,96.215033 C73.9693269,96.215033 72.2875593,95.7523244 71.2731446,94.8268935 C70.2587299,93.9014625 69.7515301,92.3887615 69.7515301,90.288745 C69.7515301,88.4022896 70.2320352,86.9696727 71.1930596,85.9908515 C72.1540841,85.0120303 73.5600062,84.522627 75.4108682,84.522627 L76.3184979,84.522627 L76.3184979,44.6937008 L75.4108682,44.6937008 C73.5600062,44.6937008 72.1540841,44.1953993 71.1930596,43.1987813 C70.2320352,42.2021633 69.7515301,40.7428518 69.7515301,38.8208028 C69.7515301,36.7563799 70.2676281,35.2525771 71.2998396,34.3093494 C72.3320511,33.3661217 74.0049204,32.8945149 76.3184979,32.8945149 L100.877889,32.8945149 C108.388118,32.8945149 114.09189,34.3538264 117.989378,37.2724934 C121.886867,40.1911603 123.835581,44.4623161 123.835581,50.0860889 C123.835581,52.8623819 123.239399,55.3093982 122.047017,57.4272114 C120.854635,59.5450246 119.083885,61.2801816 116.734714,62.6327346 L116.734714,62.6327346 Z M89.5058233,44.3733609 L89.5058233,57.8276363 L96.7134708,57.8276363 C101.091471,57.8276363 104.179161,57.3115383 105.976633,56.2793268 C107.774104,55.2471153 108.672827,53.50306 108.672827,51.0471086 C108.672827,48.7335312 107.863087,47.0428653 106.243583,45.9750604 C104.624078,44.9072554 101.999097,44.3733609 98.3685602,44.3733609 L89.5058233,44.3733609 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n    \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t        <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t        <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n        </g>\n        <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/new-image-button": {
            "title": "$:/core/images/new-image-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.3619177,73.6270062 L97.1875317,46.2162388 C97.91364,44.9585822 97.4824378,43.3533085 96.2260476,42.6279312 L46.2162388,13.7547547 C44.9585822,13.0286463 43.3533085,13.4598485 42.6279312,14.7162388 L30.0575956,36.4886988 L40.0978909,31.2276186 C43.1404959,29.6333041 46.8692155,31.3421319 47.6479264,34.6877101 L51.2545483,52.3903732 L61.1353556,53.2399953 C63.2899974,53.4346096 65.1046382,54.9309951 65.706105,57.0091178 C65.7395572,57.1246982 65.8069154,57.3539875 65.9047035,57.6813669 C66.0696435,58.2335608 66.2581528,58.852952 66.4667073,59.5238092 C67.0618822,61.4383079 67.6960725,63.3742727 68.3393254,65.2021174 C68.5462918,65.7902259 68.7511789,66.3583016 68.953259,66.9034738 C69.5777086,68.5881157 70.1617856,70.0172008 70.6783305,71.110045 C70.9334784,71.6498566 71.1627732,72.0871602 71.4035746,72.5373068 C71.6178999,72.7492946 71.9508843,72.9623307 72.4151452,73.1586945 C73.5561502,73.6412938 75.1990755,73.899146 77.0720271,73.9171651 C77.9355886,73.9254732 78.7819239,73.8832103 79.5638842,73.8072782 C80.0123946,73.7637257 80.3172916,73.7224469 80.4352582,73.7027375 C80.7503629,73.6500912 81.0598053,73.6256267 81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 Z M37.4707881,2.64867269 C38.9217993,0.135447653 42.1388058,-0.723707984 44.6486727,0.725364314 L108.293614,37.4707881 C110.806839,38.9217993 111.665994,42.1388058 110.216922,44.6486727 L73.4714982,108.293614 C72.0204871,110.806839 68.8034805,111.665994 66.2936136,110.216922 L2.64867269,73.4714982 C0.135447653,72.0204871 -0.723707984,68.8034805 0.725364314,66.2936136 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 Z M80.3080975,53.1397764 C82.8191338,54.5895239 86.0299834,53.7291793 87.4797308,51.218143 C88.9294783,48.7071068 88.0691338,45.4962571 85.5580975,44.0465097 C83.0470612,42.5967622 79.8362116,43.4571068 78.3864641,45.968143 C76.9367166,48.4791793 77.7970612,51.6900289 80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 Z M96,112 L88.0070969,112 C83.5881712,112 80,108.418278 80,104 C80,99.5907123 83.5848994,96 88.0070969,96 L96,96 L96,88.0070969 C96,83.5881712 99.581722,80 104,80 C108.409288,80 112,83.5848994 112,88.0070969 L112,96 L119.992903,96 C124.411829,96 128,99.581722 128,104 C128,108.409288 124.415101,112 119.992903,112 L112,112 L112,119.992903 C112,124.411829 108.418278,128 104,128 C99.5907123,128 96,124.415101 96,119.992903 L96,112 L96,112 Z M33.3471097,51.7910932 C40.7754579,59.7394511 42.3564368,62.4818351 40.7958321,65.1848818 C39.2352273,67.8879286 26.9581062,62.8571718 24.7019652,66.7649227 C22.4458242,70.6726735 23.7947046,70.0228006 22.2648667,72.6725575 L41.9944593,84.0634431 C41.9944593,84.0634431 36.3904568,75.8079231 37.7602356,73.4353966 C40.2754811,69.0788636 46.5298923,72.1787882 48.1248275,69.4162793 C50.538989,65.234829 43.0222016,59.7770885 33.3471097,51.7910932 L33.3471097,51.7910932 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n        <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n            <g transform=\"translate(0.000000, 0.000000)\">\n                <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n                <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n                    <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n                </text>\n            </g>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/opacity": {
            "title": "$:/core/images/opacity",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-opacity tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.361773,65 C101.833691,67.051742 101.183534,69.0544767 100.419508,71 L82.5835324,71 C83.7602504,69.1098924 84.7666304,67.1027366 85.581205,65 L102.361773,65 Z M102.834311,63 C103.256674,61.0388326 103.568427,59.0365486 103.762717,57 L87.6555706,57 C87.3692052,59.0609452 86.9083652,61.0660782 86.2884493,63 L102.834311,63 Z M99.5852583,73 C98.6682925,75.0747721 97.6196148,77.0783056 96.4498253,79 L75.8124196,79 C77.8387053,77.2115633 79.6621163,75.1985844 81.2437158,73 L99.5852583,73 Z M95.1689122,81 C93.7449202,83.1155572 92.1695234,85.1207336 90.458251,87 L60.4614747,87 C65.1836162,85.86248 69.5430327,83.794147 73.3347255,81 L95.1689122,81 Z M87.6555706,47 L103.762717,47 C101.246684,20.6269305 79.0321807,0 52,0 C23.281193,0 0,23.281193 0,52 C0,77.2277755 17.9651296,98.2595701 41.8000051,103 L62.1999949,103 C67.8794003,101.870444 73.2255333,99.8158975 78.074754,97 L39,97 L39,95 L81.2493857,95 C83.8589242,93.2215015 86.2981855,91.2116653 88.5376609,89 L39,89 L39,87 L43.5385253,87 C27.7389671,83.1940333 16,68.967908 16,52 C16,32.117749 32.117749,16 52,16 C70.1856127,16 85.2217929,29.4843233 87.6555706,47 Z M87.8767787,49 L103.914907,49 C103.971379,49.9928025 104,50.9930589 104,52 C104,53.0069411 103.971379,54.0071975 103.914907,55 L87.8767787,55 C87.958386,54.0107999 88,53.0102597 88,52 C88,50.9897403 87.958386,49.9892001 87.8767787,49 Z\"></path>\n        <path d=\"M76,128 C104.718807,128 128,104.718807 128,76 C128,47.281193 104.718807,24 76,24 C47.281193,24 24,47.281193 24,76 C24,104.718807 47.281193,128 76,128 L76,128 Z M76,112 C95.882251,112 112,95.882251 112,76 C112,56.117749 95.882251,40 76,40 C56.117749,40 40,56.117749 40,76 C40,95.882251 56.117749,112 76,112 L76,112 Z\"></path>\n        <path d=\"M37,58 L90,58 L90,62 L37,62 L37,58 L37,58 Z M40,50 L93,50 L93,54 L40,54 L40,50 L40,50 Z M40,42 L93,42 L93,46 L40,46 L40,42 L40,42 Z M32,66 L85,66 L85,70 L32,70 L32,66 L32,66 Z M30,74 L83,74 L83,78 L30,78 L30,74 L30,74 Z M27,82 L80,82 L80,86 L27,86 L27,82 L27,82 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-open-window tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M16,112 L104.993898,112 C108.863261,112 112,115.590712 112,120 C112,124.418278 108.858091,128 104.993898,128 L7.00610161,128 C3.13673853,128 0,124.409288 0,120 C0,119.998364 4.30952878e-07,119.996727 1.29273572e-06,119.995091 C4.89579306e-07,119.993456 0,119.99182 0,119.990183 L0,24.0098166 C0,19.586117 3.59071231,16 8,16 C12.418278,16 16,19.5838751 16,24.0098166 L16,112 Z\"></path>\n        <path d=\"M96,43.1959595 L96,56 C96,60.418278 99.581722,64 104,64 C108.418278,64 112,60.418278 112,56 L112,24 C112,19.5907123 108.415101,16 103.992903,16 L72.0070969,16 C67.5881712,16 64,19.581722 64,24 C64,28.4092877 67.5848994,32 72.0070969,32 L84.5685425,32 L48.2698369,68.2987056 C45.1421332,71.4264093 45.1434327,76.4904296 48.267627,79.614624 C51.3854642,82.7324612 56.4581306,82.7378289 59.5835454,79.6124141 L96,43.1959595 Z M32,7.9992458 C32,3.58138434 35.5881049,0 39.9992458,0 L120.000754,0 C124.418616,0 128,3.5881049 128,7.9992458 L128,88.0007542 C128,92.4186157 124.411895,96 120.000754,96 L39.9992458,96 C35.5813843,96 32,92.4118951 32,88.0007542 L32,7.9992458 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/paint": {
            "title": "$:/core/images/paint",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-paint tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M83.5265806,76.1907935 C90.430962,69.2864121 91.8921169,59.0000433 87.9100453,50.6642209 L125.812763,12.7615036 C128.732035,9.84223095 128.72611,5.10322984 125.812796,2.18991592 C122.893542,-0.729338085 118.161775,-0.730617045 115.241209,2.18994966 L77.3384914,40.092667 C69.002669,36.1105954 58.7163002,37.5717503 51.8119188,44.4761317 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 Z M80.8836921,78.8336819 L49.1690303,47.1190201 C49.1690303,47.1190201 8.50573364,81.242543 0,80.2820711 C0,80.2820711 3.78222974,85.8744423 6.82737483,88.320684 C20.8514801,82.630792 44.1526049,63.720771 44.1526049,63.720771 L44.8144806,64.3803375 C44.8144806,64.3803375 19.450356,90.2231043 9.18040433,92.0477601 C10.4017154,93.4877138 13.5343883,96.1014812 15.4269991,97.8235871 C20.8439164,96.3356979 50.1595367,69.253789 50.1595367,69.253789 L50.8214124,69.9133555 L18.4136144,100.936036 L23.6993903,106.221812 L56.1060358,75.2002881 L56.7679115,75.8598546 C56.7679115,75.8598546 28.9040131,106.396168 28.0841366,108.291555 C28.0841366,108.291555 34.1159238,115.144621 35.6529617,116.115796 C36.3545333,113.280171 63.5365402,82.6307925 63.5365402,82.6307925 L64.1984159,83.290359 C64.1984159,83.290359 43.6013016,107.04575 39.2343772,120.022559 C42.443736,123.571575 46.7339155,125.159692 50.1595362,126.321151 C47.9699978,114.504469 80.8836921,78.8336819 80.8836921,78.8336819 L80.8836921,78.8336819 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-palette tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.2470434,39.1821571 C75.0645698,38.2680897 69.6261555,37.7814854 64.0193999,37.7814854 C28.6624616,37.7814854 0,57.1324214 0,81.0030106 C0,90.644534 4.67604329,99.5487133 12.5805659,106.738252 C23.5031767,91.1899067 26.3405471,72.3946229 36.8885698,63.5622337 C52.0716764,50.8486559 63.4268694,55.7343343 63.4268694,55.7343343 L80.2470434,39.1821571 Z M106.781666,48.8370714 C119.830962,56.749628 128.0388,68.229191 128.0388,81.0030106 C128.0388,90.3534932 128.557501,98.4142085 116.165191,106.082518 C105.367708,112.763955 112.341384,99.546808 104.321443,95.1851533 C96.3015017,90.8234987 84.3749007,96.492742 86.1084305,103.091059 C89.3087234,115.272303 105.529892,114.54645 92.4224435,119.748569 C79.3149955,124.950687 74.2201582,124.224536 64.0193999,124.224536 C56.1979176,124.224536 48.7040365,123.277578 41.7755684,121.544216 C51.620343,117.347916 69.6563669,109.006202 75.129737,102.088562 C82.7876655,92.4099199 87.3713218,80.0000002 83.3235694,72.4837191 C83.1303943,72.1250117 94.5392656,60.81569 106.781666,48.8370714 Z M1.13430476,123.866563 C0.914084026,123.867944 0.693884185,123.868637 0.473712455,123.868637 C33.9526848,108.928928 22.6351223,59.642592 59.2924543,59.6425917 C59.6085574,61.0606542 59.9358353,62.5865065 60.3541977,64.1372318 C34.4465025,59.9707319 36.7873124,112.168427 1.13429588,123.866563 L1.13430476,123.866563 Z M1.84669213,123.859694 C40.7185279,123.354338 79.9985412,101.513051 79.9985401,79.0466836 C70.7284906,79.0466835 65.9257264,75.5670082 63.1833375,71.1051511 C46.585768,64.1019718 32.81846,116.819636 1.84665952,123.859695 L1.84669213,123.859694 Z M67.1980193,59.8524981 C62.748213,63.9666823 72.0838429,76.2846822 78.5155805,71.1700593 C89.8331416,59.8524993 112.468264,37.2173758 123.785825,25.8998146 C135.103386,14.5822535 123.785825,3.26469247 112.468264,14.5822535 C101.150703,25.8998144 78.9500931,48.9868127 67.1980193,59.8524981 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/picture": {
            "title": "$:/core/images/picture",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-picture tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112,68.2332211 L112,20.0027785 C112,17.7898769 110.207895,16 107.997221,16 L20.0027785,16 C17.7898769,16 16,17.792105 16,20.0027785 L16,58.312373 L25.2413115,43.7197989 C28.041793,39.297674 34.2643908,38.7118128 37.8410347,42.5335275 L56.0882845,63.1470817 L69.7748997,56.7400579 C72.766567,55.3552503 76.3013751,55.9473836 78.678437,58.2315339 C78.8106437,58.3585731 79.0742301,58.609836 79.4527088,58.9673596 C80.0910923,59.570398 80.8117772,60.2441563 81.598127,60.9705595 C83.8422198,63.043576 86.1541548,65.1151944 88.3956721,67.0372264 C89.1168795,67.6556396 89.8200801,68.2492007 90.5021258,68.8146755 C92.6097224,70.5620551 94.4693308,72.0029474 95.9836366,73.0515697 C96.7316295,73.5695379 97.3674038,73.9719282 98.0281481,74.3824999 C98.4724987,74.4989557 99.0742374,74.5263881 99.8365134,74.4317984 C101.709944,74.1993272 104.074502,73.2878514 106.559886,71.8846196 C107.705822,71.2376318 108.790494,70.5370325 109.764561,69.8410487 C110.323259,69.4418522 110.694168,69.1550757 110.834827,69.0391868 C111.210545,68.7296319 111.600264,68.4615815 112,68.2332211 L112,68.2332211 Z M0,8.00697327 C0,3.58484404 3.59075293,0 8.00697327,0 L119.993027,0 C124.415156,0 128,3.59075293 128,8.00697327 L128,119.993027 C128,124.415156 124.409247,128 119.993027,128 L8.00697327,128 C3.58484404,128 0,124.409247 0,119.993027 L0,8.00697327 L0,8.00697327 Z M95,42 C99.418278,42 103,38.418278 103,34 C103,29.581722 99.418278,26 95,26 C90.581722,26 87,29.581722 87,34 C87,38.418278 90.581722,42 95,42 L95,42 Z M32,76 C47.8587691,80.8294182 52.0345556,83.2438712 52.0345556,88 C52.0345556,92.7561288 32,95.4712486 32,102.347107 C32,109.222965 33.2849191,107.337637 33.2849191,112 L67.999999,112 C67.999999,112 54.3147136,105.375255 54.3147136,101.200691 C54.3147136,93.535181 64.9302432,92.860755 64.9302432,88 C64.9302432,80.6425555 50.8523779,79.167282 32,76 L32,76 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-language": {
            "title": "$:/core/images/plugin-generic-language",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-plugin": {
            "title": "$:/core/images/plugin-generic-plugin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-theme": {
            "title": "$:/core/images/plugin-generic-theme",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M29.4078519,91.4716406 L51.4693474,69.4101451 L51.4646675,69.4054652 C50.5969502,68.5377479 50.5929779,67.1348725 51.4693474,66.2585029 C52.3396494,65.3882009 53.7499654,65.3874786 54.6163097,66.2538229 L64.0805963,75.7181095 C64.9483136,76.5858268 64.9522859,77.9887022 64.0759163,78.8650718 C63.2056143,79.7353737 61.7952984,79.736096 60.9289541,78.8697517 L60.9242741,78.8650718 L60.9242741,78.8650718 L38.8627786,100.926567 C36.2518727,103.537473 32.0187578,103.537473 29.4078519,100.926567 C26.796946,98.3156614 26.796946,94.0825465 29.4078519,91.4716406 Z M60.8017407,66.3810363 C58.3659178,63.6765806 56.3370667,61.2899536 54.9851735,59.5123615 C48.1295381,50.4979488 44.671561,55.2444054 40.7586738,59.5123614 C36.8457866,63.7803174 41.789473,67.2384487 38.0759896,70.2532832 C34.3625062,73.2681177 34.5917646,74.3131575 28.3243876,68.7977024 C22.0570105,63.2822473 21.6235306,61.7636888 24.5005999,58.6166112 C27.3776691,55.4695337 29.7823103,60.4247912 35.6595047,54.8320442 C41.5366991,49.2392972 36.5996215,44.2825646 36.5996215,44.2825646 C36.5996215,44.2825646 48.8365511,19.267683 65.1880231,21.1152173 C81.5394952,22.9627517 59.0022276,18.7228947 53.3962199,38.3410355 C50.9960082,46.7405407 53.8429162,44.7613399 58.3941742,48.3090467 C59.7875202,49.3951602 64.4244828,52.7100463 70.1884353,56.9943417 L90.8648751,36.3179019 L92.4795866,31.5515482 L100.319802,26.8629752 L103.471444,30.0146174 L98.782871,37.8548326 L94.0165173,39.4695441 L73.7934912,59.6925702 C86.4558549,69.2403631 102.104532,81.8392557 102.104532,86.4016913 C102.104533,93.6189834 99.0337832,97.9277545 92.5695848,95.5655717 C87.8765989,93.8506351 73.8015497,80.3744087 63.8173444,69.668717 L60.9242741,72.5617873 L57.7726319,69.4101451 L60.8017407,66.3810363 L60.8017407,66.3810363 Z M63.9533761,1.42108547e-13 L118.512977,32 L118.512977,96 L63.9533761,128 L9.39377563,96 L9.39377563,32 L63.9533761,1.42108547e-13 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/preview-closed": {
            "title": "$:/core/images/preview-closed",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-preview-closed tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M0.0881363238,64 C-0.210292223,65.8846266 0.249135869,67.8634737 1.4664206,69.4579969 C16.2465319,88.8184886 39.1692554,100.414336 64,100.414336 C88.8307446,100.414336 111.753468,88.8184886 126.533579,69.4579969 C127.750864,67.8634737 128.210292,65.8846266 127.911864,64 C110.582357,78.4158332 88.3036732,87.0858436 64,87.0858436 C39.6963268,87.0858436 17.4176431,78.4158332 0.0881363238,64 Z\"></path>\n        <rect x=\"62\" y=\"96\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(80.000000, 101.000000) rotate(-5.000000) translate(-80.000000, -101.000000) \" x=\"78\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(48.000000, 101.000000) rotate(-355.000000) translate(-48.000000, -101.000000) \" x=\"46\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(32.000000, 96.000000) rotate(-350.000000) translate(-32.000000, -96.000000) \" x=\"30\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(96.000000, 96.000000) rotate(-10.000000) translate(-96.000000, -96.000000) \" x=\"94\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(112.000000, 88.000000) rotate(-20.000000) translate(-112.000000, -88.000000) \" x=\"110\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(16.000000, 88.000000) rotate(-340.000000) translate(-16.000000, -88.000000) \" x=\"14\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/preview-open": {
            "title": "$:/core/images/preview-open",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-preview-open tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64.1099282,99.5876785 C39.2791836,99.5876785 16.3564602,87.9918313 1.57634884,68.6313396 C-0.378878622,66.070184 -0.378878622,62.5174945 1.57634884,59.9563389 C16.3564602,40.5958472 39.2791836,29 64.1099282,29 C88.9406729,29 111.863396,40.5958472 126.643508,59.9563389 C128.598735,62.5174945 128.598735,66.070184 126.643508,68.6313396 C111.863396,87.9918313 88.9406729,99.5876785 64.1099282,99.5876785 Z M110.213805,67.5808331 C111.654168,66.0569335 111.654168,63.9430665 110.213805,62.4191669 C99.3257042,50.8995835 82.4391647,44 64.1470385,44 C45.8549124,44 28.9683729,50.8995835 18.0802717,62.4191669 C16.6399094,63.9430665 16.6399094,66.0569335 18.0802717,67.5808331 C28.9683729,79.1004165 45.8549124,86 64.1470385,86 C82.4391647,86 99.3257042,79.1004165 110.213805,67.5808331 Z\"></path>\n        <path d=\"M63.5,88 C76.4786916,88 87,77.4786916 87,64.5 C87,51.5213084 76.4786916,41 63.5,41 C50.5213084,41 40,51.5213084 40,64.5 C40,77.4786916 50.5213084,88 63.5,88 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/print-button": {
            "title": "$:/core/images/print-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112,71 L112,30.5 L111.96811,30.5 L111.96811,30.5 C111.932942,28.4998414 111.151676,26.510538 109.625176,24.9840387 L86.9982489,2.35711116 C85.3482153,0.707077645 83.1589869,-0.071534047 81,0.0201838424 L81,0 L23.9992458,0 C19.5808867,0 16,3.58213437 16,8.00092105 L16,71 L24,71 L24,8 L81,8 L81,22.4996539 C81,26.9216269 84.5818769,30.5 89.0003461,30.5 L104,30.5 L104,71 L112,71 Z\"></path>\n        <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n        <path d=\"M0,80.0054195 C0,71.1658704 7.15611005,64 16.0008841,64 L111.999116,64 C120.83616,64 128,71.1553215 128,80.0054195 L128,111.99458 C128,120.83413 120.84389,128 111.999116,128 L16.0008841,128 C7.16383982,128 0,120.844679 0,111.99458 L0,80.0054195 Z M104,96 C108.418278,96 112,92.418278 112,88 C112,83.581722 108.418278,80 104,80 C99.581722,80 96,83.581722 96,88 C96,92.418278 99.581722,96 104,96 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/quote": {
            "title": "$:/core/images/quote",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-quote tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M51.2188077,117.712501 L51.2188077,62.1993386 L27.4274524,62.1993386 C27.4274524,53.3075754 29.1096526,45.797753 32.4741035,39.669646 C35.8385544,33.541539 42.0867267,28.9154883 51.2188077,25.7913554 L51.2188077,2 C43.7689521,2.96127169 36.8599155,5.18417913 30.4914905,8.668789 C24.1230656,12.1533989 18.6559149,16.5391352 14.0898743,21.8261295 C9.52383382,27.1131238 5.97919764,33.2411389 3.45585945,40.2103586 C0.932521268,47.1795784 -0.208971741,54.6293222 0.0313461819,62.5598136 L0.0313461819,117.712501 L51.2188077,117.712501 Z M128,117.712501 L128,62.1993386 L104.208645,62.1993386 C104.208645,53.3075754 105.890845,45.797753 109.255296,39.669646 C112.619747,33.541539 118.867919,28.9154883 128,25.7913554 L128,2 C120.550144,2.96127169 113.641108,5.18417913 107.272683,8.668789 C100.904258,12.1533989 95.4371072,16.5391352 90.8710666,21.8261295 C86.3050261,27.1131238 82.7603899,33.2411389 80.2370517,40.2103586 C77.7137136,47.1795784 76.5722206,54.6293222 76.8125385,62.5598136 L76.8125385,117.712501 L128,117.712501 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
        },
        "$:/core/images/rotate-left": {
            "title": "$:/core/images/rotate-left",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-rotate-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect x=\"48\" y=\"96\" width=\"80\" height=\"32\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 0 1-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 1 1-5.657 5.657L49.172 43.142a4 4 0 0 1 0-5.657l11.313-11.313a4 4 0 1 1 5.657 5.656l-4.821 4.822z\"/></g></svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/size": {
            "title": "$:/core/images/size",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-size tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M92.3431458,26 L83.1715729,35.1715729 C81.6094757,36.73367 81.6094757,39.26633 83.1715729,40.8284271 C84.73367,42.3905243 87.26633,42.3905243 88.8284271,40.8284271 L104.828427,24.8284271 C106.390524,23.26633 106.390524,20.73367 104.828427,19.1715729 L88.8284271,3.17157288 C87.26633,1.60947571 84.73367,1.60947571 83.1715729,3.17157288 C81.6094757,4.73367004 81.6094757,7.26632996 83.1715729,8.82842712 L92.3431457,18 L22,18 C19.790861,18 18,19.790861 18,22 L18,92.3431458 L8.82842712,83.1715729 C7.26632996,81.6094757 4.73367004,81.6094757 3.17157288,83.1715729 C1.60947571,84.73367 1.60947571,87.26633 3.17157288,88.8284271 L19.1715729,104.828427 C20.73367,106.390524 23.26633,106.390524 24.8284271,104.828427 L40.8284271,88.8284271 C42.3905243,87.26633 42.3905243,84.73367 40.8284271,83.1715729 C39.26633,81.6094757 36.73367,81.6094757 35.1715729,83.1715729 L26,92.3431458 L26,22 L22,26 L92.3431458,26 L92.3431458,26 Z M112,52 L112,116 L116,112 L52,112 C49.790861,112 48,113.790861 48,116 C48,118.209139 49.790861,120 52,120 L116,120 C118.209139,120 120,118.209139 120,116 L120,52 C120,49.790861 118.209139,48 116,48 C113.790861,48 112,49.790861 112,52 L112,52 Z\"></path>\n</svg>"
        },
        "$:/core/images/spiral": {
            "title": "$:/core/images/spiral",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-spiral tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/stamp": {
            "title": "$:/core/images/stamp",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-stamp tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M49.7334301,64 L16.0098166,64 C11.5838751,64 8,67.5829053 8,72.002643 L8,74.4986785 L8,97 L120,97 L120,74.4986785 L120,72.002643 C120,67.5737547 116.413883,64 111.990183,64 L78.2665699,64 C76.502049,60.7519149 75.5,57.0311962 75.5,53.0769231 C75.5,46.6017951 78.1869052,40.7529228 82.5087769,36.5800577 C85.3313113,32.7688808 87,28.0549983 87,22.952183 C87,10.2760423 76.7025492,0 64,0 C51.2974508,0 41,10.2760423 41,22.952183 C41,28.0549983 42.6686887,32.7688808 45.4912231,36.5800577 C49.8130948,40.7529228 52.5,46.6017951 52.5,53.0769231 C52.5,57.0311962 51.497951,60.7519149 49.7334301,64 Z M8,104 L120,104 L120,112 L8,112 L8,104 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/strikethrough": {
            "title": "$:/core/images/strikethrough",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-strikethrough tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M92.793842,38.7255689 L108.215529,38.7255689 C107.987058,31.985687 106.70193,26.1883331 104.360107,21.3333333 C102.018284,16.4783336 98.8197436,12.4516001 94.7643909,9.25301205 C90.7090382,6.05442399 85.9969032,3.71263572 80.6278447,2.22757697 C75.2587862,0.742518233 69.4328739,0 63.1499331,0 C57.552404,0 52.0977508,0.713959839 46.7858099,2.14190094 C41.473869,3.56984203 36.7331757,5.74027995 32.5635877,8.65327979 C28.3939997,11.5662796 25.0526676,15.2788708 22.5394913,19.7911647 C20.026315,24.3034585 18.7697456,29.6438781 18.7697456,35.8125837 C18.7697456,41.4101128 19.883523,46.0651309 22.1111111,49.7777778 C24.3386992,53.4904246 27.3087722,56.5176144 31.021419,58.8594378 C34.7340659,61.2012612 38.9321497,63.0861151 43.6157965,64.5140562 C48.2994433,65.9419973 53.068695,67.1985666 57.9236948,68.2838019 C62.7786945,69.3690371 67.5479462,70.4256977 72.231593,71.4538153 C76.9152398,72.4819329 81.1133237,73.8241773 84.8259705,75.480589 C88.5386174,77.1370007 91.5086903,79.2788802 93.7362784,81.9062918 C95.9638666,84.5337035 97.0776439,87.9607107 97.0776439,92.1874163 C97.0776439,96.6425926 96.1637753,100.298067 94.3360107,103.153949 C92.5082461,106.009831 90.109341,108.265944 87.1392236,109.922356 C84.1691061,111.578768 80.827774,112.749662 77.1151272,113.435074 C73.4024803,114.120485 69.7184476,114.463186 66.0629183,114.463186 C61.4935068,114.463186 57.0383974,113.892018 52.6974565,112.749665 C48.3565156,111.607312 44.5582492,109.836692 41.3025435,107.437751 C38.0468378,105.03881 35.4194656,101.983062 33.4203481,98.270415 C31.4212305,94.5577681 30.4216867,90.1312171 30.4216867,84.9906292 L15,84.9906292 C15,92.4159229 16.3422445,98.8415614 19.0267738,104.267738 C21.711303,109.693914 25.3667774,114.149023 29.9933066,117.633199 C34.6198357,121.117376 39.9888137,123.71619 46.1004016,125.429719 C52.2119895,127.143248 58.6947448,128 65.5488621,128 C71.1463912,128 76.7723948,127.343157 82.4270415,126.029451 C88.0816882,124.715745 93.1936407,122.602424 97.7630522,119.689424 C102.332464,116.776425 106.073613,113.006717 108.986613,108.380187 C111.899613,103.753658 113.356091,98.1847715 113.356091,91.6733601 C113.356091,85.6188899 112.242314,80.5926126 110.014726,76.5943775 C107.787137,72.5961424 104.817065,69.2833688 101.104418,66.6559572 C97.3917708,64.0285455 93.193687,61.9437828 88.5100402,60.4016064 C83.8263934,58.85943 79.0571416,57.5171855 74.2021419,56.3748327 C69.3471422,55.2324798 64.5778904,54.1758192 59.8942436,53.2048193 C55.2105968,52.2338193 51.012513,51.0058084 47.2998661,49.5207497 C43.5872193,48.0356909 40.6171463,46.1222786 38.3895582,43.7804552 C36.1619701,41.4386318 35.0481928,38.3828836 35.0481928,34.6131191 C35.0481928,30.6148841 35.8192694,27.273552 37.3614458,24.5890228 C38.9036222,21.9044935 40.9598265,19.762614 43.5301205,18.1633199 C46.1004145,16.5640259 49.041929,15.4216902 52.3547523,14.7362784 C55.6675757,14.0508667 59.0374661,13.708166 62.4645248,13.708166 C70.9179361,13.708166 77.8576257,15.6786952 83.2838019,19.6198126 C88.709978,23.56093 91.8799597,29.9294518 92.793842,38.7255689 L92.793842,38.7255689 Z\"></path>\n        <rect x=\"5\" y=\"54\" width=\"118\" height=\"16\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/subscript": {
            "title": "$:/core/images/subscript",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-subscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,128.411516 L85.3276227,128.411516 C85.3870139,123.24448 86.6342108,118.730815 89.0692508,114.870386 C91.5042907,111.009956 94.8301491,107.654403 99.0469256,104.803624 C101.066227,103.318844 103.174584,101.878629 105.372059,100.482935 C107.569534,99.0872413 109.588805,97.5876355 111.429933,95.9840726 C113.271061,94.3805097 114.785514,92.6433426 115.973338,90.7725192 C117.161163,88.9016958 117.784761,86.7487964 117.844152,84.3137564 C117.844152,83.1853233 117.710524,81.9826691 117.443264,80.7057579 C117.176003,79.4288467 116.656338,78.2410402 115.884252,77.1423026 C115.112166,76.0435651 114.04314,75.123015 112.677142,74.3806248 C111.311144,73.6382345 109.529434,73.267045 107.331959,73.267045 C105.312658,73.267045 103.634881,73.6679297 102.298579,74.4697112 C100.962276,75.2714926 99.8932503,76.3702137 99.0914688,77.7659073 C98.2896874,79.161601 97.6957841,80.8096826 97.3097412,82.7102016 C96.9236982,84.6107206 96.7009845,86.6596869 96.6415933,88.857162 L86.4857457,88.857162 C86.4857457,85.4124713 86.9460207,82.2202411 87.8665846,79.2803758 C88.7871485,76.3405105 90.1679736,73.801574 92.0091014,71.6634901 C93.8502292,69.5254062 96.092214,67.8476295 98.7351233,66.6301095 C101.378033,65.4125895 104.451482,64.8038386 107.955564,64.8038386 C111.756602,64.8038386 114.933984,65.4274371 117.487807,66.6746527 C120.041629,67.9218683 122.105443,69.4957119 123.67931,71.3962309 C125.253178,73.2967499 126.366746,75.3605638 127.02005,77.5877345 C127.673353,79.8149053 128,81.9381095 128,83.9574109 C128,86.4518421 127.613963,88.7086746 126.841877,90.727976 C126.069791,92.7472774 125.03046,94.6032252 123.723854,96.2958749 C122.417247,97.9885247 120.932489,99.5475208 119.269534,100.97291 C117.60658,102.398299 115.884261,103.734582 114.102524,104.981797 C112.320788,106.229013 110.539078,107.416819 108.757341,108.545253 C106.975605,109.673686 105.327523,110.802102 103.813047,111.930535 C102.298571,113.058968 100.977136,114.231927 99.8487031,115.449447 C98.7202699,116.666967 97.9481956,117.958707 97.5324571,119.324705 L127.910914,119.324705 L127.910914,128.411516 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/superscript": {
            "title": "$:/core/images/superscript",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-superscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,63.4115159 L85.3276227,63.4115159 C85.3870139,58.2444799 86.6342108,53.7308149 89.0692508,49.8703857 C91.5042907,46.0099565 94.8301491,42.654403 99.0469256,39.8036245 C101.066227,38.318844 103.174584,36.8786285 105.372059,35.4829349 C107.569534,34.0872413 109.588805,32.5876355 111.429933,30.9840726 C113.271061,29.3805097 114.785514,27.6433426 115.973338,25.7725192 C117.161163,23.9016958 117.784761,21.7487964 117.844152,19.3137564 C117.844152,18.1853233 117.710524,16.9826691 117.443264,15.7057579 C117.176003,14.4288467 116.656338,13.2410402 115.884252,12.1423026 C115.112166,11.0435651 114.04314,10.123015 112.677142,9.38062477 C111.311144,8.63823453 109.529434,8.26704499 107.331959,8.26704499 C105.312658,8.26704499 103.634881,8.6679297 102.298579,9.46971115 C100.962276,10.2714926 99.8932503,11.3702137 99.0914688,12.7659073 C98.2896874,14.161601 97.6957841,15.8096826 97.3097412,17.7102016 C96.9236982,19.6107206 96.7009845,21.6596869 96.6415933,23.857162 L86.4857457,23.857162 C86.4857457,20.4124713 86.9460207,17.2202411 87.8665846,14.2803758 C88.7871485,11.3405105 90.1679736,8.80157397 92.0091014,6.6634901 C93.8502292,4.52540622 96.092214,2.84762946 98.7351233,1.63010947 C101.378033,0.412589489 104.451482,-0.196161372 107.955564,-0.196161372 C111.756602,-0.196161372 114.933984,0.427437071 117.487807,1.67465266 C120.041629,2.92186826 122.105443,4.49571195 123.67931,6.39623095 C125.253178,8.29674995 126.366746,10.3605638 127.02005,12.5877345 C127.673353,14.8149053 128,16.9381095 128,18.9574109 C128,21.4518421 127.613963,23.7086746 126.841877,25.727976 C126.069791,27.7472774 125.03046,29.6032252 123.723854,31.2958749 C122.417247,32.9885247 120.932489,34.5475208 119.269534,35.97291 C117.60658,37.3982993 115.884261,38.7345816 114.102524,39.9817972 C112.320788,41.2290128 110.539078,42.4168194 108.757341,43.5452525 C106.975605,44.6736857 105.327523,45.8021019 103.813047,46.9305351 C102.298571,48.0589682 100.977136,49.2319272 99.8487031,50.4494472 C98.7202699,51.6669672 97.9481956,52.9587068 97.5324571,54.3247048 L127.910914,54.3247048 L127.910914,63.4115159 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n        <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.854113,66.9453198 C54.3299482,65.1432292 53.0133883,63.518995 51.9542746,62.1263761 C40.8899947,47.578055 35.3091807,55.2383404 28.9941893,62.1263758 C22.6791979,69.0144112 30.6577916,74.5954741 24.6646171,79.4611023 C18.6714426,84.3267304 19.0414417,86.0133155 8.92654943,77.1119468 C-1.18834284,68.2105781 -1.88793412,65.7597832 2.7553553,60.6807286 C7.39864472,55.601674 11.2794845,63.5989423 20.7646627,54.5728325 C30.2498409,45.5467226 22.2819131,37.5470737 22.2819131,37.5470737 C22.2819131,37.5470737 42.0310399,-2.82433362 68.4206088,0.157393922 C94.8101776,3.13912147 58.4373806,-3.70356506 49.3898693,27.958066 C45.5161782,41.5139906 50.1107906,38.3197672 57.4560458,44.0453955 C59.1625767,45.3756367 63.8839488,48.777453 70.127165,53.3625321 C63.9980513,59.2416709 58.9704753,64.0315459 55.854113,66.9453198 Z M67.4952439,79.8919946 C83.5082212,96.9282402 105.237121,117.617674 112.611591,120.312493 C123.044132,124.12481 128.000001,117.170903 128,105.522947 C127.999999,98.3705516 104.170675,78.980486 84.0760493,63.7529565 C76.6683337,70.9090328 70.7000957,76.7055226 67.4952439,79.8919946 Z\"></path>\n        <path d=\"M58.2852966,138.232794 L58.2852966,88.3943645 C56.318874,88.3923153 54.7254089,86.7952906 54.7254089,84.8344788 C54.7254089,82.8684071 56.3175932,81.2745911 58.2890859,81.2745911 L79.6408336,81.2745911 C81.608998,81.2745911 83.2045105,82.8724076 83.2045105,84.8344788 C83.2045105,86.7992907 81.614366,88.3923238 79.6446228,88.3943645 L79.6446228,88.3943646 L79.6446228,138.232794 C79.6446228,144.131009 74.8631748,148.912457 68.9649597,148.912457 C63.0667446,148.912457 58.2852966,144.131009 58.2852966,138.232794 Z M65.405072,-14.8423767 L72.5248474,-14.8423767 L76.0847351,-0.690681892 L72.5248474,6.51694947 L72.5248474,81.2745911 L65.405072,81.2745911 L65.405072,6.51694947 L61.8451843,-0.690681892 L65.405072,-14.8423767 Z\" transform=\"translate(68.964960, 67.035040) rotate(45.000000) translate(-68.964960, -67.035040) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/timestamp-off": {
            "title": "$:/core/images/timestamp-off",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-timestamp-off tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/>\n    </g>\n</svg>\n"
        },
        "$:/core/images/timestamp-on": {
            "title": "$:/core/images/timestamp-on",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-timestamp-on tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10c-2.762 0-5-2.24-5-5-.004-2.756 2.238-5 5-5H66.69c2.762 0 5.002 2.24 5 5 .006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178c-2.116 1.775-5.27 1.498-7.045-.613-1.772-2.11-1.498-5.27.616-7.047l9.95-8.348c2.115-1.774 5.27-1.5 7.045.618 1.775 2.108 1.498 5.27-.616 7.043l-9.95 8.348zM102.983 27.178c2.116 1.775 5.27 1.498 7.045-.613 1.772-2.11 1.498-5.27-.616-7.047l-9.95-8.348c-2.114-1.774-5.27-1.5-7.044.618-1.775 2.108-1.498 5.27.616 7.043l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/>\n    </g>\n</svg>\n"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tip tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128.241818 C99.346224,128.241818 128,99.5880417 128,64.2418177 C128,28.8955937 99.346224,0.241817675 64,0.241817675 C28.653776,0.241817675 0,28.8955937 0,64.2418177 C0,99.5880417 28.653776,128.241818 64,128.241818 Z M75.9358659,91.4531941 C75.3115438,95.581915 70.2059206,98.8016748 64,98.8016748 C57.7940794,98.8016748 52.6884562,95.581915 52.0641341,91.4531941 C54.3299053,94.0502127 58.8248941,95.8192805 64,95.8192805 C69.1751059,95.8192805 73.6700947,94.0502127 75.9358659,91.4531941 L75.9358659,91.4531941 Z M75.9358659,95.9453413 C75.3115438,100.074062 70.2059206,103.293822 64,103.293822 C57.7940794,103.293822 52.6884562,100.074062 52.0641341,95.9453413 C54.3299053,98.5423599 58.8248941,100.311428 64,100.311428 C69.1751059,100.311428 73.6700947,98.5423599 75.9358659,95.9453413 L75.9358659,95.9453413 Z M75.9358659,100.40119 C75.3115438,104.529911 70.2059206,107.74967 64,107.74967 C57.7940794,107.74967 52.6884562,104.529911 52.0641341,100.40119 C54.3299053,102.998208 58.8248941,104.767276 64,104.767276 C69.1751059,104.767276 73.6700947,102.998208 75.9358659,100.40119 L75.9358659,100.40119 Z M75.9358659,104.893337 C75.3115438,109.022058 70.2059206,112.241818 64,112.241818 C57.7940794,112.241818 52.6884562,109.022058 52.0641341,104.893337 C54.3299053,107.490356 58.8248941,109.259423 64,109.259423 C69.1751059,109.259423 73.6700947,107.490356 75.9358659,104.893337 L75.9358659,104.893337 Z M64.3010456,24.2418177 C75.9193117,24.2418188 88.0000013,32.0619847 88,48.4419659 C87.9999987,64.8219472 75.9193018,71.7540963 75.9193021,83.5755932 C75.9193022,89.4486648 70.0521957,92.8368862 63.9999994,92.8368862 C57.947803,92.8368862 51.9731007,89.8295115 51.9731007,83.5755932 C51.9731007,71.1469799 39.9999998,65.4700602 40,48.4419647 C40.0000002,31.4138691 52.6827796,24.2418166 64.3010456,24.2418177 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/transcludify": {
            "title": "$:/core/images/transcludify",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"><path d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 0 0 2.75-.932 6.762 6.762 0 0 0 2.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 0 0-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 0 0-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 0 0 2.75-.932 6.762 6.762 0 0 0 2.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 0 0-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 0 0-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 0 0-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 0 0 .71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 0 0-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 0 0 2.262 2.084 8.868 8.868 0 0 0 2.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 0 0-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 0 0 .71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 0 0-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 0 0 2.262 2.084 8.868 8.868 0 0 0 2.75 1.02c.946.177 1.745.266 2.395.266v7.806z\" fill-rule=\"evenodd\"/></svg>\n"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-twitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.6263422,115.803477 C27.0279663,115.803477 13.4398394,111.540813 1.99987456,104.234833 C4.02221627,104.472643 6.08004574,104.594302 8.16644978,104.594302 C20.277456,104.594302 31.4238403,100.47763 40.270894,93.5715185 C28.9590538,93.3635501 19.4123842,85.9189246 16.1230832,75.6885328 C17.7011365,75.9892376 19.320669,76.1503787 20.9862896,76.1503787 C23.344152,76.1503787 25.6278127,75.8359011 27.7971751,75.247346 C15.9709927,72.8821073 7.06079851,62.4745062 7.06079851,49.9982394 C7.06079851,49.8898938 7.06079851,49.7820074 7.06264203,49.67458 C10.5482779,51.6032228 14.5339687,52.7615103 18.7717609,52.8951059 C11.8355159,48.277565 7.2714207,40.3958845 7.2714207,31.4624258 C7.2714207,26.7434257 8.54621495,22.3200804 10.7713439,18.5169676 C23.5211299,34.0957738 42.568842,44.3472839 64.0532269,45.4210985 C63.6126256,43.5365285 63.3835682,41.5711584 63.3835682,39.5529928 C63.3835682,25.3326379 74.95811,13.8034766 89.2347917,13.8034766 C96.6697089,13.8034766 103.387958,16.930807 108.103682,21.9353619 C113.991886,20.780288 119.52429,18.6372496 124.518847,15.6866694 C122.588682,21.6993889 118.490075,26.7457211 113.152623,29.9327334 C118.381769,29.3102055 123.363882,27.926045 127.999875,25.8780385 C124.534056,31.0418981 120.151087,35.5772616 115.100763,39.2077561 C115.150538,40.3118708 115.175426,41.4224128 115.175426,42.538923 C115.175426,76.5663154 89.1744164,115.803477 41.6263422,115.803477\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/underline": {
            "title": "$:/core/images/underline",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-underline tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M7,117.421488 L121.247934,117.421488 L121.247934,128 L7,128 L7,117.421488 Z M104.871212,98.8958333 L104.871212,0 L88.6117424,0 L88.6117424,55.8560606 C88.6117424,60.3194668 88.0060035,64.432115 86.7945076,68.1941288 C85.5830116,71.9561425 83.7657949,75.239885 81.342803,78.0454545 C78.9198111,80.8510241 75.8911167,83.0189317 72.2566288,84.5492424 C68.6221409,86.0795531 64.3182067,86.844697 59.344697,86.844697 C53.0959284,86.844697 48.1862552,85.0593613 44.6155303,81.4886364 C41.0448054,77.9179114 39.2594697,73.0720003 39.2594697,66.9507576 L39.2594697,0 L23,0 L23,65.0378788 C23,70.3939662 23.5419769,75.2717583 24.625947,79.6714015 C25.709917,84.0710447 27.5908957,87.864883 30.2689394,91.0530303 C32.9469831,94.2411776 36.4538925,96.6960141 40.7897727,98.4176136 C45.125653,100.139213 50.545422,101 57.0492424,101 C64.3182182,101 70.630655,99.5653553 75.9867424,96.6960227 C81.3428298,93.8266902 85.742407,89.33147 89.1856061,83.2102273 L89.5681818,83.2102273 L89.5681818,98.8958333 L104.871212,98.8958333 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unfold-all-button": {
            "title": "$:/core/images/unfold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,8.34884273 C84.1490432,6.89863875 82.1463102,6 79.9340286,6 L47.9482224,6 C43.5292967,6 39.9411255,9.581722 39.9411255,14 C39.9411255,18.4092877 43.5260249,22 47.9482224,22 L71.9411255,22 L71.9411255,45.9929031 C71.9411255,50.4118288 75.5228475,54 79.9411255,54 C84.3504132,54 87.9411255,50.4151006 87.9411255,45.9929031 L87.9411255,14.0070969 C87.9411255,11.7964515 87.0447363,9.79371715 85.5956548,8.34412458 Z\" transform=\"translate(63.941125, 30.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -30.000000) \"></path>\n        <path d=\"M85.6571005,72.2899682 C84.2079177,70.8397642 82.2051847,69.9411255 79.9929031,69.9411255 L48.0070969,69.9411255 C43.5881712,69.9411255 40,73.5228475 40,77.9411255 C40,82.3504132 43.5848994,85.9411255 48.0070969,85.9411255 L72,85.9411255 L72,109.934029 C72,114.352954 75.581722,117.941125 80,117.941125 C84.4092877,117.941125 88,114.356226 88,109.934029 L88,77.9482224 C88,75.737577 87.1036108,73.7348426 85.6545293,72.2852501 Z\" transform=\"translate(64.000000, 93.941125) scale(1, -1) rotate(-45.000000) translate(-64.000000, -93.941125) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unfold-button": {
            "title": "$:/core/images/unfold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,11.3488427 C84.1490432,9.89863875 82.1463102,9 79.9340286,9 L47.9482224,9 C43.5292967,9 39.9411255,12.581722 39.9411255,17 C39.9411255,21.4092877 43.5260249,25 47.9482224,25 L71.9411255,25 L71.9411255,48.9929031 C71.9411255,53.4118288 75.5228475,57 79.9411255,57 C84.3504132,57 87.9411255,53.4151006 87.9411255,48.9929031 L87.9411255,17.0070969 C87.9411255,14.7964515 87.0447363,12.7937171 85.5956548,11.3441246 Z\" transform=\"translate(63.941125, 33.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -33.000000) \"></path>\n        <path d=\"M85.6571005,53.4077172 C84.2079177,51.9575133 82.2051847,51.0588745 79.9929031,51.0588745 L48.0070969,51.0588745 C43.5881712,51.0588745 40,54.6405965 40,59.0588745 C40,63.4681622 43.5848994,67.0588745 48.0070969,67.0588745 L72,67.0588745 L72,91.0517776 C72,95.4707033 75.581722,99.0588745 80,99.0588745 C84.4092877,99.0588745 88,95.4739751 88,91.0517776 L88,59.0659714 C88,56.855326 87.1036108,54.8525917 85.6545293,53.4029991 Z\" transform=\"translate(64.000000, 75.058875) scale(1, -1) rotate(-45.000000) translate(-64.000000, -75.058875) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/up-arrow": {
            "title": "$:/core/images/up-arrow",
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-up-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n<path transform=\"rotate(-135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25074c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056l0.00001,-0.00001z\" />\n</svg>\n \n"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-warning tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M57.0717968,11 C60.1509982,5.66666667 67.8490018,5.66666667 70.9282032,11 L126.353829,107 C129.433031,112.333333 125.584029,119 119.425626,119 L8.57437416,119 C2.41597129,119 -1.43303051,112.333333 1.64617093,107 L57.0717968,11 Z M64,37 C59.581722,37 56,40.5820489 56,44.9935776 L56,73.0064224 C56,77.4211534 59.5907123,81 64,81 C68.418278,81 72,77.4179511 72,73.0064224 L72,44.9935776 C72,40.5788466 68.4092877,37 64,37 Z M64,104 C68.418278,104 72,100.418278 72,96 C72,91.581722 68.418278,88 64,88 C59.581722,88 56,91.581722 56,96 C56,100.418278 59.581722,104 64,104 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "advanced search"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Advanced search"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "cancel"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Discard changes to this tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "clone"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Clone this tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "close"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Close this tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "close all"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Close all tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "close others"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Close other tiddlers"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "control panel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Open control panel"
        },
        "$:/language/Buttons/CopyToClipboard/Caption": {
            "title": "$:/language/Buttons/CopyToClipboard/Caption",
            "text": "copy to clipboard"
        },
        "$:/language/Buttons/CopyToClipboard/Hint": {
            "title": "$:/language/Buttons/CopyToClipboard/Hint",
            "text": "Copy this text to the clipboard"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Delete this tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "edit"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Edit this tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "encryption"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Set or clear a password for saving this wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "clear password"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Clear the password and save this wiki without encryption"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "set password"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Set a password for saving this wiki with encryption"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "export all"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "export tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Export tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "export tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Export tiddlers"
        },
        "$:/language/Buttons/SidebarSearch/Hint": {
            "title": "$:/language/Buttons/SidebarSearch/Hint",
            "text": "Select the sidebar search field"
        },
        "$:/language/Buttons/Fold/Caption": {
            "title": "$:/language/Buttons/Fold/Caption",
            "text": "fold tiddler"
        },
        "$:/language/Buttons/Fold/Hint": {
            "title": "$:/language/Buttons/Fold/Hint",
            "text": "Fold the body of this tiddler"
        },
        "$:/language/Buttons/Fold/FoldBar/Caption": {
            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
            "text": "fold-bar"
        },
        "$:/language/Buttons/Fold/FoldBar/Hint": {
            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
            "text": "Optional bars to fold and unfold tiddlers"
        },
        "$:/language/Buttons/Unfold/Caption": {
            "title": "$:/language/Buttons/Unfold/Caption",
            "text": "unfold tiddler"
        },
        "$:/language/Buttons/Unfold/Hint": {
            "title": "$:/language/Buttons/Unfold/Hint",
            "text": "Unfold the body of this tiddler"
        },
        "$:/language/Buttons/FoldOthers/Caption": {
            "title": "$:/language/Buttons/FoldOthers/Caption",
            "text": "fold other tiddlers"
        },
        "$:/language/Buttons/FoldOthers/Hint": {
            "title": "$:/language/Buttons/FoldOthers/Hint",
            "text": "Fold the bodies of other opened tiddlers"
        },
        "$:/language/Buttons/FoldAll/Caption": {
            "title": "$:/language/Buttons/FoldAll/Caption",
            "text": "fold all tiddlers"
        },
        "$:/language/Buttons/FoldAll/Hint": {
            "title": "$:/language/Buttons/FoldAll/Hint",
            "text": "Fold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Caption": {
            "title": "$:/language/Buttons/UnfoldAll/Caption",
            "text": "unfold all tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Hint": {
            "title": "$:/language/Buttons/UnfoldAll/Hint",
            "text": "Unfold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "full-screen"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Enter or leave full-screen mode"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "help"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "import"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Show information for this tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "home"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Open the default tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "language"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Choose the user interface language"
        },
        "$:/language/Buttons/Manager/Caption": {
            "title": "$:/language/Buttons/Manager/Caption",
            "text": "tiddler manager"
        },
        "$:/language/Buttons/Manager/Hint": {
            "title": "$:/language/Buttons/Manager/Hint",
            "text": "Open tiddler manager"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "more"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "More actions"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "new here"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Create a new tiddler tagged with this one"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "new journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Create a new journal tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "new journal here"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Create a new journal tiddler tagged with this one"
        },
        "$:/language/Buttons/NewImage/Caption": {
            "title": "$:/language/Buttons/NewImage/Caption",
            "text": "new image"
        },
        "$:/language/Buttons/NewImage/Hint": {
            "title": "$:/language/Buttons/NewImage/Hint",
            "text": "Create a new image tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Caption": {
            "title": "$:/language/Buttons/NewMarkdown/Caption",
            "text": "new Markdown tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Hint": {
            "title": "$:/language/Buttons/NewMarkdown/Hint",
            "text": "Create a new Markdown tiddler"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "new tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Create a new tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "open in new window"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Open tiddler in new window"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palette"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Choose the colour palette"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalink"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Set browser address bar to a direct link to this tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permaview"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
        },
        "$:/language/Buttons/Print/Caption": {
            "title": "$:/language/Buttons/Print/Caption",
            "text": "print page"
        },
        "$:/language/Buttons/Print/Hint": {
            "title": "$:/language/Buttons/Print/Hint",
            "text": "Print the current page"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "refresh"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Perform a full refresh of the wiki"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Confirm changes to this tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "save changes"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Save changes"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "storyview"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Choose the story visualisation"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "hide sidebar"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Hide sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "show sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Show sidebar"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tag manager"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Open tag manager"
        },
        "$:/language/Buttons/Timestamp/Caption": {
            "title": "$:/language/Buttons/Timestamp/Caption",
            "text": "timestamps"
        },
        "$:/language/Buttons/Timestamp/Hint": {
            "title": "$:/language/Buttons/Timestamp/Hint",
            "text": "Choose whether modifications update timestamps"
        },
        "$:/language/Buttons/Timestamp/On/Caption": {
            "title": "$:/language/Buttons/Timestamp/On/Caption",
            "text": "timestamps are on"
        },
        "$:/language/Buttons/Timestamp/On/Hint": {
            "title": "$:/language/Buttons/Timestamp/On/Hint",
            "text": "Update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Timestamp/Off/Caption": {
            "title": "$:/language/Buttons/Timestamp/Off/Caption",
            "text": "timestamps are off"
        },
        "$:/language/Buttons/Timestamp/Off/Hint": {
            "title": "$:/language/Buttons/Timestamp/Off/Hint",
            "text": "Don't update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/language/Buttons/Bold/Caption": {
            "title": "$:/language/Buttons/Bold/Caption",
            "text": "bold"
        },
        "$:/language/Buttons/Bold/Hint": {
            "title": "$:/language/Buttons/Bold/Hint",
            "text": "Apply bold formatting to selection"
        },
        "$:/language/Buttons/Clear/Caption": {
            "title": "$:/language/Buttons/Clear/Caption",
            "text": "clear"
        },
        "$:/language/Buttons/Clear/Hint": {
            "title": "$:/language/Buttons/Clear/Hint",
            "text": "Clear image to solid colour"
        },
        "$:/language/Buttons/EditorHeight/Caption": {
            "title": "$:/language/Buttons/EditorHeight/Caption",
            "text": "editor height"
        },
        "$:/language/Buttons/EditorHeight/Caption/Auto": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Auto",
            "text": "Automatically adjust height to fit content"
        },
        "$:/language/Buttons/EditorHeight/Caption/Fixed": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
            "text": "Fixed height:"
        },
        "$:/language/Buttons/EditorHeight/Hint": {
            "title": "$:/language/Buttons/EditorHeight/Hint",
            "text": "Choose the height of the text editor"
        },
        "$:/language/Buttons/Excise/Caption": {
            "title": "$:/language/Buttons/Excise/Caption",
            "text": "excise"
        },
        "$:/language/Buttons/Excise/Caption/Excise": {
            "title": "$:/language/Buttons/Excise/Caption/Excise",
            "text": "Perform excision"
        },
        "$:/language/Buttons/Excise/Caption/MacroName": {
            "title": "$:/language/Buttons/Excise/Caption/MacroName",
            "text": "Macro name:"
        },
        "$:/language/Buttons/Excise/Caption/NewTitle": {
            "title": "$:/language/Buttons/Excise/Caption/NewTitle",
            "text": "Title of new tiddler:"
        },
        "$:/language/Buttons/Excise/Caption/Replace": {
            "title": "$:/language/Buttons/Excise/Caption/Replace",
            "text": "Replace excised text with:"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Macro": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
            "text": "macro"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Link": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Link",
            "text": "link"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
            "text": "transclusion"
        },
        "$:/language/Buttons/Excise/Caption/Tag": {
            "title": "$:/language/Buttons/Excise/Caption/Tag",
            "text": "Tag new tiddler with the title of this tiddler"
        },
        "$:/language/Buttons/Excise/Caption/TiddlerExists": {
            "title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
            "text": "Warning: tiddler already exists"
        },
        "$:/language/Buttons/Excise/Hint": {
            "title": "$:/language/Buttons/Excise/Hint",
            "text": "Excise the selected text into a new tiddler"
        },
        "$:/language/Buttons/Heading1/Caption": {
            "title": "$:/language/Buttons/Heading1/Caption",
            "text": "heading 1"
        },
        "$:/language/Buttons/Heading1/Hint": {
            "title": "$:/language/Buttons/Heading1/Hint",
            "text": "Apply heading level 1 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading2/Caption": {
            "title": "$:/language/Buttons/Heading2/Caption",
            "text": "heading 2"
        },
        "$:/language/Buttons/Heading2/Hint": {
            "title": "$:/language/Buttons/Heading2/Hint",
            "text": "Apply heading level 2 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading3/Caption": {
            "title": "$:/language/Buttons/Heading3/Caption",
            "text": "heading 3"
        },
        "$:/language/Buttons/Heading3/Hint": {
            "title": "$:/language/Buttons/Heading3/Hint",
            "text": "Apply heading level 3 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading4/Caption": {
            "title": "$:/language/Buttons/Heading4/Caption",
            "text": "heading 4"
        },
        "$:/language/Buttons/Heading4/Hint": {
            "title": "$:/language/Buttons/Heading4/Hint",
            "text": "Apply heading level 4 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading5/Caption": {
            "title": "$:/language/Buttons/Heading5/Caption",
            "text": "heading 5"
        },
        "$:/language/Buttons/Heading5/Hint": {
            "title": "$:/language/Buttons/Heading5/Hint",
            "text": "Apply heading level 5 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading6/Caption": {
            "title": "$:/language/Buttons/Heading6/Caption",
            "text": "heading 6"
        },
        "$:/language/Buttons/Heading6/Hint": {
            "title": "$:/language/Buttons/Heading6/Hint",
            "text": "Apply heading level 6 formatting to lines containing selection"
        },
        "$:/language/Buttons/Italic/Caption": {
            "title": "$:/language/Buttons/Italic/Caption",
            "text": "italic"
        },
        "$:/language/Buttons/Italic/Hint": {
            "title": "$:/language/Buttons/Italic/Hint",
            "text": "Apply italic formatting to selection"
        },
        "$:/language/Buttons/LineWidth/Caption": {
            "title": "$:/language/Buttons/LineWidth/Caption",
            "text": "line width"
        },
        "$:/language/Buttons/LineWidth/Hint": {
            "title": "$:/language/Buttons/LineWidth/Hint",
            "text": "Set line width for painting"
        },
        "$:/language/Buttons/Link/Caption": {
            "title": "$:/language/Buttons/Link/Caption",
            "text": "link"
        },
        "$:/language/Buttons/Link/Hint": {
            "title": "$:/language/Buttons/Link/Hint",
            "text": "Create wikitext link"
        },
        "$:/language/Buttons/Linkify/Caption": {
            "title": "$:/language/Buttons/Linkify/Caption",
            "text": "wikilink"
        },
        "$:/language/Buttons/Linkify/Hint": {
            "title": "$:/language/Buttons/Linkify/Hint",
            "text": "Wrap selection in square brackets"
        },
        "$:/language/Buttons/ListBullet/Caption": {
            "title": "$:/language/Buttons/ListBullet/Caption",
            "text": "bulleted list"
        },
        "$:/language/Buttons/ListBullet/Hint": {
            "title": "$:/language/Buttons/ListBullet/Hint",
            "text": "Apply bulleted list formatting to lines containing selection"
        },
        "$:/language/Buttons/ListNumber/Caption": {
            "title": "$:/language/Buttons/ListNumber/Caption",
            "text": "numbered list"
        },
        "$:/language/Buttons/ListNumber/Hint": {
            "title": "$:/language/Buttons/ListNumber/Hint",
            "text": "Apply numbered list formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoBlock/Caption": {
            "title": "$:/language/Buttons/MonoBlock/Caption",
            "text": "monospaced block"
        },
        "$:/language/Buttons/MonoBlock/Hint": {
            "title": "$:/language/Buttons/MonoBlock/Hint",
            "text": "Apply monospaced block formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoLine/Caption": {
            "title": "$:/language/Buttons/MonoLine/Caption",
            "text": "monospaced"
        },
        "$:/language/Buttons/MonoLine/Hint": {
            "title": "$:/language/Buttons/MonoLine/Hint",
            "text": "Apply monospaced character formatting to selection"
        },
        "$:/language/Buttons/Opacity/Caption": {
            "title": "$:/language/Buttons/Opacity/Caption",
            "text": "opacity"
        },
        "$:/language/Buttons/Opacity/Hint": {
            "title": "$:/language/Buttons/Opacity/Hint",
            "text": "Set painting opacity"
        },
        "$:/language/Buttons/Paint/Caption": {
            "title": "$:/language/Buttons/Paint/Caption",
            "text": "paint colour"
        },
        "$:/language/Buttons/Paint/Hint": {
            "title": "$:/language/Buttons/Paint/Hint",
            "text": "Set painting colour"
        },
        "$:/language/Buttons/Picture/Caption": {
            "title": "$:/language/Buttons/Picture/Caption",
            "text": "picture"
        },
        "$:/language/Buttons/Picture/Hint": {
            "title": "$:/language/Buttons/Picture/Hint",
            "text": "Insert picture"
        },
        "$:/language/Buttons/Preview/Caption": {
            "title": "$:/language/Buttons/Preview/Caption",
            "text": "preview"
        },
        "$:/language/Buttons/Preview/Hint": {
            "title": "$:/language/Buttons/Preview/Hint",
            "text": "Show preview pane"
        },
        "$:/language/Buttons/PreviewType/Caption": {
            "title": "$:/language/Buttons/PreviewType/Caption",
            "text": "preview type"
        },
        "$:/language/Buttons/PreviewType/Hint": {
            "title": "$:/language/Buttons/PreviewType/Hint",
            "text": "Choose preview type"
        },
        "$:/language/Buttons/Quote/Caption": {
            "title": "$:/language/Buttons/Quote/Caption",
            "text": "quote"
        },
        "$:/language/Buttons/Quote/Hint": {
            "title": "$:/language/Buttons/Quote/Hint",
            "text": "Apply quoted text formatting to lines containing selection"
        },
        "$:/language/Buttons/RotateLeft/Caption": {
            "title": "$:/language/Buttons/RotateLeft/Caption",
            "text": "rotate left"
        },
        "$:/language/Buttons/RotateLeft/Hint": {
            "title": "$:/language/Buttons/RotateLeft/Hint",
            "text": "Rotate image left by 90 degrees"
        },
        "$:/language/Buttons/Size/Caption": {
            "title": "$:/language/Buttons/Size/Caption",
            "text": "image size"
        },
        "$:/language/Buttons/Size/Caption/Height": {
            "title": "$:/language/Buttons/Size/Caption/Height",
            "text": "Height:"
        },
        "$:/language/Buttons/Size/Caption/Resize": {
            "title": "$:/language/Buttons/Size/Caption/Resize",
            "text": "Resize image"
        },
        "$:/language/Buttons/Size/Caption/Width": {
            "title": "$:/language/Buttons/Size/Caption/Width",
            "text": "Width:"
        },
        "$:/language/Buttons/Size/Hint": {
            "title": "$:/language/Buttons/Size/Hint",
            "text": "Set image size"
        },
        "$:/language/Buttons/Stamp/Caption": {
            "title": "$:/language/Buttons/Stamp/Caption",
            "text": "stamp"
        },
        "$:/language/Buttons/Stamp/Caption/New": {
            "title": "$:/language/Buttons/Stamp/Caption/New",
            "text": "Add your own"
        },
        "$:/language/Buttons/Stamp/Hint": {
            "title": "$:/language/Buttons/Stamp/Hint",
            "text": "Insert a preconfigured snippet of text"
        },
        "$:/language/Buttons/Stamp/New/Title": {
            "title": "$:/language/Buttons/Stamp/New/Title",
            "text": "Name as shown in menu"
        },
        "$:/language/Buttons/Stamp/New/Text": {
            "title": "$:/language/Buttons/Stamp/New/Text",
            "text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
        },
        "$:/language/Buttons/Strikethrough/Caption": {
            "title": "$:/language/Buttons/Strikethrough/Caption",
            "text": "strikethrough"
        },
        "$:/language/Buttons/Strikethrough/Hint": {
            "title": "$:/language/Buttons/Strikethrough/Hint",
            "text": "Apply strikethrough formatting to selection"
        },
        "$:/language/Buttons/Subscript/Caption": {
            "title": "$:/language/Buttons/Subscript/Caption",
            "text": "subscript"
        },
        "$:/language/Buttons/Subscript/Hint": {
            "title": "$:/language/Buttons/Subscript/Hint",
            "text": "Apply subscript formatting to selection"
        },
        "$:/language/Buttons/Superscript/Caption": {
            "title": "$:/language/Buttons/Superscript/Caption",
            "text": "superscript"
        },
        "$:/language/Buttons/Superscript/Hint": {
            "title": "$:/language/Buttons/Superscript/Hint",
            "text": "Apply superscript formatting to selection"
        },
        "$:/language/Buttons/ToggleSidebar/Hint": {
            "title": "$:/language/Buttons/ToggleSidebar/Hint",
            "text": "Toggle the sidebar visibility"
        },
        "$:/language/Buttons/Transcludify/Caption": {
            "title": "$:/language/Buttons/Transcludify/Caption",
            "text": "transclusion"
        },
        "$:/language/Buttons/Transcludify/Hint": {
            "title": "$:/language/Buttons/Transcludify/Hint",
            "text": "Wrap selection in curly brackets"
        },
        "$:/language/Buttons/Underline/Caption": {
            "title": "$:/language/Buttons/Underline/Caption",
            "text": "underline"
        },
        "$:/language/Buttons/Underline/Hint": {
            "title": "$:/language/Buttons/Underline/Hint",
            "text": "Apply underline formatting to selection"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Internal information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Appearance"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Ways to customise the appearance of your TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Animation duration:"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Default tiddlers:"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Choose which tiddlers are displayed at startup:"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hello! Current language:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Title of new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
            "text": "Text for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
            "text": "Title of new tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Number of shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Subtitle:"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Number of system tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Number of tags:"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Number of tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Title of this ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Username for signing edits:"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version:"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Editor Types"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Editor"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Type"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
            "text": "Type shortcut here"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
            "text": "add shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
            "text": "Keyboard Shortcuts"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
            "text": "Manage keyboard shortcut assignments"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
            "text": "No keyboard shortcuts assigned"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
            "text": "remove keyboard shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
            "text": "All platforms"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
            "text": "Macintosh platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
            "text": "Non-Macintosh platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
            "text": "Linux platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
            "text": "Non-Linux platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
            "text": "Windows platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
            "text": "Non-Windows platforms only"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Loaded Modules"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "clone"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "It is recommended that you clone this shadow palette before editing it"
        },
        "$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
            "title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
            "text": "delete this entry from the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
            "title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
            "text": "Show color names that are not part of the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "This shadow palette has been modified"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Editing"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "reset"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "hide editor"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palette:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "show editor"
        },
        "$:/language/ControlPanel/Parsing/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Caption",
            "text": "Parsing"
        },
        "$:/language/ControlPanel/Parsing/Hint": {
            "title": "$:/language/ControlPanel/Parsing/Hint",
            "text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
        },
        "$:/language/ControlPanel/Parsing/Block/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
            "text": "Block Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Inline/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
            "text": "Inline Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
            "text": "Pragma Parse Rules"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
            "text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "disable"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Disable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(disabled)"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "None"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "enable"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Enable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Install/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Install/Caption",
            "text": "install"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Currently installed plugins:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Languages"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Language pack plugins"
        },
        "$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
            "text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
        },
        "$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
            "text": "This plugin is not currently installed"
        },
        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
            "text": "open plugin library"
        },
        "$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
            "text": "close plugin library"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Reinstall/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
            "text": "reinstall"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Themes"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Theme plugins"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
            "text": "Permit automatic saving for the download saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
            "text": "Enable Autosave for Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
            "text": "Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
            "text": "These settings apply to the HTML5-compatible download saver"
        },
        "$:/language/ControlPanel/Saving/General/Caption": {
            "title": "$:/language/ControlPanel/Saving/General/Caption",
            "text": "General"
        },
        "$:/language/ControlPanel/Saving/General/Hint": {
            "title": "$:/language/ControlPanel/Saving/General/Hint",
            "text": "These settings apply to all the loaded savers"
        },
        "$:/language/ControlPanel/Saving/Hint": {
            "title": "$:/language/ControlPanel/Saving/Hint",
            "text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
        },
        "$:/language/ControlPanel/Saving/GitService/Branch": {
            "title": "$:/language/ControlPanel/Saving/GitService/Branch",
            "text": "Target branch for saving"
        },
        "$:/language/ControlPanel/Saving/GitService/CommitMessage": {
            "title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
            "text": "Saved by TiddlyWiki"
        },
        "$:/language/ControlPanel/Saving/GitService/Description": {
            "title": "$:/language/ControlPanel/Saving/GitService/Description",
            "text": "These settings are only used when saving to <<service-name>>"
        },
        "$:/language/ControlPanel/Saving/GitService/Filename": {
            "title": "$:/language/ControlPanel/Saving/GitService/Filename",
            "text": "Filename of target file (e.g. `index.html`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Path": {
            "title": "$:/language/ControlPanel/Saving/GitService/Path",
            "text": "Path to target file (e.g. `/wiki/`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Repo": {
            "title": "$:/language/ControlPanel/Saving/GitService/Repo",
            "text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
        },
        "$:/language/ControlPanel/Saving/GitService/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
            "text": "Server API URL"
        },
        "$:/language/ControlPanel/Saving/GitService/UserName": {
            "title": "$:/language/ControlPanel/Saving/GitService/UserName",
            "text": "Username"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
            "text": "~GitHub Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
            "text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
            "text": "~GitLab Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
            "text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Advanced Settings"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backup Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
            "text": "~TiddlySpot Saver"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Upload Filename"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Password"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Upload Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wiki Name"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autosave"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Do not save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Attempt to automatically save changes during editing when using a supporting saver"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
            "text": "Camel Case Wiki Links"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Description": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
            "text": "Enable automatic ~CamelCase linking"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
            "text": "Enable or disable the editor toolbar:"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Description": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
            "text": "Show editor toolbar"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
            "text": "Tiddler Info Panel Mode"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
            "text": "Control when the tiddler info panel closes:"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
            "text": "Tiddler info panel closes automatically"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
            "text": "Tiddler info panel stays open until explicitly closed"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "These settings let you customise the behaviour of TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigation Address Bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Do not update the address bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Include the target tiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Include the target tiddler and the current story sequence"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigation History"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Update browser history when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Do not update history"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Update history"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
            "text": "Permalink/permaview Mode"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
            "text": "Choose how permalink/permaview is handled:"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
            "text": "Copy permalink/permaview URL to clipboard"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
            "text": "Update address bar with permalink/permaview URL"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
            "text": "Performance Instrumentation"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
            "text": "Enable performance instrumentation"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Toolbar Button Style"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Choose the style for toolbar buttons:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Borderless"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Boxed"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Rounded"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Toolbar Buttons"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Default toolbar button appearance:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Include icon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Include text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Default Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Specify which sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
            "text": "Default More Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
            "text": "Specify which More sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddler Opening Behaviour"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigation from //within// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigation from //outside// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Open above the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Open below the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Open at the top of the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Open at the bottom of the story river"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddler Titles"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Optionally display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Do not display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
            "text": "Wiki Links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
            "text": "Choose whether to link to tiddlers that do not exist yet"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Description": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
            "text": "Enable links to missing tiddlers"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/language/ControlPanel/Stylesheets/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Caption",
            "text": "Stylesheets"
        },
        "$:/language/ControlPanel/Stylesheets/Expand/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
            "text": "Expand All"
        },
        "$:/language/ControlPanel/Stylesheets/Hint": {
            "title": "$:/language/ControlPanel/Stylesheets/Hint",
            "text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
        },
        "$:/language/ControlPanel/Stylesheets/Restore/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
            "text": "Restore"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Theme"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Current theme:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddler Fields"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Toolbars"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Edit Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Select which toolbar buttons are displayed"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Page Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
            "text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "View Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Download full wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "st"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Sunday"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Monday"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tuesday"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Wednesday"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Thursday"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Friday"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Saturday"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "January"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "February"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "March"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "May"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "June"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "July"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "August"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "October"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sun"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mon"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tue"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Wed"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Thu"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fri"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Sat"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "May"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Oct"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> days from now"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> hours from now"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minutes from now"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> months from now"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 second from now"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> seconds from now"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> years from now"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> days ago"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> hours ago"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minutes ago"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> months ago"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 second ago"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> years ago"
        },
        "$:/language/Docs/ModuleTypes/allfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/allfilteroperator",
            "text": "A sub-operator for the ''all'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/authenticator": {
            "title": "$:/language/Docs/ModuleTypes/authenticator",
            "text": "Defines how requests are authenticated by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
            "text": "A bitmap editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Commands that can be executed under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data to be inserted into `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individual filter operator methods."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data to be inserted into `$tw`."
        },
        "$:/language/Docs/ModuleTypes/info": {
            "title": "$:/language/Docs/ModuleTypes/info",
            "text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/library": {
            "title": "$:/language/Docs/ModuleTypes/library",
            "text": "Generic module type for general purpose JavaScript modules."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript macro definitions."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parsers for different content types."
        },
        "$:/language/Docs/ModuleTypes/route": {
            "title": "$:/language/Docs/ModuleTypes/route",
            "text": "Defines how individual URL patterns are handled by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers handle different methods for saving files from the browser."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Startup functions."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Story views customise the animation and behaviour of list widgets."
        },
        "$:/language/Docs/ModuleTypes/texteditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/texteditoroperation",
            "text": "A text editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Defines the behaviour of an individual tiddler field."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Adds methods to the `$tw.Tiddler` prototype."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Adds methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Adds Node.js-specific methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets encapsulate DOM rendering and refreshing."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Adds methods to `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individual parser rules for the main WikiText parser."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Alert background"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Alert border"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Alert highlight"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Alert muted foreground"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "General background"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockquote bar"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Default button background"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Default button border"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Default button foreground"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Unsaved changes indicator"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Code background"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Code border"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Code foreground"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Download button background"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Download button foreground"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Dropdown background"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Dropdown border"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Dropdown tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Dropdown tab background"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "External link background hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "External link background visited"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "External link background"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "External link foreground hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "External link foreground visited"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "External link foreground"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "General foreground"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Message box background"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Message box border"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Message box foreground"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal backdrop"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal background"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal border"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal footer background"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal footer border"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal header border"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "General muted foreground"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notification background"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notification border"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Page background"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Preformatted code background"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Preformatted code border"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "General primary"
        },
        "$:/language/Docs/PaletteColours/select-tag-background": {
            "title": "$:/language/Docs/PaletteColours/select-tag-background",
            "text": "`<select>` element background"
        },
        "$:/language/Docs/PaletteColours/select-tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/select-tag-foreground",
            "text": "`<select>` element text"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidebar button foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidebar controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidebar controls foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidebar foreground shadow"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidebar foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidebar muted foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidebar muted foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidebar tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidebar tab background"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidebar tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidebar tab border"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidebar tab divider"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidebar tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidebar tab foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Sidebar tiddler link foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Sidebar tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Site title foreground"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Static alert foreground"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Tab background"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Tab border"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Tab divider"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Tab foreground"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Table border"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Table footer background"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Table header background"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Tag background"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Tag foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler background"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler border"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Tiddler controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Tiddler controls foreground for selected controls"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Tiddler controls foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Tiddler editor background"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Tiddler editor border image"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Tiddler editor border"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Tiddler editor background for even fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Tiddler editor background for odd fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler info panel background"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler info panel border"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler info panel tab background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler link background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler subtitle foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler title foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Toolbar 'new tiddler' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Toolbar 'options' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Toolbar 'save' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Toolbar 'info' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Toolbar 'edit' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Toolbar 'close' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Toolbar 'delete' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Toolbar 'cancel' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Toolbar 'done' button foreground"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Untagged pill background"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Very muted foreground"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Type/Output": {
            "title": "$:/language/EditTemplate/Body/Preview/Type/Output",
            "text": "output"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "remove field"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Remove field"
        },
        "$:/language/EditTemplate/Field/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Caption",
            "text": "field list"
        },
        "$:/language/EditTemplate/Field/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Hint",
            "text": "Show field list"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "field name"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Add a new field:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "field value"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "System fields"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "User fields"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tag list"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Show tag list"
        },
        "$:/language/EditTemplate/Title/BadCharacterWarning": {
            "title": "$:/language/EditTemplate/Title/BadCharacterWarning",
            "text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
        },
        "$:/language/EditTemplate/Title/Exists/Prompt": {
            "title": "$:/language/EditTemplate/Title/Exists/Prompt",
            "text": "Target tiddler already exists"
        },
        "$:/language/EditTemplate/Title/Relink/Prompt": {
            "title": "$:/language/EditTemplate/Title/Relink/Prompt",
            "text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
        },
        "$:/language/EditTemplate/Title/References/Prompt": {
            "title": "$:/language/EditTemplate/Title/References/Prompt",
            "text": "The following references to this tiddler will not be automatically updated:"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "content type list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Show content type list"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "delete content type"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Delete content type"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "content type"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "The full URI of an external image tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "The name of the bag from which a tiddler came"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "The text to be displayed on a tab or button"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "The CSS color value associated with a tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "The date a tiddler was created"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "The name of the person who created a tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "For a plugin, lists the dependent plugin titles"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "The descriptive text for a plugin, or a modal dialogue"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "The footer text for a wizard"
        },
        "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
            "text": "A temporary storage field used in [[$:/core/templates/static.content]]"
        },
        "$:/language/Docs/Fields/hide-body": {
            "title": "$:/language/Docs/Fields/hide-body",
            "text": "The view template will hide bodies of tiddlers if set to: ''yes''"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "The title of the tiddler containing the icon associated with a tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "An ordered list of tiddler titles associated with a tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "The date and time at which a tiddler was last modified"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "The tiddler title associated with the person who last modified a tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "The human readable name associated with a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "A numerical value indicating the priority of a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "The type of plugin in a plugin tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "The revision of the tiddler held at the server"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Date of a TiddlyWiki release"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "The source URL associated with a tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "The subtitle text for a wizard"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "A list of tags associated with a tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "The body text of a tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/language/Docs/Fields/toc-link": {
            "title": "$:/language/Docs/Fields/toc-link",
            "text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "The content type of a tiddler"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Version information for a plugin"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "All tiddlers except system tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Recently modified tiddlers, including system tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Recently modified tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "All tags except system tags"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Missing tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Draft tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Shadow tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Overridden shadow tiddlers"
        },
        "$:/language/Filters/SessionTiddlers": {
            "title": "$:/language/Filters/SessionTiddlers",
            "text": "Tiddlers modified since the wiki was loaded"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/language/Filters/StoryList": {
            "title": "$:/language/Filters/StoryList",
            "text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Non wiki-text tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Automatically run configured commands",
            "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Clear a password for subsequent crypto operations",
            "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
        },
        "$:/language/Help/deletetiddlers": {
            "title": "$:/language/Help/deletetiddlers",
            "description": "Deletes a group of tiddlers",
            "text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Lists the available editions of TiddlyWiki",
            "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
        },
        "$:/language/Help/fetch": {
            "title": "$:/language/Help/fetch",
            "description": "Fetch tiddlers from wiki by URL",
            "text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Display help for TiddlyWiki commands",
            "text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
        },
        "$:/language/Help/import": {
            "title": "$:/language/Help/import",
            "description": "Import tiddlers from a file",
            "text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
        },
        "$:/language/Help/listen": {
            "title": "$:/language/Help/listen",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Construct library plugin required by upgrade process",
            "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "No such help item"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Set the base output directory for subsequent commands",
            "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Set a password for subsequent crypto operations",
            "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
        },
        "$:/language/Help/render": {
            "title": "$:/language/Help/render",
            "description": "Renders individual tiddlers to files",
            "text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/save": {
            "title": "$:/language/Help/save",
            "description": "Saves individual raw tiddlers to files",
            "text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Saves a group of raw tiddlers to a directory",
            "text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/savewikifolder": {
            "title": "$:/language/Help/savewikifolder",
            "description": "Saves a wiki to a new wiki folder",
            "text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
            "text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Prepares external tiddlers for use",
            "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Unpack the payload tiddlers from a plugin",
            "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Triggers verbose output mode",
            "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Displays the version number of TiddlyWiki",
            "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
        },
        "$:/language/Import/Imported/Hint": {
            "title": "$:/language/Import/Imported/Hint",
            "text": "The following tiddlers were imported:"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "These tiddlers are ready to import:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Import"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Select"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Title"
        },
        "$:/language/Import/Listing/Preview": {
            "title": "$:/language/Import/Listing/Preview",
            "text": "Preview:"
        },
        "$:/language/Import/Listing/Preview/Text": {
            "title": "$:/language/Import/Listing/Preview/Text",
            "text": "Text"
        },
        "$:/language/Import/Listing/Preview/TextRaw": {
            "title": "$:/language/Import/Listing/Preview/TextRaw",
            "text": "Text (Raw)"
        },
        "$:/language/Import/Listing/Preview/Fields": {
            "title": "$:/language/Import/Listing/Preview/Fields",
            "text": "Fields"
        },
        "$:/language/Import/Listing/Preview/Diff": {
            "title": "$:/language/Import/Listing/Preview/Diff",
            "text": "Diff"
        },
        "$:/language/Import/Listing/Preview/DiffFields": {
            "title": "$:/language/Import/Listing/Preview/DiffFields",
            "text": "Diff (Fields)"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blocked incompatible or obsolete plugin"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blocked temporary state tiddler"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blocked system tiddler"
        },
        "$:/language/Import/Upgrader/System/Warning": {
            "title": "$:/language/Import/Upgrader/System/Warning",
            "text": "Core module tiddler"
        },
        "$:/language/Import/Upgrader/System/Alert": {
            "title": "$:/language/Import/Upgrader/System/Alert",
            "text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>"
        },
        "$:/language/AboveStory/ClassicPlugin/Warning": {
            "title": "$:/language/AboveStory/ClassicPlugin/Warning",
            "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "This tiddler contains binary data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "upgrade"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "close all"
        },
        "$:/language/ColourPicker/Recent": {
            "title": "$:/language/ColourPicker/Recent",
            "text": "Recent:"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/Count": {
            "title": "$:/language/Count",
            "text": "count"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/language/Diffs/CountMessage": {
            "title": "$:/language/Diffs/CountMessage",
            "text": "<<diff-count>> differences"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Cancel"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Set a new password for this TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Username"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Password"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Repeat password"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Passwords do not match"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Set password"
        },
        "$:/language/Error/Caption": {
            "title": "$:/language/Error/Caption",
            "text": "Error"
        },
        "$:/language/Error/EditConflict": {
            "title": "$:/language/Error/EditConflict",
            "text": "File changed on server"
        },
        "$:/language/Error/Filter": {
            "title": "$:/language/Error/Filter",
            "text": "Filter error"
        },
        "$:/language/Error/FilterSyntax": {
            "title": "$:/language/Error/FilterSyntax",
            "text": "Syntax error in filter expression"
        },
        "$:/language/Error/IsFilterOperator": {
            "title": "$:/language/Error/IsFilterOperator",
            "text": "Filter Error: Unknown operand for the 'is' filter operator"
        },
        "$:/language/Error/LoadingPluginLibrary": {
            "title": "$:/language/Error/LoadingPluginLibrary",
            "text": "Error loading plugin library"
        },
        "$:/language/Error/RecursiveTransclusion": {
            "title": "$:/language/Error/RecursiveTransclusion",
            "text": "Recursive transclusion error in transclude widget"
        },
        "$:/language/Error/RetrievingSkinny": {
            "title": "$:/language/Error/RetrievingSkinny",
            "text": "Error retrieving skinny tiddler list"
        },
        "$:/language/Error/SavingToTWEdit": {
            "title": "$:/language/Error/SavingToTWEdit",
            "text": "Error saving to TWEdit"
        },
        "$:/language/Error/WhileSaving": {
            "title": "$:/language/Error/WhileSaving",
            "text": "Error while saving"
        },
        "$:/language/Error/XMLHttpRequest": {
            "title": "$:/language/Error/XMLHttpRequest",
            "text": "XMLHttpRequest error code"
        },
        "$:/language/InternalJavaScriptError/Title": {
            "title": "$:/language/InternalJavaScriptError/Title",
            "text": "Internal JavaScript Error"
        },
        "$:/language/InternalJavaScriptError/Hint": {
            "title": "$:/language/InternalJavaScriptError/Hint",
            "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
        },
        "$:/language/LazyLoadingWarning": {
            "title": "$:/language/LazyLoadingWarning",
            "text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
        },
        "$:/language/LoginToTiddlySpace": {
            "title": "$:/language/LoginToTiddlySpace",
            "text": "Login to TiddlySpace"
        },
        "$:/language/Manager/Controls/FilterByTag/None": {
            "title": "$:/language/Manager/Controls/FilterByTag/None",
            "text": "(none)"
        },
        "$:/language/Manager/Controls/FilterByTag/Prompt": {
            "title": "$:/language/Manager/Controls/FilterByTag/Prompt",
            "text": "Filter by tag:"
        },
        "$:/language/Manager/Controls/Order/Prompt": {
            "title": "$:/language/Manager/Controls/Order/Prompt",
            "text": "Reverse order"
        },
        "$:/language/Manager/Controls/Search/Placeholder": {
            "title": "$:/language/Manager/Controls/Search/Placeholder",
            "text": "Search"
        },
        "$:/language/Manager/Controls/Search/Prompt": {
            "title": "$:/language/Manager/Controls/Search/Prompt",
            "text": "Search:"
        },
        "$:/language/Manager/Controls/Show/Option/Tags": {
            "title": "$:/language/Manager/Controls/Show/Option/Tags",
            "text": "tags"
        },
        "$:/language/Manager/Controls/Show/Option/Tiddlers": {
            "title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
            "text": "tiddlers"
        },
        "$:/language/Manager/Controls/Show/Prompt": {
            "title": "$:/language/Manager/Controls/Show/Prompt",
            "text": "Show:"
        },
        "$:/language/Manager/Controls/Sort/Prompt": {
            "title": "$:/language/Manager/Controls/Sort/Prompt",
            "text": "Sort by:"
        },
        "$:/language/Manager/Item/Colour": {
            "title": "$:/language/Manager/Item/Colour",
            "text": "Colour"
        },
        "$:/language/Manager/Item/Fields": {
            "title": "$:/language/Manager/Item/Fields",
            "text": "Fields"
        },
        "$:/language/Manager/Item/Icon/None": {
            "title": "$:/language/Manager/Item/Icon/None",
            "text": "(none)"
        },
        "$:/language/Manager/Item/Icon": {
            "title": "$:/language/Manager/Item/Icon",
            "text": "Icon"
        },
        "$:/language/Manager/Item/RawText": {
            "title": "$:/language/Manager/Item/RawText",
            "text": "Raw text"
        },
        "$:/language/Manager/Item/Tags": {
            "title": "$:/language/Manager/Item/Tags",
            "text": "Tags"
        },
        "$:/language/Manager/Item/Tools": {
            "title": "$:/language/Manager/Item/Tools",
            "text": "Tools"
        },
        "$:/language/Manager/Item/WikifiedText": {
            "title": "$:/language/Manager/Item/WikifiedText",
            "text": "Wikified text"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
        },
        "$:/language/No": {
            "title": "$:/language/No",
            "text": "No"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/OfficialPluginLibrary/Hint": {
            "title": "$:/language/OfficialPluginLibrary/Hint",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/language/SystemTiddlers/Include/Prompt": {
            "title": "$:/language/SystemTiddlers/Include/Prompt",
            "text": "Include system tiddlers"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Colour"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Count"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Icon"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/Tiddler/DateFormat": {
            "title": "$:/language/Tiddler/DateFormat",
            "text": "DDth MMM YYYY at hh12:0mmam"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Yes": {
            "title": "$:/language/Yes",
            "text": "Yes"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/SavingChanges.html",
            "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DDth MMM YYYY"
        },
        "$:/config/NewJournal/Text": {
            "title": "$:/config/NewJournal/Text",
            "text": ""
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Saved wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Starting to save wiki"
        },
        "$:/language/Notifications/CopiedToClipboard/Succeeded": {
            "title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
            "text": "Copied to clipboard!"
        },
        "$:/language/Notifications/CopiedToClipboard/Failed": {
            "title": "$:/language/Notifications/CopiedToClipboard/Failed",
            "text": "Failed to copy to clipboard!"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "List"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches/All": {
            "title": "$:/language/Search/Matches/All",
            "text": "All matches:"
        },
        "$:/language/Search/Matches/Title": {
            "title": "$:/language/Search/Matches/Title",
            "text": "Title matches:"
        },
        "$:/language/Search/Search": {
            "title": "$:/language/Search/Search",
            "text": "Search"
        },
        "$:/language/Search/Search/TooShort": {
            "title": "$:/language/Search/Search/TooShort",
            "text": "Search text too short"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Search for shadow tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Search for standard tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Search for system tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "All"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Contents"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Drafts"
        },
        "$:/language/SideBar/Explorer/Caption": {
            "title": "$:/language/SideBar/Explorer/Caption",
            "text": "Explorer"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Missing"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "More"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Open"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Recent"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Tags"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "untagged"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Types"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "a non-linear personal web notebook"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "My ~TiddlyWiki"
        },
        "$:/language/Snippets/ListByTag": {
            "title": "$:/language/Snippets/ListByTag",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "List of tiddlers by tag",
            "text": "<<list-links \"[tag[task]sort[title]]\">>\n"
        },
        "$:/language/Snippets/MacroDefinition": {
            "title": "$:/language/Snippets/MacroDefinition",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Macro definition",
            "text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
        },
        "$:/language/Snippets/Table4x3": {
            "title": "$:/language/Snippets/Table4x3",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table with 4 columns by 3 rows",
            "text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
        },
        "$:/language/Snippets/TableOfContents": {
            "title": "$:/language/Snippets/TableOfContents",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table of Contents",
            "text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
        },
        "$:/language/ThemeTweaks/ThemeTweaks": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks",
            "text": "Theme Tweaks"
        },
        "$:/language/ThemeTweaks/ThemeTweaks/Hint": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
            "text": "You can tweak certain aspects of the ''Vanilla'' theme."
        },
        "$:/language/ThemeTweaks/Options": {
            "title": "$:/language/ThemeTweaks/Options",
            "text": "Options"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout",
            "text": "Sidebar layout"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
            "text": "Fixed story, fluid sidebar"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
            "text": "Fluid story, fixed sidebar"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles",
            "text": "Sticky titles"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
            "text": "Causes tiddler titles to \"stick\" to the top of the browser window"
        },
        "$:/language/ThemeTweaks/Options/CodeWrapping": {
            "title": "$:/language/ThemeTweaks/Options/CodeWrapping",
            "text": "Wrap long lines in code blocks"
        },
        "$:/language/ThemeTweaks/Settings": {
            "title": "$:/language/ThemeTweaks/Settings",
            "text": "Settings"
        },
        "$:/language/ThemeTweaks/Settings/FontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/FontFamily",
            "text": "Font family"
        },
        "$:/language/ThemeTweaks/Settings/CodeFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
            "text": "Code font family"
        },
        "$:/language/ThemeTweaks/Settings/EditorFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
            "text": "Editor font family"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImage": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
            "text": "Page background image"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
            "text": "Page background image attachment"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
            "text": "Scroll with tiddlers"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
            "text": "Fixed to window"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
            "text": "Page background image size"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
            "text": "Auto"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
            "text": "Cover"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
            "text": "Contain"
        },
        "$:/language/ThemeTweaks/Metrics": {
            "title": "$:/language/ThemeTweaks/Metrics",
            "text": "Sizes"
        },
        "$:/language/ThemeTweaks/Metrics/FontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/FontSize",
            "text": "Font size"
        },
        "$:/language/ThemeTweaks/Metrics/LineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/LineHeight",
            "text": "Line height"
        },
        "$:/language/ThemeTweaks/Metrics/BodyFontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
            "text": "Font size for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
            "text": "Line height for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
            "text": "Story left position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
            "text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop",
            "text": "Story top position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
            "text": "how far the top margin of the story river<br>is from the top of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight",
            "text": "Story right"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
            "text": "how far the left margin of the sidebar <br>is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
            "text": "Story width"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
            "text": "the overall width of the story river"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
            "text": "Tiddler width"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
            "text": "within the story river"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
            "text": "Sidebar breakpoint"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
            "text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
            "text": "Sidebar width"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
            "text": "the width of the sidebar in fluid-fixed layout"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Plugin Details"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "This plugin contains the following shadow tiddlers:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Shadow Status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "It is overridden by an ordinary tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fields"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "List"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "This tiddler does not have a list"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listed"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "This tiddler is not listed by any others"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "References"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers link to this one"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Tagging"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "No tiddlers are tagged with this one"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/languages/en-GB/icon": {
            "title": "$:/languages/en-GB/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
        },
        "$:/languages/en-GB": {
            "title": "$:/languages/en-GB",
            "name": "en-GB",
            "description": "English (British)",
            "author": "JeremyRuston",
            "core-version": ">=5.0.0\"",
            "text": "Stub pseudo-plugin for the default language"
        },
        "$:/core/modules/commander.js": {
            "title": "$:/core/modules/commander.js",
            "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/commands/build.js": {
            "title": "$:/core/modules/commands/build.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/clearpassword.js": {
            "title": "$:/core/modules/commands/clearpassword.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/deletetiddlers.js": {
            "title": "$:/core/modules/commands/deletetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/editions.js": {
            "title": "$:/core/modules/commands/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\"    \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/fetch.js": {
            "title": "$:/core/modules/commands/fetch.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t    var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t    \tdata = [];\n\t    self.commander.write(\"Reading \" + url + \": \");\n\t    response.on(\"data\",function(chunk) {\n\t        data.push(chunk);\n\t        self.commander.write(\".\");\n\t    });\n\t    response.on(\"end\",function() {\n\t        self.commander.write(\"\\n\");\n\t        if(response.statusCode === 200) {\n\t\t        self.processBody(Buffer.concat(data),type,options,url);\n\t\t        callback(null);\n\t        } else {\n\t        \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t        \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t        \t} else {\n\t\t        \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t        \t\t\n\t        \t}\n\t        }\n\t   \t});\n\t   \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t   \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/help.js": {
            "title": "$:/core/modules/commands/help.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/import.js": {
            "title": "$:/core/modules/commands/import.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/init.js": {
            "title": "$:/core/modules/commands/init.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/listen.js": {
            "title": "$:/core/modules/commands/listen.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/load.js": {
            "title": "$:/core/modules/commands/load.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/makelibrary.js": {
            "title": "$:/core/modules/commands/makelibrary.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/output.js": {
            "title": "$:/core/modules/commands/output.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/password.js": {
            "title": "$:/core/modules/commands/password.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/render.js": {
            "title": "$:/core/modules/commands/render.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddler.js": {
            "title": "$:/core/modules/commands/rendertiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddlers.js": {
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/save.js": {
            "title": "$:/core/modules/commands/save.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savelibrarytiddlers.js": {
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddler.js": {
            "title": "$:/core/modules/commands/savetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddlers.js": {
            "title": "$:/core/modules/commands/savetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savewikifolder.js": {
            "title": "$:/core/modules/commands/savewikifolder.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type]  || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "title": "$:/core/modules/commands/server.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/setfield.js": {
            "title": "$:/core/modules/commands/setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/unpackplugin.js": {
            "title": "$:/core/modules/commands/unpackplugin.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/verbose.js": {
            "title": "$:/core/modules/commands/verbose.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n  \" + $tw.boot.logMessages.join(\"\\n  \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/version.js": {
            "title": "$:/core/modules/commands/version.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/config.js": {
            "title": "$:/core/modules/config.js",
            "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter:   \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/core/modules/deserializers.js": {
            "title": "$:/core/modules/deserializers.js",
            "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/core/modules/editor/engines/framed.js": {
            "title": "$:/core/modules/editor/engines/framed.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"focus\",handlerObject: this,handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\tthis.domNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\t\n/*\nHandle the focus event\n*/\nFramedEngine.prototype.handleFocusEvent = function(event) {\n\tthis.widget.cancelPopups();\n\treturn true;\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/engines/simple.js": {
            "title": "$:/core/modules/editor/engines/simple.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tthis.widget.cancelPopups();\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/factory.js": {
            "title": "$:/core/modules/editor/factory.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup ||  changedAttributes.rows || changedAttributes.tabindex || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tCancel Popups\n\t*/\n\tEditTextWidget.prototype.cancelPopups = function() {\n\t\t$tw.popup.cancel(0,this.engine.domNode);\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t    clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t    el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/operations/bitmap/clear.js": {
            "title": "$:/core/modules/editor/operations/bitmap/clear.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/resize.js": {
            "title": "$:/core/modules/editor/operations/bitmap/resize.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/rotate-left.js": {
            "title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/text/excise.js": {
            "title": "$:/core/modules/editor/operations/text/excise.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ?  [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/make-link.js": {
            "title": "$:/core/modules/editor/operations/text/make-link.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/prefix-lines.js": {
            "title": "$:/core/modules/editor/operations/text/prefix-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== event.paramObject.count) {\n\t\t\t// Apply the prefix\n\t\t\tline =  prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-all.js": {
            "title": "$:/core/modules/editor/operations/text/replace-all.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-selection.js": {
            "title": "$:/core/modules/editor/operations/text/replace-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/save-selection.js": {
            "title": "$:/core/modules/editor/operations/text/save-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-lines.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-selection.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/filters/addprefix.js": {
            "title": "$:/core/modules/filters/addprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/addsuffix.js": {
            "title": "$:/core/modules/filters/addsuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/after.js": {
            "title": "$:/core/modules/filters/after.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/all/current.js": {
            "title": "$:/core/modules/filters/all/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/missing.js": {
            "title": "$:/core/modules/filters/all/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/orphans.js": {
            "title": "$:/core/modules/filters/all/orphans.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/shadows.js": {
            "title": "$:/core/modules/filters/all/shadows.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tags.js": {
            "title": "$:/core/modules/filters/all/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tiddlers.js": {
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all.js": {
            "title": "$:/core/modules/filters/all.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/backlinks.js": {
            "title": "$:/core/modules/filters/backlinks.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/before.js": {
            "title": "$:/core/modules/filters/before.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/commands.js": {
            "title": "$:/core/modules/filters/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/contains.js": {
            "title": "$:/core/modules/filters/contains.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/count.js": {
            "title": "$:/core/modules/filters/count.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/days.js": {
            "title": "$:/core/modules/filters/days.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/each.js": {
            "title": "$:/core/modules/filters/each.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/eachday.js": {
            "title": "$:/core/modules/filters/eachday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editiondescription.js": {
            "title": "$:/core/modules/filters/editiondescription.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editions.js": {
            "title": "$:/core/modules/filters/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/else.js": {
            "title": "$:/core/modules/filters/else.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/decodeuricomponent.js": {
            "title": "$:/core/modules/filters/decodeuricomponent.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/enlist.js": {
            "title": "$:/core/modules/filters/enlist.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/field.js": {
            "title": "$:/core/modules/filters/field.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/fields.js": {
            "title": "$:/core/modules/filters/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/get.js": {
            "title": "$:/core/modules/filters/get.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getindex.js": {
            "title": "$:/core/modules/filters/getindex.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getvariable.js": {
            "title": "$:/core/modules/filters/getvariable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/has.js": {
            "title": "$:/core/modules/filters/has.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/haschanged.js": {
            "title": "$:/core/modules/filters/haschanged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/indexes.js": {
            "title": "$:/core/modules/filters/indexes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/insertbefore.js": {
            "title": "$:/core/modules/filters/insertbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/is/blank.js": {
            "title": "$:/core/modules/filters/is/blank.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/current.js": {
            "title": "$:/core/modules/filters/is/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/image.js": {
            "title": "$:/core/modules/filters/is/image.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/missing.js": {
            "title": "$:/core/modules/filters/is/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/orphan.js": {
            "title": "$:/core/modules/filters/is/orphan.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/shadow.js": {
            "title": "$:/core/modules/filters/is/shadow.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/system.js": {
            "title": "$:/core/modules/filters/is/system.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tag.js": {
            "title": "$:/core/modules/filters/is/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tiddler.js": {
            "title": "$:/core/modules/filters/is/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/variable.js": {
            "title": "$:/core/modules/filters/is/variable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is.js": {
            "title": "$:/core/modules/filters/is.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/limit.js": {
            "title": "$:/core/modules/filters/limit.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/links.js": {
            "title": "$:/core/modules/filters/links.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/list.js": {
            "title": "$:/core/modules/filters/list.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listed.js": {
            "title": "$:/core/modules/filters/listed.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listops.js": {
            "title": "$:/core/modules/filters/listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/lookup.js": {
            "title": "$:/core/modules/filters/lookup.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/match.js": {
            "title": "$:/core/modules/filters/match.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/math.js": {
            "title": "$:/core/modules/filters/math.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(stringifyNumber(fnCalc(parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\nfunction parseNumber(str) {\n\treturn parseFloat(str) || 0;\n}\n\nfunction stringifyNumber(num) {\n\treturn num + \"\";\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/minlength.js": {
            "title": "$:/core/modules/filters/minlength.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/modules.js": {
            "title": "$:/core/modules/filters/modules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/moduletypes.js": {
            "title": "$:/core/modules/filters/moduletypes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/next.js": {
            "title": "$:/core/modules/filters/next.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/plugintiddlers.js": {
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/prefix.js": {
            "title": "$:/core/modules/filters/prefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/previous.js": {
            "title": "$:/core/modules/filters/previous.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/range.js": {
            "title": "$:/core/modules/filters/range.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/regexp.js": {
            "title": "$:/core/modules/filters/regexp.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removeprefix.js": {
            "title": "$:/core/modules/filters/removeprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removesuffix.js": {
            "title": "$:/core/modules/filters/removesuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sameday.js": {
            "title": "$:/core/modules/filters/sameday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/search.js": {
            "title": "$:/core/modules/filters/search.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/shadowsource.js": {
            "title": "$:/core/modules/filters/shadowsource.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sort.js": {
            "title": "$:/core/modules/filters/sort.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/splitbefore.js": {
            "title": "$:/core/modules/filters/splitbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/storyviews.js": {
            "title": "$:/core/modules/filters/storyviews.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/strings.js": {
            "title": "$:/core/modules/filters/strings.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.trim(a)];}\n);\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue)];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subfilter.js": {
            "title": "$:/core/modules/filters/subfilter.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subtiddlerfields.js": {
            "title": "$:/core/modules/filters/subtiddlerfields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/suffix.js": {
            "title": "$:/core/modules/filters/suffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tag.js": {
            "title": "$:/core/modules/filters/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tagging.js": {
            "title": "$:/core/modules/filters/tagging.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tags.js": {
            "title": "$:/core/modules/filters/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/then.js": {
            "title": "$:/core/modules/filters/then.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/title.js": {
            "title": "$:/core/modules/filters/title.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/untagged.js": {
            "title": "$:/core/modules/filters/untagged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/variables.js": {
            "title": "$:/core/modules/filters/variables.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/wikiparserrules.js": {
            "title": "$:/core/modules/filters/wikiparserrules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/x-listops.js": {
            "title": "$:/core/modules/filters/x-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n    /*jslint node: true, browser: true */\n    /*global $tw: false */\n    \"use strict\";\n\n    /*\n    Fetch titles from the current list\n    */\n    var prepare_results = function (source) {\n    var results = [];\n        source(function (tiddler, title) {\n            results.push(title);\n        });\n        return results;\n    };\n\n    /*\n    Moves a number of items from the tail of the current list before the item named in the operand\n    */\n    exports.putbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list after the item named in the operand\n    */\n    exports.putafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Replaces the item named in the operand with a number of items from the tail of the current list\n    */\n    exports.replace = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return (index === -1) ?\n            results.slice(0, -count) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list to the head of the list\n    */\n    exports.putfirst = function (source, operator) {\n        var results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return results.slice(-count).concat(results.slice(0, -count));\n    };\n\n    /*\n    Moves a number of items from the head of the current list to the tail of the list\n    */\n    exports.putlast = function (source, operator) {\n        var results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,1);\n        return results.slice(count).concat(results.slice(0, count));\n    };\n\n    /*\n    Moves the item named in the operand a number of places forward or backward in the list\n    */\n    exports.move = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = $tw.utils.getInt(operator.suffix,1),\n            marker = results.splice(index, 1),\n            offset =  (index + count) > 0 ? index + count : 0;\n        return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n    };\n\n    /*\n    Returns the items from the current list that are after the item named in the operand\n    */\n    exports.allafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1) ? [] :\n            (operator.suffix) ? results.slice(index) :\n            results.slice(index + 1);\n    };\n\n    /*\n    Returns the items from the current list that are before the item named in the operand\n    */\n    exports.allbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1) ? [] :\n            (operator.suffix) ? results.slice(0, index + 1) :\n            results.slice(0, index);\n    };\n\n    /*\n    Appends the items listed in the operand array to the tail of the current list\n    */\n    exports.append = function (source, operator) {\n        var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || append.length;\n        return (append.length === 0) ? results :\n            (operator.prefix) ? results.concat(append.slice(-count)) :\n            results.concat(append.slice(0, count));\n    };\n\n    /*\n    Prepends the items listed in the operand array to the head of the current list\n    */\n    exports.prepend = function (source, operator) {\n        var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = $tw.utils.getInt(operator.suffix,prepend.length);\n        return (prepend.length === 0) ? results :\n            (operator.prefix) ? prepend.slice(-count).concat(results) :\n            prepend.slice(0, count).concat(results);\n    };\n\n    /*\n    Returns all items from the current list except the items listed in the operand array\n    */\n    exports.remove = function (source, operator) {\n        var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || array.length,\n            p,\n            len,\n            index;\n        len = array.length - 1;\n        for (p = 0; p < count; ++p) {\n            if (operator.prefix) {\n                index = results.indexOf(array[len - p]);\n            } else {\n                index = results.indexOf(array[p]);\n            }\n            if (index !== -1) {\n                results.splice(index, 1);\n            }\n        }\n        return results;\n    };\n\n    /*\n    Returns all items from the current list sorted in the order of the items in the operand array\n    */\n    exports.sortby = function (source, operator) {\n        var results = prepare_results(source);\n        if (!results || results.length < 2) {\n            return results;\n        }\n        var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n        results.sort(function (a, b) {\n            return lookup.indexOf(a) - lookup.indexOf(b);\n        });\n        return results;\n    };\n\n    /*\n    Removes all duplicate items from the current list\n    */\n    exports.unique = function (source, operator) {\n        var results = prepare_results(source);\n        var set = results.reduce(function (a, b) {\n            if (a.indexOf(b) < 0) {\n                a.push(b);\n            }\n            return a;\n        }, []);\n        return set;\n    };\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters.js": {
            "title": "$:/core/modules/filters.js",
            "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tArray.prototype.push.apply(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tif(results.length === 0) {\n\t\t\t\t\t\t\t// Main result so far is empty\n\t\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/indexers/field-indexer.js": {
            "title": "$:/core/modules/indexers/field-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/indexers/tag-indexer.js": {
            "title": "$:/core/modules/indexers/tag-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/info/platform.js": {
            "title": "$:/core/modules/info/platform.js",
            "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/core/modules/keyboard.js": {
            "title": "$:/core/modules/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t   (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t   (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t   (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t   (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/language.js": {
            "title": "$:/core/modules/language.js",
            "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/macros/changecount.js": {
            "title": "$:/core/modules/macros/changecount.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/contrastcolour.js": {
            "title": "$:/core/modules/macros/contrastcolour.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/csvtiddlers.js": {
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/displayshortcuts.js": {
            "title": "$:/core/modules/macros/displayshortcuts.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t    return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddler.js": {
            "title": "$:/core/modules/macros/jsontiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddlers.js": {
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\treturn this.wiki.getTiddlersAsJson(filter);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "title": "$:/core/modules/macros/makedatauri.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/now.js": {
            "title": "$:/core/modules/macros/now.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/qualify.js": {
            "title": "$:/core/modules/macros/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/resolvepath.js": {
            "title": "$:/core/modules/macros/resolvepath.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/unusedtitle.js": {
            "title": "$:/core/modules/macros/unusedtitle.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/version.js": {
            "title": "$:/core/modules/macros/version.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/parsers/audioparser.js": {
            "title": "$:/core/modules/parsers/audioparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/binaryparser.js": {
            "title": "$:/core/modules/parsers/binaryparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar BinaryParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/csvparser.js": {
            "title": "$:/core/modules/parsers/csvparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/htmlparser.js": {
            "title": "$:/core/modules/parsers/htmlparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/imageparser.js": {
            "title": "$:/core/modules/parsers/imageparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/utils/parseutils.js": {
            "title": "$:/core/modules/utils/parseutils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/parsers/pdfparser.js": {
            "title": "$:/core/modules/parsers/pdfparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/textparser.js": {
            "title": "$:/core/modules/parsers/textparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/videoparser.js": {
            "title": "$:/core/modules/parsers/videoparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/dash.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/entity.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: &copy;\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/extlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/heading.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/html.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/image.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/import.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/import.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/list.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/rules.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/syslink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/table.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n  <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/wikiparser.js": {
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined  && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t//  Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t//  Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/pluginswitcher.js": {
            "title": "$:/core/modules/pluginswitcher.js",
            "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/saver-handler.js": {
            "title": "$:/core/modules/saver-handler.js",
            "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/savers/andtidwiki.js": {
            "title": "$:/core/modules/savers/andtidwiki.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/beaker.js": {
            "title": "$:/core/modules/savers/beaker.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/download.js": {
            "title": "$:/core/modules/savers/download.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/fsosaver.js": {
            "title": "$:/core/modules/savers/fsosaver.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/github.js": {
            "title": "$:/core/modules/savers/github.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/gitlab.js": {
            "title": "$:/core/modules/savers/gitlab.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/manualdownload.js": {
            "title": "$:/core/modules/savers/manualdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/msdownload.js": {
            "title": "$:/core/modules/savers/msdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/put.js": {
            "title": "$:/core/modules/savers/put.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyfox.js": {
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyie.js": {
            "title": "$:/core/modules/savers/tiddlyie.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/twedit.js": {
            "title": "$:/core/modules/savers/twedit.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/upload.js": {
            "title": "$:/core/modules/savers/upload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/server/authenticators/basic.js": {
            "title": "$:/core/modules/server/authenticators/basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve($tw.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/authenticators/header.js": {
            "title": "$:/core/modules/server/authenticators/header.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\");\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/routes/delete-tiddler.js": {
            "title": "$:/core/modules/server/routes/delete-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-favicon.js": {
            "title": "$:/core/modules/server/routes/get-favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-file.js": {
            "title": "$:/core/modules/server/routes/get-file.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\");\n\tvar filename = path.resolve($tw.boot.wikiPath,\"files\",decodeURIComponent(state.params[0])),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tif(err.code === \"ENOENT\") {\n\t\t\t\tstatus = 404;\n\t\t\t\tcontent = \"File '\" + filename + \"' not found\";\n\t\t\t} else if(err.code === \"EACCES\") {\n\t\t\t\tstatus = 403;\n\t\t\t\tcontent = \"You do not have permission to access the file '\" + filename + \"'\";\n\t\t\t} else {\n\t\t\t\tstatus = 500;\n\t\t\t\tcontent = err.toString();\n\t\t\t}\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-index.js": {
            "title": "$:/core/modules/server/routes/get-index.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-login-basic.js": {
            "title": "$:/core/modules/server/routes/get-login-basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-status.js": {
            "title": "$:/core/modules/server/routes/get-status.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler-html.js": {
            "title": "$:/core/modules/server/routes/get-tiddler-html.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler.js": {
            "title": "$:/core/modules/server/routes/get-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddlers-json.js": {
            "title": "$:/core/modules/server/routes/get-tiddlers-json.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/tiddlers.json\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\tvar tiddlerFields = {};\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tif(name !== \"text\") {\n\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\ttiddlers.push(tiddlerFields);\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/put-tiddler.js": {
            "title": "$:/core/modules/server/routes/put-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/server.js": {
            "title": "$:/core/modules/server/server.js",
            "text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"path-prefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t$tw.utils.log(\"Serving on \" + this.protocol + \"://\" + host + \":\" + port + prefix,\"brown/orange\");\n\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Listen\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/browser-messaging.js": {
            "title": "$:/core/modules/browser-messaging.js",
            "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t  iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/commands.js": {
            "title": "$:/core/modules/startup/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/CSSescape.js": {
            "title": "$:/core/modules/startup/CSSescape.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/favicon.js": {
            "title": "$:/core/modules/startup/favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/info.js": {
            "title": "$:/core/modules/startup/info.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/load-modules.js": {
            "title": "$:/core/modules/startup/load-modules.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/password.js": {
            "title": "$:/core/modules/startup/password.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/render.js": {
            "title": "$:/core/modules/startup/render.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n   \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = DRAFT_TIDDLER_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/rootwidget.js": {
            "title": "$:/core/modules/startup/rootwidget.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification  mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard  mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup.js": {
            "title": "$:/core/modules/startup.js",
            "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\tvar executeStartupTiddlers = function(tag) {\n\t\t$tw.utils.each($tw.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\t\t$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);\n\t\t});\n\t};\n\texecuteStartupTiddlers(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/story.js": {
            "title": "$:/core/modules/startup/story.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\t$tw.wiki.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/windows.js": {
            "title": "$:/core/modules/startup/windows.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t    srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t},{\n\t\t\tname: \"click\",\n\t\t\thandlerObject: $tw.popup,\n\t\t\thandlerMethod: \"handleEvent\"\n\t\t}]);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/story.js": {
            "title": "$:/core/modules/story.js",
            "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/storyviews/classic.js": {
            "title": "$:/core/modules/storyviews/classic.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom:  currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/pop.js": {
            "title": "$:/core/modules/storyviews/pop.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/zoomin.js": {
            "title": "$:/core/modules/storyviews/zoomin.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx =  zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty =  zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "title": "$:/core/modules/syncer.js",
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || this.throttleInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\")  + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\t\tcolour: \"cyan\",\n\t\t\tenable: this.logging\n\t\t});\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI) {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title),\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t});\n};\n\n/*\nCreate an tiddlerInfo structure if it doesn't already exist\n*/\nSyncer.prototype.createTiddlerInfo = function(title) {\n\tif(!$tw.utils.hop(this.tiddlerInfo,title)) {\n\t\tthis.tiddlerInfo[title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1,\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t}\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields,hasBeenLazyLoaded) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title),\n\t\thasBeenLazyLoaded: hasBeenLazyLoaded !== undefined ? hasBeenLazyLoaded : true\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert($tw.language.getString(\"Error/RetrievingSkinny\") + \":\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields,false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Don't lazy load the same tiddler twice\n\tvar info = this.tiddlerInfo[title];\n\tif(!info || !info.hasBeenLazyLoaded) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.filterFn.call(this.wiki).indexOf(title) !== -1) {\n\t\t\tthis.createTiddlerInfo(title);\n\t\t\tthis.tiddlerInfo[title].hasBeenLazyLoaded = true;\n\t\t\t// Queue up a sync task to load this tiddler\n\t\t\tthis.enqueueSyncTask({\n\t\t\t\ttype: \"load\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tthis.createTiddlerInfo(task.title);\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields,true);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/tiddler.js": {
            "title": "$:/core/modules/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/core/modules/upgraders/plugins.js": {
            "title": "$:/core/modules/upgraders/plugins.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/system.js": {
            "title": "$:/core/modules/upgraders/system.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/themetweaks.js": {
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
            "text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)(e=r.charCodeAt(t))<128?o+=String.fromCharCode(e):e>127&&e<2048?(o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128)):(o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128));return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)(t=r.charCodeAt(o))<128?(e+=String.fromCharCode(t),o++):t>191&&t<224?(e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2):(e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3);return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var n=0;n<t.length;n++)o[t[n]]=o.require(t[n]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,n,i,d,f,a,h,c=\"\",u=0;u<r.length;)d=(t=r.charCodeAt(u++))>>2,f=(3&t)<<4|(n=r.charCodeAt(u++))>>4,a=(15&n)<<2|(i=r.charCodeAt(u++))>>6,h=63&i,isNaN(n)?a=h=64:isNaN(i)&&(h=64),c+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return c},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,n,i,d,f,a,h=\"\",c=0;c<r.length;)t=o.indexOf(r.charAt(c++))<<2|(d=o.indexOf(r.charAt(c++)))>>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(c++)))>>2,i=(3&f)<<6|(a=o.indexOf(r.charAt(c++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(n)),64!=a&&(h+=String.fromCharCode(i));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/crypto.js": {
            "title": "$:/core/modules/utils/crypto.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/csv.js": {
            "title": "$:/core/modules/utils/csv.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
            "text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&amp;\").replace(d,\"&lt;\").replace(e,\"&gt;\").replace(f,\"&para;<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/dom/animations/slide.js": {
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/core/modules/utils/dom/animator.js": {
            "title": "$:/core/modules/utils/dom/animator.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/browser.js": {
            "title": "$:/core/modules/utils/dom/browser.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom.js": {
            "title": "$:/core/modules/utils/dom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n    // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/dragndrop.js": {
            "title": "$:/core/modules/utils/dom/dragndrop.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/http.js": {
            "title": "$:/core/modules/utils/dom/http.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!$tw.utils.hop(headers,\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/modal.js": {
            "title": "$:/core/modules/utils/dom/modal.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/notifier.js": {
            "title": "$:/core/modules/utils/dom/notifier.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/popup.js": {
            "title": "$:/core/modules/utils/dom/popup.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nDetect if a Popup contains an input field that has focus\nReturns true or false\n*/\nPopup.prototype.detectInputWithinPopup = function(node) {\n\tvar withinPopup = false,\n\t    currNode = node;\n\tfor(var i=0; i<this.popups.length; i++) {\n\t\tvar popup = (this.popups[i] && this.popups[i].domNode) ? this.popups[i].domNode : null;\n\t\twhile(node && popup) {\n\t\t\tif(node === popup || (node.classList && (node.classList.contains(\"tc-popup-keep\") || (node !== currNode && node.classList.contains(\"tc-popup-handle\"))))) {\n\t\t\t\twithinPopup = true;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t}\n\treturn withinPopup;\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level,focusedInputNode) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar inputWithinPopup;\n\t\tif(focusedInputNode) {\n\t\t\tinputWithinPopup = this.detectInputWithinPopup(focusedInputNode);\n\t\t}\n\t\tif(!inputWithinPopup) {\n\t\t\tvar popup = this.popups.pop();\n\t\t  \tif(popup.title) {\n\t\t\t\tif(popup.noStateReference) {\n\t\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t\t} else {\n\t\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n        \t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/scroller.js": {
            "title": "$:/core/modules/utils/dom/scroller.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t    srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/edition-info.js": {
            "title": "$:/core/modules/utils/edition-info.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/fakedom.js": {
            "title": "$:/core/modules/utils/fakedom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/filesystem.js": {
            "title": "$:/core/modules/utils/filesystem.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {};\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\tfilepath;\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// If not, generate a base pathname\n\tif(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t// Don't let the filename start with a dot because such files are invisible on *nix\n\tfilepath = filepath.replace(/^\\./g,\"_\");\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/logger.js": {
            "title": "$:/core/modules/utils/logger.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(this.enable && console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t}\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/parsetree.js": {
            "title": "$:/core/modules/utils/parsetree.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/performance.js": {
            "title": "$:/core/modules/utils/performance.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/pluginmaker.js": {
            "title": "$:/core/modules/utils/pluginmaker.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/transliterate.js": {
            "title": "$:/core/modules/utils/transliterate.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/utils.js": {
            "title": "$:/core/modules/utils/utils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\",   duration:      365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\",  duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\",    duration:            24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\",   duration:                 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration:                      60 * 1000},\n\t\t{name: \"Seconds\", duration:                           1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/'/g, \"\\\\'\")              // single quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/\\x08/g, '\\\\b')           // backspace\n\t\t.replace(/\\x0c/g, '\\\\f')           // formfeed\n\t\t.replace(/\\t/g, '\\\\t')             // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n    return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm =  r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/widgets/action-createtiddler.js": {
            "title": "$:/core/modules/widgets/action-createtiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.generateNewTitle(this.actionBaseTitle),\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletefield.js": {
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletetiddler.js": {
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-listops.js": {
            "title": "$:/core/modules/widgets/action-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-navigate.js": {
            "title": "$:/core/modules/widgets/action-navigate.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-sendmessage.js": {
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-setfield.js": {
            "title": "$:/core/modules/widgets/action-setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\")  || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/browse.js": {
            "title": "$:/core/modules/widgets/browse.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/button.js": {
            "title": "$:/core/modules/widgets/button.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n    return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/checkbox.js": {
            "title": "$:/core/modules/widgets/checkbox.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/codeblock.js": {
            "title": "$:/core/modules/widgets/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/count.js": {
            "title": "$:/core/modules/widgets/count.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/diff-text.js": {
            "title": "$:/core/modules/widgets/diff-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/draggable.js": {
            "title": "$:/core/modules/widgets/draggable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedTiddlers.tag || changedTiddlers[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/droppable.js": {
            "title": "$:/core/modules/widgets/droppable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t]);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = event.ctrlKey && ! event.shiftKey ? \"ctrl\" : event.shiftKey && !event.ctrlKey ? \"shift\" : \n\t\t\t\tevent.ctrlKey && event.shiftKey ? \"ctrl-shift\" : \"normal\" ;\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/dropzone.js": {
            "title": "$:/core/modules/widgets/dropzone.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-binary.js": {
            "title": "$:/core/modules/widgets/edit-binary.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-bitmap.js": {
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-shortcut.js": {
            "title": "$:/core/modules/widgets/edit-shortcut.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-text.js": {
            "title": "$:/core/modules/widgets/edit-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit.js": {
            "title": "$:/core/modules/widgets/edit.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder},\n\t\t\t\"tabindex\": {type: \"string\", value: this.editTabIndex}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/element.js": {
            "title": "$:/core/modules/widgets/element.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\ttag = \"h\" + headingLevel;\n\t}\n\t// Create the DOM node\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/encrypt.js": {
            "title": "$:/core/modules/widgets/encrypt.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/entity.js": {
            "title": "$:/core/modules/widgets/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fieldmangler.js": {
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fields.js": {
            "title": "$:/core/modules/widgets/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/image.js": {
            "title": "$:/core/modules/widgets/image.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/importvariables.js": {
            "title": "$:/core/modules/widgets/importvariables.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/keyboard.js": {
            "title": "$:/core/modules/widgets/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/link.js": {
            "title": "$:/core/modules/widgets/link.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/linkcatcher.js": {
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/list.js": {
            "title": "$:/core/modules/widgets/list.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/macrocall.js": {
            "title": "$:/core/modules/widgets/macrocall.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/navigator.js": {
            "title": "$:/core/modules/widgets/navigator.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.wiki.addToStory(title,fromTitle,this.storyTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/password.js": {
            "title": "$:/core/modules/widgets/password.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/qualify.js": {
            "title": "$:/core/modules/widgets/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "title": "$:/core/modules/widgets/radio.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n   \t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n  \t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/range.js": {
            "title": "$:/core/modules/widgets/range.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\n\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tvalue   = this.defaultValue;\n\tif(tiddler) {\n\t\tif($tw.utils.hop(tiddler.fields,this.tiddlerField)) {\n\t\t\tvalue = tiddler.fields[this.tiddlerField] || \"\";\n\t\t} else {\n\t\t\tvalue = this.defaultValue || \"\";\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tthis.wiki.setText(this.tiddlerTitle ,this.tiddlerField, null,this.inputDomNode.value);\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/raw.js": {
            "title": "$:/core/modules/widgets/raw.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/reveal.js": {
            "title": "$:/core/modules/widgets/reveal.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t    defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n        $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/scrollable.js": {
            "title": "$:/core/modules/widgets/scrollable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/select.js": {
            "title": "$:/core/modules/widgets/select.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/set.js": {
            "title": "$:/core/modules/widgets/set.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t   (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/text.js": {
            "title": "$:/core/modules/widgets/text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/tiddler.js": {
            "title": "$:/core/modules/widgets/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/transclude.js": {
            "title": "$:/core/modules/widgets/transclude.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/vars.js": {
            "title": "$:/core/modules/widgets/vars.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n  <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/view.js": {
            "title": "$:/core/modules/widgets/view.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/widget.js": {
            "title": "$:/core/modules/widgets/widget.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning  that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/wikify.js": {
            "title": "$:/core/modules/widgets/wikify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/wiki-bulkops.js": {
            "title": "$:/core/modules/wiki-bulkops.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/wiki.js": {
            "title": "$:/core/modules/wiki.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type]  || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles.  Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x :  x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\tfunction replaceItem(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\treplaceItem(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\treplaceItem(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// We get the currPos //after// figuring out the newPos, because recursive replaceItem calls might alter title's currPos\n\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\treplaceItem(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create  a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tif(historyTitle) {\n\t\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\t\tstory.addToHistory(title,fromPageRect);\t\t\n\t}\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tif(storyTitle) {\n\t\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\t\tstory.addToStory(title,fromTitle,options);\t\t\n\t}\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/palettes/Blanca": {
            "title": "$:/palettes/Blanca",
            "name": "Blanca",
            "description": "A clean white palette to let you focus",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Blue": {
            "title": "$:/palettes/Blue",
            "name": "Blue",
            "description": "A blue theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Muted": {
            "title": "$:/palettes/Muted",
            "name": "Muted",
            "description": "Bright tiddlers on a muted background",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastLight": {
            "title": "$:/palettes/ContrastLight",
            "name": "Contrast (Light)",
            "description": "High contrast and unambiguous (light version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastDark": {
            "title": "$:/palettes/ContrastDark",
            "name": "Contrast (Dark)",
            "description": "High contrast and unambiguous (dark version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/DarkPhotos": {
            "title": "$:/palettes/DarkPhotos",
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Nord": {
            "title": "$:/palettes/Nord",
            "name": "Nord",
            "description": "An arctic, north-bluish color palette.",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
            "text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #4C566A\nbutton-foreground: #D8DEE9\nbutton-border: transparent\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #4C566A\nsidebar-controls-foreground: #3B4252\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #2e3440\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\n"
        },
        "$:/palettes/Rocker": {
            "title": "$:/palettes/Rocker",
            "name": "Rocker",
            "description": "A dark theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarFlare": {
            "title": "$:/palettes/SolarFlare",
            "name": "Solar Flare",
            "description": "Warm, relaxing earth colours",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n    download-foreground: <<colour background>>\n    dragger-foreground: <<colour background>>\n    dropdown-background: <<colour background>>\n    modal-background: <<colour background>>\n    sidebar-foreground-shadow: <<colour background>>\n    tiddler-background: <<colour background>>\n    tiddler-border: <<colour background>>\n    tiddler-link-background: <<colour background>>\n    tab-background-selected: <<colour background>>\n        dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n    dragger-background: <<colour foreground>>\n    tab-foreground: <<colour foreground>>\n        tab-foreground-selected: <<colour tab-foreground>>\n            sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n        sidebar-tab-foreground: <<colour tab-foreground>>\n    sidebar-button-foreground: <<colour foreground>>\n    sidebar-controls-foreground: <<colour foreground>>\n    sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n    alert-muted-foreground: <<colour base01>>\n: base00\n    code-foreground: <<colour base00>>\n    message-foreground: <<colour base00>>\n    tag-foreground: <<colour base00>>\n: base0\n    sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n    muted-foreground: <<colour base1>>\n        blockquote-bar: <<colour muted-foreground>>\n        dropdown-border: <<colour muted-foreground>>\n        sidebar-muted-foreground: <<colour muted-foreground>>\n        tiddler-title-foreground: <<colour muted-foreground>>\n            site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n    modal-footer-background: <<colour base2>>\n    page-background: <<colour base2>>\n        modal-backdrop: <<colour page-background>>\n        notification-background: <<colour page-background>>\n        code-background: <<colour page-background>>\n            code-border: <<colour code-background>>\n        pre-background: <<colour page-background>>\n            pre-border: <<colour pre-background>>\n        sidebar-tab-background-selected: <<colour page-background>>\n    table-header-background: <<colour base2>>\n    tag-background: <<colour base2>>\n    tiddler-editor-background: <<colour base2>>\n    tiddler-info-background: <<colour base2>>\n    tiddler-info-tab-background: <<colour base2>>\n    tab-background: <<colour base2>>\n        dropdown-tab-background: <<colour tab-background>>\n: base3\n    alert-background: <<colour base3>>\n    message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n    alert-highlight: <<colour magenta>>\n: violet\n    external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n    tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n    external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n    primary: <<colour blue-muted>>\n        download-background: <<colour primary>>\n        tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n    modal-footer-border: <<colour tab-border>>\n    modal-header-border: <<colour tab-border>>\n    notification-border: <<colour tab-border>>\n    sidebar-tab-border: <<colour tab-border>>\n    tab-border-selected: <<colour tab-border>>\n        sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n    sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarizedLight": {
            "title": "$:/palettes/SolarizedLight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Precision colors for machines and people",
            "license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
            "name": "SolarizedLight",
            "text": "alert-background: #eee8d5\nalert-border: #073642\nalert-highlight: #cb4b16\nalert-muted-foreground: #586e75\nbackground: #fdf6e3\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #cb4b16\nbutton-foreground: #fdf6e3\nbutton-border: transparent\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #d33682\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #859900\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #D08770\ndownload-background: #859900\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #fdf6e3\ndropdown-tab-background: #93a1a1\ndropzone-background: #859900\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: #d33682\nexternal-link-foreground-visited: #b58900\nexternal-link-foreground: #cb4b16\nforeground: #839496\nmessage-background: #586e75\nmessage-border: #586e75\nmessage-foreground: #eee8d5\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #eee8d5\nmodal-footer-background: #eee8d5\nmodal-footer-border: #eee8d5\nmodal-header-border: #eee8d5\nmuted-foreground: #93a1a1\nnotification-background: #EBCB8B\nnotification-border: #D08770\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #93a1a1\nprimary: #2aa198\nselect-tag-background: #eee8d5\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: #eee8d5\nsidebar-controls-foreground-hover: #268bd2\nsidebar-controls-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #839496\nsidebar-muted-foreground-hover: #657b83\nsidebar-muted-foreground: #93a1a1\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-background: #839496\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #657b83\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #839496\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #859900\nsidebar-tiddler-link-foreground: #268bd2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #dc322f\ntab-background-selected: #fdf6e3\ntab-background: #839496\ntab-border-selected: #93a1a1\ntab-border: #93a1a1\ntab-divider: #fdf6e3\ntab-foreground-selected: #839496\ntab-foreground: #eee8d5\ntable-border: #657b83\ntable-footer-background: #657b83\ntable-header-background: #93a1a1\ntag-background: #6c71c4\ntag-foreground: #eee8d5\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #b58900\ntiddler-controls-foreground-selected: #b58900\ntiddler-controls-foreground: #073642\ntiddler-editor-background: #eee8d5\ntiddler-editor-border-image: #eee8d5\ntiddler-editor-border: #eee8d5\ntiddler-editor-fields-even: #eee8d5\ntiddler-editor-fields-odd: #fdf6e3\ntiddler-info-background: #eee8d5\ntiddler-info-border: #eee8d5\ntiddler-info-tab-background: #586e75\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #586e75\ntiddler-title-foreground: #073642\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #839496\nvery-muted-foreground: #93a1a1\n"
        },
        "$:/palettes/SpartanDay": {
            "title": "$:/palettes/SpartanDay",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Cold, spartan day colors",
            "name": "Spartan Day",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
        },
        "$:/palettes/SpartanNight": {
            "title": "$:/palettes/SpartanNight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Dark spartan colors",
            "name": "Spartan Night",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
        },
        "$:/palettes/Twilight": {
            "title": "$:/palettes/Twilight",
            "tags": "$:/tags/Palette",
            "author": "Thomas Elmiger",
            "type": "application/x-tiddler-dictionary",
            "name": "Twilight",
            "description": "Delightful, soft darkness.",
            "text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
        },
        "$:/palettes/Vanilla": {
            "title": "$:/palettes/Vanilla",
            "name": "Vanilla",
            "description": "Pale and unobtrusive",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
        },
        "$:/library/sjcl.js/license": {
            "title": "$:/library/sjcl.js/license",
            "type": "text/plain",
            "text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
        },
        "$:/core/templates/MOTW.html": {
            "title": "$:/core/templates/MOTW.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/core/templates/alltiddlers.template.html": {
            "title": "$:/core/templates/alltiddlers.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
        },
        "$:/core/templates/canonical-uri-external-image": {
            "title": "$:/core/templates/canonical-uri-external-image",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-raw": {
            "title": "$:/core/templates/canonical-uri-external-raw",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-text": {
            "title": "$:/core/templates/canonical-uri-external-text",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
        },
        "$:/core/templates/css-tiddler": {
            "title": "$:/core/templates/css-tiddler",
            "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
        },
        "$:/core/templates/exporters/CsvFile": {
            "title": "$:/core/templates/exporters/CsvFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/CsvFile}}",
            "extension": ".csv",
            "text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/StaticRiver": {
            "title": "$:/core/templates/exporters/StaticRiver",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/StaticRiver}}",
            "extension": ".html",
            "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
        },
        "$:/core/templates/exporters/StaticRiver/Content": {
            "title": "$:/core/templates/exporters/StaticRiver/Content",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
        },
        "$:/core/save/all-external-js": {
            "title": "$:/core/save/all-external-js",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
        },
        "$:/core/templates/tiddlywiki5.js": {
            "title": "$:/core/templates/tiddlywiki5.js",
            "text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
        },
        "$:/core/templates/tiddlywiki5.js/tiddlers": {
            "title": "$:/core/templates/tiddlywiki5.js/tiddlers",
            "text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n$tw.preloadTiddlerArray([{\n\ttitle: \"$:/config/SaveWikiButton/Template\",\n\ttext: \"$:/core/save/all-external-js\"\n}]);\n`\n"
        },
        "$:/core/templates/tiddlywiki5-external-js.html": {
            "title": "$:/core/templates/tiddlywiki5-external-js.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
        },
        "$:/core/templates/html-div-tiddler": {
            "title": "$:/core/templates/html-div-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
        },
        "$:/core/templates/html-tiddler": {
            "title": "$:/core/templates/html-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
        },
        "$:/core/templates/javascript-tiddler": {
            "title": "$:/core/templates/javascript-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
        },
        "$:/core/templates/json-tiddler": {
            "title": "$:/core/templates/json-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
        },
        "$:/core/templates/module-tiddler": {
            "title": "$:/core/templates/module-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
        },
        "$:/core/templates/plain-text-tiddler": {
            "title": "$:/core/templates/plain-text-tiddler",
            "text": "<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/raw-static-tiddler": {
            "title": "$:/core/templates/raw-static-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
        },
        "$:/core/save/all": {
            "title": "$:/core/save/all",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/empty": {
            "title": "$:/core/save/empty",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-all": {
            "title": "$:/core/save/lazy-all",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-images": {
            "title": "$:/core/save/lazy-images",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/server/static.sidebar.wikitext": {
            "title": "$:/core/templates/server/static.sidebar.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
        },
        "$:/core/templates/server/static.tiddler.html": {
            "title": "$:/core/templates/server/static.tiddler.html",
            "text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
        },
        "$:/core/templates/server/static.tiddler.wikitext": {
            "title": "$:/core/templates/server/static.tiddler.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<<currentTiddler>>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<<tempCurrentTiddler>>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</$importvariables>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n"
        },
        "$:/core/templates/split-recipe": {
            "title": "$:/core/templates/split-recipe",
            "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
        },
        "$:/core/templates/static-tiddler": {
            "title": "$:/core/templates/static-tiddler",
            "text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
        },
        "$:/core/templates/static.area": {
            "title": "$:/core/templates/static.area",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
        },
        "$:/core/templates/static.template.css": {
            "title": "$:/core/templates/static.template.css",
            "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
        },
        "$:/core/templates/static.template.html": {
            "title": "$:/core/templates/static.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
        },
        "$:/core/templates/static.tiddler.html": {
            "title": "$:/core/templates/static.tiddler.html",
            "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
        },
        "$:/core/templates/store.area.template.html": {
            "title": "$:/core/templates/store.area.template.html",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
        },
        "$:/core/templates/tid-tiddler": {
            "title": "$:/core/templates/tid-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/tiddler-metadata": {
            "title": "$:/core/templates/tiddler-metadata",
            "text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
        },
        "$:/core/templates/tiddlywiki5.html": {
            "title": "$:/core/templates/tiddlywiki5.html",
            "text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
        },
        "$:/core/templates/version": {
            "title": "$:/core/templates/version",
            "text": "<<version>>"
        },
        "$:/core/templates/wikified-tiddler": {
            "title": "$:/core/templates/wikified-tiddler",
            "text": "<$transclude />"
        },
        "$:/core/ui/AboveStory/tw2-plugin-check": {
            "title": "$:/core/ui/AboveStory/tw2-plugin-check",
            "tags": "$:/tags/AboveStory",
            "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/Actions/new-image": {
            "title": "$:/core/ui/Actions/new-image",
            "tags": "$:/tags/Actions",
            "description": "create a new image tiddler",
            "text": "\\define get-type()\nimage/$(imageType)$\n\\end\n<$vars imageType={{$:/config/NewImageType}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>>/>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-journal": {
            "title": "$:/core/ui/Actions/new-journal",
            "tags": "$:/tags/Actions",
            "description": "create a new journal tiddler",
            "text": "<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-tiddler": {
            "title": "$:/core/ui/Actions/new-tiddler",
            "tags": "$:/tags/Actions",
            "description": "create a new empty tiddler",
            "text": "<$action-sendmessage $message=\"tm-new-tiddler\"/>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Standard": {
            "title": "$:/core/ui/AdvancedSearch/Standard",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Standard/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/AdvancedSearch": {
            "title": "$:/AdvancedSearch",
            "icon": "$:/core/images/advanced-search-button",
            "color": "#bbb",
            "text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
        },
        "$:/core/ui/BinaryWarning": {
            "title": "$:/core/ui/BinaryWarning",
            "text": "\\define lingo-base() $:/language/BinaryWarning/\n<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\n"
        },
        "$:/core/ui/Components/plugin-info": {
            "title": "$:/core/ui/Components/plugin-info",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
        },
        "$:/core/ui/Components/tag-link": {
            "title": "$:/core/ui/Components/tag-link",
            "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
        },
        "$:/core/ui/ControlPanel/Advanced": {
            "title": "$:/core/ui/ControlPanel/Advanced",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
            "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Appearance": {
            "title": "$:/core/ui/ControlPanel/Appearance",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
            "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Basics": {
            "title": "$:/core/ui/ControlPanel/Basics",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Basics/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
        },
        "$:/core/ui/ControlPanel/EditorTypes": {
            "title": "$:/core/ui/ControlPanel/EditorTypes",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/Info": {
            "title": "$:/core/ui/ControlPanel/Info",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Info/Caption}}",
            "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/KeyboardShortcuts": {
            "title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip=<<lingo Remove/Hint>>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n&times;\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/LoadedModules": {
            "title": "$:/core/ui/ControlPanel/LoadedModules",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
        },
        "$:/core/ui/ControlPanel/Modals/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
            "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
            "text": "\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\n</$list>\n</$button>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1><$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<<install-plugin-button>>\n</div>\n</div>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\"\"\">\n<em>\n{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\n</em>\n</$list>\n</div>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<div class=\"tc-plugin-library\">\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n\n<<display-server-connection>>\n</div>\n</$list>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Palette": {
            "title": "$:/core/ui/ControlPanel/Palette",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Palette/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
        },
        "$:/core/ui/ControlPanel/Parsing": {
            "title": "$:/core/ui/ControlPanel/Parsing",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
            "text": "<<display-server-assets language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
            "text": "<<display-server-assets plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
            "text": "<<display-server-assets theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
            "text": "<<plugin-table language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
            "text": "<<plugin-table plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
            "text": "<<plugin-table theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
        },
        "$:/core/ui/ControlPanel/Saving/DownloadSaver": {
            "title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Saving/General": {
            "title": "$:/core/ui/ControlPanel/Saving/General",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
            "list-before": "",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Saving/GitHub": {
            "title": "$:/core/ui/ControlPanel/Saving/GitHub",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/GitLab": {
            "title": "$:/core/ui/ControlPanel/Saving/GitLab",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/TiddlySpot": {
            "title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<backupLink>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Saving/General\">>\n</div>\n"
        },
        "$:/core/buttonstyles/Borderless": {
            "title": "$:/core/buttonstyles/Borderless",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
            "text": "tc-btn-invisible"
        },
        "$:/core/buttonstyles/Boxed": {
            "title": "$:/core/buttonstyles/Boxed",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
            "text": "tc-btn-boxed"
        },
        "$:/core/buttonstyles/Rounded": {
            "title": "$:/core/buttonstyles/Rounded",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
            "text": "tc-btn-rounded"
        },
        "$:/core/ui/ControlPanel/Settings/CamelCase": {
            "title": "$:/core/ui/ControlPanel/Settings/CamelCase",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
            "title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
            "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n  <option value=\"above\"><<lingo \"OpenAbove\">></option>\n  <option value=\"below\"><<lingo \"OpenBelow\">></option>\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/MissingLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationHistory": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
            "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/TitleLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings": {
            "title": "$:/core/ui/ControlPanel/Settings",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Settings/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/StoryView": {
            "title": "$:/core/ui/ControlPanel/StoryView",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
            "text": "{{$:/snippets/viewswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/Stylesheets": {
            "title": "$:/core/ui/ControlPanel/Stylesheets",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
        },
        "$:/core/ui/ControlPanel/Theme": {
            "title": "$:/core/ui/ControlPanel/Theme",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Theme/Caption}}",
            "text": "{{$:/snippets/themeswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/TiddlerFields": {
            "title": "$:/core/ui/ControlPanel/TiddlerFields",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/PageControls": {
            "title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars": {
            "title": "$:/core/ui/ControlPanel/Toolbars",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
            "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-current": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from current",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from shadow (if any)",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/output": {
            "title": "$:/core/ui/EditTemplate/body/preview/output",
            "tags": "$:/tags/EditPreview",
            "caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
            "text": "<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
        },
        "$:/state/showeditpreview": {
            "title": "$:/state/showeditpreview",
            "text": "no"
        },
        "$:/core/ui/EditTemplate/body/editor": {
            "title": "$:/core/ui/EditTemplate/body/editor",
            "text": "<$edit\n\n  field=\"text\"\n  class=\"tc-edit-texteditor\"\n  placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n  tabindex={{$:/config/EditTabIndex}}\n\n><$set\n\n  name=\"targetTiddler\"\n  value=<<currentTiddler>>\n\n><$list\n\n  filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n  type=\"nomatch\"\n  state=<<config-visibility-title>>\n  text=\"hide\"\n  class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n  tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n  mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
        },
        "$:/core/ui/EditTemplate/body/toolbar/button": {
            "title": "$:/core/ui/EditTemplate/body/toolbar/button",
            "text": "\\define toolbar-button-icon()\n<$list\n\n  filter=\"[all[current]!has[custom-icon]]\"\n  variable=\"no-custom-icon\"\n\n><$transclude\n\n  tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n  filter={{!!condition}}\n  variable=\"list-condition\"\n\n><$wikify\n\n  name=\"tooltip-text\"\n  text=<<toolbar-button-tooltip>>\n  mode=\"inline\"\n  output=\"text\"\n\n><$list\n\n  filter=\"[all[current]!has[dropdown]]\"\n  variable=\"no-dropdown\"\n\n><$button\n\n  class=\"tc-btn-invisible $(buttonClasses)$\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button></$list><$list\n\n  filter=\"[all[current]has[dropdown]]\"\n  variable=\"dropdown\"\n\n><$set\n\n  name=\"dropdown-state\"\n  value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n  popup=<<dropdown-state>>\n  class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n  selectedClass=\"tc-selected\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button><$reveal\n\n  state=<<dropdown-state>>\n  type=\"popup\"\n  position=\"below\"\n  animate=\"yes\"\n  tag=\"span\"\n\n><div\n\n  class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n  tiddler={{!!dropdown}}\n  mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n  name=\"buttonClasses\"\n  value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}}></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/controls": {
            "title": "$:/core/ui/EditTemplate/controls",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/fields": {
            "title": "$:/core/ui/EditTemplate/fields",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field()\n<$vars name={{$:/temp/newfieldname}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>&nbsp;\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}/>\n</span>&nbsp;\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>&nbsp;\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/newfieldname\">\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title{$:/temp/newfieldname}sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title{$:/temp/newfieldname}sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</span>&nbsp;\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon)\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/>&nbsp;<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\"/>\n\\end\n\n\\define tag-picker-actions()\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\n</$list>\n</$fieldmangler>\n<$set name=\"tabIndex\" value={{$:/config/EditTabIndex}}>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</$set>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\" tabindex={{$:/config/EditTabIndex}}/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>> data-tiddler-title=<<currentTiddler>>>\n<$fieldmangler>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\n</$fieldmangler>\n</div>\n"
        },
        "$:/core/ui/Buttons/cancel": {
            "title": "$:/core/ui/Buttons/cancel",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
            "description": "{{$:/language/Buttons/Cancel/Hint}}",
            "text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save": {
            "title": "$:/core/ui/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "text": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n"
        },
        "$:/core/ui/EditorToolbar/bold": {
            "title": "$:/core/ui/EditorToolbar/bold",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/bold",
            "caption": "{{$:/language/Buttons/Bold/Caption}}",
            "description": "{{$:/language/Buttons/Bold/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((bold))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/clear-dropdown": {
            "title": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/clear": {
            "title": "$:/core/ui/EditorToolbar/clear",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/erase",
            "caption": "{{$:/language/Buttons/Clear/Caption}}",
            "description": "{{$:/language/Buttons/Clear/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/editor-height-dropdown": {
            "title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
        },
        "$:/core/ui/EditorToolbar/editor-height": {
            "title": "$:/core/ui/EditorToolbar/editor-height",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/fixed-height",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
            "description": "{{$:/language/Buttons/EditorHeight/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
            "dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/excise-dropdown": {
            "title": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/excise": {
            "title": "$:/core/ui/EditorToolbar/excise",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/excise",
            "caption": "{{$:/language/Buttons/Excise/Caption}}",
            "description": "{{$:/language/Buttons/Excise/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
            "shortcuts": "((excise))",
            "dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/heading-1": {
            "title": "$:/core/ui/EditorToolbar/heading-1",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-1",
            "caption": "{{$:/language/Buttons/Heading1/Caption}}",
            "description": "{{$:/language/Buttons/Heading1/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((heading-1))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-2": {
            "title": "$:/core/ui/EditorToolbar/heading-2",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-2",
            "caption": "{{$:/language/Buttons/Heading2/Caption}}",
            "description": "{{$:/language/Buttons/Heading2/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-2))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-3": {
            "title": "$:/core/ui/EditorToolbar/heading-3",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-3",
            "caption": "{{$:/language/Buttons/Heading3/Caption}}",
            "description": "{{$:/language/Buttons/Heading3/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-3))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/core/ui/EditorToolbar/heading-4",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-4",
            "caption": "{{$:/language/Buttons/Heading4/Caption}}",
            "description": "{{$:/language/Buttons/Heading4/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-4))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/core/ui/EditorToolbar/heading-5",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-5",
            "caption": "{{$:/language/Buttons/Heading5/Caption}}",
            "description": "{{$:/language/Buttons/Heading5/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-5))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/core/ui/EditorToolbar/heading-6",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-6",
            "caption": "{{$:/language/Buttons/Heading6/Caption}}",
            "description": "{{$:/language/Buttons/Heading6/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-6))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/italic": {
            "title": "$:/core/ui/EditorToolbar/italic",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/italic",
            "caption": "{{$:/language/Buttons/Italic/Caption}}",
            "description": "{{$:/language/Buttons/Italic/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((italic))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/line-width-dropdown": {
            "title": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/line-width": {
            "title": "$:/core/ui/EditorToolbar/line-width",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/line-width",
            "caption": "{{$:/language/Buttons/LineWidth/Caption}}",
            "description": "{{$:/language/Buttons/LineWidth/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
        },
        "$:/core/ui/EditorToolbar/link-dropdown": {
            "title": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $tiddler=<<dropdown-state>> />\n<$action-deletetiddler $tiddler=<<searchTiddler>> />\n<$action-deletetiddler $tiddler=<<linkTiddler>> />\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"ENTER\" actions=<<add-link-actions>>>\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$keyboard>\n</$vars>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>"
        },
        "$:/core/ui/EditorToolbar/link": {
            "title": "$:/core/ui/EditorToolbar/link",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/link",
            "caption": "{{$:/language/Buttons/Link/Caption}}",
            "description": "{{$:/language/Buttons/Link/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((link))",
            "dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/linkify": {
            "title": "$:/core/ui/EditorToolbar/linkify",
            "caption": "{{$:/language/Buttons/Linkify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Linkify/Hint}}",
            "icon": "$:/core/images/linkify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((linkify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-bullet": {
            "title": "$:/core/ui/EditorToolbar/list-bullet",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-bullet",
            "caption": "{{$:/language/Buttons/ListBullet/Caption}}",
            "description": "{{$:/language/Buttons/ListBullet/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-bullet))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-number": {
            "title": "$:/core/ui/EditorToolbar/list-number",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-number",
            "caption": "{{$:/language/Buttons/ListNumber/Caption}}",
            "description": "{{$:/language/Buttons/ListNumber/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-number))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-block": {
            "title": "$:/core/ui/EditorToolbar/mono-block",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-block",
            "caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
            "description": "{{$:/language/Buttons/MonoBlock/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((mono-block))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-line": {
            "title": "$:/core/ui/EditorToolbar/mono-line",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-line",
            "caption": "{{$:/language/Buttons/MonoLine/Caption}}",
            "description": "{{$:/language/Buttons/MonoLine/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((mono-line))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/more-dropdown": {
            "title": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/more": {
            "title": "$:/core/ui/EditorToolbar/more",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/down-arrow",
            "caption": "{{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "condition": "[<targetTiddler>]",
            "dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/opacity-dropdown": {
            "title": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/opacity": {
            "title": "$:/core/ui/EditorToolbar/opacity",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/opacity",
            "caption": "{{$:/language/Buttons/Opacity/Caption}}",
            "description": "{{$:/language/Buttons/Opacity/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
        },
        "$:/core/ui/EditorToolbar/paint-dropdown": {
            "title": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/paint": {
            "title": "$:/core/ui/EditorToolbar/paint",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/paint",
            "caption": "{{$:/language/Buttons/Paint/Caption}}",
            "description": "{{$:/language/Buttons/Paint/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/picture-dropdown": {
            "title": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/picture": {
            "title": "$:/core/ui/EditorToolbar/picture",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/picture",
            "caption": "{{$:/language/Buttons/Picture/Caption}}",
            "description": "{{$:/language/Buttons/Picture/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((picture))",
            "dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/preview-type-dropdown": {
            "title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
            "text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/preview-type": {
            "title": "$:/core/ui/EditorToolbar/preview-type",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/chevron-down",
            "caption": "{{$:/language/Buttons/PreviewType/Caption}}",
            "description": "{{$:/language/Buttons/PreviewType/Hint}}",
            "condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
            "button-classes": "tc-text-editor-toolbar-item-adjunct",
            "dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
        },
        "$:/core/ui/EditorToolbar/preview": {
            "title": "$:/core/ui/EditorToolbar/preview",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/preview-open",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/Preview/Caption}}",
            "description": "{{$:/language/Buttons/Preview/Hint}}",
            "condition": "[<targetTiddler>]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((preview))",
            "text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/quote": {
            "title": "$:/core/ui/EditorToolbar/quote",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/quote",
            "caption": "{{$:/language/Buttons/Quote/Caption}}",
            "description": "{{$:/language/Buttons/Quote/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((quote))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/rotate-left": {
            "title": "$:/core/ui/EditorToolbar/rotate-left",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/rotate-left",
            "caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
            "description": "{{$:/language/Buttons/RotateLeft/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/size-dropdown": {
            "title": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> &times; <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/size": {
            "title": "$:/core/ui/EditorToolbar/size",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/size",
            "caption": "{{$:/language/Buttons/Size/Caption}}",
            "description": "{{$:/language/Buttons/Size/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/stamp-dropdown": {
            "title": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$view tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" mode=\"inline\"/>\n\n</$view>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
        },
        "$:/core/ui/EditorToolbar/stamp": {
            "title": "$:/core/ui/EditorToolbar/stamp",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/stamp",
            "caption": "{{$:/language/Buttons/Stamp/Caption}}",
            "description": "{{$:/language/Buttons/Stamp/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
            "shortcuts": "((stamp))",
            "dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/strikethrough": {
            "title": "$:/core/ui/EditorToolbar/strikethrough",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/strikethrough",
            "caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
            "description": "{{$:/language/Buttons/Strikethrough/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((strikethrough))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/subscript": {
            "title": "$:/core/ui/EditorToolbar/subscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/subscript",
            "caption": "{{$:/language/Buttons/Subscript/Caption}}",
            "description": "{{$:/language/Buttons/Subscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((subscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/superscript": {
            "title": "$:/core/ui/EditorToolbar/superscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/superscript",
            "caption": "{{$:/language/Buttons/Superscript/Caption}}",
            "description": "{{$:/language/Buttons/Superscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((superscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/transcludify": {
            "title": "$:/core/ui/EditorToolbar/transcludify",
            "caption": "{{$:/language/Buttons/Transcludify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Transcludify/Hint}}",
            "icon": "$:/core/images/transcludify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((transcludify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/underline": {
            "title": "$:/core/ui/EditorToolbar/underline",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/underline",
            "caption": "{{$:/language/Buttons/Underline/Caption}}",
            "description": "{{$:/language/Buttons/Underline/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((underline))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
        },
        "$:/core/Filters/AllTags": {
            "title": "$:/core/Filters/AllTags",
            "tags": "$:/tags/Filter",
            "filter": "[tags[]!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTags}}",
            "text": ""
        },
        "$:/core/Filters/AllTiddlers": {
            "title": "$:/core/Filters/AllTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/Drafts": {
            "title": "$:/core/Filters/Drafts",
            "tags": "$:/tags/Filter",
            "filter": "[has[draft.of]sort[title]]",
            "description": "{{$:/language/Filters/Drafts}}",
            "text": ""
        },
        "$:/core/Filters/Missing": {
            "title": "$:/core/Filters/Missing",
            "tags": "$:/tags/Filter",
            "filter": "[all[missing]sort[title]]",
            "description": "{{$:/language/Filters/Missing}}",
            "text": ""
        },
        "$:/core/Filters/Orphans": {
            "title": "$:/core/Filters/Orphans",
            "tags": "$:/tags/Filter",
            "filter": "[all[orphans]sort[title]]",
            "description": "{{$:/language/Filters/Orphans}}",
            "text": ""
        },
        "$:/core/Filters/OverriddenShadowTiddlers": {
            "title": "$:/core/Filters/OverriddenShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[shadow]]",
            "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentSystemTiddlers": {
            "title": "$:/core/Filters/RecentSystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentSystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentTiddlers": {
            "title": "$:/core/Filters/RecentTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/SessionTiddlers": {
            "title": "$:/core/Filters/SessionTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[haschanged[]]",
            "description": "{{$:/language/Filters/SessionTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/StoryList": {
            "title": "$:/core/Filters/StoryList",
            "tags": "$:/tags/Filter",
            "filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
            "description": "{{$:/language/Filters/StoryList}}",
            "text": ""
        },
        "$:/core/Filters/SystemTags": {
            "title": "$:/core/Filters/SystemTags",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTags}}",
            "text": ""
        },
        "$:/core/Filters/SystemTiddlers": {
            "title": "$:/core/Filters/SystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/TypedTiddlers": {
            "title": "$:/core/Filters/TypedTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Filters/TypedTiddlers}}",
            "text": ""
        },
        "$:/core/ui/ImportListing": {
            "title": "$:/core/ui/ImportListing",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table>\n<tbody>\n<tr>\n<th>\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" stateTitle=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Diff": {
            "title": "$:/core/ui/ImportPreviews/Diff",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Diff}}",
            "text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
        },
        "$:/core/ui/ImportPreviews/DiffFields": {
            "title": "$:/core/ui/ImportPreviews/DiffFields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
            "text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
        },
        "$:/core/ui/ImportPreviews/Fields": {
            "title": "$:/core/ui/ImportPreviews/Fields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Fields}}",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Text": {
            "title": "$:/core/ui/ImportPreviews/Text",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Text}}",
            "text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
        },
        "$:/core/ui/ImportPreviews/TextRaw": {
            "title": "$:/core/ui/ImportPreviews/TextRaw",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
            "text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
        },
        "$:/core/ui/KeyboardShortcuts/advanced-search": {
            "title": "$:/core/ui/KeyboardShortcuts/advanced-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((advanced-search))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\"/>\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-image": {
            "title": "$:/core/ui/KeyboardShortcuts/new-image",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-image))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-journal": {
            "title": "$:/core/ui/KeyboardShortcuts/new-journal",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-journal))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-tiddler": {
            "title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-tiddler))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/sidebar-search": {
            "title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((sidebar-search))",
            "text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
        },
        "$:/core/ui/KeyboardShortcut/toggle-sidebar": {
            "title": "$:/core/ui/KeyboardShortcut/toggle-sidebar",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((toggle-sidebar))",
            "text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
        },
        "$:/Manager/ItemMain/Fields": {
            "title": "$:/Manager/ItemMain/Fields",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/Fields}}",
            "text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/Manager/ItemMain/RawText": {
            "title": "$:/Manager/ItemMain/RawText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/RawText}}",
            "text": "<pre><code><$view/></code></pre>\n"
        },
        "$:/Manager/ItemMain/WikifiedText": {
            "title": "$:/Manager/ItemMain/WikifiedText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/WikifiedText}}",
            "text": "<$transclude mode=\"block\"/>\n"
        },
        "$:/Manager/ItemSidebar/Colour": {
            "title": "$:/Manager/ItemSidebar/Colour",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Colour}}",
            "text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Icon": {
            "title": "$:/Manager/ItemSidebar/Icon",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Icon}}",
            "text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tags": {
            "title": "$:/Manager/ItemSidebar/Tags",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tags}}",
            "text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tools": {
            "title": "$:/Manager/ItemSidebar/Tools",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tools}}",
            "text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
        },
        "$:/Manager": {
            "title": "$:/Manager",
            "icon": "$:/core/images/list",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
        },
        "$:/core/ui/MissingTemplate": {
            "title": "$:/core/ui/MissingTemplate",
            "text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
        },
        "$:/core/ui/MoreSideBar/All": {
            "title": "$:/core/ui/MoreSideBar/All",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/All/Caption}}",
            "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Drafts": {
            "title": "$:/core/ui/MoreSideBar/Drafts",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Drafts/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Explorer": {
            "title": "$:/core/ui/MoreSideBar/Explorer",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Explorer/Caption}}",
            "text": "<<tree \"$:/\">>\n"
        },
        "$:/core/ui/MoreSideBar/Missing": {
            "title": "$:/core/ui/MoreSideBar/Missing",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Missing/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Orphans": {
            "title": "$:/core/ui/MoreSideBar/Orphans",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Orphans/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Plugins/Plugins\">>\n"
        },
        "$:/core/ui/MoreSideBar/Recent": {
            "title": "$:/core/ui/MoreSideBar/Recent",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Shadows": {
            "title": "$:/core/ui/MoreSideBar/Shadows",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Shadows/Caption}}",
            "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/System": {
            "title": "$:/core/ui/MoreSideBar/System",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/System/Caption}}",
            "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Tags": {
            "title": "$:/core/ui/MoreSideBar/Tags",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Tags/Caption}}",
            "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
        },
        "$:/core/ui/MoreSideBar/Types": {
            "title": "$:/core/ui/MoreSideBar/Types",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Types/Caption}}",
            "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Languages": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Languages",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Theme": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Theme",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/Buttons/advanced-search": {
            "title": "$:/core/ui/Buttons/advanced-search",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
            "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/close-all": {
            "title": "$:/core/ui/Buttons/close-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
            "description": "{{$:/language/Buttons/CloseAll/Hint}}",
            "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/control-panel": {
            "title": "$:/core/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/encryption": {
            "title": "$:/core/ui/Buttons/encryption",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
            "description": "{{$:/language/Buttons/Encryption/Hint}}",
            "text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
        },
        "$:/core/ui/Buttons/export-page": {
            "title": "$:/core/ui/Buttons/export-page",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
            "description": "{{$:/language/Buttons/ExportPage/Hint}}",
            "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
        },
        "$:/core/ui/Buttons/fold-all": {
            "title": "$:/core/ui/Buttons/fold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
            "description": "{{$:/language/Buttons/FoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/full-screen": {
            "title": "$:/core/ui/Buttons/full-screen",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
            "description": "{{$:/language/Buttons/FullScreen/Hint}}",
            "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/home": {
            "title": "$:/core/ui/Buttons/home",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
            "description": "{{$:/language/Buttons/Home/Hint}}",
            "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/import": {
            "title": "$:/core/ui/Buttons/import",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
            "description": "{{$:/language/Buttons/Import/Hint}}",
            "text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
        },
        "$:/core/ui/Buttons/language": {
            "title": "$:/core/ui/Buttons/language",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
            "description": "{{$:/language/Buttons/Language/Hint}}",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/manager": {
            "title": "$:/core/ui/Buttons/manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
            "description": "{{$:/language/Buttons/Manager/Hint}}",
            "text": "\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/core/ui/Buttons/more-page-actions",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-image": {
            "title": "$:/core/ui/Buttons/new-image",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
            "description": "{{$:/language/Buttons/NewImage/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/new-journal": {
            "title": "$:/core/ui/Buttons/new-journal",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
            "description": "{{$:/language/Buttons/NewJournal/Hint}}",
            "text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
        },
        "$:/core/ui/Buttons/new-tiddler": {
            "title": "$:/core/ui/Buttons/new-tiddler",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "text": "<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/palette": {
            "title": "$:/core/ui/Buttons/palette",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
            "description": "{{$:/language/Buttons/Palette/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/print": {
            "title": "$:/core/ui/Buttons/print",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
            "description": "{{$:/language/Buttons/Print/Hint}}",
            "text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/refresh": {
            "title": "$:/core/ui/Buttons/refresh",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
            "description": "{{$:/language/Buttons/Refresh/Hint}}",
            "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save-wiki": {
            "title": "$:/core/ui/Buttons/save-wiki",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
            "description": "{{$:/language/Buttons/SaveWiki/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
        },
        "$:/core/ui/Buttons/storyview": {
            "title": "$:/core/ui/Buttons/storyview",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
            "description": "{{$:/language/Buttons/StoryView/Hint}}",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/tag-manager": {
            "title": "$:/core/ui/Buttons/tag-manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
            "description": "{{$:/language/Buttons/TagManager/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/theme": {
            "title": "$:/core/ui/Buttons/theme",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
            "description": "{{$:/language/Buttons/Theme/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/timestamp": {
            "title": "$:/core/ui/Buttons/timestamp",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
            "description": "{{$:/language/Buttons/Timestamp/Hint}}",
            "text": "<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
        },
        "$:/core/ui/Buttons/unfold-all": {
            "title": "$:/core/ui/Buttons/unfold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
            "description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/PageTemplate/alerts": {
            "title": "$:/core/ui/PageTemplate/alerts",
            "tags": "$:/tags/PageTemplate",
            "text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
        },
        "$:/core/ui/PageTemplate/drafts": {
            "title": "$:/core/ui/PageTemplate/drafts",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/PageTemplate/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/PageTemplate/sidebar": {
            "title": "$:/core/ui/PageTemplate/sidebar",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"  tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
        },
        "$:/core/ui/PageTemplate/topleftbar": {
            "title": "$:/core/ui/PageTemplate/topleftbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate/toprightbar": {
            "title": "$:/core/ui/PageTemplate/toprightbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/PaletteManager": {
            "title": "$:/PaletteManager",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}&nbsp;<$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}&nbsp;<$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip=<<lingo Delete/Hint>> aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\">&nbsp;<<lingo Names/External/Show>></$checkbox>\n\n<<palette-manager-table>>\n"
        },
        "$:/core/ui/PluginInfo": {
            "title": "$:/core/ui/PluginInfo",
            "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
        },
        "$:/core/ui/PluginInfo/Default/contents": {
            "title": "$:/core/ui/PluginInfo/Default/contents",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n"
        },
        "$:/core/ui/PluginListItemTemplate": {
            "title": "$:/core/ui/PluginListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"description\">\n<$view field=\"title\"/>\n</$view>\n</$link>\n</div>"
        },
        "$:/core/ui/SearchResults": {
            "title": "$:/core/ui/SearchResults",
            "text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
        },
        "$:/core/ui/SideBar/More": {
            "title": "$:/core/ui/SideBar/More",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/More/Caption}}",
            "text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical\" />\n</div>"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">{{$:/core/images/close-button}}</$button>&nbsp;<$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
        },
        "$:/core/ui/SideBar/Recent": {
            "title": "$:/core/ui/SideBar/Recent",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/SideBar/Tools": {
            "title": "$:/core/ui/SideBar/Tools",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/SideBarLists": {
            "title": "$:/core/ui/SideBarLists",
            "text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
        },
        "$:/core/ui/SideBarSegments/page-controls": {
            "title": "$:/core/ui/SideBarSegments/page-controls",
            "tags": "$:/tags/SideBarSegment",
            "text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
        },
        "$:/core/ui/SideBarSegments/search": {
            "title": "$:/core/ui/SideBarSegments/search",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"searchTerm\" value={{{ [<searchTiddler>get[text]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search<searchTerm>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$set>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-subtitle": {
            "title": "$:/core/ui/SideBarSegments/site-subtitle",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-title": {
            "title": "$:/core/ui/SideBarSegments/site-title",
            "tags": "$:/tags/SideBarSegment",
            "text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
        },
        "$:/core/ui/SideBarSegments/tabs": {
            "title": "$:/core/ui/SideBarSegments/tabs",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n</div>\n"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
        },
        "$:/core/ui/TiddlerFieldTemplate": {
            "title": "$:/core/ui/TiddlerFieldTemplate",
            "text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
        },
        "$:/core/ui/TiddlerFields": {
            "title": "$:/core/ui/TiddlerFields",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced": {
            "title": "$:/core/ui/TiddlerInfo/Advanced",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
            "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Fields": {
            "title": "$:/core/ui/TiddlerInfo/Fields",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
            "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/List": {
            "title": "$:/core/ui/TiddlerInfo/List",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/List/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Listed": {
            "title": "$:/core/ui/TiddlerInfo/Listed",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/References": {
            "title": "$:/core/ui/TiddlerInfo/References",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/References/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
        },
        "$:/core/ui/TiddlerInfo/Tagging": {
            "title": "$:/core/ui/TiddlerInfo/Tagging",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Tools": {
            "title": "$:/core/ui/TiddlerInfo/Tools",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo": {
            "title": "$:/core/ui/TiddlerInfo",
            "text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\n"
        },
        "$:/core/ui/UntaggedTemplate": {
            "title": "$:/core/ui/UntaggedTemplate",
            "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/body": {
            "title": "$:/core/ui/ViewTemplate/body",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/classic": {
            "title": "$:/core/ui/ViewTemplate/classic",
            "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/import": {
            "title": "$:/core/ui/ViewTemplate/import",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate/unfold": {
            "title": "$:/core/ui/ViewTemplate/unfold",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
        },
        "$:/core/ui/Buttons/clone": {
            "title": "$:/core/ui/Buttons/clone",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
            "description": "{{$:/language/Buttons/Clone/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close-others": {
            "title": "$:/core/ui/Buttons/close-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
            "description": "{{$:/language/Buttons/CloseOthers/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close": {
            "title": "$:/core/ui/Buttons/close",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
            "description": "{{$:/language/Buttons/Close/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/edit": {
            "title": "$:/core/ui/Buttons/edit",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
            "description": "{{$:/language/Buttons/Edit/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/core/ui/Buttons/export-tiddler",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
            "description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
            "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
        },
        "$:/core/ui/Buttons/fold-bar": {
            "title": "$:/core/ui/Buttons/fold-bar",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
            "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
            "text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
        },
        "$:/core/ui/Buttons/fold-others": {
            "title": "$:/core/ui/Buttons/fold-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
            "description": "{{$:/language/Buttons/FoldOthers/Hint}}",
            "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/fold": {
            "title": "$:/core/ui/Buttons/fold",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
            "description": "{{$:/language/Buttons/Fold/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
        },
        "$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/core/ui/Buttons/more-tiddler-actions",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-here": {
            "title": "$:/core/ui/Buttons/new-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
            "description": "{{$:/language/Buttons/NewHere/Hint}}",
            "text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
        },
        "$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/core/ui/Buttons/new-journal-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
            "description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
            "text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>"
        },
        "$:/core/ui/Buttons/open-window": {
            "title": "$:/core/ui/Buttons/open-window",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
            "description": "{{$:/language/Buttons/OpenWindow/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permalink": {
            "title": "$:/core/ui/Buttons/permalink",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
            "description": "{{$:/language/Buttons/Permalink/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permaview": {
            "title": "$:/core/ui/Buttons/permaview",
            "tags": "$:/tags/ViewToolbar $:/tags/PageControls",
            "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
            "description": "{{$:/language/Buttons/Permaview/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/DefaultTiddlers": {
            "title": "$:/DefaultTiddlers",
            "text": "GettingStarted\n"
        },
        "$:/temp/advancedsearch": {
            "title": "$:/temp/advancedsearch",
            "text": ""
        },
        "$:/snippets/allfields": {
            "title": "$:/snippets/allfields",
            "text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
        },
        "$:/config/AnimationDuration": {
            "title": "$:/config/AnimationDuration",
            "text": "400"
        },
        "$:/config/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#444"
        },
        "$:/config/BitmapEditor/ImageSizes": {
            "title": "$:/config/BitmapEditor/ImageSizes",
            "text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3px"
        },
        "$:/config/BitmapEditor/LineWidths": {
            "title": "$:/config/BitmapEditor/LineWidths",
            "text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
        },
        "$:/config/BitmapEditor/Opacities": {
            "title": "$:/config/BitmapEditor/Opacities",
            "text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
        },
        "$:/config/BitmapEditor/Opacity": {
            "title": "$:/config/BitmapEditor/Opacity",
            "text": "1.0"
        },
        "$:/config/DefaultMoreSidebarTab": {
            "title": "$:/config/DefaultMoreSidebarTab",
            "text": "$:/core/ui/MoreSideBar/Tags"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/DownloadSaver/AutoSave": {
            "title": "$:/config/DownloadSaver/AutoSave",
            "text": "no"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/config/EditTemplateFields/Visibility/title": {
            "title": "$:/config/EditTemplateFields/Visibility/title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/tags": {
            "title": "$:/config/EditTemplateFields/Visibility/tags",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/text": {
            "title": "$:/config/EditTemplateFields/Visibility/text",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/creator": {
            "title": "$:/config/EditTemplateFields/Visibility/creator",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/created": {
            "title": "$:/config/EditTemplateFields/Visibility/created",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modified": {
            "title": "$:/config/EditTemplateFields/Visibility/modified",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modifier": {
            "title": "$:/config/EditTemplateFields/Visibility/modifier",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/type": {
            "title": "$:/config/EditTemplateFields/Visibility/type",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.title": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.of": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.of",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/revision": {
            "title": "$:/config/EditTemplateFields/Visibility/revision",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/bag": {
            "title": "$:/config/EditTemplateFields/Visibility/bag",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
            "text": "hide"
        },
        "$:/config/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/webp": {
            "title": "$:/config/EditorTypeMappings/image/webp",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heic": {
            "title": "$:/config/EditorTypeMappings/image/heic",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heif": {
            "title": "$:/config/EditorTypeMappings/image/heif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpeg": {
            "title": "$:/config/EditorTypeMappings/image/jpeg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpg": {
            "title": "$:/config/EditorTypeMappings/image/jpg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/png": {
            "title": "$:/config/EditorTypeMappings/image/png",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/x-icon": {
            "title": "$:/config/EditorTypeMappings/image/x-icon",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "text"
        },
        "$:/config/Manager/Show": {
            "title": "$:/config/Manager/Show",
            "text": "tiddlers"
        },
        "$:/config/Manager/Filter": {
            "title": "$:/config/Manager/Filter",
            "text": ""
        },
        "$:/config/Manager/Order": {
            "title": "$:/config/Manager/Order",
            "text": "forward"
        },
        "$:/config/Manager/Sort": {
            "title": "$:/config/Manager/Sort",
            "text": "title"
        },
        "$:/config/Manager/System": {
            "title": "$:/config/Manager/System",
            "text": "system"
        },
        "$:/config/Manager/Tag": {
            "title": "$:/config/Manager/Tag",
            "text": ""
        },
        "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
            "title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
            "text": "hide"
        },
        "$:/config/MissingLinks": {
            "title": "$:/config/MissingLinks",
            "text": "yes"
        },
        "$:/config/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/NewImageType": {
            "title": "$:/config/NewImageType",
            "text": "jpeg"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "https://tiddlywiki.com/library/v5.1.21/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
        },
        "$:/config/Navigation/openLinkFromInsideRiver": {
            "title": "$:/config/Navigation/openLinkFromInsideRiver",
            "text": "below"
        },
        "$:/config/Navigation/openLinkFromOutsideRiver": {
            "title": "$:/config/Navigation/openLinkFromOutsideRiver",
            "text": "top"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
            "text": "hide"
        },
        "$:/config/Performance/Instrumentation": {
            "title": "$:/config/Performance/Instrumentation",
            "text": "no"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/Search/MinLength": {
            "title": "$:/config/Search/MinLength",
            "text": "3"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/ShortcutInfo/advanced-search": {
            "title": "$:/config/ShortcutInfo/advanced-search",
            "text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/bold": {
            "title": "$:/config/ShortcutInfo/bold",
            "text": "{{$:/language/Buttons/Bold/Hint}}"
        },
        "$:/config/ShortcutInfo/cancel-edit-tiddler": {
            "title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
            "text": "{{$:/language/Buttons/Cancel/Hint}}"
        },
        "$:/config/ShortcutInfo/excise": {
            "title": "$:/config/ShortcutInfo/excise",
            "text": "{{$:/language/Buttons/Excise/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-1": {
            "title": "$:/config/ShortcutInfo/heading-1",
            "text": "{{$:/language/Buttons/Heading1/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-2": {
            "title": "$:/config/ShortcutInfo/heading-2",
            "text": "{{$:/language/Buttons/Heading2/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-3": {
            "title": "$:/config/ShortcutInfo/heading-3",
            "text": "{{$:/language/Buttons/Heading3/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-4": {
            "title": "$:/config/ShortcutInfo/heading-4",
            "text": "{{$:/language/Buttons/Heading4/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-5": {
            "title": "$:/config/ShortcutInfo/heading-5",
            "text": "{{$:/language/Buttons/Heading5/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-6": {
            "title": "$:/config/ShortcutInfo/heading-6",
            "text": "{{$:/language/Buttons/Heading6/Hint}}"
        },
        "$:/config/ShortcutInfo/italic": {
            "title": "$:/config/ShortcutInfo/italic",
            "text": "{{$:/language/Buttons/Italic/Hint}}"
        },
        "$:/config/ShortcutInfo/link": {
            "title": "$:/config/ShortcutInfo/link",
            "text": "{{$:/language/Buttons/Link/Hint}}"
        },
        "$:/config/ShortcutInfo/list-bullet": {
            "title": "$:/config/ShortcutInfo/list-bullet",
            "text": "{{$:/language/Buttons/ListBullet/Hint}}"
        },
        "$:/config/ShortcutInfo/list-number": {
            "title": "$:/config/ShortcutInfo/list-number",
            "text": "{{$:/language/Buttons/ListNumber/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-block": {
            "title": "$:/config/ShortcutInfo/mono-block",
            "text": "{{$:/language/Buttons/MonoBlock/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-line": {
            "title": "$:/config/ShortcutInfo/mono-line",
            "text": "{{$:/language/Buttons/MonoLine/Hint}}"
        },
        "$:/config/ShortcutInfo/new-image": {
            "title": "$:/config/ShortcutInfo/new-image",
            "text": "{{$:/language/Buttons/NewImage/Hint}}"
        },
        "$:/config/ShortcutInfo/new-journal": {
            "title": "$:/config/ShortcutInfo/new-journal",
            "text": "{{$:/language/Buttons/NewJournal/Hint}}"
        },
        "$:/config/ShortcutInfo/new-tiddler": {
            "title": "$:/config/ShortcutInfo/new-tiddler",
            "text": "{{$:/language/Buttons/NewTiddler/Hint}}"
        },
        "$:/config/ShortcutInfo/picture": {
            "title": "$:/config/ShortcutInfo/picture",
            "text": "{{$:/language/Buttons/Picture/Hint}}"
        },
        "$:/config/ShortcutInfo/preview": {
            "title": "$:/config/ShortcutInfo/preview",
            "text": "{{$:/language/Buttons/Preview/Hint}}"
        },
        "$:/config/ShortcutInfo/quote": {
            "title": "$:/config/ShortcutInfo/quote",
            "text": "{{$:/language/Buttons/Quote/Hint}}"
        },
        "$:/config/ShortcutInfo/save-tiddler": {
            "title": "$:/config/ShortcutInfo/save-tiddler",
            "text": "{{$:/language/Buttons/Save/Hint}}"
        },
        "$:/config/ShortcutInfo/sidebar-search": {
            "title": "$:/config/ShortcutInfo/sidebar-search",
            "text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/stamp": {
            "title": "$:/config/ShortcutInfo/stamp",
            "text": "{{$:/language/Buttons/Stamp/Hint}}"
        },
        "$:/config/ShortcutInfo/strikethrough": {
            "title": "$:/config/ShortcutInfo/strikethrough",
            "text": "{{$:/language/Buttons/Strikethrough/Hint}}"
        },
        "$:/config/ShortcutInfo/subscript": {
            "title": "$:/config/ShortcutInfo/subscript",
            "text": "{{$:/language/Buttons/Subscript/Hint}}"
        },
        "$:/config/ShortcutInfo/superscript": {
            "title": "$:/config/ShortcutInfo/superscript",
            "text": "{{$:/language/Buttons/Superscript/Hint}}"
        },
        "$:/config/ShortcutInfo/toggle-sidebar": {
            "title": "$:/config/ShortcutInfo/toggle-sidebar",
            "text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
        },
        "$:/config/ShortcutInfo/underline": {
            "title": "$:/config/ShortcutInfo/underline",
            "text": "{{$:/language/Buttons/Underline/Hint}}"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Tags/MinLength": {
            "title": "$:/config/Tags/MinLength",
            "text": "0"
        },
        "$:/config/TextEditor/EditorHeight/Height": {
            "title": "$:/config/TextEditor/EditorHeight/Height",
            "text": "400px"
        },
        "$:/config/TextEditor/EditorHeight/Mode": {
            "title": "$:/config/TextEditor/EditorHeight/Mode",
            "text": "auto"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/config/TiddlerInfo/Mode": {
            "title": "$:/config/TiddlerInfo/Mode",
            "text": "popup"
        },
        "$:/config/Tiddlers/TitleLinks": {
            "title": "$:/config/Tiddlers/TitleLinks",
            "text": "no"
        },
        "$:/config/Toolbar/ButtonClass": {
            "title": "$:/config/Toolbar/ButtonClass",
            "text": "tc-btn-invisible"
        },
        "$:/config/Toolbar/Icons": {
            "title": "$:/config/Toolbar/Icons",
            "text": "yes"
        },
        "$:/config/Toolbar/Text": {
            "title": "$:/config/Toolbar/Text",
            "text": "no"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
            "text": "show"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
            "text": "hide"
        },
        "$:/config/shortcuts-mac/bold": {
            "title": "$:/config/shortcuts-mac/bold",
            "text": "meta-B"
        },
        "$:/config/shortcuts-mac/italic": {
            "title": "$:/config/shortcuts-mac/italic",
            "text": "meta-I"
        },
        "$:/config/shortcuts-mac/underline": {
            "title": "$:/config/shortcuts-mac/underline",
            "text": "meta-U"
        },
        "$:/config/shortcuts-mac/new-image": {
            "title": "$:/config/shortcuts-mac/new-image",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-mac/new-journal": {
            "title": "$:/config/shortcuts-mac/new-journal",
            "text": "ctrl-J"
        },
        "$:/config/shortcuts-mac/new-tiddler": {
            "title": "$:/config/shortcuts-mac/new-tiddler",
            "text": "ctrl-N"
        },
        "$:/config/shortcuts-not-mac/bold": {
            "title": "$:/config/shortcuts-not-mac/bold",
            "text": "ctrl-B"
        },
        "$:/config/shortcuts-not-mac/italic": {
            "title": "$:/config/shortcuts-not-mac/italic",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-not-mac/underline": {
            "title": "$:/config/shortcuts-not-mac/underline",
            "text": "ctrl-U"
        },
        "$:/config/shortcuts-not-mac/new-image": {
            "title": "$:/config/shortcuts-not-mac/new-image",
            "text": "alt-I"
        },
        "$:/config/shortcuts-not-mac/new-journal": {
            "title": "$:/config/shortcuts-not-mac/new-journal",
            "text": "alt-J"
        },
        "$:/config/shortcuts-not-mac/new-tiddler": {
            "title": "$:/config/shortcuts-not-mac/new-tiddler",
            "text": "alt-N"
        },
        "$:/config/shortcuts/advanced-search": {
            "title": "$:/config/shortcuts/advanced-search",
            "text": "ctrl-shift-A"
        },
        "$:/config/shortcuts/cancel-edit-tiddler": {
            "title": "$:/config/shortcuts/cancel-edit-tiddler",
            "text": "escape"
        },
        "$:/config/shortcuts/excise": {
            "title": "$:/config/shortcuts/excise",
            "text": "ctrl-E"
        },
        "$:/config/shortcuts/sidebar-search": {
            "title": "$:/config/shortcuts/sidebar-search",
            "text": "ctrl-shift-F"
        },
        "$:/config/shortcuts/heading-1": {
            "title": "$:/config/shortcuts/heading-1",
            "text": "ctrl-1"
        },
        "$:/config/shortcuts/heading-2": {
            "title": "$:/config/shortcuts/heading-2",
            "text": "ctrl-2"
        },
        "$:/config/shortcuts/heading-3": {
            "title": "$:/config/shortcuts/heading-3",
            "text": "ctrl-3"
        },
        "$:/config/shortcuts/heading-4": {
            "title": "$:/config/shortcuts/heading-4",
            "text": "ctrl-4"
        },
        "$:/config/shortcuts/heading-5": {
            "title": "$:/config/shortcuts/heading-5",
            "text": "ctrl-5"
        },
        "$:/config/shortcuts/heading-6": {
            "title": "$:/config/shortcuts/heading-6",
            "text": "ctrl-6"
        },
        "$:/config/shortcuts/link": {
            "title": "$:/config/shortcuts/link",
            "text": "ctrl-L"
        },
        "$:/config/shortcuts/linkify": {
            "title": "$:/config/shortcuts/linkify",
            "text": "alt-shift-L"
        },
        "$:/config/shortcuts/list-bullet": {
            "title": "$:/config/shortcuts/list-bullet",
            "text": "ctrl-shift-L"
        },
        "$:/config/shortcuts/list-number": {
            "title": "$:/config/shortcuts/list-number",
            "text": "ctrl-shift-N"
        },
        "$:/config/shortcuts/mono-block": {
            "title": "$:/config/shortcuts/mono-block",
            "text": "ctrl-shift-M"
        },
        "$:/config/shortcuts/mono-line": {
            "title": "$:/config/shortcuts/mono-line",
            "text": "ctrl-M"
        },
        "$:/config/shortcuts/picture": {
            "title": "$:/config/shortcuts/picture",
            "text": "ctrl-shift-I"
        },
        "$:/config/shortcuts/preview": {
            "title": "$:/config/shortcuts/preview",
            "text": "alt-P"
        },
        "$:/config/shortcuts/quote": {
            "title": "$:/config/shortcuts/quote",
            "text": "ctrl-Q"
        },
        "$:/config/shortcuts/save-tiddler": {
            "title": "$:/config/shortcuts/save-tiddler",
            "text": "ctrl+enter"
        },
        "$:/config/shortcuts/stamp": {
            "title": "$:/config/shortcuts/stamp",
            "text": "ctrl-S"
        },
        "$:/config/shortcuts/strikethrough": {
            "title": "$:/config/shortcuts/strikethrough",
            "text": "ctrl-T"
        },
        "$:/config/shortcuts/subscript": {
            "title": "$:/config/shortcuts/subscript",
            "text": "ctrl-shift-B"
        },
        "$:/config/shortcuts/superscript": {
            "title": "$:/config/shortcuts/superscript",
            "text": "ctrl-shift-P"
        },
        "$:/config/shortcuts/toggle-sidebar": {
            "title": "$:/config/shortcuts/toggle-sidebar",
            "text": "alt-shift-S"
        },
        "$:/config/shortcuts/transcludify": {
            "title": "$:/config/shortcuts/transcludify",
            "text": "alt-shift-T"
        },
        "$:/config/ui/EditTemplate": {
            "title": "$:/config/ui/EditTemplate",
            "text": "$:/core/ui/EditTemplate"
        },
        "$:/config/ui/ViewTemplate": {
            "title": "$:/config/ui/ViewTemplate",
            "text": "$:/core/ui/ViewTemplate"
        },
        "$:/config/WikiParserRules/Inline/wikilink": {
            "title": "$:/config/WikiParserRules/Inline/wikilink",
            "text": "enable"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}\n><div class=\"tc-swatch\" style=<<swatchStyle>> title=<<colour>>/></$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>"
        },
        "$:/snippets/download-wiki-button": {
            "title": "$:/snippets/download-wiki-button",
            "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
        },
        "$:/language": {
            "title": "$:/language",
            "text": "$:/languages/en-GB"
        },
        "$:/snippets/languageswitcher": {
            "title": "$:/snippets/languageswitcher",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/macros/CSS": {
            "title": "$:/core/macros/CSS",
            "tags": "$:/tags/Macro",
            "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n  -webkit-box-shadow: $shadow$;\n     -moz-box-shadow: $shadow$;\n          box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n  -webkit-filter: $filter$;\n     -moz-filter: $filter$;\n          filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n  -webkit-transition: $transition$;\n     -moz-transition: $transition$;\n          transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n  -webkit-transform-origin: $origin$;\n     -moz-transform-origin: $origin$;\n          transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
        },
        "$:/core/macros/colour-picker": {
            "title": "$:/core/macros/colour-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<div style=\"background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/> \n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
        },
        "$:/core/macros/copy-to-clipboard": {
            "title": "$:/core/macros/copy-to-clipboard",
            "tags": "$:/tags/Macro",
            "text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
        },
        "$:/core/macros/diff": {
            "title": "$:/core/macros/diff",
            "tags": "$:/tags/Macro",
            "text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
        },
        "$:/core/macros/dumpvariables": {
            "title": "$:/core/macros/dumpvariables",
            "tags": "$:/tags/Macro",
            "text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
        },
        "$:/core/macros/export": {
            "title": "$:/core/macros/export",
            "tags": "$:/tags/Macro",
            "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
        },
        "$:/core/macros/image-picker": {
            "title": "$:/core/macros/image-picker",
            "created": "20170715180840889",
            "modified": "20170715180914005",
            "tags": "$:/tags/Macro",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
        },
        "$:/core/macros/lingo": {
            "title": "$:/core/macros/lingo",
            "tags": "$:/tags/Macro",
            "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
        },
        "$:/core/macros/list": {
            "title": "$:/core/macros/list",
            "tags": "$:/tags/Macro",
            "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\">\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n</$type$>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\">\n<div class=\"tc-droppable-placeholder\">\n&nbsp;\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\">\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\">\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tag-picker": {
            "title": "$:/core/macros/tag-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\">\n$(actions)$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$button>\n\\end\n\n\\define tag-picker(actions)\n<$set name=\"actions\" value=\"\"\"$actions$\"\"\">\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$keyboard key=\"ENTER\" actions=<<add-tag-actions>>>\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>>/>\n</$keyboard>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$set name=\"tag\" value={{$:/temp/NewTagName}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n$actions$\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$list filter=\"[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n<hr>\n<$list filter=\"[{$:/temp/NewTagName}minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n</div>\n</$reveal>\n</div>\n</$set>\n\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/> <$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbnails": {
            "title": "$:/core/macros/thumbnails",
            "tags": "$:/tags/Macro",
            "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
        },
        "$:/core/macros/timeline": {
            "title": "$:/core/macros/timeline",
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "text": "\\define timeline-title()\n<!-- Override this macro with a global macro \n     of the same name if you need to change \n     how titles are displayed on the timeline \n     -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}>\n<<timeline-title>>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
        },
        "$:/core/macros/toc": {
            "title": "$:/core/macros/toc",
            "tags": "$:/tags/Macro",
            "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n  <$transclude field=\"caption\">\n    <$view field=\"title\"/>\n  </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n  <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n    <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n      <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n        <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n          <li class=<<toc-item-class>>>\n            <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n              <<toc-caption>>\n            </$list>\n            <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n          </li>\n        </$set>\n      </$set>\n    </$vars>\n  </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\"  tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n    <$link>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n        </$button>\n      </$reveal>\n      <<toc-caption>>\n    </$link>\n    <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n      <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n    </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n    <li class=<<toc-item-class>>>\n      <$link>\n          <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n          <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/right-arrow}}\n            </$button>\n          </$reveal>\n          <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/down-arrow}}\n            </$button>\n          </$reveal>\n        </$list>\n        <<toc-caption>>\n      </$link>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n        <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/right-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n        <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/down-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n      </$list>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-selective-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n  <div class=\"tc-tabbed-table-of-contents\">\n    <$linkcatcher to=<<__selectedTiddler__>>>\n      <div class=\"tc-table-of-contents\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n      </div>\n    </$linkcatcher>\n    <div class=\"tc-tabbed-table-of-contents-content\">\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n        <$transclude mode=\"block\" tiddler=<<__template__>>>\n          <h1><<toc-caption>></h1>\n          <$transclude mode=\"block\">$missingText$</$transclude>\n        </$transclude>\n      </$reveal>\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n        $unselectedText$\n      </$reveal>\n    </div>\n  </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n  <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
        },
        "$:/core/macros/translink": {
            "title": "$:/core/macros/translink",
            "tags": "$:/tags/Macro",
            "text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tree": {
            "title": "$:/core/macros/tree",
            "tags": "$:/tags/Macro",
            "text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/utils": {
            "title": "$:/core/macros/utils",
            "text": "\\define colour(colour)\n$colour$\n\\end\n"
        },
        "$:/snippets/minilanguageswitcher": {
            "title": "$:/snippets/minilanguageswitcher",
            "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/minithemeswitcher": {
            "title": "$:/snippets/minithemeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/modules": {
            "title": "$:/snippets/modules",
            "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
        },
        "$:/palette": {
            "title": "$:/palette",
            "text": "$:/palettes/Vanilla"
        },
        "$:/snippets/paletteeditor": {
            "title": "$:/snippets/paletteeditor",
            "text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
        },
        "$:/snippets/peek-stylesheets": {
            "title": "$:/snippets/peek-stylesheets",
            "text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
        },
        "$:/temp/search": {
            "title": "$:/temp/search",
            "text": ""
        },
        "$:/tags/AdvancedSearch": {
            "title": "$:/tags/AdvancedSearch",
            "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
        },
        "$:/tags/AdvancedSearch/FilterButton": {
            "title": "$:/tags/AdvancedSearch/FilterButton",
            "list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
        },
        "$:/tags/ControlPanel": {
            "title": "$:/tags/ControlPanel",
            "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
        },
        "$:/tags/ControlPanel/Info": {
            "title": "$:/tags/ControlPanel/Info",
            "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
        },
        "$:/tags/ControlPanel/Plugins": {
            "title": "$:/tags/ControlPanel/Plugins",
            "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
        },
        "$:/tags/EditTemplate": {
            "title": "$:/tags/EditTemplate",
            "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
        },
        "$:/tags/EditToolbar": {
            "title": "$:/tags/EditToolbar",
            "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
        },
        "$:/tags/EditorToolbar": {
            "title": "$:/tags/EditorToolbar",
            "list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
        },
        "$:/tags/Manager/ItemMain": {
            "title": "$:/tags/Manager/ItemMain",
            "list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
        },
        "$:/tags/Manager/ItemSidebar": {
            "title": "$:/tags/Manager/ItemSidebar",
            "list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
        },
        "$:/tags/MoreSideBar": {
            "title": "$:/tags/MoreSideBar",
            "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
        },
        "$:/tags/PageTemplate": {
            "title": "$:/tags/PageTemplate",
            "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
            "text": ""
        },
        "$:/tags/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/tags/SideBarSegment": {
            "title": "$:/tags/SideBarSegment",
            "list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
        },
        "$:/tags/TiddlerInfo": {
            "title": "$:/tags/TiddlerInfo",
            "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo/Advanced": {
            "title": "$:/tags/TiddlerInfo/Advanced",
            "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
        },
        "$:/tags/ViewTemplate": {
            "title": "$:/tags/ViewTemplate",
            "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
        },
        "$:/tags/ViewToolbar": {
            "title": "$:/tags/ViewToolbar",
            "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        }
    }
}
<svg class="tc-image-done-button tc-image-button" viewBox="0 0 128 128" width="22pt" height="22pt">
    <g fill-rule="evenodd">
        <path d="M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z" id="Rectangle-285" transform="translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) "></path>
    </g>
</svg>
/*\
title: $:/core/modules/macros/now.js
type: application/javascript
module-type: macro

Macro to return a formatted version of the current time

\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

/*
Information about this macro
*/

exports.name = "now";

exports.params = [
	{name: "format"}
];

/*
Run the macro
*/
exports.run = function(format) {
	return $tw.utils.formatDateString(new Date(),format || "0hh:0mm:0ss, DDth MMM YYYY");
};

})();
\whitespace trim
<$button message="tm-permalink" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/.giffmex/images/share.ico}}
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text">
<$text text=" "/>
<$text text={{$:/language/Buttons/Permalink/Caption}}/>
</span>
</$list>
</$button>
<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>
<$wikify name="site-title" text={{$:/config/SaveWikiButton/Filename}}>
<$action-sendmessage $message="tm-save-wiki" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>
</$wikify>
<span class="tc-dirty-indicator">
<$list filter="[<tv-config-toolbar-icons>match[yes]]">
{{$:/core/images/save-button}}
</$list>
<$list filter="[<tv-config-toolbar-text>match[yes]]">
<span class="tc-btn-text"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>
</$list>
</span>
</$button>

<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="prefix-lines"
	character="!"
	count="1"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="prefix-lines"
	character="!"
	count="2"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="prefix-lines"
	character="!"
	count="3"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="wrap-selection"
	prefix="[["
	suffix="]]"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="wrap-lines"
	prefix="
```"
	suffix="```"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="wrap-selection"
	prefix="`"
	suffix="`"
/>

<$reveal state="$:/state/showeditpreview" type="match" text="yes" tag="span">
{{$:/core/images/preview-open}}
<$action-setfield $tiddler="$:/state/showeditpreview" $value="no"/>
</$reveal>
<$reveal state="$:/state/showeditpreview" type="nomatch" text="yes" tag="span">
{{$:/core/images/preview-closed}}
<$action-setfield $tiddler="$:/state/showeditpreview" $value="yes"/>
</$reveal>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="wrap-lines"
	prefix="
<<<"
	suffix="<<<"
/>
<$action-sendmessage
	$message="tm-edit-text-operation"
	$param="wrap-selection"
	prefix="{{"
	suffix="}}"
/>
\define lingo-base() $:/language/EditTemplate/
<div class="tc-type-selector"><$fieldmangler>
<em class="tc-edit"><<lingo Type/Prompt>></em> <$edit-text field="type" tag="input" default="" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify "$:/state/popup/type-dropdown">> class="tc-edit-typeeditor tc-popup-handle" tabindex={{$:/config/EditTabIndex}}/> <$button popup=<<qualify "$:/state/popup/type-dropdown">> class="tc-btn-invisible tc-btn-dropdown" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message="tm-remove-field" param="type" class="tc-btn-invisible tc-btn-icon" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>
</$fieldmangler></div>

<div class="tc-block-dropdown-wrapper">
<$set name="tv-show-missing-links" value="yes">
<$reveal state=<<qualify "$:/state/popup/type-dropdown">> type="nomatch" text="" default="">
<div class="tc-block-dropdown tc-edit-type-dropdown">
<$linkcatcher to="!!type">
<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>
<div class="tc-dropdown-item">
<$text text={{!!group}}/>
</div>
<$list filter="[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]"><$link to={{!!name}}><$view field="description"/> (<$view field="name"/>)</$link>
</$list>
</$list>
</$linkcatcher>
</div>
</$reveal>
</$set>
</div>
\whitespace trim
\define lingo-base() $:/language/CloseAll/

\define drop-actions()
<$action-listops $tiddler=<<tv-story-list>> $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
\end

\define placeholder()
<div class="tc-droppable-placeholder"/>
\end

\define droppable-item(button)
\whitespace trim
<$droppable actions=<<drop-actions>>>
<<placeholder>>
<div>
$button$
</div>
</$droppable>
\end

<div class="tc-sidebar-tab-open">
<$list filter="[list<tv-story-list>]" history=<<tv-history-list>> storyview="pop">
<div class="tc-sidebar-tab-open-item">
<$macrocall $name="droppable-item" button="""<$button message="tm-close-tiddler" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class="tc-btn-invisible tc-btn-mini">{{$:/core/images/close-button}}</$button>&nbsp;<$link to={{!!title}}><$view field="title"/></$link>"""/>
</div>
</$list>
<$tiddler tiddler="">
<div>
<$macrocall $name="droppable-item" button="""<$button message="tm-close-all-tiddlers" class="tc-btn-invisible tc-btn-mini"><<lingo Button>></$button>"""/>
</div>
</$tiddler>
</div>
\define lingo-base() $:/language/ControlPanel/
\define config-title()
$:/config/PageControlButtons/Visibility/$(listItem)$
\end

<<lingo Basics/Version/Prompt>> <<version>>

<$set name="tv-config-toolbar-icons" value="yes">

<$set name="tv-config-toolbar-text" value="yes">

<$set name="tv-config-toolbar-class" value="">

<$list filter="[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]" variable="listItem">

<div style="position:relative;" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>

<$checkbox tiddler=<<config-title>> field="text" checked="show" unchecked="hide" default="show"/> <$transclude tiddler=<<listItem>>/> <i class="tc-muted"><$transclude tiddler=<<listItem>> field="description"/></i>

</div>

</$list>

</$set>

</$set>

</$set>
<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes">
<div class="tc-subtitle">
<$link to={{!!modifier}}>
<$view field="modifier"/>
</$link> <$view field="modified" format="date" template={{$:/language/Tiddler/DateFormat}}/>
</div>
</$reveal>
<$reveal type="nomatch" stateTitle=<<folded-state>> text="hide" tag="div" retain="yes" animate="yes">
<div class="tc-tags-wrapper"><$list filter="[all[current]tags[]sort[title]]" template="$:/core/ui/TagTemplate" storyview="pop"/></div>
</$reveal>
[[Índice, Nuevo Testamento 3]]
The following tiddlers were imported:

# [[Paralelos entre 1 Juan 1.8-9 y 1.10-2.2]]
no
enero
octubre
noviembre
diciembre
febrero
marzo
abril
mayo
junio
julio
agosto
septiembre
X
<span class="blue">''¡Liga copiada a tu portapapeles!''</span>
DD de MMM de YYYY
<<list-links "[tag[task]sort[title]]">>
\define macroName(param1:"default value",param2)
Text of the macro
\end
|! |!Alpha |!Beta |!Gamma |!Delta |
|!One | | | | |
|!Two | | | | |
|!Three | | | | |
<div class="tc-table-of-contents">

<<toc-selective-expandable 'TableOfContents'>>

</div>
{
    "tiddlers": {
        "$:/plugins/flibbles/relink/js/bulkops.js": {
            "text": "/*\\\nmodule-type: startup\n\nReplaces the relinkTiddler defined in $:/core/modules/wiki-bulkops.js\n\nThis is a startup instead of a wikimethods module-type because it's the only\nway to ensure this runs after the old relinkTiddler method is applied.\n\n\\*/\n(function(){\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\n\nexports.name = \"redefine-relinkTiddler\";\nexports.synchronous = true;\n// load-modules is when wikimethods are applied in\n// ``$:/core/modules/startup/load-modules.js``\nexports.after = ['load-modules'];\n\nexports.startup = function() {\n\t$tw.Wiki.prototype.relinkTiddler = relinkTiddler;\n};\n\n/** Walks through all relinkable tiddlers and relinks them.\n *  This replaces the existing function in core Tiddlywiki.\n */\nfunction relinkTiddler(fromTitle, toTitle, options) {\n\tvar self = this;\n\tvar failures = this.eachRelinkableTiddler(\n\t\t\tfromTitle,\n\t\t\ttoTitle,\n\t\t\toptions,\n\t\t\tfunction(changes, tiddler) {\n\t\tvar newTiddler = new $tw.Tiddler(tiddler,changes,self.getModificationFields())\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\tself.addTiddler(newTiddler);\n\t});\n\tif (failures.length > 0) {\n\t\tlanguage.reportFailures(failures);\n\t}\n};\n\n})();\n",
            "module-type": "startup",
            "title": "$:/plugins/flibbles/relink/js/bulkops.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/errors.js": {
            "text": "/*\\\nmodule-type: library\n\nThis is the exception that gets thrown when a relink is impossible.\n  (Or the hoops we'd have to go through to make it work are more than the user\n   would want Relink to do, like create new tiddlers)\n\\*/\n\nfunction RelinkError() {};\nRelinkError.prototype = Object.create(Error);\nexports.RelinkError = RelinkError;\n\nfunction CannotRelinkError() { };\nCannotRelinkError.prototype = new RelinkError();\nexports.CannotRelinkError = CannotRelinkError\n\nfunction CannotFindMacroDefError(macroName) { this.macroName = macroName; };\nCannotFindMacroDefError.prototype = new RelinkError();\nexports.CannotFindMacroDefError = CannotFindMacroDefError;\n//Cannot find definition for ${macroName}. Make sure your macro whitelist is configured properly, and that you're macro is globally defined, or defined in all the places it's used.\n",
            "module-type": "library",
            "title": "$:/plugins/flibbles/relink/js/errors.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/language.js": {
            "text": "/*\\\nmodule-type: library\n\nThis handles all logging and alerts Relink emits.\n\n\\*/\n\nexports.logRelink = function(message, args, options) {\n\tif (options.quiet) {\n\t\treturn;\n\t}\n\tvar raw = exports.log[message];\n\tif (raw) {\n\t\t// This is cheap, but whatevs. To do a proper\n\t\t// rendering would require working through a wiki\n\t\t// object. Too heavy weight for log messages.\n\t\tvar msg = raw.replace(/<<([^<>]+)>>/g, function(match, key) {\n\t\t\treturn args[key] || (\"<<\"+key+\">>\");\n\t\t});\n\t\tif (raw.indexOf('%c') >= 0) {\n\t\t\t// Doing a little bit of bold so the user sees\n\t\t\t// where we had to jump through hoops.\n\t\t\tconsole.log(\"%c\" + msg, \"\", \"font-weight: bold;\");\n\t\t} else {\n\t\t\tconsole.log(msg);\n\t\t}\n\t} else {\n\t\tconsole.warn(\"No such log message: \" + message);\n\t}\n};\n\nexports.getString = function(title, options) {\n\ttitle = \"$:/plugins/flibbles/relink/language/\" + title;\n\treturn options.wiki.renderTiddler(\"text/plain\", title,\n\t                                  {variables: options.variables});\n};\n\nexports.failureAlert = \"Relink was unable to update the following tiddlers due to the complexity of the title:\";\n\nexports.reportFailures = function(failureList) {\n\tvar reportList = failureList.map(function(f) {return \"\\n   \" + f});\n\tconsole.warn(exports.failureAlert + reportList);\n};\n\nexports.log = {\n\t\"attribute\": \"Renaming '<<from>>' to '<<to>>' in <<<element>> <<attribute>> /> attribute of tiddler '<<tiddler>>'\",\n\t\"attribute-placeholder\": \"Renaming '<<from>>' to '<<to>>' in <<<element>> <<attribute>> /> attribute of tiddler '<<tiddler>>' %cby creating placeholder macros\",\n\t\"field\": \"Renaming '<<from>>' to '<<to>>' in <<field>> of tiddler '<<tiddler>>'\",\n\t\"filteredtransclude\": \"Renaming '<<from>>' to '<<to>>' in filtered transclusion of tiddler '<<tiddler>>'\",\n\t\"filteredtransclude-placeholder\": \"Renaming '<<from>>' to '<<to>>' in filtered transclusion of tiddler '<<tiddler>>' %cby creating placeholder macros\",\n\t\"filteredtransclude-placeholder-widget\": \"Renaming '<<from>>' to '<<to>>' in filtered transclusion of tiddler '<<tiddler>>' %cby converting it into a widget and creating placeholder macros\",\n\t\"filteredtransclude-widget\": \"Renaming '<<from>>' to '<<to>>' in filtered transclusion of tiddler '<<tiddler>>' %cby converting it into a widget\",\n\t\"import\": \"Renaming '<<from>>' to '<<to>>' in \\\\import filter of tiddler '<<tiddler>>'\",\n\t\"import-placeholder\": \"Renaming '<<from>>' to '<<to>>' in \\\\import filter of tiddler '<<tiddler>>' %cby creating placeholder macros\",\n\t\"macrodef\": \"Renaming '<<from>>' to '<<to>>' in <<macro>> definition of tiddler '<<tiddler>>'\",\n\t\"macrodef-placeholder\": \"Renaming '<<from>>' to '<<to>>' in <<macro>> definition of tiddler '<<tiddler>>' %cby creating more placeholder macros\",\n\t\"prettylink\": \"Renaming '<<from>>' to '<<to>>' in prettylink of tiddler '<<tiddler>>'\",\n\t\"prettylink-placeholder\": \"Renaming '<<from>>' to '<<to>>' in prettylink of tiddler '<<tiddler>>' %cby converting it into a widget and creating placeholder macros\",\n\t\"prettylink-widget\": \"Renaming '<<from>>' to '<<to>>' in prettylink of tiddler '<<tiddler>>' %cby converting it into a widget\",\n\t\"transclude\": \"Renaming '<<from>>' to '<<to>>' in transclusion of tiddler '<<tiddler>>'\",\n\t\"transclude-placeholder\": \"Renaming '<<from>>' to '<<to>>' in transclusion of tiddler '<<tiddler>>' %cby converting it into a widget and creating placeholder macros\",\n\t\"transclude-widget\": \"Renaming '<<from>>' to '<<to>>' in transclusion of tiddler '<<tiddler>>' %cby converting it into a widget\",\n\t\"wikilink\": \"Renaming '<<from>>' to '<<to>>' in CamelCase link of tiddler '<<tiddler>>'\",\n\t\"wikilink-placeholder\": \"Renaming '<<from>>' to '<<to>>' in CamelCase link of tiddler '<<tiddler>>' %cby converting it into a widget and creating placeholder macros\",\n\t\"wikilink-pretty\": \"Renaming '<<from>>' to '<<to>>' in CamelCase link of tiddler '<<tiddler>>' %cby converting it into a prettylink\"\n};\n",
            "module-type": "library",
            "title": "$:/plugins/flibbles/relink/js/language.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/settings.js": {
            "text": "/*\\\nmodule-type: library\n\nThis handles the fetching and distribution of relink settings.\n\n\\*/\n\nvar fieldTypes = Object.create(null);\n\n$tw.modules.forEachModuleOfType(\"relinkfieldtype\", function(title, exports) {\n\tfieldTypes[exports.name] = exports;\n\t// For legacy reasons, some of the field types can go by other names\n\tif (exports.aliases) {\n\t\t$tw.utils.each(exports.aliases, function(alias) {\n\t\t\tfieldTypes[alias] = exports;\n\t\t});\n\t}\n});\n\n/**Returns a specific relinker.\n * This is useful for wikitext rules which need to parse a filter or a list\n */\nexports.getRelinker = function(name) {\n\treturn fieldTypes[name];\n};\n\nexports.getAttributes = function(options) {\n\treturn getSettings(options).attributes;\n};\n\nexports.getFields = function(options) {\n\treturn getSettings(options).fields;\n};\n\nexports.getMacros = function(options) {\n\treturn getSettings(options).macros;\n};\n\nexports.getOperators = function(options) {\n\treturn getSettings(options).operators;\n};\n\n/**Factories define methods that create settings given config tiddlers.\n * for factory method 'example', it will be called once for each:\n * \"$:/config/flibbles/relink/example/...\" tiddler that exists.\n * the argument \"key\" will be set to the contents of \"...\"\n *\n * The reason I build relink settings in this convoluted way is to minimize\n * the number of times tiddlywiki has to run through EVERY tiddler looking\n * for relink config tiddlers.\n *\n * Also, by exporting \"factories\", anyone who extends relink can patch in\n * their own factory methods to create settings that are generated exactly\n * once per rename.\n */\nexports.factories = {\n\tattributes: function(attributes, tiddler, key) {\n\t\tvar relinker = fieldTypes[tiddler.fields.text];\n\t\tif (relinker) {\n\t\t\tvar elem = root(key);\n\t\t\tvar attr = key.substr(elem.length+1);\n\t\t\tattributes[elem] = attributes[elem] || Object.create(null);\n\t\t\tattributes[elem][attr] = relinker;\n\t\t}\n\t},\n\tfields: function(fields, tiddler, name) {\n\t\tvar relinker = fieldTypes[tiddler.fields.text];\n\t\tif (relinker) {\n\t\t\tfields[name] = relinker;\n\t\t}\n\t},\n\tmacros: function(macros, tiddler, key) {\n\t\tvar relinker = fieldTypes[tiddler.fields.text];\n\t\tif (relinker) {\n\t\t\t// We take the last index, not the first, because macro\n\t\t\t// parameters can't have slashes, but macroNames can.\n\t\t\tvar name = dir(key);\n\t\t\tvar arg = key.substr(name.length+1);\n\t\t\tmacros[name] = macros[name] || Object.create(null);\n\t\t\tmacros[name][arg] = relinker;\n\t\t}\n\t},\n\toperators: function(operators, tiddler, name) {\n\t\tvar relinker = fieldTypes[tiddler.fields.text];\n\t\tif (relinker) {\n\t\t\toperators[name] = relinker;\n\t\t}\n\t}\n};\n\n/**We're caching the generated settings inside of options. Not exactly how\n * options was meant to be used, but it's fiiiiine.\n * The wiki global cache isn't a great place, because it'll get cleared many\n * times during a bulk relinking operation, and we can't recalculate this every\n * time without exploding a rename operation's time.\n * options works great. It only lasts just as long as the rename.\n * No longer, no shorter.\n */\nfunction getSettings(options) {\n\tvar secretCache = \"__relink_settings\";\n\tvar cache = options[secretCache];\n\tif (cache === undefined) {\n\t\tcache = options[secretCache] = compileSettings(options.wiki);\n\t}\n\treturn cache;\n};\n\nfunction compileSettings(wiki) {\n\tvar prefix = \"$:/config/flibbles/relink/\";\n\tvar settings = Object.create(null);\n\tfor (var name in exports.factories) {\n\t\tsettings[name] = Object.create(null);\n\t}\n\twiki.eachShadowPlusTiddlers(function(tiddler, title) {\n\t\tif (title.substr(0, prefix.length) === prefix) {\n\t\t\tvar remainder = title.substr(prefix.length);\n\t\t\tvar category = root(remainder);\n\t\t\tvar factory = exports.factories[category];\n\t\t\tif (factory) {\n\t\t\t\tvar name = remainder.substr(category.length+1);\n\t\t\t\tfactory(settings[category], tiddler, name);\n\t\t\t}\n\t\t}\n\t});\n\treturn settings;\n};\n\n/* Returns first bit of a path. path/to/tiddler -> path\n */\nfunction root(string) {\n\tvar index = string.indexOf('/');\n\tif (index >= 0) {\n\t\treturn string.substr(0, index);\n\t}\n};\n\n/* Returns all but the last bit of a path. path/to/tiddler -> path/to\n */\nfunction dir(string) {\n\tvar index = string.lastIndexOf('/');\n\tif (index >= 0) {\n\t\treturn string.substr(0, index);\n\t}\n}\n",
            "module-type": "library",
            "title": "$:/plugins/flibbles/relink/js/settings.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/wikimethods.js": {
            "text": "/*\\\nmodule-type: wikimethod\n\nIntroduces some utility methods used by Relink.\n\n\\*/\n\nvar errors = require('$:/plugins/flibbles/relink/js/errors');\n\nvar relinkOperations = Object.create(null);\n$tw.modules.applyMethods('relinkoperator', relinkOperations);\n\n/**Walks through all non-shadow tiddlers and sees which ones need to be relinked\n *\n * For each one, calls method on it with arguments (changes, tiddler, title)\n * Returns a list of tiddlers it would fail to update.\n */\nexports.eachRelinkableTiddler = function(fromTitle, toTitle, options, method) {\n\tvar data = this.getRelinkableTiddlers(fromTitle, toTitle, options);\n\tfor (var title in data.changes) {\n\t\tmethod(data.changes[title], this.getTiddler(title), title);\n\t}\n\treturn data.failures;\n};\n\n/** Returns a pair like this,\n *  { changes: {...}, failures: [] }\n */\nexports.getRelinkableTiddlers = function(fromTitle, toTitle, options) {\n\tvar cache = this.getGlobalCache(\"relink-\"+fromTitle, function() {\n\t\treturn Object.create(null);\n\t});\n\tif (!cache[toTitle]) {\n\t\tcache[toTitle] = getFreshRelinkableTiddlers(this, fromTitle, toTitle, options);\n\t}\n\treturn cache[toTitle];\n};\n\nfunction getFreshRelinkableTiddlers(wiki, fromTitle, toTitle, options) {\n\toptions = options || {};\n\toptions.wiki = options.wiki || wiki;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\tvar failures = [];\n\tvar changeList = Object.create(null);\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tvar toUpdate = getRelinkFilter(wiki);\n\t\tvar tiddlerList = toUpdate.call(wiki); // no source or widget\n\t\tfor (var i = 0; i < tiddlerList.length; i++) {\n\t\t\tvar title = tiddlerList[i];\n\t\t\tvar tiddler = wiki.getTiddler(title);\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(tiddler\n\t\t\t&& !tiddler.fields[\"plugin-type\"]\n\t\t\t&& tiddler.fields.type !== \"application/javascript\") {\n\t\t\t\ttry {\n\t\t\t\t\tvar changes = Object.create(null);\n\t\t\t\t\tfor (var operation in relinkOperations) {\n\t\t\t\t\t\trelinkOperations[operation](tiddler, fromTitle, toTitle, changes, options);\n\t\t\t\t\t}\n\t\t\t\t\t// If any fields changed, update tiddler\n\t\t\t\t\tif(Object.keys(changes).length > 0) {\n\t\t\t\t\t\tchangeList[title] = changes;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof errors.RelinkError) {\n\t\t\t\t\t\tfailures.push(title);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Should we test for instanceof Error instead?: yes\n\t\t\t\t\t\t// Does that work in the testing environment?: no\n\t\t\t\t\t\tif (e.message) {\n\t\t\t\t\t\t\te.message = e.message + \"\\nWhen relinking '\" + title + \"'\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {changes: changeList, failures: failures};\n};\n\nfunction getRelinkFilter(wiki) {\n\tvar toUpdate = \"$:/config/flibbles/relink/to-update\";\n\treturn wiki.getCacheForTiddler(toUpdate, \"relink-toUpdate\", function() {\n\t\tvar tiddler = wiki.getTiddler(toUpdate);\n\t\tif (tiddler) {\n\t\t\tvar filter = wiki.compileFilter(tiddler.fields.text);\n\t\t\treturn filter;\n\t\t} else {\n\t\t\treturn wiki.allTitles;\n\t\t}\n\t});\n};\n\n/**Returns a list of tiddlers that would be renamed by a relink operations.\n */\nexports.relinkTiddlerDryRun = function(fromTitle, toTitle, options) {\n\tvar results = [];\n\tthis.eachRelinkableTiddler(\n\t\t\tfromTitle,\n\t\t\ttoTitle,\n\t\t\toptions,\n\t\t\tfunction(changes, tiddler, title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\nvar ImportVariablesWidget = require(\"$:/core/modules/widgets/importvariables.js\").importvariables;\n\nexports.relinkGlobalMacros = function() {\n\tif (!this._relinkWidget) {\n\t\tvar importWidget = this.relinkGenerateVariableWidget( \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\");\n\t\tthis.addEventListener(\"change\", function(changes) {\n\t\t\timportWidget.refresh(changes);\n\t\t});\n\t\tthis._relinkWidget = importWidget;\n\t}\n\tvar rtn = this._relinkWidget;\n\twhile (rtn.children.length > 0) {\n\t\trtn = rtn.children[0];\n\t}\n\treturn rtn;\n};\n\nexports.relinkGenerateVariableWidget = function(filter, parent) {\n\tvar treeNode = { attributes: {\n\t\t\"filter\": {\n\t\t\ttype: \"string\",\n\t\t\tvalue: filter\n\t\t}\n\t}};\n\tvar importWidget = new ImportVariablesWidget(treeNode,{parentWidget: parent, wiki: this});\n\timportWidget.computeAttributes();\n\timportWidget.execute();\n\t// These two functions neuter the widget, so it never tries\n\t// to render.\n\timportWidget.findNextSiblingDomNode = function() {};\n\timportWidget.renderChildren(this.parentDomNode);\n\treturn importWidget;\n};\n",
            "module-type": "wikimethod",
            "title": "$:/plugins/flibbles/relink/js/wikimethods.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/filteroperators/impossible.js": {
            "text": "/*\\\nmodule-type: relinkfilteroperator\n\nGiven an input of toTitles, (probably just one), outputs all the tiddlers in\nwhich Relink would fail to update the operand to any of those given titles.\n\n`[[{terrible'}!!\"title\"]relink:impossible[fromTiddler]]`\n\nWould output all the tiddlers where Relink would fail to update `from here` to\n`{terrible'}!!\"title\"`\n\nI know, it's weird. You'd think it would test all incoming inputs instead of\nusing them as to fromTitle, but this is the only way to input both a fromTitle\nand a toTitle.\n\nResults are dominantly appanded if more than one input tiddler is given.\n\\*/\n\nexports.impossible = function(source,operator,options) {\n\tvar fromTitle = operator.operand,\n\t\tresults = [];\n\tif (fromTitle) {\n\t\tsource(function(toTiddler, toTitle) {\n\t\t\tvar fails = options.wiki.eachRelinkableTiddler(\n\t\t\t\tfromTitle, toTitle,\n\t\t\t\t$tw.utils.extend({quiet: true}, options),\n\t\t\t\tfunction(tiddler, title) {});\n\t\t\t$tw.utils.pushTop(results, fails);\n\t\t});\n\t}\n\treturn results;\n};\n",
            "module-type": "relinkfilteroperator",
            "title": "$:/plugins/flibbles/relink/js/filteroperators/impossible.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/filteroperators/references.js": {
            "text": "/*\\\nmodule-type: relinkfilteroperator\n\nGiven a title as an operand, returns all non-shadow tiddlers that have any\nsort of updatable reference to it.\n\n\n`relink:references[fromTiddler]]`\n\nReturns all tiddlers that reference `fromTiddler` somewhere inside them.\n\nInput is ignored. Maybe it shouldn't do this.\nAlso, maybe it should properly recon, instead of fake replacing the title with\n`__relink_dummy__`\n\\*/\n\nexports.references = function(source,operator,options) {\n\tvar fromTitle = operator.operand,\n\t\tresults = [];\n\tif (fromTitle) {\n\t\toptions.wiki.eachRelinkableTiddler(\n\t\t\tfromTitle, \"__relink_dummy__\",\n\t\t\t$tw.utils.extend({quiet: true}, options),\n\t\t\tfunction(changes, tiddler, title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t}\n\treturn results;\n};\n",
            "module-type": "relinkfilteroperator",
            "title": "$:/plugins/flibbles/relink/js/filteroperators/references.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/filteroperators/relink.js": {
            "text": "/*\\\nmodule-type: filteroperator\n\nThis filter acts as a namespace for several small, simple filters, such as\n\n`[relink:impossible[]]`\n\n\\*/\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\n\nvar relinkFilterOperators;\n\nfunction getRelinkFilterOperators() {\n\tif(!relinkFilterOperators) {\n\t\trelinkFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"relinkfilteroperator\",\n\t\t                         relinkFilterOperators);\n\t}\n\treturn relinkFilterOperators;\n}\n\nexports.relink = function(source,operator,options) {\n\tvar suffixPair = parseSuffix(operator.suffix);\n\tvar relinkFilterOperator = getRelinkFilterOperators()[suffixPair[0]];\n\tif (relinkFilterOperator) {\n\t\tvar newOperator = $tw.utils.extend({}, operator);\n\t\tnewOperator.suffix = suffixPair[1];\n\t\treturn relinkFilterOperator(source, newOperator, options);\n\t} else {\n\t\treturn [language.getString(\"Error/RelinkFilterOperator\", options)];\n\t}\n};\n\nfunction parseSuffix(suffix) {\n\tvar index = suffix? suffix.indexOf(\":\"): -1;\n\tif (index >= 0) {\n\t\treturn [suffix.substr(0, index), suffix.substr(index+1)];\n\t} else {\n\t\treturn [suffix];\n\t}\n}\n",
            "module-type": "filteroperator",
            "title": "$:/plugins/flibbles/relink/js/filteroperators/relink.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/filteroperators/splitafter.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: relinkfilteroperator\n\nFilter operator that splits each result on the last occurance of the specified separator and returns the last bit.\n\nWhat does this have to do with relink? Nothing. I need this so I can render\nthe configuration menu. I //could// use [splitregexp[]], but then I'd be\nlimited to Tiddlywiki v5.1.20 or later.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitafter = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar index = title.lastIndexOf(operator.operand);\n\t\tif(index < 0) {\n\t\t\t$tw.utils.pushTop(results,title);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,title.substr(index+1));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n\n",
            "title": "$:/plugins/flibbles/relink/js/filteroperators/splitafter.js",
            "type": "application/javascript",
            "module-type": "relinkfilteroperator"
        },
        "$:/plugins/flibbles/relink/js/fieldtypes/filter.js": {
            "text": "/*\\\nThis specifies logic for updating filters to reflect title changes.\n\\*/\n\n/**Returns undefined if no change was made.\n */\n\nvar CannotRelinkError = require(\"$:/plugins/flibbles/relink/js/errors.js\").CannotRelinkError;\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\n\nexports.name = \"filter\";\n\nexports.relink = function(filter, fromTitle, toTitle, options) {\n\tif (!filter || filter.indexOf(fromTitle) < 0) {\n\t\treturn undefined;\n\t}\n\tvar relinker = new Rebuilder(filter);\n\tvar whitelist = settings.getOperators(options);\n\tvar p = 0, // Current position in the filter string\n\t\tmatch, noPrecedingWordBarrier,\n\t\twordBarrierRequired=false;\n\tvar whitespaceRegExp = /\\s+/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filter.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filter);\n\t\tnoPrecedingWordBarrier = false;\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t} else if (p != 0) {\n\t\t\tif (wordBarrierRequired) {\n\t\t\t\trelinker.add(' ', p, p);\n\t\t\t\twordBarrierRequired = false;\n\t\t\t} else {\n\t\t\t\tnoPrecedingWordBarrier = true;\n\t\t\t}\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filter.length) {\n\t\t\tvar val;\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filter);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\t// It's a bad filter\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif(match[1]) { // prefix\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\t// We check if this is a standalone title,\n\t\t\t\t// like `[[MyTitle]]`. We treat those like\n\t\t\t\t// `\"MyTitle\"` or `MyTitle`. Not like a run.\n\t\t\t\tvar standaloneTitle = /\\[\\[([^\\]]+)\\]\\]/g;\n\t\t\t\tstandaloneTitle.lastIndex = p;\n\t\t\t\tvar alone = standaloneTitle.exec(filter);\n\t\t\t\tif (!alone || alone.index != p) {\n\t\t\t\t\t// It's a legit run\n\t\t\t\t\tp =parseFilterOperation(relinker,fromTitle,toTitle,filter,p,whitelist,options);\n\t\t\t\t\tif (p === undefined) {\n\t\t\t\t\t\t// The filter is malformed\n\t\t\t\t\t\t// We do nothing.\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbracketTitle = alone[1];\n\t\t\t\toperandRegExp.lastIndex = standaloneTitle.lastIndex;\n\t\t\t\tval = alone[1];\n\t\t\t} else {\n\t\t\t\t// standalone Double quoted string, single\n\t\t\t\t// quoted string, or noquote ahead.\n\t\t\t\tval = match[3] || match[4] || match[5];\n\t\t\t}\n\t\t\t// From here on, we're dealing with a standalone title\n\t\t\t// expression. like `\"MyTitle\"` or `[[MyTitle]]`\n\t\t\t// We're much more flexible about relinking these.\n\t\t\tvar preference = undefined;\n\t\t\tif (match[3]) {\n\t\t\t\tpreference = '\"';\n\t\t\t} else if (match[4]) {\n\t\t\t\tpreference = \"'\";\n\t\t\t} else if (match[5]) {\n\t\t\t\tpreference = '';\n\t\t\t}\n\t\t\tif (val === fromTitle) {\n\t\t\t\tvar newVal = wrapTitle(toTitle, preference);\n\t\t\t\tif (newVal === undefined) {\n\t\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\t\tthrow new CannotRelinkError();\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = \"[<\"+options.placeholder.getPlaceholderFor(toTitle)+\">]\";\n\t\t\t\t\toptions.usedPlaceholder = true;\n\t\t\t\t}\n\t\t\t\tif (newVal[0] != '[') {\n\t\t\t\t\t// not bracket enclosed\n\t\t\t\t\t// this requires whitespace\n\t\t\t\t\t// arnound it\n\t\t\t\t\tif (noPrecedingWordBarrier && !match[1]) {\n\t\t\t\t\t\trelinker.add(' ', p, p);\n\t\t\t\t\t}\n\t\t\t\t\twordBarrierRequired = true;\n\t\t\t\t}\n\t\t\t\trelinker.add(newVal,p,operandRegExp.lastIndex);\n\t\t\t}\n\t\t\tp = operandRegExp.lastIndex;\n\t\t}\n\t}\n\treturn relinker.results();\n};\n\nfunction wrapTitle(value, preference) {\n\tvar choices = {\n\t\t\"\": function(v) {return !/[\\s\\[\\]]/.test(v); },\n\t\t\"[\": canBePrettyOperand,\n\t\t\"'\": function(v) {return v.indexOf(\"'\") < 0; },\n\t\t'\"': function(v) {return v.indexOf('\"') < 0; }\n\t};\n\tvar wrappers = {\n\t\t\"\": function(v) {return v; },\n\t\t\"[\": function(v) {return \"[[\"+v+\"]]\"; },\n\t\t\"'\": function(v) {return \"'\"+v+\"'\"; },\n\t\t'\"': function(v) {return '\"'+v+'\"'; }\n\t};\n\tif (choices[preference]) {\n\t\tif (choices[preference](value)) {\n\t\t\treturn wrappers[preference](value);\n\t\t}\n\t}\n\tfor (var quote in choices) {\n\t\tif (choices[quote](value)) {\n\t\t\treturn wrappers[quote](value);\n\t\t}\n\t}\n\t// No quotes will work on this\n\treturn undefined;\n}\n\nfunction parseFilterOperation(relinker, fromTitle, toTitle, filterString, p, whitelist, options) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\t// Missing [ in filter expression\n\t\treturn undefined;\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\tp++;\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\t// Missing [ in filter expression\n\t\t\treturn undefined;\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tvar operand = filterString.substring(p,nextBracketPos);\n\t\t\t\tvar ref = $tw.utils.parseTextReference(operand);\n\t\t\t\tif (ref.title === fromTitle) {\n\t\t\t\t\tif(!canBePrettyIndirect(toTitle)) {\n\t\t\t\t\t\tthrow new CannotRelinkError();\n\t\t\t\t\t}\n\t\t\t\t\tref.title = toTitle;\n\t\t\t\t\tvar newRef = refHandler.toString(ref);\n\t\t\t\t\t// We don't check the whitelist.\n\t\t\t\t\t// All indirect operands convert.\n\t\t\t\t\trelinker.add(newRef,p,nextBracketPos);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tvar operand = filterString.substring(p,nextBracketPos);\n\t\t\t\t// Check if this is a relevant operator\n\t\t\t\tvar handler = fieldType(whitelist, operator);\n\t\t\t\tif (!handler) {\n\t\t\t\t\t// This operator isn't managed. Bye.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar result = handler.relink(operand, fromTitle, toTitle, options);\n\t\t\t\tif (!result) {\n\t\t\t\t\t// The fromTitle wasn't in the operand.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar wrapped;\n\t\t\t\tif (!canBePrettyOperand(result)) {\n\t\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\t\tthrow new CannotRelinkError();\n\t\t\t\t\t}\n\t\t\t\t\tvar ph = options.placeholder.getPlaceholderFor(result);\n\t\t\t\t\twrapped = \"<\"+ph+\">\";\n\t\t\t\t\toptions.usedPlaceholder = true;\n\t\t\t\t} else {\n\t\t\t\t\twrapped = \"[\"+result+\"]\";\n\t\t\t\t}\n\t\t\t\trelinker.add(wrapped, p-1, nextBracketPos+1);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Unterminated regular expression\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\t// Missing closing bracket in filter expression\n\t\t\t// return undefined;\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\t// Missing ] in filter expression\n\t\treturn undefined;\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n// Returns the relinker needed for a given operator, or returns undefined.\nfunction fieldType(whitelist, operator) {\n\treturn whitelist[operator.operator] ||\n\t       (operator.suffix &&\n\t        whitelist[operator.operator + \":\" + operator.suffix]);\n};\n\nfunction canBePrettyOperand(value) {\n\treturn value.indexOf(']') < 0;\n};\n\nfunction canBePrettyIndirect(value) {\n\treturn value.indexOf('}') < 0;\n};\n",
            "module-type": "relinkfieldtype",
            "title": "$:/plugins/flibbles/relink/js/fieldtypes/filter.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/fieldtypes/list.js": {
            "text": "/*\\\nThis manages replacing titles that occur within stringLists, like,\n\nTiddlerA [[Tiddler with spaces]] [[Another Title]]\n\\*/\n\nvar CannotRelinkError = require(\"$:/plugins/flibbles/relink/js/errors.js\").CannotRelinkError;\n\nexports.name = \"list\";\n\n/**Returns undefined if no change was made.\n * Parameter: value can literally be a list. This can happen for builtin\n *            types 'list' and 'tag'. In those cases, we also return list.\n */\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tvar isModified = false,\n\t\tactualList = false,\n\t\tlist;\n\tif (typeof value !== \"string\") {\n\t\t// Not a string. Must be a list.\n\t\t// clone it, since we may make changes to this possibly\n\t\t// frozen list.\n\t\tlist = (value || []).slice(0);\n\t\tactualList = true;\n\t} else {\n\t\tlist = $tw.utils.parseStringArray(value || \"\");\n\t}\n\t$tw.utils.each(list,function (title,index) {\n\t\tif(title === fromTitle) {\n\t\t\tlist[index] = toTitle;\n\t\t\tisModified = true;\n\t\t}\n\t});\n\tif (isModified) {\n\t\t// It doesn't parse correctly alone, it won't\n\t\t// parse correctly in any list.\n\t\tif (!canBeListItem(toTitle)) {\n\t\t\tthrow new CannotRelinkError();\n\t\t}\n\t\tif (actualList) {\n\t\t\treturn list;\n\t\t} else {\n\t\t\treturn $tw.utils.stringifyList(list);\n\t\t}\n\t}\n\treturn undefined;\n};\n\nfunction canBeListItem(value) {\n\tvar regexp = /\\]\\][^\\S\\xA0]/m;\n\treturn !regexp.test(value);\n};\n",
            "module-type": "relinkfieldtype",
            "title": "$:/plugins/flibbles/relink/js/fieldtypes/list.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/fieldtypes/reference.js": {
            "text": "/*\\\nThis manages replacing titles that occur inside text references,\n\ntiddlerTitle\ntiddlerTitle!!field\n!!field\ntiddlerTitle##propertyIndex\n\\*/\n\nvar CannotRelinkError = require(\"$:/plugins/flibbles/relink/js/errors.js\").CannotRelinkError;\n\nexports.name = \"reference\";\n\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tvar reference = $tw.utils.parseTextReference(value);\n\tif (reference.title !== fromTitle) {\n\t\treturn undefined;\n\t}\n\treference.title = toTitle;\n\treturn exports.toString(reference);\n};\n\nexports.toString = function(textReference) {\n\tvar title = textReference.title || '';\n\tif (!exports.canBePretty(title)) {\n\t\tthrow new CannotRelinkError();\n\t}\n\tif (textReference.field) {\n\t\treturn title + \"!!\" + textReference.field;\n\t} else if (textReference.index) {\n\t\treturn title + \"##\" + textReference.index;\n\t}\n\treturn title;\n};\n\nexports.canBePretty = function(title)  {\n\treturn title.indexOf(\"!!\") < 0 && title.indexOf(\"##\") < 0;\n};\n",
            "module-type": "relinkfieldtype",
            "title": "$:/plugins/flibbles/relink/js/fieldtypes/reference.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/fieldtypes/title.js": {
            "text": "/*\\\nThis specifies logic for replacing a single-tiddler field. This is the\nsimplest kind of field type. One title swaps out for the other.\n\\*/\n\n// NOTE TO MODDERS: If you're making your own field types, the name must be\n//                  alpha characters only.\nexports.name = 'title';\n\n/**Returns undefined if no change was made.\n */\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tif (value === fromTitle) {\n\t\treturn toTitle;\n\t}\n\treturn undefined;\n};\n\n// This is legacy support for when 'title' was known as 'field'\nexports.aliases = ['field', 'yes'];\n",
            "module-type": "relinkfieldtype",
            "title": "$:/plugins/flibbles/relink/js/fieldtypes/title.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/fields.js": {
            "text": "/*\\\n\nHandles all fields specified in the plugin configuration. Currently, this\nonly supports single-value fields.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\n\nexports['fields'] = function(tiddler, fromTitle, toTitle, changes, options) {\n\tvar fields = settings.getFields(options);\n\t$tw.utils.each(fields, function(handler, field) {\n\t\tvar input = tiddler.fields[field];\n\t\tvar value = handler.relink(input, fromTitle, toTitle, options);\n\t\tif (value !== undefined) {\n\t\t\tlog(\"field\", {\n\t\t\t\tfrom: fromTitle,\n\t\t\t\tto: toTitle,\n\t\t\t\ttiddler: tiddler.fields.title,\n\t\t\t\tfield: descriptor(field)\n\t\t\t}, options);\n\t\t\tchanges[field] = value;\n\t\t}\n\t});\n};\n\nfunction descriptor(field) {\n\tif (field === \"tags\") {\n\t\treturn \"tags\";\n\t} else {\n\t\treturn field + \" field\" ;\n\t}\n};\n",
            "module-type": "relinkoperator",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/fields.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text.js": {
            "text": "/*\\\n\nDepending on the tiddler type, this will apply textOperators which may\nrelink titles within the body.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar defaultOperator = \"text/vnd.tiddlywiki\";\n\nvar textOperators = Object.create(null);\n$tw.modules.applyMethods('relinktextoperator', textOperators);\n\nexports['text'] = function(tiddler, fromTitle, toTitle, changes, options) {\n\tvar text = tiddler.fields.text,\n\t\tbuilder = [],\n\t\tbuildIndex = 0;\n\tif (text && text.indexOf(fromTitle) >= 0) {\n\t\tvar type = tiddler.fields.type || defaultOperator;\n\t\tif (textOperators[type]) {\n\t\t\ttextOperators[type].call(this, tiddler, fromTitle, toTitle, changes, options);\n\t\t}\n\t}\n};\n",
            "module-type": "relinkoperator",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js": {
            "text": "/*\\\n\nChecks for fromTitle in a tiddler's text. If found, sees if it's relevant,\nand tries to swap it out if it is.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar type = 'text/vnd.tiddlywiki';\nvar WikiParser = require(\"$:/core/modules/parsers/wikiparser/wikiparser.js\")[type];\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder.js\");\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar rules = Object.create(null);\n\n$tw.modules.forEachModuleOfType(\"relinkwikitextrule\", function(title, exports) {\n\tvar names = exports.name;\n\tif (typeof names === \"string\") {\n\t\tnames = [names];\n\t}\n\tfor (var i = 0; i < names.length; i++) {\n\t\trules[names[i]] = exports;\n\t}\n});\n\nfunction WikiRelinker(text, title, toTitle, options) {\n\tWikiParser.call(this, null, text, options);\n\tif (!this.relinkMethodsInjected) {\n\t\t$tw.utils.each([this.pragmaRuleClasses, this.blockRuleClasses, this.inlineRuleClasses], function(classList) {\n\t\t\tfor (var name in classList) {\n\t\t\t\tif (rules[name]) {\n\t\t\t\t\tdelete rules[name].name;\n\t\t\t\t\t$tw.utils.extend(classList[name].prototype, rules[name]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tWikiRelinker.prototype.relinkMethodsInjected = true;\n\t}\n\tthis.title = title;\n\tthis.toTitle = toTitle;\n\tthis.inlineRules = this.blockRules.concat(this.pragmaRules, this.inlineRules);\n\t// We work through relinkRules so we can change it later.\n\t// relinkRules is inlineRules so it gets touched up by amendRules().\n\tthis.relinkRules = this.inlineRules;\n\tthis.placeholders = Object.create(null);\n\tthis.reverseMap = Object.create(null);\n\tthis.knownMacros = Object.create(null);\n\tthis.widget = undefined;\n};\n\nWikiRelinker.prototype = Object.create(WikiParser.prototype);\nWikiRelinker.prototype.parsePragmas = function() {return []; };\nWikiRelinker.prototype.parseInlineRun = function() {};\nWikiRelinker.prototype.parseBlocks = function() {};\n\nWikiRelinker.prototype.getPlaceholderFor = function(value, category) {\n\tvar placeholder = this.reverseMap[value];\n\tif (placeholder) {\n\t\treturn placeholder;\n\t}\n\tvar number = 0;\n\tvar prefix = \"relink-\"\n\tif (category && category !== \"title\") {\n\t\t// I don't like \"relink-title-1\". \"relink-1\" should be for\n\t\t// titles. lists, and filters can have descriptors though.\n\t\tprefix += category + \"-\";\n\t}\n\tdo {\n\t\tnumber += 1;\n\t\tplaceholder = prefix + number;\n\t} while (this.knownMacros[placeholder]);\n\tthis.placeholders[placeholder] = value;\n\tthis.reverseMap[value] = placeholder;\n\tthis.reserve(placeholder);\n\treturn placeholder;\n};\n\nWikiRelinker.prototype.addWidget = function(widget) {\n\tthis.widget = widget;\n\twhile (this.widget.children.length > 0) {\n\t\tthis.widget = this.widget.children[0];\n\t}\n};\n\nWikiRelinker.prototype.getVariableWidget = function() {\n\tif (!this.widget) {\n\t\tthis.widget = this.wiki.relinkGlobalMacros();\n\t\tvar parentWidget = new Widget({}, {parentWidget: this.widget});\n\t\tparentWidget.setVariable(\"currentTiddler\", this.title);\n\t\tvar widget = new Widget({}, {parentWidget: parentWidget});\n\t\tthis.addWidget(widget);\n\t}\n\treturn this.widget;\n};\n\nWikiRelinker.prototype.reserve = function(macro) {\n\tthis.knownMacros[macro] = true;\n};\n\nWikiRelinker.prototype.getPreamble = function() {\n\tvar results = [];\n\tfor (var name in this.placeholders) {\n\t\tvar val = this.placeholders[name];\n\t\tresults.push(\"\\\\define \"+name+\"() \"+val+\"\\n\");\n\t}\n\tif (results.length > 0) {\n\t\treturn results.join('');\n\t} else {\n\t\treturn undefined;\n\t}\n};\n\nexports[type] = function(tiddler, fromTitle, toTitle, changes, options) {\n\tvar text = tiddler.fields.text,\n\t\tbuilder = new Rebuilder(text),\n\t\tparser = new WikiRelinker(text, tiddler.fields.title, toTitle, options),\n\t\tmatchingRule;\n\twhile (matchingRule = parser.findNextMatch(parser.relinkRules, parser.pos)) {\n\t\tif (matchingRule.rule.relink) {\n\t\t\tvar newSegment = matchingRule.rule.relink(tiddler, text, fromTitle, toTitle, options);\n\t\t\tif (newSegment !== undefined) {\n\t\t\t\tbuilder.add(newSegment, matchingRule.matchIndex, parser.pos);\n\t\t\t}\n\t\t} else {\n\t\t\tif (matchingRule.rule.matchRegExp !== undefined) {\n\t\t\t\tparser.pos = matchingRule.rule.matchRegExp.lastIndex;\n\t\t\t} else {\n\t\t\t\t// We can't easily determine the end of this\n\t\t\t\t// rule match. We'll \"parse\" it so that\n\t\t\t\t// parser.pos gets updated, but we throw away\n\t\t\t\t// the results.\n\t\t\t\tmatchingRule.rule.parse();\n\t\t\t}\n\t\t}\n\t}\n\tif (builder.changed()) {\n\t\tbuilder.prepend(parser.getPreamble());\n\t\tchanges.text = builder.results();\n\t}\n};\n",
            "module-type": "relinktextoperator",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles comment blocks. Or rather //doesn't// handle them, since we should\nignore their contents.\n\n\"<!-- [[Renamed Title]] -->\" will remain unchanged.\n\n\\*/\n\nexports.name = [\"commentinline\", \"commentblock\"];\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\treturn undefined;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement of filtered transclusions in wiki text like,\n\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n\nThis renames both the list and the template field.\n\n\\*/\n\nexports.name = ['filteredtranscludeinline', 'filteredtranscludeblock'];\n\nvar filterHandler = require(\"$:/plugins/flibbles/relink/js/settings\").getRelinker('filter');\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar utils = require(\"./utils.js\");\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tvar m = this.match;\n\t\tfilter = m[1],\n\t\ttooltip = m[2],\n\t\ttemplate = m[3],\n\t\tstyle = m[4],\n\t\tclasses = m[5],\n\t\tparser = this.parser,\n\t\tlogArguments = {\n\t\t\tfrom: fromTitle,\n\t\t\tto: toTitle,\n\t\t\ttiddler: tiddler.fields.title\n\t\t};\n\tparser.pos = this.matchRegExp.lastIndex;\n\tvar modified = false;\n\tif ($tw.utils.trim(template) === fromTitle) {\n\t\t// preserves user-inputted whitespace\n\t\ttemplate = template.replace(fromTitle, toTitle);\n\t\tmodified = true;\n\t}\n\tvar extendedOptions = $tw.utils.extend({placeholder: this.parser}, options);\n\tvar relinkedFilter = filterHandler.relink(filter, fromTitle, toTitle, extendedOptions);\n\tvar message = \"filteredtransclude\";\n\tif (extendedOptions.usedPlaceholder) {\n\t\tmessage = \"filteredtransclude-placeholder\";\n\t}\n\tif (relinkedFilter !== undefined) {\n\t\tfilter = relinkedFilter;\n\t\tmodified = true;\n\t}\n\tif (!modified) {\n\t\treturn undefined;\n\t}\n\tif (canBePretty(filter) && canBePrettyTemplate(template)) {\n\t\tlog(message, logArguments, options);\n\t\treturn prettyList(filter, tooltip, template, style, classes);\n\t}\n\tmessage = message + \"-widget\";\n\tif (classes !== undefined) {\n\t\tclasses = classes.split('.').join(' ');\n\t}\n\tfunction wrap(name, value, treatAsTitle) {\n\t\tif (!value) {\n\t\t\treturn '';\n\t\t}\n\t\tvar wrappedValue = utils.wrapAttributeValue(value);\n\t\tif (wrappedValue === undefined) {\n\t\t\tvar category = treatAsTitle ? undefined : name;\n\t\t\twrappedValue = \"<<\"+parser.getPlaceholderFor(value,category)+\">>\";\n\t\t\tmessage = \"filteredtransclude-placeholder-widget\";\n\t\t}\n\t\treturn \" \"+name+\"=\"+wrappedValue;\n\t};\n\tvar widget = [\n\t\t\"<$list\",\n\t\twrap(\"filter\", filter),\n\t\twrap(\"tooltip\", tooltip),\n\t\twrap(\"template\", template, true),\n\t\twrap(\"style\", style),\n\t\twrap(\"itemClass\", classes),\n\t\t\"/>\"\n\t].join('');\n\tlog(message, logArguments, options);\n\treturn widget;\n};\n\nfunction canBePretty(filter) {\n\treturn filter.indexOf('|') < 0 && filter.indexOf('}}') < 0;\n};\n\nfunction canBePrettyTemplate(template) {\n\treturn !template || (\n\t\ttemplate.indexOf('|') < 0\n\t\t&& template.indexOf('{') < 0\n\t\t&& template.indexOf('}') < 0);\n};\n\nfunction prettyList(filter, tooltip, template, style, classes) {\n\tif (tooltip === undefined) {\n\t\ttooltip = '';\n\t} else {\n\t\ttooltip = \"|\" + tooltip;\n\t}\n\tif (template === undefined) {\n\t\ttemplate = '';\n\t} else {\n\t\ttemplate = \"||\" + template;\n\t}\n\tif (classes === undefined) {\n\t\tclasses = '';\n\t} else {\n\t\tclasses = \".\" + classes;\n\t}\n\tstyle = style || '';\n\treturn \"{{{\"+filter+tooltip+template+\"}}\"+style+\"}\"+classes;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement in attributes of widgets and html elements\nThis is configurable to select exactly which attributes of which elements\nshould be changed.\n\n<$link to=\"TiddlerTitle\" />\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar html = require(\"$:/core/modules/parsers/wikiparser/rules/html.js\");\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar filterHandler = require(\"$:/plugins/flibbles/relink/js/settings\").getRelinker('filter');\nvar macrocall = require(\"./macrocall.js\");\nvar CannotRelinkError = require(\"$:/plugins/flibbles/relink/js/errors.js\").CannotRelinkError;\n\nexports.name = \"html\";\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tvar managedElement = settings.getAttributes(options)[this.nextTag.tag],\n\t\tbuilder = new Rebuilder(text, this.nextTag.start);\n\tvar importFilterAttr;\n\tfor (var attributeName in this.nextTag.attributes) {\n\t\tvar attr = this.nextTag.attributes[attributeName];\n\t\tvar nextEql = text.indexOf('=', attr.start);\n\t\t// This is the rare case of changing tiddler\n\t\t// \"true\" to something else when \"true\" is\n\t\t// implicit, like <$link to /> We ignore those.\n\t\tif (nextEql < 0 || nextEql > attr.end) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (this.nextTag.tag === \"$importvariables\" && attributeName === \"filter\") {\n\t\t\timportFilterAttr = attr;\n\t\t}\n\t\tvar oldValue, quote, logMessage = \"attribute\";\n\t\tif (attr.type === \"string\") {\n\t\t\tvar handler = getAttributeHandler(this.nextTag, attributeName, options);\n\t\t\tif (!handler) {\n\t\t\t\t// We don't manage this attribute. Bye.\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar extendedOptions = $tw.utils.extend({placeholder: this.parser}, options);\n\t\t\toldValue = attr.value;\n\t\t\tvar value = handler.relink(attr.value, fromTitle, toTitle, extendedOptions);\n\t\t\tif (value === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (extendedOptions.usedPlaceholder) {\n\t\t\t\tlogMessage = \"attribute-placeholder\";\n\t\t\t}\n\t\t\tquote = utils.determineQuote(text, attr);\n\t\t\tattr.quotedValue = utils.wrapAttributeValue(value,quote);\n\t\t\tif (attr.quotedValue === undefined) {\n\t\t\t\t// The value was unquotable. We need to make\n\t\t\t\t// a macro in order to replace it.\n\t\t\t\tvalue = this.parser.getPlaceholderFor(value,handler.name)\n\t\t\t\tattr.type = \"macro\";\n\t\t\t\tattr.quotedValue = \"<<\"+value+\">>\";\n\t\t\t\tlogMessage = \"attribute-placeholder\";\n\t\t\t}\n\t\t\tattr.value = value;\n\t\t} else if (attr.type === \"indirect\") {\n\t\t\tif (toTitle.indexOf(\"}\") >= 0) {\n\t\t\t\t// Impossible replacement\n\t\t\t\tthrow new CannotRelinkError();\n\t\t\t}\n\t\t\toldValue = attr.textReference;\n\t\t\tquote = \"{{\";\n\t\t\tvar ref = $tw.utils.parseTextReference(attr.textReference);\n\t\t\tif (ref.title !== fromTitle) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tref.title = toTitle;\n\t\t\tattr.textReference = refHandler.toString(ref);\n\t\t\tattr.quotedValue = \"{{\"+attr.textReference+\"}}\";\n\t\t} else if (attr.type === \"filtered\") {\n\t\t\tvar extendedOptions = $tw.utils.extend({placeholder: this.parser}, options);\n\t\t\toldValue = attr.filter\n\t\t\tvar filter = filterHandler.relink(attr.filter, fromTitle, toTitle, extendedOptions);\n\t\t\tif (filter === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!canBeFilterValue(filter)) {\n\t\t\t\t// Although I think we can actually do this one.\n\t\t\t\tthrow new CannotRelinkError();\n\t\t\t}\n\t\t\tattr.filter = filter;\n\t\t\tattr.quotedValue = \"{{{\" + filter + \"}}}\";\n\t\t\tquote = \"{{{\";\n\t\t} else if (attr.type === \"macro\") {\n\t\t\tvar macro = attr.value;\n\t\t\toldValue = attr.value;\n\t\t\tvar newMacro = macrocall.relinkMacroInvocation(macro, text, this.parser, fromTitle, toTitle, options);\n\t\t\tif (newMacro === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (macrocall.mustBeAWidget(newMacro)) {\n\t\t\t\tthrow new CannotRelinkError();\n\t\t\t}\n\t\t\tattr.value = newMacro;\n\t\t\t// TODO: Let's not hack like this. attr.value is\n\t\t\t// expected to be a string of the unquoted value below.\n\t\t\t// Make this better when I can.\n\t\t\toldValue.length = (macro.end-macro.start)-4;\n\t\t\tquote = \"<<\";\n\t\t\tattr.quotedValue = macrocall.macroToString(newMacro, text, this.parser, options);\n\t\t} else {\n\t\t\tcontinue;\n\t\t}\n\t\t// account for the quote if it's there.\n\t\t// We count backwards from the end to preserve whitespace\n\t\tvar valueStart = attr.end\n\t\t               - (quote.length*2)\n\t\t               - oldValue.length;\n\t\tbuilder.add(attr.quotedValue, valueStart, attr.end);\n\t\tvar logArguments = {\n\t\t\tfrom: fromTitle,\n\t\t\tto: toTitle,\n\t\t\ttiddler: tiddler.fields.title,\n\t\t\telement: this.nextTag.tag,\n\t\t\tattribute: attributeName\n\t\t};\n\t\tlog(logMessage, logArguments, options);\n\t}\n\tif (importFilterAttr) {\n\t\tvar importFilter = computeAttribute(importFilterAttr, this.parser, options);\n\t\tvar parentWidget = this.parser.getVariableWidget();\n\t\tvar varHolder = options.wiki.relinkGenerateVariableWidget(importFilter, parentWidget);\n\t\tthis.parser.addWidget(varHolder);\n\t}\n\tthis.parser.pos = this.nextTag.end;\n\treturn builder.results(this.nextTag.end);\n};\n\n/** Returns the field handler for the given attribute of the given widget.\n *  If this returns undefined, it means we don't handle it. So skip.\n */\nfunction getAttributeHandler(widget, attributeName, options) {\n\tif (widget.tag === \"$macrocall\") {\n\t\tvar nameAttr = widget.attributes[\"$name\"];\n\t\tvar macro = settings.getMacros(options)[nameAttr.value];\n\t\tif (macro) {\n\t\t\treturn macro[attributeName];\n\t\t}\n\t} else {\n\t\tvar element = settings.getAttributes(options)[widget.tag];\n\t\tif (element) {\n\t\t\treturn element[attributeName];\n\t\t}\n\t}\n\treturn undefined;\n};\n\nfunction computeAttribute(attribute, parser, options) {\n\tvar value;\n\tif(attribute.type === \"filtered\") {\n\t\tvar parentWidget = parser.getVariableWidget();\n\t\tvalue = options.wiki.filterTiddlers(attribute.filter,parentWidget)[0] || \"\";\n\t} else if(attribute.type === \"indirect\") {\n\t\tvar parentWidget = parser.getVariableWidget();\n\t\tvalue = options.wiki.getTextReference(attribute.textReference,\"\",parentWidget.variables.currentTiddler.value);\n\t} else if(attribute.type === \"macro\") {\n\t\tvar parentWidget = parser.getVariableWidget();\n\t\tvalue = parentWidget.getVariable(attribute.value.name,{params: attribute.value.params});\n\t} else { // String attribute\n\t\tvalue = attribute.value;\n\t}\n\treturn value;\n};\n\nfunction canBeFilterValue(value) {\n\treturn value.indexOf(\"}}}\") < 0 && value.substr(value.length-2) !== '}}';\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles import pragmas\n\n\\import [tag[MyTiddler]]\n\\*/\n\nvar settings = require(\"$:/plugins/flibbles/relink/js/settings.js\");\nvar log = require(\"$:/plugins/flibbles/relink/js/language.js\").logRelink;\nvar filterRelinker = settings.getRelinker('filter');\n\nexports.name = \"import\";\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\t// In this one case, I'll let the parser parse out the filter and move\n\t// the ptr.\n\tvar start = this.matchRegExp.lastIndex;\n\tvar parseTree = this.parse();\n\tvar filter = parseTree[0].attributes.filter.value;\n\n\tvar extendedOptions = $tw.utils.extend({placeholder: this.parser},options);\n\tvar value = filterRelinker.relink(filter, fromTitle, toTitle, extendedOptions);\n\tvar rtn = undefined;\n\tif (value !== undefined) {\n\t\tvar message = extendedOptions.usedPlaceholder ? \"import-placeholder\" : \"import\";\n\t\tlog(message, {\n\t\t\tfrom: fromTitle,\n\t\t\tto: toTitle,\n\t\t\ttiddler: tiddler.fields.title\n\t\t}, options);\n\t\tvar newline = text.substring(start+filter.length, this.parser.pos);\n\t\tfilter = value;\n\t\trtn = \"\\\\import \" + value + newline;\n\t}\n\n\t// Before we go, we need to actually import the variables\n\t// it's calling for.\n\tvar parentWidget = this.parser.getVariableWidget();\n\tvar variableHolder = options.wiki.relinkGenerateVariableWidget(filter, parentWidget);\n\tthis.parser.addWidget(variableHolder);\n\n\treturn rtn;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles macro calls.\n\n<<myMacro '[[MyFilter]]' 'myTitle'>>\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar CannotFindMacroDefError = require(\"$:/plugins/flibbles/relink/js/errors.js\").CannotFindMacroDefError;\n\nexports.name = [\"macrocallinline\", \"macrocallblock\"];\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2],\n\t\tmacroText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar start = this.matchRegExp.lastIndex - this.match[0].length;\n\tvar managedMacro = settings.getMacros(options)[macroName];\n\tif (!managedMacro) {\n\t\t// We don't manage this macro. Bye.\n\t\treturn undefined;\n\t}\n\tvar offset = macroName.length+2;\n\toffset = $tw.utils.skipWhiteSpace(macroText, offset);\n\tvar params = parseParams(paramString, offset+start);\n\tvar macroInfo = {\n\t\tname: macroName,\n\t\tstart: start,\n\t\tend: this.matchRegExp.lastIndex,\n\t\tparams: params\n\t};\n\tvar results = this.relinkMacroInvocation(macroInfo, text, this.parser, fromTitle, toTitle, options);\n\tif (results) {\n\t\treturn this.macroToString(results, text, this.parser, options);\n\t} else {\n\t\treturn undefined;\n\t}\n};\n\n/**Processes the given macro,\n * macro: {name:, params:, start:, end:}\n * each parameters: {name:, end:, value:}\n * Macro invocation returned is the same, but relinked, and may have new keys:\n * parameters: {type: macro, start:, newValue: (quoted replacement value)}\n */\nexports.relinkMacroInvocation = function(macro, text, parser, fromTitle, toTitle, options) {\n\tvar managedMacro = settings.getMacros(options)[macro.name];\n\tvar modified = false;\n\tif (!managedMacro) {\n\t\t// We don't manage this macro. Bye.\n\t\treturn undefined;\n\t}\n\tif (macro.params.every(function(p) {\n\t\treturn p.value.indexOf(fromTitle) < 0;\n\t})) {\n\t\t// We cut early if the fromTitle doesn't even appear\n\t\t// anywhere in the title. This is to avoid any headache\n\t\t// about finding macro definitions (and any resulting\n\t\t// exceptions if there isn't even a title to replace.\n\t\treturn undefined;\n\t}\n\tvar outMacro = $tw.utils.extend({}, macro);\n\toutMacro.params = macro.params.slice();\n\tfor (var managedArg in managedMacro) {\n\t\tvar index = getParamIndexWithinMacrocall(macro.name, managedArg, macro.params, parser, options);\n\t\tif (index < 0) {\n\t\t\t// this arg either was not supplied, or we can't find\n\t\t\t// the definition, so we can't tie it to an anonymous\n\t\t\t// argument. Either way, move on to the next.\n\t\t\tcontinue;\n\t\t}\n\t\tvar param = macro.params[index];\n\t\tvar handler = managedMacro[managedArg];\n\t\tvar extendedOptions = $tw.utils.extend({placeholder: parser}, options);\n\t\tvar value = handler.relink(param.value, fromTitle, toTitle, extendedOptions);\n\t\tif (value === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tvar quote = utils.determineQuote(text, param);\n\t\tvar quoted = utils.wrapAttributeValue(value, quote, ['', \"'\", '\"', '[[', '\"\"\"']);\n\t\tvar newParam = $tw.utils.extend({}, param);\n\t\tif (quoted === undefined) {\n\t\t\tvar ph = parser.getPlaceholderFor(value,handler.name);\n\t\t\tnewParam.newValue = \"<<\"+ph+\">>\";\n\t\t\tnewParam.type = \"macro\";\n\t\t} else {\n\t\t\tnewParam.start = newParam.end - (newParam.value.length + (quote.length*2));\n\t\t\tnewParam.value = value;\n\t\t\tnewParam.newValue = quoted;\n\t\t}\n\t\toutMacro.params[index] = newParam;\n\t\tmodified = true;\n\t}\n\tif (modified) {\n\t\treturn outMacro;\n\t}\n\treturn undefined;\n};\n\nexports.mustBeAWidget = function(macro) {\n\tfor (var i = 0; i < macro.params.length; i++) {\n\t\tif (macro.params[i].type === \"macro\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false\n};\n\n/**Given a macro object ({name:, params:, start: end:}), and the text where\n * it was parsed from, returns a new macro that maintains any syntactic\n * structuring.\n */\nexports.macroToString = function(macro, text, parser, options) {\n\tif (exports.mustBeAWidget(macro)) {\n\t\tvar names = getParamNames(macro.name, macro.params, parser, options);\n\t\tvar attrs = [];\n\t\tfor (var i = 0; i < macro.params.length; i++) {\n\t\t\tvar p = macro.params[i];\n\t\t\tvar val;\n\t\t\tif (p.newValue) {\n\t\t\t\tval = p.newValue;\n\t\t\t} else {\n\t\t\t\tval = utils.wrapAttributeValue(p.value);\n\t\t\t}\n\t\t\tattrs.push(\" \"+names[i]+\"=\"+val);\n\t\t}\n\t\treturn \"<$macrocall $name=\"+utils.wrapAttributeValue(macro.name)+attrs.join('')+\"/>\";\n\t} else {\n\t\tvar builder = new Rebuilder(text, macro.start);\n\t\tfor (var i = 0; i < macro.params.length; i++) {\n\t\t\tvar param = macro.params[i];\n\t\t\tif (param.newValue) {\n\t\t\t\tbuilder.add(param.newValue, param.start, param.end);\n\t\t\t}\n\t\t}\n\t\treturn builder.results(macro.end);\n\t}\n};\n\nfunction getParamIndexWithinMacrocall(macroName, param, params, parser, options) {\n\tvar index, i;\n\tfor (i = 0; i < params.length; i++) {\n\t\tif (params[i].name === param) {\n\t\t\treturn i;\n\t\t}\n\t}\n\tvar expectedIndex = indexOfParameterDef(macroName, param, parser, options);\n\t// We've got to skip over all the named parameter instances.\n\tif (expectedIndex >= 0) {\n\t\tvar anonI = 0;\n\t\tfor (i = 0; i < params.length; i++) {\n\t\t\tif (params[i].name === undefined) {\n\t\t\t\tif (anonI === expectedIndex) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t\tanonI++;\n\t\t\t} else {\n\t\t\t\tvar indexOfOther = indexOfParameterDef(macroName, params[i].name, parser, options);\n\t\t\t\tif (indexOfOther < expectedIndex) {\n\t\t\t\t\tanonI++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn -1;\n};\n\n// Looks up the definition of a macro, and figures out what the expected index\n// is for the given parameter.\nfunction indexOfParameterDef(macroName, paramName, parser, options) {\n\tvar def = getDefinition(macroName, parser, options);\n\tvar params = def.params || [];\n\tfor (var i = 0; i < params.length; i++) {\n\t\tif (params[i].name === paramName) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nfunction getParamNames(macroName, params, parser, options) {\n\tvar used = Object.create(null);\n\tvar rtn = new Array(params.length);\n\tvar anonsExist = false;\n\tvar i;\n\tfor (i = 0; i < params.length; i++) {\n\t\tvar name = params[i].name;\n\t\tif (name) {\n\t\t\trtn[i] = name;\n\t\t\tused[name] = true;\n\t\t} else {\n\t\t\tanonsExist = true;\n\t\t}\n\t}\n\tif (anonsExist) {\n\t\tvar defParams = getDefinition(macroName, parser, options).params || [];\n\t\tvar defPtr = 0;\n\t\tfor (i = 0; i < params.length; i++) {\n\t\t\tif (rtn[i] === undefined) {\n\t\t\t\twhile(defPtr < defParams.length && used[defParams[defPtr].name]) {\n\t\t\t\t\tdefPtr++;\n\t\t\t\t}\n\t\t\t\tif (defPtr >= defParams.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\trtn[i] = defParams[defPtr].name;\n\t\t\t\tused[defParams[defPtr].name] = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn rtn;\n};\n\n/** Returns undefined if the definition cannot be found.\n */\nfunction getDefinition (macroName, parser, options) {\n\tvar variableContainer = parser.getVariableWidget();\n\tvar def = variableContainer.variables[macroName];\n\tif (!def) {\n\t\t// Check with the macro modules\n\t\tif ($tw.utils.hop($tw.macros, macroName)) {\n\t\t\tdef = $tw.macros[macroName];\n\t\t} else {\n\t\t\tthrow new CannotFindMacroDefError(macroName);\n\t\t}\n\t}\n\treturn def;\n};\n\nfunction parseParams(paramString, pos) {\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\t//paramInfo.start = pos;\n\t\tparamInfo.end = reParam.lastIndex + pos;\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn params;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles pragma macro definitions. Except we only update placeholder macros\nthat we may have previously install.\n\n\\define relink-?() Tough title\n\n\\*/\n\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar settings = require(\"$:/plugins/flibbles/relink/js/settings\");\n\nexports.name = \"macrodef\";\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tvar setParseTreeNode = this.parse();\n\tvar parentWidget = this.parser.getVariableWidget();\n\tvar setWidget = parentWidget.makeChildWidget(setParseTreeNode[0]);\n\tsetWidget.computeAttributes();\n\tsetWidget.execute();\n\tthis.parser.addWidget(setWidget);\n\t// Parse set the pos pointer, but we don't want to skip the macro body.\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar m = this.match;\n\t// This macro is not available should we need to make one.\n\tthis.parser.reserve(m[1]);\n\t// !m[3] means it's not a multiline macrodef\n\tvar placeholder = /^relink-(?:(\\w+)-)?(\\d+)$/.exec(m[1]);\n\tif (placeholder && m[2] === '' && !m[3]) {\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(text, this.parser.pos);\n\t\tvar valueRegExp = /([^\\n\\r]+)(\\r?\\n)/mg;\n\t\tvalueRegExp.lastIndex = this.parser.pos;\n\t\tvar match = valueRegExp.exec(text);\n\t\tif (match) {\n\t\t\tvar handler = settings.getRelinker(placeholder[1] || 'title');\n\t\t\t\t// This is a filter\n\t\t\tvar extendedOptions = $tw.utils.extend({placeholder: this.parser}, options);\n\t\t\tvar value = handler.relink(match[1], fromTitle, toTitle, extendedOptions);\n\t\t\tif (value !== undefined) {\n\t\t\t\tvar message = \"macrodef\";\n\t\t\t\tif (extendedOptions.usedPlaceholder) {\n\t\t\t\t\tmessage = \"macrodef-placeholder\";\n\t\t\t\t}\n\t\t\t\tlog(message, {\n\t\t\t\t\tfrom: fromTitle,\n\t\t\t\t\tto: toTitle,\n\t\t\t\t\ttiddler: tiddler.fields.title,\n\t\t\t\t\tmacro: m[1]\n\t\t\t\t}, options);\n\t\t\t\tthis.parser.pos += match[0].length;\n\t\t\t\treturn \"\\\\define \"+m[1]+\"() \"+value+match[2];\n\t\t\t}\n\t\t}\n\t}\n\treturn undefined;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement in wiki text inline rules, like,\n\n[[Introduction]]\n\n[[link description|TiddlerTitle]]\n\n\\*/\n\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar utils = require(\"./utils.js\");\n\nexports.name = \"prettylink\";\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar caption, quoted, m = this.match;\n\tif (m[2] === fromTitle) {\n\t\t// format is [[caption|MyTiddler]]\n\t\tcaption = m[1];\n\t} else if (m[2] !== undefined || m[1] !== fromTitle) {\n\t\t// format is [[MyTiddler]], and it doesn't match\n\t\treturn undefined;\n\t}\n\tvar logArguments = {\n\t\tfrom: fromTitle,\n\t\tto: toTitle,\n\t\ttiddler: tiddler.fields.title\n\t};\n\tif (utils.canBePretty(toTitle)) {\n\t\tlog(\"prettylink\", logArguments, options);\n\t\treturn prettyLink(toTitle, caption);\n\t} else if (caption === undefined) {\n\t\t// If we don't have a caption, we have to resort to placeholders\n\t\t// anyway to prevent link/caption desync from later relinks.\n\t\t// It doesn't matter whether the toTitle is quotable\n\t\tlog(\"prettylink-placeholder\", logArguments, options);\n\t\tvar ph = this.parser.getPlaceholderFor(toTitle);\n\t\treturn \"<$link to=<<\"+ph+\">>><$text text=<<\"+ph+\">>/></$link>\";\n\t} else if (quoted = utils.wrapAttributeValue(toTitle)) {\n\t\tlog(\"prettylink-widget\", logArguments, options);\n\t\treturn \"<$link to=\"+quoted+\">\"+caption+\"</$link>\";\n\t} else {\n\t\tlog(\"prettylink-placeholder\", logArguments, options);\n\t\tvar ph = this.parser.getPlaceholderFor(toTitle);\n\t\treturn \"<$link to=<<\"+ph+\">>>\"+caption+\"</$link>\";\n\t}\n};\n\nfunction prettyLink(title, caption) {\n\tif (caption) {\n\t\treturn \"[[\" + caption + \"|\" + title + \"]]\";\n\t} else {\n\t\treturn \"[[\" + title + \"]]\";\n\t}\n};\n\nfunction isSafe(value) {\n\treturn value.indexOf(\"]]\") < 0 && value[value.length-1] !== ']';\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nParses and acknowledges any pragma rules a tiddler has.\n\n\\rules except html wikilink\n\n\\*/\n\nexports.name = \"rules\";\n\n/**This is all we have to do. The rules rule doesn't parse. It just amends\n * the rules, which is exactly what I want it to do too.\n * It also takes care of moving the pos pointer forward.\n */\nexports.relink = function() { this.parse(); };\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement of transclusions in wiki text like,\n\n{{RenamedTiddler}}\n{{RenamedTiddler||TemplateTitle}}\n\nThis renames both the tiddler and the template field.\n\n\\*/\n\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar utils = require(\"./utils.js\");\n\nexports.name = ['transcludeinline', 'transcludeblock'];\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tvar m = this.match,\n\t\treference = m[1],\n\t\ttemplate = m[2],\n\t\tquoted,\n\t\tlogArguments = {\n\t\t\tfrom: fromTitle,\n\t\t\tto: toTitle,\n\t\t\ttiddler: tiddler.fields.title\n\t\t};\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar trimmedRef = $tw.utils.trim(reference);\n\tvar ref = $tw.utils.parseTextReference(trimmedRef);\n\t// This block takes care of 99% of all cases\n\tif (canBePrettyTemplate(toTitle) &&\n\t\t// title part has one extra restriction\n\t    (ref.title !== fromTitle || refHandler.canBePretty(toTitle))) {\n\t\tvar modified = false;\n\t\tif (ref.title === fromTitle) {\n\t\t\tmodified = true;\n\t\t\tref.title = toTitle;\n\t\t\tvar refString = refHandler.toString(ref);\n\t\t\t// preserve user's whitespace\n\t\t\treference = reference.replace(trimmedRef, refString);\n\t\t}\n\t\tif ($tw.utils.trim(template) === fromTitle) {\n\t\t\tmodified = true;\n\t\t\t// preserve user's whitespace\n\t\t\ttemplate = template.replace(fromTitle, toTitle);\n\t\t}\n\t\tif (modified) {\n\t\t\tlog(\"transclude\", logArguments, options);\n\t\t\treturn prettyTransclude(reference, template);\n\t\t}\n\t\treturn undefined;\n\t}\n\t// Now for the 1%...\n\tif (ref.title === fromTitle) {\n\t\tvar resultTitle = utils.wrapAttributeValue(toTitle);\n\t\tif (resultTitle === undefined) {\n\t\t\tresultTitle = \"<<\"+this.parser.getPlaceholderFor(toTitle)+\">>\";\n\t\t\tlog(\"transclude-placeholder\", logArguments, options);\n\t\t} else {\n\t\t\tlog(\"transclude-widget\", logArguments, options);\n\t\t}\n\t\tif ($tw.utils.trim(template) === fromTitle) {\n\t\t\t// Now for this bizarre-ass use-case, where both the\n\t\t\t// title and template are being replaced.\n\t\t\tvar attrs = this.transcludeAttributes(ref.field, ref.index);\n\t\t\treturn \"<$tiddler tiddler=\"+resultTitle+\"><$transclude tiddler=\"+resultTitle+attrs+\"/></$tiddler>\";\n\t\t} else {\n\t\t\tref.title = undefined;\n\t\t\treturn \"<$tiddler tiddler=\"+resultTitle+\">\"+prettyTransclude(ref, template)+\"</$tiddler>\";\n\t\t}\n\t}\n\tif ($tw.utils.trim(template) === fromTitle) {\n\t\tvar resultTemplate = utils.wrapAttributeValue(toTitle);\n\t\tvar message = \"transclude-widget\";\n\t\tvar rtn;\n\t\tif (resultTemplate === undefined) {\n\t\t\tresultTemplate = \"<<\"+this.parser.getPlaceholderFor(toTitle)+\">>\";\n\t\t\tmessage = \"transclude-placeholder\";\n\t\t}\n\t\tif (ref.title) {\n\t\t\tvar resultTitle = utils.wrapAttributeValue(ref.title);\n\t\t\tif (resultTitle === undefined) {\n\t\t\t\t// This is one of the rare cases were we need\n\t\t\t\t// to placeholder a title OTHER than the one\n\t\t\t\t// we're changing.\n\t\t\t\tresultTitle = \"<<\"+this.parser.getPlaceholderFor(ref.title)+\">>\";\n\t\t\t\tmessage = \"transclude-placeholder\";\n\t\t\t}\n\t\t\tvar attrs = this.transcludeAttributes(ref.field, ref.index);\n\t\t\trtn = \"<$tiddler tiddler=\"+resultTitle+\"><$transclude tiddler=\"+resultTemplate+attrs+\"/></$tiddler>\";\n\t\t} else {\n\t\t\trtn = \"<$transclude tiddler=\"+resultTemplate+\"/>\";\n\t\t}\n\t\tlog(message, logArguments, options);\n\t\treturn rtn;\n\t}\n\treturn undefined;\n};\n\nfunction canBePrettyTemplate(value) {\n\treturn value.indexOf('}') < 0 && value.indexOf('{') < 0 && value.indexOf('|') < 0;\n};\n\n/**Returns attributes for a transclude widget.\n * only field or index should be used, not both, but both will return\n * the intuitive (albeit useless) result.\n */\nexports.transcludeAttributes = function(field, index) {\n\treturn rtn = [\n\t\twrapAttribute(this.parser, \"field\", field),\n\t\twrapAttribute(this.parser, \"index\", index)\n\t].join('');\n};\n\nfunction wrapAttribute(wikiRelinker, name, value) {\n\tif (value) {\n\t\tvar wrappedValue = utils.wrapAttributeValue(value);\n\t\tif (wrappedValue === undefined) {\n\t\t\twrappedValue = \"<<\"+wikiRelinker.getPlaceholderFor(value, name)+\">>\";\n\t\t}\n\t\treturn \" \"+name+\"=\"+wrappedValue;\n\t}\n\treturn '';\n};\n\nfunction prettyTransclude(textReference, template) {\n\tif (typeof textReference !== \"string\") {\n\t\ttextReference = refHandler.toString(textReference);\n\t}\n\tif (!textReference) {\n\t\ttextReference = '';\n\t}\n\tif (template !== undefined) {\n\t\treturn \"{{\"+textReference+\"||\"+template+\"}}\";\n\t} else {\n\t\treturn \"{{\"+textReference+\"}}\";\n\t}\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js": {
            "text": "/*\\\nmodule-type: library\n\nUtility methods for the wikitext relink rules.\n\n\\*/\n\n/**Finds an appropriate quote mark for a given value.\n *\n *Tiddlywiki doesn't have escape characters for attribute values. Instead,\n * we just have to find the type of quotes that'll work for the given title.\n * There exist titles that simply can't be quoted.\n * If it can stick with the preference, it will.\n *\n * return: Returns the wrapped value, or undefined if it's impossible to wrap\n */\nexports.wrapAttributeValue = function(value, preference, whitelist) {\n\twhitelist = whitelist || [\"\", \"'\", '\"', '\"\"\"'];\n\tvar choices = {\n\t\t\"\": function(v) {return !/([\\/\\s<>\"'=])/.test(v); },\n\t\t\"'\": function(v) {return v.indexOf(\"'\") < 0; },\n\t\t'\"': function(v) {return v.indexOf('\"') < 0; },\n\t\t'\"\"\"': function(v) {return v.indexOf('\"\"\"') < 0 && v[v.length-1] != '\"';},\n\t\t\"[[\": exports.canBePrettyOperand\n\t};\n\tvar wrappers = {\n\t\t\"\": function(v) {return v; },\n\t\t\"'\": function(v) {return \"'\"+v+\"'\"; },\n\t\t'\"': function(v) {return '\"'+v+'\"'; },\n\t\t'\"\"\"': function(v) {return '\"\"\"'+v+'\"\"\"'; },\n\t\t\"[[\": function(v) {return \"[[\"+v+\"]]\"; }\n\t};\n\tif (choices[preference]) {\n\t\tif (choices[preference](value)) {\n\t\t\treturn wrappers[preference](value);\n\t\t}\n\t}\n\tfor (var i = 0; i < whitelist.length; i++) {\n\t\tvar quote = whitelist[i];\n\t\tif (choices[quote](value)) {\n\t\t\treturn wrappers[quote](value);\n\t\t}\n\t}\n\t// No quotes will work on this\n\treturn undefined;\n};\n\n/**Return true if value can be used inside a prettylink.\n */\nexports.canBePretty = function(value) {\n\treturn value.indexOf(\"]]\") < 0 && value[value.length-1] !== ']';\n};\n\nexports.canBePrettyOperand = function(value) {\n\treturn value.indexOf(']') < 0;\n};\n\n/**Given some text, and a param or  attribute within that text, this returns\n * what type of quotation that attribute is using.\n *\n * param: An object in the form {end:, ...}\n */\nexports.determineQuote = function(text, param) {\n\tvar pos = param.end-1;\n\tif (text[pos] === \"'\") {\n\t\treturn \"'\";\n\t}\n\tif (text[pos] === '\"') {\n\t\tif (text.substr(pos-2, 3) === '\"\"\"') {\n\t\t\treturn '\"\"\"';\n\t\t} else {\n\t\t\treturn '\"';\n\t\t}\n\t}\n\tif (text.substr(pos-1,2) === ']]' && text.substr((pos-param.value.length)-3, 2) === '[[') {\n\t\treturn \"[[\";\n\t}\n\treturn '';\n};\n",
            "module-type": "library",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js": {
            "text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles CamelCase links\n\nWikiLink\n\nbut not:\n\n~WikiLink\n\n\\*/\n\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar utils = require(\"./utils.js\");\n\nexports.name = \"wikilink\";\n\nexports.relink = function(tiddler, text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tif (this.match[0] === fromTitle && this.match[0][0] !== '~') {\n\t\tvar logArguments = {\n\t\t\tfrom: fromTitle,\n\t\t\tto: toTitle,\n\t\t\ttiddler: tiddler.fields.title\n\t\t};\n\t\tif (toTitle.match(this.matchRegExp) && toTitle[0] !== '~') {\n\t\t\tlog(\"wikilink\", logArguments, options);\n\t\t\treturn toTitle;\n\t\t} else if (utils.canBePretty(toTitle)) {\n\t\t\tlog(\"wikilink-pretty\", logArguments, options);\n\t\t\treturn \"[[\" + toTitle + \"]]\";\n\t\t} else {\n\t\t\tvar ph = this.parser.getPlaceholderFor(toTitle);\n\t\t\tlog(\"wikilink-placeholder\", logArguments, options);\n\t\t\treturn \"<$link to=<<\"+ph+\">>><$text text=<<\"+ph+\">>/></$link>\";\n\t\t}\n\t}\n\treturn undefined;\n};\n",
            "module-type": "relinkwikitextrule",
            "title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js",
            "type": "application/javascript"
        },
        "$:/plugins/flibbles/relink/js/utils/rebuilder.js": {
            "text": "/*\\\n\nThis helper class aids in reconstructing an existing string with new parts.\n\n\\*/\n\nfunction Rebuilder(text, start) {\n\tthis.text = text;\n\tthis.index = start || 0;\n\tthis.pieces = [];\n};\n\nmodule.exports = Rebuilder;\n\n/**Pieces must be added consecutively.\n * Start and end are the indices in the old string specifying where to graft\n * in the new piece.\n */\nRebuilder.prototype.add = function(value, start, end) {\n\tthis.pieces.push(this.text.substring(this.index, start), value);\n\tthis.index = end;\n};\n\nRebuilder.prototype.changed = function() {\n\treturn this.pieces.length > 0;\n};\n\n/** This sticks something on the beginning of the resulting content.\n */\nRebuilder.prototype.prepend = function(content) {\n\tif (content) {\n\t\tthis.pieces.unshift(content);\n\t}\n};\n\nRebuilder.prototype.results = function(end) {\n\tif (this.changed()) {\n\t\tthis.pieces.push(this.text.substring(this.index, end));\n\t\treturn this.pieces.join('');\n\t}\n\treturn undefined;\n};\n",
            "module-type": "library",
            "title": "$:/plugins/flibbles/relink/js/utils/rebuilder.js",
            "type": "application/javascript"
        },
        "$:/config/flibbles/relink/attributes/$button/to": {
            "title": "$:/config/flibbles/relink/attributes/$button/to",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$checkbox/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$checkbox/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$checkbox/tag": {
            "title": "$:/config/flibbles/relink/attributes/$checkbox/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$count/filter": {
            "title": "$:/config/flibbles/relink/attributes/$count/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$draggable/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$draggable/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$draggable/filter": {
            "title": "$:/config/flibbles/relink/attributes/$draggable/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$edit-text/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$edit-text/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$edit/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$edit/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$encrypt/filter": {
            "title": "$:/config/flibbles/relink/attributes/$encrypt/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$fieldmangler/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$fieldmangler/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$fields/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$fields/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$image/source": {
            "title": "$:/config/flibbles/relink/attributes/$image/source",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$importvariables/filter": {
            "title": "$:/config/flibbles/relink/attributes/$importvariables/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$linkcatcher/to": {
            "title": "$:/config/flibbles/relink/attributes/$linkcatcher/to",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$linkcatcher/set": {
            "title": "$:/config/flibbles/relink/attributes/$linkcatcher/set",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$link/to": {
            "title": "$:/config/flibbles/relink/attributes/$link/to",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$list/filter": {
            "title": "$:/config/flibbles/relink/attributes/$list/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$list/template": {
            "title": "$:/config/flibbles/relink/attributes/$list/template",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$list/editTemplate": {
            "title": "$:/config/flibbles/relink/attributes/$list/editTemplate",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$list/history": {
            "title": "$:/config/flibbles/relink/attributes/$list/history",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$navigator/story": {
            "title": "$:/config/flibbles/relink/attributes/$navigator/story",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$navigator/history": {
            "title": "$:/config/flibbles/relink/attributes/$navigator/history",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$radio/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$radio/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$range/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$range/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$reveal/stateTitle": {
            "title": "$:/config/flibbles/relink/attributes/$reveal/stateTitle",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$select/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$select/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$setvariable/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$setvariable/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$setvariable/subtiddler": {
            "title": "$:/config/flibbles/relink/attributes/$setvariable/subtiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$setvariable/filter": {
            "title": "$:/config/flibbles/relink/attributes/$setvariable/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$set/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$set/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$set/subtiddler": {
            "title": "$:/config/flibbles/relink/attributes/$set/subtiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$set/filter": {
            "title": "$:/config/flibbles/relink/attributes/$set/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/attributes/$tiddler/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$tiddler/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$transclude/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$transclude/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$transclude/subtiddler": {
            "title": "$:/config/flibbles/relink/attributes/$transclude/subtiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$view/tiddler": {
            "title": "$:/config/flibbles/relink/attributes/$view/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/attributes/$view/subtiddler": {
            "title": "$:/config/flibbles/relink/attributes/$view/subtiddler",
            "text": "title"
        },
        "$:/plugins/flibbles/relink/configuration": {
            "title": "$:/plugins/flibbles/relink/configuration",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/flibbles/relink/Configuration]!has[draft.of]]\" \"$:/plugins/flibbles/relink/ui/configuration/Fields\">>\n</div>\n"
        },
        "$:/config/flibbles/relink/fields/list": {
            "title": "$:/config/flibbles/relink/fields/list",
            "text": "list"
        },
        "$:/config/flibbles/relink/fields/list-after": {
            "title": "$:/config/flibbles/relink/fields/list-after",
            "text": "title"
        },
        "$:/config/flibbles/relink/fields/list-before": {
            "title": "$:/config/flibbles/relink/fields/list-before",
            "text": "title"
        },
        "$:/config/flibbles/relink/fields/tags": {
            "title": "$:/config/flibbles/relink/fields/tags",
            "text": "list"
        },
        "$:/plugins/flibbles/relink/language/Buttons/Delete/Caption": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint",
            "text": "Specify a new widget/element attribute to be updated whenever a tiddler is renamed"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption",
            "text": "add"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewField/Hint": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewField/Hint",
            "text": "Specify a new field to be updated whenever a tiddler is renamed"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewField/Caption": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewField/Caption",
            "text": "add"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint",
            "text": "Specify a new filter operator to be considered whenever a tiddler is renamed"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption",
            "text": "add"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint",
            "text": "Specify a new macro parameter to be updated whenever a tiddler is renamed"
        },
        "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption": {
            "title": "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption",
            "text": "add"
        },
        "$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator": {
            "title": "$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator",
            "text": "Filter Error: Unknown suffix for the 'relink' filter operator"
        },
        "$:/plugins/flibbles/relink/language/Help/Attributes": {
            "title": "$:/plugins/flibbles/relink/language/Help/Attributes",
            "text": "See the [[Attributes documentation page|https://flibbles.github.io/tw5-relink/#Attributes]] for details."
        },
        "$:/plugins/flibbles/relink/language/Help/Fields": {
            "title": "$:/plugins/flibbles/relink/language/Help/Fields",
            "text": "See the [[Fields documentation page|https://flibbles.github.io/tw5-relink/#Fields]] for details."
        },
        "$:/plugins/flibbles/relink/language/Help/Macros": {
            "title": "$:/plugins/flibbles/relink/language/Help/Macros",
            "text": "See the [[Macros documentation page|https://flibbles.github.io/tw5-relink/#Macros]] for details."
        },
        "$:/plugins/flibbles/relink/language/Help/Operators": {
            "title": "$:/plugins/flibbles/relink/language/Help/Operators",
            "text": "See the [[Operators documentation page|https://flibbles.github.io/tw5-relink/#Operators]] for details."
        },
        "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty": {
            "title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers contain any fields, links, macros, transclusions, or widgets referencing this one"
        },
        "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description": {
            "title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description",
            "text": "The following tiddlers contain fields, links, macros, transclusions, or widgets referencing this one:"
        },
        "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption": {
            "title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption",
            "text": "//Relink// References"
        },
        "$:/plugins/flibbles/relink/language/ui/Attributes/Caption": {
            "title": "$:/plugins/flibbles/relink/language/ui/Attributes/Caption",
            "text": "Attributes"
        },
        "$:/plugins/flibbles/relink/language/ui/Fields/Caption": {
            "title": "$:/plugins/flibbles/relink/language/ui/Fields/Caption",
            "text": "Fields"
        },
        "$:/plugins/flibbles/relink/language/ui/Macros/Caption": {
            "title": "$:/plugins/flibbles/relink/language/ui/Macros/Caption",
            "text": "Macros"
        },
        "$:/plugins/flibbles/relink/language/ui/Operators/Caption": {
            "title": "$:/plugins/flibbles/relink/language/ui/Operators/Caption",
            "text": "Operators"
        },
        "$:/config/flibbles/relink/macros/csvtiddlers/filter": {
            "title": "$:/config/flibbles/relink/macros/csvtiddlers/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/macros/datauri/title": {
            "title": "$:/config/flibbles/relink/macros/datauri/title",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/jsontiddler/title": {
            "title": "$:/config/flibbles/relink/macros/jsontiddler/title",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/jsontiddlers/filter": {
            "title": "$:/config/flibbles/relink/macros/jsontiddlers/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/macros/list-links/filter": {
            "title": "$:/config/flibbles/relink/macros/list-links/filter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/macros/list-links-draggable/tiddler": {
            "title": "$:/config/flibbles/relink/macros/list-links-draggable/tiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate": {
            "title": "$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/list-tagged-draggable/tag": {
            "title": "$:/config/flibbles/relink/macros/list-tagged-draggable/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate": {
            "title": "$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/toc/tag": {
            "title": "$:/config/flibbles/relink/macros/toc/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/toc/selectedTiddler": {
            "title": "$:/config/flibbles/relink/macros/toc/selectedTiddler",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/toc/template": {
            "title": "$:/config/flibbles/relink/macros/toc/template",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/tabs/buttonTemplate": {
            "title": "$:/config/flibbles/relink/macros/tabs/buttonTemplate",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/tabs/default": {
            "title": "$:/config/flibbles/relink/macros/tabs/default",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/tabs/tabsList": {
            "title": "$:/config/flibbles/relink/macros/tabs/tabsList",
            "text": "filter"
        },
        "$:/config/flibbles/relink/macros/tabs/template": {
            "title": "$:/config/flibbles/relink/macros/tabs/template",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/tag/tag": {
            "title": "$:/config/flibbles/relink/macros/tag/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/tag-pill/tag": {
            "title": "$:/config/flibbles/relink/macros/tag-pill/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/macros/timeline/subfilter": {
            "title": "$:/config/flibbles/relink/macros/timeline/subfilter",
            "text": "filter"
        },
        "$:/config/flibbles/relink/operators/list": {
            "title": "$:/config/flibbles/relink/operators/list",
            "text": "reference"
        },
        "$:/config/flibbles/relink/operators/tag": {
            "title": "$:/config/flibbles/relink/operators/tag",
            "text": "title"
        },
        "$:/config/flibbles/relink/operators/title": {
            "title": "$:/config/flibbles/relink/operators/title",
            "text": "title"
        },
        "$:/config/flibbles/relink/operators/field:title": {
            "title": "$:/config/flibbles/relink/operators/field:title",
            "text": "title"
        },
        "$:/language/EditTemplate/Title/Impossibles/Prompt": {
            "title": "$:/language/EditTemplate/Title/Impossibles/Prompt",
            "text": "The following references to this tiddler can ''not'' be updated by //Relink// due to the complexity of the new title:"
        },
        "$:/language/EditTemplate/Title/References/Prompt": {
            "title": "$:/language/EditTemplate/Title/References/Prompt",
            "text": "The following tiddlers will be updated if relinking:"
        },
        "$:/language/EditTemplate/Title/Relink/Prompt": {
            "title": "$:/language/EditTemplate/Title/Relink/Prompt",
            "text": "Use //Relink// to update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' across all other tiddlers"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define conditional-list(state, prompt, filter)\n<$list filter=\"[subfilter<__filter__>limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/$state$\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}}\n<<lingo [[$prompt$]]>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}}\n<<lingo [[$prompt$]]>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$list filter=<<__filter__>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n</$reveal>\n\n</$vars>\n\\end\n\n<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\" tabindex={{$:/config/EditTabIndex}}/>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<<conditional-list impossibles EditTemplate/Title/Impossibles/Prompt \"[{!!draft.title}relink:impossible<fromTitle>]\">>\n\n<<conditional-list references EditTemplate/Title/References/Prompt \"[relink:references<fromTitle>!title[$:/StoryList]sort[title]]\">>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/plugins/flibbles/relink/readme": {
            "title": "$:/plugins/flibbles/relink/readme",
            "type": "text/vnd.tiddlywiki",
            "text": "When renaming a tiddler, Relink can update the fields, filters, and widgets\nof all other tiddlers. However, it works through whitelisting.\n\nIt's already configured to update tiddler titles for all core widgets, filters,\nand fields, but the whitelists can be customized for each of this in the\nconfiguration panel.\n\nSee [[the tw5-relink website|https://github.com/flibbles/tw5-relink]] for\nmore details and examples.\n"
        },
        "$:/config/flibbles/relink/settings/default-type": {
            "title": "$:/config/flibbles/relink/settings/default-type",
            "text": "title"
        },
        "$:/plugins/flibbles/relink/ui/TiddlerInfo/References": {
            "title": "$:/plugins/flibbles/relink/ui/TiddlerInfo/References",
            "caption": "{{$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption}}",
            "tags": "$:/tags/TiddlerInfo",
            "text": "\\define lingo-base() $:/plugins/flibbles/relink/language/TiddlerInfo/\n\\define filter() [relink:references<currentTiddler>!title[$:/StoryList]sort[title]]\n<$list filter=\"[subfilter<filter>first[]]\">\n\n<<lingo References/Description>>\n</$list>\n\n<$list filter=<<filter>> emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n"
        },
        "$:/plugins/flibbles/relink/ui/components/button-delete": {
            "title": "$:/plugins/flibbles/relink/ui/components/button-delete",
            "text": "\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\n<$button class=\"tc-btn-invisible\"><$list filter=\"[all[current]is[tiddler]]\">\n<$action-deletetiddler $tiddler=<<currentTiddler>> />\n</$list><$list filter=\"[all[current]is[shadow]]\">\n<$action-setfield $tiddler=<<tiddlerName>> text=\"\" />\n</$list>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">{{$:/core/images/delete-button}}</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$(lingo-base)$Delete/Caption}}/></span>\n</$list></$button>\n"
        },
        "$:/plugins/flibbles/relink/ui/components/select-fieldtype": {
            "title": "$:/plugins/flibbles/relink/ui/components/select-fieldtype",
            "text": "<$select tiddler=<<currentTiddler>> default={{$:/config/flibbles/relinke/settings/default-type}} >\n<$list variable=\"option\"\n       filter=\"[[relinkfieldtype]modules[]removeprefix[$:/plugins/flibbles/relink/js/fieldtypes/]removesuffix[.js]move:-100{$:/config/flibbles/relink/settings/default-type}]\">\n<option><$text text=<<option>> /></option>\n</$list>\n</$select>\n"
        },
        "$:/plugins/flibbles/relink/ui/configuration/Attributes": {
            "title": "$:/plugins/flibbles/relink/ui/configuration/Attributes",
            "caption": "{{$:/plugins/flibbles/relink/language/ui/Attributes/Caption}}",
            "tags": "$:/tags/flibbles/relink/Configuration",
            "text": "\\define prefix-attr() $:/config/flibbles/relink/attributes/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define state-base() $:/state/flibbles/relink/\n\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Attributes}}\n\n<table><tbody>\n<tr><th>Widget/HTML Element</th><th>Attribute</th><th>Type</th><th>Delete</th></tr>\n<$list filter=\"[all[shadows+tiddlers]prefix<prefix-attr>!has[draft.of]has[text]]\">\n<$set name=\"element\"\n      filter=\"[all[current]removeprefix<prefix-attr>splitbefore[/]removesuffix[/]]\">\n<$set name=\"attribute\"\n      filter=\"[all[current]removeprefix<prefix-attr>removeprefix<element>removeprefix[/]]\">\n<tr>\n<td><$text text=<<element>> /></td>\n<td><$text text=<<attribute>> /></td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}</td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/button-delete}}</td>\n</tr>\n</$set></$set></$list>\n</tbody></table>\n\n<em class=\"tc-edit\">Add a new attribute:</em>\n<$edit-text tiddler=\"$(state-base)$element-name\"\n            tag=\"input\" default=\"\" placeholder=\"widget/element\" />\n<$edit-text tiddler=\"$(state-base)$attribute-name\"\n            tag=\"input\" default=\"\" placeholder=\"attribute\" />\n<$button tooltip={{$(lingo-base)$NewAttribute/Hint}}\n         aria-label={{$(lingo-base)$NewAttribute/Caption}}>\n<$set name=\"tiddlerName\"\n      filter=\"[<prefix-attr>addsuffix{$(state-base)$element-name}addsuffix[/]addsuffix{$(state-base)$attribute-name}]\">\n<$action-setfield $tiddler=<<tiddlerName>>\n                  text={{$:/config/flibbles/relink/settings/default-type}} />\n</$set>\n<$action-deletetiddler $tiddler=\"$(state-base)$attribute-name\" />\n<$action-deletetiddler $tiddler=\"$(state-base)$element-name\" />\n<$text text={{$(lingo-base)$NewAttribute/Caption}}/>\n</$button>\n\\end\n\n<<body>>\n"
        },
        "$:/plugins/flibbles/relink/ui/configuration/Fields": {
            "title": "$:/plugins/flibbles/relink/ui/configuration/Fields",
            "caption": "{{$:/plugins/flibbles/relink/language/ui/Fields/Caption}}",
            "tags": "$:/tags/flibbles/relink/Configuration",
            "text": "\\define prefix-fields() $:/config/flibbles/relink/fields/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define state-base() $:/state/flibbles/relink/\n\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Fields}}\n\n<table><tbody>\n<tr><th>Field Name</th><th>Field Type</th><th>Delete</th></tr>\n<$list filter=\"[all[shadows+tiddlers]prefix<prefix-fields>!has[draft.of]has[text]]\">\n<tr>\n<td><$list filter=\"[all[current]removeprefix<prefix-fields>]\"><<currentTiddler>></$list></td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}</td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/button-delete}}</td>\n</tr>\n</$list>\n</tbody></table>\n\n<em class=\"tc-edit\">Add a new field:</em>\n<$edit-text tiddler=\"$(state-base)$field-name\"\n            tag=\"input\" default=\"\" placeholder=\"field name\" />\n<$button tooltip={{$(lingo-base)$NewField/Hint}}\n         aria-label={{$(lingo-base)$NewField/Caption}}>\n<$set name=\"tiddlerName\"\n      filter=\"[<prefix-fields>addsuffix{$(state-base)$field-name}]\">\n<$action-setfield $tiddler=<<tiddlerName>>\n                  text={{$:/config/flibbles/relink/settings/default-type}} />\n</$set>\n<$action-deletetiddler $tiddler=\"$(state-base)$field-name\" />\n<$text text={{$(lingo-base)$NewField/Caption}}/>\n</$button>\n\\end\n\n<<body>>\n"
        },
        "$:/plugins/flibbles/relink/ui/configuration/Macros": {
            "title": "$:/plugins/flibbles/relink/ui/configuration/Macros",
            "caption": "{{$:/plugins/flibbles/relink/language/ui/Macros/Caption}}",
            "tags": "$:/tags/flibbles/relink/Configuration",
            "text": "\\define prefix-macro() $:/config/flibbles/relink/macros/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define state-base() $:/state/flibbles/relink/\n\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Macros}}\n\n<table><tbody>\n<tr><th>Macro</th><th>Parameter</th><th>Type</th><th>Delete</th></tr>\n<$list filter=\"[all[shadows+tiddlers]prefix<prefix-macro>!has[draft.of]has[text]]\">\n<$set name=\"parameter\"\n      filter=\"[all[current]removeprefix<prefix-macro>relink:splitafter[/]]\">\n<$set name=\"macro\"\n      filter=\"[all[current]removeprefix<prefix-macro>removesuffix<parameter>removesuffix[/]]\">\n<tr>\n<td><$text text=<<macro>> /></td>\n<td><$text text=<<parameter>> /></td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}</td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/button-delete}}</td>\n</tr>\n</$set></$set></$list>\n</tbody></table>\n\n<em class=\"tc-edit\">Add a new macro parameter:</em>\n<$edit-text tiddler=\"$(state-base)$macro-name\"\n            tag=\"input\" default=\"\" placeholder=\"macro\" />\n<$edit-text tiddler=\"$(state-base)$parameter-name\"\n            tag=\"input\" default=\"\" placeholder=\"parameter\" />\n<$button tooltip={{$(lingo-base)$NewParameter/Hint}}\n         aria-label={{$(lingo-base)$NewParameter/Caption}}>\n<$set name=\"tiddlerName\"\n      filter=\"[<prefix-macro>addsuffix{$(state-base)$macro-name}addsuffix[/]addsuffix{$(state-base)$parameter-name}]\">\n<$action-setfield $tiddler=<<tiddlerName>>\n                  text={{$:/config/flibbles/relink/settings/default-type}} />\n</$set>\n<$action-deletetiddler $tiddler=\"$(state-base)$parameter-name\" />\n<$action-deletetiddler $tiddler=\"$(state-base)$macro-name\" />\n<$text text={{$(lingo-base)$NewParameter/Caption}}/>\n</$button>\n\\end\n\n<<body>>\n"
        },
        "$:/plugins/flibbles/relink/ui/configuration/Operators": {
            "title": "$:/plugins/flibbles/relink/ui/configuration/Operators",
            "caption": "{{$:/plugins/flibbles/relink/language/ui/Operators/Caption}}",
            "tags": "$:/tags/flibbles/relink/Configuration",
            "text": "\\define prefix-ops() $:/config/flibbles/relink/operators/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define state-base() $:/state/flibbles/relink/\n\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Operators}}\n\n<table><tbody>\n<tr><th>Filter Operator</th><th>Operand Type</th><th>Delete</th></tr>\n<$list filter=\"[all[shadows+tiddlers]prefix<prefix-ops>!has[draft.of]has[text]]\">\n<tr>\n<td><$list variable=\"listItem\" filter=\"[<currentTiddler>removeprefix<prefix-ops>]\"><<listItem>></$list></td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}</td>\n<td>{{||$:/plugins/flibbles/relink/ui/components/button-delete}}</td>\n</tr>\n</$list>\n</tbody></table>\n\n<em class=\"tc-edit\">Add a new filter operator:</em>\n<$edit-text tiddler=\"$(state-base)$operator-name\"\n            tag=\"input\" default=\"\" placeholder=\"operator name\" />\n<$button tooltip={{$(lingo-base)$NewOperator/Hint}}\n         aria-label={{$(lingo-base)$NewOperator/Caption}}>\n<$set name=\"tiddlerName\"\n      filter=\"[<prefix-ops>addsuffix{$(state-base)$operator-name}]\">\n<$action-setfield $tiddler=<<tiddlerName>> text={{$:/config/flibbles/relink/settings/default-type}} />\n</$set>\n<$action-deletetiddler $tiddler=\"$(state-base)$operator-name\" />\n<$text text={{$(lingo-base)$NewOperator/Caption}}/>\n</$button>\n\\end\n\n<<body>>\n"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/tiddlywiki/browser-sniff/sniff.js": {
            "title": "$:/plugins/tiddlywiki/browser-sniff/sniff.js",
            "text": "/*\\\ntitle: $:/plugins/tiddlywiki/browser-sniff/sniff.js\ntype: application/javascript\nmodule-type: info\n\nInitialise $:/info/browser tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tif($tw.browser) {\n\t\t// Mappings from tiddler titles (prefixed with \"$:/info/browser/\") to bowser.browser property name\n\t\tvar bowser = require(\"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\"),\n\t\t\tmappings = [\n\t\t\t\t[\"name\",\"name\",\"unknown\"],\n\t\t\t\t[\"version\",\"version\"],\n\t\t\t\t[\"is/webkit\",\"webkit\"],\n\t\t\t\t[\"is/gecko\",\"gecko\"],\n\t\t\t\t[\"is/chrome\",\"chrome\"],\n\t\t\t\t[\"is/firefox\",\"firefox\"],\n\t\t\t\t[\"is/ios\",\"ios\"],\n\t\t\t\t[\"is/iphone\",\"iphone\"],\n\t\t\t\t[\"is/ipad\",\"ipad\"],\n\t\t\t\t[\"is/ipod\",\"ios\"],\n\t\t\t\t[\"is/opera\",\"opera\"],\n\t\t\t\t[\"is/phantomjs\",\"phantomjs\"],\n\t\t\t\t[\"is/safari\",\"safari\"],\n\t\t\t\t[\"is/seamonkey\",\"seamonkey\"],\n\t\t\t\t[\"is/blackberry\",\"blackberry\"],\n\t\t\t\t[\"is/webos\",\"webos\"],\n\t\t\t\t[\"is/silk\",\"silk\"],\n\t\t\t\t[\"is/bada\",\"bada\"],\n\t\t\t\t[\"is/tizen\",\"tizen\"],\n\t\t\t\t[\"is/sailfish\",\"sailfish\"],\n\t\t\t\t[\"is/android\",\"android\"],\n\t\t\t\t[\"is/windowsphone\",\"windowsphone\"],\n\t\t\t\t[\"is/firefoxos\",\"firefoxos\"]\n\t\t\t];\n\t\t$tw.utils.each(mappings,function(mapping) {\n\t\t\tvar value = bowser.browser[mapping[1]];\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = mapping[2];\n\t\t\t}\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = false;\n\t\t\t}\n\t\t\tif(typeof value === \"boolean\") {\n\t\t\t\tvalue = mapBoolean(value);\n\t\t\t}\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/\" + mapping[0], text: value});\n\t\t});\n\t\t// Set $:/info/browser/name to the platform with some changes from Bowser\n\t\tvar platform = bowser.browser.name;\n\t\tif(\"iPad iPhone iPod\".split(\" \").indexOf(platform) !== -1) {\n\t\t\tplatform = \"iOS\";\n\t\t}\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: platform});\n\t\t// Non-bowser settings for TiddlyFox and TiddlyDesktop\n\t\tvar hasTiddlyFox = !!document.getElementById(\"tiddlyfox-message-box\"), // Fails because message box is added after page load\n\t\t\tisTiddlyDesktop = false; // Can't detect it until we update TiddlyDesktop to have a distinct useragent string\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/has/tiddlyfox\", text: mapBoolean(hasTiddlyFox)});\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/is/tiddlydesktop\", text: mapBoolean(isTiddlyDesktop)});\n\t\tif(isTiddlyDesktop) {\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: \"TiddlyDesktop\"});\n\t\t}\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js": {
            "text": "/*!\n  * Bowser - a browser detector\n  * https://github.com/ded/bowser\n  * MIT License | (c) Dustin Diaz 2014\n  */\n\n!function (name, definition) {\n  if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition()\n  else if (typeof define == 'function') define(definition)\n  else this[name] = definition()\n}('bowser', function () {\n  /**\n    * See useragents.js for examples of navigator.userAgent\n    */\n\n  var t = true\n\n  function detect(ua) {\n\n    function getFirstMatch(regex) {\n      var match = ua.match(regex);\n      return (match && match.length > 1 && match[1]) || '';\n    }\n\n    var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n      , likeAndroid = /like android/i.test(ua)\n      , android = !likeAndroid && /android/i.test(ua)\n      , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n      , tablet = /tablet/i.test(ua)\n      , mobile = !tablet && /[^-]mobi/i.test(ua)\n      , result\n\n    if (/opera|opr/i.test(ua)) {\n      result = {\n        name: 'Opera'\n      , opera: t\n      , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\\s\\/](\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/windows phone/i.test(ua)) {\n      result = {\n        name: 'Windows Phone'\n      , windowsphone: t\n      , msie: t\n      , version: getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/msie|trident/i.test(ua)) {\n      result = {\n        name: 'Internet Explorer'\n      , msie: t\n      , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/chrome|crios|crmo/i.test(ua)) {\n      result = {\n        name: 'Chrome'\n      , chrome: t\n      , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (iosdevice) {\n      result = {\n        name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n      }\n      // WTF: version is not part of user agent in web apps\n      if (versionIdentifier) {\n        result.version = versionIdentifier\n      }\n    }\n    else if (/sailfish/i.test(ua)) {\n      result = {\n        name: 'Sailfish'\n      , sailfish: t\n      , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/seamonkey\\//i.test(ua)) {\n      result = {\n        name: 'SeaMonkey'\n      , seamonkey: t\n      , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/firefox|iceweasel/i.test(ua)) {\n      result = {\n        name: 'Firefox'\n      , firefox: t\n      , version: getFirstMatch(/(?:firefox|iceweasel)[ \\/](\\d+(\\.\\d+)?)/i)\n      }\n      if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n        result.firefoxos = t\n      }\n    }\n    else if (/silk/i.test(ua)) {\n      result =  {\n        name: 'Amazon Silk'\n      , silk: t\n      , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (android) {\n      result = {\n        name: 'Android'\n      , version: versionIdentifier\n      }\n    }\n    else if (/phantom/i.test(ua)) {\n      result = {\n        name: 'PhantomJS'\n      , phantom: t\n      , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n      result = {\n        name: 'BlackBerry'\n      , blackberry: t\n      , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n      }\n    }\n    else if (/(web|hpw)os/i.test(ua)) {\n      result = {\n        name: 'WebOS'\n      , webos: t\n      , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n      };\n      /touchpad\\//i.test(ua) && (result.touchpad = t)\n    }\n    else if (/bada/i.test(ua)) {\n      result = {\n        name: 'Bada'\n      , bada: t\n      , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n      };\n    }\n    else if (/tizen/i.test(ua)) {\n      result = {\n        name: 'Tizen'\n      , tizen: t\n      , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n      };\n    }\n    else if (/safari/i.test(ua)) {\n      result = {\n        name: 'Safari'\n      , safari: t\n      , version: versionIdentifier\n      }\n    }\n    else result = {}\n\n    // set webkit or gecko flag for browsers based on these engines\n    if (/(apple)?webkit/i.test(ua)) {\n      result.name = result.name || \"Webkit\"\n      result.webkit = t\n      if (!result.version && versionIdentifier) {\n        result.version = versionIdentifier\n      }\n    } else if (!result.opera && /gecko\\//i.test(ua)) {\n      result.name = result.name || \"Gecko\"\n      result.gecko = t\n      result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n    }\n\n    // set OS flags for platforms that have multiple browsers\n    if (android || result.silk) {\n      result.android = t\n    } else if (iosdevice) {\n      result[iosdevice] = t\n      result.ios = t\n    }\n\n    // OS version extraction\n    var osVersion = '';\n    if (iosdevice) {\n      osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n      osVersion = osVersion.replace(/[_\\s]/g, '.');\n    } else if (android) {\n      osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n    } else if (result.windowsphone) {\n      osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n    } else if (result.webos) {\n      osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n    } else if (result.blackberry) {\n      osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n    } else if (result.bada) {\n      osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n    } else if (result.tizen) {\n      osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n    }\n    if (osVersion) {\n      result.osversion = osVersion;\n    }\n\n    // device type extraction\n    var osMajorVersion = osVersion.split('.')[0];\n    if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion == 3 || (osMajorVersion == 4 && !mobile))) || result.silk) {\n      result.tablet = t\n    } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || result.blackberry || result.webos || result.bada) {\n      result.mobile = t\n    }\n\n    // Graded Browser Support\n    // http://developer.yahoo.com/yui/articles/gbs\n    if ((result.msie && result.version >= 10) ||\n        (result.chrome && result.version >= 20) ||\n        (result.firefox && result.version >= 20.0) ||\n        (result.safari && result.version >= 6) ||\n        (result.opera && result.version >= 10.0) ||\n        (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6)\n        ) {\n      result.a = t;\n    }\n    else if ((result.msie && result.version < 10) ||\n        (result.chrome && result.version < 20) ||\n        (result.firefox && result.version < 20.0) ||\n        (result.safari && result.version < 6) ||\n        (result.opera && result.version < 10.0) ||\n        (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n        ) {\n      result.c = t\n    } else result.x = t\n\n    return result\n  }\n\n  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')\n\n\n  /*\n   * Set our detect method to the main bowser object so we can\n   * reuse it to test other user agents.\n   * This is needed to implement future tests.\n   */\n  bowser._detect = detect;\n\n  return bowser\n});\n",
            "type": "application/javascript",
            "title": "$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js",
            "module-type": "library"
        },
        "$:/plugins/tiddlywiki/browser-sniff/readme": {
            "title": "$:/plugins/tiddlywiki/browser-sniff/readme",
            "text": "This plugin adds a number of `$:/info/` tiddlers containing information about the current browser.\n\nIt allows you to create content that is presented in a way that is responsive to different browsers.\n\nFor example, https://tiddlywiki.com uses this plugin to present the user with the best options for getting started depending on their browser.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/browser-sniff]]\n"
        },
        "$:/plugins/tiddlywiki/browser-sniff/usage": {
            "title": "$:/plugins/tiddlywiki/browser-sniff/usage",
            "text": "! Information Tiddlers\n\nThe following informational tiddlers are created at startup:\n\n|!Title |!Description |\n|[[$:/info/browser/is/android]] |Running on Android? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/bada]] |Running on Bada? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/blackberry]] |Running on ~BlackBerry? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/chrome]] |Running on Chrome? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/firefox]] |Running on Firefox? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/firefoxos]] |Running on Firefox OS? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/gecko]] |Running on Gecko? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/ios]] |Running on iOS (ie an iPhone, iPad or iPod)? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/ipad]] |Running on iPad? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/iphone]] |Running on iPhone? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/ipod]] |Running on iPod? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/opera]] |Running on Opera? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/phantomjs]] |Running on ~PhantomJS? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/safari]] |Running on Safari? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/sailfish]] |Running on Sailfish? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/seamonkey]] |Running on Sea Monkey? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/silk]] |Running on Amazon's Silk? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/tizen]] |Running on Tizen? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/webkit]] |Running on ~WebKit? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/webos]] |Running on ~WebOS? (\"yes\" or \"no\")  |\n|[[$:/info/browser/is/windowsphone]] |Running on Windows Phone? (\"yes\" or \"no\")  |\n|[[$:/info/browser/name]] |Platform name (see below) |\n|[[$:/info/browser/version]] |Browser version |\n\nThe browser information is obtained with [[Bowser, a browser detector library from Dustin Diaz|https://github.com/ded/bowser/]]. Possible browser names include:\n\n* ''\"Amazon Silk\"''\n* ''\"Android\"''\n* ''\"Bada\"''\n* ''\"~BlackBerry\"''\n* ''\"Chrome\"''\n* ''\"Firefox\"''\n* ''\"Internet Explorer\"''\n* ''\"iOS\"''\n* ''\"Opera\"''\n* ''\"~PhantomJS\"''\n* ''\"Safari\"''\n* ''\"Sailfish\"''\n* ''\"~SeaMonkey\"''\n* ''\"~TiddlyDesktop\"''\n* ''\"Tizen\"''\n* ''\"~WebOS\"''\n* ''\"Windows Phone\"''\n\nNote that Bowser returns \"iPhone\", \"iPad\" and \"iPod\" as distinct values for the name of the current browser. TiddlyWiki converts all three distinct values into \"iOS\" before copying to [[$:/info/browser/name]].\n"
        }
    }
}
{
    "tiddlers": {
        "$:/plugins/tobibeer/appear/widget.js": {
            "title": "$:/plugins/tobibeer/appear/widget.js",
            "text": "/*\\\r\ntitle: $:/plugins/tobibeer/appear/widget.js\r\ntype: application/javascript\r\nmodule-type: widget\r\n\r\nUse the appear widget for popups, sliders, accordion menus\r\n\r\n@preserve\r\n\\*/\n(function(){\"use strict\";var t=require(\"$:/core/modules/widgets/widget.js\").widget,e=function(t,e){this.initialise(t,e)},i={};e.prototype=new t;e.prototype.render=function(t,e){this.parentDomNode=t;this.nextSibling=e;this.computeAttributes();this.execute();var i,s,r,a,h,n,l=[];if(this.handle){this.getHandlerCache(this.handle,1);this.refreshHandler()}else{s={type:\"button\"};s.attributes=this.setAttributes(s,\"button\");i=s.attributes[\"class\"].value.trim();s.attributes[\"class\"].value=i+\" appear-show\"+(this.handler?\" tc-popup-absolute\":\"\");s.children=this.wiki.parseText(\"text/vnd.tiddlywiki\",this.show,{parseAsInline:true}).tree;h={type:\"reveal\",children:this.parseTreeNode.children};h.attributes=this.setAttributes(h,\"reveal\");h.isBlock=!(this.mode&&this.mode===\"inline\");if(h.attributes.type&&h.attributes.type.value===\"popup\"){s.attributes.popup=h.attributes.state;l.push(s);if(!this.handler){l.push(h)}else{s.attributes.handler=this.handler}}else{h.attributes.type={type:\"string\",value:\"match\"};h.attributes.text={type:\"string\",value:this.currentTiddler};s.attributes.set=h.attributes.state;s.attributes.setTo={type:\"string\",value:this.currentTiddler};a={type:\"reveal\",isBlock:this.block,children:[s],attributes:{type:{type:\"string\",value:\"nomatch\"},state:h.attributes.state,text:{type:\"string\",value:this.currentTiddler}}};if(!this.once){r=$tw.utils.deepCopy(s);r.attributes[\"class\"].value=i+\" appear-hide \"+(this.attr.button.selectedClass?this.attr.button.selectedClass:\"\");r.attributes.setTo={type:\"string\",value:\"\"};r.children=this.wiki.parseText(\"text/vnd.tiddlywiki\",this.hide,{parseAsInline:true}).tree}n=$tw.utils.deepCopy(a);n.children=[];if(!this.once){n.children.push(r)}if(!this.handler){n.children.push(h)}n.attributes.type.value=\"match\";l.push(a,n)}this.makeChildWidgets(l);this.renderChildren(this.parentDomNode,e);if(this.handler){this.addToHandlerCache(h)}}};e.prototype.execute=function(){var t=this;this.attr={map:{reveal:{\"class\":1,position:1,retain:1,state:1,style:1,tag:1,type:1},button:{\"button-class\":1,\"button-style\":1,\"button-tag\":1,tooltip:1,selectedClass:1}},rename:{\"button-class\":\"class\",\"button-style\":\"style\",\"button-tag\":\"tag\"},button:{},reveal:{}};$tw.utils.each(this.attributes,function(e,i){var s;$tw.utils.each(t.attr.map,function(r,a){$tw.utils.each(Object.keys(r),function(r){if(r==i){t.attr[a][i]=e;s=false;return false}});return s})});this.currentTiddler=this.getVariable(\"currentTiddler\");this.show=this.getValue(this.attributes.show,\"show\");this.hide=this.getValue(this.attributes.hide,\"hide\");if(!this.hide){this.hide=this.show}this.once=this.attributes.once&&this.attributes.once!==\"false\";this.$state=this.attributes.$state;this.mode=this.getValue(this.attributes.mode,\"mode\");this.handle=this.attributes.handle;this.handler=this.attributes.handler;this.handlerVariables=(this.attributes.variables||\"\")+\" currentTiddler\";this.keep=[\"yes\",\"true\"].indexOf((this.getValue(this.attributes.keep,\"keep\")||\"\").toLocaleLowerCase())>-1;if(!this.attr.reveal.state){this.attr.reveal.state=this.getValue(undefined,\"default-state\")+this.currentTiddler+this.getStateQualifier()+\"/\"+(this.attr.reveal.type?this.attr.reveal.type+\"/\":\"\")+(this.mode?this.mode+\"/\":\"\")+(this.once?\"once/\":\"\")+(this.$state?\"/\"+this.$state:\"\")}};e.prototype.refresh=function(t){var e=this.computeAttributes();if(Object.keys(e).length){this.refreshSelf();return true}if(this.handle){this.refreshHandler()}return this.refreshChildren(t)};e.prototype.getValue=function(t,e){var i,s,r={show:\"»\",\"default-state\":\"$:/temp/appear/\"};if(t===undefined){i=this.wiki.getTiddler(\"$:/plugins/tobibeer/appear/defaults/\"+e);if(i){s=i.getFieldString(\"undefined\");if(!s||s===\"false\"){t=i.getFieldString(\"text\")}}}if(t===undefined){t=r[e]}return t};e.prototype.setAttributes=function(t,e){var i=this,s={};$tw.utils.each(Object.keys(this.attr.map[e]),function(r){var a,h=i.attr.rename[r];if(!h){h=r}a=i.getValue(i.attr[e][r],r);if(h===\"class\"){a=[\"appear\",\"appear-\"+e,e===\"reveal\"&&i.keep?\"tc-popup-keep\":\"\",i.mode?\"appear-\"+i.mode:\"\",i.once?\"appear-once\":\"\",a||\"\"].join(\" \")}if(a!==undefined){if(h===\"tag\"){t.tag=a}else{s[h]={type:\"string\",value:a}}}});return s};e.prototype.getHandlerCache=function(t,e){var s=i[t];if(!s||e){i[t]={handled:{},handle:{}};s=i[t]}return s};e.prototype.refreshHandler=function(){var t=this,e=this.getHandlerCache(this.handle),s=e.handle;if(Object.keys(s).length){$tw.utils.each(s,function(e,i){t.removeChildNode(i);t.children.push(t.makeChildWidget(e));t.children[t.children.length-1].render(t.parentDomNode,t.nextSibling)});i[this.handle].handle={}}};e.prototype.removeChildNode=function(t){var e=this;$tw.utils.each(this.children,function(i,s){if(i.children[0].state===t){i.removeChildDomNodes();e.children.splice(s);return false}})};e.prototype.addToHandlerCache=function(t){var e=this,i=t.attributes.state.value,s=this.getHandlerCache(this.handler),r=s.handled[i],a={type:\"vars\",children:[t],attributes:{}};$tw.utils.each((this.handlerVariables||\"\").split(\" \"),function(t){t=t.trim();if(t){a.attributes[t]={type:\"string\",value:(e.getVariable(t)||\"\").toString()}}});if(a!==r){s.handle[i]=a;this.wiki.setText(\"$:/temp/appear-handler/\"+this.handler,\"text\",undefined,i)}};exports.appear=e})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/plugins/tobibeer/appear/defaults/show": {
            "title": "$:/plugins/tobibeer/appear/defaults/show",
            "text": "»"
        },
        "$:/plugins/tobibeer/appear/defaults/mode": {
            "title": "$:/plugins/tobibeer/appear/defaults/mode",
            "text": "block"
        },
        "$:/plugins/tobibeer/appear/defaults/keep": {
            "title": "$:/plugins/tobibeer/appear/defaults/keep",
            "text": "yes"
        },
        "$:/plugins/tobibeer/appear/defaults/button-class": {
            "title": "$:/plugins/tobibeer/appear/defaults/button-class",
            "text": "tc-btn-invisible tc-tiddlylink"
        },
        "$:/plugins/tobibeer/appear/defaults/default-state": {
            "title": "$:/plugins/tobibeer/appear/defaults/default-state",
            "text": "$:/temp/appear/"
        },
        "$:/plugins/tobibeer/appear/popup.js": {
            "title": "$:/plugins/tobibeer/appear/popup.js",
            "text": "/*\\\r\ntitle: $:/plugins/tobibeer/appear/popup.js\r\ntype: application/javascript\r\nmodule-type: utils\r\n\r\nAn enhanced version of the core Popup to support:\r\n* absolute popups\r\n* preview popups\r\n* popup z-index\r\n\r\n@preserve\r\n\\*/\n(function(){\"use strict\";var t=require(\"$:/core/modules/utils/dom/popup.js\").Popup,e=require(\"$:/core/modules/widgets/reveal.js\").reveal,s=e.prototype.refresh;t.prototype.show=function(t){var e,s=t.domNode,p=$tw.utils.hasClass(s,\"tc-popup-absolute\"),o=this.popupInfo(s),i=function(t){var e=t,s=0,p=0;do{s+=e.offsetLeft||0;p+=e.offsetTop||0;e=e.offsetParent}while(e);return{left:s,top:p}},l={left:s.offsetLeft,top:s.offsetTop};e=o.popupLevel;if(o.isHandle){e++}this.cancel(e);if(this.findPopup(t.title)===-1){this.popups.push({title:t.title,wiki:t.wiki,domNode:s})}l=p?i(s):l;t.wiki.setTextReference(t.title,\"(\"+l.left+\",\"+l.top+\",\"+s.offsetWidth+\",\"+s.offsetHeight+\")\");if(this.popups.length>0){this.rootElement.addEventListener(\"click\",this,true)}};t.prototype.popupInfo=function(t){var e,s=false,p=t;while(p&&e===undefined){if($tw.utils.hasClass(p,\"tc-popup-handle\")||$tw.utils.hasClass(p,\"tc-popup-keep\")){s=true}if($tw.utils.hasClass(p,\"tc-reveal\")&&($tw.utils.hasClass(p,\"tc-popup\")||$tw.utils.hasClass(p,\"tc-popup-handle\"))){e=parseInt(p.style.zIndex)-1e3}p=p.parentNode}var o={popupLevel:e||0,isHandle:s};return o};t.prototype.handleEvent=function(t){if(t.type===\"click\"){var e=this.popupInfo(t.target),s=e.popupLevel-1;if(e.isHandle){if(s<0){s=1}else{s++}}this.cancel(s)}};e.prototype.refresh=function(){var t,e,p=this.isOpen;e=s.apply(this,arguments);t=this.domNodes[0];if(this.isOpen&&(p!==this.isOpen||!t.style.zIndex)&&t&&(this.type===\"popup\"||$tw.utils.hasClass(t,\"tc-block-dropdown\")&&$tw.utils.hasClass(t,\"tc-reveal\"))){t.style.zIndex=1e3+$tw.popup.popups.length}return e}})();",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/plugins/tobibeer/appear/readme": {
            "title": "$:/plugins/tobibeer/appear/readme",
            "text": "This plugin provides the ''$appear'' widget that can render popups and sliders (inline or block) as well as accordion menus.\n\n!! Attributes\r\n; type\r\n: set to `popup` to have the content appear as a popup\r\n; show\r\n: the button label\r\n; hide\r\n: the hide button label\r\n; mode\r\n: either `block` or `inline`, with respect to the inner content\r\n: any other mode is interpreted as block mode, without the default styles applying, e.g. drop-shadows\r\n; once\r\n: allows to click the button once, then hides it (unless the state is deleted)\r\n; $state\r\n: the widget calculates a state for you, use this to append a simple id\r\n; state\r\n: alternatively, specify a fully qualified state\r\n; keep\r\n: make popups sticky when `yes` or `true`\r\n; handle / handler / variables\r\n: allows to take the popup contents out of the flow and render them elsewhere on the page\r\n: required to properly create popups in table cells and other constained elements\r\n: specify variables to take along\n\n<br>\n\n; documentation / examples / demos...\r\n: http://tobibeer.github.io/tw5-plugins#appear\r\n"
        },
        "$:/plugins/tobibeer/appear/styles": {
            "title": "$:/plugins/tobibeer/appear/styles",
            "tags": "$:/tags/Stylesheet",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html\n\n<pre>.tc-reveal.appear-block,\r\n.tc-popup.appear {\r\n\tborder-radius: 5px;\r\n\tpadding: 1px 1em;\r\n\t<<box-shadow \"2px 2px 4px rgba(0,0,0,0.3)\">>;\r\n}\r\n.tc-popup.appear {\r\n\tpadding: 0 1em;\r\n\tbackground: <<colour background>>;\r\n}\r\n.appear-reveal.appear-inline{\r\nmargin-left:5px;\r\n}\r\n.appear-reveal.appear-inline.appear-once{\r\nmargin-left:0;\r\n}</pre>"
        }
    }
}
{
    "tiddlers": {
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button><span class=\"wltc-link-to-tab\"><$link overrideClass=\"\" to=<<currentTiddler>> >{{$:/core/images/link}}</$link></span></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/ui/ControlPanel/Settings/link-to-tabs": {
            "title": "$:/core/ui/ControlPanel/Settings/link-to-tabs",
            "caption": "Link-to-Tabs plugin",
            "created": "20190712133607244",
            "modified": "20190714104631250",
            "tags": "$:/tags/ControlPanel/Settings",
            "type": "text/vnd.tiddlywiki",
            "text": "<$checkbox tiddler=\"$:/plugins/wikilabs/link-to-tabs/config\" field=\"show-all-links\" checked=\"inline-block\" unchecked=\"none\" default=\"none\"> Show internal tab link for ''all tabs''</$checkbox>\n\n<$checkbox tiddler=\"$:/plugins/wikilabs/link-to-tabs/config\" field=\"show-single-link\" checked=\"inline-block\" unchecked=\"none\" default=\"inline-block\"> Show internal tab link for ''selected tabs''</$checkbox>\n\n<$checkbox tiddler=\"$:/plugins/wikilabs/link-to-tabs/config\" field=\"initial-opacity\" checked=\"0\" unchecked=\"0.7\" default=\"0.7\"> Tab links are initially hidden and need mouse hover to become visible.</$checkbox> The transition time in seconds is: <$edit-text tiddler=\"$:/plugins/wikilabs/link-to-tabs/config\" field=\"transition\" default=\"0.3s\"/>\n\n<$button message=\"tm-delete-tiddler\" param=\"$:/plugins/wikilabs/link-to-tabs/config\">\nReset to Default!\n</$button>"
        },
        "$:/plugins/wikilabs/link-to-tabs/config": {
            "title": "$:/plugins/wikilabs/link-to-tabs/config",
            "created": "20190712133008077",
            "initial-opacity": "0.7",
            "modified": "20190714104541701",
            "show-all-links": "none",
            "show-single-link": "inline-block",
            "transition": "0.3",
            "type": "text/vnd.tiddlywiki",
            "text": "This tiddler is used to configure the \"Link-to-tabs\" plugin behaviour. \n\nThere are 2 fields, which are used by [[$:/plugins/wikilabs/link-to-tabs/styles]] enable and disable the internal links. \n\n* show-all-links: {{!!show-all-links}}\n* show-single-link: {{!!show-single-link}}\n* initial-opacity: {{!!initial-opacity}}\n* transition time in seconds: {{!!transition}}\n"
        },
        "$:/plugins/wikilabs/link-to-tabs/history": {
            "title": "$:/plugins/wikilabs/link-to-tabs/history",
            "text": "V 1.1.0 - 2019.07.14\n\n* Add new option: Initially hide link\n** Transition time from hidden to visible is adjustable\n\nV 1.0.1 - 2019.02.18\n\n* link-to-tabs works in drop-down elements now.\n\nV 1.0.0 - 2019.02.14\n\n* Use core tabs-macro from TW 5.1.19\n\nV <1.0.0\n\n* Use core tabs-macro from TW 5.1.15\n"
        },
        "$:/plugins/wikilabs/link-to-tabs/license": {
            "title": "$:/plugins/wikilabs/link-to-tabs/license",
            "text": "Link-to-Tabs-Macro (c) Mario Pietsch - 2016-2019\n\nhttps://opensource.org/licenses/BSD-3-Clause"
        },
        "$:/plugins/wikilabs/link-to-tabs/styles": {
            "title": "$:/plugins/wikilabs/link-to-tabs/styles",
            "created": "20190712133348541",
            "modified": "20190714104306483",
            "tags": "$:/tags/Stylesheet",
            "type": "text/vnd.tiddlywiki",
            "text": "<pre>\n\n.wltc-link-to-tab {\n  display: {{$:/plugins/wikilabs/link-to-tabs/config!!show-all-links}};\n  position: relative;\n  top: -1em;\n  left: -1.3em;\n  font-size: 0.7em;\n  opacity: {{$:/plugins/wikilabs/link-to-tabs/config!!initial-opacity}};\n  margin-right: -1em;\n}\n\n.wltc-link-to-tab svg{\n  width: 1.4em;\n  height: 1.4em;\n}\n\n.wltc-link-to-tab:hover {\n  opacity: 1;\n  transition:opacity {{$:/plugins/wikilabs/link-to-tabs/config!!transition}}s;\n  transition-timing-function: cubic-bezier(1,-0.06,.39,.89);\n}\n\n.tc-tab-selected + .wltc-link-to-tab {\n  display: {{$:/plugins/wikilabs/link-to-tabs/config!!show-single-link}};\n}\n\n.tc-vertical > .wltc-link-to-tab {\n  top: -1.9em;\n  left: 0;\n  height: 0;\n  float: right;\n}\n\n.tc-search-results .wltc-link-to-tab a {\n  display: contents;\n  padding: 0;\n}\n\n</pre>"
        },
        "$:/plugins/wikilabs/link-to-tabs/readme": {
            "title": "$:/plugins/wikilabs/link-to-tabs/readme",
            "text": "This plugin adds a little link icon to every tab. \n\n''Important:'' This plugin changes the core tabs macro.\n\n! Lint-to-Tabs Settings\n\n{{$:/core/ui/ControlPanel/Settings/link-to-tabs}}"
        }
    }
}
This tiddler is used to configure the "Link-to-tabs" plugin behaviour. 

There are 2 fields, which are used by [[$:/plugins/wikilabs/link-to-tabs/styles]] enable and disable the internal links. 

* show-all-links: {{!!show-all-links}}
* show-single-link: {{!!show-single-link}}
* initial-opacity: {{!!initial-opacity}}
* transition time in seconds: {{!!transition}}
giffmex.org/wiki
Nuevo Testamento 3
show
no
$:/core/ui/AdvancedSearch/System
$:/themes/tiddlywiki/vanilla/themetweaks
$:/.giffmex/tabs/Contenido
$:/.giffmex/tabs/Reciente
$:/core/ui/ControlPanel/Info
$:/core/ui/MoreSideBar/System
$:/core/ui/SideBar/More
$:/.giffmex/tabs/navegar
$:/.giffmex/tabs/otros.materiales



http://
{
    "tiddlers": {
        "$:/info/browser": {
            "title": "$:/info/browser",
            "text": "yes"
        },
        "$:/info/node": {
            "title": "$:/info/node",
            "text": "no"
        },
        "$:/info/url/full": {
            "title": "$:/info/url/full",
            "text": "file:///C:/Users/dgifford/OneDrive/%23Downloads/MIN%20-%20GIFFMEX/nt3.html"
        },
        "$:/info/url/host": {
            "title": "$:/info/url/host",
            "text": ""
        },
        "$:/info/url/hostname": {
            "title": "$:/info/url/hostname",
            "text": ""
        },
        "$:/info/url/protocol": {
            "title": "$:/info/url/protocol",
            "text": "file:"
        },
        "$:/info/url/port": {
            "title": "$:/info/url/port",
            "text": ""
        },
        "$:/info/url/pathname": {
            "title": "$:/info/url/pathname",
            "text": "/C:/Users/dgifford/OneDrive/%23Downloads/MIN%20-%20GIFFMEX/nt3.html"
        },
        "$:/info/url/search": {
            "title": "$:/info/url/search",
            "text": ""
        },
        "$:/info/url/origin": {
            "title": "$:/info/url/origin",
            "text": "null"
        },
        "$:/info/browser/screen/width": {
            "title": "$:/info/browser/screen/width",
            "text": "1280"
        },
        "$:/info/browser/screen/height": {
            "title": "$:/info/browser/screen/height",
            "text": "720"
        },
        "$:/info/browser/language": {
            "title": "$:/info/browser/language",
            "text": "en-US"
        },
        "$:/info/browser/name": {
            "title": "$:/info/browser/name",
            "text": "Firefox"
        },
        "$:/info/browser/version": {
            "title": "$:/info/browser/version",
            "text": "84.0"
        },
        "$:/info/browser/is/webkit": {
            "title": "$:/info/browser/is/webkit",
            "text": "no"
        },
        "$:/info/browser/is/gecko": {
            "title": "$:/info/browser/is/gecko",
            "text": "yes"
        },
        "$:/info/browser/is/chrome": {
            "title": "$:/info/browser/is/chrome",
            "text": "no"
        },
        "$:/info/browser/is/firefox": {
            "title": "$:/info/browser/is/firefox",
            "text": "yes"
        },
        "$:/info/browser/is/ios": {
            "title": "$:/info/browser/is/ios",
            "text": "no"
        },
        "$:/info/browser/is/iphone": {
            "title": "$:/info/browser/is/iphone",
            "text": "no"
        },
        "$:/info/browser/is/ipad": {
            "title": "$:/info/browser/is/ipad",
            "text": "no"
        },
        "$:/info/browser/is/ipod": {
            "title": "$:/info/browser/is/ipod",
            "text": "no"
        },
        "$:/info/browser/is/opera": {
            "title": "$:/info/browser/is/opera",
            "text": "no"
        },
        "$:/info/browser/is/phantomjs": {
            "title": "$:/info/browser/is/phantomjs",
            "text": "no"
        },
        "$:/info/browser/is/safari": {
            "title": "$:/info/browser/is/safari",
            "text": "no"
        },
        "$:/info/browser/is/seamonkey": {
            "title": "$:/info/browser/is/seamonkey",
            "text": "no"
        },
        "$:/info/browser/is/blackberry": {
            "title": "$:/info/browser/is/blackberry",
            "text": "no"
        },
        "$:/info/browser/is/webos": {
            "title": "$:/info/browser/is/webos",
            "text": "no"
        },
        "$:/info/browser/is/silk": {
            "title": "$:/info/browser/is/silk",
            "text": "no"
        },
        "$:/info/browser/is/bada": {
            "title": "$:/info/browser/is/bada",
            "text": "no"
        },
        "$:/info/browser/is/tizen": {
            "title": "$:/info/browser/is/tizen",
            "text": "no"
        },
        "$:/info/browser/is/sailfish": {
            "title": "$:/info/browser/is/sailfish",
            "text": "no"
        },
        "$:/info/browser/is/android": {
            "title": "$:/info/browser/is/android",
            "text": "no"
        },
        "$:/info/browser/is/windowsphone": {
            "title": "$:/info/browser/is/windowsphone",
            "text": "no"
        },
        "$:/info/browser/is/firefoxos": {
            "title": "$:/info/browser/is/firefoxos",
            "text": "no"
        }
    }
}

Judas
La liturgia y el culto en Apocalipsis
Los temas y la teología de Apocalipsis
{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/vanilla/themetweaks": {
            "title": "$:/themes/tiddlywiki/vanilla/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n        background-color: transparent;\n}\n\n\"\"\">>\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n    border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    left: -50px;\n    top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    right: -80px;\n    bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n  vertical-align: middle;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n    \tcursor: pointer;\n\tcolor: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tvertical-align: text-bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n  font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n    height: 1.2em;\n    width: 1.2em;\n    margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg  {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tbackground-color: <<colour tiddler-editor-background>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n  fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n  fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n  fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n  fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n  fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n  fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n  fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n  fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n  fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg  {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n    width: auto;\n    margin-bottom: 0px;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical  {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical  {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical  {\n    word-break: break-word;\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n    display: block;\n    width: 100%;\n    text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n    flex: 1 0;\n    background: <<colour tiddler-editor-background>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n    white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n    background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n    padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n    flex: 3 1;\n    border-left: 0.5em solid <<colour muted-foreground>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 1em 1em;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n    vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n    margin: 0;\n    padding: 0;\n    border: none;\n    background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n    \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n    \tlist-style-type: none;\n    \tpadding-left: 0;\n    \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n    \tpadding-left: 1em;    \n}\n\n.tc-tree button { \n    \tcolor: #acacac;\n}\n\n.tc-tree svg {\n     \tfill: #acacac;\n}\n\n.tc-tree span svg {\n    \twidth: 1em;\n    \theight: 1em;\n    \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n    \tcolor: lightgray;\n}\n\nselect {\n        color: <<colour select-tag-foreground>>;\n        background: <<colour select-tag-background>>;\n}\n\n"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
            "text": "15px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
            "text": "22px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
            "text": "14px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
            "text": "20px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storytop": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyright": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
            "text": "686px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
            "text": "960px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
            "text": "350px"
        },
        "$:/themes/tiddlywiki/vanilla/options/stickytitles": {
            "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
            "text": "no"
        },
        "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
            "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
            "text": "fixed-fluid"
        },
        "$:/themes/tiddlywiki/vanilla/options/codewrapping": {
            "title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
            "text": "pre-wrap"
        },
        "$:/themes/tiddlywiki/vanilla/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\""
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
            "text": "fixed"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
            "text": "auto"
        },
        "$:/themes/tiddlywiki/vanilla/sticky": {
            "title": "$:/themes/tiddlywiki/vanilla/sticky",
            "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
        }
    }
}
fluid-fixed
-apple-system, BlinkMacSystemFont, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"
zoomin
<span class="singlelist">

*''1 Juan, asuntos introductorios''

**[[La situación detrás de 1 Juan]]
**[[Las respuestas que Juan deseaba de los destinatarios de 1 Juan]]
**[[Los propósitos explícitos de 1 Juan]]
**[[Nuestras presentaciones acerca de 1 Juan]]
**[[Consejos para la interpretación de 1 Juan]]

*''La estructura de 1 Juan''

**[[Bosquejo de 1 Juan]]
**[[Un bosquejo para 1 Juan]]
**[[La estructura de 1 Juan, apuntes]]

*''La teología y los temas de 1 Juan''

**[[Los adversarios de Dios en 1 Juan]]
**[[Definiciones del amor en 1 Juan]]
**[[El amor de Dios en 1 Juan]]
**[[Nuestro amor por Dios en 1 Juan]]
**[[Nuestro amor por las personas en 1 Juan]]
**[[Los anticristos en 1 Juan]]
**[[La confianza en 1 Juan]]
**[[Dios Padre en 1 Juan]]
**[[La encarnación de Cristo en 1 Juan]]
**[[La escatología en 1 Juan]]
**[[El Espíritu Santo en 1 Juan]]
**[[La fe en 1 Juan]]
**[[La iglesia en 1 Juan]]
**[[Jesucristo en 1 Juan]]
**[[Jesús como Mesías en 1 Juan]]
**[[Juan y sus colegas en 1 Juan]]
**[[La justicia y la injusticia en 1 Juan]]
**[[La morada de Dios en nosotros en 1 Juan]]
**[[La muerte de Cristo en 1 Juan]]
**[[La muerte espiritual en 1 Juan]]
**[[Nombres para Dios en 1 Juan]]
**[[La obediencia en 1 Juan]]
**[[La oración en 1 Juan]]
**[[El pecado en 1 Juan]]
**[[La perfección en 1 Juan]]
**[[La regeneración en 1 Juan]]
**[[La revelación divina en 1 Juan]]
**[[La segunda venida de Cristo en 1 Juan]]
**[[El tema del testimonio en 1 Juan]]
**[[El tema de la unción en 1 Juan]]
**[[La verdad en 1 Juan]]
**[[La victoria en 1 Juan]]
**[[La vida eterna en 1 Juan]]

*''1 Juan en el contexto del canon''

**[[Citas y alusiones al Antiguo Testamento en 1 Juan]]
**[[Paralelos entre el Evangelio de Juan y las cartas, una tabla]]
**[[Diferencias entre el Evangelio de Juan y las cartas]]
**[[Paralelos entre las cartas de Juan]]
**[[Una comparación de 1 Juan y 2 Juan]]

*''Las características literarias de 1 Juan''

**[[Afirmaciones falsas de otras personas en 1 Juan]]
**[[Contrastes en 1 Juan]]
**[[Personajes mencionados en 1 Juan]]
**[[Quiasmos en 1 Juan]]
**[[El tono autoritario de 1 Juan]]

*''1 Juan, asuntos avanzados''

**[[La aceptación y uso de 1, 2, 3 Juan por la iglesia]]
**[[El autor de 1 Juan]]
**[[La fecha y el lugar de la composición de 1 Juan]]
**[[Identificando la herejía detrás de 1 Juan]]
**[[La transmisión del texto griego de 1 Juan]]

*''Exégesis de pasajes en 1 Juan''

**[[Paralelos entre 1 Juan 1.8-9 y 1.10-2.2]]
**[[1 Juan 3.4-10, un bosquejo]]
**[[1 Juan 3.4-7 y 3.8-10, paralelos entre las secciones]]
**[[1 Juan 3.11-18, apuntes]]
**[[1 Juan 5.16-17, apuntes]]

</span>
!!!3.11-18 notas generales

''Resumen''
Amémonos unos a otros como Cristo hizo

''Contrastes''
Estos versículos hablan de dos dominios o esferas, un dominio de la muerte y un dominio de la vida eterna. Sabemos que hemos pasado del dominio de la muerte al dominio de la vida si amamos a nuestro hermano. La siguiente tabla contrasta los elementos de estos dominios.

|bluealtrows|k
|!El dominio de la muerte|!El dominio de la vida (eterna)|
|Dominado por el maligno|Dominado por Jesucristo|
|Caracterizado por el odio|Caracterizado por el amor (de Dios)|
|El odio se manifiesta en el asesinato, el quitar la vida de otro|El amor se manifiesta en el sacrificio, el dar la vida de uno por el bienestar de otro|
|El ejemplo del odio es Caín|El ejemplo del amor es Jesucristo|
|Las acciones de Caín, habitante del dominio de muerte, eran malas|Las acciones de Abel, habitante del dominio de la vida, eran justas|

<hr>

''La estructura del texto''

|bluebycell|k
|Vv.|Función|Resumen|
|>|>| ''3.11: La exhortación al amor'' |
|!''11''|!Exhortación prinicipal|!Amemos unos a otros|
|>|>| ''3.11-12: El ejemplo que debemos evitar'' |
|!''12''|!Exhortación negativa|!No seamos como Caín que mató a Abel|
|!''13''|!Exhortación parentética basada en el ejemplo de v. 12|!(No se sorprendan del odio del mundo contra ustedes, como Caín odió a Abel)|
|>|>|''3.14-15: Cómo identificar a los habitantes del dominio de la vida y la muerte'' |
|!''14a''|!Afirmación condicional|!El amor es la evidencia que hemos pasado a la vida|
|!''14b''|!Afirmación contraria, basada en v. 14a|!El odio es la evidencia que permanecemos en la muerte|
|!''15''|!Argumento para apoyar v. 14b|!Odiar es equivalente a asesinar, y ningun asesinato tiene la vida eterna|
|>|>| ''3.16-18: Cómo es el amor que se requiere'' |
|!''16a''|!Definición del término "amor"|!El amor es dar la vida de uno para otros, como Cristo hizo|
|!''16b''|!Exhortación|!Debemos amar a nuestro hermano|
|!''17''|!Pregunta = afirmación|!El que rehusa ayudar al necesitado no tiene el amor de Dios|
|!''18''|!Exhortación|!Amemos de una forma concreta y sincera|

<hr>

!!!3.16

''Resumen''

Conocemos lo que es el amor porque Cristo nos lo demostró en la cruz, entregando su vida en nuestro lugar por nuestra salvación. Así que nosotros debemos dedicar nuestras vidas a la búsqueda del bienestar de nuestros hermanos en Cristo.

''Expansión''

Según este versículo, el que ama:

*Busca el bienestar del otro
*Está dispuesto a sacrificar su ser, entregar su vida, dar sus bienes, etc., para el otro

''La función del versículo en su contexto''

*Juan ha hablado del amor desde capítulo 2. En 4.11 nos exhorta  a que amemos unos a otros. Aquí nos da la definición de "amor".
*Cristo, contraste con Caín
|bluealtrows|k
|!V.|!Texto|!Función|
|3.4|Todo aquel que comete pecado, infringe también la ley; pues el pecado es infracción de la ley.|Declarativa|
|3.5|Y sabéis que él apareció para quitar nuestros pecados,<br>y no hay pecado en él.|Declarativa|
|3.6|Todo aquel que permanece en él, no peca;<br>todo aquel que peca, no le ha visto, ni le ha conocido.|Declarativa|
|3.7|Hijitos, nadie os engañe;<br>el que hace justicia es justo, como él es justo.|Imperativa; Declarativa|
|3.8a|El que practica el pecado es del diablo; porque el diablo peca desde el principio.|Declarativa|
|3.8b|Para esto apareció el Hijo de Dios, para deshacer las obras del diablo.|Declarativa|
|3.9|Todo aquel que es nacido de Dios, no practica el pecado, porque la simiente de Dios permanece en él; y no puede pecar, porque es nacido de Dios.|Declarativa|
|3.10|En esto se manifiestan los hijos de Dios, y los hijos del diablo: todo aquel que no hace justicia, y que no ama a su hermano, no es de Dios.|Declarativa|
|bluealtrows|k
|!Elemento|!3.4-7|!3.8-10|
|Frase introductoria|Todo aquel que comete pecado  (4)|El que practica el pecado|
|Tema|infringe también la Ley,<br>porque el pecado es infracción de la Ley (4)|es del diablo,<br>porque el diablo peca desde el principio (8)|
|El Hijo de Dios apareció...|...para quitar nuestros pecados|...para deshacer las obras del diablo (8)|
|Conclusión lógica|Todo aquel que permanece en él, no peca (6)|Todo aquel que es nacido de Dios no practica el pecado (9)|
''“Dios le dará vida”:'' La palabra “Dios” no aparece en el griego. Es posible que “el creyente” es el sujeto de “le dará vida”, no Dios. Si es así, Juan sugiere que cuando un creyente ora por un hermano errante, le da vida. Sin embargo, es más probable que se refiere a Dios.

<hr>

''“Pecado no de muerte”:'' ¿A qué se refiere? Opciones:

<span class="doublelist">

*Pecados veniales (menos graves) en contraste con pecados mortales (más graves) 
*Pecados no intencionales en contraste con pecados deliberados o intencionales (una distinción del AT)
*Pecados que no han resultado en la muerte del pecador (o sea que cuando Juan parece prohibir la oración por los pecados de muerte, prohibe la oración por los que murieron a causa de su pecado)
*Pecados normales en contraste con la apostasía (pero Juan parece decir que los herejes nunca pertenecían al grupo de los lectores  (2.19).
*El pecado de ser falsos profetas y anticristos en vez de creer. Apoyo: Juan nunca dice directamente que un hermano puede cometer el pecado de muerte.

</span>

Después de la discusión acerca de la oración, Juan recuerda a sus lectores que a pesar del hecho que podemos distiunguir entre pecado de muerte y pecado no de muerte, todo pecado es muy grave, y no debe ser tratado como cosa de menos solo por el hecho de que podemos orar por ello y ser perdonado de ello.
<span class="singlelist">

*''1 Pedro, asuntos introductorios''

**[[Nuestras presentaciones acerca de 1 Pedro]]
**[[La situación detrás de 1 Pedro]]
**[[Los destinatarios de 1 Pedro]]

*''La estructura de 1 Pedro''

**[[Un bosquejo para 1 Pedro]]
**[[Viejo bosquejo para 1 Pedro]]

*''La teología y los temas de 1 Pedro''

**[[La alabanza y la oración en 1 Pedro]]
**[[El amor fraternal en 1 Pedro]]
**[[Ángeles y demonios en 1 Pedro]]
**[[La carne en 1 Pedro]]
**[[La crítica del paganismo en 1 Pedro]]
**[[Dios en 1 Pedro]]
**[[Lo efímero vs lo duradero en 1 Pedro]]
**[[La elección en 1 Pedro]]
**[[La escatología en 1 Pedro]]
**[[El Espíritu Santo en 1 Pedro]]
**[[La gloria en 1 Pedro]]
**[[La iglesia ante la sociedad en 1 Pedro]]
**[[La imitación de Cristo en 1 Pedro]]
**[[Nombres para Dios en 1 Pedro]]
**[[La persecución en 1 Pedro]]
**[[La palabra 'santo' en 1 Pedro]]
**[[La sumisión y la obediencia en 1 Pedro]]
**[[La palabra 'vida' en 1 Pedro]]

*''1 Pedro en el contexto del canon''

**[[Citas y alusiones al Antiguo Testamento en 1 Pedro]]
**[[Paralelos entre 1 Pedro y las palabras de Jesús]]
**[[Paralelos entre 1 Pedro y Romanos]]
**[[Paralelos entre Efesios y 1 Pedro]]
**[[Paralelos entre Hebreos y 1 Pedro]]
**[[Paralelos entre 1 Pedro y Santiago]]

*''Las características literarias de 1 Pedro''

**[[Figuras en 1 Pedro]]
**[[El género de 1 Pedro]]
**[[Imperativos en 1 Pedro]]
**[[Posibles citas de materiales litúrgicos del primer siglo en 1 Pedro]]
**[[Personajes mencionados en 1 Pedro]]
**[[Quiasmos en 1 Pedro]]

*''1 Pedro, asuntos avanzados''

**[[La aceptación y el uso de 1 Pedro por la iglesia]]
**[[El autor de 1 Pedro]]
**[[La fecha y el lugar de redacción de 1 Pedro]]
**[[La transmisión del texto griego de 1 Pedro]]
**[[La unidad o integridad de 1 Pedro]]

*''Exégesis de textos en 1 Pedro''

**[[1 Pedro 1.1-2, bosquejo sintáctico]]
**[[1 Pedro 1.3-12 y 1.13-2.3, una comparación]]
**[[1 Pedro 1.3-5, bosquejo sintáctico]]
**[[1 Pedro 1.6, apuntes]]
**[[1 Pedro 2.1-3, apuntes]]
**[[1 Pedro 3.18-22 y 4.1-6, una comparación]]
**[[1 Pedro 3.18-22]]
**[[1 Pedro 5.1-4, un bosquejo homilético]]
**[[1 Pedro 5.1-5a, bosquejo sintáctico]]
**[[1 Pedro 5.5b-11, bosquejo sintáctico]]
**[[1 Pedro 5.12-14, un bosquejo sintáctico]]
**[[1 Pedro 5.14]]

</span>
|bluealtrows|k
|>|!1 Pedro 1.1-2|
|''Pedro''|Nombre del autor|
|@@.indent1 apóstol de Jesucristo@@|Descripción del autor|
|''A los escogidos,''|Identificación doctrinal de los destinatarios|
|@@.indent1 extranjeros de la dispersión@@|Descripción de los destinatarios|
|@@.indent2 <span class=blue>en</span> el Ponto, Galacia, Capadocia, Asia y Bitinia,@@|Ubicación geográfica de la dispersión|
|@@.indent1 <span class=blue>según</span> la presciencia de Dios Padre@@|La manera en que fueron escogidos|
|@@.indent1 <span class=blue>por</span> la santificación del Espíritu@@|El medio por lo cual fueron escogidos|
|@@.indent1 <span class=blue>para</span> la obediencia@@|Un propósito para lo cual fueron escogidos|
|@@.indent1 y <span class=blue>para</span> [recibir] una rociada con la sangre de Jesucristo@@|Otro propósito para lo cual fueron escogidos|
|''Gracia a ustedes y paz sean multiplicados.''|El saludo|

!!!Notas

Nótese las preposiciones indicados por el color @@.blue azul@@ en vv. 1-2. Estas preposiciones indican una extensa descripción doctrinal de los destinatarios y su elección por Dios.

@@.source Fuente: estudio personal y traducción del autor@@
|bluealtrows|k
|!1.3-12|!1.13-2.3|!Paralelo|
|1.3|1.13|Esperanza / esperen|
|1.3|1.23, 2.2|Nacimiento|
|1.4|1.18, 1.23|Corruptible / incorruptible|
|1.5|1.20|Manifestado en los postreros tiempos|
|bluealtrows|k
|>|!1 Pedro 1.3-5|
|''Bendito [sea] el Dios y Padre'' de nuestro Señor Jesucristo|Exhortación = doxología|
|@@.indent1 quien,@@|Modifica 'Dios y Padre'|
|@@.indent2 <span class="blue">según</span> su gran misericordia,@@|La manera que les hizo nacer|
|@@.indent1 nos [hizo] nacer de nuevo@@|Predicado de la cláusula subordinada|
|@@.indent2 <span class="blue">a</span> una esperanza viva@@|El destino hacia lo cual los hizo nacer|
|@@.indent2 <span class="blue">por medio de</span> la resurrección de Jesucristo de los muertos@@|El medio por lo cual los hizo nacer|
|@@.indent2 <span class="blue">a</span> [recibir] una herencia@@|Otro destino hacia lo cual los hizo nacer|
|@@.indent3 <span class="red">in</span>corruptible,@@|Descripción de la herencia|
|@@.indent3 <span class="red">in</span>contaminada,@@|Descripción de la herencia|
|@@.indent3 e <span class="red">in</span>marchitable,@@|Descripción de la herencia|
|@@.indent3 reservada en el cielo para ustedes@@|Descripción de la herencia|
|@@.indent4 quienes@@|Sujeto de la cláusula|
|@@.indent5 por el poder de Dios@@|El medio por lo cual son protegidos|
|@@.indent4 son protegidos@@|Predicado de la cláusula|
|@@.indent5 por medio de la fe@@|El medio por lo cual son protegidos|
|@@.indent5 para una salvación@@|El objetivo de la protección|
|@@.indent6 preparada para ser revelada en el postrer tiempo.@@|Descripción de la salvación|

''Notas''

*Nótese que a pesar de todas las cláusulas subordinadas, el núcleo de la oración gramatical es una doxología, una exhortación a que Dios reciba la alabanza que merece.
*Nótese las preposiciones coordinadas en vv. 3-4, señaladas con el color @@.blue azul@@. Todas describen y modifican la cláusula "nos hizo nacer de nuevo."
*Nótese también la aliteración de los tres prefijos "in", señalados con el color @@.red rojo@@, en v. 4. Estos prefijos en español traducen el prefijo ἀ con que comienzan las tres palabras en el griego.
,,Fuente: Estudio personal y traducción del autor,,
Hay tres posibles interpretaciones de ἀγαλλιᾶσθε en 1.6 y 1.8:

<span class="doublelist">

* Como presente indicativo: “Ustedes se están regocijándo”
* Como presente indicativo con sentido futuro: “Ustedes se regocijarán”
* Como imperativo: “Regocíjense”.

</span>
!!!¿Debe ir 1 Pedro 2.1-3 con el texto que lo precede o con el texto que sigue?

La mayoría de los comentarios ponen 2.1-3 con el material que sigue.

<span class="doublelist">

* Pero no reconocen que 2.1-3 es como las tres secciones anteriores, que tienen exhortaciones seguidas por razones teológicas y alusiones de textos del AT.
* No reconocen la continuación en 2.2 de la imagen de nacimiento e infancia de 1.23
* Las imágenes cambian en 2.4. Ahora son sacerdotales, geológicas y arquitectónicas

</span>

Michaels sugiere que la palabra “amados” en 2.11 y 4.12 indican divisiones básicas de la carta.
Hay una variedad de problemas interpretativos en 1 Pedro 3.18-22. Es uno de los textos más difíciles de interpretar en el Nuevo Testamento, y los problemas están tan interconectados que se te pueden revolver la cabeza. Pero aquí presentamos una forma de conectar los puntos que tiene mucho apoyo hoy en día.

<hr>

!!!¿Qué significan las frases “muerto en la carne” y “vivificado en espíritu”?

Pedro no usa estas frases para hablar de las dos naturalezas de Jesucristo, su naturaleza humana y su naturaleza divina. En las frases “muerto en la carne” y “vivificado en espíritu”, la palabra "en" es una traducción, no de una preposición, sino de una inflección dativa. Y el caso dativo muchas veces indica agencia (por medio de quién). Debemos entender esta frase como "muerto por la carne," es decir, su crucifixión llevada a cabo por manos de la humanidad carnal. De igual modo, debemos entender la frase “vivificado en espíritu” como “resucitado por el poder del Espíritu Santo.”

El contraste en 1 Pedro 3.18, entonces, no es entre dos naturalezas de Cristo, sino entre la humanidad y el Espíritu Santo. Es un contraste similar a lo que encontramos en la predicación de Pedro en Hechos 2.23-24 y 3.15:

<span class="doublelist">

* //a éste, entregado por el determinado consejo y anticipado conocimiento de Dios, prendisteis y matasteis por manos de inicuos, crucificándole; al cual Dios levantó, sueltos los dolores de la muerte, por cuanto era imposible que fuese retenido por ella.// (Hechos 2.23-24)
* //y matasteis al Autor de la vida, a quien Dios ha resucitado de los muertos, de lo cual nosotros somos testigos.// (Hechos 3.15)

</span>

<hr>

!!!¿Quiénes son los espíritus encarcelados en 1 Pedro 3.19? ¿Cuál fue su desobediencia? ¿Qué les predicó? ¿Cuándo les predicó?

Vamos a ver tres posiciones, resumidas en esta tabla:

|bluealtrows|k
|!|!Primera posición|!Segunda posición|!Tercerca posición|
|!La identidad de los espíritus encarcelados|Los contemporáneos de Noé|Los contemporáneos de Noé|Los ángeles caídos (demonios) que pecaron en el tiempo de Noé|
|!El pecado de los espíritus|El pecado humano que provocó el diluvio (Génesis 6.5)|El pecado humano que provocó el diluvio (Génesis 6.5)|Tomar para sí las mujeres humanas (Génesis 6.2)|
|!El momento cuando Cristo les predicó|Entre su muerte y su resurrección, en el infierno|En el tiempo de Noé, por medio de Noé|Después de su resurrección|
|!El contenido de la predicación|Ofrecer el arrepentimiento y salvación después de la muerte|Llamar al arrepentimiento antes del diluvio|Anunciar su victoria sobre ellos|

<hr>

Según algunas personas, ''Cristo fue al Hades para predicar el evangelio a los seres humanos'' ahí que habían pecado en el tiempo de Noé (Gen. 6.1-7), ''y ofrecerles una segunda oportunidad'' de arrepentirse y ser salvos. Podemos descontar esta teoría por varias razones teológicas. Pedro no habla de la posibilidad de una salvación después de la muerte. Y el panorama bíblico es que tenemos el presente vida para arrepentirnos, y después de la muerte nuestro destino es fijo e inalterable. Además, surge la pregunta: ¿Por qué Pedro se enfocaría solo en la predicación a aquella generación de muertos? ¿Por qué ofrecería esta oportunidad sólo a ellos y no a todos los pecadores muertos?

<hr>

Según muchos, ''Cristo predicó a través de Noé a los contemporáneos de Noé.'' Fue una última oportunidad de prevenir el diluvio que venía en camino. Pero ellos rechazaron la predicación de Noé y fueron condenados. Esta es la interpretación, por ejemplo, de Agustín, Tomás de Aquino, D. A. Carson, y Wayne Grudem.

Por un lado, hay algunos argumentos fuertes para apoyar esta posición:

<span class="doublelist">

*2 Pedro 2.5 dice que Noé fue "predicador de justicia".
*Las palabras “cuando una vez esperaba…” podrían modificar la palabra “predicó”. Si es así, Jesús predicó por medio de Noé mientras Dios esperaba pacientemente la construcción del arca.
*En 1 Pedro 4.6 el autor usa palabras similar, y en este caso es claro que los oidores fueron seres humanos: //Porque por esto también ha sido predicado el evangelio a los muertos, para que sean juzgados en carne según los hombres, pero vivan en espíritu según Dios.// (4.6)

</span>

Sin embargo, el libro judío 1 Enoc fue un libro influencial en el primer siglo. Fue un libro que influenció a Pedro y Judas (Judas incluso cita 1 Enoc en su carta). 1 Enoc interpreta los hijos de Dios en Génesis 6.1-7 como ángeles malvados llamados 'guardianes.' Estos guardianes corrompieron a la humanidad, y fueron la causa del pecado humano mencionado en Génesis 6.5, y fueron encarcelados por Dios por causa de sus pecados.

Así que la evidencia de la literatura judía del tiempo de Pedro es que los espíritus encarcelados que pecaron en el tiempo de Noé eran ángeles, no seres humanos.

Además, el lenguaje de 1 Pedro 3.19, "fue y predicó" parece extraño si Jesús predicó por medio de Noé a los contemporáneos de Noé. ¿En qué sentido "fue" Jesús para predicar? En cambio la palabra "fue" tiene más sentido si Jesucristo salió de la tierra para predicar en algún lugar a los espíritus después de su resurrección.

Esto nos lleva a nuestra tercera y mejor interpretación...

<hr>

Según el presente autor y muchos comentaristas hoy en día, ''Cristo fue a predicar su victoria para atormentar a los demonios encarcelados que habían pecado en el tiempo de Noé.''

Esta interpretación acepta que Pedro fue influenciado por las ideas de 1 Enoc, y que los hijos de Dios en Génesis 6.2 fueron ángeles caídos, no seres humanos.

A favor de esta posición, vemos que Judas 6 y 2 Pedro 2.4 hablan de ángeles caídos que fueron encarcelados. Ya vimos que 1 Enoc menciona este detalle, y que Judas cita este libro.

Otro fuerte argumento a favor de esta posición es la frase en v. 22 que "a él están sujetos ángeles, autoridades y potestades." Esta frase parece identificar a los espíritus mencionados en v. 19.

Una objeción importante a esta posición es que según esta posición los "hijos de Dios" en Génesis 6 fueron ángeles. Pero el pecado de los hijos de Dios fue en tomar las hijas de los hombres para sí. Y Jesús dice que los ángeles no se casan (Mateo 22.30). Juan Calvino y otros comentaristas toman estas palabras de Jesús como una indicación de que los ángeles no se reproducen ni tienen la habilidad de tener relaciones sexuales. Mi respuesta es que ellos sobreinterpretan a Jesús aquí. El punto de Jesús es que los ángeles no se casan, no que no pueden tener relaciones sexuales. Debemos reconocer nuestra ignorancia anatómica acerca de los ángeles.

Otro factor que complica todo este asunto es que el Credo Apostólico dice que Jesucristo descendió //al Hades//. Y hay Cristianos que asumen que se refiere a estos versículos en 1 Pedro 3. "¿Dónde están encarcelados los espíritus, sean humanos o ángeles?" preguntan algunos. "Están en el infierno", ellos concluyen. Entonces dicen que Jesús descendió al infierno para predicarles entre su muerte y su resurrección. 

Pero la palabra griega //Hades// no es lo mismo que la palabra //Gehena//. Gehena es la palabra para el infierno, el lugar de tormento para los malvados. En cambio, //Hades// era una palabra más general acerca del lugar o el estado de los difuntos. Si Jesús fue al infierno entre su muerte y su resurrección, ¿por qué le dijo al ladrón crucifiado que "hoy estarás conmigo en el ~~purgatorio, infierno~~, paraíso?

W. J. Dalton dice que 1 Pedro 3.19 no se refiere al descenso de Cristo al infierno sino su //ascensión// al cielo, proclamando triunfo sobre los poderes desde el cielo. Su argumento ha ganado bastante aceptación en la erudición. La ascensión de Jesucristo se menciona en v. 22, y hay ecos de Sal. 110.1 (//"Siéntate a mi diestra, Hasta que ponga a tus enemigos por estrado de tus pies"//) detrás de esta sección. @@.source (Citado en Rodgers, DTIB, 582)@@ ¿Dónde están los demonios, según las Escritas - ¿en el infierno? ¿en la tierra? ¿en el cielo? No es fácil decir. Los Evangelios relatan la presencia de espíritus malignos en la tierra, poseendo a las personas. Hay textos como Apocalipsis 20 y otros que presentan a Satanás como encadenado en un abismo profundo. Ya mencionamos Judas 6 y 2 Pedro 2.4 que hablan de ángeles en prisiones oscuras. Pero Efesios 2.2 habla del "príncipe de la potestad del aire", y Efesios 3.10 habla de "los principados y potestades en los lugares celestiales". 1 Enóc habla de una cárcel para los espíritus //en los cielos//. 

No es fácil reconciliar lo que dicen estos textos, para saber dónde están los demonios en la actualidad. Y puede ser que hay más que una clase de demonios, y que no todos están en el mismo lugar.

<hr>

!!!Conclusión

Necesitamos mucha humildad ante tantas diferencias de opinión. Debemos llegar a una posición tentativa, y predicarla, pero no con arrogancia o dogmaticismo. Este es un texto difícil, y los textos con los cuales está conectado son igualmente difíciles (los hijos de Dios en Génesis 6, el dicho de Jesús acerca de los ángeles en Mateo 22, el descenso al Hades que menciona el Credo). Pero la última opción parece preferible, a pesar de sus dificultades.

<hr>

!!!¿El bautismo salva según 1 Pedro 3.21?

En el primer siglo la vasta mayoría de los bautismos fueron bautismos por conversión, no bautismos de infantes. Este hecho permitía que Pedro usara el bautismo como figura para representar todo el proceso de la conversión. El bautismo era el elemento visible que acompañaba y demostraba la conversión invisible. El punto de Pedro fue, "la conversión, de la cual la parte más visible es el bautismo, salva."

Ahora vivimos en una época cuando muchos bautismos son de niños de padres Cristianos. Para estos niños, hay años de distancia entre su bautismo y el momento cuando llegan a creer el evangelio con entendimiento. Además, entre nuestro tiempo y el tiempo en que Pedro escribió, han habido varias ideas falsas acerca del bautismo. Muchos piensan que el acto del bautismo automáticamente produce algún cambio espiritual en la persona bautizada. Por estas razones nosotros no nos sentimos tan cómodos como Pedro en decir, en términos sencillos, que "el bautismo salva".

En v. 21 Pedro mismo califica su afirmación que "el bautismo salva" con las palabras que siguen. 

<span class="indent1">//"El bautismo no consiste en la limpieza del cuerpo, sino en el compromiso de tener una buena conciencia delante de Dios." //(3.21, traducción NVI)</span>

Con estas palabras Pedro indica que no habla de un proceso mágico o automático. El bautismo no elimina la necesidad del arrepentimiento y la fe. En el caso de los bautismos de los adultos, el bautismo debe ser una expresión de la fe genuina de ellos. Y en el caso de personas bautizadas como niños, la esperanza es que el proceso iniciado por su bautismo llegará a cumplirse en la fe de ellos una vez que llegan a la madurez. Si no creen, el bautismo no los salva. Pero si creen, llegan a poseer la realidad a la cual su bautismo les señalaba.

<hr>

!!!¿Cuál es el punto principal de Pedro en 1 Pedro 3.18-22?

Es necesario leer este pasaje en su contexto. En los versículos anteriores, Pedro habla de la necesidad de soportar el sufrimiento que viene con la persecución. 

Pedro anima a sus lectores con dos victorias de Jesucristo:

#En los tiempos de Noé, los espíritus malignos y los seres humanos se opusieron a Dios y su siervo Noé. Pero Noé y su familia fueron salvos de esta maldad cuando Dios los pasó por las aguas del diluvio.
#De la misma manera, los demonios y la humanidad carnal se opuso a Jesús. Fue hecho "muerto por la carne", es decir, fue crucificado por la humanidad. Pero el Espiritu lo resucitó, y el Espíritu lo llevó para proclamar su victoria a los mismos demonios que fueron encarcelados en el tiempo de Noé. Y está sentado triunfante sobre estos enemigos espirituales, según v. 22.

Y los lectores son salvos y reciben el beneficio de la victoria de Jesucristo de la misma manera en que Noé y su familia fueron salvos: pasando por el agua. En este caso, pasando por las aguas del bautismo se han convertido y puesto su fe en él. Así que cualquier persecución que experimentan en esta vida no debe detenerlos, porque les espera la salvación, y esa salvación está segura porque el Salvador ya está exaltado sobre sus enemigos.
|bluealtrows|k
|!3.18-22|!4.1-6|
|Cristo padeció (18)|Ustedes prepárense a padecer también (1)|
|para llevarlos a Dios (18)|(para llevar los paganos a Dios - véase 2.12, 3.1-2, 3.15)|
|siendo muerto en la carne (18)|Ya no vivir en la carne (2, 6)|
|Vivificado en el Espíritu (18)|Vivir conforme a la voluntad de Dios / en el Espíritu (2, 6)|
|Proclamó a los espíritus encarcelados (19)|El evangelio ha sido proclamado a los que ahora están muertos (6)|
|Los que desobedecieron (20)|Los paganos desobedientes (3-4)|
<span class="doublelist">

''Tres descripciones de un gran apóstol (v. 1)''

# ''Co-anciano:'' Pedro habla como alguien que sabe lo que es ser un líder en la iglesia.
# ''Testigo de los sufrimientos de Cristo:'' Pedro aprendió la humildad y servidumbre de Jesús, el gran ejemplo de humildad y sacrificio para otros.
# ''El que compartirá en la gloria que será revelada'' Pedro exhorta a los líderes a que dejen el dinero y el poder para conseguir una recompensa celestial. Pedro mismo ha sido fiel y espera esa recompensa.

''Tres descripciones de un gran anciano (vv. 2-3)''

# ''Dispuesto, no vacilante:'' un anciano debe ser alguien que sirve por amor, no simplemente por obligación.
# ''Un siervo de otros, no una persona codiciosa:'' Un anciano busca el bienestar de su grey, no solamente su propio bienestar.
# ''Un ejemplo para otros, no un tirano sobre otros:'' Un anciano dirige por su ejemplo, no por ladrar órdenes y amenazas.

''Tres descripciones de una gran recompensa (v. 4)''

# ''Será nuestra cuando Cristo aparece:'' Tendremos que esperar un rato para ser recompensado. Esto requiere paciencia. Pero aunque la recompensa se demora, sí vendrá. Jesucristo nos dará esta recompensa en persona.
# ''Se describe como una corona de gloria:'' Se entregan coronas a las personas por ser campeones en el atleticismo o por ser reyes admirados. Cuando Dios nos da la recompensa, todos lo verán, y nos respetarán y nos admirarán por nuestra fidelidad a Jesús.
# ''Su gloria nunca se agotará:'' La belleza y honor que experimentamos en esta vida no son duraderas. Pero la gloria de nuestra recompensa durará para siempre.

</span>
|bluealtrows|k
|>|>|!5.1 - Fórmula de exhortación|
|5.1a|''A los ancianos entre ustedes exhorto,''|Fórmula de apelación|
|5.1b|@@.indent1 co-anciano@@|Descripción del autor que apela|
|5.1c|@@.indent1 y testigo de los padecimientos de Cristo@@|Descripción del autor que apela|
|5.1d|@@.indent1 y de la gloria está por revelarse, un participante@@|Descripción del autor que apela|
|>|>|!5.2-3 - Exhortación propia, a los ancianos|
|5.2a|''Apacenten el 'entre-ustedes' rebaño de Dios''|Exhortación|
|5.2b|@@.indent1 cuidando de ella,@@|Participio - una manera en que deben de apacentar|
|5.2c|@@.indent1 <span class="blue">no</span> por sentirse obligados,@@|Frase preposicional - una manera en que no deben de apacentar|
|5.2d|@@.indent1 <span class="blue">sino</span> voluntariamente,@@|Adjetivo - una manera en que deben de apacentar|
|5.2e|@@.indent1 <span class="blue">no</span> por ganancia deshonesta,@@|Frase preposicional - una manera en que no deben de apacentar|
|5.2f|@@.indent1 <span class="blue">sino</span> con un afán de servir,@@|Frase preposicional - una manera en que deben de apacentar|
|5.3a|@@.indent1 <span class="blue">no</span> como si fueran dictadores sobre los que están bajo su cuidado,@@|Cláusula dependiente - una manera en que no deben de apacentar|
|5.3b|@@.indent1 <span class="blue">sino</span> como ejemplos para el rebaño.@@|Cláusula dependiente - una manera en que deben de apacentar|
|>|>|!5.4 - Promesa|
|5.4a|y . . .|Conjunción - conexión entre 2a y 4a|
|5.4b|@@.indent1 cuando el Príncipe de los pastores aparezca,@@|Cláusula dependiente - cuando recibirán la corona|
|5.4c|. . . ''ustedes recibirán la incorruptible corona'' de gloria.|Afirmación teológica|
|>|>|!5.5a - Exhortación a los jóvenes|
|5.5a|Igualmente, ''jóvenes, estén sujetos a los ancianos.''|Exhortación|

|bluealtrows|k
|>|>|!5.12 - Afirmación|
|5.12a|@@.indent1 Por conducto de Silvano,@@|Frase preposicional: el medio por lo cual Pedro les escribió y les hizo llegar la carta.|
|5.12b|@@.indent2 a quien considero nuestro hermano fiel,@@|Cláusula subordinada: descripción de Silvano de 5.12a.|
|5.12c|''les he escrito'' brevemente,|Cláusula principal de la oración gramatical: Esta oración es una afirmación sencilla que Pedro les escribió.|
|5.12d|@@.indent1 amonestándoles@@|Primer participio: un propósito por lo cual Pedro les escribió (para amonestarles).|
|5.12e|@@.indent1 y testificando@@|Segundo participio: otro propósito por lo cual Pedro les escribió (para testificarles).|
|5.12f|@@.indent2 [que] esta es la gracia verdadera de Dios,@@|Cláusula subordinada que sigue un verbo de comunicación: el contenido de lo que Pedro les quiso 'testificar'.|
|5.12g|@@.indent3 en la cual están [ustedes].@@|Cláusula subordinada: ubicando a los lectores dentro de la gracia mencionada en 5.12f. ( "Ustedes están en esta gracia").|
|>|>|!5.13 - Afirmación|
|5.13a|''Les saluda la que está en Babilonia . . .''|La cláusula principal de la oración gramatical. Esta oración es una afirmación sencilla que la iglesia y Marcos saludan a los destinatarios.|
|5.13b|@@.indent1 elegida juntamente con ustedes@@|Palabra apositiva: una descripción teológica de "la iglesia" en 5.13a.|
|5.13c|. . . y Marcos mi hijo.|El segundo sujeto de la oración gramatical.|
|>|>|!5.14a - Exhortación|
|5.14a1|''Salúdense unos a otros''|Exhortación|
|5.14a2|@@.indent1 con un beso de amor.@@|Frase preposicional: la manera en que deben saludarse.|
|>|>|!5.14b - Bendición de paz|
|5.14b1|''La paz sea con todos ustedes''|Cláusula principal de la oración gramatical: Esta oración está en la forma de una exhortación, pero es una bendición de paz, un elemento común en las conclusiones de las cartas cristianas del primer siglo.|
|5.14b2|@@.indent1 en Jesucristo. Amén.@@|Frase apositiva: una descripción teológica de "ustedes"|
''Asuntos históricos''

Un beso en la mejilla era un saludo oriental muy común. Pero después fue expuesto a los abusos, y desapareció a finales del siglo XIII.

<hr>

''Asuntos canónicos''

El beso (u ósculo) santo se encuentra en los siguientes pasajes también: Rom. 16.16, 1 Cor. 16.20, 2 Cor. 13.12, 1 Tes. 5.26.

<hr>

''Asuntos textuales''

''"Amén."'' Varios manuscritos griegos no tienen la palabra "Amén." Las traducciones antiguas cópticas y etiopos tampoco tienen esta palabra. Así que su autenticidad está en duda.
|bluealtrows|k
|>|>|!5.5b - Una exhortación con su motivo|
|5.5b1|''Y todos, revístanse de la humildad . . . ''|Exhortación|
|5.5b2|@@.indent1 [cada uno] hacia los demás,@@|Frase preposicional - la manera en que deben de revestirse|
|5.5b3|@@.indent1 porque Dios se opone a los soberbios@@|Cláusula dependiente - una razón que deben de revestirse|
|5.5b4|@@.indent1 y da <span class="blue">gracia</span> a los humildes.@@|Cláusula dependiente - una razón que deben de revestirse|
|>|>|!5.6-7 - Una exhortación con su propósito|
|5.6a|''Humíllense'', pues,|Exhortación|
|5.6b|@@.indent1 bajo la poderosa mano de Dios,@@|Frase preposicional - una manera en que deben de humillarse|
|5.6c|@@.indent1 para que él les exalte a su debido tiempo,@@|Cláusula dependiente - una razón que deben de humillarse|
|5.7a|@@.indent1 echando toda su ansiedad sobre él,@@|Participio - otra manera en que deben de humillarse|
|5.7b|@@.indent1 porque él se cuida de ustedes.@@|Cláusula dependiente - una razón que deben de humillarse|
|>|>|!5.8 - Dos exhortaciones con su motivo|
|5.8a|''Sean sobrios,''|Exhortación|
|5.8b|''velen.''|Exhortación|
|5.8c|''Su adversario el diablo . . .''|El sujeto de la oración gramatical - el predicado aparece en 8e|
|5.8d|@@.indent1 como león rugiente,@@|Cláusula dependiente - descripción del diablo de 8c|
|5.8e|''. . . anda alrededor,''|El predicado de la oración gramatical - el sujeto apareció en 8c|
|5.8f|@@.indent1 buscando a quien devorar.@@|Participio - el propósito por lo cual el diablo anda|
|>|>|!5.9 - Una exhortación con su motivo|
|5.9a|''Resístenlo'' [al diablo de 5.8c]|Exhortación|
|5.9b|@@.indent1 firmes en la fe,@@|Adjetivo - una manera en que deben de resistirlo|
|5.9c|@@.indent1 sabiendo@@|Adjetivo - una manera en que deben de resistirlo|
|5.9d|@@.indent2 que los mismos padecimientos. . .@@|Cláusula dependiente que va con verbos de dicción - el contenido de lo que deben de saber|
|5.9e|@@.indent3 en sus hermanos en todo el mundo@@|Frase preposicional - dónde los padecimientos se van cumpliendo|
|5.9f|@@.indent2 . . . se van cumpliendo@@|Frase preposicional - dónde los padecimientos se van cumpliendo|
|>|>|!5.10 - Una promesa|
|5.10a|''Y el Dios'' de toda <span class="blue">gracia</span> . . .|Sujeto de la oración gramatical - el predicado aparece en 10d|
|5.10b|@@.indent1 que nos llamó a su eterna gloria en Jesucristo,@@|Cláusula dependiente - descripción del Dios de 10a|
|5.10c|@@.indent1 después de que hayan padecido un poco de tiempo,@@|Cláusula dependiente - cuando Dios les perfeccionará|
|5.10d|''. . . él mismo les perfeccionará, afirmará, fortalecerá, y establecerá.''|El predicado de la oración gramatical - el sujeto apareció en 10a|
|>|>|!5.11 - Una doxología|
|5.11a|''A él sea la gloria''|Exhortación indirecta|
|5.11b|@@.indent1 por los siglos de los siglos. Amén.@@|Frase preposicional - la duración de tiempo que la gloria debe ser a Dios|

!Notas

*La estructura básica es una serie de exhortaciones a todos sus lectores, con una promesa en v. 10 para los que obedecen estas exhortaciones. Versículo 11 es una doxología, un elemento que normalmente concluía el cuerpo de una carta cristiana del primer siglo.
*Nótese las palabras de color @@.blue azul@@: la frase "el mismo Dios de toda gracia" en 5.10a se refiere a 5.5b, donde Pedro dice que Dios da gracia a los humildes.
,,Fuente: estudio personal y traducción del autor,,
<span class="doublelist">

#Dios envía su ángel en Apocalipsis 1.1 y en 22.6 (v.t. 22.16).
#Los santos se describen como los siervos de Dios en Apocalipsis 1.1 y en 22.6.
#Tanto Apocalipsis 1.1 como 22.6 hablan de cosas que 'deben suceder pronto'.
#Tanto Apocalipsis 1.1 como 22.9 mencionan el nombre de Juan.
#Apocalipsis 1.1 y 22.8 mencionan que Juan ve cosas.
#Apocalipsis 1.2 y 22.20 mencionan el testimonio de Jesús.
#Hay una bienaventuranza en Apocalipsis 1.3 y en 22.7.
#Apocalipsis 1.3 y 22.7 hablan de 'guardar las palabras de la profecía'
#Apocalipsis 1.3 y 22.10 dicen que el tiempo se acerca.
#Apocalipsis 1.4 y 22.16 mencionan las iglesias a las cuales el libro fue dirigido.
#Tanto Apocalipsis 1.4-5 como 22.21 expresan un deseo que los lectores reciban una gracia de parte de Jesús.
#Tanto Apocalipsis 1.4 como 22.17 mencionan el Espíritu.
#Hay referencias a la segunda venida en Apocalipsis 1.7 y en 22.7, 20.
#Tanto Apocalipsis 1.8 como 22.13 refieren al título "Alfa y Omega".

</span>

<span class="source">Fuente: Mark Wilson, Charts on the Book of Revelation: Literary, Historical and Theological Perspectives. (Grand Rapids: Kregel, 2007), 106.</span>
<span class="singlelist">

*''2 Juan, asuntos introductorios''

**[[La situación detrás de 2 Juan]]
**[[Las respuestas que el autor de 2 Juan espera de sus lectores]]
**[[El mensaje y la motivación que 2 Juan da a sus lectores originales]]
**[[La aplicación de 2 Juan a la vida]]
**[[Nuestra presentación acerca de 2 Juan]]

*''La estructura de 2 Juan''

**[[Un bosquejo de 2 Juan]]

*''La teología y los temas de 2 Juan''

**[[La teología y los temas de 2 Juan]]

*''2 Juan en el contexto del canon''

**[[Diferencias entre el Evangelio de Juan y las cartas]]
**[[Paralelos entre las cartas de Juan]]
**[[Una comparación de 1 Juan y 2 Juan]]
**[[Una comparación de 2 Juan y 3 Juan]]

*''Las características literarias de 2 Juan''

**[[Las figuras usadas en 2 Juan]]
**[[Los personajes mencionados en 2 Juan]]
**[[Un análisis de los tipos de oraciones gramaticales en 2 Juan]]

*''2 Juan, asuntos avanzados''

**[[La transmisión del texto griego de 2 Juan]]

*''Exégesis de pasajes en 2 Juan''

**[[Notas exegéticas para 2 Juan]]

</span>
<span class="singlelist">

*''2 Pedro, asuntos introductorios''

**[[Nuestras presentaciones acerca de 2 Pedro]]
**[[Una sinopsis de 2 Pedro]]
**[[La situación detrás de 2 Pedro]]
**[[Las respuestas que Pedro deseaba de los destinatarios de 2 Pedro]]
**[[La aplicación de 2 Pedro]]

*''La estructura de 2 Pedro''

**[[Un bosquejo de 2 Pedro]]
**[[Viejo bosquejo de 2 Pedro]]
**[[Otro bosquejo de 2 Pedro]]

*''La teología y temas de 2 Pedro''

**[[Los ángeles en 2 Pedro]]
**[[Las palabras para ‘conocer’, ‘conocimiento’, ‘saber’ en 2 Pedro]]
**[[Las palabras para ‘destruir’, ‘corrupción’, ‘destruido’ en 2 Pedro]]
**[[El tema del día del Señor en 2 Pedro]]
**[[La palabra para ‘ser diligente’ en 2 Pedro]]
**[[Dios Padre en 2 Pedro]]
**[[Nombres para Dios en 2 Pedro]]
**[[El Espíritu Santo en 2 Pedro]]
**[[Jesucristo en 2 Pedro]]
**[[La memoria en 2 Pedro]]
**[[Las palabras para ‘profeta, profecía’ en 2 Pedro]]
**[[La palabra para ‘promesa’ en 2 Pedro]]
**[[La revelación divina como la verdad en 2 Pedro]]
**[[La salvación en 2 Pedro]]

*''2 Pedro en el contexto del canon''

**[[Citas y alusiones al Antiguo Testamento en 2 Pedro]]
**[[Alusiones al Nuevo Testamento en 2 Pedro]]
**[[Paralelos entre 2 Pedro y 1 Pedro]]

*''Las características literarias de 2 Pedro''

**[[Aspectos literarios en 2 Pedro]]
**[[Citas de las palabras de los adversarios de Pedro en 2 Pedro]]
**[[El género de 2 Pedro]]
**[[El sabor judaico de 2 Pedro]]
**[[Pares de palabras en 2 Pedro]]
**[[Los personajes mencionados en 2 Pedro]]
**[[La repetición de palabras y frases favoritas en 2 Pedro]]

*''2 Pedro, asuntos avanzados''

**[[Objeciones en contra de Pedro como el autor de 2 Pedro]]
**[[Evidencia a favor de Pedro como el autor de 2 Pedro]]
**[[La aceptación de 2 Pedro al canon]]
**[[La fecha y el lugar de redacción de 2 Pedro]]
**[[La transmisión del texto griego de 2 Pedro]]

*''Exégesis de pasajes en 2 Pedro''

**[[2 Pedro 1.3-11]]
**[[2 Pedro 1.12-21]]
**[[2 Pedro 3]]

</span>
!!!!2 Pedro 1.15

Algunos proponen que en este versículo Pedro declara su intención de promover la preparación de un Evangelio, para que sus lectores siempre puedan recordarse de la vida de Jesús. Según la tradición, el Evangelio de Marcos fue impulsado por el apóstol Pedro. ¿Será este versículo una mención del origen del Evangelio de Marcos?

-----

!!!!2 Pedro 1.19

Paráfrasis: “La palabra de los profetas será para tí una lámpara en la oscuridad de la noche, hasta que llegue la luz del día.”

-----

!!!!2 Pedro 1.20-21

Algunos han interpretrado v. 20 así: “La interpretación de profecía no es cuestión de una interpretación privada. Hay que dejar que la iglesia interprete la Biblia.” Esta interpretación era una respuesta católica romana a la práctica protestante de traducir la Biblia en la lengua común, algo que impulsó la interpretación privada de la Biblia en Europa. Sin embargo, v. 21 se concentra no en la interpretación sino en la inspiración de la profecía. El punto de Pedro es que el origen de la profecía no viene de las ideas de los profetas sino de Dios.
!!!!La participación en la naturaleza divina en 2 Pedro 1.4

La participación en la naturaleza divina (1.4), en contraste con la corrupción y contaminación de este mundo causado por los deseos (1.4, 2.20). No se trata de la idea gnóstica que los creyentes van a llegar a ser dioses. Entonces, ¿a qué se refiere la frase “la participación en la naturaleza divina”?

<span class="doublelist">

*¿Se refiere a la morada del Espíritu Santo en el creyente? 
*¿A la unión mística con Cristo, es decir, “estar en Cristo”? 
*¿A la regeneración, que nos hace hijos de Dios? 
*¿A la gloria, incorruptibilidad e inmortalidad que disfrutaremos en el estado eterno?

</span>

-----

!!!!2 Pedro 1.5-7 y Gálatas 5

Hay algunos paralelos con el fruto del Espíritu en Gal. 5 (Marshall, 676):

<span class="doublelist">

*La fe se menciona en Gal. 5.22
*El dominio propio se menciona en Gal. 5.23
*La paciencia (perseverancia) se menciona en Gal. 5.22
*El amor se menciona en Gal. 5.22
*Si los lectores tienen estas virtudes, no serán dejados “sin fruto.” (2 Pedro 1.8)

</span>

-----

!!!!2 Pedro 1.13-14

Es posiblemente una alusión a la predicción en Juan 21.18-19, pero es dudable. Parece referirse a una revelación reciente, indicando la proximidad de la muerte de Pedro. Jn. 21 solo menciona el hecho de que Pedro moriría, y una pista de la manera de su martirio.
!!!!2 Pedro 3.4

“Padres”: no es una referencia a los padres de la iglesia primitiva, sino a los patriarcas del AT.

<hr>

!!!!2 Pedro 3.8

Las referencias a los mil años no tienen que ver con la doctrina del milenio. Son una cita de Salmo 90.4.
<span class="singlelist">

*''3 Juan, asuntos introductorios''

**[[La situación detrás de 3 Juan]]
**[[Las respuestas que Juan deseaba de Gayo]]
**[[El mensaje de Juan para motivar a Gayo]]
**[[La aplicación de 3 Juan]]
**[[Nuestra presentación de 3 Juan en slideshare.net]]
**[[Preguntas para estudiar o repasar 3 Juan]]

*''La estructura de 3 Juan''

**[[Un bosquejo de 3 Juan]]

*''La teología y los temas de 3 Juan''

**[[La teología de 3 Juan]]
**[[Una lista de los temas en 3 Juan]]

*''3 Juan en el contexto del canon''

**[[Conexiones entre 3 Juan y el canon bíblico]]
**[[Diferencias entre el Evangelio de Juan y las cartas]]
**[[Paralelos entre las cartas de Juan]]
**[[Una comparación de 2 Juan y 3 Juan]]

*''Las características literarias de 3 Juan''

**[[Las figuras usadas en 3 Juan]]
**[[Las oraciones gramaticales de 3 Juan]]
**[[Los personajes mencionados en 3 Juan]]
**[[La personificación en 3 Juan]]

*''3 Juan, asuntos avanzados''

**[[La aceptación de 3 Juan al canon]]
**[[El autor de 3 Juan]]
**[[El destinatario de 3 Juan]]
**[[La transmisión del texto griego de 3 Juan]]
**[[Preguntas que tengo en cuanto a 3 Juan]]

*''Exégesis de pasajes en 3 Juan''

**[[3 Juan 1-2]]
**[[3 Juan 3-4]]
**[[3 Juan 5-8]]
**[[3 Juan 9-10]]
**[[3 Juan 11]]
**[[3 Juan 12]]
**[[3 Juan 13-15]]

</span>
Para ver más acerca del anciano y Gayo, véase la sección sobre la situación original de la carta.

<hr>

''"A quien amo en la verdad"'' podría interpretarse de dos maneras:

*"A quien verdaderamente amo"
*"A quien amo en el contexto de la verdad, es decir, en el contexto del evangelio, que es la verdad."
*En vista del uso de la palabra "verdad" en los escritos juaninos, la segunda interpretación es ligeramente preferible.

<hr>
    
En las cartas de Pablo ''el deseo'' se expresa típicamente con la frase "Gracia y paz a vosotros." Aquí el anciano escribe su propio deseo para Gayo.

<hr>

Algunos Cristianos han tomado las menciones de ''"prosperado"'' y "prospera" en v. 2 y las han usado para desarrollar toda una teología equivocada de la prosperidad. Pero este versículo es nada más que un saludo típico de un amigo a otro. ¿Quién no desea que sus amigos prosperen en su salud y sus finanzas?
3 Juan 11 ''funciona como puente'' entre vv. 9-10 y v. 12. Diótrefes (9-10) es el mal ejemplo que Gayo no debe imitar, y Demetrio (12) es el buen ejemplo que Gayo debe imitar.

<hr>

''"El que hace lo bueno es de Dios"'' quiere decir, "La persona que por hábito hace lo bueno del evangelio demuestra que pertenece a Dios y es su hijo." En particular, el anciano está pensando en lo bueno de amar a los hermanos, como la hospitalidad que Gayo ha brindado a los misioneros.

<hr>

''"El que hace lo malo, no ha visto a Dios"'' quiere decir, "La persona que por hábito hace lo malo demuestra que en verdad no conoce a Dios, porque Dios no ha hecho un impacto en su vida." En particular, el anciano está pensando en las actividades malas de Diótrefes. Con esto, el anciano parece decir que en su opinión, Diótrefes no fue un creyente verdadero.

<hr>

Smalley observa que el versículo contiene un ''quiasmo'':

:malo
::bueno
::bueno
:malo

<hr>

''Frases similares a 3 Juan 11'' en otras partes de las cartas de Juan:

*//"El que hace lo bueno es de Dios"// es similar a 1 Juan 3.9: //"no puede pecar, porque es nacido de Dios."// 
*Otros versículos en 1 Juan que hablan de los que vienen de Dios:  1 Juan 3.1–10; 4.2–7; 5.19; v.t. Juan 8.47)
*//"El que hace lo malo, no ha visto a Dios"// es similar a 1 Juan 3.6: //"todo aquel que peca, no le ha visto."//
Demetrio fue seguramente uno de los portadores de esta carta, y el anciano lo recomienda como una persona en quien Gayo puede confiar.

<hr>

Probablemente no fue el Demetrio de Hechos 19.23-41.

<hr>

''El nombre Demetrio'' quiere decir "pertenece a Demetra" (una diosa de la cosecha). Su nombre implica que sus padres eran paganos.

<hr>

El anciano menciona ''tres testigos'' que daban testimonio de Demetrio: toda la comunidad cristiana en general, la verdad misma, y el anciano como representativo de los líderes eclesiásticos.

<hr>

''La verdad misma'' daba testimonio: es una personificación de la verdad del evangelio, pero su significado es que Demetrio vivía de tal manera que la verdad del evangelio se manifiesta claramente en él, y no hay necesidad de recomendaciones personales.

<hr>

El anciano cambia de la ''primera persona singular'' ("yo") que usa en el resto de su carta, a la primera persona plural ("nosotros") en v. 12 porque en este versículo el anciano representa también a otros líderes eclesiásticos.

<hr>

"y vosotros sabéis que nuestro testimonio es verdadero": Notamos la similitud entre esta cláusula y ''Juan 21.24'': 

://"Este es el discípulo que da testimonio de estas cosas, y escribió estas cosas; y sabemos que su testimonio es verdadero."//
''El deseo del anciano a visitar (3 Juan 13-14)''

<span class="doublelist">

*El anciano regresa de ''la primera persona plural'' ("nosotros") que usó en v. 12 a la primera persona singular ("yo"). Ahora habla de manera personal, no como representativo eclesiástico.
*En v. 10 el anciano ya anunció ''su deseo de visitar'', y lo repite aquí. Por esta razón el anciano no necesita escribir más sobre el asunto o sobre otros temas. Seguramente había detalles más delicados respecto al asunto que eran mejor tratar en persona.
*La palabra para ''tinta'' es μέλαν, literalmente "negro."
*3 Juan 14 alude a ''Números 12.8'': donde Dios dice acerca de Moisés, //"Cara a cara hablaré con él, y claramente, y no por figuras."//

</span>

<hr>

''Bendición de paz (3 Juan 15a)''

<span class="doublelist">

*La bendición de paz era un típico elemento epistolario de las cartas cristianas del primer siglo, y la encontramos en otras cartas del Nuevo Testamento.
*Algunas traducciones de la Biblia y algunos comentaristas incluyen el contenido de v. 15 en v. 14, pero históricamente la iglesia ha puesto este contenido en un versículo separado, versículo 15.

</span>

<hr>

''Saludos (3 Juan 15b)''

<span class="doublelist">

*El envío de saludos era convencional. Sin embargo, el anciano seguramente los incluye para ''animar a Gayo'' con el hecho de que tiene amigos que lo saludan.
*Gayo debe saludar individualmente a los "''amigos''." El anciano probablemente tiene en mente los simpatizantes que han sido fieles al anciano y que han apoyado a los misioneros a pesar de la oposición de Diótrefes.
*La palabra para ''amigos'' en ambos casos en v. 15 es φίλους (amados).

</span>
Versículos 3 y 4 funcionan como un elemento literario llamado la ''acción de gracias.'' En las cartas del Nuevo Testamento, normalmente viene una sección de acción de gracias después de la introducción. En las cartas de Pablo esta sección se expresa con términos como "Doy gracias a Dios siempre en mis oraciones por vosotros" y típicamente incluye cumplidos a los destinatarios por sus logros. La función principal de las acciones de gracias es de fortalecer la relación entre el autor y los destinatarios y mostrar que el autor los quiere mucho.

<hr>

Los misioneros que el anciano envió a la iglesia de Gayo regresaron al anciano y reportaron todo lo bueno de Gayo, y eso le agradó mucho al anciano.

<hr>

Estos versículos son similares a ''2 Juan 4'': //"Mucho me regocijé porque he hallado a algunos de tus hijos andando en la verdad."//

<hr>

La mención de gozo en v. 3 es un ''juego de palabras'', según Stott, porque el nombre Gayo significa "regocijo."

<hr>

Los comentaristas dicen que ''el amor y la verdad'' son complementos. La verdad se refiere al componente doctrinal del evangelio, lo que uno debe creer, y el amor se refiere al componente ético-moral del evangelio, lo que uno debe vivir y practicar. Gayo fue fiel en las dos cosas.

<hr>

''"Tu verdad"'' - la NVI ilumina esta frase cuando la traduce como "tu fidelidad." Los hermanos habían reportado la fidelidad de Gayo.

<hr>

''"Caminar en la verdad"'' - el evangelio se describe como un camino o una senda, y el Cristiano se mantiene en esta senda y camina en ella. La NVI lo parafrasea como "practicar la verdad." Hay más ejemplos de esta idea en 1 Juan 1.6, 2.6 y 2.11, en 2 Juan 4 y 6, y en Romanos 6.4

<hr>

''"Mis hijos"'' - en el Nuevo Testamento se usaba la figura de hijos espirituales para referirse a las personas que se convertían a través del ministerio de uno. Parece que Gayo se había convertido por medio del ministerio del anciano.
En esta sección el anciano felicita a Gayo por su hospitalidad de los hermanos, misioneros itinerantes enviados a su iglesia por el anciano y la iglesia de él.

<hr>

Es particularmente noble la hospitalidad de Gayo, porque los misioneros le eran personas desconocidas.

<hr>

Después de su tiempo con Gayo, los hermanos misioneros regresaron a la iglesia del anciano, y dieron informe a la iglesia del amor de Gayo, que les mostró cuando los hospedó en su casa.

<hr>

Es interesante que cuando checamos el Evangelio de Juan y sus tres cartas,'' la palabra "iglesia"'' solo aparece aquí, en 3 Juan 6 y en 3 Juan 9.

<hr>

''"Harás bien en encaminarlos"'' implica que los hermanos son los portadores de la carta. El anciano los ha enviado nuevamente a Gayo juntamente con la presente carta, y el anciano espera que Gayo los hospedará nuevamente, y que los enviará en su camino con las provisiones necesarias para su viaje.

<hr>

Kistemaker dice que la frase ''"Harás bien en hacerlo"'' era una frase de cortesía y petición como "Favor de hacerlo."

<hr>

"Ayudarlos...''como es digno de Dios"'' - algunos comentaristas dicen que significa "ayudarlos en la misma manera digna que usarían para ayudar directamente a Dios, tratarlos como si fueran Dios mismo." Otros dicen que significa "ayudarlos de la manera digna que Dios merece de sus servidores." Prefiero esta segunda interpretación porque es similar a otras menciones de la frase:

*//"para que andéis como es digno del Señor"// (Colosenses 1.10)
*//"y os encargábamos que anduvieseis como es digno de Dios, que os llamó a su reino y gloria."// (1 Tesalonicenses 2.12)

<hr>

Jesús y Pablo dijeron que ''los ministros deben recibir apoyo financiero de las iglesias,'' y vivir de su ministerio:

*//"No os proveáis de oro, ni plata, ni cobre en vuestros cintos; ni de alforja para el camino, ni de dos túnicas, ni de calzado, ni de bordón; porque el obrero es digno de su alimento."// (Mateo 10.9-10)
*//"Así también ordenó el Señor a los que anuncian el evangelio, que vivan del evangelio."// (1 Corintios 9.14)
*//"Pues la Escritura dice: No pondrás bozal al buey que trilla; y: Digno es el obrero de su salario."// (1 Timoteo 5.18)

<hr>

En v. 7 el anciano dice que los misioneros son dignos del apoyo de Gayo por ''el sacrificio'' que han hecho. Salieron por amor al nombre de Dios, y obviamente no recibieron apoyo financiero del mundo pagano.

<hr>

El anciano se refiere a Dios o a Jesús (probablemente a Jesús) como ''"el Nombre."'' No es un título tan común, pero sí hay otras referencias. Es interesante notar que por lo general aparece en contextos donde hay persecución:

*//"Mas todo esto os harán por causa de mi nombre, porque no conocen al que me ha enviado."// (Juan 15.21) 
*//"Y ellos salieron de la presencia del concilio, gozosos de haber sido tenidos por dignos de padecer afrenta por causa del Nombre."// (Hechos 5.41) El versículo anterior demuestra que se refiere al nombre de Jesús.
*//"¿No blasfeman ellos el buen nombre que fue invocado sobre vosotros?" //(Santiago 2.7)

<hr>

Si la frase "el Nombre" de v. 7 se refiere a Jesús, entonces es'' la única mención de Jesús'' en 3 Juan. 

<hr>

Versículo 7 no es una prohibición de ''aceptar dinero de personas no cristianas.'' El anciano sólo dice que no era la costumbre de los misioneros pedir la ayuda de los paganos, y de hecho no recibieron dinero de ellos en este caso.

<hr>

Hay un'' juego de palabras'' en el griego de versículos 7 y 8: ellos no "recibieron" (λαμβάνοντες) nada de los gentles, así que debemos "recibir / acoger" (ὑπολαμβάνειν) a tales personas.

<hr>

El ''"nosotros"'' en v. 8 es enfático. Ya que los inconversos no apoyarán a los misioneros, //nosotros// debemos hacerlo.

<hr>

La traducción de v. 8 en la Reina Valera da la impresión de que somos ''colaboradores'' "con" la verdad, como si la verdad fuera personificada como persona, y nosotros estuviéramos trabajando al lado de ella. Pero en el griego de este versículo, "con" no es una preposición aparte, sino el caso dativo del sustantivo "verdad." El dativo en este caso no necesariamente significa "con." Kistemaker recomienda entenderlo así: "colaboradores juntamente con ellos a favor de la verdad."
El anciano había escrito ''una carta'' a la iglesia. La carta mencionada aquí no fue 1 Juan o 2 Juan, sino otra carta recomendando los misioneros y pidiendo que la iglesia los apoye. Pero Diótrefes, un líder en la iglesia, se opuso a la carta y a los misioneros.

<hr>

''El nombre Diótrefes'' quiere decir "criado por Dios."

<hr>

''Los pecados de Diótrefes'' eran cinco:

*Era ambicioso. Quiso tener primer lugar en la iglesia.
*No aceptó la carta del anciano, y calumnió al anciano y sus colegas.
*No recibió a los misioneros para brindarles hospitalidad
*Prohibió a los demás miembros de la iglesia recibir a los hermanos
*Expulsó a los miembros que recibieron a los hermanos a pesar de su prohibición.

<hr>

''Es posible que Diótrefes usó 2 Juan'' para justificar su rechazo de los misioneros, porque 2 Juan habla de no recibir a los falsos maestros. Pero si Diótrefes rechazó una carta anterior del anciano, sería más razonable asumir que rechazó 2 Juan también.

<hr>

Si Gayo fue un miembro de la iglesia, ''¿por qué necesitaba que el anciano le explicara lo que estaba pasando en su propia iglesia?'' Algunos han propuesto que Gayo fue miembro de otra iglesia cercana. Más probable es que Gayo supo bien lo que había pasado, y hasta fue una de las personas que Diótrefes había expulsado. El anciano no tuvo que escribir para informar a Gayo de lo que ya supo. El anciano explicó todo el contexto con otros propósitos:

*El anciano quiso mostrar a Gayo que él conoce la situación
*El anciano quiso explicar la situación desde su perspectiva y mencionar su apoyo para Gayo para dar el contexto adecuado a cualquier otra persona que leyera la carta.

<hr>

El anciano esperaba ''visitar la iglesia personalmente'' para poner las cosas en orden. Por un lado, parece que el anciano no tuvo autoridad directa sobre esta iglesia local. Por esta razón su esperanza era limitada a llamar la atención de la iglesia a los hechos de Diótrefes ("recordaré las obras que hace"). Por otro lado, v. 15 dice que el anciano tiene otros "amigos" como Gayo - a lo mejor los miembros que Diótrefes expulsó de la iglesia. El anciano parece ser optimista acerca de la posibilidad de convencer a la iglesia, rectificar la situación y remover a Diótrefes de su liderazgo o hasta de la iglesia.

<hr>

Otra posibilidad es que el anciano usa la frase ''"recordaré las obras que hace"'' para quedarse corto, como eufemismo para decir que en realidad él llegará y usará su autoridad y arreglar la situación a la fuerza.

<hr>

''"Si yo fuere"'' en v. 10 tiene una fuerza temporal: "cuando yo vaya." No expresa duda acerca de la visita que el anciano quiere realizar.

<hr>

''"Proferir" o "parlotear"'' en v. 10 (φλναρῶν) quiere decir hablar cosas necias. Kistemaker dice que la palabra griega está relacionada con las burbujas, que aparecen y rápido desaparecen.

<hr>

Las palabras malignas o calumnias que Diótrefes usó eran'' "contra nosotros."'' El anciano ha usado la primera persona singular ("yo") hasta aquí en su carta, y la seguirá usando, pero brevemente en este versículo el anciano cambia al plural ("nosotros"), porque se refiere también a sus colegas en el ministerio, y no solo a sí mismo.

<hr>

Textos de otras partes del NT que prohiben la ambición y la dictadura en el liderazgo de la iglesia:

<span class="doublelist">

*//"Y llegó a Capernaum; y cuando estuvo en casa, les preguntó: ¿Qué disputabais entre vosotros en el camino? Mas ellos callaron; porque en el camino habían disputado entre sí, quién había de ser el mayor. Entonces él se sentó y llamó a los doce, y les dijo: Si alguno quiere ser el primero, será el postrero de todos, y el servidor de todos."// (Marcos 9.33-35 RV60)
*//"Entonces Jesús, llamándolos, dijo: Sabéis que los gobernantes de las naciones se enseñorean de ellas, y los que son grandes ejercen sobre ellas potestad. Mas entre vosotros no será así, sino que el que quiera hacerse grande entre vosotros será vuestro servidor, y el que quiera ser el primero entre vosotros será vuestro siervo; como el Hijo del Hombre no vino para ser servido, sino para servir, y para dar su vida en rescate por muchos."// (Mateo 20.25-28)
*//"Pero vosotros no queráis que os llamen Rabí; porque uno es vuestro Maestro, el Cristo, y todos vosotros sois hermanos. Y no llaméis padre vuestro a nadie en la tierra; porque uno es vuestro Padre, el que está en los cielos. Ni seáis llamados maestros; porque uno es vuestro Maestro, el Cristo. El que es el mayor de vosotros, sea vuestro siervo. Porque el que se enaltece será humillado, y el que se humilla será enaltecido."// (Mateo 23.8-12)
*//"Apacentad la grey de Dios que está entre vosotros, cuidando de ella, no por fuerza, sino voluntariamente; no por ganancia deshonesta, sino con ánimo pronto; no como teniendo señorío sobre los que están a vuestro cuidado, sino siendo ejemplos de la grey."// (1 Pedro 5.2-3 RV60)

</span>
Varias veces Juan llama atención a las afirmaciones de otras personas para señalar que son mentiras:

|bluealtrows|k
|1.6|Los que dicen que tienen comunión con Dios pero andan en tinieblas, mienten y no practican la verdad|
|1.8|Los que dicen que no tienen pecado se engañan a si mismos y la verdad no está en ellos|
|1.10|Los que dicen que no han pecado, mienten, la verdad no está en ellos, y hacen a Dios mentiroso|
|2.4|Los que dicen que conocen a Dios pero no guardan sus mandamientos, son mentirosos y la verdad no está en ellos|
|2.6|Los que dicen que permanecen en Cristo pero no andan como Cristo anduvo, son hipócritas|
|2.9|Los que dicen que están en la luz pero odian a su hermano, están todavía en tinieblas.|
|4.20|Los que dicen que aman a Dios pero odian a su hermano, son mentirosos|

@@.source Fuente desconocida.@@
''Hebreos alterna entre exposición y exhortación/advertencia.'' La siguiente tabla demuestra las respectivas secciones:

|bluealtrows|k
|! Exposición |! Exhortación / Advertencia |
| 1.1-14 | |
|| 2.1-4 |
| 2.5-18 ||
|| 3.1-4.16 |
| 5.1-14 ||
|| 6.1-12 |
| 6.13-10.18 ||
|| 10.19-39 |
| 11.1-40 ||
|| 12.1-13.17 |
| 13.18-25 ||
|bluealtrows|k
|!Hebreos|!AT|
|1.2|Sal. 2.8|
|1.3|Sal. 110.1|
|1.5|1 Cr. 17.13|
|1.6|Sal. 97.7|
|1.14|Sal. 34.8, 91.11|
|2.13|2 S. 22.3 LXX, Is. 12.2|
|2.16|Is. 41.8-9|
|3.2, 5|Nm. 12.7|
|3.8|Ex. 17.7|
|3.8|Nm. 20.2-5|
|3.11|Nm. 14.21-23|
|3.16-18|Nm. 14.1-35|
|3.17|Nm. 14.29|
|3.18|Nm. 14.22-23, Sal. 95.11|
|4.8|Dt. 31.7|
|4.8|Jos. 22.4|
|4.10|Gn. 2.2|
|4.12|Is. 49.2|
|5.3|Lv. 9.7, 16.6|
|5.4|Ex. 28.1|
|5.9|Is. 45.17|
|5.10|Sal. 110.4|
|6.8|Gn. 3.17-18|
|6.13|Gn. 22.16|
|6.16|Ex. 22.11|
|6.18|Nm. 23.19|
|6.18|1 S. 15.29|
|6.19|Lv. 16.2-3, 16.12, 16.15|
|6.20|Sal. 110.4|
|7.3|Sal. 110.4|
|7.5|Nm. 18.21|
|7.14|Gn. 49.10, Is. 11.1|
|7.27|Lv. 9.7, 16.6, 16.15|
|8.1|Sal. 110.1|
|8.2|Nm. 24.6 LXX|
|9.2|Ex. 25.23-40, 26.1-30|
|9.3|Ex. 26.31-33|
|9.4|Ex. 16.33, 25.10-16, 30.1-6|
|9.4|Nm. 17.8-10|
|9.4|Dt. 10.3-5|
|9.5|Ex. 25.18-22|
|9.6|Nm. 18.2-6|
|9.7|Ex. 30.10|
|9.7|Lv. 16.2, 16.14, 16.15|
|9.10|Lv. 11.2, 11.25, 15.18|
|9.10|Nm. 19.13|
|9.13|Lv. 16.3, 16.14, 16.15|
|9.13|Nm. 19.9, 19.17-19|
|9.19|Ex. 24.3, 24.6-8|
|9.19|Lv. 14.4|
|9.19|Nm. 19.6|
|9.21|Lv. 8.15, 19|
|9.22|Lv. 17.11|
|9.27|Gn. 3.19|
|9.28|Is. 53.12|
|10.4|Lv. 16.15, 16.21|
|10.8|Sal. 40.6|
|10.9|Sal. 40.7|
|10.11|Ex. 29.38|
|10.12|Sal. 110.1|
|10.13|Sal. 110.1|
|10.22|Ez. 36.25|
|10.27|Is. 26.11 LXX|
|10.28|Dt. 17.6, 19.15|
|10.29|Ex. 24.8|
|10.30|Sal. 135.14|
|10.37|Is. 26.20 LXX|
|11.3|Gn. 1.1, Sal. 33.6, 9|
|11.4|Gn. 4.3-10|
|11.7|Gn. 6.13-22, 7.1|
|11.8|Gn. 12.1-5|
|11.9|Gn. 23.4, 26.3, 35.12, 35.27|
|11.11|Gn. 17.19, 18.11-14, 21.2|
|11.12|Gn. 15.5-6, 22.17, 32.12|
|11.12|Ex. 32.13|
|11.12|Dt. 1.10, 10.22, Dn. 3.36 LXX|
|11.13|Gn. 23.4, 47.9, 1 Cr. 29.15, Sal. 39.12|
|11.16|Ex. 3.6, 3.15, 4.5|
|11.17|Gn. 22.1-10|
|11.20|Gn. 27.27-29, 27.39-40|
|11.21|Gn. 48.15-16|
|11.22|Gn. 50.24-25|
|11.22|Ex. 13.19|
|11.23|Ex. 1.22, 2.2|
|11.24|Ex. 2.10-12|
|11.27|Ex. 2.15, 12.51|
|11.28|Ex. 12.21-30|
|11.29|Ex. 14.21-31|
|11.30|Jos. 6.12-21|
|11.31|Jos. 2.11-12, 6.21-25|
|11.33|Jue. 14.6-7|
|11.33|1 S. 17.34-36, Dn. 6.1-27|
|11.34|Dn. 3.23-25|
|11.35|1 R. 17.17-24, 2 R. 4.25-37|
|11.36|1 R. 22.26-27, 2 Cr. 18.25-26, Jer. 20.2, 37.15, 38.6|
|11.37|2 Cr. 24.21|
|12.2|Sal. 110.1|
|12.7|Dt. 8.5|
|12.7|2 S. 7.14|
|12.9|Nm. 16.22, 27.16|
|12.12|Is. 35.3|
|12.13|Pr. 4.26 LXX|
|12.14|Sal. 34.14|
|12.15|Dt. 29.17 LXX|
|12.16|Gn. 25.33-34|
|12.17|Gn. 27.30-40|
|12.18-19|Ex. 19.16-22, 20.18-21|
|12.18-19|Dt. 4.11-12, 5.22-27|
|12.23|Gn. 18.25, Sal. 50.6|
|12.24|Gn. 4.10|
|12.26|Ex. 19.18, Sal. 68.8|
|12.26|Jue. 5.4|
|12.29|Dt. 4.24, 9.3, Is. 33.14|
|13.2|Gn. 18.1-8, 19.1-3|
|13.5|Gn. 28.15|
|13.5|Jos. 1.5|
|13.11|Lv. 16.27|
|13.15|2 Cr. 29.31, Sal. 50.14, 50.23, Os. 13.15|
|13.17|Is. 62.6, Ez. 3.17|
|13.20|Is. 55.3, 63.11, Jer. 32.40, Ez. 37.26|
!!!Alusiones al NT, probables

|bluealtrows|k
|1.14|Jn. 21.18|
|2.20|Mt. 12.45 y paralelos|
|3.10|Mt. 24.43 y paralelos|

!!!Alusiones al NT, posibles

|bluealtrows|k
|1.16|Mc. 9.1 y paralelos|
|2.9|Mt. 6.13|
|2.19|Ro. 8.21|
|2.21|Mc. 9.42, 14.21|
|3.4|Mc. 9.1, 13.30 y paralelos|
|3.10|1 Ts. 5.2|
|3.15|Ro. 12.3, 15.15|

Bauckham dice que los escritos cristianos que más se parecen a 2 Pedro son 1 Clemente, 2 Clemente, y Pastor de Hermas. Pero dice que las similitudes no muestran dependencia entre los libros, sino que los autores de estos libros escribieron del mismo entorno o ambiente.
En Santiago, Jacobo amonesta a sus lectores originales como si fueran niños. 

|bluealtrows|k
|1.16|Mis queridos hermanos, no se engañen.|
|1.19|Mis queridos hermanos, tengan presente esto....|
|2.20|¿Pero quieres saber, hombre vano...?|
|2.22|¿No ves...?|
|3.10|Hermanos míos, esto no debe ser así.|
|4.13|¡Vamos ahora!|
|5.1|¡Vamos ahora!|

@@.source Ben Witherington, We Have Seen His Glory. (Grand Rapids: Wm. B. Eerdmans, 2010)@@
<table class="altgray"><tr><td>

Los seres sobrenaturales solo se mencionan tres o cuatro veces en 1 Pedro.

<span class="doublelist">

*En 1.12, Pedro dice que los ángeles anhelan mirar las cosas del evangelio.
*En 3.22, Pedro dice que Cristo fue exaltado sobre todo, y los "ángeles, autoridades y potestades" están sujetos a él.
*En 5.8 aprendemos que el diablo es nuestro adversario, y como león, anda por todos lados buscando nuevas víctimas.

</span>

</td></tr><tr><td>

1 Pedro 3.19-20 habla de "espíritus encarcelados". Hay un gran debate entre comentaristas acerca de la identidad de estos espíritus. ¿Eran los ángeles que pecaron en el tiempo antes del diluvio (Gn. 6.1-4)? o ¿Eran los espíritus de los seres humanos contemporáneos de Noé? Hay más información en las notas exegéticas para 3.19-22, pero aquí solo es necesario enfatizar lo que es evidente, que la respuesta a esta decisión exegética determina si 3.19-20 es una cuarta referencia a los ángeles y demonios, o si se trata de seres humanos difuntos.

</td></tr><tr><td>

La palabra 'espíritu' (πνευ̂μα) aparece nueve veces en 1 Pedro:

|bluealtrows|k
|1.2|". . . la obra santificadora del Espíritu . . ." (NVI)|
|1.11|". . . a cuáles circunstancias se refería el Espíritu de Cristo . . ." (NVI)|
|1.12|". . . los que les predicaron el evangelio por medio del Espíritu Santo enviado del cielo." (NVI)|
|1.22|"Habiendo purificado vuestras almas . . . mediante el Espíritu . . ." (~RV60)|
|3.4|". . . en el incorruptible ornato de un espíritu afable y apacible . . ." (~RV60)|
|3.18|". . . siendo a la verdad muerto en la carne, pero vivificado en espíritu;" (~RV60)|
|3.19|". . . predicó a los espíritus encarcelados . . ." (~RV60)|
|4.6|". . . para que sean juzgados en carne según los hombres, pero vivan en espíritu según Dios." (~RV60)|
|4.14|". . . el glorioso Espíritu de Dios reposa sobre vosotros." (~RV60)|

</td></tr></table>
|bluealtrows|k
|Judas 6|Algunos ángeles traspasaron los límites establecidos para ellos, y han sido encadenados hasta el gran día de juicio|
|Judas 8|Los hombres impíos blasfeman a "los gloriosos"|
|Judas 9|Miguel es un arcángel, y disputó con el diablo|
|Judas 14|"Santas decenas de millares" acompanarán a Jesús en su venida|
<span class="singlelist">

*''Apocalipsis, recursos introductorios''

**[[Nuestras presentaciones acerca de Apocalipsis]]
**[[Un panorama de los problemas principales detrás de Apocalipsis]]
**[[Un panorama de las respuestas que Jesús desea de los oidores de Apocalipsis]]
**[[Un panorama de los 16 mensajes principales de Apocalipsis]]
**[[Las cinco narrativas en Apocalipsis]]
**[[El triángulo básico de relaciones en Apocalipsis]]
**[[Tres conclusiones acerca del género de Apocalipsis]]

*''Las circunstancias detrás de Apocalipsis''

**[[Un panorama de los problemas principales detrás de Apocalipsis]]
**[[Cinco cosas que Apocalipsis nos dice acerca de la persecución que Juan y sus lectores experimentaron]]
**[[Doce características de la inminente persecución que Juan preve en Apocalipsis]]
**[[Cinco cosas (aparte de la persecución) que amenazaban a las iglesias de Juan]]
**[[Cinco cosas acerca de Roma aparte de la persecución y el culto imperial que Apocalipsis critica]]
**[[El culto imperial romano]]
**[[Mapa de las siete iglesias de Apocalipsis]]
**[[Pregunta: ¿Deberían los lectores de Apocalipsis asimilar a la cultura romana?]]

*''El género literario de Apocalipsis''

**[[Cuatro maneras en que Apocalipsis es como una carta]]
**[[Tres maneras en que Apocalipsis es similar a una profecía]]
**[[Similitudes y diferencias entre la profecía y la apocalíptica]]
**[[La definición del género 'apocalípsis']]
**[[La literatura apocalíptica, apuntes]]
**[[Tres conclusiones acerca del género de Apocalipsis]]

*''La interpretación y uso de Apocalipsis''

**[[Consejos para interpretar el libro de Apocalipsis]]
**[[Las cuatro maneras principales de interpretar el libro de Apocalipsis]]
**[[Los cuatro puntos de vista principales acerca del milenio]]
**[[Ocho consejos para predicar del libro de Apocalipsis]]

*''La estructura de Apocalipsis''

**[[La estructura de Apocalipsis, apuntes]]
**[[Una estructura quiástica propuesta para Apocalipsis]]
**[[Otros bosquejos propuestos para Apocalipsis]]
**[[El paralelismo progresivo de William Hendriksen]]
**[[Las cinco narrativas en Apocalipsis]]
**[[14 cosas encontradas al principio y al fin de Apocalipsis]]
**[[Siete conexiones entre Apocalipsis 1 y Apocalipsis 2-3]]
**[[Una comparación de Jezabel en Apocalipsis 2 y la mujer en Apocalipsis 12]]
**[[Paralelos entre Apocalipsis 2-3 y Apocalipsis 19-22]]
**[[Jezabel en Apocalipsis 2.18-19 y la ramera en Apocalipsis 17-18]]
**[[Siete conexiones entre los sellos en Apocalipsis 6 y las visiones en Apocalipsis 19-20]]
**[[Seis conexiones entre Apocalipsis 12 y Apocalipsis 17]]
**[[Tres teorías acerca de la relación de los sellos, las trompetas y las copas en Apocalipsis]]
**[[Una tabla comparando los sellos, los trompetas y las copas en Apocalipsis]]
**[[Paréntesis entre los sellos, trompetas y copas en Apocalipsis]]

*''La teología y los temas de Apocalipsis''

**[[Una elaboración de las respuestas que Jesús desea de los oidores de Apocalipsis]]
**[[Un panorama de los 16 mensajes principales de Apocalipsis]]
**[[Una elaboración de los 16 mensajes principales de Apocalipsis]]
**[[Los ángeles en Apocalipsis]]
**[[El arrepentimiento en Apocalipsis]]
**[[Cinco evidencias para la divinidad de Cristo en Apocalipsis]]
**[[Nueve écoes del evento del éxodo en Apocalipsis]]
**[[El engaño en Apocalipsis]]
**[[El Espíritu Santo en Apocalipsis]]
**[[La ira de Dios en Apocalipsis]]
**[[El justo juicio de Dios en Apocalipsis]]
**[[La liturgia y el culto en Apocalipsis]]
**[[Los nombres de Dios en Apocalipsis]]
**[[La soberanía de Dios en Apocalipsis]]
**[[La soberanía de Dios sobre el tiempo en Apocalipsis]]
**[[El triángulo básico de relaciones en Apocalipsis]]

*''Apocalipsis en su contexto canónico''

**[[Índice de las alusiones al Antiguo Testamento en Apocalipsis]]
**[[Las nueve maneras en que Apocalipsis usa el AT (Gregory Beale)]]
**[[Nueve écoes del evento del éxodo en Apocalipsis]]
**[[Once paralelos entre Apocalipsis y los Evangelios Sinópticos]]
**[[Paralelos entre Apocalipsis y las cartas de Pablo]]
**[[Paralelos entre Apocalipsis, Hechos de los Apóstoles, y las cartas generales]]

*''Las características literarias de Apocalipsis''

**[[La alternación entre el cielo y la tierra en Apocalipsis]]
**[[Bienaventuranzas en Apocalipsis]]
**[[Las 27 canciones en Apocalipsis]]
**[[Los colores en Apocalipsis]]
**[[El contraste entre la novia del Cordero y la ramera de Babilonia en Apocalipsis]]
**[[El contraste entre la primera bestia y el Cordero en Apocalipsis]]
**[[El contraste entre los dos testigos y la segunda bestia en Apocalipsis]]
**[[Los dichos con ὧδε en Apocalipsis]]
**[[Doxologías en Apocalipsis]]
**[[El estilo griego en Apocalipsis]]
**[[Frases repetidas en Apocalipsis]]
**[[La hipérbole en Apocalipsis]]
**[[ἱδού en Apocalipsis]]
**[[Los inclusios en Apocalipsis]]
**[[Los lugares que aparecen en Apocalipsis]]
**[[Los merismos en Apocalipsis]]
**[[Minerales, joyas y otros materiales en Apocalipsis]]
**[[Cuatro maneras en que el número siete aparece en Apocalipsis]]
**[[Otros números importantes en Apocalipsis]]
**[[Los olores y los sabores en Apocalipsis]]
**[[Las oraciones declarativas en Apocalipsis]]
**[[Los personajes en Apocalipsis]]
**[[Dos propuestos quiasmos en Apocalipsis]]
**[[Un quiasmo en Apocalipsis 12-14 y Apocalipsis 17-20]]
**[[Las reacciones de Juan en Apocalipsis]]
**[[Los refranes acerca de Babilonia en Apocalipsis]]
**[[Los sonidos en Apocalipsis]]
**[[Tríadas en Apocalipsis]]
**[[Las visiones de Jesucristo en Apocalipsis]]

*''Apocalipsis, asuntos avanzados''

**''Autor''
***[[Cinco cosas el libro de Apocalipsis dice acerca de su autor]]
***[[Ocho argumentos en contra de Juan el apóstol como autor de Apocalipsis]]
***[[Seis argumentos a favor de Juan el apóstol como el autor de Apocalipsis]]
***[[Dos menciones de otro Juan que podría haber sido el autor de Apocalipsis]]
***[[Dos otras teorías radicales acerca de la autoría de Apocalipsis]]
***[[Cuatro conclusiones acerca de la autoría de Apocalipsis]]
**''Fecha''
***[[Diez factores que afectan la fecha de Apocalipsis]]
***[[Una propuesta para la fecha de Apocalipsis]]
**''Texto griego''
***[[La transmisión del texto griego de Apocalipsis]]

*''Exégesis de pasajes en Apocalipsis''

**''Apocalipsis 1''
***[[Apocalipsis 1.1-8, estructura]]
***[[Apocalipsis 1.1-8, apuntes]]
***Otra versión de los apuntes: [[Apocalipsis 1.1a]] - [[Apocalipsis 1.1b-2]] - [[Apocalipsis 1.3]]
***[[Seis alusiones al Antiguo Testamento en Apocalipsis 1.1-8]]
***[[Cuatro argumentos para conectar Apocalipsis 1.9-12a con 1.12b-20 y no con 1.1-8]]
***[[Apocalipsis 1.9-20, estructura]]
***[[Cinco alusiones al Antiguo Testamento en Apocalipsis 1.9-20]]
**''Apocalipsis 2-3''
***[[Elementos comunes de las cartas en Apocalipsis 2-3]]
***[[La estructura de Apocalipsis 2.1-7]]
***[[Dos alusiones al Antiguo Testamento en Apocalipsis 2.1-7]]
***[[La estructura de Apocalipsis 2.8-11]]
***[[Dos alusiones al Antiguo Testamento en Apocalipsis 2.8-11]]
***[[La estructura de Apocalipsis 2.12-17]]
***[[Cuatro alusiones al Antiguo Testamento en Apocalipsis 2.12-17]]
***[[La estructura de Apocalipsis 2.18-29]]
***[[Tres alusiones al Antiguo Testamento en Apocalipsis 2.18-29]]
***[[La estructura de Apocalipsis 3.1-6]]
***[[Tres alusiones al Antiguo Testamento en Apocalipsis 3.5]]
***[[La estructura de Apocalipsis 3.7-13]]
***[[Tres alusiones al Antiguo Testamento en Apocalipsis 3.7-13]]
***[[La estructura de Apocalipsis 3.14-22]]
***[[Tres alusiones al Antiguo Testamento en Apocalipsis 3.14-22]]
**''Apocalipsis 4-5''
***[[Apocalipsis 4]]
***[[Los ancianos y los cuatro seres vivientes en Apocalipsis 4]]
***[[El trono de Dios en Apocalipsis 4 y 7.9-11]]
***[[La estructura de Apocalipsis 4.1-11]]
***[[La estructura de Apocalipsis 5.1-14]]
**''Apocalipsis 6-7''
***[[La estructura de Apocalipsis 6.1-8.1]]
***[[El trono de Dios en Apocalipsis 4 y 7.9-11]]
**''Apocalipsis 8-9''
***[[La estructura de Apocalipsis 8.2-9.21]]
**''Apocalipsis 10''
***[[La estructura de Apocalipsis 10]]
**''Apocalipsis 11''
***[[La estructura de Apocalipsis 11]]
***[[Apocalipsis 11.1-2, apuntes]]
**''Apocalipsis 12''
***[[Un bosquejo de Apocalipsis 12]]
***[[Notas acerca de la estructura de Apocalipsis 12]]
***[[El significado de los símbolos en Apocalipsis 12.1-17]]
***[[El trasfondo de Apocalipsis 12]]
***[[Apocalipsis 12, apuntes]]
***[[Los cinco fracasos del dragón en Apocalipsis 12]]
***[[Diez maneras en que Apocalipsis 12 anima a las iglesias perseguidas y tentadas]]
***[[Una comparación de Apocalipsis 12.1-17 y Apocalipsis 20.1-10]]
***[[Paralelos entre Apocalipsis 12.6 y Apocalipsis 12.14]]
***[[Notas sobre la estructura del himno en Apocalipsis 12.10-12]]
**''Apocalipsis 14''
***[[La estructura de Apocalipsis 14.1-20]]
***[[Notas generales para Apocalipsis 14]]
**''Apocalipsis 17-18''
***[[La estructura de Apocalipsis 17.1-18]]
***[[El número tres en Apocalipsis 18]]
**''Apocalipsis 20''
***[[Los cuatro puntos de vista principales acerca del milenio]]
***[[Argumentos a favor del amilenialismo / en contra del premilenialismo]]
***[[Las debilidades del amilenialismo]]
***[[Conclusiones en cuanto al milenio]]
***[[La interpretación de Apocalipsis 20 según el amilenialismo]]
***[[Una comparación de Apocalipsis 12.1-17 y Apocalipsis 20.1-10]]
**''Apocalipsis 21-22''
***[[La estructura de Apocalipsis 21.1-22.5]]
***[[La estructura de Apocalipsis 22.6-21]]

*''Bibliografias para Apocalipsis''

**[[Bibliografía selecta de libros en español acerca de Apocalipsis]]
**[[Bibliografía de obras consultadas para Apocalipsis]]

</span>
!!Notas generales

<span class="indent1">Es notable que esta sección fue escrita en la tercera persona singular ('él vio') y no la primera persona singular ('yo vi'). Algunos usan este detalle para sugerir que un redactor escribió la introducción, y que Juan escribió el contenido del libro. Sin embargo, muchos libros antiguos tenían introducciones escritas en la tercera persona.  <span class="source">- David Aune, WBC, vol. 52a, Revelation 1-5. (Dallas: Word, 1997). 8.</span><br></span>

!!1.1

<table class="altgray"><tr><td>

''Apocalipsis''

La primera palabra del libro en griego, ἀποκάλυψις, quiere decir "revelación" o "acto de destapar".

</td></tr><tr><td>

''Una revelación "de" Jesucristo''

¿Cómo debemos entender la palabra 'de' en este caso? ¿Es una revelación 'de parte de' Jesucristo, una revelación que él da? ¿O es una revelación 'acerca de' él, donde él es revelado?  Es preferible verla como una revelación a Juan 'de parte de' Jesucristo, porque la siguiente cláusula lo aclara: es una revelación "que Dios le dio" a Jesucristo para transmitir a Juan. 

@@.source Aune, 6; Fee, 2; Ladd, 21.@@

</td></tr><tr><td>

''Que Dios le dio''

Aune (12) y otros comentaristas observan que la idea de Dios enviando a Jesucristo con una revelación para la humanidad es un tema principal en el Evangelio de Juan. Aune menciona Juan 1.18, 8.28, 12.49-50, 14.10, 15.15, 17.8, y 17.14 como ejemplos de este tema.

</td></tr><tr><td>

''Las cosas que deben suceder pronto''

En Daniel 2.28-29 y 2.45 Daniel le dice al rey que por medio de una visión, Dios ha mostrado al rey "lo que ha de acontecer en el porvenir."

</td></tr><tr><td>

Esta frase tiene su paralelo en v. 3: "el tiempo está cerca."

</td></tr><tr><td>

''Por medio de su ángel''

Ladd (23) observa que aunque el ángel se menciona aquí en el primer versículo, no funciona como agente de una revelación hasta 17.15.

</td></tr><tr><td>

''A su siervo Juan''

Un siervo de Dios es alguien que se somete humildemente a la voluntad de Dios como un esclavo obedece las órdenes de su amo. Los profetas fueron llamados "mis siervos los profetas" muchas veces en al Antiguo Testamento.

</td></tr><tr><td>

El autor dice cuatro veces que su nombre es Juan (1.1, 1.4, 1.9; 22.8).

</td></tr><tr><td>

Aune (13-14) compara 1.1 con 22.6:

|bluealtrows|k
|!1.1|!22.6|
|La revelación de Jesucristo, que ''Dios'' le dio, / ''para manifestar a sus siervos'' / ''las cosas que deben suceder pronto; '' / y la declaró / ''enviándola por medio de su ángel'' / a su siervo Juan|Y el Señor, el ''Dios'' de los espíritus de los profetas, / ''ha enviado su ángel'', / ''para mostrar a sus siervos'' / ''las cosas que deben suceder pronto''.|

</td></tr></table>

!!1.2

<table class="altgray"><tr><td>

''Juan, que ha dado testimonio...el testimonio de Jesucristo''

La palabra testificar (dar testimonio) tienen dos sentidos aquí. 

* El sentido principal es de testificar solemnemente con veracidad acerca de lo que uno ha visto. Uno es primero un testigo ocular (ve con los ojos), y luego da testimonio verbal (habla con la boca).
*Pero en el primer siglo la palabra μαρτυρέω (dar testimonio) llegó a significar 'sufrir persecución, ser mártir' - porque cuando los Cristianos testificaban de Jesucristo delante de los Romanos, fueron martirizados.

Juan 'ha dado testimonio' porque estuvo encarcelado en Patmos por su fe. Y era importante para los destinatarios ser recordados del 'testimonio' (= martirio, refiriéndose a su crucifixión) de Jesucristo, porque ellos pronto serían perseguidos con violencia por su fe. 

</td></tr><tr><td>

''La palabra de Dios''

Es decir, la revelación mencionada en v. 1, que Dios le dio a Juan por medio de Jesucristo.

</td></tr><tr><td>

''El testimonio de Jesucristo''

La 'de' podría significar el testimonio 'acerca de' Jesucristo. Pero la mayoría de los comentaristas prefieren interpretarla como el testimonio 'llevado por' Jesucristo, lo que él testificó. 

@@.source Por ejemplo, Aune 19.@@

</td></tr></table>

!!1.3

<table class="altgray"><tr><td>

Esta es la primera de siete [[bienaventuranzas en Apocalipsis|Bienaventuranzas en Apocalipsis]].

</td></tr><tr><td>

''El que lee, y los que oyen''

Se refiere al lector que leyó el libro a la congregación en voz alta, y la congregación que escuchó al lector. Debemos tener en cuenta que no muchas personas sabían leer y escribir en el primer siglo.

</td></tr><tr><td>

''Los que oyen...y guardan''

Fee (4) dice que estas frases son otra manera de expresar lo que vemos en Santiago 1.22: «sed hacedores de la palabra, y no tan solamente oidores». Lucas 11.28 tiene una bienaventuranza casi igual, en las palabras de Jesús: «...bienaventurados los que oyen la palabra de Dios, y la guardan» Aune (20) menciona otros textos con el mismo tema: Lc 8.21; 12.47; Mt 7.24–27 / Lc 6.47–49; Ro 2.13; Ezq 33.31–32.

</td></tr><tr><td>

''Esta profecía''

Sería fácil, desde nuestra perspectiva, escuchar la palabra 'profecía' aquí y pensar en cosas en nuestro futuro. Sin embargo, Fee (3) nos recuerda que el mensaje es principalmente una palabra profética acerca del futuro inmediato de los primeros destinatarios, los sufrimientos y la victoria que experimentarían. Debemos siempre leer este libro pensando primero en su significado para los Cristianos al final del primer siglo.

</td></tr></table>

!!1.4-5a

<table class="altgray"><tr><td>

''Juan, a las siete iglesias que están en Asia: Gracia y paz''

Muchas veces se habla de las 'siete cartas' a las siete iglesias de Asia Menor. Pero vemos aquí que técnicamente es una sola carta circular de Juan a todas las siete iglesias. Y esta sola carta contiene siete mensajes de Jesucristo, uno a cada iglesia. En realidad, podemos decir que todo el libro de Apocalipsis es la carta de Juan a estas iglesias. En el último capítulo vemos otros típicos elementos epistolarios para cerrar la carta.

</td></tr><tr><td>

''Saludo trinitario''

El saludo epistolario está en el nombre de las tres personas de la Trinidad. Es notable que Juan ha cambiado el orden típico de estas personas. Juan pone al Espíritu segundo, para poner el énfasis en Jesucristo al final. 

</td></tr><tr><td>

''El que es, que era y que ha de venir''

En Apocalipsis 1.4, Juan desea gracia y paz para sus lectores "del que es, que era y que ha de venir."

* En Éxodo 3.14, Dios dice que su nombre es "Yo soy". En otras palabras, es el que es.
* En Isaías 41.4, Dios usa el mismo nombre para si mismo, pero también dice que es el principio y el fin, enfatizando su naturaleza eterna.

</td></tr><tr><td>

Las frases "el que es y que era y que ha de venir" no van en orden cronológico (pasado, presente y futuro) sino que inician con el presente. Esto es porque el nombre principal de Dios es Jehová: "Yo soy". 

</td></tr><tr><td>

''Siete espíritus''

Es una referencia al Espíritu Santo. La idea del Espíritu Santo como 'siete' espíritus viene de dos textos del Antiguo Testamento.

*Isaías 11.2 describe siete maneras en que el Espíritu llegará a reposar sobre la vara del tronco de Isaí: //Y reposará sobre él el Espíritu de Jehová; espíritu de sabiduría y de inteligencia, espíritu de consejo y de poder, espíritu de conocimiento y de temor de Jehová.//
*Zacarías 4.2-6 describe un candelabro con siete lámparas, y lo identifica con el Espíritu en v. 6.

</td></tr><tr><td>

Fee (6) sugiere que a través del libro, cuando Juan está ubicado en el cielo, describe al Espíritu como los siete espíritus (1.4, 3.1, 4.5, 5.6), pero cuando está ubicado en la tierra, usa el título convencional de 'el Espíritu' (1.10, caps. 2-3, 4.2; 17.3; 21.10).

</td></tr><tr><td>

''Testigo fiel''

Ve el comentario arriba para 1.2 acerca de los testigos y sus testimonios. Un testigo fiel es un testigo cuyo testimonio es confiable.

</td></tr><tr><td>

La frase 'testigo fiel' occurre en Salmo 89.37 para describir la luna, el testigo fiel en el cielo.

</td></tr><tr><td>

''El primogénito de los muertos''

Esta frase, en combinación con la siguiente frase "el soberano de los reyes de la tierra", alude a Salmo 89 también - precisamente a 89.27, que dice: "Yo también le pondré por primogénito, El más excelso de los reyes de la tierra".

</td></tr><tr><td>

Cristo fue el primero en ser resucitado a la nueva creación. En la resurrección final los Cristianos también serán resucitados. Aune nota que esta idea ya había aparecido en Colosenses 1.18: "el primogénito de entre los muertos", y que Colosenses fue una carta leída en una de las siete iglesias de Apocalipsis: "Cuando esta carta haya sido leída entre vosotros, haced que también se lea en la iglesia de los laodicenses, y que la de Laodicea la leáis también vosotros." (Colosenses 4.16). En 1 Corintios 15.20 Pablo dice esto: "Mas ahora Cristo ha resucitado de los muertos; primicias de los que durmieron es hecho." 

</td></tr><tr><td>

Aune (38) observa la paradoja en esta frase, que conecta el nacimiento ("primogénito") con su contrario, la muerte ("de los muertos").

</td></tr><tr><td>

''El soberano de los reyes de la tierra''

Esta es otra alusión a Salmo 89.27.

</td></tr><tr><td>

Esta descripción de Jesucristo sería importante para los primeros destinatarios, que sufrían a mano de los reyes de la tierra. Jesucristo es soberano sobre ellos, y al final los vencerá. En 17.14 y 19.16 Jesucristo tiene un título similar, Rey de reyes y Señor de Señores.

</td></tr></table>

!!1.5b-6

<table class="altgray"><tr><td>

Fee nota que es sorprendente que Juan dedica la doxología en Apocalipsis 1.5b-6, no a Dios Padre, sino a Jesucristo. Es evidencia de la alta cristología de Juan.

</td></tr><tr><td>

Esta tabla se basa en Aune (45), que expone los paralelos entre Apocalipsis 1.5-6 y Tito 2.14.

|bluealtrows|k
|!Apocalipsis 1.5b-6|!Tito 2.14|
|Al que nos ama y que por su sangre|Él se entregó por nosotros |
|nos ha librado de nuestros pecados,|para rescatarnos de toda maldad|
|al que ha hecho de nosotros un reino,|y purificar para sí un pueblo elegido,|
|sacerdotes al servicio de Dios su Padre|dedicado a hacer el bien.|

</td></tr><tr><td>

''¿Al que nos amó, y nos lavó?''

Según todos los comentaristas, los mejores manuscritos en griego tienen dos diferencias con la traducción Reina Valera, que se basa en manuscritos inferiores:

*No es "nos lavó" sino "nos ha liberado". Kistemaker escribe que las dos lecturas en griego difieren "sólo en una vocal (λούσαντι y λύσαντι) y tienen la misma pronunciación." (78)
*No es "nos amó" (tiempo pasado) sino "nos ama" (tiempo presente). Probablemente algunos escribas pensaban que los dos verbos (amar y liberar) deben estar en el mismo tiempo, y 'corrigieron' lo que veían como gramática deficiente en el texto. Pero Juan quiere consolar a sus lectores perseguidos que Jesucristo los ama (presente), y lo mostró liberándolos por su sangre.

</td></tr><tr><td>

''Vocabulario del nuevo éxodo''

Fee (9) llama nuestra atención al lenguaje del éxodo que aparece en v. 6:

*"Nos ha liberado" da eco a la liberación de los Israelitas de Egipto en el éxodo. Cristo nos ha dado una liberación de una esclavitud mayor: no de la esclavitud en Egipto sino de la esclavitud a nuestros pecados.
*"nos hizo reyes y sacerdotes" es una alusión a Éxodo 19.6: //«Y vosotros me seréis un reino de sacerdotes»//
*"Por su sangre" nos recuerda de la sangre de la Pascua que los Israelitas pusieron en sus puertas para no sufrir la última plaga que cayó sobre los egipcios.

</td></tr><tr><td>

''Sacerdotes''

Ladd (27) dice que los Cristianos son sacerdotes en el sentido de que tienen derecho de entrar en la presencia de Dios y ofrecer sacrificios de gratitud y alabanza a Dios (Romanos 12.1, Hebreos 13.15-16).

</td></tr><tr><td>

''A él sea gloria e imperio''

Se refiere a Jesucristo, no a Dios Padre. Si se hubiera referido Dios Padre, el texto habría dicho "al cual", no "a él," porque Dios aparece inmediatamente antes. Juan usa la frase "a él" para ayudarnos a ver que se refiere a Jesucristo, con quien la oración gramatical empezó. 

@@.source (Fee, 9)@@

</td></tr></table>

!!1.7

<table class="altgray"><tr><td>

Apocalipsis 1.7 describe la venida de Jesús sobre las nubes, y los que lo traspasaron y los linajes de la tierra lamentarán por causa de su venida.

* En Daniel 5.13, uno como el hijo del hombre aparece sobre nubes, llegando al trono de Dios.
* En Zacarías 12.10-14 Dios dice que Israel verá "a mí, al que traspasaron", y llorará y se afligirá.

Mateo 24.30 combina estos dos textos del AT también.

</td></tr><tr><td>

Juan describe los efectos de la segunda vendia sobre los que lo oponen. Lo hace para consolar a sus lectores perseguidos: Las personas que ahora les hacen llorar por causa de la persecución, llorarán cuando venga Jesús.

</td></tr><tr><td>

''Incluso quienes lo traspasaron (NVI)''

Fueron las mismas autoridades romanas que 'traspasaron' a Jesús en su crucifixión que ahora perseguían a los destinatarios de Apocalipsis. Y Juan les dice a los destinatarios, que los Romanos lamentarán lo que han hecho. 

@@.source (Fee, 11)@@

</td></tr></table>

!!1.8

<table class="altgray"><tr><td>

Este versículo es uno de sólo dos textos en Apocalipsis donde Dios mismo habla. El otro texto es 21.5-8.

</td></tr><tr><td>

''El Alfa y la Omega, principio y fin''

Alfa y omega son la primera y la última letra, respectivamente, del abecedario griego. Dios comprende todo lo que se puede decir con palabras.

</td></tr><tr><td>

''El Señor Dios, el que es y que era y que ha de venir, el Todopoderoso (NVI)''

El nombre que encontramos tan frecuentemente en el Antiguo Testamento (especialmente Amós 3.13 y 4.13), "el Señor Dios Todopoderoso", ha sido dividido para insertar la frase "el que es y que era y que ha de venir". 

@@.source (Fee, 12)@@

</td></tr><tr><td>

La omnipotencia de Dios ("Todopoderoso") sería un consuelo para Cristianos perseguidos por los poderes actuales. El mensaje a ellos es que Dios tiene control a pesar de sus circunstancias.

</td></tr></table>
Título (1.1-2)

* Título propio (1.1a)
* Propósito de la revelación a Jesús (1.1b)
* La transmisión de la revelación de Jesús a Juan (1.1c)
* El testimonio de Juan (1.2)

Bienaventuranza (1.3)

Saludo epistolario (1.4-5a)

* Autor (1.4a)
* Destinatarios (1.4b)
* Saludo trinitario (1.4c-5a)

Doxología (1.5b-6)

Profecía de la segunda venida (1.7)

Auto-identificación divina (1.8)
<<stretch "{{$:/core/images/options-button}}" "<strong>To go:</strong> Aune, Shussler, Resseguie<br><strong>Done:</strong> Hendriksen, Mounce, Ladd, Fee, Beale, ">>

<table class="altgray"><tr><td>

Apocalipsis 1.1a es una [ext[oración declarativa|./lit.declarativas.html]] que  da inicio a la sección [[Apocalipsis 1.1-8]].

</td></tr><tr><td> 

<span class="red">Ἀποκάλυψις</span> Ἰησοῦ Χριστοῦ ἣν ἔδωκεν αὐτῷ ὁ θεὸς δεῖξαι τοῖς <span class="green">δούλοις</span> αὐτοῦ ἃ δεῖ γενέσθαι <span class="wine">ἐν τάχει</span>

://La <span class="red">revelación</span> de Jesucristo,//
:://que Dios le dio,//
::://para manifestar a sus <span class="green">siervos</span>//
::://las cosas que deben suceder <span class="wine">pronto</span>;//

</td></tr><tr><td>

En esta oración aprendemos que [[Dios Padre|Dios Padre en Apocalipsis]] encomendó un mensaje profético a [[Jesucristo|Jesucristo en Apocalipsis]], para que Jesús transmitiera el mensaje a los Cristianos de Asia Menor, aquí llamados [[siervos de Dios|La iglesia / los Cristianos en Apocalipsis]]. La profecía se trata de cosas que [[pronto|Pronto en Apocalipsis]] se llevarían a cabo en la vida de estos Cristianos del primer siglo - específicamente la persecución de las iglesias.

</td></tr><tr><td>

La primera palabra en griego, Ἀποκάλυψις (''apocalipsis''), es la fuente del nombre del libro. Ἀποκάλυψις significa 'revelación' (el acto de remover un velo).

</td></tr><tr><td>

Algunos comentaristas debaten si '''//de// Jesucristo''' significa '//acerca de// Jesucristo' o '//de parte de// Jesucristo. El contexto aclara que es de parte de Jesucristo, pero la visión en 1.9-20 demuestra que este mensaje de parte de Jesucristo también contiene información //acerca de// Jesucristo.

</td></tr><tr><td>

Esta revelación es acerca de cosas que 'deben' suceder pronto. La palabra griega δεῖ indica la necesidad de algo. Son cosas que necesariamente sucederán. No hay posibilidad de que no sucedieran.

</td></tr><tr><td>

En esta oración hay una [[alusión|Alusiones al Antiguo Testamento en Apocalipsis]] a Daniel 2.28, que también habla de una revelación de Dios acerca de sucesos venideros:

<span class="indent1">//Pero hay un ''Dios'' en los cielos, el cual revela los misterios, y él ''ha hecho saber'' al rey Nabucodonosor ''lo que ha de acontecer en los postreros días''.//</span>

</td></tr></table>
<span class="hide">

To go: Aune, Shussler, Resseguie

Done: Hendriksen, Mounce, Ladd, Fee, Beale,

</span>

<table class="altgray"><tr><td>

καὶ <span class="orange">ἐσήμανεν</span> ἀποστείλας διὰ τοῦ ἀγγέλου αὐτοῦ τῷ δούλῳ αὐτοῦ <span class="blue">Ἰωάννῃ</span>, ὃς ἐμαρτύρησεν <span class="dkgrn">τὸν λόγον τοῦ θεοῦ</span> καὶ τὴν <span class="wine">μαρτυρίαν</span>; Ἰησοῦ Χριστοῦ ὅσα εἶδεν.

:y la <span class="orange">declaró</span> 
::enviándola por medio de su ángel a su siervo <span class="blue">Juan</span>, 
:::que ha dado testimonio 
::::de <span class="dkgrn">la palabra de Dios</span>, 
::::y del <span class="wine">testimonio</span> de Jesucristo, 
::::y de todas las cosas que ha visto.

</td></tr><tr><td>

Apocalipsis 1.1b-2 es una [ext[oración declarativa|./lit.declarativas.html]] de la sección [[Apocalipsis 1.1-8]]. 

</td></tr><tr><td>

En esta oración vemos el resto de la cadena de comunicación que empezó en [[Apocalipsis 1.1a|./exeg.1.1a.html]]:

<span class="indent1">

Dios Padre > Jesucristo > Ángel > Juan > Los siervos de Dios

</span>

</td></tr><tr><td>

Robert Mounce dice que la palabra ἐσήμανεν (traducida 'declaró' en la Reina Valera 60) signfica 'significar', en el sentido de 'dar a conocer por medio de señales'. <span class="source">- Robert H. Mounce, //The Book of Revelation, revised edition//. (Grand Rapids: Wm. B. Eerdmans, 1998) 42.</span>

</td></tr><tr><td>

Este mensaje viene primeramente de Dios, así que tiene la autoridad de llamarse una 'palabra de Dios.' Y Jesucristo testificó este mensaje a Juan, así que también es 'testimonio de Jesucristo.' Y Juan, por ponerlo por escrito, 'ha dado testimonio' también. 

</td></tr><tr><td>

Testificar o dar testimonio es un término legal que veremos varias veces en este libro.

</td></tr></table>
<span class="hide">

To go: Aune, Shussler, Resseguie,

Done: Hendriksen, Mounce, Ladd, Fee, Beale, 

</span>

<table class="altgray"><tr><td>

<span class="pink">Μακάριος</span> ὁ ἀναγινώσκων καὶ οἱ ἀκούοντες τοὺς λόγους τῆς <span class="green">προφητείας</span> καὶ <span class="gold">τηροῦντες</span> τὰ ἐν αὐτῇ γεγραμμένα, ὁ γὰρ <span class="blue">καιρὸς</span> ἐγγύς.

:<span class="pink">//Bienaventurado//</span> 
:://el que lee,// 
:://y los que// 
::://oyen las palabras de esta <span class="green">profecía</span>, //
:::y <span class="gold">//guardan//</span> //las cosas en ella escritas;// 
::porque <span class="blue">//el tiempo//</span> //está cerca.// 

</td></tr><tr><td>

Apocalipsis 1.3 es una [ext[oración declarativa|./lit.declarativas.html]], y es la primera de siete [ext[bienaventuranzas|./lit.bienaventuranzas.html]] en Apocalipsis.

</td></tr><tr><td>

En esta oración aprendemos que los siguientes grupos son dichosos:

*'El que lee' - se refiere al lector litúrgico que tenía la responsabilidad de leer el libro en voz alta en el culto para los congregantes.
*'Los que oyen...y guardan' - como aprendemos en varios versículos bíblicos, vemos nuevamente en este texto que no es suficiente oir la Palabra de Dios, es necesario guardarla (obedecerla, ponerla en práctica).

</td></tr><tr><td>

En particular, este versículo reproduce casi palabra por palabra lo que dice Jesús en Lucas 11.28: 

<span class="indent1">//bienaventurados los que oyen la palabra de Dios, y la guardan//. </span>

</td></tr><tr><td>

Juan les dice a los primeros lectores que era especialmente importante oir y guardar estas palabras, porque el tiempo estaba [[cerca|Pronto en Apocalipsis]]. La presión social para rendir culto a César, y la persecución por no hacerlo, venía en camino, en el futuro cercano.

</td></tr><tr><td>

La palabra griega para el tiempo, καιρὸς, no era el término general para el tiempo, sino una palabra que significaba 'el momento oportuno', 'el momento de decisión'.

</td></tr></table>
Identificación de Juan (1.9a)

Lugar de la comisión (1.9b)

La voz manda que Juan escriba (1.10-12a)

*Las circunstancias (1.10a)
* La voz (1.10b)
* El primer orden de escribir (1.11)
* La reacción de Juan (1.12a)

La visión de Juan (1.12b-20)

* La visión de un candelabro (1.12b)
* La visión de uno como un hijo del hombre (1.13a)
* La descripción que Juan da del hijo del hombre (1.13b-16)
** Su vestido (1.13b)
** Su cinto (1.13c)
** Su cabeza y cabello (1.14a)
** Sus ojos (1.14b)
** Sus pies (1.15a)
** Su voz (1.15b)
** Su mano derecha (1.16a)
** Su boca (1.16b)
** Su rostro (1.16c)
* La reacción de Juan (1.17a)
* El mensaje de Jesús para fortalecer a Juan (1.17b-18)
** El orden de no temer (1.17b)
** La auto-identificación de Jesús (para fortalecer a Juan) (1.17c-18)
* El segundo orden de escribir (1.19)
* La interpretación de las estrellas y los candelabros (1.20)
    //Fuentes: Comentarios de Aune, Moiunce, Morris, Hendriksen, Ladd.//

<table class="altgray"><tr><td>

    Muchos comentaristas están de acuerdo en que estos versículos se tratan de la iglesia. Dios envía a Juan a “medir” la iglesia para protegerla espiritualmente, paralelo al sello que la iglesia recibe en 7.1-8. La iglesia sufrirá persecución, pero solo por un tiempo corto, y sobrevivirá.

</td></tr><tr><td>

    ¿Está viendo Juan el templo en Jerusalén? ¿Al templo en el cielo? ¿O simplemente un templo en su visión? Si es el templo verdadero, tendría que haber visto esta visión antes de 70 d.c. La presencia de Gentiles para hollar a algunos indica que no es un templo en el cielo. Es mejor pensar que Juan vio en su visión un templo simbólico que correspondía al templo que antes existía en Jerusalén.

</td></tr><tr><td>

Algunos dicen que capítulo 11 es el contenido del pequeño rollo de 10.8ff.

<span class="doublelist">

* El templo fue medido en Ezequiel 40-43 también.
* La iglesia se llama el templo en 1 Co. 3.16, 2 Co. 6.16 y Ef. 2.21.
* Medidas eran para destruir o para preservar (2 S. 8.2, 2 R. 21.13, Is. 34.11, La. 2.8, Am. 7.7-9, Zac. 2.1-5).
* Los comentaristas no están de acuerdo en cómo interpretar el patio que se deja para que los Gentiles lo hollaran.
** Algunos (como Mounce) dicen que a pesar de que la iglesia es protegida espiritualmente por Dios (de la apostasía, etc), tiene que sufrir persecución. La parte interior del templo y el patio de afuera son la misma iglesia vista por dos perspectivas diferentes.
** Otros (como Hendriksen) dicen que los verdaderos creyentes son la parte interior, y los falsos creyentes en la iglesia serán entregados a los Gentiles (inconversos) para ser perseguidos.
** Otros dicen que los que son entregados a los Gentiles son los Judíos inconversos. Dicen que hay una ironía aquí: Antes, eran los Judíos que ocupaban el patio interior del templo en Jerusalén, y los Gentiles el patio exterior. Pero ahora son los Judíos que rechazaron a Cristo que son enviados al patio exterior para ser hollados por los Gentiles, mientras que los creyentes en Cristo, Judío o Gentil, son los que ocupan el lugar central y protegido del templo. “…Juan está dividiendo la humanidad entre Cristianos y Gentiles.” (Morris, 142).
* Ladd dice que estos versículos hablan de la preservación del pueblo Judío. Lc. 21.24 dice que es la ciudad de Jerusalén que será pisoteada por los Gentiles, y es basado en Zac. 12.3, LXX.
* 11.8 dice que Jerusalén es un lugar de persecución como Sodoma y Egipto. Así que es mejor ver tambien en vv. 1-2 hay un contraste entre el templo que es la iglesia y Jerusalén que se opone a la iglesia.
* El trasfondo para el período de tiempo es Daniel 8.9-14. El punto del período de tiempo es que la persecución será limitada en su duración, y controlada por Dios (v. 2).

</span>

</td></tr></table>
<table class="altgray"><tr><td>

    ''La mujer en Apocalipsis 12.1 y sus hijos''

<span class="doublelist">

* La mujer en Apocalipsis 12 no es un símbolo de María la madre de Jesús sino un símbolo del pueblo de Dios. Sabemos esto porque el sol, la luna y las doce estrellas con que la mujer está vestida son símbolos que vienen de Génesis 37.9. En ese texto, José tiene un sueño en el cual el sol (su padre Jacob), la luna (su madre), y once estrellas (los hermanos de José) se postran delante de José. Debemos entender que los símbolos significan lo mismo en Apocalipsis - el pueblo de Israel. Jesús nació literalmente de su madre María, pero se puede decir que también nació de Israel. Los "otros hijos" de la mujer, mencionados en 12.17, son los Cristianos.
* Es notable que la mujer es una "gran señal" en el cielo, pero el dragón solo es "otro señal". El diablo no tiene la misma importancia que el pueblo de Dios.
* Esta mujer celestial, igual que la novia de Cristo en Apocalipsis 19-22, es un contraste con la ramera de cap. 17.
* Aplicación: a pesar de lo que piensa el mundo del pueblo de Dios, Dios la ve como una hermosa mujer celestial.

</span>

</td></tr><tr><td>

    ''La angustia del parto en Apocalipsis 12.2''

<span class="doublelist">

* Véase especialmente Isaías 26.17-18 para ver muchos paralelos con el presente versículo: "Como la mujer encinta cuando se acerca el alumbramiento gime y da gritos en sus dolores, así hemos sido delante de ti, oh Jehová. Concebimos, tuvimos dolores de parto, dimos a luz viento; ninguna liberación hicimos en la tierra, ni cayeron los moradores del mundo." En el tiempo de Isaías, Israel sufrió oposición, pero el sufrimiento no resultó en ningún provecho para Israel. Era como tener dolores de parto para nada. Pero en el tiempo de Jesús, Israel sufrió nuevamente bajo Herodes y los Romanos, pero esta vez dio a luz al Salvador.
* Otros textos que hablan de dolores de parto en el AT son Is. 21.3, 37.3, 66.7-8, Jer. 4.31, 6.24, 13.21, 22.23, 30.6, Miq. 4.9-10, 5.3.

</span>

</td></tr><tr><td>

    ''El dragón en Apocalipsis 12.3''

<span class="doublelist">

* Apocalipsis 12.9 no deja lugar a dudas en cuanto a la identidad del dragón: es un símbolo de Satanás. El dragón aparece aquí en cap.12, y también en 13.2, 13.4, 13.11, 16.13 y 20.2. La literatura judía representaba al diablo como un dragón, y dragones aparecen en los mitos paganos sobre los cuales el simbolismo de este capítulo se basa (véase El trasfondo de Apocalipsis 12).
* Algunas veces el Faraón de Egipto fue llamado un dragón (Ez. 29.3, 32.2). Hay otras alusiones al éxodo en Apocalipsis 12. Puede ser que el símbolo del dragón fue escogido en parte era para recordarnos de la liberación del pueblo de Dios de las asechanzas de Faraón.
* La mitología antigua de Mesopotamia y la mitología de los Cananeos hablaban de un monstruo de siete cabezas, y la mitología griega habla de Hidra, un monstruo con varias cabezas que era difícil de matar.
* La palabra griega aquí para corona es διαδήματα, la palabra para coronas de reyes y autoridades, en contraste con la palabra στέφανος, la corona dada como premio a los militares y deportistas.
* La bestia de capítulo 13, imitando al dragón, también tiene siete cabezas y diez cuernos (17.3). Pero hay una diferencia: el dragón tiene siete coronas en sus cabezas, mientras la bestia tiene diez coronas en sus cuernos.
* Algunos intérpretes entienden los cuernos como una referencia a Daniel 7.7, 20, 24, que usa cuernos para hablar de reyes. Pero otros intérpretes entienden los cuernos como símbolos de fuerza.

</span>

</td></tr><tr><td>

    ''La caída de la tercera parte de las estrellas en Apocalipsis 12.4''

<span class="doublelist">

* Esta es una referencia a Daniel 8.10 e Isaías 24.21-22, y se refiere los ángeles. Las estrellas también son símbolos de ángeles en Job 38.7.
* El diablo, en su rebelión, llevó consigo la tercera parte de los ángeles. Estos son los ahora se llaman demonios.

</span>

</td></tr><tr><td>

    ''El deseo del dragón de devorar al niño en Apocalipsis 12.4''

<span class="doublelist">

* La misma palabra griega para 'devorar' aparece también en v. 16, donde la tierra devora o traga los ríos de agua que salen de la boca del dragón.
* Parece extraño que el dragón no simplemente come a la mujer. Pero esta es una visión simbólica. No es un relato de un dragón literal y una literal mujer embarazada.
* Cuando Jesús nació, el rey Herodes, sintiéndose amenzado por la mención de otro Rey de los judíos, mató a muchos niños en Belén en su intento de matar a Jesús.

</span>

</td></tr><tr><td>

    ''El niño de Apocalipsis 12.5''

<span class="doublelist">

* Debe ser evidente que el niño representa a Jesús de Nazaret, el Mesías.
* La mención del cetro del niño es una referencia a Salmo 2.9, un salmo mesiánico que habla de la autoridad del rey ungido sobre las naciones hostiles. Otros dos versículos en Apocalipsis aluden a Salmo 2.9: Ap. 2.27 y 19.15.
* En el caso de Jesucristo, el cetro es un símbolo de la firmeza de su reino, no un símbolo de tiranía. La palabra para reinar es literalmente 'pastorear.'
* Los siguientes versículos hablan de la autoridad dada a Jesús: Mt. 28:18; Jn. 3:35; 5:27; 13:3; 17:2; v.t. Dn. 7:13;
* Muchos comentaristas notan que la descripción del niño no menciona nada de la vida, la crucifixión o la resurrección de Jesucristo. La acción pasa del nacimiento de Jesús directamente a su ascensión.

</span>

</td></tr><tr><td>

    ''La salida al desierto en Apocalipsis 12.6''

<span class="doublelist">

* Paralelos entre Apocalipsis 12.6 y Apocalipsis 12.14
* El desierto era símbol de refugio y de la provisión del Señor: Dios sacó a los Israelitas de Egipto y los llevó al desierto, donde proveyó maná y codornices. Ellos conectan este versículo con Mc. 13.14-20 = Mt. 24.15-22 = Lc. 21.20-24.
* Algunos comentaristas dicen que se refiere a la huida de los Cristianos a Pela cuando Jerusalén fue destruida en 70 d.c.
* Los 1,260 días son una alusión a los tres años y medio ("tiempo, [dos] tiempos, y medio tiempo") de Dn. 7:25; 12:7

</span>

</td></tr><tr><td>

    ''Miguel en Apocalipsis 12.7''

<span class="doublelist">

*Las únicas otras instancias acerca de Miguel son Dn. 10:13, 21; 12:1, Judas 9.

</span>

</td></tr><tr><td>

    ''El lanzamiento del dragón del cielo a la tierra en Apocalipsis 12.9-12''

<span class="doublelist">

*La caída de los ángeles malvados se menciona en 2 Pedro 2.4, Judas 6, y en la literatura seudeígrafa como 1 Enoc 6-11. Pero en estas referencias los ángeles salen del cielo. No hay una referencia clara de que fueron expulsados del cielo contra su voluntad. Por eso Hendriksen (141) dice que no debemos entender la caída literalmente.
*Aquí en capítulo 12 el dragón cae del cielo a la tierra. En capítulo 20 caerá de la tierra al abismo.

</span>

</td></tr><tr><td>

    ''Los títulos para el dragón en Apocalipsis 12.9''

<span class="doublelist">

* V. 9 es la única identificación bíblica entre el serpiente de Génesis 3 y Satanás. Sin embargo hay tres otros textos que parecen hacer esta identificación: Ro. 16.20, Lc. 10.18-19, y 2 Co. 11.14. Véase también el libro apócrifo Sabiduría 2.24.
* El nombre Satanás ("adversario") solo se menciona en el AT en tres libros: 1 Cr. 21:1; Job 1:6, 9, 12; 2:3, 4, 6, 7; Zac. 3.1, 2.
* El título "diablo" significa "acusador". Algunas referencias bíblicas al diablo como acusador: Job 1:6–12; 2:1–7, Zac. 3:1 (véase 1 Cr. 21:1).

</span>

</td></tr></table>
Lo que sigue es un resumen de las observaciones más útiles que encontré en mi estudio de los comentarios bíblicos sobre Apocalipsis 4.

<span class="doublelist">

!!La conexión entre Apocalipsis 4 y su contexto inmediato en el libro de Apocalipsis

*Beale dice que hay muchas palabras e ideas de ''capítulos 2-3'' que vuelven a aparecer en capítulos 4-5: recibir, vencer, siete espíritus, vestiduras blancas, santos sobre tronos, coronas, y una puerta abierta.

*El trono de Jesucristo que se mencionó en ''3.21'' anticipa el trono que vemos en capítulo 4.

*Capítulos 4 y 5 están conectados por su escenario, el trono de Dios. Pero donde capítulo 4 se enfoca la descripción del trono de Dios Padre, y el tema la creación, ''capítulo 5'' se enfoca en el Cordero (Jesucristo) y el tema de la redención.

!!La conexión entre Apocalipsis y el resto del canon bíblico

*La descripción de los seres vivientes cubiertos de ojos usa elementos que vemos ''Ezequiel 1-2''. Los ojos sobre los ángeles en Ezequiel representaban la omnisciencia de Dios - que Dios ve todo lo que sucede, no solo en Palestina sino en todo el mundo. Los ojos de los seres vivientes tienen el mismo significado. Dios ve y es soberano sobre toda la creación.

*El Padrenuestro en ''Mateo 6'' dice, //Hágase tu voluntad, como en el cielo, así también en la tierra. //Apocalipsis 4 nos da una visión de cómo son las cosas en el cielo. Nuestra oración en el Padrenuestro es para que nuestro mundo puede exhibir las mismas cualidades: adoración, sumisión, orden, alabanza. Y Apocalipsis 21 es una visión del cumplimiento de esta oración, cuando el cielo desciende de lo alto y se une con la tierra.

!!Los detalles de Apocalipsis 4

*''«Después de esto miré»'' (4.1) - es decir, Juan vio esta visión después de que vio la visión de capítulos 1-3.

*''«Sube acá»'' (4.1) - no es una referencia a un rapto o arrebato de la iglesia. Es una llamada a Juan, para sube al cielo para ver la visión del cielo en el resto del capítulo.

*''El trono'' en este capítulo se contrasta con otros tronos que vemos en el libro: el trono de Satanás en 2.13, el trono del dragón en 13.2, y el trono de la bestia en 16.10.

*Nadie está seguro del significado de ''los 24 ancianos''. No hay nada similar en el Antiguo Testamento.
**Opciones que se han planteado:
***Las 24 estrellas del zodiaco
***Las 24 horas del día
***Las 24 libros del AT según algunas numeraciones judías
***Las doce tribus del AT y los 12 apóstoles del NT
***Dos representantes por cada una de las doce tribus de Israel 
***Los 24 órdenes de Levitas (1 Crónicas 24-25)
**El presente autor piensa que ninguna de estas opciones nos ayudan a interpretar el pasaje, y que debemos mostrar humildad y reconocer que no sabemos. Sin embargo, daré mi opinión sobre las opciones antesmencionadas.
***La ventaja de las primeras dos es el enfoque en toda la creación que vemos en el capítulo. Sin embargo, dudo que Juan, y mucho menos Jesucristo, estaría de acuerdo con la idea de usar la astrología en el simbolismo de estas visiones cristianas.
***La tercera (24 libros del AT) y la cuarta (tribus + apóstoles) parecen forzadas y sin fundamento. 
***Las últimas dos opciones tienen más posibilidades: el número 12 sí suele representar al pueblo de Dios en Apocalipsis.

*Hay tres referencias a ''la doctrina de la creación'' en Apocalipsis 4:

**''El arcoiris'' alrededor del trono nos recuerda de la promesa a Noé. Noé y sus descendientes fueron un nuevo inicio, una nueva creación después del diluvio.

**''Los seres vivientes'' tienen aspectos de diferentes miembros del mundo animal. Parecen representar toda la creación. Además la frase 'seres vivientes' viene directamente de Génesis 1.

**''4.11'' dice que Dios es digno de adoración precisamente porque fue Creador de todo lo que existe: //Señor, digno eres de recibir la gloria y la honra y el poder; porque tú creaste todas las cosas, y por tu voluntad existen y fueron creadas. //

!!Apocalipsis en su contexto histórico del primer siglo

*La visión de Apocalipsis 4-5 es ''una parodia o burla de la corte imperial de César'': contiene un trono, coronas, ancianos, aclamaciones de 'Digno eres'. Fue bastante valiente y atrevido de parte de Juan publicar esta visión paródica cuando él era prisionero político del mismo imperio romano.

*Los Cristianos de estas ciudades de Asia Menor fueron perseguidos por sus vecinos porque  los Cristianos rehusaban adorar a César. Juan era prisionero político por su fe en Cristo, y seguramente no fue el único. Y estas visiones advierten que la persecución estaba por aumentarse pronto. Fue un gran consuelo, entonces, que hay un Rey de Reyes - un Emperador mucho más digno, y sobre un trono mucho más glorioso. Y la soberanía y autoridad del emperador romano no se puede comparar con las que tiene el que está sentado sobre el trono. Y la extensión del imperio romano no se compara con la extensión de toda la creación sobre la cual reina Dios.

*Podemos ver que cuando los líderes políticos exigen nuestra adoración, la liturgia se convierte en un acto político.

!!El significado de Apocalipsis 4 para la vida hoy

*Debemos notar que esta es una ''visión simbólica''. No debemos asumir que existe un salón de trono en algún lugar físico con todos estos detalles. Tampoco debemos asumir que los seres vivientes son criaturas de verdad. Juan vio estas cosas como símbolos en una visión, y estas cosas tuvieron algún significado para Juan y las siete iglesias.

*Hay un contraste agudo entre ''el orden'' en el cielo (los círculos concéntricos de seres, la alabanza antifonal), que vemos en Apocalipsis 4-5, y ''el caos'' de plagas y bestias y enemigos en la tierra que vemos en muchos capítulos del libro. Se puede decir que estos dos capítulos nos dan una visión del cielo para poner en perspectiva ''el sufrimiento'' de la iglesia en la tierra. Aunque desde nuestra perspectiva el mundo es un lugar de caos y peligro para el creyente, desde la perspectiva celestial, Dios sigue reinando soberano, y la creación lo adora de manera ordenada.

*Esta misma visión celestial, con su gloriosa descripción de Dios, pone en perspectiva ''las tentaciones'' de esta vida. Hay muchas cosas atractivas que tientan a los Cristianos, pero Dios es más hermoso y deseable.

*Debemos notar que ''Dios Padre no hace nada'' en Apocalipsis. Habla una o dos veces en el libro, pero no levanta ni un dedo. Si viéramos a Dios corriendo de un lado a otro apagando fuegos, dudaríamos su control sobre la situación. Pero su control y soberanía sobre la creación es tan completa, que no tiene que hacer nada y está completamente tranquilo. Sus siervos (El Cordero, los ángeles, etc) llevan a cabo el plan que él puso en marcha, y el futuro es claro: las cosas no pueden salir de otra manera.

</span>

<span class="source">Fuentes: la descripción arriba es un resumen de las observaciones de muchos comentaristas y otros escritores: Aune, Bauckham, Beale, Fee, Hendriksen, Kistemaker, Ladd, Mounce, Resseguie, Schussler-Fiorenza, Stam.</span>
<table class="altgray"><tr><td>

    El argumento de Hendriksen que capítulo 20 comienza una nueva sección de Apocalipsis según su esquema de “paralelismo progresivo.”

</td></tr><tr><td>

    La atadura de Satanás se menciona en Mateo 12:29, Lucas 10:17-18, Juan 12:31-32, pero como algo que ocurrió por medio del ministerio, la muerte y la resurrección de Cristo. Véase también Colosenses 2:15.

</td></tr><tr><td>

    Los que reinan con Cristo por mil años son descritos por 20.4 como “almas”. No son personas con cuerpos resucitados. Además, están en el cielo, no en la tierra—la vasta mayoría de los tronos en Apocalipsis están en el cielo.

</td></tr><tr><td>

    El uso de ἔζησαν en 20.4 se apoya en el uso de ζαω en Lc. 20:38, Ap. 4:9-10, 7:2, 10:6, and 15:7, y las similitudes entre 20:4 y 6:9-11.

</td></tr><tr><td>

    Aparte de Apocalipsis 20, el NT presenta la segunda venida, la resurrección de los creyentes, la resurrección de los inconversos, y el gran juicio como un solo evento, el Día del Señor (véase Mt 25:31-2, Jn 6:40, Flp. 3:20-1, 1 Ts. 4:16, 2 Ts. 1:7-10). Premilenialistas dicen que mil años separaran las primeras dos cosas de las últimas. Para hacerlo, tienen que interpretar todos los demás textos del NT bajo la luz de este texto, un texto difícil dentro de un libro de simbolismo.

</td></tr><tr><td>

    Si los premilenialistas tuvieron la razón, ¿Por qué Ap. 20 no menciona la tierra, Palestina, o los Judíos? (Pero: Jerusalén se menciona en v. 9)

</td></tr><tr><td>

    El premilenialismo enseña que creyentes resucitados con cuerpos inmortales y glorificados van a vivir lado a lado con otros habitantes del milenio que tienen cuerpos que no han sido transformados.

</td></tr><tr><td>

    Un ejército inmenso se opone a Cristo al final del milenio. Es difícil dentro de la interpretación premilenialista ver de dónde vienen todas estas personas. ¿No fueron destruidas las naciones en 19.21 (comparado con 19.17-18)? ¿Es Cristo incapaz de reinar sobre sus súbditos en el milenio para que haya tantos rebeldes?

</td></tr></table>
Fijar la fecha de redacción de Judas depende de nuestra interpretación de la evidencia que encontramos dentro de la carta, y nuestra interpretación de la relación entre Judas y 2 Pedro.

<hr>

!!!Evidencia interna

<span class="doublelist">

* Esta carta pretende venir de la mano de Judas, medio-hermano de Jesús. Si aceptamos a Judas como autor, tenemos que aceptar una fecha dentro del primer siglo.
* Versículo 3 habla de “la fe una vez dada a los santos”, dando la impresión que el mensaje apostólico había tenido suficiente tiempo para concretizarse en un cuerpo establecido de doctrinas.
* La herejía de los 'hombres impíos' necesitaba tiempo para desarrollarse.
* Versículos 17-18 dan la impresión que un tiempo había pasado entre el momento que los lectores recibieron las enseñanzas de los apóstoles y el momento que esta carta fue escrita, y que los apóstoles, ya no accesibles, tienen que ser recordados. Una respuesta a esta interpretación es que Judas no habla necesariamente de todos los apóstoles, solo de los apóstoles que fundaron la iglesia. Dice "sus apóstoles." Y nada de lo que dice Judas necesariamente implica que los apóstoles han fallecido. Así que no tenemos que asumir una fecha muy tarde.

</span>
<hr>

!!!La relación entre Judas y 2 Pedro

Judas comparte mucho material con 2 Pedro. Es seguro que uno de ellos usó el otro como fuente. Pero, ¿Cuál fue escrito primero?

<span class="doublelist">

* Si decimos que Pedro escribió 2 Pedro, pero que Judas escribió primero, tenemos que poner una fecha muy temprana para Judas, y la evidencia interna va en contra de eso.
* Si decimos que Judas escribió primero, y aceptamos la impresión de la evidencia interna, tenemos que aceptar que 2 Pedro no fue escrito por Pedro sino por otro autor en su nombre, porque Pedro murió en los años 60. La mayoría de los eruditos aceptan que 2 Pedro fue seudónimo, pero esta conclusión causa problemas doctrinales para los que creemos en la inspiración de las Escrituras por un Dios que no miente.
* El presente autor piensa que es preferible creer que Pedro escribió primero, en algún momento antes de su muerte en el año 66 o 67, y Judas escribió después, en la segunda mitad del primer siglo.

</span>

<hr>

!!!Judas y el Catolicismo naciente

Algunos dicen que Judas es un ejemplo del “Catolicismo Naciente.” Dicen que el estilo y la perspectiva de la carta no es como el estilo y perspectiva de la iglesia primitiva. Dicen que es más parecida a la iglesia en el segundo siglo, cuando sus doctrinas y estructura ya estaban más formadas y concretadas. Pero la respuesta más natural es que Judas no manifiesta ninguno de los elementos más típicos del pensamiento del “Catolicismo Naciente”:

* ¿La pérdida de esperanza en la inminencia de la Parousia? Judas expresa su confianza en vv. 1, 6, 14, 21 y 24.
* ¿Un interés en la iglesia como institución? Judas no menciona la iglesia o sus oficiales.
* ¿El uso de material de credos para resumir la fe Cristiana? Judas tampoco hace esto. 

<hr>

Algunos dicen que los oponentes son Gnósticos, y por eso debemos poner la fecha del libro en el segundo siglo. Pero el Gnosticismo como movimiento bien formado no apareció hasta finales del segundo siglo, muy tarde para este libro. Además, habían ciertos elementos de la doctrina del Gnosticismo que aparecieron antes de la venida del Cristianismo. Si encontramos algunos de estos elementos en esta carta, no es necesario creer que Judas escribió en el segundo siglo cuando el Gnosticismo ya era una religión bien formada.
<span class="doublelist">

#''La carta se presenta como una carta de “Iakobo",'' siervo de Dios y del Señor Jesucristo.” (1.1). Este hecho requiere un autor que se llama Jacobo, pero un Jacobo suficientemente conocido que no necesita más que esta frase descriptiva para que los lectores reconozcan su identidad.
#''De los cuatro hombres llamados Jacobo en el NT:''
##Jacobo hijo de Alfeo y Jacobo el padre de Judas (Hch. 1.13, nótese NVI y RVR) no fueron muy conocidos, y casi no se los menciona el NT.
##Jacobo el hermano de Juan era más conocido, pero murió en 44dc (Hch 12.2), muy temprano para haber escrito esta carta.
##Nos deja con Jacobo el medio-hermano de Jesús (Gl. 1.19, Mt. 13.55, Mc. 6.3, Hch. 12.17, 15.13, 1 Co. 15.7, etc).
#''Orígenes'' testifica que la carta viene de “Jacobo de Jerusalén.”
#''Las siguientes consideraciones apoyan a este Jacobo como autor:''
##La naturaleza judía de la carta apoya a un autor como Jacobo. 
###Menciona la ley
###Menciona varias figuras del AT
###“…la sintaxis es más semítica que griega….” (Harrison, 386)
####Usa el tiempo perfecto profético (5.2-3ª) como los profetas
####El pasivo para evitar la mención del nombre de Dios (1.5, 1.12, 1.17, 5.15)
###Usa frases hebreas como “Gehena” (3.6), “Señor de los ejércitos” (5.4) y “orar con oración” (5.17).
###“Vayan en paz” (2.16) es un típico saludo hebreo.
##La similitud con las enseñanzas de Jesús (véase Contexto Canónico, abajo)
##Similitudes entre el discurso de Jacobo en Hechos 15 y la carta en el mismo capítulo.
###Charein (saludo) solo ocurre en el NT en Hch. 15.23 y Stg. 1.1
###Onoma (nombre) como el sujeto del verbo pasivo kaleo (llamar) en 2.7 y Hch. 15.17
###“Escuchad, mis hermanos” ocurre en 2.5 y Hch. 15.13.
###Hay otras similitudes menos importantes.
#''Objeción #1:'' La carta demuestra un excelente manejo de griego, pero Jacobo era un Judío de Galilea que vivía en Jerusalén. Además, contiene vocabulario Lucano.
##Respuesta: Galilea en toda probabilidad era bilingüe. Además, es posible que Jacobo usó un amanuenses.
#''Objeción #2:'' La carta nunca menciona los elementos ceremoniales de la Ley, pero sabemos que Jacobo enfatizaba mucho las leyes ceremoniales (Hch. 21.24, Hch. 15, Gl. 2.12).
##Respuesta: Del retrato en Hechos no debemos asumir que Jacobo fue “una canción de una sola nota.” Cada autor añade y omite temas de acuerdo a las necesidades de sus lectores.
#''Objeción #3:'' Santiago nunca menciona el hecho de que es hermano de Jesús. Uno hubiera hecho esta conexión para identificarse.
##Respuestas:
###Es posible que por modestidad no refiere a su relación especial con Jesús.
###Es posible que se sintió suficientemente conocido por sus lectores que no sintió la necesidad de describirse más.
#''Objeción #4:'' La carta fue incluida en el canon muy tarde, en el cuarto siglo.
##Respuestas:
###Puede haber tenido una circulación limitada, y solo después fue conocida en las iglesias.
###Es posible que fue descontado por algunos porque no enfatiza la Cristología (un tema de gran interés en la iglesia antigua), o porque parece contradecir lo que Pablo dice acerca de la justificación.
###Jacobo no enfatiza su apostolicidad, uno de los criterios de la canonicidad de los libros del NT.

</span>

@@.source Fuente: Sílabo de Dr. Dean Deppe, James. Calvin Theological Seminary, 2004@@
<table class="altgray"><tr><td>

''“Pedro no escribió 2 Pedro. Es un libro seudónimo escrito por otro autor.”''

</td></tr><tr><td>

''“El argumento de Judas es muy nítido, y el de 2 Pedro es más suelto. Entonces, vemos que Judas escribió la versión original y el autor de 2 Pedro lo expandió y adaptó de una forma libre y desordenada.”'' 

Nuestra respuesta es que cuando estudiamos los Evangelios, vemos que los eruditos dicen exactamente lo contrario, que Marcos escribió su Evangelio primero, y Lucas y Mateo “limpiaron” sus debilidades literarias. Podríamos decir que es más probable que Judas limpió el argumento de 2 Pedro y le dio más estructura.

</td></tr><tr><td>

''“¿Por qué Judas se molestaría en escribir su carta si ya sabía que la gran mayoría del contenido existía en 2 Pedro 2?”'' 

Este argumento tiene más peso. Sin embargo, podemos decir que la parte más importante de Judas, sus exhortaciones en 20-23, no aparece en 2 Pedro, y Judas quiso añadir este toque tan urgente.

</td></tr></table>
<table class="altgray"><tr><td>

En 2 Pedro los falsos maestros solo son una posibilidad, mientras que en Judas, ya han entrado a la iglesia. Pero hay evidencia que las dos cartas están hablando de dos diferentes grupos de falsos maestros.

</td></tr><tr><td>

Judas 3 y 17 parecen indicar que los apóstoles ya han muerto. Pero las palabras no necesariamente significan que eran todos los apóstoles, sino los apóstoles que fundaron la iglesia. Además, las palabras no requieren que los apóstoles hayan fallecido.

</td></tr><tr><td>

Judas 17 podría ser un llamado a recordar las palabras de 2 Pedro.

</td></tr><tr><td>

Si comparamos 2 Pedro 3.2 con Judas 17, vemos que Pedro menciona a los profetas, el Señor, y “vuestros” apóstoles. Parece difícil creer que un autor escribió 2 Pedro después de Judas, añadiendo los profetas y un toque personal de “vuestros” apóstoles.  Tiene más sentido que Judas escribiera después, hablando de los apóstoles en términos más generales y eliminando el punto acerca de los profetas porque no era necesario para su argumento.

</td></tr></table>
Judas 24-25 contienen una doxología.

<hr>

A pesar de su brevedad, Judas contiene 14 hapax legomenoi (palabras en griego que no aparecen en el resto del NT).

<hr>

En versículos 1 y 24, Judas dice que sus lectores son “guardados” por Dios. En v. 1 la palabra es τηρέω, y en v. 24 la palabra es φυλάσσω. Estos versículos forman un inclusio, porque la carta comienza y termina con el mismo concepto.

<hr>

Judas menciona a sus lectores directamente cuatro veces: en el saludo en Judas 1, y como "amados" en Judas 3, 17, y 20.

<hr>

Richard Bauckham dice que Judas usa midrás, una técnica interpretativa de los Judíos.

<hr>

Judas se inclina hacia combinaciones del número tres.
<table class="altgray"><tr><td>

2 Pedro no tiene una típica conclusión epistolaria.

</td></tr><tr><td>

La calidad del griego en 2 Pedro no es muy buena. Sin embargo, el autor tiene un vocabulario extenso y alto. Wallace piensa que Pedro quería escribir de una forma elocuente para su testamento - sus últimas palabras a sus lectores - así que escogió un vocabulario alto. Sin embargo, Pedro no contaba con un buen manejo de griego, así que su gramática y estilo no es al mismo nivel de su vocabulario. Bruce Metzger escribió, "2 
Pedro es posiblemente el único libro del Nuevo Testamento cuyo lenguaje, parece, se mejora al ser traducido." (52)

</td></tr><tr><td>

Pedro llama a sus lectores “mis hermanos” en 2 Pedro 1.10, y “amados” cuatro veces en el último capítulo (3.1, 8, 14, 17).

</td></tr><tr><td>

Algunas de las oraciones de 2 Pedro son largas y complicadas en el griego original (p. ej. 1.3-4, 3.5-6).

</td></tr></table>
Según el Comentario Textual de Metzger, los manuscritos griegos de Santiago tiene 26 variaciones de menor importancia:

<span class="singlelist">

*1:3
*1:12
*1:17
*1:19
*1:27
*2:3
*2:19
*2:20
*2:25
*3:3
*3:8
*3:9
*3:12
*4:4
*4:5
*4:12
*4:14 (3)
*5:4
*5:7
*5:14
*5:16
*5:20 (3)

</span>
!!Comentarios sobre Apocalipsis

<span class="indent1">

Aune, D. E. (1997). //Revelation 1–5 (Vol. 52A).// Dallas: Word, Incorporated.

Beale, G. K. (1999). //The book of Revelation: a commentary on the Greek text//. Grand Rapids, MI; Carlisle, Cumbria: W.B. Eerdmans; Paternoster Press.

Fee, G. D. (2011). //Revelation//. Eugene, OR: Cascade Books.

Gorman, M. J. (2011). //Reading Revelation Responsibly: Uncivil Worship and Witness: Following the Lamb into the New Creation//. Eugene, OR: Cascade Books.

Hendriksen, W. (1986), //More than Conquerors//. Grand Rapids, MI: Baker Book House.

Kistemaker, S. J. (2004). //Comentario al Nuevo Testamento: Apocalipsis//. Grand Rapids, MI: Libros Desafío.

Ladd, G. E. (1972). //A Commentary on the Revelation of John//. Grand Rapids, MI: William B. Eerdmans Publishing Company.

Mounce, R. H. (1998). //The Book of Revelation, revised ed//. Grand Rapids, MI: William B. Eerdmans Publishing Company.

Resseguie, J. L. (2009). //The revelation of John: a narrative commentary//. Grand Rapids, MI: Baker Academic. 

Schüssler-Fiorenza, E. (1999). //Revelation: vision of a just world//. Minneapolis: Fortress Press.  

Wilcock, M. (1986). //The message of Revelation: I saw heaven opened//. Leicester, England; Downers Grove, IL: InterVarsity Press.

Wright, T. (2011). //Revelation for Everyone//. London; Louisville, KY: SPCK; Westminster John Knox.

</span>

!!Otras obras acerca de Apocalipsis

<span class="indent1">

Bauckham, R. (1993). //The Theology of the Book of Revelation//. Cambridge: Cambridge University Press.

Emerson, M. Y. (2016). //Between the Cross and the Throne: The Book of Revelation//. (C. G. Bartholomew, Ed.). Bellingham, WA: Lexham Press.

Wilson, M. (2007). //Charts on the book of Revelation: literary, historical and theological perspectives//. Grand Rapids: Kregel. 

</span>

!!Recursos generales

<span class="indent1">

Alexander, T. D., & Rosner, B. S. (Eds.). (2000). //New dictionary of biblical theology// (electronic ed.). Downers Grove, IL: InterVarsity Press.

Brown, R. E. (1997). //An introduction to the New Testament//. New York: Doubleday.

Car (1992). //An Introduction to the New Testament//. Grand Rapids. MI: Zondervan.

Elwell, W. A. (1996). //Evangelical dictionary of biblical theology// (electronic ed.). Grand Rapids: Baker Book House.

Martin, R. P., & Davids, P. H. (Eds.). (1997). In //Dictionary of the later New Testament and its developments// (electronic ed.). Downers Grove, IL: InterVarsity Press.

McKnight, S., & Osborne, G. R. (2004). //The face of New Testament studies: a survey of recent research.// Grand Rapids, MI.: Baker Academic.

Ryken, L., Wilhoit, J., Longman, T., Duriez, C., Penney, D., & Reid, D. G. (2000). In //Dictionary of biblical imagery// (electronic ed.). Downers Grove, IL: InterVarsity Press.

Vanhoozer, K. J., Bartholomew, C. G., Treier, D. J., & Wright, N. T. (Eds.). (2005). In //Dictionary for theological interpretation of the Bible//. London; Grand Rapids, MI: SPCK; Baker Academic.

Witherington, B., III. (2009). //The Indelible Image: The Theological and Ethical Thought World of the New Testament: The Individual Witnesses (Vol. 1).// Downers Grove, IL: IVP Academic.

Wright, N. T., & Bird, M. F. (2019). //The New Testament in Its World: An Introduction to the History, Literature, and Theology of the First Christians//. London; Grand Rapids, MI: Zondervan Academic; SPCK.

</span>
Barchuk, Ivan, //Explicación del libro de Apocalipsis//. Clie. 1997

Barclay, William, //Apocalipsis//. 1975

Barsotti, Divo, //Apocalipsis, una respuesta al tiempo//. 1967

Brigham, Kay, //El Apocalipsis hecho fácil//. Clie. 2013

Canclini, Arnoldo, //Apocalipsis: visión del triunfo final.// 1989

Carballosa, Evis L. //Apocalipsis: la consumación del plan eterno de Dios//. Grand Rapids: Portavoz, 1997. 

Fernández Suárez, Domingo, //Una interpretación de Apocalipsis//

Foulkes, Ricardo, //El Apocalipsis de San Juan//. 1989

González, Justo. //Apocalipsis o revelación del ciudadano//. 1972

Hendriksen, William, //Más que vencedores//. 2005

Junco García, C. //Apocalipsis: ¿angustia o esperanza?//

Kistemaker, Simon J., //Apocalipsis//. Libros Desafío. 2004

Ladd, George Eldon, //El Apocalipsis de Juan: un comentario//. 1985

MacArthur, John. //Apocalipsis//. Portavoz.

Miller, C. L., //La Ira del Cordero de Apocalipsis//. 1980

Morris, Leon, //Apocalipsis//. 1977

Mounce, Robert H., //Comentario al libro del Apocalipsis//. Clie. 2007

Newport, John, //El León y el Cordero//. 1989

Pagán, Samuel, //Apocalipsis: Interpretación eficaz hoy//. Clie. 2012

Pikaza Ibarrondo, Xavier, //Apocalipsis//. 1999

Prevost, Jean-Pierre, //Apocalipsis: para terminar con el miedo//. 1987

Puente, Jr, Arthur E., //Apocalipsis desde la perspectiva celestial//. Hats Off Books, 2002

Richard, Pablo, //Apocalipsis: reconstrucción de la esperanza//. 1994

Ryrie, Charles, //Apocalipsis//. 1981

Sánchez García, Juan, //Comentario histórico y doctrinal del Apocalipsis//. 1987

Schick, Eduard, //El Apocalipsis de Juan//. 1974

Schussler-Fiorenza, Elizabeth, //Apocalipsis: visión de un mundo justo//. 1997

Stam, J. (1999). //Comentario Biblico Iberoamericano: Apocalipsis: tomo I (capítuos 1 al 5).// Buenos Aires: Kairos. 

Stam, J. (2003). //Comentario Biblico Iberoamericano: Apocalipsis: tomo II (capítuos 6 al 11).// Buenos Aires: Kairos. 

Stam, J. (2009). //Comentario Biblico Iberoamericano: Apocalipsis: tomo III (capítuos 12 al 16).// Buenos Aires: Kairos. 

Stam, J. (2014). //Comentario Biblico Iberoamericano: Apocalipsis: tomo III (capítuos 12 al 16).// Buenos Aires: Kairos.

Summers, Ray. //Digno es el Cordero//. El Paso, TX: Casa Bautista, 1990.

Valverde, Efraín. //Apocalipsis: La Ruta del Fin//. Wichita Falls, TX: Worldwide Spanish Literature Ministry, 1995

Vanni, Ugo. //Apocalipsis: una asamblea interpreta la historia//. 2001

Wikenhauser, //Apocalipsis de San Juan//. 1969
Hay exactamente siete bienaventuranzas en el libro de Apocalipsis:

|bluealtrows|k
|!Versículo|!Bienaventuranza|!Motivo|
|1.3|Bienaventurados los que leen y hacen caso de esta profecía|porque el tiempo ha llegado|
|14.13|Bienaventurados los que mueren en el Señor|porque descansarán de sus obras|
|16.15|Bienaventurado el que se mantenga despierto con su ropa en la mano|No se avergonzará de su desnudez|
|19.9|Bienaventurados los que han sido invitados al banquete de las bodas del Cordero| -- |
|20.6|Bienaventurados los que tienen parte en la primera resurrección|La segunda muerte no tiene poder sobre ellos, y serán sacerdotes y reyes|
|22.7|Bienaventurado el que cumple las palabras de esta profecía| -- |
|22.14|Bienaventurados los que lavan su ropa|Tendrán acceso al árbol de la vida y entrarán a la ciudad de Dios|

@@.source Fuente: estudio personal@@
<h3><a name="BOQUEJO"></a>Un bosquejo de 1
Juan
</h3>
<br>
La primera columna de la tabla es una lista de los pasajes en 1 Juan.
La segunda columna muestra los temas en cada pasaje. Los temas en la
tabla son los siguientes:<br>
<span class="red">Amor</span>&nbsp;<span class="purple"><span style="color: black; font-weight: normal;"> <span class="pinkbk">Completo</span>&nbsp; </span></span><span class="tanbk">Confianza</span><span class="purple"><span style="color: black; font-weight: normal;"> &nbsp;<span class="pine">ConocerDios</span> </span></span><span class="pink">Corazón</span><span class="purple">
Cristología</span> <span class="red"><span class="orange">Cruz&nbsp;</span></span><span class="purple"><span class="orangebk" style="color: black; font-weight: normal;">Diablo&nbsp;</span></span><span class="purple"><span style="color: black; font-weight: normal;"> </span></span><span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu Santo</span></span><span class="brown">Fe/creer </span><span class="blue">Hijos
de Dios </span><span style="font-weight: bold; color: rgb(0, 102, 0);" class="red">Luz/tinieblas</span><span class="red"><span class="orange">&nbsp;</span></span><span class="gray">Obedecer</span><span class="red"><span class="orange">&nbsp;</span></span><span class="graybk">Oración</span><span class="red"><span class="orange"> </span></span><span style="font-weight: bold;">Pecado </span><span class="teal">Permanecer</span> <span class="turqbk">Principio</span>&nbsp;
<span class="purple"><span class="bluebk" style="color: black; font-weight: normal;">Testimonio</span></span>
<span class="purple">&nbsp;</span><span class="grassbk">Unión/Dios</span><span class="purple"> </span><span class="wine">Vencer/mundo
</span><span class="gold">Verdad/mentira </span><span class="greenbk">Vida/muerte</span><br>
&nbsp;<br>

<table class="bluealtrows">
<tbody>
<tr>
<th>Pasajes</th>
<th>Temas por pasaje</th>
</tr>
<tr>
<td>Testificamos de la Palabra de vida que vimos (1.1-4)</td>
<td><span class="purple"><span style="color: black; font-weight: normal;"><span class="pinkbk">Completo </span></span></span><span class="purple">Cristología&nbsp;</span><span class="turqbk">Principio</span><span class="purple">
</span><span class="purple"><span class="bluebk" style="color: black; font-weight: normal;">Testimonio
</span></span><span class="greenbk">Vida/muerte</span><span class="purple"></span><span class="gold"></span></td>
</tr>
<tr>
<td>Dios es luz,&nbsp; y sus seguidores andan en la luz
(1.5-7)</td>
<td><span class="red"><span class="orange">Cruz
</span></span><span style="font-weight: bold; color: rgb(0, 102, 0);" class="red">Luz/tinieblas</span><span class="red"><span class="orange">&nbsp; </span></span><span style="font-weight: bold;">Pecado</span> <span class="purple"><span class="bluebk" style="color: black; font-weight: normal;">Testimonio&nbsp;</span></span><span class="gold">Verdad/mentira</span></td>
</tr>
<tr>
<td>La confesión y el perdón de los pecados (1.8-2.2)</td>
<td><span class="purple">Cristología </span><span class="red"><span class="orange">Cruz</span></span><span class="red"><span class="orange"> </span></span><span style="font-weight: bold;">Pecado</span><span class="purple"></span><span class="gold">
Verdad/mentira</span></td>
</tr>
<tr>
<td>Los que profesan conocer a Dios necesitan obedecerle
(2.3-6)</td>
<td><span class="red">Amor&nbsp;</span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pinkbk">Completo </span></span></span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pine">ConocerDios </span></span></span><span class="gray">Obedecer&nbsp;</span><span class="grassbk">Unión/Dios </span><span class="gold">Verdad/mentira</span></td>
</tr>
<tr>
<td>El que aborrece a su hermano todavía está en tinieblas
(2.7-11)</td>
<td><span class="red">Amor&nbsp;</span><span class="red"><span class="orange"></span></span><span style="font-weight: bold; color: rgb(0, 102, 0);" class="red">Luz/tinieblas&nbsp;</span><span class="gray">Obedecer&nbsp;</span><span class="turqbk">Principio </span><span class="gold">Verdad/mentira</span></td>
</tr>
<tr>
<td>Los propósitos de la carta (2.12-14)</td>
<td><span class="purple"><span class="orangebk" style="color: black; font-weight: normal;">Diablo
</span></span><span style="font-weight: bold;">Pecado&nbsp;</span><span class="turqbk">Principio </span><span class="wine">&nbsp;</span><span class="grassbk">Unión/Dios</span><span class="wine">
Vencer/mundo</span></td>
</tr>
<tr>
<td>No debemos amar al mundo (2.15-17)</td>
<td><span class="red">Amor</span><span class="red"><span class="orange"> </span></span><span class="gray">Obedecer</span><span style="font-weight: bold;"> Pecado </span><span class="wine">Vencer/mundo&nbsp;</span><span class="greenbk">Vida/muerte</span></td>
</tr>
<tr>
<td>La unción que nos protege de los anticristos (2.18-27)</td>
<td><span class="purple"><span style="color: black; font-weight: normal;"></span>Cristología
</span><span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu Santo
&nbsp;</span></span><span class="gold">
&nbsp;</span><span class="teal">Permanecer </span><span class="turqbk">Principio</span><span class="gold">
</span><span class="grassbk">Unión/Dios</span><span class="gold">&nbsp;Verdad/mentira </span><span class="greenbk">Vida/muerte</span><span class="blue"></span></td>
</tr>
<tr>
<td>Los hijos de Dios tienen la esperanza de ser vindicados
y glorificados (2.28-3.3)</td>
<td><span class="red">Amor </span><span class="tanbk">Confianza&nbsp;</span><span class="red"></span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pine">ConocerDios </span></span></span><span class="purple">Cristología&nbsp;</span><span class="blue">Hijos
de Dios</span><span class="purple">&nbsp;</span><span class="grassbk">Unión/Dios</span><span class="wine">&nbsp;Vencer/mundo</span><span class="tanbk"> </span><span class="gray"></span></td>
</tr>
<tr>
<td>Los hijos de Dios no siguen pecando (3.4-10)</td>
<td><span class="red">Amor&nbsp;</span><span class="purple">Cristología&nbsp;</span><span class="red"><span class="orange">Cruz</span></span><span class="purple"> </span><span class="purple"><span class="orangebk" style="color: black; font-weight: normal;">Diablo</span></span><span class="purple"> &nbsp;</span><span class="red"></span><span class="blue">Hijos
de Dios</span><span class="red"> </span><span class="gray">Obedecer </span><span style="font-weight: bold;">Pecado&nbsp;</span><span class="teal">Permanecer</span><span style="font-weight: bold;"> </span><span class="turqbk">Principio</span><span class="grassbk">Unión/Dios</span></td>
</tr>
<tr>
<td>Amémonos unos a otros como Cristo nos amó (3.11-18)</td>
<td><span class="red">Amor &nbsp;</span><span class="pink"></span><span class="red"><span class="orange">Cruz</span></span><span class="red"> </span><span class="purple"><span class="orangebk" style="color: black; font-weight: normal;">Diablo
</span></span><span style="font-weight: bold;">Pecado&nbsp;</span><span class="teal">Permanecer</span><span style="font-weight: bold;"> </span><span class="turqbk">Principio</span><span class="wine">&nbsp;Vencer/mundo&nbsp;</span><span class="gold">Verdad/mentira&nbsp;</span><span class="greenbk">Vida/muerte</span></td>
</tr>
<tr>
<td>Los que obedecen a Dios no son condenados por sus
corazones (3.19-24)</td>
<td><span class="red">Amor </span><span class="tanbk">Confianza </span><span class="pink">Corazón
</span><span class="purple">Cristología&nbsp;</span><span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu
Santo&nbsp;</span></span><span class="brown">Fe/creer
</span><span class="gray">Obedecer&nbsp;</span><span class="graybk">Oración&nbsp;</span><span class="purple"></span><span class="gold">&nbsp;</span><span class="grassbk">Unión/Dios</span><span class="gold">&nbsp;Verdad/mentira</span></td>
</tr>
<tr>
<td>Cómo discernir entre el Espíritu y los espíritus (4.1-6)</td>
<td><span class="purple"><span style="color: black; font-weight: normal;"><span class="pine">ConocerDios </span></span></span><span class="purple">Cristología&nbsp;</span><span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu Santo</span></span><span class="blue"> </span><span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;"></span></span><span class="brown">Fe/creer </span><span class="blue">Hijos
de Dios&nbsp;</span><span class="grassbk">Unión/Dios</span><span class="blue"> </span><span class="wine">Vencer/mundo&nbsp;</span><span class="gold">Verdad/mentira</span></td>
</tr>
<tr>
<td>Amemos como Dios nos amó cuando envió a si Hijo (4.7-12)</td>
<td><span class="red">Amor <span class="orange"></span></span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pinkbk">Completo </span></span></span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pine">ConocerDios </span></span></span><span class="red"><span class="orange">Cruz</span>
</span><span class="blue">Hijos
de Dios&nbsp;</span><span class="grassbk">Unión/Dios</span></td>
</tr>
<tr>
<td>Testificamos del Hijo de Dios (4.13-15)</td>
<td><span class="red">Amor </span><span class="purple">Cristología</span>&nbsp;<span class="purple"><span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu Santo</span></span><span class="purple"><span class="bluebk" style="color: black; font-weight: normal;">Testimonio&nbsp;</span></span><span class="grassbk">Unión/Dios</span></td>
</tr>
<tr>
<td>El que ama a Dios no tiene temor,&nbsp; y ama
también a su
hermano (4.16-21)</td>
<td><span class="red">Amor&nbsp;</span><span class="purple"><span style="color: black; font-weight: normal;"><span class="pinkbk">Completo</span></span></span><span class="red"> </span><span class="tanbk">Confianza
</span><span class="gray">&nbsp;Obedecer&nbsp;</span><span class="grassbk">Unión/Dios</span></td>
</tr>
<tr>
<td>El que ama a Dios necesita creer que Jesús es su
Hijo,&nbsp;
y obedecerle (5.1-5)</td>
<td><span class="red">Amor</span> <span class="purple">Cristología</span> <span class="brown">Fe/creer</span> <span class="blue">Hijos
de Dios</span> <span class="gray">Obedecer</span>
<span class="wine">Vencer/mundo</span></td>
</tr>
<tr>
<td>El testimonio que Dios ha dado acerca de su Hijo
(5.6-12)</td>
<td><span class="pink">Corazón </span><span class="purple">Cristología
<span class="yellow yellowbk" style="color: black; font-weight: normal;">Espíritu Santo</span>&nbsp;</span><span class="purple"></span><span class="brown">Fe/creer</span><span class="purple">&nbsp;<span class="bluebk" style="color: black; font-weight: normal;">Testimonio</span>
</span><span class="gold">Verdad/mentira</span><span class="greenbk"> Vida/muerte</span></td>
</tr>
<tr>
<td>El propósito de la carta (5.13)</td>
<td><span class="brown">Fe/creer</span> <span class="greenbk">Vida/muerte</span></td>
</tr>
<tr>
<td>La confianza que tenemos para orar (5.14-15)</td>
<td><span class="tanbk">Confianza</span>
<span class="graybk">Oración</span></td>
</tr>
<tr>
<td>La intercesión por los pecadores (5.16-17)</td>
<td><span class="graybk">Oración</span> <span style="font-weight: bold;">Pecado</span> <span class="greenbk">Vida/muerte</span></td>
</tr>
<tr>
<td>Los hijos de Dios están en Jesucristo,&nbsp;
protegidos del
maligno (5.18-20)</td>
<td><span class="purple">Cristología <span class="orangebk" style="color: black; font-weight: normal;">Diablo</span>
</span><span class="blue">Hijos de Dios</span><span style="font-weight: bold;"> Pecado&nbsp;</span><span class="grassbk">Unión/Dios</span> <span class="wine">Vencer/mundo&nbsp;</span><span class="greenbk">Vida/muerte</span></td>
</tr>
<tr>
<td>Exhortación final acerca de la idolatría (5.21)</td>
<td><span style="font-weight: bold;">Pecado</span></td>
</tr>
</tbody>
</table>
!!Bosquejo básico de Judas

|bluebycell|k
|Introducción (1-4)|Autor, destinatarios y bendición (1-2)|
|~|Propósito y ocasión (3-4)|
|!Cuerpo (5-23)|!Descripción de los hombres impíos (5-19) ''Véase abajo''|
|~|!Exhortaciones (20-23) ''Véase abajo''|
|Conclusión (24-25)|Doxología (24-25)|

<br>

!!Bosquejo de Judas 5-19

|bluebycell|k
|Primer argumento (5-8)|Tres ejemplos antiguos: Israel, los ángeles, y Sodoma (5-7)|
|~|Descripción de los impíos: (8)|
|~|Texto adicional de apoyo: la disputa entre Miguel y el diablo (9)|
|~|Descripción de los impíos: (10)|
|!Segundo argumento (11-13)|!Tres ejemplos antiguos: Caín, Balaam, Coré (11)|
|~|!Descripción de los impíos (seis figuras): (12-13)|
|Tercer argumento (14-16)|Cita de 1 Enoc 1.9 (14-15)|
|~|Descripción de los impíos: (16)|
|!Cuarto argumento (17-19)|!Cita de 2 Pedro 3.3 (17-18)|
|~|!Descripción de los impíos: (19)|

<br><p style="page-break-before: always">

!!Bosquejo de Judas 20-23

|bluebycell|k
|Responsabilidades para cuidarse<br>a si mismos (20-21)|Participio: Edificándose sobre la fe (20a)|
|~|Participio: Orando en el Espíritu Santo (20b)|
|~|Imperativo: Consérvense en el amor de Dios (21a)|
|~|Participio: Esperando la misericordia de Jesucristo (21b)|
|!Responsabilidades hacia<br>las personas afectas por <br>los impíos (22-23)|!Imperativo: Convencer a algunos (22)|
|~|!Imperativo: Rescatar a otros (23a)|
|~|!Imperativo: Mostrar la misericordia (cuidadosamente) a otros (23b)|
!!!Lo que sí sabemos acerca del autor de Hebreos

<span class="doublelist">

*El autor conoció a sus destinatarios (13.19)
*El autor conoció a Timoteo (13.23)
*Fue un Cristiano Judío y helénico 
*Fue alguien que recibió el evangelio de los apóstoles (2.3-4)
*Usó la LXX y tenía un conocimiento profundo del AT
*Fue educado en retórica
*Fue hombre (usó una forma masculina singular διηγούμενον en 11.32)

</span>

!!!Candidatos propuestos por la iglesia pre-moderna

''Pablo'' - véase [[La propuesta de Pablo como autor de Hebreos]]

''Bernabé''

Proponente: Tertuliano

Apoyo:

*Era Levita (Hch. 4.36)
*Una comparación de Hch. 4.36 (Bernabé como “hijo de exhortación”) con Heb. 13.22 (la carta como palabra de exhortación)

Problemas con Bernabé como autor

*Heb. 2.3—Bernabé no era de la segunda generación de Cristianos
*Los proponentes antiguos son pocos
*No tenemos obras escritas por Bernabé para hacer comparaciones

''Lucas''

Proponente: Juan Calvino

Apoyo:

*Similitudes con el discurso de Esteban: repaso de la historia de Israel, la Ley mediado por ángeles, llamado de Abraham, Palabra viviente, alusión a Josué, etc.
*Fue un compañero de Pablo con un buen estilo griego

''Clemente de Roma''

Proponente: Calvino

Apoyo: Similitudes con 1 Clemente

!!!Candidatos favorecidos por eruditos modernos y contemporáneos:

''Apolos''

Proponentes: Martin Lutero, A. T. Robertson

Apoyo:

*Era un Judío Alejandrino
*Hechos 18.24: elocuente, poderoso en su uso del AT, fervor de espíritu

Problemas:

*No tenemos obras escritas por Apolos para hacer comparaciones
*Ninguna tradición antigua menciona a Apolos como el autor

''Priscila y Aquila''

Apoyo:

*Hc. 18.26: corrigieron a Apolos
*Asociados con Timoteo (Hc. 18.5, 19.22, 1 Cor. 16.10, 19)
*Transiciones entre “yo” y “nosotros.”
*La inclusión de mujeres en Heb. 11

Problema:

Heb. 11.32 revela que el autor es masculino, y 13.19, 11.32, 13.22-23 están en singular.

''Silvano''

Apoyo:

*Era Judío, Romano, compañero de Pablo y Timoteo
*Conoció la LXX

Problema:

Los padres apostólicos no lo mencionan como candidato.

!!!Otros candidatos menores

Felipe el diácono; Judas; Aristión

!!!Conclusión

No sabemos quién escribió Hebreos. Es más que seguro que no fue escrito por el apostol Pablo. Apolos es una buena posibilidad, pero no hay ninguna manera de probarlo.

@@.source Fuentes: Carson, Moo y Morris; H. Wayne House; Lane.@@
//    Fuente: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament en Logos Bible Software version 4.//

<table class="altgray"><tr><td>

    En Apocalipsis 1.13, uno como hijo del hombre está entre los candelabros con un vestido largo y un cinto de oro.

* En Ezequiel 9.2 y 9.11, un hombre en vestido aparece en la visión de Ezequiel.
* En Daniel 7.13, uno como hijo del hombre se acerca al trono de Dios.
* Daniel 10.5 menciona a un hombre en vestido y con un cinto de oro fino.

</td></tr><tr><td>

    Apocalipsis 1.14.15 describe la apariencia de Cristo: cabeza y cabello como nieve y lana, ojos como fuego, pies como bronce refulgente en el horno, y una voz como corrientes de agua.

* En Daniel 7.9 el Anciano de días se describe con cabello blanco como lana. El versículo también usa la nieve para hablar de algo blanco, y menciona fuego.
* Daniel 10.6 describe un hombre en su visión cuyo rostro es como relámpago, cuyas piernas son como bronce pulido, y cuya voz es como el sonido de una muchedumbre.

</td></tr><tr><td>

    En Apocalipsis 1.16 una espada aguda de doble filo sale de la boca de Cristo. En Isaías 49.2 el Siervo dice que Dios ha hecho su boca como una espada aguda.

</td></tr><tr><td>

    En Apocalipsis 1.17 Cristo dice que es el primero y el postrero. En Isaías 44.6 y 48.12 Dios dice que es el primero y el último.

</td></tr><tr><td>

    En Apocalipsis 1.19 Jesús ordena que Juan escriba lo que ha visto - lo que es ahora y lo que ha de suceder después.

* En Isaías 48.6 (especialmente la versión Septuaginta) Dios dice que le contará al profeta cosas nuevas, cosas que antes fueron ocultas.
* En Daniel 2.28-29 y Daniel 2.45, Daniel le dice al rey que por medio de una visión, Dios ha mostrado al rey lo que ha de acontecer en el porvenir."

</td></tr></table>
<table class="altgray"><tr><td>

    ''La interacción de las iglesias con las religiones paganas.'' Los templos paganos eran los únicos restaurantes y carnicerías de su tiempo, así que para comer carne, uno tenía que comer en el templo o comprar carne sacrificada a los ídolos y llevarla a casa a comer. Esto fue un punto sensible que afectaba la conciencia de los primeros Cristianos (véase 1 Corintios 8-10). Apocalipsis menciona este asunto en 2.14 y 2.20.

</td></tr><tr><td>

    ''La interacción de las iglesias con el Judaísmo.'' Algunas de las iglesias de Apocalipsis estuvieron en conflicto con las sinagogas locales (Apocalipsis 2.9, 3.9).

</td></tr><tr><td>

    ''La interacción de los Cristianos con la idolatría en la vida diaria en su sociedad.'' Los lectores de Apocalipsis estaban bajo fuerte presión social de ceder a la idolatría: culto al emperador, culto a Roma (la ciudad de Roma personificada como diosa), o culto a los numerosos dioses greco-romanos. Su participación en la vida cívica y política, los sindicatos profesionales, y muchas otras actividades obligaban prácticas idólatras. Templos, monumentos, desfiles, educación pública, conceirtos y eventos deportivos los exigían honrar al emperador y sacrificar a él y a otros dioses. Las esposas y los esclavos no podían evitar las costumbres religosas de sus hogares. Los pagos de impuestos y las compras diarias fueron realizadas con monedas que llevaban símbolos de dioses y emperadores.

</td></tr><tr><td>

    ''La indiferencia o apatía.'' Algunos de los lectores de Juan se sentían satisfechos o cómodos por causa de su relativa prosperidad. Estaban en peligro de perder sus principios para acomodarse al estatu cuo idólatra de su sociedas (Apocalipsis 3.1-3, 3.15ff).

</td></tr><tr><td>

    ''Peligros dentro de las iglesias.'' Había falsos maestros ('Balaam', los Nicolaitas, y 'Jezabel') influenciando algunas de las iglesias, buscando que los Cristianos asimilaran a la cultura y que practicaran la inmoralidad sexual, posiblemente la prostitución en los templos paganos (Apocalipsis 2.14-15, 2.20ff).

</td></tr><tr><td>

    Es importante reconocer la influencia de estos cinco peligros, especialmente el cuarto punto, para no caer en la trampa de pensar que el único propósito de Juan en escribir Apocalipsis era para consolar a los Cristianos perseguidos. Hays, 177, lo expresa bien cuando dice que Apocalipsis fue escrito también para "afligir a los cómodos" y no solamente para "confortar a los afligidos." Esta perspectiva equilibrada acerca de Apocalipsis nos ayuda a ver la relevancia del libro para los Cristianos que no enfrentan persecución y oposición, pero sí enfrentan la tentación de ceder a la prosperidad material, a la inmoralidad, a la idolatría y a la indiferencia.

</td></tr></table>

<span class="source">Las fuentes fueron muchas, pero véase especialmente David L. Barr, “John’s ironic empire” in Interpretation 63 no 1 Ja 2009, pp. 20-30, Richard B. Hays, The Moral Vision of the New Testament. (New York: ~HarperOne, 1996), Grant R. Osborne, “Recent Trends in the Study of the Apocalypse,” in Scot ~McKnight and Grant R. Osborne, The Face of New Testament Studies. (Grand Rapids: Baker Academic, 2004).</span>
<table class="altgray"><tr><td>

    El libro de Apocalipsis se enfoca en la presión social y la amenaza de la persecución que afligía a los Cristianos. Pero no debemos pasar por alto que en Apocalipsis 17-18 también hay denuncias proféticas contra el Imperio Romano. Varios comentaristas refieren al libro de Apocalipsis como un ejemplo - de hecho, el ejemplo más notable - de 'literatura de protesta anti-romana' del mundo antiguo.

</td></tr><tr><td>

    Apocalipsis condena la explotación económica por Roma de otras naciones, para sus propios fines egoístas (18.3)

</td></tr><tr><td>

    Apocalipsis condena a Roma por engañar e intoxicar a las naciones con sus adulterios (17.2, 18.3; cuando la Biblia dice que una nación comete adulterio, se refiere a la importación y exportación de la idolatría).

</td></tr><tr><td>

    Apocalipsis condena los excesos materialistas de Roma (17.4, 18.3, 18.7)

</td></tr><tr><td>

    Apocalipsis condena a Roma por su tráfico de seres humanos como esclavos (18.13)

</td></tr><tr><td>

    Apocalipsis dice que Roma es responsable no solamente por la muerte de los profetas y apóstoles, sino por la matanza de muchas personas (18.24)

</td></tr></table>


<span class="source">Estudio personal del autor, inspirado por diversos comentarios en algunos libros y artículos.</span>
<table class="altgray"><tr><td>

Su nombre fue Juan (Apocalipsis 1.1, 1.4, 1.9, 22.8)

</td></tr><tr><td>

Fue profeta (Apocalipsis 10.11)

</td></tr><tr><td>

Probablemente fue Judío

* Conoció bien las Escrituras Judías
* Usó los géneros judíos de profecía y apocalipsis
* Su estilo griego usa muchos semitismos - frases y construcciones normalmente encontradas en Hebreo y Arameo pero no en Griego.

</td></tr><tr><td>

Puede ser que fuera de Palestina

* Está consciente del valle de Meguido (Apocalipsis 16.16)
* Parece conocer la ciudad de Jerusalén y el templo, especialmente en capítulo 11

</td></tr><tr><td>

Algunos piensan que Apocalipsis 18.20 y 21.14 implican que el autor no fue uno de los doce apóstoles.

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Carson, Moo and Morris, An Introduction to the New Testament. (Grand Rapids: Zondervan, 1992)</span>
<table class="altgray"><tr><td>

    En Apocalipsis 1.9 Juan escribe que estuvo en la isla de Patmos "por causa de la palabra de Dios y el testimonio de Jesús." Algunos piensan que lo único que significa es que Juan fue a Patmos para recibir las visiones contenidas en este libro. Pero un libro de historia de Plinio dice que Patmos fue usado por los Romanos para exiliar a los criminales políticos, e históricamente Apocalipsis 1.9 ha sido interpretado para decir que Juan fue exiliado por predicar el evangelio. Los paralelos entre Apocalipsis 1.9 y 20.4 apoyan esta posición.

</td></tr><tr><td>

    Apocalipsis 2.3 y 2.9 nos dicen que las iglesias habían experimentado aflicciones y tribulaciones.

</td></tr><tr><td>

    Apocalipsis 2.13 y 3.8 nos dicen que algunas de las iglesias habían permanecido fieles a Jesús (implica que su fe fue probada).

</td></tr><tr><td>

    Apocalipsis 2.13 especifica que un Cristiano, Antipas, perdió su vida en la persecución.

</td></tr><tr><td>

    En Apocalipsis 2.9-10 y 3.9 vemos que la persecución fue local, y que algunos de los adversarios eran Judíos.

</td></tr></table>

<span class="source">Fuentes: Varias.</span>
<table class="altgray"><tr><td>

    Jesús comparte el título "Alfa y Omega, el primero y el postrero, el principio y el fin" con Dios Padre. Esto es sumamente notable porque la fuente de frase es Isaías 44.6, donde Jehová dice, "Yo soy el primero y el postrero, aparte de mi no hay dios." Esta sección de Isaías Dios dice que no comparte su gloria con otro. Pero en Apocalipsis hasta comparte sus títulos con Jesús.

* Alfa y Omega: 21.6, 22.13
* Primero y postrero: 1.17, 2.8, 22.13
* Principio y fin: 21.6, 22.13.

</td></tr><tr><td>

    Los ángeles en Apocalipsis no permien que Juan los adore, pero Jesús recibe adoración en Apocalipsis 5.

</td></tr><tr><td>

    Jesús comparte el trono con Dios Padre (3.21, 22.3)

</td></tr><tr><td>

    Hay una doxología en 1.5-6 que se dirige a Cristo.

</td></tr><tr><td>

    Hay muchos títulos exaltados para Jesús en Apocalipsis.

</td></tr></table>

<span class="source">Fuente: observaciones del autor.</span>
|bluealtrows|k
|!Hebreos|!Cita del AT|
|1.5a|Sal. 2.7|
|1.5b|2 S. 7.14|
|1.6|Dt. 32.43 LXX|
|1.7|Sal. 104.4 LXX|
|1.8-9|Sal. 45.6-7|
|1.10-12|Sal. 102.25-27 LXX|
|1.13|Sal. 110.1|
|2.6-8|Sal. 8.4-6 LXX|
|2.12|Sal. 22.22|
|2.13a|Is. 8.17 LXX|
|2.13b|Is. 8.18|
|3.7-11|Sal. 95.7-11|
|3.15|Sal. 95.7-8 LXX|
|4.3, 5|Sal. 95.11|
|4.4|Gn. 2.2|
|4.7|Sal. 95.7-8 LXX|
|5.5|Sal. 2.7|
|5.6|Sal. 110.4|
|6.13-14|Gn. 22.16-17|
|7.1-2|Gn. 14.17-20|
|7.17, 21|Sal. 110.4|
|8.5|Ex. 25.40|
|8.8-12|Jer. 31.31-34|
|9.20|Ex. 24.8|
|10.5-7|Sal. 40.6-8|
|10.16-17|Jer. 31.33-34|
|10.30|Dt. 32.35-36|
|10.37-38|Hab. 2.3-4 LXX|
|11.5|Gn. 5.24 LXX|
|11.18|Gn. 21.12|
|11.21|Gn. 47.31 LXX|
|12.5-6|Pr. 3.11-12 LXX|
|12.20|Ex. 19.12-13|
|12.21|Dt. 9.19|
|12.26|Hag. 2.6 LXX|
|13.5|Dt. 31.6, 8|
|13.6|Sal. 118.6 LXX|
2 Pedro parece mencionar algunas declaraciones y acusaciones de sus oponentes, y se defiende contra ellas. ¿Qué dicen los oponentes de Pedro?

<span class="doublelist">

*1.16		“El testimonio de los apóstoles se trata de fábulas artificiosas” 
*1.20-21	“Las profecías de los profetas eran ideas que inventaron”
*2.3b		“No viene ninguna condenación sobre nosotros”
*2.19		“Les prometemos la libertad”
*3.3-4		“¿Cuando viene Jesús? Parece que no, porque todo es lo mismo como siempre.”
*3.16 - (También distorcionan las enseñanzas de Pablo y otras Escrituras)

</span>

Algunos comentaristas construyen su bosquejo de la carta alrededor de estas acusaciones 

@@.source (Webb, 388-389)@@
|bluealtrows|k
|!Hebreos|!Alusión|
|6.14|Sirac 44.21|
|11.5|Enoc 70.1-4, Sirac 44.16, Sabiduría 4.10|
|11.12|Sirac 44.21|
|11.35|2 Mac. 6.18-7.42|
|11.37|Asunción Isaías 5.11-14|
|12.12|Sirac 25.23|
1 Juan no contiene citas directas del AT pero sí contiene varias alusiones:

|bluealtrows|k
|!1 Juan|!Alusión al AT|
|1.7 |Is. 2.5 |
|1.9 |Sal. 32.5, Pr. 28.13 |
|2.10 |Sal. 119.165 |
|2.12 |Sal. 25.11 |
|2.16 |Pr. 27.20 |
|2.17 |Sabiduría 5.15 (Apócrifa) |
|2.27 |Jer. 31.34 |
|3.5 |Is. 53.9 |
|3.12 |Gn. 4.8 |
|3.17 |Dt. 15.7-8 |
|5.3 |Dt. 30.11 |
“[1 Pedro] contiene más del AT relativo a su tamaño que cualquier otro documento del NT, con la posible excepción de Apocalipsis.” (Rodgers, DTIB, 583)

|bluealtrows|k
|!1 Pedro|!AT|!Uso del AT en 1 Pedro|
|1.2|Ex. 24.3-8||
|1.7|Job 23.10, Sal. 66.10, Pr. 17.3, Is. 48.10, Zac. 13.9, Mal. 3.2-3|En todos estos vv. del AT, Dios purifica y prueba a las personas como el fuego purifica y prueba al oro o a la plata. Pedro utiliza el mismo concepto, diciendo que la persecución que sus lectores experimentan es el fuego que Dios está usando para purificar su fe.|
|1.11|Sal. 22, Is. 53|No es una cita o alusión. Salmo 22 y Isaías 53 son los textos dondé los profetas hablan más de alguien que sufre por otros y es vindicado/glorificado por Dios. Los primeros Cristianos insistieron que estos capítulos se refieren a la muerte y exaltación de Jesús de Nazaret.|
|1.16 ''(cita)''|Lev. 19.2|El mandamiento "Sed santos porque yo soy santo" aparece en Levítico 11.44, 19.2, 20.7-8, y 20.26. Las palabras exactas como Pedro las cita vienen de 19.2. Pedro aplica a la iglesia Cristiana este mandamiento que Dios dio a Israel.|
|1.17|2 Cr. 19.7, Sal. 28.4, 62.12, 89.26, Pr. 24.12, Is. 59.18, 64.8, Jer. 3.19, 17.10|2 Crónicas 19.7 es el más parecido a 1 Pedro 1.17, porque conecta la necesidad del temor con la idea que Dios no hace "acepción de personas". Salmos 28.4 y 62.12, Isaías 59.18, Proverbios 24.12 y Jeremías 17.10 dicen que Dios es un juez que escudriña los corazones de los seres humanos y los juzga por sus "obras". Salmo 89.26, Isaías 64.8 y Jeremías 3.19 dicen que Israel llama a Dios su "Padre". Pedro junta estas cuatro ideas en 1.17 y las aplica a la iglesia Cristiana, el nuevo Israel.|
|1.23|Dn. 6.26|Pedro posiblemente fue influenciado por el vocabulario de Daniel 6.26, que habla del Dios viviente que permanece por los siglos. Pedro usa este vocabulario para hablar de "la palabra de Dios que vive y permanece para siempre" (RV95). ¿La frase "que vive y permanece para siempre" se refiere a Dios, o a su palabra? Si decimos que Pedro está citando a Daniel, entonces se refiere a Dios. Pero el contexto de 1 Pedro 1.24-25 aclara que Pedro se refiere a la naturaleza viviente y duradera de la //palabra// de Dios. Así que debemos concluir que Pedro toma el vocabulario que Daniel atribuye a Dios, y lo aplica a la palabra de Dios.|
|1.24-25|Is. 40.6-8||
|2.3|Sal. 34.8|Salmo 34.8 exhorta al lector a que guste y vea que Jehová es bueno (es decir, delicioso). Pedro dice que los lectores de su carta ya lo han hecho. Pedro dice que como ya saben que el Señor es delicioso, deben siempre tener sed de la alimentación divina, para que sigan creciendo espiritualmente. En el griego, Pedro traduce "Jehová" a "Señor" (la palabra que el NT usa para hablar de Jesucristo). Así que Pedro identifica a Jehová del Salmo con el Señor Jesucristo. Además, Pedro usa la palabra χρηστὸς para "bueno". Solo hay un vocal de diferencia entre χρηστὸς y Χριστὸς, la palabra "Cristo" o "Mesías." Así que algunos comentaristas encuentran un juego de palabras aquí: "Ya que han gustado que el Señor es bueno" = "Ya que han gustado que el Señor es el Cristo".|
|2.4|Sal. 118.22, Is. 28.16||
|2.5|Ex. 19.6, Is. 61.6|En Exodo, Dios dice que Israel será un "reino de sacerdotes y una gente santa" (RV95). Pedro toma esta idea y la aplica a la iglesia, diciendo que sus lectores serán un "sacerdocio santo". Isaías 61.6 también menciona que Israel será un sacerdocio para Dios.|
|2.6-8|Is. 28.16||
|2.7|Sal. 118.22||
|2.8|Is. 8.14||
|2.9|Ex. 19.5-6, 23.22; Dt. 7.6, 10.15, 14.2,  Is. 9.2, 42.12, 43.20-21, 61.6||
|2.10|Os. 1.6, Os. 1.9; 2.1, 2.23, Is. 43.20-21||
|2.11|Sal. 39.12|La combinación "extranjeros y peregrinos" en 2.11 posiblemente viene de la combinación "forastero y advenedizo" en Salmo 39.12.|
|2.12|Is. 10.3||
|2.17|Pr. 24.21|La segunda parte de 2.17 ("Temed a Dios. Honrad al rey", RV95) es probablemente una adaptación de las palabras de Proverbios 24.21 ("Teme a Jehová, hijo mío, y al rey").|
|2.22|Is. 53.9||
|2.24-25|Is.53.4-7, Is.53.12, Ez. 34.5-6||
|3.6|Gn. 18.12||
|3.10-12|Sal. 34.12-16||
|3.14-15|Is. 8.12-13||
|3.18-22|Gn. 6-9|Pedro se refiere a la historia de Noé. La pequeña familia de Noé se salvó del juicio de Dios atravesando las aguas del diluvio en el arca. De igual manera, los lectores de Pedro, que eran pocas personas, son salvos del juicio de Dios por su conversión, atravesando las aguas del bautismo.|
|4.8|Pr. 10.12|Proverbios 10.12 hace un contraste: Por un lado, hay el odio de la persona que ve la ofensa o el pecado de otro, y decide chismear acerca de él, y así provocar divisiones. Por el otro lado, hay el amor de la persona que, aunque ve la ofensa o el pecado de otro, no habla con terceros, sino que se acerca al pecador para buscar su arrepentimiento del pecador y procurar el perdón de sus pecados. 1 Pedro 4.8 incluye una paráfrasis de la segunda parte del proverbio (igual a Santiago 5.20). Pedro quiere que haya en la iglesia un profundo amor que no se da a chismes y contiendas cuando alguien peca u ofende.|
|4.14|Is. 11.2, Sal. 89.50-51|En Isaías 11.2, el profeta dice que el Espíritu del Señor reposará sobre el Mesías. Pedro dice que lo mismo pasará con los Cristianos que se encuentran perseguidos. El Espíritu de Dios reposa sobre ellos. Pedro aplica una promesa mesiánica a los seguidores del Mesías. Lo que le pasa a Cristo les pasa a los que están en él. Salmo 89.50-51 es parecido porque es un texto donde el 'ungido' (el Mesías) recibe maltrato por las naciones.|
|4.17|Jer. 25.29, Ez. 9.6|En Jeremías 25.29, Dios dice que va a visitar a todos los habitantes de la tierra con un juicio universal. Pero dice que va a comenzar con la ciudad de Jerusalén. En Ezequiel 9.6 el juicio de Jerusalén comienza en el templo. Podemos imaginar un juicio que comienza con los que son más íntimos con Dios, y se extiende hacia los más desobedientes. En 1 Pedro vemos el mismo fenómeno: Dios estaba 'juzgando' a los creyentes del primer siglo a través de la persecución. Pero pronto juzgará a todo el mundo también. Pedro quería que los lectores originales de esta carta reciban consuelo del hecho de que el 'juicio' que experimentaban era mucho más leve que el juicio que los impíos recibirán después.|
|4.18|Pr. 11.31|1 Pedro 4.18 es una ''cita directa'' de Proverbios 11.31, que subraya el pensamiento de 4.17 - el juicio que los Cristianos experimentan en esta vida a través de la persecución viene primero, y es más leve. El juicio de los injustos y pecadores, aunque se demora, es seguro, y será mucho más severo. Proverbios provee el principio general, y 1 Pedro lo aplica a la situación de los Cristianos del primer siglo.|
|4.19|Sal. 31.5|El salmista, en sus sufrimientos, encomienda su espíritu a Dios. El versículo de 1 Pedro nos exhorta a que encomendemos nuestras almas a nuestro Creador cuando sufrimos.|
|5.5 ''(cita)''|Pr. 3.34|En la versión hebrea de Prov. 3.34, El Señor (Heb: Yahvé) se burla de los que se burlan y da gracia a los humildes. Pedro utiliza la versión [[LXX|LXX = Septuaginta]] de Proverbios 3.34, que dice que el Señor (Griego: Kurios) se opone a los soberbios. Para especificar que se trata de Dios el Padre y no del Señor Jesucristo, Pedro cambia "Señor" a "Dios" (Griego: Theos). Pedro utiliza este versículo para explicar por qué los jóvenes deben someterse a la autoridad de los ancianos.|
|5.6|Job 22.29|El versículo en Job es una afirmación, y el de Pedro es una exhortación con una promesa. Sin embargo hay paralelos verbales entre los dos: que Dios levantará a los que son humildes.|
|5.7|Sal. 55.22|El salmista exhorta, "Echad vuestra carga sobre Jehová", y Pedro claramente alude a este vesículo con una exhortación similar.|
|5.8|Sal. 22.13|Los Salmos describen los enemigos del salmista como leones rugientes. Pedro aplica esta figura al diablo.|

@@.source Fuentes: USB; Beale y Carson, 1015-1044; @@
''Citas directas:''

2 Pedro 2.22 cita Proverbios 26.11.

''Alusiones probables''

|bluealtrows|k
|1.17|Sal. 2:7, Gn. 22:2, Is. 42:1|
|1.19|Nm. 24.17|
|2.2|Pr. 26.11|
|2.5|Gn. 6.17|
|2.6|Gn. 19.29|
|2.15-16|Nm. 22.21-35|
|3.5|Gn. 1.1|
|3:8|Sal. 90:4|
|3.9|Hab. 2.3|
|3.10, 12|Is. 34.4|
|3.12|Is. 60.22|
|3.12-14|Hab. 2.3|
|3.13|Is. 65:17|

''Alusiones posibles''

|bluealtrows|k
|1.11|Dn. 7.27|
|1.17|Sal. 8.5, Dn. 7.14|
|1.18|Cnt 2.17|
|3.12-13|Sof. 1.18, 3.20|

@@.source Fuente: Bauckham.@@
Judas alude al AT varias veces:

|bluealtrows|k
|4|¿A qué se refiere Judas cuando dice que la condenación de los hombres impíos fue escrita hace mucho tiempo? Probablemente se refiere de forma general a las profecías que Judas menciona en los siguientes versículos, incluyendo a la cita de 1 Enóc en Judas 14-15.|
|5|Judas alude a Números 14, y dice que Dios destruyó a la generación incrédula que había sacado de Egipto|
|6|Judas se refiere a la rebelión y encadenación de los ángeles. Igual a muchos intérpretes Judíos y Cristianos, 1 Enóc (citado en Judas 14-15) interpreta a Génesis 6.1-4 para decir que algunos ángeles caídos llamados los Vigilantes tuvieron relaciones con mujeres humanas. Hay diferencias de opinión entre eruditos acerca de este versículo. Véase las notas para Judas 6 para mayor información|
|7|Judas alude a Génesis 19, acerca del pecado y el juicio de Sodoma y Gomorra|
|9|Clemente Alejandrino, un padre de la iglesia, dice que la referencia a Miguel disputando con el diablo viene de un libro apócrifo llamado //La asunción de Moisés,// pero no tenemos copias existentes de este libro|
|11|Judas menciona a Caín (Génesis 4), Balaam (Números 22-24), y Coré (Números 16)|
|12a|La referencia a pastores que solo se apacientan a si mismos alude a Ezequiel 34.2-3, 8|
|12b|La referencia a nubes sin lluvia alude a Proverbios 25.14|
|13|La referencia a las olas alude a Isaías 57.20|
|14-15|Esta única cita directa en Judas es una cita de un libro apócrifo, 1 Enóc 1.9|

<hr>

*No tenemos que asumir que Judas aceptó a //1 Enoc// o //La Asunción de Moisés// como canónicos. Podríamos compararlo a un predicador que cita en su sermón a un escritor Cristiano que el predicador considera un experto o autoridad.
*Además, en el tiempo de Judas la idea de un canon cerrado era una idea todavía en formación. Así que no es justo debatir si Judas consideraba estos libros “canónicos”. Tal vez Judas ni siquiera podía articular un concepto así.
!!!!Citas directas

|bluealtrows|k
|2.8 |Lv. 19:18|
|2.11|Ex. 20:14, 13|
|2.23|Gn. 15:6|
|4.6|Pr. 3:34|

!!!!Alusiones

|bluealtrows|k
|1:5|Pr. 2:3-6|
|1:10-11|Is. 40:6-7, Sal. 102:4, 11|
|1:19|Ec. 7:9|
|1:26|Sal. 141:3, Sal. 39:1, Sal. 34:13|
|2:1|Job 34:19|
|2:9|Dt. 1:17|
|2:11|Dt. 5:18|
|2:21|Gn. 22:9, 12|
|2:23|Is. 41:8, 2 Cr. 20:7|
|2:25|Jos. 2:4, 2:15, 6:17|
|3:8|Sal. 140:3|
|3:9|Gn. 1:26-27|
|3:18|Is. 32:17|
|4:5|Ex. 20:5|
|4:8|Mal. 3:7, Zac. 1:3, Is. 1:16|
|4:10|Job 5:11|
|4:13-14|Pr. 27:1|
|5:3|Sal. 21:9|
|5:4|Mal. 3:5, Gn. 4:10, Is. 5:9, Sal. 18:6, 24:14-15, Lv. 19:13|
|5:5|Jer. 25:34, Jer. 12:13|
|5:7|Jl 2:23, Jer. 5:24, Dt. 11:14|
|5:11|Dn. 12:12, Sal. 111:4, 103:8, Ex. 34:6|
|5:17|1 R. 17:1|
|5:18|1 R. 18:42-45|
|5:20|Pr. 10:12|
El texto es de la NVI.

Clave: <span class="yellowbk">"Por la fe"</span> <span class="orangebk">El futuro / la esperanza / las promesas</span> <span class="turqbk">Lo visible / lo invisible</span> <span class="greenbk">La aprobación de Dios</span> <span class="pinkbk">La oposición</span>

|greenaltrows|k
|>|!Descripción inicial de la fe|
|11.1|Ahora bien, la fe es la garantía de <span class="orangebk">lo que se espera</span>, la certeza de <span class="turqbk">lo que no se ve</span>.|
|11.2|Gracias a ella <span class="greenbk">fueron aprobados los antiguos</span>|
|11.3|<span class="yellowbk">Por la fe</span> entendemos que el universo fue formado por la palabra de Dios, de modo que <span class="turqbk">lo visible no provino de lo que se ve</span>.|
|>|!Ejemplos de Génesis 1-11|
|11.4|<span class="yellowbk">Por la fe</span> Abel ofreció a Dios un sacrificio más aceptable que el de <span class="pinkbk">Caín</span>, por lo cual <span class="greenbk">recibió testimonio de ser justo, pues Dios aceptó su ofrenda.</span> Y por la fe Abel, a pesar de estar muerto, habla todavía.|
|11.5|<span class="yellowbk">Por la fe</span> Enoc fue sacado de este mundo sin experimentar la muerte; no fue hallado porque Dios se lo llevó, pero antes de ser llevado <span class="greenbk">recibió testimonio de haber agradado a Dios.</span>|
|>|!Explicación adicional|
|11.6|En realidad, sin fe es imposible agradar a Dios, ya que cualquiera que se acerca a Dios tiene que creer que él existe y que recompensa a quienes lo buscan.|
|>|!Otro ejemplo de Génesis 1-11|
|11.7|<span class="yellowbk">Por la fe</span> Noé, advertido sobre <span class="turqbk">cosas que</span> <span class="orangebk">aún</span> <span class="turqbk">no se veían</span>, con temor reverente construyó un arca para salvar a su familia. Por esa fe condenó al mundo y llegó a ser heredero de la justicia que viene <span class="yellowbk">por la fe.</span>|
|>|!El ejemplo de Abraham|
|11.8|<span class="yellowbk">Por la fe</span> Abraham, cuando fue llamado para ir a un lugar <span class="orangebk">que más tarde recibiría como herencia</span>, obedeció y salió <span class="turqbk">sin saber a dónde iba</span>.|
|11.9|<span class="yellowbk">Por la fe</span> se radicó como extranjero en la tierra <span class="orangebk">prometida</span>, y habitó en tiendas de campaña con Isaac y Jacob, herederos también de la misma <span class="orangebk">promesa</span>,|
|11.10|porque <span class="orangebk">esperaba la ciudad de cimientos sólidos, de la cual Dios es arquitecto y constructor</span>.|
|11.11|<span class="yellowbk">Por la fe</span> Abraham, a pesar de su avanzada edad y de que Sara misma era estéril, recibió fuerza para tener hijos, porque consideró fiel al que le había hecho <span class="orangebk">la promesa</span>.|
|11.12|Así que de este solo hombre, ya en decadencia, nacieron descendientes numerosos como las estrellas del cielo e incontables como la arena a la orilla del mar.|
|>|!Explicación|
|11.13|Todos ellos vivieron <span class="yellowbk">por la fe</span>, y murieron <span class="orangebk">sin haber recibido las cosas prometidas; más bien, las reconocieron a lo lejos</span>, y confesaron que eran extranjeros y peregrinos en la tierra.|
|11.14|Al expresarse así, claramente dieron a entender que <span class="orangebk">andaban en busca de una patria.</span>|
|11.15|Si hubieran estado pensando en aquella patria de donde habían emigrado, habrían tenido oportunidad de regresar a ella.|
|11.16|Antes bien, <span class="orangebk">anhelaban una patria mejor</span>, es decir, la celestial. Por lo tanto, <span class="greenbk">Dios no se avergonzó de ser llamado su Dios</span>, y les preparó una ciudad.|
|>|!La continuación del ejemplo de Abraham|
|11.17|<span class="yellowbk">Por la fe</span> Abraham, que había recibido <span class="orangebk">las promesas</span>, fue puesto a prueba y ofreció a Isaac, su hijo único,|
|11.18|a pesar de que Dios le había dicho: «Tu descendencia se establecerá por medio de Isaac.»|
|11.19|Consideraba Abraham que Dios tiene poder hasta para resucitar a los muertos, y así, en sentido figurado, recobró a Isaac de entre los muertos.|
|>|!El ejemplo de los otros patriarcos|
|11.20|<span class="yellowbk">Por la fe</span> Isaac bendijo a Jacob y a Esaú, <span class="turqbk">previendo</span> <span class="orangebk">lo que les esperaba en el futuro.</span>|
|11.21|<span class="yellowbk">Por la fe</span> Jacob, cuando estaba a punto de morir, bendijo a cada uno de los hijos de José, y adoró apoyándose en la punta de su bastón.|
|11.22|<span class="yellowbk">Por la fe</span> José, al fin de su vida, <span class="orangebk">se refirió a la salida de los israelitas de Egipto</span> y dio instrucciones acerca de sus restos mortales.|
|>|!El ejemplo de Moisés|
|11.23|<span class="yellowbk">Por la fe</span> Moisés, recién nacido, fue escondido por sus padres durante tres meses, porque vieron que era un niño precioso, y <span class="pinkbk">no tuvieron miedo del edicto del rey.</span>|
|11.24|<span class="yellowbk">Por la fe</span> Moisés, ya adulto, renunció a ser llamado hijo de la hija del faraón.|
|11.25|Prefirió <span class="pinkbk">ser maltratado con el pueblo de Dios</span> a disfrutar de los efímeros placeres del pecado.|
|11.26|Consideró que <span class="pinkbk">el oprobio por causa del Mesías</span> era una mayor riqueza que los tesoros de Egipto, porque<span class="orangebk"> tenía la mirada puesta en la recompensa.</span>|
|11.27|<span class="yellowbk">Por la fe</span> salió de Egipto <span class="pinkbk">sin tenerle miedo a la ira del rey</span>, pues se mantuvo firme <span class="turqbk">como si estuviera viendo al Invisible.</span>|
|11.28|<span class="yellowbk">Por la fe</span> celebró la Pascua y el rociamiento de la sangre, para que el exterminador de los primogénitos no tocara a los de Israel.|
|11.29|<span class="yellowbk">Por la fe</span> el pueblo cruzó el Mar Rojo como por tierra seca; pero cuando <span class="pinkbk">los egipcios intentaron cruzarlo</span>, se ahogaron.|
|>|!Ejemplos del libro de Josué|
|11.30|<span class="yellowbk">Por la fe</span> cayeron las murallas de <span class="pinkbk">Jericó</span>, después de haber marchado el pueblo siete días a su alrededor.|
|11.31|<span class="yellowbk">Por la fe</span> la prostituta Rajab no murió junto con los desobedientes, pues había recibido en paz a los espías.|
|>|!Resumen conciso de otros ejemplos de victoria|
|11.32|¿Qué más voy a decir? Me faltaría tiempo para hablar de <span class="pinkbk">Gedeón, Barac, Sansón, Jefté, David, Samuel y los profetas,</span>|
|11.33|los cuales <span class="yellowbk">por la fe</span> <span class="pinkbk">conquistaron reinos, hicieron justicia y</span> <span class="orangebk">alcanzaron lo prometido</span>; <span class="pinkbk">cerraron bocas de leones,</span>|
|11.34|<span class="pinkbk">apagaron la furia de las llamas y escaparon del filo de la espada; sacaron fuerzas de flaqueza; se mostraron valientes en la guerra y pusieron en fuga a ejércitos extranjeros.</span>|
|11.35a|Hubo mujeres que por la resurrección recobraron a sus muertos.|
|>|!Ejemplos concisos de sufrimiento por la fe|
|11.35b|Otros, en cambio, fueron <span class="pinkbk">muertos a golpes</span>, pues <span class="orangebk">para alcanzar una mejor resurrección</span> no aceptaron que los pusieran en libertad.|
|11.36|Otros <span class="pinkbk">sufrieron la prueba de burlas y azotes, e incluso de cadenas y cárceles.</span>|
|11.37|<span class="pinkbk">Fueron apedreados, aserrados por la mitad, asesinados a filo de espada. Anduvieron fugitivos de aquí para allá, cubiertos de pieles de oveja y de cabra, pasando necesidades, afligidos y maltratados.</span>|
|11.38|¡El mundo no merecía gente así! Anduvieron sin rumbo por desiertos y montañas, por cuevas y cavernas.|
|>|!Conclusión|
|11.39|Aunque todos <span class="greenbk">obtuvieron un testimonio favorable</span> <span class="yellowbk">mediante la fe</span>, <span class="turqbk">ninguno de ellos vio</span> el cumplimiento de <span class="orangebk">la promesa.</span>|
|11.40|Esto sucedió para que ellos no llegaran a la meta sin nosotros, pues Dios nos había preparado algo mejor.|

Texto: NVI.

<span class="tanbk">La fe</span> <span class="greenbk">Las obras</span> <span class="bluebk">La justificación</span> <span class="pinkbk">Ejemplos del AT</span> <span class="graybk">Muerte / no sirve</span>

<hr>

"""
Hermanos míos, ¿de qué le sirve a uno alegar que tiene <span class="tanbk">fe</span>, si no tiene <span class="greenbk">obras</span>? ¿Acaso podrá salvarlo esa <span class="tanbk">fe</span>? 

Supongamos que un hermano o una hermana no tienen con qué vestirse y carecen del alimento diario, y uno de ustedes les dice: «Que les vaya bien; abríguense y coman hasta saciarse», pero no les da lo necesario para el cuerpo. <span class="graybk">¿De qué servirá eso? </span>

Así también <span class="tanbk">la fe</span> por sí sola, si no tiene <span class="greenbk">obras</span>, <span class="graybk">está muerta. </span>

Sin embargo, alguien dirá: «Tú tienes <span class="tanbk">fe</span>, y yo tengo <span class="greenbk">obras</span>.» 

Pues bien, muéstrame <span class="tanbk">tu fe </span>sin <span class="greenbk">las obras</span>, y yo te mostraré <span class="tanbk">la fe</span> por <span class="greenbk">mis obras</span>. 

¿Tú <span class="tanbk">crees</span> que hay un solo Dios? ¡Magnífico! También los demonios lo <span class="tanbk">creen</span>, y tiemblan. 

¡Qué tonto eres! ¿Quieres convencerte de que <span class="tanbk">la fe</span> sin <span class="greenbk">obras</span> <span class="graybk">es estéril</span>? 

¿No fue <span class="bluebk">declarado justo</span> nuestro padre <span class="pinkbk">Abraham </span> por <span class="greenbk">lo que hizo</span> cuando ofreció sobre el altar a su hijo Isaac? 

Ya lo ves: <span class="tanbk">Su fe</span> y <span class="greenbk">sus obras</span> actuaban conjuntamente, y <span class="tanbk">su fe</span> llegó a la perfección por <span class="greenbk">las obras que hizo</span>. 

Así se cumplió la Escritura que dice: «<span class="tanbk">Le creyó</span> Abraham a Dios, y esto <span class="bluebk">se le tomó en cuenta como justicia</span>», y fue llamado amigo de Dios. 

Como pueden ver, a una persona <span class="bluebk">se la declara justa</span> por <span class="greenbk">las obras</span>, y no sólo por <span class="tanbk">la fe</span>. 

De igual manera, ¿no fue <span class="bluebk">declarada justa</span> por <span class="greenbk">las obras</span> aun <span class="pinkbk">la prostituta Rajab</span>, cuando hospedó a los espías y les ayudó a huir por otro camino? 

Pues como el cuerpo sin el espíritu <span class="graybk">está muerto,</span> así también <span class="tanbk">la fe</span> sin <span class="greenbk">obras</span> <span class="graybk">está muerta.</span> 
"""
Texto: NVI

<span class="yellowbk">La riqueza</span> <span class="orangebk">Corrupción actual</span> <span class="turqbk">Pecados contra los inocentes</span> <span class="greenbk">Testimonios en su contra</span> <span class="purplebk">Amenazas inminentes</span> <span class="wine">Exhortaciones</span>

<hr>

Ahora <span class="wine">escuchen</span>, ustedes <span class="yellowbk">los ricos</span>: 

¡<span class="wine">lloren a gritos</span> por <span class="purplebk">las calamidades que se les vienen encima!</span> 

<span class="orangebk">Se ha podrido</span> <span class="yellowbk">su riqueza</span>, 
y <span class="yellowbk">sus ropas</span> están <span class="orangebk">comidas por la polilla</span>. 

<span class="orangebk">Se han oxidado</span> <span class="yellowbk">su oro y su plata</span>. 

<span class="orangebk">Ese óxido</span> <span class="greenbk">dará testimonio contra ustedes </span>
y <span class="purplebk">consumirá como fuego sus cuerpos. </span>

Han amontonado <span class="yellowbk">riquezas</span>, 
¡y eso que estamos en <span class="purplebk">los últimos tiempos! </span>

<span class="wine">Oigan</span> <span class="greenbk">cómo clama contra ustedes</span> 
<span class="turqbk">el salario no pagado a los obreros</span> que les trabajaron sus campos. 

<span class="greenbk">El clamor de esos trabajadores ha llegado</span> a oídos del Señor Todopoderoso. 

Ustedes han llevado en este mundo 
<span class="yellowbk">una vida de lujo y de placer desenfrenado</span>. 

Lo que han hecho es engordar para <span class="purplebk">el día de la matanza</span>. 

<span class="turqbk">Han condenado y matado al justo</span> sin que él les ofreciera resistencia. 
<table class="altgray"><tr><td>

El amilenialismo y el premilenialismo histórico son las dos opciones que más se ajustan a los datos bíblicos. Las dos interpretaciones tienen sus méritos y las dos tienen sus debilidades. Históricamente el amilenialismo ha sido la interpretación reformada de Apocalipsis 20.

</td></tr><tr><td>

Los amilenialistas (como el escritor del presente recurso) ''podemos mantener nuestra perspectiva con confianza.''

* Tiene la ventaja de interpretar un texto de un libro oculto y simbólico bajo la luz de textos más claros del resto del NT, y no viceversa.
* Evita muchas de las debilidades de premilenialismo notadas arriba.

</td></tr><tr><td>

Pero ''debemos también tener la humildad'' de reconocer las limitaciones de nuestra interpretación.

</td></tr><tr><td>

''Las cosas que debemos predicar'' no son teorías disputadas sino las verdades que todos afirmamos de Apocalipsis 20:

* Hay actualmente, y habrán hasta el juicio final, fuerzas opuestas a nuestro Señor y a nosotros creyentes.
* ¡Nuestro Dios reina! Dios tiene control total sobre Satanás, y no lo deja pasar sus límites. Las fuerzas que se juntan contra Cristo serán derrotadas.
* El problema del mal será resuelta por fin. Los que sufrieron martirio en esta presente época reinan / reinarán con Cristo para siempre, mientras que Satanás, que los hizo sufrir, será tirado al lago de fuego para no amenazar jamás.

</td></tr></table>
<table class="altgray"><tr><td>

3 Juan 14 alude a ''Números 12.8'': donde Dios dice acerca de Moisés, "Cara a cara hablaré con él, y claramente, y no por figuras."

</td></tr><tr><td>

3 Juan es una de las ''cartas generales.''

</td></tr><tr><td>

3 Juan se considera parte de lo que se llama la ''literatura juanina'' (El Evangelio de Juan, las tres cartas de Juan, y Apocalipsis). Las siguientes secciones muestran los paralelos entre el Evangelio y las tres cartas.

</td></tr></table>
En Santiago frecuentemente encontramos oraciones que empiezan con una palabra que aparece en la oración anterior.

|bluealtrows|k
|!Versículos|!Conexiones|!En contexto (NVI)|
|1.3 y 1.4|Constancia|...la prueba de su fe produce constancia. Y la constancia debe llevar a feliz término la obra....|
|1.4 y 1.5|Faltar|...sin que les falte nada. Si a alguno de ustedes le falta sabiduría....|
|1.5 y 1.6|Pedir|...pídasela a Dios....Pero que pida con fe, sin dudar....|
|b1.12 y 1.13, 14|Tentación|Bienaventurado el hombre que soporta la tentación....Cuando alguno es tentado no diga que es tentado de parte de Dios, porque Dios no puede ser tentado por el mal ni él tienta a nadie; sino que cada uno es tentado, cuando de su propia pasión es atraído y seducido.|
|1.19 y 1.20|Ira|...lentos para hablar y para enojarse; pues la ira humana...|
|2.12 y 2.13|Juicio|...como quienes han de ser juzgados por la ley que nos da libertad, porque habrá un juicio....|
|3.2 y 3.3|Freno, refrenar|...capaz también de refrenar todo el cuerpo. He aquí nosotros ponemos freno en la boca de los caballos....|
|3.4 y 3.5|Pequeño|...se gobiernan por un pequeño timón a voluntad del piloto. Así también la lengua es un miembro muy pequeño del cuerpo....|
|3.17 y 3.18|Paz|...además pacífica....En fin, el fruto de la justicia se siembra en paz para los que hacen la paz.|

@@.source Fuente: Notas del Dr. Dean Deppe, Calvin Theological Seminary.@@
<table class="altgray"><tr><td>

El libro de Apocalipsis fue escrito con propósitos pastorales y doxológicos, no con fines especulativos, para satisfacer la curiosidad escatológica de personas del siglo XXI. Debemos tener la misma actitud pastoral y doxológica cuando leemos el libro.

</td></tr><tr><td>

    Una interpretación de un texto de Apocalipsis debe tener sentido para Juan y sus iglesias. No puede significar algo que ellos no entenderían. Si Jesucristo le hubiera dado a Juan una visión de Musulmanes y papas a través de la historia de la iglesia, no habría tenido ninguna relevancia para sus lectores. Igualmente, sus contemporáneos no habrían sacado provecho de un libro solo interesado en detalles sobre el fin del mundo. Tenemos que interpretar el libro por medio de las circunstancias de Juan y las siete iglesias. Solo después podremos encontrar analogías con nuestro propio contexto para ver su relevancia.

<</td></tr><tr><td>

    Juan vio una visión simbólica, no una pantalla al futuro lejano. Cuando Juan dice que vio estrellas y candeleros, lo que vio fueron estrellas y candeleros que actuaban como símbolos. No se puede decir que Juan vio cosas futuras como helicópteros y bombas nucleares, y que no supo qué eran, y los describió como langostas feroces o montañas que fueron echadas al mar.

</td></tr><tr><td>

    Este libro es un libro simbólico, y su primer capítulo nos demuestra este hecho (1.20). Debemos asumir que las imágenes y números en el libro son simbólicos a menos que el contexto nos da motivos de interpretarlos literalmente.

</td></tr><tr><td>

    Juan escribe usando el tiempo pasado, porque está describiendo lo que vio antes de escribir. Sin embargo, muchas cosas que vio se cumplirán en el futuro.

</td></tr><tr><td>

    Richard Hays (Moral Vision, 183) recomienda que leamos Apocalipsis "desde abajo", es decir, desde un punto de vista de la iglesia como una minoría perseguida y presionada por tentaciones, no "desde arriba", desde la perspectiva de una iglesia mayoría y poderosa, como por ejemplo la situación de la iglesia evangelica en los Estados Unidos.

</td></tr><tr><td>

    El libro de Apocalipsis fue escrito para leerse en voz alta en un culto cristiano. Tiene cualidades de una obra dramática escrita para el teatro. No debemos asumir que el libro es una secuencia cronológica, sino un desfile de escenas dramáticas escritas para impresionar los sentidos y las imaginaciones de los oidores.

</td></tr><tr><td>

    Muchas de las imágenes de Apocalipsis fueron incluidos para dar una impresión general, no para sacar significados de cada detalle particular. No debemos exigir del texto más de lo que está ahí.

</td></tr><tr><td>

    Debemos leer el libro buscando las muchas alusiones al Antiguo Testamento, e investigando estas alusiones para enriquecer nuestro entendimiento del texto.

</td></tr><tr><td>

"Metzger escribe que 'en el libro de Apocalipsis las descripciones no son descripciones de sucesos reales, sino de símbolos de los sucesos reales.'" 

@@.source (Mounce, 1998, 42, n. 16)@@

</td></tr></table>
<table class="altgray"><tr><td>

''Debemos leer cada versículo en vista de toda la carta.'' 4.7 parece decir que todo el que expresa amor es nacido por Dios. Pero tenemos que recordar que Juan provee otras pruebas de la fe en su carta, no solamente esta. Por ejemplo la creencia en Jesús es otra prueba (5.1).

</td></tr><tr><td>

''Debemos leer toda la carta en el contexto de la cisma que hubo.'' Por ejemplo, 2.3-4 se lee como si alguien una vez viole un mandamiento, éste no conoce a Dios. Pero si lo leemos en el contexto de la cisma, vemos que Juan habló de los herejes y cismáticos. “está dirigiendo sus comentarios no tanto a los Cristianos en sus iglesias quienes están haciendo estas cosas imperfectamente, sino a los secesionistas quienes no lo hacen ni siquiera parcialmente.” (Fuente desconocida, 26).

</td></tr><tr><td>

''Debemos tener cuidado con los dualismos.'' Juan se expresa en dualismos muy agudos. Parece decir que no hay “áreas de gris” entre la luz y la oscuridad. Sería fácil llegar a creer que todo el mundo puede ser descrito y entendido por estos contrastes y dividir la humanidad en blanco o en negro. Pero en el mundo real, necesitamos discernimiento, porque no todo es claro (4.1-7). 

</td></tr><tr><td>

''Debemos decidir en cada caso a quién se refiere el pronombre “él”.'' ¿Se trata de Dios o de Jesús? Ejemplo: 5.20: “El que es verdadero”—por un lado, este versículo parece decir que Jesús nos da conocimiento para que conozcamos a Dios, el que es verdadero. Pero después el versículo dice que el Hijo Jesucristo es el que es verdadero, y es el verdadero Dios.

</td></tr><tr><td>

''Debemos decidir en cada caso a quiénes se refiere la palabra “nosotros.”'' ¿Se refiere a todo Cristiano? ¿O se refiere solo a Juan y los otros apóstoles? Ejemplo: 4.6.

</td></tr></table>
1 Juan hace contrastes agudos entre dos épocas totalmente opuestas, sus características, y los personajes de estas respectivas épocas. Juan enfatiza estos contrastes para que los destinatarios tengan que escoger a qué época pertenecer, porque las dos opciones son incompatibles y antipáticos y no se pueden mezclar. 

|bluealtrows|k
|2.8|...las tinieblas van pasando y la luz verdadera ya alumbra.|
|2.17|Y el mundo pasa, y sus deseos, pero el que hace la voluntad de Dios permanece para siempre.|
|2.18|Hijitos, ya es el último tiempo. Según vosotros oísteis que el Anticristo viene, así ahora han surgido muchos anticristos; por esto conocemos que es el último tiempo.|
|4.17|En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo.|

1 Juan usa muchos antónimos para contrastar estas épocas:

|bluealtrows|k
|Luz|Tinieblas|
|Verdad|Mentiras, engaño|
|Vida|Muerte|
|Justicia|Pecado|
|Amar|Aborrecer, odiar|
|Cristo|Anticristo|
|Confesar|Negar|

Los personajes mencionados en 1 Juan pertenecen a una de las dos épocas:

|blluealtrows|k
|Dios Padre, Jesucristo, El Espíritu|El diablo o el maligno|
|Juan y sus colegas|Los anticristos y engañadores|
|'Espíritus' de Dios|'Espíritus' del error|
|El hermano de Caín (Abel)|Caín|
|Los hijos de luz / los hijos de Dios|Los hijos del diablo|
Juan enfatiza estos contrastes para que los destinatarios tengan que escoger a qué época pertenecer, porque las dos opciones son incompatibles y antipáticos y no se pueden mezclar.

@@.source Fuente: estudio personal del autor. Texto bíblico: Reina Valera Revisada (1995) (Miami: Sociedades Biblicas Unidas, 1998).@@
//    Fuentes: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament en Logos Bible Software version 4//

<table class="altgray"><tr><td>

    Apocalipsis 2.12 alude a Isaías 49.2, donde el Siervo del Señor tiene una boca como espada aguda.

</td></tr><tr><td>

    Apocalipsis 2.14 alude a la historia de Balaam, quien sedujo a los Israelitas, para que fornicaran y comieran comida sacrificada a ídolos. Esta historia se relata brevemente en Números 25.1-2 y 31.16.

</td></tr><tr><td>

    Apocalipsis 2.16 alude a Isaías 49.2 también, donde el Siervo del Señor tiene una boca como espada aguda.

</td></tr><tr><td>

    Apocalipsis 2.17 menciona que Jesús dará maná y un nuevo nombre a sus seguidores fieles.

* Salmo 78.24 menciona el maná que Dios dio en el tiempo de Moisés. Véase Éxodo 13 y Números 11 para más información sobre el maná.
* Isaías 62.2 y 65.15 mencionan el nuevo nombre que Dios dará a su pueblo.

</td></tr></table>
    //Fuente: el estudio personal del autor.//

<table class="altgray"><tr><td>

    ¿Debemos conectar Apocalipsis 1.9-12a con 1.1-8? ¿O con 1.12b-20? Hay algunas indicaciones claras que la sección 1.9-12a debe ser unida a la visión que sigue:

</td></tr><tr><td>

        En Apocalipsis 1.9 empezamos con una narrativa autobiográfica de Juan, y la visión que sigue es parte de la misma narrativa. En contraste, Apocalipsis 1.1-8 no es narrativa. Es una colección de otros géneros literarios.

</td></tr><tr><td>

        Apocalipsis 1.9 empieza una sección escrita en la primera persona singular. La visión que sigue en 1.12b-20 también está escrito en la primera persona. En contraste, en 1.1-8 Juan no habla en la primera persona. Se refiere a si mismo en la tercera persona singular en los primeros versículos. La única parte en 1.1-8 que está en la primera persona es 1.8, pero no es Juan que habla, sino Dios.

</td></tr><tr><td>

        Apocalipsis 1.9-12 es la narrativa de la comisión profética de Juan. Jesús comisiona a Juan para que escriba a las iglesias. En narrativas similares en el Antiguo Testamento, como en Isaías 6, vemos la narrativa de la comisión profética unida a una gloriosa descripción de Dios. Así que los antecedentes en el AT nos inclinan a conectar 1.9-12a con 1.9b-20.

</td></tr><tr><td>

        En 1.12b, Juan da la vuelta. En 1.12a vemos que da la vuelta para buscar la fuente de una voz. En 1.10-11 escuchamos la voz. Se ve que todos estos versículos deben ser entendidos juntos como unidad. Si separamos a 1.9-12a de 1.12b-20 y lo unimos más con 1.1-8, perdemos esta conexión natural.

</td></tr></table>
<table class="altgray"><tr><td>

    Al considerar todos los pros y contras, no es fácil concluir si Juan el apóstol fue el autor de Apocalipsis o no.

</td></tr><tr><td>

    La diferencia entre el estilo literario y la calidad del griego en Apocalipsis, por un lado, y los del Evangelio de Juan y las cartas de Juan, por el otro lado, es notable. Y la mayoría de las semejanzas que Morris y Wilson mencionan parecen forzadas.

</td></tr><tr><td>

    Sin embargo, la evidencia externa a favor de Juan es fuerte, mientras la evidencia a favor de un supuesto 'Juan el anciano' es débil.

</td></tr><tr><td>

    Un creyente que afirma un alto concepto de la inspiración de la Biblia solo tiene que afirmar que alguien llamado Juan escribió el libro. La inspiración divina del libro de Apocalipsis no requiere la identificación del apóstol Juan como el autor, y tampoco requiere la afirmación que el autor fue el mismo autor del Evangelio y las cartas atribuidas a Juan.

</td></tr></table>

<span class="source">Fuente: conclusiones personales del autor.</span>
    //Fuentes: varias, especialmente David Aune.//

<hr>

    1.4-5 es una típica introducción epistolaria, muy similar a las introducciones a las cartas de Pablo.

<hr>

    Capítulos 2 y 3 contienen mensajes (tradicionalmente llamados 'cartas') a las siete iglesias en Asia.

<hr>

    Todo el libro de Apocalipsis se dirige a las circunstancias específicas que las iglesias enfrentaban.

<hr>

    Apocalipsis se termina como una carta antigua, con una bendición final en 22.21.
//    Fuentes: Notas de una materia de Calvin Theological Seminary elaboradas por el Dr. Dean Deppe; Mark S. Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel 2007), p. 47-48.//

<hr>

Los sietes más notables en Apocalipsis son los cinco series de sietes:

* Las siete iglesias en capítulos 2-3
* Los siete sellos que el Cordero abre
* Las siete trompetas
* Los siete truenos
* Las siete copas

<hr>

También son notables las menciones de siete artículos encontrados juntos

* Siete candelabros (1.12, 1.20, 2.1)
* Siete espíritus (1.4, 3.1, 4.5, 5.6), que son siete lámparas (4.5) y siete ojos (5.6)
* Siete estrellas (1.16, 1.20, 2.1, 3.1)
* Siete cuernos (5.6)
* Siete cabezas (12.3, 13.1, 17.3, 17.7, 17.9), que representan siete colinas (17.9)
* Siete coronas (12.3), que representan siete reyes (17.9-10)

<hr>

Quizás no tan notables son las tres listas en que aparecen un total de siete artículos:

* 5.12: Poder, riqueza, sabiduría, fuerza, honor, gloria y alabanza
* 6.15: Los reyes de la tierra, los príncipes, los generales, los ricos, los poderosos, cada esclavo y cada hombre libre
* 7.12: Alabanza, gloria, sabiduría, acción de gracias, honor, poder y fuerza

<hr>

Por último, hay cosas que aparecen a través del libro que cuando las sumanos llegamos a siete:

* Siete bienaventuranzas (1.3, 14.13, 16.15, 19.9, 20.6, 22.7, 22.14)
* Siete ángeles (8.2, 6; 15.1, 6-8; 16.1, 17.1, 21.9; el séptimo ángel se menciona en 10.7, 11.15 y 16.17)
* Algunos hallan exactamente siete escenas de culto (4.2-11 y 5.8-14, 7.9-17, 11.15-18, 13.1-15, 14.1-5, 15.2-4, 19.1-8)
* Algunos hallan siete seres simbólicos en capítulos 12-14: la mujer, el dragón, el niño, Miguel, la primera bestia, la segunda bestia, y el Cordero
* Algunos encuentran siete enemigos derrotados en capítulos 17-20: la ramera de Babilonia, la bestia, el falso profeta, Satanás, Gog/Magog, la muerte y el infierno
|bluealtrows|k
|!3.16|En esto hemos conocido el amor, en que él puso su vida por nosotros; también nosotros debemos poner nuestras vidas por los hermanos.|
|!4.10|En esto consiste el amor: no en que nosotros hayamos amado a Dios, sino en que él nos amó a nosotros y envió a su Hijo en propiciación por nuestros pecados.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<table class="altgray"><tr><td>

    Por lo general los expertos sobre el libro de Apocalipsis se dividen entre los que piensan que Juan escribió durante o inmediatamente después del tiempo del emperador Nerón (quien reinó de 54 a 68 D.C.), y los que piensan que Juan escribió durante el tiempo del emperador Domiciano. Lo que sigue es una lista de factores que hay que toman en cuenta.

</td></tr><tr><td>

        ''El testimonio de los padres de la iglesia antigua acerca del libro.'' Ireneo es el más específico, y dice que el libro fue escrito alrededor del fin del reinado de Domiciano. Pero Ireneo podría haberse equivocado.

</td></tr><tr><td>

        ''El desarrollo del culto imperial a Roma, aludido en el libro.'' Este factor es el menos útil, porque el culto imperial existía en Asia desde el tiempo de Augusto, décadas antes del nacimiento de Jesús. Había templos en Pérgamo y Esmirna dedicados al culto del imperio romano en 29 A.C. y 26 A.C., respectivamente.

</td></tr><tr><td>

        ''Evidencia por y contra una persecución a nivel global en el tiempo de Domiciano.'' Hace años, fue considerado un hecho que Domiciano se declaró Dominus et Deus (Señor y Dios), que fue un tirano terrible, y que persiguió a los Cristianos severamente. Ahora, en cambio, los eruditos han notado que la evidencia para una persecución general en el tiempo de Domiciano es escasa. Además, el retrato negativo del reinado de Domiciano fue desarrollado por escritores después de él, escritores con fuertes motivos políticos para criticar a Domiciano y alabar a su sucesor Trajano. Así que la inclinación de los expertos ha cambiado en cuanto a la persecución de Domiciano. Si Domiciano no persiguió a la iglesia, algunos eruditos dicen, debemos dirigir nuestra atención al reinado de Nerón para encontrar el contexto de persecución que corresponde a este libro.

</td></tr><tr><td>

        ''La evidencia pro y contra para la aparición del "mito de Nerón redivivus" en Apocalipsis 13.'' Nerón se suicidó en 68 D.C., y no hubo entierro público para él. Un mito empezó a circularse al efecto de que Nerón no había muerto, y que regresaría para reconquistar a Roma. Con el pasar de los años, la gente empezó a hablar de una resurrección de Nerón. Hubo tres personas que alegaban ser Nerón entre 69-89 D.C. Aune menciona que el último de estos casi causó una invasión de Roma por parte de Partos. La relevancia de todo esto para Apocalipsis es que en capítulos 13 y 17 una cabeza de la primera bestia es un rey que muere, vuelve a vivir, y se apodera del imperio. Si esta es una referencia al mito de Nerón redivivus, entonces una fecha temprana para Apocalipsis es dudable, porque este mito necesitaba tiempo para desarrollarse y circularse hasta Asia. Por el otro lado, dicen algunos, si ya hubo alguien en 69 D.C. que alegaba ser Nerón, y cuyo cuerpo, después de su ejecución por Roma, fue expuesto publicamente en Éfeso (el lugar de una de las iglesias de Apocalipsis), una fecha temprana para Apocalipsis es una distinta posibilidad.

</td></tr><tr><td>

        ''Los siete reyes en Apocalipsis 17.10-11.'' Según Juan, cinco reyes habían caído, uno era, y el séptimo, cuyo reino sería corto, no había llegado todavía. Después habría un octavo rey que "perteneces a los siete y se va a su destrucción". Si asumimos que por 'reyes' Juan quiere decir 'emperadores romanos', debe ser posible comparar la secuencia de Juan con la lista de emperadores romanos, y llegar al emperador que "es" cuando Juan escribe. Pero hay algunas complicaciones:

* No es claro donde debemos empezar a contar reyes: ¿con Julio César, el primero emperador, o con César Augusto? ¿O con Gayo Calígula, el primer emperador después de la crucifixión y resurrección de Jesús?
* No es claro si debemos incluir a los tres emperadores que reinaron brevemente y en rápida sucesión durante la guerra civil de 68-69 D.C. (Galba, Otón y Vitelio).
* Cuando combinamos los dos puntos anteriores llegamos a un gran número de diferentes posibilidades.

</td></tr><tr><td>

        ''Referencias en Apocalipsis 11 al templo en Jerusalén.'' Algunos eruditos dicen que los detalles en Apocalipsis 11.1-2, 11.8 y 11.13 son evidencia que Jerusalén todavía no había sido destruida y que ya estaba bajo sitio por los Romanos cuando Apocalipsis fue escrito. Preguntas claves: ¿Escribió Juan literalmente en capítulo 11, o simbólicamente? ¿La mención en Apocalipsis 11 de un terremoto que destruye Jerusalén representa un error de parte de Juan acerca de la forma en que la ciudad sería destruida?

</td></tr><tr><td>

        ''Referencias en Apocalipsis a Roma como 'Babilonia'.'' Apocalipsis se refiere a Roma como 'Bablionia' en 14.6, 16.19, 17.5, 18.2, 18.10, 18.11. La teoría de algunos es que Roma llegó a llamarse 'Babilonia' después de la destrucción de Jerusalén en 70 D.C., porque Roma, como Babilonia, destruyó la ciudad de Jerusalén. Roma se menciona en otras obras apocalípticas, pero todos ellos fueron escritas después de 70 D.C. Según esta teoría, Apocalipsis no pudo haber escrito antes de 70 D.C. Sin embargo, otros escritores mencionan 1 Pedro 5.15, que también usa Babilonia para referirse a Roma. Si aceptamos a Pedro como el autor de 1 Pedro, el libro fue escrito antes del martirio de Pedro en el tiempo de Nerón - varios años antes de la destrucción de Jerusalén. Así que este factor no es necesariamente persuasivo.

</td></tr><tr><td>

        ''La destrucción de la ciudad de Laodicea por un temblor en 60-61 D.C.'' La ciudad fue totalmente destruida en esa fecha. Pero Apocalipsis menciona que los Laodiceos son prósperos. Esto podría afectar la fecha de composición del libro: ¿Es posible que en 68-69 D.C. la ciudad ya se había recuperado lo suficiente para descubrirse como rico y próspero?

</td></tr><tr><td>

        ''Evidencia en cuanto a la fundación de la iglesia en Esmirna.'' Policarpo, escribiendo en 155 D.C., dice que cuando Pablo escribió su carta a los Filipenses, los de Esmirna todavía no habían conocido al Señor. Esto significa que si creemos a Policarpo, la iglesia de Esmirna no fue fundada antes de la composición de Filipenses. La fecha de Filipenses es entre 53-58 D.C. Es posible que la iglesia no llegó a formarse hasta los años 60, y esto podría ser evidencia en contra de una fecha temprana para Apocalipsis: Juan estaría escribiendo a una iglesia que aún no existía.

</td></tr><tr><td>

        ''Ciertos factores acerca de Apocalipsis que requererían tiempo para desarrollarse.'' Capítulos 2 y 3 mencionan el declive espiritual de las iglesias en Éfeso (que había perdido su primer amor), Sardis (muerta) y Laodicea (tibia). Estos capítulos también mencionan el surgimiento de sectas como los Nicolaítas. La pregunta clave es, ¿cuántos años necesitamos postular para permitir el desarrollo de estos factores?

</td></tr></table>

<span class="source">Fuentes: Varias, con reconocimiento especial para el tratamiento especial de David Aune en su comentario.</span>
Apocalipsis 12 anima a los creyentes perseguidos con los siguientes conceptos:

<span class="doublelist">

* El pueblo de Dios al que ellos pertenecen es glorioso (1).
* El diablo atacó a Jesucristo por miedo - el diablo se cree la verdadera autoridad sobre el mundo (tiene diez coronas sobre siete cabezas, 3) y como Herodes, el diablo se siente amenazado por la verdadera autoridad de Cristo (5).
* Dios protege a su pueblo de diversas maneras (5, 6, 14, 16).
* Dios tiene un lugar preparado donde cuida a su pueblo (6, 14).
* El diablo es un enemigo ya derrotado (7-10, 12). Las fuerzas ángelicas son más fuertes que las fuerzas satánicas (8).
* El mundo que los persigue ha sido engañado por el diablo (9).
* El testimonio de los creyentes es más poderoso que las acusaciones del diablo (10-11)
* El martirio no es una derrota, sino una victoria sobre el diablo - resistir al diablo hasta la muerte. Su muerte es una imitación del Cordero que derramó su sangre (11).
* El tiempo que el diablo tiene para perseguir es limitado. Las acciones del diablo son limitadas y restringidas por la soberanía de Dios (12).
* El diablo persigue a los Cristianos porque está resentido - sus intentos malignos siempre son frustrados por Dios (13, 17).

</span>
<table class="altgray"><tr><td>

Palabras claves del Evangelio que no se encuentran en las epístolas: cruz, crucificar, discípulo, gloria, glorificar, cielo, ley, Señor, buscar, señal.

</td></tr><tr><td>

En el Evangelio, logos es personal y se refiere a Jesús, en las epístolas logos es impersonal y se refieren al evangelio.

</td></tr><tr><td>

En el Evangelio, el Espíritu es el paracletos (abogado, consolador), en las epístolas, Jesús es el paracletos. Pero: Juan dice que el Espiritu es otro consolador, implicando que Jesús es el primero.

</td></tr><tr><td>

En el Evangelio Jesús es la luz, en las epístolas Dios es la luz.

</td></tr><tr><td>

En el Evangelio la vida eterna y los postreros días están presentes, pero en las epístolas estas cosas vienen en el futuro. 

*Pero: En 1 Juan 5.11-13, están presentes.
*En Juan 5.28-29, 6.39-40, 6.44, 6.54, 11.24-26, 12.48, 14.3 estas cosas están en el futuro.

</td></tr><tr><td>

La primera carta habla de propiciación, un término que no aparece en el Evangelio.

</td></tr></table>

@@.source Stott, 24-26, Harrison@@
Dios el Padre se menciona en Judas 1, 15, 21, 24-25:

<span class="doublelist">

*Ama a los creyentes y es misericordioso (Judas 1, 21)
*Juzgará a los pecadores impíos (Judas 15)
*Es poderoso (Judas 24)
*Guarda a los creyentes para presentarlos delante de él (Judas 24)
*Es el único Dios (Judas 25)
*Es sabio (Judas 25)
*Es Salvador (Judas 25)
*Tiene gloria, majestad, dominio, y autoridad (25)

</span>
<table class="altgray"><tr><td>

Algunos dicen que 1 Pedro es el libro más teológico del Nuevo Testamento, si comparamos referencias a Dios con el tamaño de la carta.

</td></tr><tr><td>

En 1 Pedro vemos muchas actividades de Dios y muchos de sus atributos.

</td></tr></table>
<span class="doublelist">

*Dios es “el Padre” (1.2, 1.3, 2.1, 2.13, 2.15, 2.16, 2.22, 2.23, 2.24, 3.1, 4.14, 5.1)
*Dios es luz (1.5)
*Dios es justo y fiel (1.9)
*Es el que es verdadero (5.20 - ¿o se refiere a Jesús?)
*Es el santo, y unge a los creyentes (2.20, 2.27 - ¿o se refiere al Espíritu Santo?)
*Es el que estuvo desde el principio (2.13, 2.14 - ¿o se refiere a Jesús?)
*Sabe todo (3.20)
*Es más grande que nuestros corazones: 3.20
*El que está en los creyentes es mayor que el que está en el mundo (4.4)
*Nadie lo ha visto jamás (4.12, 4.20)
*Dios es amor (4.8, 4.15), es la fuente de amor (3.17, 4.7), nos ama (4.9, 4.10, 4.11, 4.15, 4.18) - ha derramado su amor sobre nosotros (3.1)
*Prometió la vida eterna: 2.25, y lo da por medio de su Hijo: 5.11.
*Envió a su Hijo (4.9, 4.10, 4.14)
*Da su Espíritu a los creyentes (3.24, 4.13)
*Tiene una voluntad, y los que le piden según su voluntad reciben lo que piden de él (5.14)
*Tiene una “semilla” que permanece en los creyentes: 3.9.

</span>
<table class="altgray"><tr><td>

Dios como creador de los cielos y la tierra (3.5), y el papel del agua en la creación.

</td></tr><tr><td>

La “palabra” de Dios formó la creación, y la misma palabra preserva la creación para el día de destrucción (3.5, 7).

</td></tr><tr><td>

La paciencia y misericordia de Dios, y su distinto concepto del tiempo desde la eternidad (3.8-9)

</td></tr></table>
<span class="doublelist">

*Es Creador: 1.2, 2.10, 3.4, por su palabra: 11.3
*Conoce todo: 4.13
*Dios es Padre
**Y disciplina a sus hijos en amor: 12.7
*Habló por los profetas y sigue hablando por su Hijo: 1.1-2
*Habla por las Escrituras: 1.3, etc
*Es la fuente de paz: 13.20
*Elige a los sacerdotes: 5.4-6
*Confirmó el evangelio con señales milagrosas: 2.3-4
*Servir a Dios es el propósito del hombre: 9.14
*Resucitó a Jesús: 13.20
*Es el Juez de todos: 4.12, 10.31,12.23, 13.4
*Por su gracia Cristo murió 

</span>
<span class="doublelist">

*Es Padre: 1.27, 3.9
*Dador de la ley: 4.12
*Dador de dádivas: 1.17
*Juez: 2.12-13, 4.12, 5.9
*Es uno, 2.19; generoso, 1.5; celoso, 4.5; se opone a los orgullosos, 4.6; misericordioso,  4.6, 5.11.

</span>
|bluealtrows|k
|1.19-20|Por esto, mis amados hermanos, todo hombre sea pronto para oír, tardo para hablar, tardo para airarse; porque la ira del hombre no obra la justicia de Dios.|
|3.9|Con ella bendecimos al Dios y Padre, y con ella maldecimos a los hombres, que están hechos a la semejanza de Dios.|
|3.14-18|Pero si tenéis celos amargos y contención en vuestro corazón, no os jactéis, ni mintáis contra la verdad; porque esta sabiduría no es la que desciende de lo alto, sino terrenal, animal, diabólica. Porque donde hay celos y contención, allí hay perturbación y toda obra perversa. Pero la sabiduría que es de lo alto es primeramente pura, después pacífica, amable, benigna, llena de misericordia y de buenos frutos, sin incertidumbre ni hipocresía. Y el fruto de justicia se siembra en paz para aquellos que hacen la paz.|
|4.1-2|¿De dónde vienen las guerras y los pleitos entre vosotros? ¿No es de vuestras pasiones, las cuales combaten en vuestros miembros? Codiciáis, y no tenéis; matáis y ardéis de envidia, y no podéis alcanzar; combatís y lucháis, pero no tenéis lo que deseáis, porque no pedís.|
|4.11|Hermanos, no murmuréis los unos de los otros. El que murmura del hermano y juzga a su hermano, murmura de la ley y juzga a la ley; pero si tú juzgas a la ley, no eres hacedor de la ley, sino juez.|
|5.9|Hermanos, no os quejéis unos contra otros, para que no seáis condenados; he aquí, el juez está delante de la puerta.|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
<table class="altgray"><tr><td>

    En Apocalipsis 2.10 Jesús quiere advertir a los Cristianos en Esmirna que se preparan para ser encarcelados y hasta martirizados. No es claro si los diez días se deben tomar literalmente o simbólicamente. Hablar de encarcelamiento implica que las autoridades políticas se involucrarán.

</td></tr><tr><td>

    Apocalipsis 6.9-11 describe el clamor para la venganza de los "que habían sido matados por la palabra de Dios y el testimonio que habían soportado" (Aune)

</td></tr><tr><td>

    "La multitud innumerable en vestiduras blancas descrita en Apocalipsis 7.9 consiste en las personas que han salido de (es decir, murieron en) la gran tribulación (7.14)." (Aune)

</td></tr><tr><td>

    En Apocalipsis 11.7-8 lla bestia mata a los dos testigos.

</td></tr><tr><td>

    En Apocalipsis 12.11 los santos vencieron al dragón por la sangre del Cordero y su fiel testimonio de él hasta el punto de morir.

</td></tr><tr><td>

    En Apocalipsis 13.7 se da poder a la bestia para hacer guerra contra los santos y vencerlo.

</td></tr><tr><td>

    Apocalipsis 14.13 declara una bienaventuranza sobre los que "desde este punto mueren en el Señor".

</td></tr><tr><td>

    En Apocalipsis 16.6 un ángel anuncia que es justo y apropiado que Dios derramó las copas de juicio sobre los seguidores de la bestia: tienen que tomar sangre porque ellos derramaron la sangre de los profetas y los santos.

</td></tr><tr><td>

    En Apocalipsis 17.6 la ramera está borracha con la sangre de los santos y de los testigos de Jesús.

</td></tr><tr><td>

    Apocalipsis 18.24: "En ella se halló la sangre de los profetas y de los santos y de todos los que han sido muertos en la tierra."

</td></tr><tr><td>

    Apocalipsis 19.2 dice que Dios vengará la sangre de sus siervos.

</td></tr><tr><td>

    Apocalipsis 20.4 habla de personas decapitadas por su fidelidad y su testimonio de Jesús.

</td></tr></table>

<span class="source">Fuente: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997);</span>
//    Fuente: The Greek New Testament (UBS, 4a edición), comparado con Old Testament Quotations and Allusions in the New Testament (una herramienta del software bíblico Logos 4).//

<table class="altgray"><tr><td>

En Apocalipsis 2.6 Jesús dice que aborrece a los nicolaítas. Esto es similar a Salmo 139.21, donde Dios dice que aborrece los enemigos de su pueblo.

</td></tr><tr><td>

En Apocalipsis 2.7 Jesús promete que el que vence comerá del árbol de la vida en el paraíso de Dios.

* El arbol de la vida se ubica en el huerto de Edén en Génesis 2.9.
* Se quita el acceso de Adán y Eva al árbol en Génesis 3.22 y 3.24.
* Ezequiel 28.13 compara el rey de Tiro a un querub en Edén “el paraíso de Dios”.
* Ezequiel 31.8-9 compara el Faraón de su día a un árbol con el cual ningún árbol en Edén, el huerto de Dios, se puede comparar.

</td></tr></table>
    //Fuente: The Greek New Testament (UBS, 4a edición), comparado con Old Testament Quotations and Allusions in the New Testament (una herramienta del software bíblico Logos 4).//

<table class="altgray"><tr><td>

En Apocalipsis 2.8 Jesús dice que él es el Primero y el Postrero. Esto alude a Isaías 44.6 y 48.12, donde Dios dice que es el Primero y el Postrero.

</td></tr><tr><td>

En Apocalipsis 2.10 Jesús dice a la iglesia en Esmirna que él la probará por diez días. Esto podría ser una ilusión a Daniel 1.12 y 1.14, donde Daniel pregunta al oficial para probarlo a él y a sus amigos por diez días con un dieta especial.

</td></tr></table>
<table class="altgray"><tr><td>

    Eusebio, en su Historia eclesiástica, cita a Papías, un discípulo del apóstol Juan, escribiendo alrededor de 120 d.c: "Y si alguien llego a venir que había sido un seguidor de los ancianos, yo investigaría en cuanto a los discursos de los anciando, lo que Andrés o Pedro había dicho, o lo que Felipe, o lo que Tomás o Jacobo, o lo que Juan o Mateo o cualquier otro de los discípulos del Señor [dijo]; y las cosas que Aristión y Juan el anciano, discípulos del Señor, dicen." Esta cita parece distinguir el apóstol Juan de un hombre llamado 'Juan el anciano.'

</td></tr><tr><td>

    Dionisio, un obispo del tercer siglo, afirmó que hubo dos líderes cristianos llamados Juan, y dos tombas que alegaban ser la tumba de Juan.

</td></tr></table>

<span class="source">Fuentes: David E. Aune, Word Biblical Commentary, Vol. 52: Revelation 1-5. (Waco, TX: Word, 1997); G. R. Beasley-Murray, “Revelation, book of”, in Dictionary of Later New Testament Developments. (Downer’s Grove, IL: ~InterVarsity Press, 1997); Robert H. Mounce, New International Commentary on the New Testament: The Book of Revelation, Revised Edition. (Grand Rapids: Wm. B. Eerdmans, 1998).</span>
<table class="altgray"><tr><td>

    Un grupo cristiano marginal de la segunda mitad del segundo siglo llamado los Alogoi rechazaba tanto el Evangelio de Juan como el libro de Apocalipsis. Los Alogoi alegaban que Apocalipsis fue escrito por el hereje gnóstico Cerinto. Gayo, un prebítero en Roma en el segundo y tercer siglo, también creía que Cerinto escribió Apocalipsis, pasando su obra como si fuera apostólica. No es claro si Gayo tuvo alguna conexión con los Alogoi.

</td></tr><tr><td>

    En 1965 J. M. Ford propuso que hay varios niveles en Apocalipsis: que los capítulos 4-11 contienen una revelación a Juan el bautista, que los capítulos 12-19 contienen una revelación a uno de los discípulos del mismo, y que partes del marco de los primeros y últimos capítulos fueron escritos por un discípulo de Juan que se había convertido al Cristianismo. Según Aune, Ford ha cambiado su opinión desde entonces, y ella ahora afirma la unidad del libro. Aune menciona otros que creen que partes de Apocalipsis tienen un sabor más judío y menos cristiano. Aune cree que estas secciones judías han sido apropiadas y adaptadas por otros escritores cristianos.

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); ”Revelation, Book of”, by Francesca Aran Murphy, in Dictionary for Theological Interpretation of the Bible. (Grand Rapids: Baker Academic, 2005), 680-687.</span>
!!!Un propuesto quiasmo en Apocalipsis 12-20

No es un quiasmo de secciones literarias sino un quiasmo temático acerca de la ascención de la Trinidad diabólica y su destrucción.

:El dragón (12.3)<br><br>
::La bestia del mar (13.1)<br><br>
:::La bestia de la tierra (13.11)<br><br>
::::Babilonia (14.8)<br><br>
:::::Los que adoran a la bestia (14.9)<br><br>
:::::Los que adoran a la bestia (16.2)<br><br>
::::Babilonia (16.19)<br><br>
:::La bestia de la tierra (19.20)<br><br>
::La bestia del mar (19.20)<br><br>
:El dragón (20.2)

//Fuente: Mark Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), 90.//

<hr>

!!!Un Propuesto Quiasmo en Apocalipsis 17-22

:Babilonia y su juicio (cap. 17-19.10)<br><br>
::El Juez divino (19.11-16)<br><br>
:::Juicio de la Bestia y el Falso Profeta (19.17-21)<br><br>
::::1,000 años de atadura para Satanás (20.1-3)<br><br>
::::1,000 años de triunfo para los santos (20.4-6)<br><br>
:::El juicio de Gog y Magog (20.7-10)<br><br>
::El Juez divino (20.11-15)<br><br>
:La Nueva Jerusalén y su vindicación (21.1-22.5)

//Fuente: R. J. McKelvey, The Millenium and the Second Coming, en Studies in the Book of Revelation (ed. Steve Moyise; NY: T & T Clark, 2001), 95.//
Hay cinco doxologías en Apocalipsis:

|bluealtrows|k
|1.6|a él sea gloria e imperio por los siglos de los siglos. Amén.|
|4.9|Y siempre que aquellos seres vivientes dan gloria y honra y acción de gracias al que está sentado en el trono, al que vive por los siglos de los siglos|
|5.13|Al que está sentado en el trono, y al Cordero, sea la alabanza, la honra, la gloria y el poder, por los siglos de los siglos.|
|7.12|La bendición y la gloria y la sabiduría y la acción de gracias y la honra y el poder y la fortaleza, sean a nuestro Dios por los siglos de los siglos. Amén.|
|19.1|¡Aleluya! Salvación y honra y gloria y poder son del Señor Dios nuestro;|

|bluealtrows|k
|!2.5|Pero el que guarda su palabra, en ese verdaderamente el amor de Dios se ha perfeccionado; por esto sabemos que estamos en él.|
|!2.15|No améis al mundo ni las cosas que están en el mundo. Si alguno ama al mundo, el amor del Padre no está en él...|
|!3.1|Mirad cuál amor nos ha dado el Padre, para que seamos llamados hijos de Dios; por esto el mundo no nos conoce, porque no lo conoció a él.|
|!3.16|En esto hemos conocido el amor, en que él puso su vida por nosotros; también nosotros debemos poner nuestras vidas por los hermanos.|
|!4.7-12|Amados, amémonos unos a otros, porque el amor es de Dios. Todo aquel que ama es nacido de Dios y conoce a Dios. El que no ama no ha conocido a Dios, porque Dios es amor. En esto se mostró el amor de Dios para con nosotros: en que Dios envió a su Hijo unigénito al mundo para que vivamos por él. En esto consiste el amor: no en que nosotros hayamos amado a Dios, sino en que él nos amó a nosotros y envió a su Hijo en propiciación por nuestros pecados. <br>Amados, si Dios así nos ha amado, también debemos amarnos unos a otros. Nadie ha visto jamás a Dios. Si nos amamos unos a otros, Dios permanece en nosotros y su amor se ha perfeccionado en nosotros.|
|!4.16-17|Y nosotros hemos conocido y creído el amor que Dios tiene para con nosotros. Dios es amor, y el que permanece en amor permanece en Dios y Dios en él. En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo.|
|!4.19|Nosotros lo amamos a él porque él nos amó primero.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<span class="doublelist">

Varias veces Pedro vuelve al tema del amor fraternal que los Cristianos deben tener entre sí.

*1.22 dice que los primeros lectores ya habían logrado tener un amor sincero. Pero los exhorta a que profundicen su amor más y más, y de "corazón puro".
*2.1 es el otro lado de 1.22: es una lista de cosas opuestas al amor que los creyentes deben expulsar de sus vidas.javascript:;
*2.17 es una simple exhortación a que amen a sus hermanos en Cristo.
*3.8-9 contiene varias exhortaciones al amor: los Cristianos deben tener un mismo sentir, deben ser compasivos, deben practicar el amor fraternal, deben ser misericordiosos y amigables, y deben bendecirse en vez de devolver mal por mal.
*En 4.8-10 Pedro les exhorta a un amor que siempre va profundizándose. Y da ejemplos específicos de ese amor: la hospitalidad que deben practicar, y el servicio que deben brindar unos a otros con el uso de sus dones espirituales.
*5.5 no menciona el amor directamente, pero en este versículo Pedro dice que sus lectores deben practicar la sumisión mútua y la humildad entre sí.

!!!Palabras para el amor / amar

La palabra 'amor / amar' (ἀγάπη, ἀγαπάω) aparece siete veces en 1 Pedro. Nótese también el sinónimo φιλαδελφία en 1.22.

|bluealtrows|k
|1.8|"Ustedes lo aman a pesar de no haberlo visto;" (NVI)|
|1.22|". . . para el amor fraternal (φιλαδελφία) no fingido . . ." (NVI) <br>". . . amaos (ἀγαπάω) unos a otros entrañablemente . . ." (NVI)|
|2.17|". . . amen a los hermanos . . ." (NVI)|
|3.10|". . . el que quiera amar la vida . . ." (NVI)|
|4.8 (2x)|"Sobre todo, ámense los unos a los otros profundamente . . ." (NVI)<br>". . . porque el amor cubre multitud de pecados." (NVI)|
|5.14|"Saludaos unos a otros con ósculo de amor." (~RV60)|

@@.source Fuente: Geisler@@

</span>
Parece que hubo esta crítica del Cristianismo de parte de algunos Judíos del primer siglo: “Jesús no podía ofrecerse como sacrificio en la cruz porque no era sacerdote legítimo. Los sacerdotes vienen de la tribu de Leví, pero Jesús vino de la tribu de Judá. Así que la cruz no significa nada. Solo era la muerte de un farsante.”

El autor de Hebreos escucha esta crítica y estudia las Escrituras para la respuesta. Se da cuenta que Salmo 110 es un salmo mesiánico. Y en este salmo, encuentra estas palabras de Dios al Mesías: “Juró Jehová y no se arrepentirá: «Tú eres sacerdote para siempre, según el orden de Melquisedec».” De esta declaración, el autor deduce cuatro cosas:

<span class="doublelist">

#El Mesías será un sacerdote además de ser un rey.
#Será un sacerdote según el orden de Melquisedec. Esto parece eliminar el problema de que Jesús no es de la tribu de Leví.
#Su sacerdocio será “según” o como el de Melquisedec, es decir un sacerdocio eterno. Esto resuelve el problema de los sacerdotes levíticos, que mueren y tienen que ser reemplazados a cada rato.
#Este hecho es seguro, porque Dios lo juró, y Dios no puede mentir.

</span>

De los Salmos el autor pasa a Génesis 14 para aprender algo más acerca de Melquisedec. Encuentra los siguientes datos:

<span class="doublelist">

*Su nombre y título parecen ser simbólicos. Su nombre, Melquisedec, quiere decir “Rey de Justicia”. Su títluo es el rey de Salem, que significa “Rey de Paz”. Parece que Melquisedec es más que un personaje histórico.
*Melquisedec es rey de Salem (¿¿Jerusalén??) y sacerdote. Esto concuerda con Salmo 110, que habla de un rey, el Mesías, que también es sacerdote.
*Melquisedec tiene autoridad religiosa sobre Abraham en dos sentidos:
**Bendice a Abraham. El que tiene más autoridad bendice al que tiene menos.
**Abraham le da el diezmo. Melquisedec tiene la autoridad de recibir el diezmo de Abraham.
*En contraste con la gran mayoría de las personas mencionadas en Génesis, no hay mención de la genealogía o los padres de Melquisedec, ni de su muerte. 

</span>

Melquisedec no tiene principio ni fin, por lo menos explicitamente. Esto apoya lo que dice Salmo 110, que el sacerdocio de Melquisedec es eterno. La única cosa que el autor puede concluir cuando compara Gen. 14 con Sal. 110 es que Melquisedec no tiene principio (padres) o fin (muerte). De alguna forma misteriosa, Melquisedec es un sacerdote eterno.

Después de reflexionar, el autor deduce otra cosa: Levi estuvo dentro de las entrañas de Abraham cuando Abraham ofreció su diezmo, y cuando fue bendecido por Melquisedec. Esto quiere decir que Melquisedec tiene más autoridad religiosa que Leví. Su sacerdocio tiene mas autoridad que el de Leví.

Así que Génesis relata algo que sucedió siglos antes del sacerdocio levítico en la ley de Moisés, y Salmo 110 fue escrito siglos después de la ley. Y estos dos textos del Antiguo Testamento se concuerdan que:

<span class="doublelist">

*Hay precedente bíblico para un rey que es un sacerdote legítimo.
*Hay precedente para un sacerdote legítimo fuera de la tribu de Leví.
*El sacerdocio de Melquisedec es eterno; no tiene principio ni fin. Y Salmo 110 dice que el Mesías pertenece a este sacerdocio.

</span>

Jesús, el sacerdote según el orden de Melquisedec, reemplaza al sacerdocio levítico:

<span class="doublelist">

*porque es un sacerdote sin pecado que no tiene que ofrecer sacrificios para sus propios pecados,
*porque es un sacerdote eterno que siempre vive para interceder por nosotros,
*porque ofrece un mejor sacrificio,
*porque ofrece su sacrificio una vez para siempre,
*porque lo ofrece en el templo celestial,
*porque es mediador de un nuevo pacto, predicho en Jeremías 31.

</span>

La aplicación del autor de Hebreos para sus lectores viene en 10.19-25: Tenemos acceso directo con Dios por medio de este sacerdote perfecto. Así que debemos acercarnos a Dios con confianza y ayudarnos mutuamente para no perder la fe bajo la persecución.

@@.source Fuente: estudio personal del autor.@@
    Jesús llama a cuatro de las siete iglesias de capítulos 2-3 al arrepentimiento (2.5, 2.16, 3.3, 3.19)

<hr>

    Jesús espera a que sus enemigos se arrepientan, pero no lo hacen (2.21-22, 9.20-21, 16.9-11) Fuente: estudio personal del autor
<table class="altgray"><tr><td>

Las cartas se llaman primera, segunda y tercera de 'Juan', pero en realidad estas cartas son anónimas.

</td></tr><tr><td>

1 Juan no dan mucha información acerca de su autor. El autor se limita en decir que fue testigo ocular de Jesús (1.1-3, 4.14).

</td></tr><tr><td>

El tono de autoridad que encontramos en estas cartas da la impresión de que es un líder eclesiástico muy alto.

</td></tr><tr><td>

Hay muchos paralelos entre todas las cartas de Juan y el cuarto Evangelio. No hay mucha duda que el mismo autor los escribió. Así que la autoría de estas cartas está relacionada con la autoría del Evangelio de Juan.

</td></tr><tr><td>

La iglesia antigua no atribuyó la autoría de las cartas de Juan a nadie excepto al apóstol Juan.

<span class="doublelist">

* Varios libros aluden a 1 Juan sin mencionar el autor. Pero el primer autor que cita 1 Juan y se refiere específicamente a Juan como el autor es Papías, a mediados del segundo siglo, citado en Eusebio.
* Clemente de Alejandría se refiere a la “epístola mayor” del apóstol Juan.
* Ireneo menciona las cartas de 2 y 3 Juan. Orígenes (murió 253 d.c.) es el primero en mencionar todas las tres epístolas.

</span>

</td></tr><tr><td>

El autor se presenta en 2 y 3 Juan como un anciano. Pero este dato no mina la posibilidad de que el apóstol Juan las escribió. Podemos notar que el apóstol Pedro usó el título de anciano para referirse en 1 Pedro 5.1. Papías, un autor antiguo, se refirió a los apóstoles como ancianos.

</td></tr></table>
!!!Evidencia interna

1 Pedro 1.1 afirma que Pedro fue el autor. 5.1 dice que fue un anciano y un testigo de los padecimientos de Cristo. Es interesante notar también los paralelos entre 2.20-25 y el Evangelio de Marcos 8.34, 10.32, 10.45, 14.27, 14.65.

<hr>

Además, hay ''similitudes entre esta carta y los discursos de Pedro en Hechos:''

*1.17 con Hch. 10.34 (Dios no hace acepción de personas) 
*2.7-8 con Hch. 4.10-11 (piedra)
*2.24 con Hch. 10.3, 9 (madero)
*4.14, 16 con Hch. 3.6, 3.16, 4.10, 4.12, 5.41, 10.43 (el “nombre” de Cristo)
*1.10-12 con Hch. 3.18, 24 (Cristo cumplió la profecía)

<hr>

Harrison, 402, menciona algunos ''toques biográficos en la carta'' que concuerdan con el retrato de Pedro en los Evangelios. Las dos sobresalientes son el uso de la palabra piedra (el significado del sobrenombre Pedro que Jesús le dio), y la similitud entre 2.25, 5.2-3 con Jn. 21—los pastores que alimentan sus rebaños.

<hr>

!!!Evidencia externa

2 Pedro 3.1 dice que es la “segunda” carta de Pedro, así que es el primer testimonio que tenemos de 1 Pedro. Nadie debatía que Pedro fue el autor hasta tiempos modernos. No hubo otra teoría acerca del autor de esta carta. 

<hr>

!!!Objeciones contra Pedro

Han habido varias objeciones de personas que dicen que Pedro no pudiera haber sido el autor de 1 Pedro. Pero todas estas objeciones han recibido respuestas razonables. Concluimos que estas objeciones contra su autoría, alistadas abajo con respuestas para cada una, no tienen suficiente peso para rechazar a Pedro como el autor de esta carta.

''Objeción: La carta habla de la persecución.'' No hubo persecución oficial en el imperio romano hasta Domiciano y Trajano. Pedro ya habrá muerto antes de los tiempos de persecución.

*Respuesta: Pero sí hubo persecución local desde un tiempo muy temprano. 
*La carta nos llama a imitar los sufrimientos de Cristo, no su muerte. No habla del martirio.

<hr>
 
''Objeción: La carta demuestra excelente griego.'' Pero Pedro era un pescador iletrado (Hch. 4.13). No pudo haber escrito esta carta.

*Respuesta: Es muy probable que Pedro y los de Palestina en general sabían el griego desde niñez.
*El griego es bueno, pero no debemos exagerar su calidad.
*Respuesta: Silvano era un amanuénsis (5.12), y pudo haberle ayudado con el griego.

<hr>

''Objeción: Las citas al Antiguo Testamento en 1 Pedro son de la [[LXX]]. No son adaptaciones de una versión en arameo, como esperaríamos de una persona de Palestina.''

*Respuesta: Cuando esta carta fue escrita, Pedro ya había vivido y ministrado entre personas de habla griega por décadas. Y la Septuaginta era la versión más usada por los Gentiles. Es completamente razonable creer que Pedro utilizó la versión más común del AT cuando citaba el AT para lectores de habla griega.

<hr>

''Objeción: La teología de 1 Pedro depende mucho de Pablo.''

*Apoyo: ¿2.13-17 y Romanos 13.1-7?
*Apoyo: Tiene códigos de hogar como algunas cartas de Pablo
*Respuesta: Por supuesto. Enseñaban el mismo evangelio y usaban la tradición cristiana común de la iglesia primitiva.
*Respuesta: Si Silvano ayudó escribir la carta, él sin duda, habiendo sido compañero de Pablo, impartiría un toque paulino a la carta.
*Respuesta: No son muy convincentes los intentos de algunos eruditos modernos de proponer una supuesta división profunda entre un Cristianismo paulino y un Cristianismo hebreo, representado por Pedro y Jacobo.

<hr>

''Objeción: ¿Si fue Pedro, por qué no incluyó memorias de la vida de Jesús?''

*Respuesta: Porque aparentemente no fue su propósito.

<hr>

''Objeción: 1 Pedro casi no habla del Espíritu Santo. ¿Cómo podría un líder cristiano de esa época haber escrito tan poco acerca del Espíritu?''

*Respuesta: Colosenses y 2 Tesalonicenses solo mencionan el Espíritu una vez c/u. 1 Pedro lo menciona cinco veces.

<hr>

Si se dice que 1 Pedro es pseudónimo, la pregunta surge: ¿Por qué escribir esta carta en nombre de Pedro? Contiene solamente material que cualquier creyente de la iglesia primitiva hubiera aceptado sin la necesidad de acudir a la autoridad de un apóstol. ¿Y porque un autor pseudónimo nombraría las provincias mencionadas en 1.1? No hay otra conexión existente entre Pedro y esos locales.

@@.source Fuentes: Carson, Moo y Morris, 421-424; Elwell y Yarbrough, 362; Harrison, 401-405; Kistemaker, 5-10; Michaels, WBC;@@
<table class="altgray"><tr><td>

El autor de 3 Juan no indica ni su nombre, ni su lugar, ni nada acerca de si mismo excepto su título "el anciano." Así que 3 Juan es una carta anónima.

</td></tr><tr><td>

Se ve que el autor era un líder eclesiástico que tenía autoridad y esperaba que su autoridad fuera respetada.

</td></tr><tr><td>

La iglesia cristiana tradicionalmente ha dicho que Juan el hijo de Zebedeo fue el autor del Evangelio de Juan y las tres cartas de Juan.

</td></tr><tr><td>

El presente autor acepta tentativamente que Juan fue el autor de 3 Juan. Pero no es necesario aceptar a Juan como el autor para creer en la inspiración divina y la canonicidad de esta carta.

</td></tr></table>
El antiguo pacto fue abolido y reemplazado: 7.22, 8.6-10, 8.13, 9.1, 4, 15, 18, 20, 10.16, 10.29, 12.23, 13.20.

<hr>

Esto no fue para condenar a este pacto, sino para mostrar que aunque tenía su validez en el pasado, ya no lo tiene. Cristo y lo que trae son “mejores”: 1.4, 6.9, 7.7, 19, 22; 8.6; 9.23, 10.34, 11.16, 11.35, 11.40, 12.24

<hr>

!!!Contrastes en Hebreos 7

|bluealtrows|k
|!Melquisedec y/o Cristo|!Leví / Aarón / Los sacerdotes|
|Recibió diezmos de Abraham (4-10)|Pagaron diezmos por medio de Abraham (4)|
|Dio la bendición|Recibió la bendición (6)|
|Vive para siempre|Murió (8, 23-24)|
|Libre de la ley imperfecta|Ligado a esa ley (11)|
|Puede perfeccionar a las personas|No lo pueden hacer (19)|
|Con juramento, 20-22|Sin juramento (20)|
|Un solo sacerdote, 23-25|Muchos sacerdotes (23-24)|
|Capaz de salvar|Incapaz de salvar (25)|
|Es separado del pecado, 26-28|Son pecadores (26-27)|
|Se ofreció a sí mismo, una vez|Ofrecen animals muchas veces (27)|
|Perfecto|Débil (28)|
|Divino y humano|Humano solamente|

<hr>

No es que el sistema levítico fue primero y el sacrificio de Cristo siguió su ejemplo. Al contrario, el santuario celestial y su sacrificio fueron el patrón para el sistema levítico, y el sistema levítico solo es una sombra o una copia del sistema celestial (8.5, 9.23-24). @@.source (Marshall, 612)@@

<hr>

Elwell y Yarbrough (350-351) defienden el libro de Hebreos contra la acusación que Hebreos “constituye en ataque a la religión del AT.” Ellos ofrecen los siguientes argumentos en contra:

*Hebreos usa varios ejemplos de personas del AT
*Hebreos se refiere al AT muchas veces a través de citas y alusiones
*Según Hebreos la falla del antiguo pacto no era el pacto en sí, sino las personas bajo el pacto que no lo cumplieron (8.8, “Dios los encontró imperfectos”; cf. Jer. 31.32, “ellos invalidaron mi pacto”).

<hr>

Laansma (279) nota que el contraste no es entre lo material y lo inmaterial. La sangre física y el cuerpo físico de Jesucristo reemplazan los sacrificios físicos de animales.
|bluealtrows|k
|!La novia del Cordero|!La ramera|
|Novia del Cordero (19.7, 21.9)|Madre de rameras (17.5)|
|Vestida de lino fino, limpio y resplandesciente (19.8, 21.2)|Vestida de púrpura y escarlata (17.4)|
|Relacionada con la ciudad santa (21.2)|Relacionada con la gran ciudad de Babilonia (17.5, 17.18)|
|Se sienta sobre una montaña (21.10)|Se sienta sobre siete colinas (17.9)|
|Adormada con oro y joyas preciosas (21.11, 21.18-21)|Adormada con oro y joyas preciosas (17.4, 18.16)|
|Todo lo inmundo es prohibido (21.27)|Habitación de toda cosa inmundo (18.2)|
|Toma del río del agua de vida (22.1)|Toma de la copa de abominaciones (17.4)|
|Vista por Juan en los nuevos cielos y la nueva tierra (21.2, 21.10)|Vista por Juan en el desierto (17.3)|
|bluealtrows|k
|!El Cordero|!La bestia del agua|
|Comparte el poder, la autoridad y el trono de Dios (3.21, 5.6, 7.17, 12.10, 22.1, 22.3)|Comparte el poder, la autoridad y el trono del dragón (13.2, 13.7, 16.10, 17.13)|
|Triunfa sobre sus enemigos (5.5|Triunfa sobre los santos (11.7, 13.7)|
|Inmolado pero ahora vive (5.6)|Tenía una herida mortal pero fue sanado (13.3, 13.12)|
|Reina sobre toda tribu, lengua, pueblo y nación (5.9, 7.9)|Reina sobre toda tribu, lengua, pueblo y nación (13.7, cf. 11.9)|
|Toda criatura lo adora (5.13)|Los moradores de la tierra lo adoran (13.4, 13.8, 13.12, 13.15, 14.11, 16.2, 19.20)|
|Sella a sus seguidores con una marca (7.3, 9.4, 14.1, cf. 22.4)|Sella a sus seguidores con una marca (13.16, 14.9, 20.4)|
|Tiene varios nombres exaltados (19.11, 19.13, 19.16)|Tiene nombres blasfemos (13.1, 17.3)|
|Tiene muchas diademas (19.12)|Tiene diez diademas (13.1)|
|bluealtrows|k
|!Los dos testigos|!La bestia de la tierra|
|Reciben del Cordero (11.3)|Recibe autoridad de la primera bestia (13.12)|
|Son profetas (11.3, 11.6, 11.10)|Es falso profeta (16.13, 19.20, 20.10)|
|Dos olivos, dos candelabros (11.4)|Dos cuernos (13.11)|
|Fuego sale de sus bocas (11.5)|Causa que fuego salga del cielo (13.13)|
|Hacen grandes milagros (11.6)|Hace grandes milagros (13.13-14, 19.20)|
|Atormentan a los moradores de la tierra (11.10)|Engaña a los moradores de la tierra (13.14, 19.20)|
|Reciben el aliento de vida de Dios (11.11)|Da aliento de vida a la imagen de la primera bestia (13.15)|
|Llevados al cielo (11.12)|Eschado al lago de fuego (19.20, 20.10)|

@@.source Fuente: Wilson, 57@@

Además, la bestia de la tierra, o el falso profeta, parece ser una imitación del Espíritu Santo. Esta bestia no dirige la atención a si misma sino a la primera bestia, de la misma manera en que el Espíritu Santo dirige nuestra atención no a si mismo sino a Cristo (Juan 16.13-14). Además, la bestia da vida con su aliento, e inspira la profecía, dos otras funciones del Espíritu Santo.
<table class="altgray"><tr><td>

    Estos son los versículos de Apocalipsis que hablan del culto a la bestia y su marca. Estos versículos muestran la influencia del culto imperial sobre el libro: Apocalipsis 13.4, 13.14-17, 14.9, 15.2, 16.2, 19.20, 20.4.

</td></tr><tr><td>

    El culto a la ciudad de Roma como diosa empezó temprano en Asia. Empezó en el segundo siglo antes de Cristo, en 125 A.C. en Esmirna, y en 29 A.C. en Pérgamo (Thielman). Hay monedas que muestran a la diosa Roma "reclinándose sobre las siete colinas donde Roma fue construida." (Koester).

</td></tr><tr><td>

    Julio César aceptó el culto a si mismo. Augusto fue cuidadoso dentro de Roma, peron en las provincias aceptaba que dedicaran templos al culto de él. Calígula exigía homenaje a sus estatuas (Mounce).

</td></tr><tr><td>

    Por siglos se creía que el emperador Domiciano insistía ser llamado "nuestro Señor y Dios" (dominus et deus). Pero ahor sabemos que esto fue una acusación contra él de parte de personas escribiendo después de su reino, personas con fuertes motivos políticos para atacarlo. Leonard Thompson investigó las acusaciones contra Domiciano y descubri+o un reporte que dice que "cuando Domiciando fue aclamado Dominus en una de sus fiestas de Saturnalia, el prohibió que lo aclamaran de esta manera (Statius Silvae 1.6, 81–84). No hay referencias a Domiciano como dominus et deus en las inscripciones, monedas o medallones del tiempo de Domiciano. (Aune)

</td></tr><tr><td>

Todas las siete ciudades de Apocalipsis 2-3 tenían "altares al emperador y un sistema de sacerdocios imperiales" (Barr), y por lo menos tres de estas ciudades tenían templos imperiales en ese tiempo:

* Augusto ordenó la construcción en Pérgamo en honor a Roma y a su padre Julio César, en 29 A.C.
* Tiberio ordenó la construcción de un templo imperial en los años 20 D.C. en Esmirna. Este templo fue el centro del culto imperial de toda la provincia.
* Hubo dos o tres templos imperiales en Éfeso, incluyendo uno que Domiciano ordenó ser construido.

</td></tr><tr><td>

    No fue el imperio mismo que presionaba a las personas alabar al emperador. Fueron las ciudades en Asia que presionaban. Las ciudades del imperio competían entre sí para recibir favores de Roma. Por esta razón hubo fuerte presión demostrar la lealtad de la ciudad al emperador, y el culto imperial era una manera importante de mostrar tal lealtad.

</td></tr><tr><td>

    No debemos imaginar que las autoridades locales obligaban directamente a toda persona que rinda culto al emperador y otros dioses. En realidad, tal participación fue una parte normal de eventos políticos y cívicos, de reuniones de sindicatos profesionales y asociaciones de comercio, y otros eventos cívicos. Sería notable a todos los presentes si alguien no participara. La mayoría de la presión era la presión de conformarse a la mayoría, porque retirarse tendría adversos efectos sobre el trabajo, el prestigio, las amistades, y los contactos comerciales de uno. Y siempre había el riesgo de provocar una protesta a nivel local, que atraería la atención de las autoridades locales y terminaría en consecuencias legales.

</td></tr><tr><td>

    "[El culto imperial] involucraba templos provinciales y municipales, estatuas, altares (tanto privados como públicos), y ritos al emperador en los templos de otros dioses. Actividades incluían eventos como festivales, desfiles, conciertos, juegos deportivos, espectáculos de gladiadores, sacrificios, y ritos cívicos y del hogar." "Además, hubo fuentes, baños, pórticos, y estatuas dedicadas al emperador a través de los espacios tanto privados como públicos. El culto imperial era un hecho pervasivo en la vida del público de Juan." (Barr)

</td></tr><tr><td>

    La presión de adorar al emperador era tan fuerte que hasta los Judíos ofrecían sacrificios a Dios dos veces al día en el templo en Jerusalén por el bienestar del emperador. (Thielman, 686)

</td></tr><tr><td>

    Según Kenneth Cukrowski, las oraciones no eran parte del culto imperial, pero los himnos, imágenes y títulos honorarios sí. Dice que hubo animales sacrificados a otros dioses en nombre de los emperadores pasados y presentes, pero la evidencia no es clara si ofrecieron sacrificios a los emperadores mismos.

</td></tr></table>

<span class="source">Fuentes: David E. Aune, Word Biblical Commentary, Vol. 52: Revelation 1-5. (Waco, TX: Word, 1997), David L. Barr, “John’s ironic empire” in Interpretation 63 no 1 Ja 2009, pp. 20-30, Kenneth L. Cukrowski, “The influence of the emperor cult on the book of Revelation”, in Restoration Quarterly 45 no 1-2 2003, p. 51-64; Craig R. Koester, “Revelation’s visionary challenge to ordinary empire”, in Interpretation 63 no 1 JA 2009, 5-18; Robert H. Mounce, New International Commentary on the New Testament: The Book of Revelation, Revised Edition. (Grand Rapids: Wm. B. Eerdmans, 1998), Frank Thielman, Teología del Nuevo Testamento. (Miami: Vida, 2007)</span>
<table class="altgray"><tr><td>

Gayo es un nombre común en el Nuevo Testamento. Kistemaker menciona algunos Gayos mencionados en el NT:

*Un Gayo de Macedonia: Hechos 19.29
*Un Gayo de Derbe: Hechos 20.4
*Un Gayo de Corinto; Romanos 16.23 y 1 Corintios 1.14

</td></tr><tr><td>

El anciano no nos da suficiente información para identificar el Gayo de esta carta con otro Gayo. No sabemos nada de su lugar de origen, su familia, o su oficio.

</td></tr></table>
El libro de Santiago menciona el diablo y los demonios en tres lugares:

|bluealtrows|k
|2.19|Los demonios reconocen la unidad de Dios|
|3.6|La lengua es encendida por el infierno|
|4.7|El diablo huye cuando es resistido|
<span class="doublelist">

*De la lengua, 1.27, 3.2ff
*Del enojo, 1.19-20
*De los deseos, 4.1-2
*Paciencia, 5.7-9
*Perseverancia, 1.3, 1.12, 5.7-11, 13

</span>

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
    //Fuente: Bauckham, The Theology of the Book of Revelation//

<hr>

    El dragón engaña al mundo (12.9, 20.2-3, 7-8)

<hr>

    La segunda bestia (el falso profeta también engaña (13.14, 19.21)

<hr>

    Babilonia engaña en 18.23

<hr>

    En contraste, acerca de los redimidos, Apocalipsis dice, "En sus bocas no fue hallada mentira" (14.5)
|bluealtrows|k
|1.16|Amados hermanos míos, no erréis.|
|1.22|Sed hacedores de la palabra y no tan solamente oidores, engañándoos a vosotros mismos.|
|1.26|Si alguno se cree religioso entre vosotros, pero no refrena su lengua, sino que engaña su corazón, la religión del tal es vana.|
,,Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI,,
<span class="doublelist">

*Es el Espíritu de la verdad (5.6)
*El Espíritu testifica (5.6, 5.7)
*El Espíritu fue dado a los creyentes por Dios (o por Jesucristo). Su presencia en ellos les ayuda saber que permanecen en Dios y Dios en ellos (3.24, 4.13).
*También hay ''espíritus'' que vienen de Dios. Ellos confiesan que Jesucristo ha venido en la carne (4.2). Un espíritu así es un espíritu de verdad (4.6). 

</span>
El Espíritu Santo no recibe mucho énfasis en 1 Pedro. Pedro lo menciona solamente seis veces:

<span class="doublelist">

#En 1.2, el Espíritu es el que santifica a los elegidos.
#Según 1.11, el Espíritu habitaba en los profetas del Antiguo Testamento, indicándoles datos importantes acerca de los sufrimientos de Cristo y su exaltación.
#En 1.12, los que proclaman las buenas nuevas de Jesucristo lo hacen por el Espíritu, quien fue enviado desde el cielo.
#Algunos comentaristas no tratan a 3.18-19 como una referencia al Espíritu Santo. Dicen que en 3.18 hay un contraste entre la carne física de Jesús y su espíritu humano. Sin embargo, por razones mencionadas en las notas exegéticas, es preferible entender este texto como una referencia al Espíritu. En 3.18-19, hay un contraste entre el dominio de la carne y el dominio del Espíritu. Pedro dice que Jesús murió en cuanto a su conexión con el mundo carnal, pero fue vivificado  Espíritu. Y en el Espíritu (o por medio de él), Jesús predicó a los espíritus que ahora están encarcelados. 
#1 Pedro 4.6 es una continuación del pensamiento de 3.18. En 3.18, Cristo murió al mundo carnal y fue vivificado al dominio del Espíritu. De la misma manera, dice Pedro en 4.6, los Cristianos fallecidos, que aceptaron al evangelio mientras vivían, fueron juzgados y menospreciados por las personas que todavía viven según la carne. Pero para Dios, estos Cristianos, aunque muertos, están vivos. Ellos viven en el dominio de (o por medio del poder de) el Espíritu. Igual como en el caso de 3.18, algunos comentaristas toman este versículo de otra manera. Dicen que los Cristianos fallecidos fueron juzgados en cuanto a sus cuerpos (su carne), pero viven en sus espíritus. Para mayor información acerca de este versículo, véase las notas exegéticas.
#Y en 4.14, los insultos que los creyentes reciben son una señal que el Espíritu glorioso de Dios reposa sobre ellos y que ellos son bienaventurados.

</span>

Pedro menciona los dones espirituales en 4.10-11, que en las cartas de Pablo son dones distribuidos por el Espíritu, pero Pedro no los conecta directamente al Espíritu Santo.

@@.source Harrison, Kistemaker, Michaels@@
Es notable que 2 Pedro habla de la santificación en cap. 1, pero con la excepción de 1.21, donde dice que el Espíritu inspiró a los profetas, esta carta no menciona al Espíritu Santo.
   //Fuentes: Bauckham, The Theology of the Book of Revelation, cap. 5; Schreiner, 501-505.//

<hr>

El libro de Apocalipsis viene de "los siete espíritus que están delante de su trono" (1.4). Esta frase aparece también en 3.1, 4.5, y 5.6.

Algunos dicen que los "siete espíritus" son siete ángeles que son prominentes en la mitología judía, pero Bauckham dice que estos siete ángeles aparecen en Apocalipsis 8.2.

<hr>

        Muchos comentaristas creen que es una alusión a Isaías 11.2: "y reposará sobre él el espíritu de Jehová: espíritu de sabiduría y de inteligencia, espíritu de consejo y de poder, espíritu de conocimiento y de temor de Jehová." En este versículo la palabra "espíritu" se conecta con Jehová y con seis cualidades, por un total de siete "espíritus".

<hr>

    Juan dice repetidamente que estaba "en el Espíritu" (1.10, 4.2, 17.3, 21.10). Son alusiones a Ezequiel 3.12, etc, donde el Espíritu lleva al profeta.

<hr>

    El Espíritu habla a las siete iglesias en las siete cartas en caps. 2-3. "El que tiene oído, oiga lo que el Espíritu dice a las iglesias" en 2.7, 2.11, 2.17, 2.29, 3.6, 3.13, 3.22. El Espíritu habla también en 14.13 y 22.17.

<hr>

    Hay una mención del "Espíritu de la profecía" en 19.10
<span class="doublelist">

*Los dones del Espíritu: 2.4
*Autor de las Escrituras: 3.7, 10.15, 9.8
*Los creyentes son partícipes del Espíritu Santo: 6.4
*Espíritu de “gracia”: 10.29
*Es eterno: 9.14

</span>
El Espíritu Santo se menciona dos veces en Judas: los inconversos no tienen al Espíritu (19), y los creyentes oran en el Espíritu (20).
El estilo griego que Juan usa en Apocalipsis es muy irregular:

<span class="doublelist">

*Juan usa ἵνα con el futuro en vez del subjuntivo.
*Juan usa el caso equivocado después de las preposiciones, verbos, etc.
*Pone el sujeto del infinitivo en el dativo en vez del acusativo.
*Usa palabras redundantes (p. ej. 2.7, 17, 18)
*Usa el negativo o el pronombre incorrecto
*Usa frases genitivas muy largas (14.10, 21.9, etc)
*Usa expresiones inusuales para el griego
*Hay otras características distintas del estilo de Apocalipsis
*Además, Juan usa varios ''semitismos'':
**Parataxis (2.2-5, 21.1-3)
**He aquí (26x)
**Cognados (9:5,7; 14:2,6; 16:8-9; 17:6; 18:6; 22:11)

</span>

@@.source Fuente: Notas del Dr. Dean Deppe.@@
''Epístola''

En términos más ámplios, 1 Pedro es una epístola, una carta del mundo greco-romano antiguo. Estas cartas tenían ciertas características distintas a una carta moderna.

Harrison (252-3) dice que las epístolas son diferentes que las cartas porque son más literarias, y son escritas con la intención ser circuladas y publicadas. En este recurso usaremos los términos “cartas” y “epístolas” como sinónimos, pero nunca debemos olvidarnos que estamos estudiando documentos del mundo antiguo, con una forma y un contexto distinto.

En particular podemos notar que el autor describe la carta como una 'exhortación' (5.12). Esta es una carta hortatoria, una carta escrita para exhortar a otros.

<hr>

''¿Liturgia o sermón para el bautismo?''

Según muchos comentaristas del pasado, comenzando con R. Perdelwitz en 1911, hay una tendencia de entender mucho de 1 Pedro como una liturgia que acompañaba el rito del bautismo, o un sermón para candidatos para el bautismo. 

''Apoyo''

*La carta probablemente incorpora varias citas de material litúrgico del primer siglo.
*Se dice que 1.13-21 son instrucciones a los candidatos para el bautismo
*Se dice que 1.22 sigue el momento del bautismo con “Habiendo purificado vuestras almas”
*Se dice que 2.1-10 es un himno
*Otra sección de exhortación sigue en 2.11-3.12
*Hay una revelación profética en 3.13-4.6
*Hay una oración final (4.7-11)

<hr>

''Objeciones''

Las teorías acerca de liturgias bautismales son muy especulativas y ya no son tan populares como en el pasado. Concluimos que estas teorías son deficientes por las siguientes razones:

*1 Pedro usa la palabra “bautismo” solo una vez, en 3.21, dentro de un paréntesis.
*La mayoría de la carta se trata del sufrimiento y la persecución. Además, hay una variedad de temas que no tienen que ver directamente con el bautismo.
*El autor describe su carta como una "exhortación" (5.12), no como una liturgia.
*Estas teorías no toman en cuenta la sección 4.12-5.14, que en estilo y vocabulario es muy parecido al resto de la carta. 

@@.source Carson, Moo y Morris, 426-427; Elwell y Yarbrough, 363; Harrison, 397-399; Kistemaker, 23; ~McKnight y Osborne, 374-377; Michaels;,,@@
2 Pedro 1.1-2 tiene la forma de una introducción a una carta. Sin embargo, podemos considerar el libro como un testamento, las últimas exhortaciones de una persona que sabe que morirá pronto. (Webb, 388)
Versículos 1-4 demuestran que formalmente, Judas es una ''epístola'' (una carta). 

<hr>

Pero el contenido es más similar a un ''sermón'':

<span class="singlelist">

*La carta contiene muchas ilustraciones, alusiones a otros documentos, y arte literario (como veremos en la siguiente sección abajo).
*La carta no contiene los elementos típicos de las cartas antiguas.
*La carta se concluye con una doxología.

</span>

<hr>

Posiblemente el contenido de esta carta fue un sermón que Judas predicó y después puso por escrito para los destinatarios originales. Otra posibilidad es que la carta representa el sermón que Judas habría predicado si hubiera estado personalmente presente en la iglesia de sus destinatarios durante la crisis de los 'hombres impíos'.
Santiago comienza como una carta (1.1). Sin embargo, el resto de la “carta” no sigue la forma de una carta. Parece ser o una serie de sermones breves, o una serie de resúmenes de sermones, puestos por escrito para compartir con un público más amplio. Algunos comentaristas han propuesto “paranesis” (exhortación) o “sabiduría” para el género de este libro. Paranesis es una fusión de diversos materiales hortatorias conectadas, no por pasos en un argumento lógico, sino por la similitud de sus temas.
<table class="altgray"><tr><td>

    Thomas Schreiner y Grant Osborne dicen que en Apocalipsis los juicios de Dios no son excesivos o injustos. Son adecuados para los grandes pecados de los enemigos de Dios elaborados en el libro. Ellos mencionan los siguientes versículos, entre otros:

</td></tr><tr><td>

        2.23: "Os daré a cada uno según vuestras obras."

</td></tr><tr><td>

        15.3: "justos y verdaderos son tus caminos, Rey de los santos."

</td></tr><tr><td>

        16.5-7: "'Justo eres tú, Señor, el que eres y que eras, el Santo, porque has juzgado estas cosas. Por cuanto derramaron la sangre de los santos y de los profetas, también tú les has dado a beber sangre, pues se lo merecen.' También oí a otro, que desde el altar decía: '¡Ciertamente, Señor Dios Todopoderoso, tus juicios son verdaderos y justos!'."

</td></tr><tr><td>

        17.6: "Vi a la mujer ebria de la sangre de los santos y de la sangre de los mártires de Jesús. "

</td></tr><tr><td>

        18.5-6: "sus pecados han llegado hasta el cielo y Dios se ha acordado de sus maldades. Dadle a ella tal como ella os ha dado y pagadle el doble según sus obras."

</td></tr><tr><td>

        18.24: "En ella se halló la sangre de los profetas y de los santos y de todos los que han sido muertos en la tierra"

</td></tr><tr><td>

        19.2: "sus juicios son verdaderos y justos."

</td></tr><tr><td>

        20.12: "Y fueron juzgados los muertos por las cosas que estaban escritas en los libros, según sus obras."

</td></tr></table>

<span class="source">Fuentes: Schreiner, 166-167, Osborne, 40.</span>
Santiago usa varias ''imágenes del mar:''

*Olas, 1.6
*Timón, 3.4
*Agua salada y agua fresca, 3.11
*La niebla, 4.14

Santiago usa ''imágenes agriculturales:''

*Sembrar y cosechar, 3.18
*Lluvias, 5.7
*Higueras y olivas, 3.12
<table class="altgray"><tr><td>

Gayo hizo lo correcto y no tiene por qué sentirse desanimado o decepcionado por lo que sucedió

<span class="indent1">//"Mucho me regocijé cuando vinieron los hermanos y dieron testimonio de tu verdad, de cómo andas en la verdad. No tengo yo mayor gozo que oir que mis hijos andan en la verdad. Amado, fielmente te conduces cuando prestas algún servicio a los hermanos, especialmente a los desconocidos"// (3-5)</span>

</td></tr><tr><td>

Dar hospitalidad a los ministros es colaborar con la verdad misma

<span class="indent1">//"Nosotros, pues, debemos acoger a tales personas, para que cooperemos con la verdad."// (8)</span>

</td></tr><tr><td>

Gayo es de Dios; por implicación, Diótrefes no ha visto a Dios

<span class="indent1">//"Amado, no imites lo malo, sino lo bueno. El que hace lo bueno es de Dios, pero el que hace lo malo no ha visto a Dios."// (11)</span>

</td></tr></table>
<span class="doublelist">

*''Afirmaciones positivas acerca de los destinatarios''
**La iglesia ha sido elegida por Dios (1)
**El autor y todos los que conocen la verdad aman a los destinatarios (1-2)
**Gracia, misericordia y paz serán con los destinatarios (3)
**El autor está contento porque ha visto a algunos miembros de la iglesia andando en la verdad (4)
**Los destinatarios han trabajado duro, y serán recompensados por sus labores (8)
**Los miembros de otra iglesia los saludan (13)
*''Afirmaciones acerca de la verdad''
**La verdad vive en nosotros y estará con nosotros para siempre (2)
**El Padre nos manda a que andemos en la verdad (4)
*''Afirmaciones acerca del amor''
**El mandamiento de amarse unos a otros no es nuevo. Los destinatarios lo han oído desde el principio (5)
**El amor auténtico requiere la obediencia a los mandamientos de Dios (6)
**Amarse unos a otros es mandamiento de Dios (6)
*''Afirmaciones acerca de Jesucristo''
**Cristo vino en carne (7)
**Hay que permanecer en las doctrinas de Cristo para tener a Dios (9)
*''Críticas de los que no enseñan la encarnación de Cristo''
**Son engañadores y anticristos (7)
**Ayudarlos es colaborar con ellos y perder la recompensa de uno (8)
**No permanecen en la doctrina de Cristo, y no tienen a Dios (9)
**Sus obras son malas y los que los ayudan comparten en sus malas obras (11)
*''Comentario acerca del autor''
**El autor espera visitarlos (12)

</span>
Apocalipsis 18 tiene un número extraordinario de ocurrencias del número tres:

<span class="indent1">

        Apocalipsis 18 es parte de 17.1-19.10, que tiene tres secciones: cap. 17, cap. 18, y 19.1-10.

<hr>

        Apocalipsis 18 tiene tres secciones distintas: 18.1-3, 18.4-20, y 18.21-24.

<hr>

        18.4-20 tiene la reacción de tres grupos a la caída de Babilonia: los reyes, los negociantes y los marineros

<hr>

        18.21-24 tiene tres secciones: la acción simbólica (21a), la afirmación (21b-23a), y la acusación (23b-24).

<hr>

        Según 18.2, Babilonia se ha convertido en tres cosas.

<hr>

        En 18.3 hay tres afirmaciones paralelas.

<hr>

        En 18.8 encontramos una lista de tres: muerte, llanto y hambre.

<hr>

        En 18.16 encontramos dos listas de tres:

* Vestida de lino fino, púrpura y escarlata
* Adornada de oro, piedras preciosas y perlas

<hr>

        La acusación en 18.23-24 tiene tres aspectos:

* Sus mercaderes se creían los grandes de la tierra
* Sus hechicerías engañaban al mundo
* Fue culpable de la muerte de los profetas, santos y todos los muertos.

<hr>

        La lista de las víctimas de Babilonia en 18.24 es una lista de tres: los profetas, los santos, y todos los que han sido muertos en la tierra.

</span>
Judas se inclina hacia combinaciones del número tres:

|bluealtrows|k
|Judas 1|Tres descripciones de los destinatarios|
|Judas 2|Tres bendiciones|
|Judas 5-7|Tres ejemplos: los Israelitas, los ángeles, y las ciudades de Sodoma y Gomorra|
|Judas 8|Tres pecados|
|Judas 11|Tres ejemplos: Caín, Balaam y Coré|
|Judas 16|Tres pecados|
|Judas 19|Tres pecados|
|Judas 20-21|Los tres miembros de la Trinidad<br>Tres participios que apoyan el verbo principal|
|Judas 22-23|Tres exhortaciones paralelas|
|Judas 25|Tres tiempos (pasado, presente, futuro)|
<table class="altgray"><tr><td>

    ''1. Según Hendriken, hay siete secciones paralelas:''

* Caps. 1-3 Las siete iglesias representan condiciones que son constantemente repetidas en la vida de la iglesia. El gran juicio en 1.7.
* Caps. 4-7 Comienza con la crucifixión (el Cordero como inmolado) y termina con el gran juicio (6.16-17) y la vida eterna (7.16-17)
* Caps. 8-11 También termina con una referencia al juicio final (11.15, 18)
* Caps. 12-14 Cubren el período desde la encarnación (12.5) hasta la segunda venida (14.14, 16)
* Caps. 15-16 Encuentra una referencia al juicio en 16.20
* Caps. 17-19 El juicio ocurre en 19.11ff.
* Caps. 20-22 La derrota inicial de Satanás en 20.2, 3 es paralelo a 12.9

</td></tr><tr><td>

''    2. Hendriksen incluye varios argumentos a favor de paralelismo entre estas secciones:''

Dos de las secciones duran el mismo período de tiempo

* 42 meses y 1260 días en 11.2-3
* 1260 días y 3 ½ años en 12.6, 14
        
Hay paralelos entre las trompetas y las copas:

* La primera trompeta y la primera copa afectan a la tierra
* La segunda trompeta y la segunda copa afectan al mar
* La tercera trompeta y la tercera copa afectan a los ríos
* La cuarta trompeta y la cuarta copa afectan al cielo y en particular, al sol
* Las quintas se refieren al abismo / el trono de la bestia
* Las sextas al Eufrates
* Las séptimas a la segunda venida en juicio.

        Capítulos 15-16 terminan con una referencia a una batalla, y capítulos 17-19 y capítulos 20-22 hacen lo mismo. Hendriksen dice que estas son la misma batalla, y provee 16.14, 20.8 como evidencia.

        Capítulos 2 y 7 de Daniel muestran el mismo tipo de paralelos.

</td></tr><tr><td>

    ''3. Hendriksen también declara que estas siete secciones deben ser divididas en dos grupos'', capítiulos 1-8, el conflicto en la tierra, y capítulos 12-22, el trasfondo espiritual del conflicto.

</td></tr><tr><td>

   '' 4. El paralelismo de las secciones es climáctico, según Henriksen:''

* Caps. 1-3 solo tienen una mención del juicio final, 1.7
* En caps. 4-7 el juicio se introduce formalmente (6.12ff), pero no hay una descripción.
* En caps. 8-11, solo una referencia en 11.15ff.
* En caps. 12-14 tenemos una descripción, 14.14ff, simbolizado por una cosecha.
* En caps. 15-16 tenemos otra descripción simbólica, como copas.
* En caps. 17-19 el énfasis en el juicio final es aun mayor.
* En caps. 20-22 deja el simbolismo y describe el juicio directamente.

</td></tr></table>

<span class="source">Fuente: William Hendriksen, More Than Conquerors. (Grand Rapids: Baker, 1986), páginas 16-23, 34-36.</span>
<span class="doublelist">

*Los que pecan están en oscuridad (cap. 1)
*Los que niegan su pecado están engañados y hacen de Dios un mentiroso (1.8, 10)
*Los que confiesan sus pecados pueden ser perdonados (1.9, cf. 2.1)
*El pecado es infracción de la ley (3.4). Toda injusticia es pecado (5.17)
*Los que están en Cristo no siguen pecando (3.6, 9)
*Hay una distinción entre pecados que “son de muerte” y los que no (5.16-18)
*¿Hay una contradicción entre 1.8, 10, 2.1 y 3.4-10?

</span>
<table class="altgray"><tr><td>

Judas hace un contraste agudo entre los santos y los impíos

</td></tr><tr><td>

Judas hace una larga lista de los pecados de los hombres impíos que se han metido a la iglesia de sus lectores.

</td></tr><tr><td>

Judas compara sus pecados con los de la antiguedad, y dice que sus contemporáneos sufrirán el mismo castigo que los pecadores antiguos sufrieron

</td></tr><tr><td>

La palabra general que Judas usa es la impiedad, pero menciona los pecados de desobedecer la autoridad, de cometer pecados sexuales, de no creer, de blasfemar a ángeles, de quejarse y criticar, de adular a otros para sacar una ganancia personal, y de causar divisiones.

</td></tr></table>
<span class="doublelist">

*La tentación, codicia, avaricia y ambición: 1.2-8, 12-18, (2.1-9), 3.14, 3.16, 4.1, 4.7, 5.1-6, 5.20
*El pecado es producido por el deseo, produce la muerte: 1.15
*Violación de la ley: 2.9
*Afecta las palabras: 3.2-8
*Definición: saber lo que es bueno y no hacerlo: 4.17
*El perdón: 5.14-20. ¿Conectado con la enfermedad?
*“El mundo”: 1.27, 3.15, 4.4
*La pureza y la contaminación: 1.21, 1.27, 3.6, 3.17, 4.8

</span>
Judas escribió esta carta para advertir a sus lectores del peligro de los falsos maestros que habían entrado a su congregación. Sin embargo, esta carta no es una polémica contra sus oponentes, sino una carta pastoral para los destinatarios.

<span class="doublelist">

* Judas no refuta los puntos de los falsos maestros, sino que
** llama nuestra atención al estilo de vida de estos maestros,
** los pone en el contexto de una larga historia de falsos profetas,
** y nos recuerda de la advertencia de los apóstoles acerca de ellos.

</span>
Según Bauckham, 2 Pedro tiene ''un sabor judaico.'' 

<span class="doublelist">

*Es un testamento, un género judaico.
*Tiene características de la literatura seudepígrafa judía: alusiones a historias del AT, una escatología apocalíptica. (Es precisamente por eso que muchos eruditos asumen que fue escrito por otro autor en el nombre de Pedro, porque la literatura seudepígrafa muchas veces estaba escrita en el nombre de figuras bíblicas como Noé y Enóc).
*Su estilo de griego tiene errores que parecen ser semitismos—construcciones gramáticas del arameo traducidas literalmente al griego.
*Este sabor judaico es evidencia de que Pedro escribió la carta, y no un impostor del segundo siglo.

</span>
<table class="altgray"><tr><td>

!!!La voz que Juan oye

En v. 10 Juan dice que escucha una voz (singular), pero esta voz parece ser de un grupo, no de un individuo, porque en v. 11 llama a los mártires "nuestros" hermanos, no "mis" hermanos.

</td></tr><tr><td>

!!!La victoria de los mártires

El verbo 'vencer' aparece 17 veces en Apocalipsis.

</td></tr><tr><td>

Varios libros apócrifos dicen que los que aceptan la muerte en vez de renunciar su fe "vencieron" sobre sus enemigos (4 Mac. 6.10, 7.4, 9.6, 9.30, 11.20, 16.14, 17.15).

</td></tr><tr><td>

"Por medio de la palabra de su testimonio" tiene otros paralelos en Apocalipsis:

*1.9: la palabra de Dios y mi testimonio de Jesús
*6.9: la palabra de Dios y el testimonio que daban
*12.17: mantuvieron su testimonio de Jesús
*19.10: quienes mantienen el testimonio acerca de Jesús
*20.4: por causa de su testimonio a Jesús y por causa de la palabra de Dios.

</td></tr><tr><td>

Otros textos del NT que hablan de no amar nuestras vidas:

*Mc 8.35 = Mt 16.25 = Lc 9.24
*Mt 10.39 = Lc 17.33
*Jn 12.25

</td></tr><tr><td>

!!!Las alas del águila

Seguramente Éxodo 19.4 es el trasfondo de este símbolo. En el éxodo, Dios llevó a los Israelitas al desierto con alas de águila.

</td></tr><tr><td>

Otros textos del AT que hablan de las alas de águilas que sostienen a los creyentes son: Sal. 17:8; 36:7; 57:1; 61:4; 63:7; 91:4; cf. Is. 40.31, Jer. 49:22.

</td></tr><tr><td>

Aune compara este versículo con varios mitos griegos que hablan de mujeres perseguidas por enemigos y se conviertan en aves para escapar.

</td></tr><tr><td>

!!!Agua como un río

Las aguas frecuentemente son simbólicos de las naciones paganas en el AT (Sal. 18:5–18; 46:3–4; 144:5–7; Hab. 3:).

</td></tr><tr><td>

Algunos dicen que es un río de mentiras y falsas enseñanzas.

</td></tr><tr><td>

!!!La tierra devora al agua

La misma palabra griega para 'devorar' aparece también en v. 4, donde el dragón desea devorar al niño.

</td></tr><tr><td>

En el AT la tierra devoró al Faraón (Ex. 15.12) y a Coré, Datán y Abiram (Nm 16:32–34).

</td></tr></table>
|bluealtrows|k
|4.16|"Acerquémonos, pues, confiadamente al trono de la gracia, para alcanzar misericordia y hallar gracia para el oportuno socorro."|
|6.18-20|"para que por dos cosas inmutables, en las cuales es imposible que Dios mienta, tengamos un fortísimo consuelo los que hemos acudido para asirnos de la esperanza puesta delante de nosotros. La cual tenemos como segura y firme ancla del alma, y que penetra hasta dentro del velo, donde Jesús entró por nosotros como precursor, hecho sumo sacerdote para siempre según el orden de Melquisedec."|
|7.19|" - pues la Ley nada perfeccionó - y se introduce una mejor esperanza, por la cual nos acercamos a Dios."|
|7.25|"Por eso puede también salvar perpetuamente a los que por él se acercan a Dios, viviendo siempre para interceder por ellos."|
|10.1|"La Ley, teniendo la sombra de los bienes venideros, no la imagen misma de las cosas, nunca puede, por los mismos sacrificios que se ofrecen continuamente cada año, hacer perfectos a los que se acercan."|
|10.19-20|"Así que, hermanos, tenemos libertad para entrar en el Lugar santísimo por la sangre de Jesucristo, por el camino nuevo y vivo que él nos abrió a través del velo, esto es, de su carne."|
|10.22|"Acerquémonos, pues, con corazón sincero, en plena certidumbre de fe, purificados los corazones de mala conciencia y lavados los cuerpos con agua pura."|
|11.6|"Pero sin fe es imposible agradar a Dios, porque es necesario que el que se acerca a Dios crea que él existe y que recompensa a los que lo buscan."|

@@.source Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|!2.20|Vosotros tenéis la unción del Santo y conocéis todas las cosas.|
|!2.27|Pero la unción que vosotros recibisteis de él permanece en vosotros y no tenéis necesidad de que nadie os enseñe; así como la unción misma os enseña todas las cosas, y es verdadera, y no es mentira, según ella os ha enseñado, permaneced en él.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<span class="doublelist">

*Movimiento hacia el reposo de Dios (3.7-4.13)
*11.1, 11.13-16, 11.39-40
*Lenguaje de “heredar” y “herencia” y “promesa” es un eco del éxodo y el peregrinaje de Israel hacia su herencia, la tierra prometida. (Ellingworth)
*Jesús es el autor (“ἀρχηγὸς” = pionero, el que va delante de otros) de la salvación: 2.10, 6.20, 12.2-3)

</span>
<span class="doublelist">

*Pedro menciona este “dia” en 1.19, 2.9, 3.7, 3.10, 3.12
*El día del Señor se ha demorado debido a la paciencia y misericordia de Dios, dando tiempo a la humanidad para que se arrepienta (3.9)
*Vendrá rápido cuando venga, en un momento inesperado (3.10)
*Resultará en juicio de hombres (3.7) y ángeles (2.4). Este juicio fue prefigurado por el juicio de los ángeles, los contemporáneos de Noé, y las ciudades de Sodoma y Gomorra (cap. 2).
*Será un día de fuego que destruye los elementos de este mundo (3.10, 12) Pregunta: ¿Es esta descripción de destrucción, una contradicción de la doctrina reformada que enseña que hay continuidad entre este mundo y el mundo porvenir?
*Podemos acelerar la venida del día por nuestra conducta (3.12)
*No es un día de miedo para los creyentes sino un día que anhelamos (3.12,13)
*Resultará en la venida de una nueva creación (3.12-13), y el reino de Jesucristo (1.11)

</span>
|bluealtrows|k
|!1.1-3|Lo que era desde el principio, lo que hemos oído, lo que hemos visto con nuestros ojos, lo que hemos contemplado y palparon nuestras manos tocante al Verbo de vida - pues la vida fue manifestada y la hemos visto, y testificamos y os anunciamos la vida eterna, la cual estaba con el Padre y se nos manifestó - , lo que hemos visto y oído, eso os anunciamos, para que también vosotros tengáis comunión con nosotros; y nuestra comunión verdaderamente es con el Padre y con su Hijo Jesucristo.|
|!1.5|Este es el mensaje que hemos oído de él y os anunciamos: Dios es luz y no hay ningunas tinieblas en él.|
|!4.14|Y nosotros hemos visto y testificamos que el Padre ha enviado al Hijo, el Salvador del mundo.|
|!5.6-11|Este es Jesucristo, que vino mediante agua y sangre; no mediante agua solamente, sino mediante agua y sangre. Y el Espíritu es el que da testimonio, porque el Espíritu es la verdad. //[Tres son los que dan testimonio en el cielo: el Padre, el Verbo y el Espíritu Santo; y estos tres son uno.]// Y tres son los que dan testimonio en la tierra: el Espíritu, el agua y la sangre; y estos tres concuerdan. Si recibimos el testimonio de los hombres, mayor es el testimonio de Dios, porque este es el testimonio con que Dios ha testificado acerca de su Hijo. El que cree en el Hijo de Dios tiene el testimonio en sí mismo; el que no cree a Dios, lo ha hecho mentiroso, porque no ha creído en el testimonio que Dios ha dado acerca de su Hijo. Y este es el testimonio: que Dios nos ha dado vida eterna y esta vida está en su Hijo.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
El autor de esta carta usa un tono autoritario que un apóstol usaría. 

<span class="doublelist">

* No vacila en llamar a otros mentirosos, engañadores y anticristos. 
* Provee pruebas que dividen la humanidad de dos categorías. 
* El autor exhorta en 2.15, 2.24, 2.28, 4.1, 5.21; 
* el autor hace declaraciones teológicas en 2.6, 3.14, 4.12; 
* el autor denuncia a otros en 2.18, 2.22, 3.10; 
* identifica errores en 1.6, 1.8, 2.4, 2.22. (NIV Study Bible). 

</span>

Carson, Moo y Morris dan la siguiente lista de textos de autoridad: 2.1-2, 2.8, 2.15, 2.17, 2.23, 2.28, 3.6, 3.9, 4.1, 4.8, 4.16, 5.21 (449). Ellos llaman nuestra atención al hecho de que el autor también demuestra esta autoridad en 2 y 3 Juan, o sea sobre varias congregaciones. Solo un apóstol hubiera tenido autoridad sobre varias congregaciones, porque los ancianos tenían autoridad sobre congregaciones individuales.
<table class="altgray"><tr><td>

Por un lado, Apocalipsis usa ''elementos encontrados en mitos paganos'':

* En el mundo griego, el dragón Pitón persigue a Latona, quien está embarazada con el dios Apolo, para matarla. Zeus y Neptuno protegen a Latona. Zeus envía un viento para llevarla a la isla de Delos. Neptuno causa que el agua sumerja a la isla de Delos. Cuando Latona da a luz a Apolo, se descubre que el niño tiene habilidades impresionantes. A los cuatro días el niño Apolo mata a Pitón.
* De manera similar, los Egipcios contaban acerca de un dragón rojo llamado Tifón, que persigue a la diosa Isis. Isis da a luz al dios del sol, Horus, y Horus mata a Tifón.

</td></tr><tr><td>

Por otro lado, Apocalipsis 12 transforma estos mitos paganos, añadiendo ''elementos bíblicos'':

* El sol, la luna y doce estrellas, símbolos tomados de Génesis 37.9
* El intento de Herodes de matar al niño Jesús
* La vara de hierro de Salmo 2
* La ascensión de Jesús
* El arcángel Miguel, de Daniel 10, 12
* La comparación entre el dragón y el serpiente de Génesis 3
* La salida sobre alas de águila al desierto, tomada de Éxodo 19.4
* Los tres años y medio, un período de tiempo tomado del libro de Daniel

</td></tr></table>
<img src='https://www.giffmex.org/wiki/images/nt3/revtriangle.gif'>
<img src='https://www.giffmex.org/wiki/images/nt3/apoc4trono.GIF'>

''Los cuatro seres vivientes:''

*El león, principal de las bestias salvajes
*El becerro, principal de las bestias domesticadas
*El hombre principal de todas las criaturas
*El águila, principal de las aves
*Representan toda la creación, 4.11

''Aplicación:''

Es un consuelo para Cristianos perseguidos: somos parte de un grupo inmenso de criaturas, no un grupo pequeño y perseguido.
|bluealtrows|k
|Judas 1b-2|Apertura del culto|"...a los llamados, santificados en Dios Padre y guardados en Jesucristo: Misericordia, paz y amor os sean multiplicados."|
|Judas 24-25|Doxología|"A aquel que es poderoso para guardaros sin caída y presentaros sin mancha delante de su gloria con gran alegría, 25&nbsp;al único y sabio Dios, nuestro Salvador, sea gloria y majestad, imperio y poder, ahora y por todos los siglos. Amén."|
El autor de Hebreos usa sus citas del Antiguo Testamento en diferentes maneras:

<span class="doublelist">

*Para aclarar posibles malentendidos. Ej: 2.8-9, citando el Salmo 8.4-6.
*Para reforzar una exhortación con una cita bíblica. Ej: 10.19-39 es reforzado con citas a Isaías 26.20 y Habacuc 2.3-4.
*Para sacar las implicaciones escondidas del texto. Ej: el uso de Jeremías 31 en 8.8-13.
*Para apelar al sentido literal de una palabra. Ej: La discusión de la palabra “hoy” en 3.13, 3.15 y 4.7-8 en su uso del Salmo 95.7.
*Para apelar del menor al mayor. Ej: 2.2-4, 9.13-14, 10.28-29, 12.25.
*Para iluminar el significado de un texto con otro texto que contiene la misma palabra. Ej: En 4.1-11, Salmo 95.7-11 se usa para entender Gn. 2.2. Ambos textos contienen la palabra “descansó.” También en 5.5-6, el autor hace un enlace entre Salmo 2.7 y Salmo 110.4. Ambos textos contienen la palabra enfática “Tú” y son Salmos de nombramiento.
*El autor también usa una cadena de citas en 1.5-13.
*Usa una lista de ejemplos en capítulo 11.
*Usa tipología a través de la carta (Israel es tipo de la iglesia, Canaán y el día de reposo son tipos del descanso eterno del evangelio, el santuario terrenal es tipo del celestial, los sacrificios son tipos del sacrificio de Jesús, etc).
*Midrás homilético, una técnica judía de hacer contemporáneo el texto para los lectores, es predominante a través de Hebreos.

</span>

@@.source William L. Lane, vol. 47A, Word Biblical Commentary : Hebrews 1-8, Word Biblical Commentary (Dallas: Word, Incorporated, 2002), cxii-cxxiv.@@
    //Fuente: Sílabo de Dr. Jeffrey A. D. Weima, Calvin Theological Seminary, Grand Rapids, MI.//

<table class="altgray"><tr><td>

    ''Apertura de la carta''

* Exhortación a que escriba: “Escribe al ángel de la iglesia en _”
* Descripción de Cristo, el que dicta la carta: “El que . . . dice esto:”

</td></tr><tr><td>

    ''Cuerpo de la carta''

* Las obras que Cristo conoce: “Yo conozco tus obras,” etc
* Queja: “Pero tengo contra ti que . . . . “
* Orden(es) de Cristo para la iglesia: [ninguna fórmula]
* Consecuencia(s): [ninguna fórmula]
* Concesión: “Pero tienes esto: . . . .”

</td></tr><tr><td>

    ''Conclusión de la carta''

* Llamado a la atención: “El que tiene oído, oiga lo que el Espíritu dice a las iglesias.”
* Promesa(s) al vencedor: “Al vencedor . . . .”

</td></tr></table>
|bluealtrows|k
|Viviendo en los últimos días|"Habéis acumulado tesoros para los días finales" (5.3)|
|Una inminente Parusía|"Por tanto, hermanos, tened paciencia hasta la venida del Señor. Mirad cómo el labrador espera el precioso fruto de la tierra, aguardando con paciencia hasta que reciba la lluvia temprana y la tardía. 8&nbsp;Tened también vosotros paciencia y afirmad vuestros corazones, porque la venida del Señor se acerca." (5.7-8)|
|El juicio final y las recompensas|pero el que es rico, en su humillación; porque él pasará como la flor de la hierba. Porque cuando sale el sol con calor abrasador, la hierba se seca, su flor se cae, y perece su hermosa apariencia; así también se marchitará el rico en todas sus empresas. (1.10-11)|
|~|Así hablad, y así haced, como los que habéis de ser juzgados por la ley de la libertad. Porque juicio sin misericordia se hará con aquel que no hiciere misericordia; y la misericordia triunfa sobre el juicio. (2.12-13)|
|~|Hermanos míos, no os hagáis maestros muchos de vosotros, sabiendo que recibiremos mayor condenación. (3.1)|
|~|Y la lengua es un fuego, un mundo de maldad. La lengua está puesta entre nuestros miembros, y contamina todo el cuerpo, e inflama la rueda de la creación, y ella misma es inflamada por el infierno. (3.6)|
|~|Uno solo es el dador de la ley, que puede salvar y perder; pero tú, ¿quién eres para que juzgues a otro?  (4.12)|
|~|¡Vamos ahora, ricos! Llorad y aullad por las miserias que os vendrán. Vuestras riquezas están podridas, y vuestras ropas están comidas de polilla. Vuestro oro y plata están enmohecidos; y su moho testificará contra vosotros, y devorará del todo vuestras carnes como fuego. Habéis acumulado tesoros para los días postreros. He aquí, clama el jornal de los obreros que han cosechado vuestras tierras, el cual por engaño no les ha sido pagado por vosotros; y los clamores de los que habían segado han entrado en los oídos del Señor de los ejércitos. Habéis vivido en deleites sobre la tierra, y sido disolutos; habéis engordado vuestros corazones como en día de matanza. Habéis condenado y dado muerte al justo, y él no os hace resistencia. (5.1-6)|
|~|Hermanos, no os quejéis unos contra otros, para que no seáis condenados; he aquí, el juez está delante de la puerta. (5.9)|
|~|Pero sobre todo, hermanos míos, no juréis, ni por el cielo, ni por la tierra, ni por ningún otro juramento; sino que vuestro sí sea sí, y vuestro no sea no, para que no caigáis en condenación. (5.12)|
|La existencia de Gehenna|"La lengua está puesta entre nuestros miembros, y contamina todo el cuerpo e inflama la rueda de la creación, y ella misma es inflamada por el infierno." (3.6)|
|La corona de vida = la vida eterna|"recibirá la corona de vida que Dios ha prometido a los que lo aman." (1.12)|
|Heredar el reino de Dios|"herederos del reino que ha prometido a los que lo aman..." (2.5)|

!!!!Evidencia interna:

<span class="doublelist">

*La carta identifica su autor como “Simeón Pedro” y dice que es su segunda carta (1.1, 3.1). El nombre “Simeón” para Pedro solo ocurre en Hechos 15.14. Hubiera sido más probable que un autor seudónimo usara el nombre “Simón”, que era más conocido.
*El autor dice que fue testigo de la transfiguración de Jesucristo (1.16-18)
*El autor llama a Pablo “nuestro querido hermano” en 3.15. Carson, Moo y Morris dudan que un autor seudónimo introduciría dudas acerca de Pablo. ,,436,,
*¿Es 1.13-14 una referencia a la predicción Jn. 21.18-19?
*El autor habla en términos fuertes acerca de la verdad y las mentiras (1.12, 2.3). Estas declaraciones serían hipocresía de parte del autor si escribió en nombre de otro, falsamente. 
*Vocabulario que la carta comparte con los discursos de Pedro en Hechos pero no son muy comunes en el resto del NT:
**“Alcanzado” (1.11, Hechos 1.17) 
**“Piedad” (1.3, 1.6, 1.7, 3.1; Hechos 3.12)
**“Inicuos” (2.8, Hechos 2.23)
**“Galardón de injusticias” (2.13, 15; Hechos 1.18)
**“El día del Señor” (3.10, Hechos 2.20)
*[[Paralelos entre 2 Pedro y 1 Pedro]]

</span>

!!!!Evidencia externa:

<span class="doublelist">

*Orígenes acepta que Pedro fue el autor, reconociendo que había disputas sobre este punto.
*Es posible, pero no seguro, que Ireneo alude al libro.

</span>

!!!!Otras consideraciones

<span class="doublelist">

*La seudonimidad es falsificar un documento. Es mentir. La iglesia primitiva rechazaba las obras seudónimas.
*Si 2 Pedro fue seudónimo, era un logro milagroso, porque el autor logró imitar el pensamiento del primer siglo desde un tiempo lejano cuando la doctrina y el vocabulario había cambiado. Y convenció a la iglesia que su carta era auténtica.
*El autor enfatiza la verdad y el error. ¿Podría haber mentido acerca de la autoría de su carta para promoverla?
*Carson, Moo y Morris (437) preguntan por qué esta carta necesitaba el apoyo del nombre de Pedro si fue seudónima. Su contenido es ortodoxo, y nada muy distinto de otros libros cristianos. Falta explicar la motivación detrás de la seudonimidad de esta carta.
*Si la carta fue seudónima, ¿por qué no imita el estilo de 1 Pedro? ¿Por qué es tan diferente? Más bien, esta carta es similar a Judas, no 1 Pedro.

</span>
<table class="altgray"><tr><td>

La siguiente lista anota algunas de las imágenes o figuras verbales que Pedro usa en su carta:

</td></tr><tr><td>

''Figuras de la alimentación''

*2.2-3, tomando leche, gustando la bondad del Señor
*2.11, abstenerse de los deseos

</td></tr><tr><td>

''Figuras anatómicas y de vestirse''

*3.10, La persona representada por las partes del cuerpo: lengua, labios, 
*3.12, Dios representado con ojos, oídos, rostro
*3.22, la mano derecha de Dios
*5.4, vestirse con la humildad
*5.6, la mano de Dios

</td></tr><tr><td>

''Figuras botánicas''

*1.24, las personas son como flores
''Figuras de construcción''
*2.4-8: piedras vivas, casa espiritual (es decir, el templo), piedra de ángulo

</td></tr><tr><td>

''Figuras deportivas''

*5.4, la vida eterna como corona

</td></tr><tr><td>

''Figuras familiares''

*1.2, 1.17, Dios como Padre
*1.14, creyentes como hijos obedientes
*2.17, 3.8, 5.9, 5.12, creyentes como hermanos
*4.17, la iglesia como la casa de Dios (en el sentido de familia, no de edificio)
*5.13, Marcos como el hijo de Pedro

</td></tr><tr><td>

''Figuras financieras''

*1.4, una herencia guardada
*1.18, la redención (una compra) no fue pagada con cosas corruptibles como oro y plata
*3.7, herederos de la vida
*3.9, llamados para heredar una bendición
*4.10, administradores que han recibido dones para ministrar

</td></tr><tr><td>

''Figuras históricas''

*3.20-21, los bautizantes salvos como Noé en el diluvio

</td></tr><tr><td>

''Figuras legales''

*1.17, 2.23, 4.5, Dios como juez

</td></tr><tr><td>

''Figuras de luz''

*2.9, llamados de las tinieblas a la luz

</td></tr><tr><td>

''Figuras metalúrgicas''

*1.4, la herencia es incorruptible (como oro, v. 7)
*1.7, la fe como oro refinado por el fuego
*1.18, la redención no es con cosas corruptibles como oro y plata

</td></tr><tr><td>

''Figuras militares''

*1.5, guardados por el poder de Dios
*1.13, debemos 'ceñir' los lomos para la acción
*2.11, los deseos 'batallan' contra el alma
*4.1, debemos 'armarnos' del mismo pensamiento que Cristo tuvo
*5.5, Dios se opone a los soberbios
*5.9, resistir al diablo

</td></tr><tr><td>

''Figuras de naciones del AT''

*2.9-10, la iglesia como Israel
*5.13, Roma como Babilonia

</td></tr><tr><td>

''Figuras de la niñez''

*1.3, Renacidos a una esperanza viva
*1.23, Renacidos por la Palabra que es como simiente
*2.2, como niños recién nacidos tomando leche

</td></tr><tr><td>

''Figuras pastorales''

*2.25, como ovejas descarriadas volviendo al Pastor
*5.2-4, Apacentar la grey / Jesús como el príncipe de los pastores

</td></tr><tr><td>

''Figuras de peregrinaje''

*1.1, expatriados de la dispersión
*1.17, la peregrinación
*2.11, extranjeros y peregrinos

</td></tr><tr><td>

''Figuras religiosas''

*1.2, rociados por la sangre
*1.19, Cristo como cordero sin mancha y sin contaminación
*1.22, la purificación del alma
*2.5, sacerdocio santo, ofreciendo sacrificios espirituales
*2.9, real sacerdocio

</td></tr><tr><td>

''Figuras zoológicos''

*5.8, el diablo como león rugiente buscando devorar

</td></tr></table>


@@.source Fuente: DBI; estudio personal del autor@@
<span class="doublelist">

*La palabra de Dios, y del testimonio de Jesucristo (1.2, 1.9, 20.4)
*Siete espíritus (1.4, 3.1, 4.5, 5.6)
*Testigo fiel (1.5, 2.10, 2.13)
*Reyes de la tierra (1.5, 6.15, 16.14, 17.2, 17.18, 18.3, 18.9, 19.19, 21.24)

</span>
A pesar de su brevedad, Judas contiene ''14 hapax legomenoi'' (palabras en griego que no aparecen en el resto del NT):

<span class="singlelist">

*ἀποδιορίζειν (causar divisiones, Judas 19)
*ἄπταιστος (sin tropezarse, Judas 24)
*γογγυστής (murmurador, Judas 16)
*δει̂γμα (ejemplo, Judas 7)
*ἐπαγωνίζεσθαι (defender, Judas 3)
*ἐπαφρίζω (echar espuma, Judas 13)
*νενΨίμοιρος (quejarse de la condición de uno, Judas 16) 
*παρεισδύνειν (entrar en secreto, Judas 4)
*σπιλάς (mancha o piedra, Judas 12)
*φθινοπωρινός (del otoño, Judas 12)
*φυσικω̂ς (por naturaleza, Judas 10)
*ἐκπορνεύειν (entregarse a la fornicación, Judas 7)
*πλανήτης (estrella errante [planeta], Judas 13) 
*ὑπέχειν (sufrir, Judas 7)

</span>

@@.source Richard J. Bauckham, ''Word Biblical Commentary: Jude, 2 Peter.'' (Waco, TX: Word, 1983)@@
<span class="singlelist">

*''Hebreos, asuntos introductorios''

**[[Nuestras presentaciones acerca de Hebreos]]
**[[Una introducción a Hebreos]]
**[[Las circunstancias y propósitos de Hebreos]]
**[[La situación de los destinatarios de Hebreos, apuntes]]
**[[Notas sobre David deSilva, acerca del público de Hebreos]]
**[[Las respuestas que el autor de Hebreos deseaba de sus destinatarios]]

*''El autor de Hebreos''

**[[Candidatos para el autor de Hebreos]]
**[[La propuesta de Pablo como autor de Hebreos]]
**[[Notas sobre David deSilva, acerca del perfil social del autor de Hebreos]]

*''La estructura de Hebreos''

**[[Un bosquejo de Hebreos]]
**[[Alternación entre exposición y exhortación en Hebreos]]
**[[Las advertencias en Hebreos – estructura quiástica]]

*''La teología y los temas de Hebreos''

**[[El tema de acercarse a Dios en Hebreos]]
**[[Dios Padre en Hebreos]]
**[[El Espíritu Santo en Hebreos]]
**[[La fe en Hebreos]]
**[[La gracia en Hebreos]]
**[[Jesucristo en Hebreos]]
**[[El argumento de Hebreos acerca de Melquisedec]]
**[[Nombres para Dios en Hebreos]]
**[[El contraste entre el antiguo pacto y el nuevo pacto en Hebreos]]
**[[El tema de peregrinajes en Hebreos]]
**[[La perfección en Hebreos]]
**[[La resurrección en Hebreos]]
**[['Una vez para siempre' en Hebreos]]

*''Hebreos en el contexto del canon''

**[[Citas al Antiguo Testamento en Hebreos]]
**[[Alusiones al Antiguo Testamento en Hebreos]]
**[[Citas y alusiones a los libros apócrifos o deuterocanónicos en Hebreos]]
**[[El uso del Antiguo Testamento en Hebreos]]
**[[Paralelos entre Hebreos y Pablo]]
**[[Paralelos entre Hebreos y 1 Pedro]]

*''Las características literarias de Hebreos''

**[[Hebreos 2.14-15, Paralelismo y quiasmo]]
**[[Personajes mencionados en Hebreos]]
**[[Referencias a la comunicación oral en Hebreos]]
**[[Técnicas para transiciones en Hebreos]]

*''Hebreos, asuntos avanzados''

**[[La aceptación de Hebreos al canon]]
**[[La fecha y el lugar de la composición de Hebreos]]
**[[Hebreos y la Iglesia Católica Romana]]
**[[La integridad de Hebreos 13]]

*''Exégesis de pasajes en Hebreos''

**[[Hebreos 1.1-2.4, su lógica]]
**[[Hebreos 1.1-4, apuntes]]
**[[Hebreos 1.5-14, apuntes]]
**[[Hebreos 1.5-14, una tabla]]
**[[Hebreos 2.14-15, Paralelismo y quiasmo]]
**[[Hebreos 5.7, Los clamores y lágrimas de Jesús]]
**[[Hebreos 6.4-6, Introducción]]
**[[Hebreos 6.4-6, ¿Qué exactamente es imposible para las personas que han recaído?]]
**[[Hebreos 6.4-6, ¿Eran estas personas regeneradas o no?]]
**[[Hebreos 6.4-6 ¿Cómo funciona en la carta a los Hebreos?]]
**[[Hebreos 6.4-6: Seis opciones interpretativas]]
**[[Hebreos 6.6, ¿Qué quiere decir “recayeron”?]]
**[[Hebreos 6.6, ¿Qué significa “crucificando de nuevo…al Hijo de Dios”?]]
**[[Hebreos 7.1-10, apuntes]]
**[[Hebreos 10.19-39, apuntes]]
**[[Hebreos 11 – una tabla]]
**[[Conceptos repetidos en Hebreos 11]]
**[[Hebreos 11, El tema de la aprobación de Dios]]
**[[Hebreos 11, el tema de la oposición a las personas de fe]]
**[[Hebreos 11, el tema de lo visible y lo invisible]]
**[[Hebreos 11, el tema de tener esperanza en las promesas o en el futuro]]
**[[Hebreos 11, la frase "por la fe" (Πίστει)]]
**[[Hebreos 13.1-17, bosquejo]]
**[[Hebreos 13.18-25, bosquejo]]

</span>
<table class="altgray"><tr><td>

Hebreos 1.1-2.4 probablemente responde a una objeción al Cristianismo de parte de los Judíos: 

<span class="indent1">// "El evangelio, el mensaje cristiano, fue comunicado a la humanidad a través de un mero ser humano. En contraste, la ley de Moisés fue mediado por los ángeles. Los ángeles son superiores a los seres humanos. Luego la ley que fue comunicado por los ángeles es superior al evangelio, que es la palabra de nada más que un ser humano, Jesús de Nazaret."//</span>

</td></tr><tr><td>

Hebreos 1 responde a esta objeción judía en varias maneras:

</td></tr><tr><td>

En Hebreos 1.1-4 el autor de Hebreos describe al Hijo de Dios con siete descripciones exaltadas que demuestran que Jesús fue mucho mas de cualquier "mero" ser humano:

<span class="doublelist">

* El Hijo es heredero de todas las cosas (1.2).
* El Hijo fue el agente por medio del cual Dios hizo el universo (1.2).
* El Hijo es el resplandor de la gloria de Dios (1.3).
* El Hijo es la fiel imagen de lo que Dios es (1.3).
* El Hijo sostiene todas las cosas con su palabra poderosa (1.3).
* El Hijo llevó a cabo la purificación de los pecados (1.3).
* El Hijo se sentó a la diestra de Dios (1.3).

</span>

</td></tr><tr><td>

Hebreos 1.5-14 es una cadena de varios textos del AT que demuestran que las mismas Escrituras de los Judíos enseñan que el Hijo de Dios es superior a los ángeles:

<span class="doublelist">

* Salmo 2.7 and 2 Samuel 7.14, citados en Hebreos 1.4-5, dicen que a ninguno de los ángeles declaró Dios que era su hijo. Sólo lo declaró acerca de Jesucristo. Jesús tiene un título que los ángeles no han recibido de Dios. Así que el Hijo es superior a los ángeles.
** (Debemos notar que colectivamente a veces los ángeles se describen en la Biblia como hijos de Dios, p. ej. en Job 1.6, 2.1, y 38.7. Pero esto no invalida el hecho que Dios nunca ha hecho una declaración oficial diciendo que un ángel específico es su hijo, mientras que sí lo ha declarado acerca de Jesús.)
* Deuteronomio 32.43 LXX, citado en Hebreos 1.6, dice que Dios mandó a los ángeles a que adoraran al Hijo, no lo contrario. Los que son adorados son superiores a los que los adoran. Así que el Hijo es superior a los ángeles.
* Salmo 104.4 y Salmo 45.6-7, citados en Hebreos 1.7-9, hacen un notable contraste: Salmo 104.4 dicen que los ángeles son siervos. Salmo 45.6-7 dice que el Hijo tiene una autoridad (un trono, un cetro) que dura para siempre. Salmo 45 hasta dice explícitamente que el Hijo ha sido exaltado sobre sus "compañeros" - es decir, sobre los ángeles. Así que el Hijo es superior a los ángeles.
* Salmo 102.25-27, citado en Hebreos 1.10.12, dice que el Hijo es el Creador, que el Hijo no cambia, y que el Hijo vivirá para siempre. Pero la creación tal como es (incluyendo a los ángeles), perecerá y tendrá que ser cambiada como una persona cambia su vestido. Así que el Hijo es superior a los ángeles.
* Salmo 110.1, citado en Hebreos 1.13, dice que Dios sentó al Hijo a la diestra de Dios. Y el autor de Hebreos, con una pregunta retórica, dice que Dios jamás ha hecho algo similar a algún ángel. Así que el Hijo es superior a los ángeles.

</span>

</td></tr><tr><td>

Hebreos 1.14 dice, a través de una pregunta retórica, que los ángeles son ministros y siervos. Esto sirve como contraste con el Hijo, que ya vimos que reina con autoridad sobre la creación. Así que el Hijo es superior a los ángeles.

</td></tr><tr><td>

    Ya que el autor de Hebreos estableció la superioridad de Jesucristo a los ángeles en capítulo 1, ahora procede a dar la aplicación de este argumento en Hebreos 2.1-4. Podemos resumir la lógica de estos versículos de esta manera:

<span class="indent1">

* El evangelio, el mensaje de Cristo, fue comunidado por Jesús. La ley fue comunicada por los ángeles.
* El Hijo es superior a los ángeles.
* Si el Hijo es superior a los ángeles, entonces su palabra, el evangelio, es superior a la palabra de los ángeles, la ley.
* El castigo por desobedecer la ley fue severo: la pena de muerte.
* Si el evangelio es superior a la ley, es lógico que el castigo para los que desobedecen el evangelio sería mayor que el castigo para los que desobedecían la ley.
* Ya que el castigo para los que desobedecen el evangelio es mayor, es urgente que prestemos mayor atención al evangelio. Los que rechazan el evangelio se están poniendo en gran peligro.

</span>

</td></tr><tr><td>

    En Hebreos 2.3-4 el autor da apoyo adicional para la importancia del evangelio: el evangelio no solamente fue anunciado verbalmente por el Señor y sus apóstoles. También fue confirmado por Dios. El ministerio de Jesús (en los Evangelios) y la proclamación de los apóstoles (en Hechos) fueron acompañados por muchos milagros y señales y dones espirituales (2.4).

</td></tr></table>
|bluealtrows|k
|>|>|!Hebrews 1.1-2|
|Πολυμερῶς|@@.indent2 Muchas veces@@|Las revelaciones anteriores de Dios|
|καὶ πολυτρόπως|@@.indent2 y en muchas maneras@@|~|
|πάλαι|@@.indent2 en tiempos anteriores@@|~|
|ὁ θεὸς λαλήσας|@@.indent1 habiendo hablado ''Dios'' @@|~|
|τοῖς πατράσιν|@@.indent2 a los padres@@|~|
|ἐν τοῖς προφήταις|@@.indent2 por los profetas@@|~|
|ἐπ̓ ἐσχάτου τῶν ἡμερῶν τούτων|@@.indent1 en estos últimos días@@|La nueva revelación de Dios|
|ἐλάλησεν ἡμῖν|''nos habló''|~|
|ἐν υἱῷ,|@@.indent1 por su Hijo,@@|~|
|ὃν ἔθηκεν κληρονόμον πάντων,|@@.indent2 a quien puso como heredero de todo@@|Una descripción del Hijo|
|δἰ οὗ καὶ ἐποίησεν τοὺς αἰῶνας·|@@.indent2 por medio de quien también hizo las edades.@@|~|

-----

Hebreos 1.1-2 hace un contraste entre la revelación de Dios en el Antiguo Testamento, y la revelación de Dios por medio de Cristo: 

|bluealtrows|k
|!|!En el Antiguo Testamento|!En Cristo|
|Quién|Dios|Dios|
|Qué|habiendo hablado a los padres|nos ha hablado|
|Cómo|muchas veces y de muchas maneras | - |
|Cuándo|en otro tiempo|en estos últimos días|
|Por medio de quién|por los profetas|por el Hijo|

-----

Hebreos 1.1-4 es una sola oración gramatical en griego.

-----

Hay siete características del Jesús el Hijo de Dios en Hebreos 1.2-3:

<span class="doublelist">

#Es heredero de todo
#Fue el agente por medio del cual Dios hizo el universo
#Es el resplandor de la gloria de Dios
#Es la imagen de la sustancia de Dios
#Sostiene todas las cosas por su poderosa palabra
#Efectuó la purificación de los pecados
#Se sentó a la diestra de Dios

</span>

-----

!La estructura de Hebreos 1.3-4

|bluealtrows|k
|>|>|!Hebreos 1.3-4|
|ὃς|''Quien,''|Sujeto|
|ὢν|@@.indent1 <span class="blue">siendo</span>@@|Primera descripción del Hijo|
|ἀπαύγασμα τῆς δόξης|@@.indent2 el resplandor de la gloria,@@|~|
|καὶ χαρακτὴρ τῆς ὑποστάσεως αὐτοῦ, |@@.indent2 y la imagen de su sustancia,@@|~|
|φέρων τε τὰ πάντα τῷ ῥήματι τῆς δυνάμεως αὐτοῦ, |@@.indent1 <span class="blue">sosteniendo</span> todas las cosas con la palabra de su poder,@@|Segunda descripción del Hijo|
|καθαρισμὸν τῶν ἁμαρτιῶν ποιησάμενος |@@.indent1 <span class="blue">habiendo efectuado</span> la purificación de los pecados@@|Tercerca descripción del Hijo|
|ἐκάθισεν ἐν δεξιᾷ τῆς μεγαλωσύνης ἐν ὑψηλοῖς, |''se sentó a la diestra de la Majestad en las alturas,''|predicado|
|τοσούτῳ κρείττων γενόμενος τῶν ἀγγέλων |@@.indent2 <span class="blue">volviéndose</span> tan superior a los ángeles@@|Cuarta descripción del Hijo|
|ὅσῳ διαφορώτερον παῤ αὐτοὺς κεκληρονόμηκεν ὄνομα.|@@.indent2 cuanto heredó más excelente nombre que ellos.@@|~|
Hay una cadena de citas al Antiguo Testamento en Hebreos 1.5-14. Las citas apoyan las afirmaciones del autor, que Jesús es sumamente superior a los ángeles [[Hebreos 01.05-14, una tabla]].

-----

''La estructura de Hebreos 1.5a''

|bluealtrows|k
|>|>|!Hebreos 1.5a|
|Τίνι γὰρ εἶπεν ποτε τῶν ἀγγέλων·|Porque ¿a cuál de los ángeles dijo jamás,|Pregunta retórica = Dios jamás ha dicho a los ángeles|
|υἱός μου εἶ σύ,|@@.indent1 "Tú eres mi hijo,@@|Cita del AT|
|ἐγὼ σήμερον γεγέννηκα σε;|@@.indent1 yo te engendré hoy"?@@|~|

-----

La razón que el autor de Hebreos enfatiza la superioridad de Cristo a los ángeles en capítulos 1 y 2 es que los Judíos creían que la Ley de Moisés fue entregada a la humanidad por medio de los ángeles (Hebreos 2.2, Gálatas 3.19). Seguramente algunos criticaban al evangelio de Jesús como un mensaje meramente humano, inferior en comparación con la ley, que era angelical. El autor quiere mostrar que Jesús es superior a los ángeles, para mostrar que la revelación por medio de él es superior a la Ley de Moisés.

-----

''La estructura de Hebreos 1.5b''

|bluealtrows|k
|>|>|!Hebreos 1.5b|
|καὶ πάλιν·|¿U otra vez:|Implícita repetición: ¿Cuándo ha dicho Dios a los ángeles...|
|ἐγὼ ἔσομαι αὐτῷ εἰς πατέρα,|@@.indent1 "Yo seré para él como padre,@@|Cita del AT|
|καὶ αὐτὸς ἔσται μοι εἰς υἱόν;|@@.indent1 y él será para mí como hijo"?@@|~|
|bluealtrows|k
|!Versículos|!Referencia|!Jesús es el Hijo y los ángeles no son hijos|!Los ángeles adoran a Jesús, no al revés|!Jesús fue ungido con alegría más que los ángeles, sus compañeros|!Jesús es el rey pero los ángeles son siervos|!Jesús es eterno, mientras los ángeles son temporales|
|1.5ª|Salmo 2.7	| x |||||
|1.5b|2 Samuel 7.14| x |||||
|1.6|Deut. 32.43 LXX| x | x ||||
|1.7|Salmo 104.4|||| x  | x |
|1.8-9|Salmo 45.6-7| x || x | x | x |
|1.10-12|Salmo 102.25-27||||| x |
|1.13|Salmo 110.1| | | | x ||
|1.14| - | | | x |||
!!10.19-39 en el contexto de Hebreos

<table class="altgray"><tr><td>

Esta sección se distingue claramente porque con 10.18 se termina la exposición y en 10.19 se inicia la exhortación / advertencia, que se extiende hasta 10.39. En Hebreos 11.1 se inicia el tema de los héroes de la fe.

</td></tr>
<tr><td>

Según Herbert Bateman, la advertencia en este pasaje es paralelo a la advertencia en Hebreos 3-4, según el quiasmo que Bateman identifica en Hebreos:

:2.1-4
::3.7-4.13
:::5.11-6.12
::10.19-39
:12.14-29

<span class="source">Herbert W. Bateman IV, //Four Views on the Warning Passages in Hebrews//, 71-73.</span><br>

Pero según William Lane, este pasaje es paralelo a 5.11-6.12, y los dos pasajes forman un inclusio alrededor de la sección 5.11-10.39.<br>

<span class="source">William Lane, //Word Biblical Commentary, vol 47B: Hebrews 9-13//, 279.</span><br>

El presente autor se inclina a favorecer la posición de Lane. Estas dos advertencias son las más severas, y hay una sola sección entre estos dos pasajes, la sección expositiva sobre el sacerdocio de Cristo (7.1-10.18).

Lane menciona la estructura paralela entre los dos pasajes:

*Las implicaciones del estado privilegiado de los destinatarios para la conducta de ellos (5.11-6.3 / 10.19-25)
*Una advertencia severa del peligro de la apostasía (6.4-8 / 10.26-31)
*Una palabra de ánimo basado en el pasado de los destinatarios y confiado en la obediencia futura de ellos (6.9-12 / 10.32-39).

<span class="source">William Lane, //Word Biblical Commentary, vol 47B: Hebrews 9-13//, 279-280.</span><br>

</td></tr>
<tr><td>

Nota la semejanza entre Hebreos 3.6 y 10.23:

*//la cual casa somos nosotros, ''si retenemos firme hasta el fin'' la confianza y el gloriarnos en ''la esperanza''.// (3.6)
*//''Mantengamos firme, sin fluctuar'', la profesión de ''nuestra esperanza'', porque fiel es el que prometió.// (10.23)

</td></tr>
</table>

!!La estructura de Hebreos 10.19-39

<table class="altgray"><tr><td>

Lane dice que el pasaje se divide en cuatro secciones:

|bluealtrows|k
|!10.19-25|Tres exhortaciones con base en el sacerdocio de Cristo|
|!10.26-31|Una advertencia severa del peligro de la apostasía|
|!10.32-35|Un recordatorio pastoral de la fidelidad de los destinatarios en el pasado|
|!10.36-39|Una promesa de recompensa|

<span class="source">William Lane, //Word Biblical Commentary, vol 47B: Hebrews 9-13//, 281-282.</span>
</td></tr></table>

!!10.19-25

<table class="altgray"><tr><td>

Las exhortaciones de 10.19-25 se basan en la exposición del sacerdocio de Cristo en caps 7-10: «Así que, hermanos, teniendo libertad para entrar en el Lugar Santísimo por la sangre de Jesucristo...» (10.19)

</td></tr>

<tr><td>

El tema de acercarse a Dios en 10.19-20 y 10.22 es un tema que se menciona a través del libro. Ve [ext[El tema de acercarse a Dios en Hebreos|http://articulos.giffmex.org/hebreos/acercarse.html]].

</td></tr>

<tr><td>

La oración es larga, y vale la pena resumir su esencia:

://Ya que tenemos la confianza de entrar ante Dios...//<br><br>

:://debemos acercarnos a Dios con confianza...,//<br><br>

:://debemos mantener nuestra esperanza en Dios,//<br><br>

:://y debemos motivarnos unos a otros...//

</td></tr>

<tr><td>

Es desafortunado que en algunas

</td></tr>

</table>
|bluealtrows|k
|!Vv.|!Quien |!“Por fe”|!Promesas|!Comendación|!Invisible / visible|!Futuro|!Oposición|
|1-2|Introducción|| x | x | x | x ||
|3|Nosotros| x | || x |||
|4|Abel| x || x ||| x |
|5|Enoc| x || x ||||
|6|(comentario)| x ||||||
|7|Noé| x ||| x || x |
|8-12|Abraham| (2x) |Hijo, tierra|| x | x | ¿v. 9? |
|13-16|(comentario)|| x ||| x ||
|17-19|Abraham| x | x || x |||
|20|Isaac| x ||| x | x ||
|21|Jacob| x ||| x |||
|22|José| x |||| x ||
|23|Los padres de Moisés| x || x ||| x |
|24-28|Moisés| (3x) |||| x | x |
|29|Israel (Mar Rojo)| x ||||| x |
|30|Israel (Jericó)| x ||||| x |
|31|Rahab|||||||
|32-33ª|Varios|| x |||| x |
|33b-34|Varios|||||| x |
|35ª|La viuda de Sarepta, la mujer de Sunem|||||||
|35b|2 Mac. 7||||| x | x |
|36-38|Profetas|||||| x |
|39-40|(comentario)|| x | x | | x | |

,,Fuentes: Varias,,
|bluealtrows|k
|11.2|Por [la fe] ''alcanzaron buen testimonio'' los antiguos.|
|11.4|Por la fe Abel ofreció a Dios más excelente sacrificio que Caín, por lo cual ''alcanzó testimonio de que era justo, dando Dios testimonio de sus ofrendas;'' y muerto, aún habla por ella.|
|11.5|Por la fe Enoc fue traspuesto para no ver muerte, y no fue hallado, porque lo traspuso Dios; y antes que fuera traspuesto, ''tuvo testimonio de haber agradado a Dios.''|
|11.16|Pero anhelaban una mejor, esto es, celestial; ''por lo cual Dios no se avergüenza de llamarse Dios de ellos'', porque les ha preparado una ciudad. |
|11.39|Pero ninguno de ellos, aunque ''alcanzaron buen testimonio'' mediante la fe, recibió lo prometido....|

@@.source Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|11.4|(implícito: Caín mató a Abel)|
|11.23|Moisés nació en el contexto de oposición de Faraón a los Israelitas|
|11.24-28|Moisés prefirió "ser maltratado con el pueblo de Dios" y aceptó "el oprobio de Cristo", y no temió al Faraón|
|11.29|Los egipcios perseguían a los Israelitas en el Mar Rojo|
|11.32-34|Jueces y reyes que enfrentaron oposición de otras naciones por su fe|
|11.35-38|Profetas y otros que aceptaron sufrir la persecución por su fe|

@@.source Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|11.1|Es, pues, la fe la certeza de lo que se espera, la convicción de ''lo que no se ve''.|
|11.7|Por la fe Noé, cuando fue advertido por Dios acerca de ''cosas que aún no se veían''....|
|11.8|Por la fe Abraham, siendo llamado, obedeció para salir al lugar que había de recibir como herencia; y salió ''sin saber a dónde iba''.|
|11.27|Moisés "se sostuvo ''como viendo al Invisible''"|
,,Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998),,
|bluealtrows|k
|11.1|Es, pues, la fe ''la certeza de lo que se espera'', la convicción de lo que no se ve. |
|11.7|Por la fe Noé, cuando fue advertido por Dios acerca de cosas que ''aún'' no se veían, con temor preparó el arca en que su casa se salvaría; y por esa fe condenó al mundo y fue hecho heredero de la justicia que viene por la fe. |
|11.8-9|Por la fe Abraham, siendo llamado, obedeció para salir ''al lugar que había de recibir como herencia''; y salió sin saber a dónde iba. Por la fe habitó como extranjero en ''la tierra prometida'' como en tierra ajena, habitando en tiendas con Isaac y Jacob, ''coherederos de la misma promesa'',|
|11.10|[Abraham] ''esperaba'' la ciudad que tiene fundamentos, cuyo arquitecto y constructor es Dios.|
|11.11|[Sara] creyó que era fiel quien lo había ''prometido''.|
|11.12|Mención de ''la promesa'' en Génesis 15|
|11.13-16|En la fe murieron todos estos ''sin haber recibido lo prometido'', sino'' mirándolo de lejos'', creyéndolo y saludándolo, y confesando que eran extranjeros y peregrinos sobre la tierra. Los que esto dicen, claramente dan a entender que ''buscan una patria'', pues si hubieran estado pensando en aquella de donde salieron, ciertamente tenían tiempo de volver. Pero ''anhelaban una mejor'', esto es, celestial; por lo cual Dios no se avergüenza de llamarse Dios de ellos, porque les ha preparado una ciudad.|
|11.17|el que había recibido ''las promesas'', ofrecía su unigénito|
|11.20|Por la fe bendijo Isaac a Jacob y a Esaú respecto a ''cosas venideras''. |
|11.22|Por la fe José, al morir, mencionó la salida de los hijos de Israel y dio mandamiento acerca de sus huesos.|
|11.26|Moisés ''tenía puesta la mirada en la recompensa.''|
|11.33|Algunos ''alcanzaron promesas''|
|11.35|Hubo mujeres que recobraron con vida a sus muertos; pero otros fueron atormentados, no aceptando el rescate, ''a fin de obtener mejor resurrección''.|
|11.39-40|Pero ''ninguno de ellos'', aunque alcanzaron buen testimonio mediante la fe, ''recibió lo prometido'', porque Dios tenía reservado algo mejor para nosotros, para que no fueran ellos perfeccionados aparte de nosotros. |

@@.source Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|11.3|Por la fe comprendemos que el universo fue hecho por la palabra de Dios|
|11.4|Por la fe Abel ofreció a Dios más excelente sacrificio que Caín|
|11.5|Por la fe Enoc fue traspuesto para no ver muerte|
|11.7|Por la fe Noé...preparó el arca|
|11.8|Por la fe Abraham, siendo llamado, obedeció para salir...|
|11.9|Por la fe habitó como extranjero...|
|11.11|Por la fe también la misma Sara, siendo estéril, recibió fuerza para concebir|
|11.17|Por la fe Abraham, cuando fue probado, ofreció a Isaac|
|11.20|Por la fe bendijo Isaac a Jacob y a Esaú|
|11.21|Por la fe Jacob, al morir, bendijo a cada uno de los hijos de José y adoró|
|11.22|Por la fe José, al morir, mencionó la salida de los hijos de Israel y dio mandamiento acerca de sus huesos.|
|11.23|Por la fe Moisés, cuando nació, fue escondido por sus padres|
|11.24|Por la fe Moisés, hecho ya grande, rehusó llamarse hijo de la hija del faraón,|
|11.27|Por la fe [Moisés] dejó a Egipto|
|11.28|Por la fe celebró la Pascua y la aspersión de la sangre|
|11.29|Por la fe pasaron el Mar Rojo como por tierra seca|
|11.30|Por la fe cayeron los muros de Jericó|
|11.31|Por la fe Rahab la ramera no pereció|
|bluebycell|k
|Mostrar el amor fraternal a los necesitados (13.1-3)|13.1|Exhortación principal|
|~|13.2|Exhortación secundaria #1 + reason|
|~|13.3|Exhortación secundaria #2 + manner<br>Exhortación secundaria #3 + manera<br>|
|!Ser fieles en el matrimonio (13.4)|!13.4|!Dos exhortaciones implícitas + razón|
|No amar al dinero; Dios nos protegerá (13.5-6)|13.5a|Exhortación + manera|
|~|13.5b|Razón|
|~|13.6|Exhortación implícita + contenido|
|!Recordarse de los líderes anteriores (13.7)|!13.7|!Exhortación + manera<br>Exhortación|
|Jesús es constante. No andar tras enseñanzas novedosas (13.8-9a)|13.8|Afirmación|
|~|13.9a|Exhortación|
|!Alimentarse con la gracia, no con las comidas ceremoniales (13.9b-10)|!13.9b|!Afirmación|
|~|!13.10|!Afirmación = razón|
|Seguir a Jesucristo fuera del campamento (13.11-14)|13.11|Dos afirmaciones|
|~|13.12|Afirmación + propósito|
|~|13.13|Exhortación + manera|
|~|13.14|Dos afirmaciones = razones|
|!Ofrecer sacrificios cristianos (13.15-16)|!13.15|!Exhortación|
|~|!13.16a|!Exhortación|
|~|!13.16b|!Afirmación = razón|
|Obedecer a los líderes actuales (13.17)|13.17a|Dos afirmaciones<br>Afirmación = razón<br>Purpose of the exhortation|
|~|13.17b|Afirmación = razón|
,,Fuente: estudio personal del autor.,,
|bluealtrows|k
|Petición (13.18-19)|
|Bendición de paz (13.20-21|
|Exhortación a la diligencia (13.22)|
|Planes de visitar(13.23)|
|Saludos (13.24)|
|Bendición de gracia (13.25)|

@@.source Fuente: estudio personal del autor.@@
A Así que, por cuanto los hijos <br>

:B ''participaron'' de carne y sangre, <br>

A él también <br>

:B ''participó'' de lo mismo 

-----

C para por medio de la ''muerte'' 

:D destruir (quitar el ''poder'')<br><br>

:D al que tenía el ''imperio'' (poder)

C de la ''muerte'', 

-----

(esto es, al diablo,)

-----

E y ''librar'' a todos los que 

:F por el temor de la ''muerte'' <br><br>

:F estaban durante toda la ''vida'' 

E sujetos a ''servidumbre.'' 

,,Fuente: Lane. Texto bíblico: Reina Valera Revisada (1995) (Miami: Sociedades Biblicas Unidas, 1998).,,
Cuando Hebreos 5.7 menciona que Jesucristo "...ofreció ruegos y súplicas con gran clamor y lágrimas al que lo podía librar de la muerte", probablemente no es una referencia a sus lágrimas en el huerto de Getsemaní:

*El relato acerca de Getsemaní en los Evangelios no menciona clamores o lágrimas.
*La petición de Jesús en Getsemaní fue que se quitara la copa de sufrimiento. Y Dios no le concedió esta petición. En cambio, en Hebreos 5.7, la petición de Jesús fue que sea rescatado de la muerte, y esta petición fue concedida, cuando resucitó.
Hebreos 5.7 probablemente alude a Salmo 116.1, 3 y 8:

//
Amo a Jehová, pues ha oído mi voz y mis súplicas,<br>
Me rodearon ligaduras de muerte, me encontraron las angustias del seol; angustia y dolor había yo hallado.<br>
pues tú has librado mi alma de la muerte, mis ojos de lágrimas y mis pies de resbalar.//
En parte, el autor está amonestando a sus lectores porque ellos no están preparados para recibir sus enseñanzas acerca de Melquisedec (5.11). Sin embargo, este pasaje es relacionado con el propósito de toda la carta a los Hebreos. Ellos han sido negligentes con el mensaje que han recibido (2.1-4, etc), y es muy importante fortalecerse en la Palabra de Dios y volver a poner su mirada en Jesús (12.2-3) para poder soportar la oposición que próximamente van a experimentar. Los que abandonan su fe en Jesús debido a la oposición llegarán a un punto pasado el cual no se arrepentirán jamás. Pero el autor tiene la confianza que sus lectores harán lo correcto (6.9-12).
:Fueron iluminados
:Gustaron del don celestial, 
:Fueron hechos partícipes del Espíritu Santo
:Gustaron de la buena palabra de Dios
:(Gustaron) los poderes del mundo venidero

Estas cláusulas se refieren a la experimentación de los beneficios del evangelio. Las personas que se integran a la iglesia reciben muchas bendiciones y ven con sus propios ojos el poder del Espíritu Santo mientras que éste se manifiesta en la iglesia a través del amor y de los dones espirituales de los creyentes. Así que los que salen de la iglesia no tienen excusa. 

Estas cláusulas podrían aplicarse a creyentes o a incrédulos dentro de la iglesia. El autor de Hebreos no está interesado en el debate entre los Calvinistas y los Arminianos. Así que el pasaje no es decisivo. Tenemos que formar nuestra doctrina por el testimonio mayor de la Biblia, y aplicarlo a este pasaje. 

Nosotros creemos en la perseverancia de los santos. Los elegidos tienen seguridad de la salvación. Nada puede quitarnos de la mano de Dios. Sin embargo, reconocemos el otro lado de la moneda: los santos son los que perseveran. Las personas apostatas demuestran con su apostasía que no son elegidos a la salvación. Los que se mantienen fiel a Jesús hasta el final son los santos.
¿Qué exactamente es imposible para las personas que han recaído en Hebreos 6? Es importante notar que no habla de un límite al amor de Dios. Lo que es imposible no es el perdón. Se trata de una imposibilidad en el corazón de ellos. Será imposible renovarle a ellos al arrepentimiento. Calvino lo compara con el proceso de endurecimiento que Pablo menciona en Romanos 1:21ff. Ellos se entregan al pecado tan completamente que Dios les entrega al poder de sus pasiones. Ellos pasan el punto de no retorno porque ya no pueden arrepentirse. No quieren.

Así que podemos también consolar a las personas que vienen arrepentidas a Cristo, pero preocupadas por este versículo. Si se han arrepentido, es una señal que las advertencias de este pasaje no se aplican a ellos. El pasaje dice que hay personas que en su terquedad llegarán al punto donde no se arrepentirán jamás.
Este pasaje ha sido uno de los pasajes más difíciles de aceptar e interpretar en la historia de la iglesia. 

*La rama occidental de la iglesia antigua no quería aceptar esta carta por causa de este pasaje. Esto fue porque los Novacianos lo habían utilizado para decir que los que se habían renunciado su fe bajo la persecución no podían ser aceptados de nuevo por la iglesia. 
*Ha sido un pasaje difícil para los Calvinistas porque creen en la perseverancia de los santos, y este pasaje parece decir que los creyentes pueden perder la salvación.
*Y muchos creyentes han dudado de su salvación después de leer esta advertencia tan severa y la de capítulo 10.
!!!Interpretación Hipotética

*El autor diseña el pasaje para tener mayor impacto, pero describe algo que en verdad no puede suceder.  “Si hubieran personas que se recayeran, sería imposible renovarlas al arrepentimiento.”
*''Problema:'' Varias advertencias a través del libro dan la impresión que la apostasía es un peligro auténtico para sus lectores, no hipotético. 

!!!Interpretación “Judíos no convertidos”

*El autor está dirigiendo esta advertencia a personas ligeramente asociadas con la iglesia, judíos que han asistido a la iglesia pero no se han convertido. “Es imposible para los que experimentan algo del evangelio, cuando lo rechazan, renovarlos al arrepentimiento.”
*''Problema:'' Los destinatarios que el autor desafía son cristianos verdaderos que han hecho una profesión (3.1, 3.6, 3.14, 4.14).

!!!Interpretación “Comunidad del Pacto”

*El autor tiene Isaías 5.1-7 en vista. El peligro no es a nivel de individuos sino a nivel de la comunidad. “Es imposible renovar una iglesia al arrepentimiento si rechaza a Jesús. (Dios quitará la lámpara de su iglesia).”
*''Problema:'' El autor distingue entre sus destinatarios:
**4.1: Cuídense que ninguno de Ustedes…
**Este pasaje: Distinción entre los que recaen y la confianza que tiene en sus lectores.

!!!Interpretación “Creyente verdadero bajo juicio”

*El peligro no es la pérdida de la salvación sino un castigo divino muy severo, como los Israelitas en el desierto. Perderán una bendición en esta vida. “Si descuidan la Palabra de Dios, serán castigados severamente (pero no perderán la salvación).”
*''Problema:'' Estas advertencias y las demás en el libro son muy fuertes. En particular, 10.26-31 describe los que caen como enemigos de Dios por los cuales ya no queda otro sacrificio para la remisión de sus pecados.

!!!Interpretación “Creyente verdadero”

*Se trata de creyentes verdaderos que perderán su salvación. “Si recaen, perderán la salvación sin la posibilidad de recuperarlo.”
*''Problema:'' Va en contra del testimonio del canon, que no se pierde la salvación.

!!!Interpretación “Incrédulo”

*Algunos en la iglesia parecían ser creyentes, pero su apostasía demuestra que nunca tenían una fe genuina. “Los que participan en las bendiciones del evangelio pero después rechazan a Jesús, no pueden ser renovados al arrepentimiento.”
*''Problema:'' A primera vista varias cláusulas en este texto parecen hablar de bendiciones aplicables a creyentes auténticos.

@@.source Fuente: George Guthrie, Hebrews: NIV Application Commentary. (Grand Rapids: Zondervan).@@

!!!Notas adicionales

*“Probablemente debemos leer las advertencies de 5.11-6.12 en la luz de la idea del espacio sagrado y concepciones corporativas de la salvación, donde los que son bautizados como entrada a la comunidad son vistos como personas que genuinamente participan en las realidades de la salvación.” (Laansma, 277).
*Para ponerlo en términos reformados, los que dejaron su fe y perdieron su salvación no eran creyentes regenerados sino miembros que estaban dentro de la iglesia por bautismo y disfrutaban las bendiciones de ser miembros del pacto. 
Acerca de la palabra “recayeron”, la gran mayoría de los comentaristas están de acuerdo que significa la apostasía, el abandono total del cristianismo. Los lectores originales eran Judíos cristianos bajo mucha presión de rechazar el mensaje de Jesús, dejar de congregarse con los creyentes, y volver al judaísmo, su religión anterior. 

Esto significa que no estamos hablando de pecados individuales. El autor no está diciendo que las personas que momentáneamente vuelven a sus pecados habituales del pasado no tienen esperanza de ser salvos. Podemos consolar a los que han cometido algún pecado grave, y después creen que no hay esperanza para ellos. Este pasaje no se aplica a ellos. Está hablando de personas que públicamente y decisivamente abandonan su fe en Jesucristo después de haberlo recibido. 

Sin embargo, los pecados son peligrosos, y cuanto más cedemos a ellos, tanto más nos acercamos al peligro de la apostasía. Calvino en su comentario sobre este pasaje habla de las sutilezas del Tentador, y de un proceso que comienza lentamente con los pecados individuales, pero que nos lleva al final a la perdición.
Los enemigos de Jesús lo crucificaron y se burlaron de él. Alguien que rechaza a Jesús hace lo mismo que los enemigos de Jesús hicieron al final de su vida terrenal. Las palabras “de nuevo” no significan que la persona misma crucifica a Jesús dos veces.
Algunos Judíos del primer siglo levantaron una objeción devastadora al Cristianismo: Jesús no pudo haberse ofrecido como sacrificio en la cruz, //¡porque no era un legítimo sacerdote!// Esta objeción envió al autor de Hebreos a su Biblia para investigar. Después de estudiar Génesis y Salmos, el autor descubrió que Jesús sí era un sacerdote, de un linaje sacerdotal superior al de los sacerdotes levíticos. Véase nuestro artículo sobre este tema fascinante, [[El argumento de Hebreos acerca de Melquisedec]].

-----

Alguien ha propuesto esta estructura quiástica a Hebreos 7.1-10:

:Meeting (1a) <br><br>
::Blessing (1b) <br><br>
:::Tenth (2) <br><br>
::::Melchizedek is like the Son of God (3) <br><br>
:::Tenth (4-6) <br><br>
::Blessing (7-10a) <br><br>
:Meeting (10b)

@@.source http://www.inthebeginning.org/chiasmus/xfiles/xheb7_1-10.pdf@@
|bluealtrows|k
|!La Iglesia Católica Romana enseña…|!Hebreos dice…|
|Cristo es sacrificado cada vez que se celebra la Misa|Cristo fue sacrificado una vez para siempre|
|Nuestras obras contribuyen a nuestra salvación|Entramos en el reposo de Dios, descansando de nuestras obras|
|La oración es por medio de María y otros intercesores, implicando que orar por Jesús no es tan eficaz o que él no simpatiza con nuestras luchas|Tenemos un Sumo Sacerdote, Jesús, que simpatiza con nosotros porque sufrió y fue tentado igual que nosotros. Hebreos varias veces nos llama a acercarnos a Dios por medio de él|
|La doctrina del purgatorio|Morimos una vez, y después el juicio|
|Aunque la doctrina oficial de la Iglesia ha cambiado, todavía hay personas católicas que dicen que solo los sacerdotes deben leer la Biblia|Varias veces el autor de Hebreos amonesta a sus lectores a no descuidar la palabra que recibieron, que es como espada de dos filas|
<table class="altgray"><tr><td>

Los comentaristas proponen tres candidatos históricos para el error que Juan estaba combatiendo: Gnosticismo, Docetismo, y la herejía de Cerinto.

</td></tr><tr><td>

!!Gnosticismo

El Gnosticismo no era una sola religión o movimiento formal sino un conjunto de diferentes énfasis en la religión del segundo siglo, con raíces en el primer siglo. 

*Los gnósticos decían que lo material y físico es malo y lo espiritual es bueno. 
*Decían que hay una cadena de seres espirituales que emanan de un solo Dios. Uno de estos seres sale de la cadena y crea el mundo físico. 
*El objetivo de los gnósticos era escapar al mundo físico y vivir en el mundo espiritual.

</td></tr><tr><td>

!!Docetismo

El Docetismo era una rama del Gnosticismo influenciada por el Cristianismo. Enseñaba que Cristo no se encarnó, porque la carne, como toda materia física, es mala. Creían que Jesús era Dios, pero no podían creer que Dios se haría un ser humano de carne y hueso. Docetismo viene de la palabra para “parecer”, y significa que Dios solo parecía haberse encarnado en la persona de Jesús. Era un ser espiritual disfrazado como humano, pero no era un ser humano de verdad.

</td></tr><tr><td>

!!Cerinto

Cerinto era un hereje semi-gnóstico del primer siglo. Según Eusebio, Policarpo reporta que Juan huyó de los baños públicos porque escuchó que Cerinto estaba adentro y dijo que en cualquier momento Dios podía enviar destrucción sobre este “enemigo de la verdad.” El error de Cerinto era separar el humano Jesús y el Cristo divino. Decía que el Cristo (o el Espíritu Santo) vino sobre el humano Jesús de Nazaret en su bautismo, pero cuando Jesús murió, el Cristo o el Espíritu Santo salió de él. Según Cerinto, Jesús murió en la cruz, no el Cristo divino.

</td></tr><tr><td>

!!Conclusión

Es interesante notar los contrastes entre 1 Juan y estas herejías. Pero sin mayor información no podemos llegar a una conclusión firme. Hay errores en cada herejía que 1 Juan no menciona, y hay errores que 1 Juan combate que no son parte de estas herejías.

</td></tr></table>
Hay 34 imperativos en los cinco capítulos de 1 Pedro. Eso indica que hay mucho énfasis en la obediencia.
* Apocalipsis 1.1 alude a Daniel 2.28-29, 2.45
* Apocalipsis 1.4, 1.8 alude a Éxodo 3.14, Isaías 41.4
* Apocalipsis 1.5 alude a Salmos 89.27, 130.8, Isaías 40.2
* Apocalipsis 1.6 alude a Éxodo 19.6, Isaías 61.6
* Apocalipsis 1.7 alude a Daniel 7.13, Zacarías 12.10, 12.12, 12.14
* Apocalipsis 1.8 alude a Amós 3.13, 4.13
* Apocalipsis 1.13 alude a Ezequiel 9.2, 9.11, Daniel 7.13, 10.5
* Apocalipsis 1.14 alude a Daniel 7.9, 10.6
* Apocalipsis 1.15 alude a Ezequiel 1.24, 43.2, Daniel 10.6
* Apocalipsis 1.16 alude a Isaías 49.2
* Apocalipsis 1.17 alude a Isaías 44.6, 48.12
* Apocalipsis 1.19 alude a Isaías 48.6, Daniel 2.28-29, 2.45
* Apocalipsis 2.6 alude a Salmos 139.21
* Apocalipsis 2.7 alude a Génesis 2.8, 2.9, 3.22, 3.24, Ezequiel 28.13, 31.8-9
* Apocalipsis 2.8 alude a Isaías 44.6, 48.12
* Apocalipsis 2.10 alude a Daniel 1.12, 1.14
* Apocalipsis 2.12 alude a Isaías 49.2
* Apocalipsis 2.14 alude a Números 31.16
* Apocalipsis 2.14, 2.20 alude a Números 25.1-2
* Apocalipsis 2.16 alude a Isaías 49.2
* Apocalipsis 2.17 alude a Salmos 78.24, Isaías 62.2, 65.15
* Apocalipsis 2.18 alude a Daniel 10.6
* Apocalipsis 2.20 alude a 1 Reyes 16.31, 2 Reyes 9.22
* Apocalipsis 2.23 alude a Salmos 7.9, 62.12, Proverbios 24.12, Jeremías 11.20, 17.10
* Apocalipsis 2.26-27 alude a Salmos 2.8-9
* Apocalipsis 3.5 alude a Éxodo 32.32-33, Salmos 69.28, Daniel 12.1
* Apocalipsis 3.7 alude a Job 12.14, Isaías 22.22
* Apocalipsis 3.9 alude a Isaías 43.4, 45.14, 49.23, 60.14
* Apocalipsis 3.12 alude a Isaías 62.2, 65.15, Ezequiel 48.35
* Apocalipsis 3.14 alude a Proverbios 8.22
* Apocalipsis 3.17 alude a Oseas 12.8
* Apocalipsis 3.19 alude a Proverbios 3.12
* Apocalipsis 4.1 alude a Éxodo 19.20, 19.24, Daniel 2.28-29, 2.45
* Apocalipsis 4.2, 4.9, 4.10 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27
* Apocalipsis 4.4 alude a Isaías 24.23
* Apocalipsis 4.5 alude a Ester 1.1, Ezequiel 1.13, Zacarías 4.2
* Apocalipsis 4.6 alude a Éxodo 19.16, Ezequiel 1.22
* Apocalipsis 4.6-7 alude a Ezequiel 1.5-10, 10.14
* Apocalipsis 4.8 alude a Éxodo 3.14, Isaías 6.2, 6.3, 41.4, Ezequiel 1.18, 10.12, Amós 3.13, 4.13
* Apocalipsis 4.9 alude a Daniel 4.34, 6.26, 12.7
* Apocalipsis 5.1 alude a Isaías 29.11, Ezequiel 2.9-10
* Apocalipsis 5.1, 5.7, 5.13 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27
* Apocalipsis 5.5 alude a Génesis 49.9-10, Isaías 11.1, 11.10
* Apocalipsis 5.6 alude a Isaías 53.7, Zacarías 4.10
* Apocalipsis 5.8 alude a Salmos 141.2
* Apocalipsis 5.9 alude a Salmos 33.3, 40.3, 96.1, 98.1, 144.9, 149.1, Isaías 42.10
* Apocalipsis 5.10 alude a Éxodo 19.6, Isaías 61.6
* Apocalipsis 5.11 alude a Daniel 7.10
* Apocalipsis 5.12 alude a 1 Crónicas 29.11, Isaías 53.7
* Apocalipsis 6.2 alude a Zacarías 1.8, 6.3, 6.6
* Apocalipsis 6.4 alude a Zacarías 1.8, 6.2
* Apocalipsis 6.5 alude a Zacarías 6.2, 6.6
* Apocalipsis 6.8 alude a Jeremías 14.12, 15.3, Ezequiel 5.12, 5.17, 14.21, 33.27
* Apocalipsis 6.10 alude a Deuteronomio 32.43, 2 Reyes 9.7, Salmos 79.10
* Apocalipsis 6.12 alude a Joel 2.31
* Apocalipsis 6.12-13 alude a Isaías 13.10, Ezequiel 32.7-8, Joel 2.10, 3.15
* Apocalipsis 6.13-14 alude a Isaías 34.4
* Apocalipsis 6.15 alude a Isaías 2.10, 2.19, 2.21, Jeremías 4.29
* Apocalipsis 6.16 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27, Oseas 10.8
* Apocalipsis 6.17 alude a Joel 2.11, Nahúm 1.6, Malaquías 3.2
* Apocalipsis 7.1 alude a Jeremías 49.36, Ezequiel 37.9, Daniel 7.2, Zacarías 6.5
* Apocalipsis 7.3 alude a Ezequiel 9.4
* Apocalipsis 7.10, 7.15 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27
* Apocalipsis 7.14 alude a Daniel 12.1
* Apocalipsis 7.16 alude a Isaías 49.10
* Apocalipsis 7.17 alude a Salmos 23.1-2, Isaías 25.8, 49.10, Jeremías 2.13, Ezequiel 34.23
* Apocalipsis 8.3 alude a Éxodo 30.1-3
* Apocalipsis 8.3-4 alude a Salmos 141.2
* Apocalipsis 8.5 alude a Éxodo 19.16-19, Levítico 16.12, Ester 1.1
* Apocalipsis 8.7 alude a Éxodo 9.23-24, Ezequiel 38.22
* Apocalipsis 8.8 alude a Éxodo 7.20-21
* Apocalipsis 8.11 alude a Jeremías 9.15
* Apocalipsis 8.12 alude a Isaías 13.10, Ezequiel 32.7-8, Joel 2.10, 3.15
* Apocalipsis 9.2 alude a Génesis 19.28, Éxodo 19.18
* Apocalipsis 9.3 alude a Éxodo 9.12, 9.15
* Apocalipsis 9.4 alude a Ezequiel 9.4
* Apocalipsis 9.6 alude a Job 3.21, Jeremías 8.3, Oseas 10.8
* Apocalipsis 9.7 alude a Joel 2.4-5
* Apocalipsis 9.8 alude a Joel 1.6
* Apocalipsis 9.9 alude a Joel 2.5
* Apocalipsis 9.13 alude a Éxodo 30.1-3
* Apocalipsis 9.20 alude a Deuteronomio 32.17, Salmos 115.4-7, 135.15-17, Daniel 5.23
* Apocalipsis 10.4 alude a Daniel 8.26, 12.4, 12.9
* Apocalipsis 10.5-6 alude a Deuteronomio 32.40, Daniel 12.7
* Apocalipsis 10.6 alude a Génesis 14.19, 14.22, Éxodo 20.11, Nehemías 9.6, Salmos 146.6
* Apocalipsis 10.7 alude a Daniel 9.6, 9.10, Amós 3.7, Zacarías 1.6
* Apocalipsis 10.9-10 alude a Ezequiel 2.8, 3.1-3
* Apocalipsis 10.11 alude a Jeremías 1.10, 25.30, Daniel 3.4, 7.14
* Apocalipsis 11.1 alude a Ezequiel 40.3, Zacarías 2.1-2
* Apocalipsis 11.2 alude a Salmos 79.1, Isaías 63.18, Zacarías 12.3
* Apocalipsis 11.4 alude a Zacarías 4.3, 4.11-14
* Apocalipsis 11.5 alude a 2 Samuel 22.9, 2 Reyes 1.10, Salmos 97.3, Jeremías 5.14
* Apocalipsis 11.6 alude a Éxodo 7.17, 7.19-20, 1 Samuel 4.8, 1 Reyes 17.1
* Apocalipsis 11.7 alude a Daniel 7.3, 7.7, 7.21
* Apocalipsis 11.8 alude a Isaías 1.10
* Apocalipsis 11.11 alude a Ezequiel 37.5, 37.10
* Apocalipsis 11.12 alude a 2 Reyes 2.11
* Apocalipsis 11.13 alude a Ezequiel 38.19-20
* Apocalipsis 11.15 alude a Éxodo 15.18, Salmos 10.16, 22.28, Daniel 2.44, 7.14, Abdías 21, Zacarías 14.9
* Apocalipsis 11.17 alude a Éxodo 3.14, Amós 3.13, 4.13
* Apocalipsis 11.18 alude a Salmos 2.1, 46.6, 115.13, Daniel 9.6, 9.10, Amós 3.7, Zacarías 11.18
* Apocalipsis 11.19 alude a Éxodo 9.24, 19.16, 1 Reyes 8.1, 8.6, 2 Crónicas 5.7, Ester 1.1, Ezequiel 1.13
* Apocalipsis 12.2 alude a Isaías 66.7, Miqueas 4.10
* Apocalipsis 12.3 alude a Daniel 7.7
* Apocalipsis 12.4 alude a Daniel 8.10
* Apocalipsis 12.5 alude a Salmos 2.9, Isaías 7.14, 66.7
* Apocalipsis 12.7 alude a Daniel 10.13, 10.21, 12.1
* Apocalipsis 12.9 alude a Isaías 14.12
* Apocalipsis 12.10 alude a Job 1.9-11, Zacarías 3.1
* Apocalipsis 12.14 alude a Daniel 7.25, 12.7
* Apocalipsis 12.17 alude a Daniel 7.7, 7.21
* Apocalipsis 13.1 alude a Daniel 7.3
* Apocalipsis 13.2 alude a Daniel 7.4-6
* Apocalipsis 13.5 alude a Daniel 7.8, 7.20, 7.25, 11.36
* Apocalipsis 13.7 alude a Daniel 7.7, 7.21
* Apocalipsis 13.8 alude a Éxodo 32.32-33, Salmos 69.28, Isaías 53.7, Daniel 12.1
* Apocalipsis 13.10 alude a Jeremías 15.2, 43.11
* Apocalipsis 13.13 alude a 1 Reyes 18.24-39
* Apocalipsis 13.14 alude a Deuteronomio 13.2-4
* Apocalipsis 13.15 alude a Daniel 3.5-6
* Apocalipsis 14.1 alude a Ezequiel 9.4
* Apocalipsis 14.2 alude a Ezequiel 1.24, 43.2
* Apocalipsis 14.3 alude a Salmos 33.3, 40.3, 96.1, 98.1, 144.9, 149.1, Isaías 42.10, Ezequiel 1.26-28
* Apocalipsis 14.5 alude a Salmos 32.2, Isaías 53.9, Sofonías 3.13
* Apocalipsis 14.7 alude a Éxodo 20.11, Salmos 146.6
* Apocalipsis 14.8 alude a Isaías 21.9, Jeremías 51.7, 51.8
* Apocalipsis 14.10 alude a Génesis 19.24, Salmos 11.6, 75.8, Isaías 51.17, 51.22, Jeremías 25.15, Ezequiel 38.22
* Apocalipsis 14.11 alude a Isaías 34.10
* Apocalipsis 14.14 alude a Daniel 7.13
* Apocalipsis 14.15, 14.18 alude a Joel 3.13
* Apocalipsis 14.20 alude a Isaías 63.3, Lamentaciones 1.15
* Apocalipsis 15.1, 15.6 alude a Levítico 26.21
* Apocalipsis 15.3 alude a Éxodo 15.1, 15.11, Deuteronomio 32.4, Salmos 92.5, 111.2, 139.14, 145.17, Jeremías 10.10, Amós 3.13, 4.13
* Apocalipsis 15.4 alude a Salmos 86.9, Jeremías 10.6-7, Malaquías 1.11
* Apocalipsis 15.5 alude a Éxodo 38.21, 40.34
* Apocalipsis 15.7 alude a Salmos 75.8, Isaías 51.17, 51.22, Jeremías 25.15
* Apocalipsis 15.8 alude a Éxodo 40.34, 1 Reyes 8.10-11, 2 Crónicas 5.13-14, Isaías 6.4, Ezequiel 44.4
* Apocalipsis 16.1 alude a Salmos 69.24, Isaías 66.6, Jeremías 10.25, Ezequiel 22.31, Sofonías 3.8
* Apocalipsis 16.2 alude a Éxodo 9.10, Deuteronomio 28.35
* Apocalipsis 16.3 alude a Éxodo 7.17-21
* Apocalipsis 16.4 alude a Éxodo 7.19-24, Salmos 78.44
* Apocalipsis 16.5 alude a Éxodo 3.14, Deuteronomio 32.4, Salmos 119.137, 145.17
* Apocalipsis 16.6 alude a Salmos 79.3, Isaías 49.26
* Apocalipsis 16.7 alude a Salmos 19.9, 119.137, Amós 3.13, 4.13
* Apocalipsis 16.10 alude a Éxodo 10.21, Isaías 8.22
* Apocalipsis 16.12 alude a Isaías 11.15, 44.27, Jeremías 50.38, 51.36
* Apocalipsis 16.14 alude a Amós 3.13, 4.13
* Apocalipsis 16.16 alude a Jueces 5.19, 2 Reyes 9.27, 23.29, Zacarías 12.11
* Apocalipsis 16.17 alude a Isaías 66.6
* Apocalipsis 16.18 alude a Éxodo 19.16-19, Ester 1.1, Daniel 12.1
* Apocalipsis 16.19 alude a Salmos 75.8, Isaías 51.17, 51.22, Jeremías 25.15
* Apocalipsis 16.21 alude a Éxodo 9.24
* Apocalipsis 17.1 alude a Jeremías 51.13
* Apocalipsis 17.2 alude a Isaías 23.17, Jeremías 51.7, Daniel 7.24
* Apocalipsis 17.4 alude a Jeremías 51.7, Ezequiel 28.13
* Apocalipsis 17.8 alude a Éxodo 32.32-33, Salmos 69.28, Daniel 7.3, 12.1
* Apocalipsis 17.14 alude a Deuteronomio 10.17, Daniel 2.47
* Apocalipsis 17.16 alude a Levítico 21.9
* Apocalipsis 18.2 alude a Isaías 13.21, 21.9, 34.11, Jeremías 50.39, 51.8
* Apocalipsis 18.3 alude a Isaías 23.17, Jeremías 51.7
* Apocalipsis 18.4 alude a Isaías 48.20, 52.11, Jeremías 50.8, 51.6, 51.9, 51.45
* Apocalipsis 18.5 alude a Génesis 18.20-21, Jeremías 51.9
* Apocalipsis 18.6 alude a Salmos 137.8, Jeremías 50.15, 50.29
* Apocalipsis 18.7-8 alude a Isaías 47.7-9
* Apocalipsis 18.8 alude a Levítico 21.9, Jeremías 50.34
* Apocalipsis 18.9 alude a Ezequiel 26.16, 27.30-35
* Apocalipsis 18.10 alude a Ezequiel 26.17, Daniel 4.30
* Apocalipsis 18.11, 18.15 alude a Ezequiel 27.36
* Apocalipsis 18.12-13 alude a Ezequiel 27.12-13, 27.22
* Apocalipsis 18.16 alude a Ezequiel 28.13
* Apocalipsis 18.17 alude a Ezequiel 27.27-29
* Apocalipsis 18.18 alude a Ezequiel 27.32
* Apocalipsis 18.19 alude a Ezequiel 27.30-34
* Apocalipsis 18.20 alude a Deuteronomio 33.43, Salmos 96.11, Isaías 44.23, 49.13, Jeremías 51.48
* Apocalipsis 18.21 alude a Jeremías 51.63-64, Ezequiel 26.21
* Apocalipsis 18.22 alude a Isaías 24.8, Ezequiel 26.13
* Apocalipsis 18.23 alude a Isaías 23.8, 47.9, Jeremías 7.34, 16.9, 25.10
* Apocalipsis 18.24 alude a Jeremías 51.49, Ezequiel 24.7
* Apocalipsis 19.2 alude a Deuteronomio 32.43, 2 Reyes 9.7, Salmos 19.9, 79.10, 119.137
* Apocalipsis 19.3 alude a Isaías 34.10
* Apocalipsis 19.4 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27
* Apocalipsis 19.5 alude a Salmos 22.23, 115.13, 134.1, 135.1
* Apocalipsis 19.6 alude a Éxodo 15.18, Salmos 22.28, 93.1, 97.1, 99.1, Ezequiel 1.24, 43.2, Daniel 7.14, Amós 3.13, 4.13, Zacarías 14.9
* Apocalipsis 19.8 alude a Isaías 61.10
* Apocalipsis 19.11 alude a Salmos 96.13, Isaías 11.4, Ezequiel 1.1, Zacarías 1.8, 6.3, 6.6
* Apocalipsis 19.12 alude a Daniel 10.6
* Apocalipsis 19.13 alude a Isaías 63.1-3
* Apocalipsis 19.15 alude a Salmos 2.9, Isaías 49.2, 63.3, Lamentaciones 1.15, Joel 3.13, Amós 3.13, 4.13
* Apocalipsis 19.16 alude a Deuteronomio 10.17, Daniel 2.47
* Apocalipsis 19.17-18 alude a Ezequiel 39.17-20
* Apocalipsis 19.19 alude a Salmos 2.2
* Apocalipsis 19.20 alude a Isaías 30.33
* Apocalipsis 19.21 alude a Ezequiel 39.17, 39.20
* Apocalipsis 20.4 alude a Daniel 7.9, 7.22, 7.27
* Apocalipsis 20.6 alude a Éxodo 19.6, Isaías 61.6
* Apocalipsis 20.8 alude a Ezequiel 7.2, 38.2
* Apocalipsis 20.9 alude a 2 Reyes 1.10, Ezequiel 38.22, 39.6
* Apocalipsis 20.10 alude a Génesis 19.24, Salmos 11.6, Isaías 30.33, Ezequiel 38.22
* Apocalipsis 20.11 alude a Salmos 114.3-7
* Apocalipsis 20.11-12 alude a Daniel 7.9-10
* Apocalipsis 20.12-13 alude a Salmos 28.4, 62.12, Proverbios 24.12, Isaías 59.18, Jeremías 17.10
* Apocalipsis 20.12, 20.15 alude a Éxodo 32.32-33, Salmos 69.28, Daniel 12.1
* Apocalipsis 20.15 alude a Isaías 30.33
* Apocalipsis 21.1 alude a Isaías 65.17, 66.22
* Apocalipsis 21.2 alude a Isaías 52.1, 61.10
* Apocalipsis 21.3 alude a Levítico 26.11-12, 2 Crónicas 6.18, Ezequiel 37.27, Zacarías 2.10
* Apocalipsis 21.4 alude a Isaías 25.8, 35.10, 65.19
* Apocalipsis 21.5 alude a 1 Reyes 22.19, 2 Crónicas 18.18, Salmos 47.8, Isaías 6.1, Ezequiel 1.26-27
* Apocalipsis 21.6 alude a Salmos 36.9, Isaías 44.6, 48.12, 55.1, Jeremías 2.13
* Apocalipsis 21.8 alude a Génesis 19.24, Salmos 11.6, Isaías 30.33, Ezequiel 38.22
* Apocalipsis 21.10 alude a Ezequiel 40.2
* Apocalipsis 21.11 alude a Isaías 60.1-2, 60.19
* Apocalipsis 21.12-13 alude a Éxodo 28.21, Ezequiel 48.30-35
* Apocalipsis 21.15 alude a Ezequiel 40.3, 40.5
* Apocalipsis 21.16-17 alude a Ezequiel 48.16-17
* Apocalipsis 21.19 alude a Isaías 54.11-12
* Apocalipsis 21.22 alude a Amós 3.13, 4.13
* Apocalipsis 21.23 alude a Isaías 60.19-20
* Apocalipsis 21.24 alude a Isaías 60.3, 60.5
* Apocalipsis 21.25 alude a Isaías 60.11, Zacarías 14.7
* Apocalipsis 21.26 alude a Salmos 72.10-11
* Apocalipsis 21.27 alude a Éxodo 32.32-33, Salmos 69.28, Isaías 52.1, Daniel 12.1
* Apocalipsis 22.1 alude a Ezequiel 47.1, Joel 3.18, Zacarías 14.8
* Apocalipsis 22.2, 22.14 y 22.19 alude a Génesis 2.9, 3.22, Ezequiel 47.12
* Apocalipsis 22.3 alude a Zacarías 14.11
* Apocalipsis 22.4 alude a Salmos 17.15, 42.2
* Apocalipsis 22.5 alude a Isaías 60.19-20, Daniel 7.18, 7.27, Zacarías 14.7
* Apocalipsis 22.6 alude a Daniel 2.28-29, 2.45
* Apocalipsis 22.10 alude a Daniel 12.4
* Apocalipsis 22.12 alude a Salmos 28.4, 62.12, Proverbios 24.12, Isaías 40.10, 59.18, 62.11, Jeremías 17.10
* Apocalipsis 22.13 alude a Isaías 44.6, 48.12
* Apocalipsis 22.16 alude a Números 24.17, Isaías 11.1, 11.10
* Apocalipsis 22.17 alude a Isaías 55.1
* Apocalipsis 22.18-19 alude a Deuteronomio 4.2, 12.32
<<tabs "$:/.giffmex/tabs/Instrucciones $:/.giffmex/tabs/Contenido $:/.giffmex/tabs/Búsqueda $:/.giffmex/tabs/Reciente" "$:/.giffmex/tabs/Contenido">>
<span class="doublelist">

*Aparte de 1.1-4, no hay ninguna referencia a la vida terrenal o las enseñanzas de Jesús.
*Es el Verbo de vida que ha sido desde el principio (1.1). Es la vida eterna que estuvo con el Padre y quien se manifestó a Juan y los discípulos de una manera palpable (1.2).
*Es el Hijo de Dios (1.3, 1.7,  2.22, 2.23, 2.24, 3.8, 3.23, 4.9, 4.10, 4.14, 4.15, 5.1, 5.5, 5.9, 5.10, 5.11, 5.12, 5.13, 5.20), el Hijo unigénito (4.9), el nacido de Dios (5.18), 
*Es el Cristo o Mesías (1.3, 2.1, 2.22, 3.16, 3.23, 4.2, 5.1, 5.6, 5.20)
*Es el verdadero Dios (5.20)
*Fue enviado por Dios (4.9, 4.14)
*Ha “venido” (5.20) en la carne (4.2-3). No solo por agua sino también por sangre (5.6)
*Enseñó a Juan y sus compañeros que Dios es luz y en él no hay tinieblas (1.5).
*Apareció para quitar los pecados (3.5), para destruir la obra del diablo (3.8)
*Cristo es el justo (2.1, 2.29, 3.7—¿o es Dios en este versículo?), el verdadero (5.20), es puro (3.3), sin pecado (3.5)
*Nos ha dado conocimiento (5.20)
*La importancia de la muerte de Cristo juega un papel importante en el perdón de los pecados (1.7, 2.2, 3.16, 4.10, 5.6-8). Él es el Salvador del mundo (4.14)
*1 Juan no habla de la resurrección de Jesucristo.
*Cristo está en el cielo (2.1-2). Habla en defensa de los creyentes ante el Padre cuando pecamos (2.1).
*Protege a los creyentes del maligno (5.18)
*Es la fuente de, y es, vida eterna (4.9, 5.11, 5.12, 5.20)
*Vendrá en el futuro (3.2)

</span>
''Jesucristo es presentado como Dios'' en 2 Pedro. 

<span class="doublelist">

*1.1 dice “nuestro Dios y Salvador Jesucristo.” Solo hay un articulo para “Dios” y “Salvador,” indicando que ambas palabras se refieren a Jesús. Además, hay frases paralelas en 1.11, 2.20, 3.18 que hablan de “nuestro Señor y Salvador Jesucristo.” 
*1.3 habla de “su divino poder”, y el referente más cercano es “Jesucristo.”
*Si en 1.4 el autor dice que los seguidores de Jesús participan en la naturaleza divina, se supone que Jesús mismo participa de esta naturaleza.
*Pedro usa el título “Señor” para referirse tanto a Jesús como a Dios.
*En 1.11 Jesús tiene un reino eterno.
*En 1.16 Pedro menciona la majestad de Jesús en su transfiguración. ¿Es esta majestad una revelación de su divinidad?
*Según 1.17, Jesús es el Hijo de Dios.
*En 3.18 encontramos una doxología dirigida a Jesús. Normalmente las doxologías eran reservadas para Dios.
*Sin embargo, se nota que 2 Pedro claramente distingue entre Dios Padre y Jesucristo.
''Jesucristo como Salvador'' (véase abajo, Nombres para Dios en 2 Pedro, para las citas). 2.1 habla del Señor quien los “compró”. Es la única referencia implícita de la muerte de Jesús en la carta.

</span>

2 Pedro no habla de la resurrección y ascensión de Jesucristo, solo de su ''transfiguración'' (1.16-18).
<table class="altgray"><tr><td>

!!La encarnación y humanidad de Jesús: 2.14-18, 4.15, 5.7-8

<span class="doublelist">

*Es interesante notar que el nombre sencillo “Jesús” se menciona 10 veces.
*Jesús es hermano de los seres humanos que salva. Ellos son los hijos de Dios.

</span>

</td></tr><tr><td>

!!La divinidad de Jesús

La Cristología es lo más notable de la teología de esta carta:

<span class="doublelist">

*Su preexistencia y su participación en la creación: 1.2-3
*Es Hijo y heredero de Dios: 1.2, 1.5, 4.14, 5.5, 6.6, 7.3, etc
*Los ángeles lo adoran: 1.6
*Es Dios: 1.8
*Su sesión e intercesión en el cielo: 1.3, 1.13, 2.9, 4.14, 7.24, 12.2
*Es nuestro sumo sacerdote que se ofrece a sí mismo como sacrificio: caps. 5-10
*Su victoria sobre el diablo: 2.14-15

</span>

</td></tr><tr><td>

!!La obra de Cristo:

El autor no separa la persona de Cristo de su obra. Ambas títulos claves, Hijo y Sumo Sacerdote, son funcionales; específicamente, son relacionados con su muerte y su exaltación a la diestra de Dios.” (Ellingworth)

</td></tr><tr><td>

!!La muerte de Cristo:

<span class="doublelist">

*El nuevo pacto es a través de su cuerpo y sangre: 10.20, 12.24
*Su muerte fue impulsada por la gracia de Dios: 2.9
*Su sacrificio es superior a los del sistema levítico
**Porque su sacrificio fue un sacrificio humano y voluntario: 9.12-14
**Porque purifica la conciencia, no solo el exterior: 9.9-10 
**Porque fue “una vez para siempre”: 9.12, 9.27, 10.10
**Porque él vive para siempre y puede interceder por sus hermanos
*Su muerte es “para todos”: 2.9
*Su muerte purifica el templo celestial: 9.23
*Él es la fuente de la salvación: 5.9

</span>

</td></tr><tr><td>

!!Su sesión e intercesión en el cielo: 

1.3, 1.13, 2.9, 4.14, 7.24, 12.2

</td></tr></table>
Jesucristo se menciona en Judas 1, 4, 17, 21, 25:

<span class="doublelist">

*Es el Mesías, el Señor y el Soberano
*Guarda a los santos (Judas 1)
*Vendrá con millares de ángeles para juzgar a los pecadores (Judas 14-15)
*Los santos lo esperan porque es misericordioso y les concederá la vida eterna (Judas 21)
*Por medio de él Dios Padre recibe gloria, autoridad, majestad y dominio (Judas 25)

</span>
|bluealtrows|k
|!2.22|¿Quién es el mentiroso, sino el que niega que Jesús es el Cristo? Este es el anticristo, pues niega al Padre y al Hijo.|
|!5.1|Todo aquel que cree que Jesús es el Cristo es nacido de Dios; y todo aquel que ama al que engendró ama también al que ha sido engendrado por él.|

<span class="source">
Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<table class="altgray"><tr><td>

En capítulo dos, Jezabel es una madre (2.23). La ramera de capítulo 17 es llamada una madre (17.5).

</td></tr><tr><td>

Ambas mujeres son asociadas con figuras del pasado de Israel: Jezabel en cap. 2 y Babilonia en cap. 17.

</td></tr><tr><td>

Ambas llevan a otros por mal camino (2.20, 18.23).

</td></tr><tr><td>

Ambas se describen como agentes activas, no como víctimas pasivas.

</td></tr><tr><td>

Ambas se describen como sexualmente activas (2.20-22, 17.2, 17.4).

</td></tr><tr><td>

Ambas mujeres comen comida que las contamina: Jezabel come lo sacrificado a ídolos en 2.20 (es implícito). La ramera bebe sangre humana en Apocalipsis 17.6.

</td></tr><tr><td>

Hay una predicción de ambas mujeres (2.22, 17.6)

</td></tr></table>

<span class="source">Fuente: Ben Witherington, Revelation. (Cambridge University Press, 2003), 75.</span>
Juan habla de si mismo y sus colegas (los apóstoles):

<span class="doublelist">

*Tienen comunión con el Padre y con su Hijo Jesucristo (1.3).
*Proclaman lo que ellos han visto y experimentado personalmente de este “Verbo de vida” y “vida eterna” (1.2).
*Proclaman para que otros tengan comunión con ellos (1.3)
*Ellos (¿o se refiere a todos los Cristianos?) son de Dios y los que conocen a Dios los escuchan (4.6).
*Han visto y testifican que Dios envió a su Hijo a ser el Salvador del mundo (4.14)

</span>
<span class="singlelist">

*''Judas, asuntos introductorios''

**[[Una sinopsis de Judas]]
**[[Un resumen de los asuntos introductorios para Judas]] (no terminado)
**[[La situación detrás de Judas]]
**[[Las respuestas que Judas deseaba de sus destinatarios]]
**[[El propósito de Judas]]
**[[Los destinatarios de Judas]]
**[[El uso de Judas en la liturgia]]
**[[Un bosquejo homilético para Judas 17-25]]
**[[Nuestras presentaciones acerca de Judas]]

*''La estructura de Judas''

**[[Bosquejos de Judas]]
**[[Notas acerca de la estructura de Judas]]

*''Los temas y la teología de Judas''

**[[Un resumen del mensaje de Judas]]
**[[Los temas principales de Judas]]
**[[Ángeles y demonios en Judas]]
**[[Dios el Padre en Judas]]
**[[El Espíritu Santo en Judas]]
**[[La escatología en Judas]]
**[[La iglesia en Judas]]
**[[Jesucristo en Judas]]
**[[La motivación en Judas]]
**[[Nombres para Dios en Judas]]
**[[El pecado en Judas]]
**[[La relación entre Dios Padre y Jesucristo en Judas]]
**[[La salvación en Judas]]

*''Judas en el contexto del canon''

**[[Citas y alusiones al Antiguo Testamento en Judas]]
**[[Argumentos que Judas fue escrito antes de 2 Pedro]]
**[[Argumentos que Judas fue escrito después de 2 Pedro]]
**[[Judas y 2 Pedro]]
**[[Judas y 2 Pedro – una comparación]]

*''Las características literarias de Judas''

**[[Aspectos literarios de Judas, apuntes]]
**[[Las figuras en Judas]]
**[[El género de Judas]]
**[[Hapax legomenoi en Judas]]
**[[Midrás en Judas]]
**[[Los tipos de oraciones en Judas]]
**[[Los personajes mencionados en Judas]]
**[[La repetición en Judas]]
**[[El número tres en Judas]]

*''Judas, asuntos avanzados''

**[[La aceptación de Judas por la iglesia antigua]]
**[[La autoría de Judas]]
**[[Los debates principales acerca de Judas]]
**[[Argumentos acerca de la fecha de redacción de Judas]]
**[[La fecha de la composición de Judas]]
**[[La opinión de la erudición moderna acerca de Judas]]
**[[La transmisión del texto griego de Judas]]
**[[La unidad o integridad de Judas]]

*''Exégesis de pasajes en Judas''

**[[Judas 1-2]]
**[[Judas 5-7]]
**[[Judas 22-23]]
**[[Judas 24-25]]
***[[Un bosquejo sintáctico para Judas 24-25]]

</span>
!!!!Un resumen de Judas 1

<hr>

En versículo 1, la primera parte de la introducción de la carta, el escritor se identifica a si mismo e indica quienes son los destinatarios.

<span class="doublelist">

* En humildad, no dice que es el hermano de Jesús, sino menciona que es su siervo, y que es hermano de Jacobo (el escritor de Santiago).
* No indica el lugar donde viven sus destinatarios, sino que los describe con tres afirmaciones doctrinales:
** Fueron llamados - Dios les envió su evangelio, llamándolos para que sean salvos
** Fueron santificados - Dios los apartó del resto de la humanidad para sí mismo
** Son guardados - a pesar del peligro de personas impías que han invadido su iglesia, Dios los cuidará hasta el día final

</span>

<hr>

Notamos ya en v. 1 la preferencia que Judas tiene para combinaciones de tres: tres descripciones doctrinales de los destinatarios. Esta descripción es importante en el contexto de la carta, porque Judas describirá en detalle el peligro de personas impías que han invadido la iglesia de los destinatarios. A pesar del gran peligro, los destinatarios pueden consolarse que Dios los ha llamado, los ama, y es poderoso para protegerlos.

<hr>

    La descripción de los destinatarios en Judas 1 es muy parecido a Romanos 1.6-7.

<hr>

    Bauckham dice que esta descripción de los destinatarios tiene raíces en Isaías 40-55. En estos capítulos Isaías describe a los Judíos que regresan del exilio en Babilonia como un pueblo llamado, amado y guardado (p. ej. Isaías 42.6)

<hr>

    Para una descripción de la idea de 'guardar', véase Juan 17.12:

<span class="indent1">//Cuando estaba con ellos en el mundo, yo los guardaba en tu nombre; a los que me diste, yo los guardé, y ninguno de ellos se perdió, sino el hijo de perdición, para que la Escritura se cumpliese.//</span> 

<hr>

    Otra posible traducción de "guardados en Jesucristo" es "guardados para Jesucristo". La traducción "por Jesucristo" no es una buena traducción porque la preposición ἐν viene antes de Dios Padre en la cláusula anterior y sirve para las dos cláusulas. La idea es que Dios Padre guarda a los destinatarios en Jesucristo.

<hr>

    La descripción de los destinatarios en Judas 1 pone el énfasis en la gracia de Dios. En Judas 20-21 vemos el otro lado de la moneda. Los destinatarios tienen que hacer su parte para guardarse también.

<hr>

    Hay un inclusio: al final de la carta (Judas 24) Judas dice nuevamente que Dios es capáz de guardarlos.

<hr>

Notamos en Judas 2 la preferencia que Judas tiene para combinaciones de tres: tres bendiciones que desea para sus destinatarios.

<hr>

Judas 2: No era típico incluir la palabra 'misericordia' en las bendiciones introductorias en el mundo antiguo. Pero la misericordia es un concepto importante que se repite en esta carta (véase Judas. 21-23).

<hr>

La paz en Judas 2 se refiere a la ausencia de conflictos entre personas. Era, y es, el saludo típico entre Judíos: Shalom.

<hr>

En Judas 2, la última parte de la introducción de la carta, Judas expresa su deseo para los destinatarios: que sean bendecidos abundantemente por Dios con misericordia, paz, y amor. La palabra misericordia aparecerá algunas veces más en la carta.
Es dificil reconstruir el griego original de versículos 22 y 23 (véase las notas). Según la lectura que hemos adoptado aquí, estos versículos son un conjunto de tres exhortaciones. Hay tres grupos en la iglesia de los destinatarios, y los destinatarios deben tratar a cada grupo de cierta manera:

<span class="doublelist">

*Hay un grupo de los que dudan, los que vacilan en cuanto a los falsos maestros. Los destinatarios deben tener misericordia de este grupo.
*Hay un segundo grupo de los que han comenzado a ser seducidos por los falsos maestros, y ya se están metiendo en los errores y prácticas de ellos. Los destinatarios deben rescatarlos, rogándoles a que se arrepientan, para que no caigan al fuego del juicio de Dios.
*Hay un tercer grupo de los hombres impíos y los que han sido completamente convencidos por ellos. Hacia ellos los destinatarios deben tener una mezcla de misericordia y temor, y deben sentir una repugnancia por los errores y prácticas de ellos, porque ellos fácilmente contaminan a los que influencian.

</span>

<hr>

Se ha dicho que estos versículos están entre los más difíciles de todo el NT porque es dificil fijar el texto original. ''Hay varios problemas'':

<span class="doublelist">

*Hay manuscritos que refieren a tres clases de personas, y otros manuscritos que se refieren a dos. Debido a la tendencia del autor de usar el número tres (véase arriba), es preferible ver tres clases de persona en estos versos:
**Tengan compasión de ''los que dudan''; 
**''a otros'', sálvenlos arrebatándolos del fuego. 
**Compadézcanse de ''los demás'', pero tengan cuidado…. (NVI)
*Algunos manuscritos griegos dicen "tened misericordia a los que dudan", otros dicen "convenced a otros que dudan", y otros manuscritos dicen "tened compasión, haciendo distinción" para v. 22. En este recurso daremos preferencia a la lectura "tened misericordia a los que dudan".
*Hay un papiro que omite v. 22 completamente, y tiene una versión más corta de v. 23: "Arrebatad algunos del fuego, pero tened misericordia de los que dudan, con temor."
*Además, la palabra διακρινομένους en v. 22 puede ser traducido como "los que dudan", "los que están bajo juicio", o "los que disputan". Con la mayoria de versiones y comentaristas, usaremos "los que dudan" aquí. La idea es que en la iglesia de los destinatarios hay personas que están vacilando en cuanto a seguir a los falsos maestros o no. Los destinatarios deben tener una actitud de misericordia cuando hablan con tales personas.

</span>

<hr>

"Tened misericordia". Judas repite el concepto de misericordia en vv. 2, 21, 22 y 23. Dios ha sido misericordioso con ellos (2, 21), y ellos deben ser misericordiosos con los demás (22, 23).

<hr>

"Arrebatándolos del fuego" - la figura es de alguien que está a punto de caerse en el fuego, y tenemos la habilidad de extender la mano para que no se caigan. La idea es que los destinatarios deben rogar y hasta disciplinar a los que han sido seducidos por los falsos maestros, para que se arrepientan de su error.  El trasfondo bíblico de la figura de rescatar del fuego viene de Zacarías 3.2 (v. t. Amós 4.11).

<hr>

"Con temor" - no es gramáticamente seguro si estas palabras modifican "arrebatándolos del fuego" o con "tened misericordia." Muchos comentaristas y versiones prefieren la segunda opción. La idea es que mientras tratan de rescatar a estas personas, deben tener suficiente temor para no caer en lo mismo.

<hr>

Algunos comentaristas dicen que este temor es el de ser contaminado por la ropa sucia. Otros dicen que es temor de Dios, temor de pecar como los hombres impíos y caer bajo la ira de Dios.

<hr>

"Aborreciendo aun la ropa contaminada por su carne" - la figura aquí es una de ropa interior, ensuciada por las funciones corporales, y el instinto natural es sentir asco y no querer tocarla. Así deben sentir los destinatarios acerca de las enseñanzas y prácticas de los hombres impíos que han invadido la iglesia. El trasfondo bíblica de la figura de la ropa contaminada viene de Zacarías 3.3-4.

<hr>

Judas guarda esperanza aún para el tercer grupo. Aunque dice que debemos temerlos y aborrecer lo de ellos, Judas insiste que debemos de tener misericordia de ellos también. Bauckham también señala que en Zacarías 3.3-4, la ropa sucia de Josué fue reemplazada con ropa limpia. De igual manera, los hombres impíos todavía tienen la oportunidad de arrepentirse. 
!!La extraña conclusión de Judas

<hr>

Judas no termina su carta con los elementos que normalmente encontramos al final de una carta antigua: saludos personales, bendiciones de paz y de gracia, expresiones del deseo de visitar a los destinatarios, etc. Judas termina como si estuviera terminando un sermón antiguo, con una doxología.

<hr>

!!El formato litúrgico de Judas 24-25

<hr>

Kistemaker (410) nota que la doxología en Judas 24-25 está formada en pares de dos y de cuatro, facilitando su uso en una liturgia antifonal. 

<hr>

!!Versículos similares a Judas 24-25

<hr>

Nota los paralelos entre Judas 24-25 y los siguientes textos: 1 Tesalonicenses 3.13, 5.23, Colosenses 1.22, Efesios 1.4 y Efesios 5.27. Todos hablan acerca de la santificación en el contexto de la segunda venida. Todos usan lenguaje relacionado con los sacrificios del Antiguo Testamento. Y todos tienen que ver con los creyentes presentados delante de Dios o presentados por Dios.

<hr>

!!Listas de cosas que vemos en Judas 24-25

<hr>

<span class="doublelist">

*Dos habilidades de Dios Padre: su habilidad de proteger a los destinatarios de peligros espirituales, y su habilidad de presentarlos ante su propia presencia en el día final.
*Dos aspectos que los creyentes tendrán cuando llegan a la presencia de Dios en el día final: serán sin defectos, y tendrán un gran gozo.
*Cuatro cualidades de Dios Padre: gloria, majestad, poder, y autoridad. 
*Tres épocas en las cuales la humanidad debe glorificar a Dios: el pasado, el presente y el futuro. (Las traducciones Reina Valera 1960 y 1995 omiten las palabras "desde antes de todos los siglos", aunque tiene mucho apoyo en los manuscritos griegos más antiguos.

</span>

<hr>

!!"A Aquel que es capaz" en Judas 24

<hr>

Estas palabras se encuentran en dos otras doxologías bíblicas: Romanos 16.25 y Efesios 3.20.

<hr>

!!"Para guardarlos para que no caigan" en Judas 24

<hr>

Bauckham dice que Judas probablemente tuvo en mente las muchas referencias de los salmistas donde dicen que Dios cuidó sus pasos y no se cayeron (Salmos 38.16; 56.13; 66.9; 73.2; 91.12; 94; 116.8; 121.3). El NT habla varias veces del hecho de que Dios "guarda" a los creyentes: 2 Tesalonicenses 3.3, Juan 17.11, 17.15; 1 Pedro 1.5, y Apocalipsis 3.10.

<hr>

!!"Con gran alegría" en Judas 24

<hr>

Estar en la presencia de Dios será motivo de gozo para los Cristianos, en contraste con el terror que inspiraba la presencia de Dios en los tiempos bíblicos

<hr>

!!"Al único Dios" en Judas 25

<hr>

Toda la gloria pertenece a Dios porque no hay otro Dios. El monoteísmo es un tema importante en la Biblia porque la idolatría era tan prevalente. Referencias al "único Dios" aparecen en otras doxologías, p. ej: Romanos 16.27; 1 Timoteo 1.17; 1 Timoteo 6.15–16.

<hr>

!!"Por medio de nuestro Señor Jesucristo" en Judas 25

<hr>

Bauckham menciona que los comentaristas están divididos en cuanto a la frase "por medio de nuestro Señor Jesucristo". ¿A cuál de las dos frases modifica?

<span class="doublelist">

*Una posibilidad es que modifica "Dios nuestro Salvador". Es decir, que es por medio de Jesucristo que Dios nos salva.
*La otra posibilidad es que modifica "sea la gloria, la majestad, etc". Es decir, que es por medio de Jesucristo que Dios recibe la alabanza que le ofrecemos por su gloria, majestad, etc.
*Bauckham dice que ambas tienen sentido, y que no es necesario escoger entre las dos, pero probablemente la segunda posibilidad es la preferida, porque refleja el uso que encontramos en otras doxologías. 

</span>

<hr>

"Nuestro Salvador" en 25b no se encuentra en muchos manuscritos. Es por esta razón que la Nueva Versión Internacional las omite. Es posible que un escriba añadió estas palabras porque estaba pensando en Romanos 16.27.

<hr>

Las palabras "antes de todos los siglos" en 25e no aparecen en los textos usados por el Textus Receptus (y por esta razón no aparecen en la versión Reina Valera, que se basa en el Textus Receptus). Pero estas palabras tienen mucho apoyo en buenos manuscritos: Aleph, A, B, C, y muchos otros. Es posible que algún escriba decidió omitir estas palabras porque le parecían inusuales para una doxología.

<hr>

!!"Sea la gloria" en Judas 25

<hr>

La idea no es que a Dios le falta gloria, poder, etc, y que tenemos que suplir lo que le falta. Dios ya tiene todas estas excelencias. Pero no todos los seres humanos reconocen su gloria, poder, majestad, etc., y las doxologías llaman a la humanidad, para que reconozca la gloria de Dios y que alabe a Dios por la gloria que tiene.

<hr>

!!Poder y autoridad en Judas 25

<hr>

*La palabra 'poder' se usa frecuentemente en las doxologías: 1 Timoteo 6.16; 1 Pedro 4.11; 5.11; Apocalipsis 1.6; 5.13.
*La palabra 'autoridad' no se encuentra en ninguna otra doxología de la Biblia.
!!Judas 5-7

<hr>

Este versículo es la primera de tres ilustraciones de juicio en la oración gramatical de vv. 5-7. Se refiere al juicio de Dios sobre los Israelitas en Números 14. La misma generación que Dios sacó de Egipto fue la generación que desconfió en Dios y rehusó entrar la tierra que Dios les había prometido. El destino triste y sorprendente de aquella generación se menciona también en Salmo 95, 1 Corintios 10 y Hebreos 3-4.

<hr>

Judas dice que sus lectores ya tienen todo el conocimiento que necesitan, y él solo necesita recordarles. Lo que ya saben se refiere a algo más que las tres ilustraciones en vv. 5-7. Lo que dice es literalmente que saben "todas las cosas" "una vez para siempre." Esta última frase ya apareció en v. 3 para referirse a todas las enseñanzas trasmitidas a los santos. 

<hr>

Pero aunque ellos saben lo que Judas les quiere mencionar, él siente la necesidad de recordarles de estas cosas. El tema de recordatorios aparece varias veces en el NT. Algunos ejemplos: Romanos 15.15, 2 Tesalonicenses 2.5, 2 Pedro 1.12, 2 Pedro 3.1-2. Judas vuelve al mismo tema en v. 17 cuando les dice que ellos deben de //recordar// las palabras de los apóstoles.

<hr>

Los textos griegos para este versículo ofrecen varias diferentes lecturas. Algunos dicen que "el Señor" salvó su pueblo de Egipto, y otros dicen "Jesús" (y algunos no usan un sujeto para esta oración). Aunque la mayoría de los manuscritos tienen "Jesús", los traductores están de acuerdo que "el Señor" es la lectura que mejor explica la presencia de las otras lecturas.

<hr>

Si aceptamos la traducción "el Señor", tenemos que decidir si se refiere a Dios Padre o a Jesús. Hendriksen prefiere Dios, porque v. 6 claramente se refiere a Dios. Bauckham, por otro lado, ofrece varios argumentos presuasivos para interpretar "el Señor" como Jesús:

<span class="doublelist">

*En la mayoría de los casos (vv. 4, 17, 21 y 25) Judas usa la frase para referirse a Jesús.
*En las referencias a otros textos en vv. 9 y 14, no es tan claro pero también se podrían referir a Jesús.
*Nuestro versículo sigue inmediatamente a v. 4, que refiere al "Señor Jesucristo."
*El NT casi siempre usa "el Señor" para hablar de Jesús, e infrecuentemente la usa para hablar de Dios Padre.
*Hasta hay casos en el NT donde algo sorprendente occure: La traducción griega del AT traduce el nombre divino como //kurios//, pero los autores del NT toman algunos de estos textos y dicen que se aplican a Jesús (Bauckham menciona Juan 12.41, Romanos 10.13, Hebreos 1.10 y 1 Corintios 10.9).

</span>

<hr>

Judas incluye esta ilustración para advertir a sus lectores: No todos los que son parte de la iglesia y se gozan de los beneficios de la salvación son verdaderamente salvos. Es posible experimentar la salvación en cierto sentido (como los Israelitas experimentaron la liberación de su esclavitud) pero después caer en incredulidad y ser destruido por Dios. Los hombres impíos cayeron de esta manera (v. 4), algo que fue profetizado desde antes (v. 18). Y Judas enfatiza que los lectores deben preocuparse por ellos mismos (v. 21) y por los demás creyentes (vv. 22-23), para que no caigan bajo la misma condenación. Pero pueden confiar que Dios es fiel y los puede guardar de toda caída (v. 24).

@@.source Bauckham, Hendriksen, Keener.@@
Hay muchos paralelos entre el libro de Judas y el segundo capítulo de 2 Pedro (véase [[Judas y 2 Pedro – una comparación]]). Es evidente que uno de estos libros usa el otro como fuente. Pero, ¿cuál? Muchos comentaristas dicen que Judas fue escrito primero, y que 2 Pedro usa Judas como fuente. Pero esta teoría requiere aceptar que el apóstol Pedro no escribió 2 Pedro, y que Dios inspiró un libro escrito en nombre de otro. Véase [[Argumentos que Judas fue escrito antes de 2 Pedro]] y [[Argumentos que Judas fue escrito después de 2 Pedro]] para los argumentos pro y contra.
Una comparación de Judas con el segundo capítulo de 2 Pedro revela los siguientes paralelos:

|bluealtrows|k
|!2 Pedro|!Judas|!Puntos de comparación|
|2.1|4|La palabra "encubiertamente"|
|2.1|4|"Negar" al "Señor"|
|2.3|4|Su "condenación" desde un tiempo en el pasado|
|2.4|6|Hay "ángeles" que pecaron y están guardados en "prisiones" "oscuras" para el "juicio."|
|2.6|7|La destrucción de Sodoma y Gomorra como ejemplo|
|2.10|16|Los falsos maestros andan detrás de sus placeres y deseos|
|2.10-12|8-10|Los falsos maestros blasfeman de los "poderes superiores", en contraste con los ángeles, <br>quienes no traen "juicio de maldición" contra sus adversarios. Los falsos maestros hablan de <br>cosas que no entienden, y son como "animales irracionales."|
|2.13|12|Los falsos maestros son "manchas" que comen con los destinatarios|
|2.15|11|Los falsos maestros siguen en el error de Balaám|
|2.17|13|Está "reservada" para ellos para siempre una "oscuridad" intensa|
|2.18|16|Dicen cosas "infladas"|
|3.3|17-18|En los "últimos" tiempos habrán "burladores" que "andan según" sus deseos y pasiones|
|3.7|4|La frase "hombres impíos"|
<span class="doublelist">

*"Ningún documento del NT tuvo una lucha más larga y difícil para ganar aceptación que 2 Pedro". @@.source J.N.D. Kelly, citado en Carson, Moo y Morris 440.@@
*Orígenes acepta que Pedro fue el autor, reconociendo que había disputas sobre este punto.
*Es posible, pero no seguro, que Ireneo alude al libro.
*Las cartas de Pedro no aparecen en el Canon de Muratori.
*Dídimo (cuarto siglo) escribió un comentario sobre 2 Pedro, pero dice que la carta es falsa, y no debe ser considerada parte del canon @@.source (Harrison, 411).@@
*Eusebio la pone entre los libros disputados, no entre los libros canónicos.
*No está incluída en el Canon Siriaco.
*Cirilo, Agustín y Jerónimo la aceptaban. Jerónimo dice que su rechazo por otros fue debido al hecho que el estilo es muy diferente al estilo de 1 Pedro.
*Calvino expresó sus dudas acerca de la autoría de 2 Pedro, pero no su canonicidad. Lutero lo aceptaba como canónico.
*Muchos eruditos modernos no hacen caso a 2 Pedro porque no les gusta su escatología apocalíptica, y perciben en la carta un “catolicismo naciente” (véase Fecha y lugar de redacción).

</span> 

@@.source Fuentes: varias.@@
Por su brevedad, 2 y 3 Juan no fueron citadas mucho por los padres de la iglesia. Orígenes y Eusebio los mencionan con reservación. 

*El Canon de Muratori menciona dos cartas de Juan, no tres. Probablemente se refiere a 1 y 2 Juan, no 3 Juan, según Carson, Moo y Morris. 
*Estas cartas fueron incluidas en el canon por Atanasio (367 d.c.), el Concilio de Hippo (393 d.c) y el Concilio de Cártago (397 d.c.).
<table class="altgray"><tr><td>

La iglesia oriental lo aceptó, pero era porque asumió que Pablo era el autor.

</td></tr><tr><td>

Hebreos fue reconocido y usado en la iglesia occidental por 1 Clemente, Pastor de Hermas y otros, pero no fue tratado como canónico al principio. Hubo disputa sobre Hebreos en la iglesia occidental. En parte esto fue porque dudaban que un apóstol lo escribió. Pero en parte fue por causa de su abuso en la controversia Montanista. Algunos usaron Heb. 6.4-6 para decir que los que pecaron después de su bautismo no podían arrepentirse.

</td></tr><tr><td>

El hereje Ario usó Hebreos 1.4, 3.1-2 y otros textos para decir que el Hijo fue creado y solo llegó a ser superior a los ángeles. En cambio, Atanasio usó textos como 1.3 y 13.8 para afirmar la divinidad de Jesús.

</td></tr><tr><td>

La aceptación en la iglesia oriental eventualmente convenció a la iglesia occidental, con la ayuda de Jerónimo y Agustin. 

</td></tr></table>
!!Alusiones

<hr>

Es posible que los siguientes textos aludan a la carta Judas:

*Didache II.7 (Judas 22-23)
*Bernabé II.10 (Judas 4)
*Pastor de Hermas (Sim. V.vii.2) (Judas 8)
*La Epístola a los Filipenses por Policarpo III.2 (Judas 3, 20)
*La Apología de Atenágoras XXIV y XXV (segundo siglo)

<hr>

!!Pasos hacia la aceptación

<hr>

*Judas está incluido en el Canon de Muratori, aunque hay debate sobre el significado de lo que el Canon dice. Orígenes reconoció que algunos no usan el libro, y Eusebio lo nombró entre los libros disputados. 
*Tertuliano y Clemente de Alejandrina citaron a Judas con aprobación. ¡Tertuliano hasta aceptó 1a de Enoc como Escritura porque Judas lo citó! 
*Jerónimo y Dídimo de Alejandría indican que la razón de que Judas fue dudado es que cita dos autores pseudo-canónicos. Pero debemos recordar que Pablo también citó a autores griegos.

<hr>

La carta de Judas por fin fue reconocida como canónica por el Concilio de Cartago (397d.c.)
El libro de Santiago fue lento en ser aceptado al canon, probablemente porque parece contradecir las cartas de Pablo acerca de la doctrina de la justificación.

<span class="doublelist">

*Es posible que Santiago influenció los libros El Pastor de Hermas y 1 Clemente.
*Orígenes (tercer siglo) fue el primero que seguramente lo citó, 36x. Dice que era un libro disputado, pero él lo acepta.
*La iglesia patrística parece haber neglegido a este libro, probablemente porque parece contradecir las cartas de Pablo en cuanto a la justificación. El interés para Santiago en la iglesia antigua era 1.17, que usaban para apoyar la doctrina de la inmutabilidad de Dios.
*No fue incluido en el Canon de Muratori.
*Fue aceptado por el Concilio de Cártago, 397 d.c. después de ser endosado por Jerónimo y Agustín. 
*Erasmo dudó el origen apostólico de la carta. Martín Lutero lo llamó una epístola de paja porque no enfatizó la doctrina de la gracia de Dios tanto como las cartas de Pablo. Pero no lo excluyó del NT, y lo citó con frecuencia (Encuentro, 353). 
*2.26 fue usado contra Lutero en un debate importante, y 5.14 fue usado por la Iglesia Católica Romana para apoyar el sacramento de la extrema unción.
*Algunos comentaristas modernos interpretan a Santiago como un documento judío cubierta con una tapa mínima de doctrina Cristiana.

</span>
Los siguientes puntos son la evidencia que tenemos acerca de la aceptación y uso de 1 Pedro por la iglesia patrística:

<span class="doublelist">

*2 Pedro 3.1 menciona una carta anterior. 
*Hay varios rastros del contenido de 1 Pedro en //1 Clemente//.
*La epístola de Policarpo a los filipenses 8.1 usa 1 Pedro 2.22-24.
*Marción y el Canon de Muratori no la contienen. 
*Ireneo fue el primero en decir que viene de Pedro; Clemente de Alejandría, Tertuliano y Eusebio también dicen que viene de la mano de Pedro.
*No hay evidencia de alguna objeción contra esta carta en la iglesia patrística.

</span>
 
@@.source Fuentes: Harrison; Carson, Moo y Morris.@@
<table class="altgray"><tr><td>

''1 Juan''

1 Juan es mencionado o citado en 1 Clemente, Didaqué, Papías, y Policarpo (Epístola a los Filipenses), libros del primer cuarto del segundo siglo (Encuentro, 366-367).

</td></tr><tr><td>

Ireneo, Clemente Alejandrino, Orígenes, y Tertuliano lo citan y dicen que es de Juan. Eusebio lo alista como un libro no disputado.

</td></tr><tr><td>

Está incluido en el Canon de Muratori y la lista de Atanasio de 367 d.c. Fue aprobado en los Concilios de Hippo (393 d.c.) y Cartago (397 d.c.).

</td></tr><tr><td>

Esta carta, en particular 3.4-10, ha sido influencial en los debates sobre la doctrina de Wesley de la perfección cristiana. Esta doctrina dice que Dios nos llama a ser perfectos (Mt. 5.48), así que la perfección está a nuestra alcance como Cristianos. Podemos llegar a ser libres de pecados intencionales y conocidos, según Wesley y sus seguidores. Podemos responder que 1.8 y 10 rechazan la idea que uno puede estar sin pecado en esta vida. Es mejor no interpretar 3.4-10 como declaraciones globales (“Los Cristianos en un estado especial de consagración nunca pecan”), sino como exhortaciones en forma de afirmaciones (como “Los alumnos de este seminario no hacen mentiras”).

</td></tr><tr><td>

Muchos eruditos han intentado encontrar y describir una “comunidad juanina” detrás de estos libros. Es decir, discípulos de Juan que quisieron promover sus enseñanzas y escribieron estas tres cartas en su honor. Esta búsqueda es muy especulativa y depende más de la imaginación del comentarista que los datos del texto mismo.

</td></tr><tr><td>

''2, 3 Juan ''

Por su brevedad, 2 y 3 Juan no fueron citadas mucho por los padres de la iglesia. Orígenes y Eusebio los mencionan con reservación. 
*El Canon de Muratori menciona dos cartas de Juan, no tres. Probablemente se refiere a 1 y 2 Juan, no 3 Juan, según Carson, Moo y Morris.
*Estas cartas fueron incluidas en el canon por Atanasio (367 d.c.), el Concilio de Hippo (393 d.c) y el Concilio de Cártago (397 d.c.).

</td></tr></table>
<span class="doublelist">

''La alabanza''

*Pedro abre su carta con un llamado a la alabanza en 1.3, y cierra su carta con dos diferentes doxologías, 4.11 y 5.11.
*Pedro dice que sus lectores fueron salvos para "anunciar las virtudes" del Dios que los salvó (2.9). Es muy probable que esta proclamación es el sacrificio espiritual que ellos ofrecen como sacerdocio (2.5, 2.9, véase también Hebreos 13.15).
*Pedro dice que la buena conducta de sus lectores resultarán en la alabanza que otros dan a Dios (1.7, 2.12, 4.11).

''La oración''

*En 1.17, Pedro les recuerda que ellos invocan a Dios como Padre.
*En 3.7 Pedro dice que los maridos deben tener consideración para sus esposas para que nada "estorbe" sus oraciones.
*En 3.12, Pedro cita el Salmo que dice que el Señor está atento a las peticiones de los justos.
*En 4.7 Pedro exhorta a sus lectores a que se mantegan alertos, para facilitar sus oraciones.
*En 4.19 y 5.7 Pedro dice que en sus pruebas difíciles, sus lectores deben encomendarse a su fiel Creador, y deben echar su ansiedad sobre Dios.

</span>
|bluebycell|k
|!Versículos|!Griego|!Transliteración|
|>|>|! ''Sonidos P'' |
|1.2-3|πειρασμοῖς περιπέσητε ποικίλοις|peirasmois peripesete poikilois|
|1.11|ὁ πλούσιος ἐν ταῖς πορείαις|plousias en tais poreiais|
|1.17|παῤ ᾧ οὐκ ἔνι παραλλαγὴ ἢ τροπῆς ἀποσκίασμα|par ho ouk eni parallage e tropes aposkiasma|
|3.2|πολλὰ γὰρ πταίομεν ἅπαντες|polla gar ptaiomen apantes|
|>|>|! ''Sonidos D'' |
|1.1|δοῦλος ταῖς δώδεκα|doulos tais dodeka|
|1.6|μηδὲν διακρινόμενος· ὁ γὰρ διακρινόμενος|meden diakrinomenos. ho gar diakrinomenos|
|3.8|οὐδεὶς δαμάσαι δύναται|oudeis damasai dunatai|
|>|>|! ''Sonidos K'' |
|2.3|καὶ εἴπητε· σὺ κάθου ὧδε καλῶς, καὶ τῷ πτωχῷ εἴπητε· σὺ στῆθι ἐκεῖ ἢ κάθου|kai eipete. su kathou hode kalos, kai toi ptokoi eipete. su stethi ekei e kathou|
|>|>|! ''Sonidos M'' |
|3.5|μικρὸν μέλος ἐστὶν καὶ μεγάλα|mikron melos estin kai megala|

@@.source Ben Witherington, We Have Seen His Glory. (Grand Rapids: Wm. B. Eerdmans, 2010).@@
El libro de Apocalipsis contrasta el orden y adoración en el cielo con el caos e idolatría en la tierra. Para hacer esto, el autor constantemente alterna su perspectiva. A veces describe lo que pasa en el cielo, y a veces describe los sucesos en la tierra. 

|bluebycell|k
| Cielo | Tierra |
|Cristo en el cielo, cap. 1|!|
|!|Cartas a iglesias terrenales, caps. 2-3|
|Adoración de Dios y del Cordero en el cielo, caps. 4-5|!|
|!|Siete sellos sobre la tierra, cap.6|
|Sellando a los santos, la gran multitud, y silencio en el cielo, 7.1-8.5|!|
|!|Siete trompetas sobre la tierra, 8.6-11.14|
|Guerra en el cielo, 11.15-12.12|!|
|!|El dragón y las bestias sobre la tierra, 12.13-13.18|
|La canción de los 144,000, una profecía acerca de Babilonia, y la preparación de las copas, caps. 14-15|!|
|!|Siete copas sobre la tierra, caps. 16-18|
|Aleluyas en el cielo y el que está montado sobre el caballo blanco, 19.1-18|!|
|!|Derrote del dragón y las bestias en la tierra, 19.19-20.10|
|Cielo y tierra se unen, 20.11-22.21|!|

<span class="source">Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary.</span>
Veo las siguientes implicaciones de esta pequeña carta:

<span class="doublelist">

* Reflexionar sobre las implicaciones de "andar" en la verdad.
* Mantener un sano equilibrio entre el amor y la verdad.
* No apoyar a los que enseñan falsas doctrinas, para no llegar a ser sus cómplices.
* Creer que Jesús "llegó en la carne" - creer en su naturaleza física y corporal.

</span>
<table class="altgray"><tr><td>

''El énfasis en la piedad y la santificación:'' 

*Piedad es una palabra clave de la carta (1.3, 6, 7; 2.9; 3.11)
*Tenemos que guardarnos del error (3.17), huir la corrupción del mundo, y añadir virtud sobre virtud (1.5-11) para crecer en la gracia y conocimiento de Jesucristo (3.18).

</td></tr><tr><td>

''La importancia de la memoria''

Pedro nos escribe para que nos acordemos de lo que hemos aprendido. En contraste, Pedro dice que los enemigos del Cristianismo son olvidadizos.

</td></tr><tr><td>

''La importancia del conocimiento y la doctrina''

Pedro describe nuestra doctrina con la palabra “conocimiento” (1.2, 1.3, 1.5-6, 1.8, 2.20, 2.21, 3.18). Dice que tenemos que prestar atención a lo que hemos aprendido de las profetas inspirados por Dios

</td></tr><tr><td>

''Los límites de la tolerancia''

Pedro no acepta la herejía y la corrupción del mundo y en particular de los falsos maestros. Nos da la impresión que debemos oponernos a las falsas enseñanzas en la iglesia.

</td></tr><tr><td>

''La motivación pastoral de la escatología''

Los burladores decían que las acciones no tienen consecuencias eternas. Todo seguirá igual. Pedro insiste en lo contrario. Tenemos que anhelar la segunda venida, adelantarla, y prepararnos para ella. “Como nada en este mundo es duradera, entonces tiene sentido para los creyentes vivir para el siglo venidero y sus valores.” 

@@.source (Davids, DTIB, 585)@@

</td></tr></table>
<span class="doublelist">

*¿Qué significaría hoy en día "caminar en la verdad" y ser colaboradores con la verdad?
*¿Estamos apoyando a los obreros cristianos que dependen de nuestro apoyo y hospitalidad?
*¿Somos culpables de la ambición, insubordinación y actitud de dictadura que manifestó Diótrefes?
*¿Quiénes son los malos ejemplos en nuestro medio que no debemos imitar? ¿Quiénes son los buenos ejemplos que debemos imitar?
*¿Cómo podríamos vivir para conseguir el testimonio de la verdad de que Demetrio gozaba?
*3 John 5-8 podrían ser usados para un culto de comisión para nuevos misioneros interculturales.
*El anciano usó su autoridad, no para oprimir a las personas, sino para defender a Gayo y otras víctimas de Diótrefes, que estaba abusando de su autoridad. Ofrezco esta guia para determinar como tratar a las personas en situaciones de conflicto:
**Cuando es una persona con poder en la situación, y hace lo correcto: expresamos nuestra aprobación y aprecio. (no hay ejemplo de esto en 3 Juan)
**Cuando es una persona con poder, pero hace lo incorrecto: enfrentamos a la persona con fuerte amonestación (3 Juan 9-10)
**Cuando es una persona que no tiene poder en la situación, y hace lo correcto: damos nuestro apoyo y palabras de ánimo (3 Juan 3-8)
**Cuando es una persona sin poder pero hace lo incorrecto: corregimos a la persona con una actitud evangelística y pastoralmente sensible (no hay ejemplo de esto en 3 Juan)

</span>
El autor de Judas se llama “Judas”, hermano de Jacobo (v. 1). En vv. 17-18 el autor parece hacer una distinción entre él y los apóstoles. 

<hr>

''Hay varios hombres nombrados “Judas” en el NT.'' Podemos descontar los siguientes: Judas Iscariote, el Judas de Galilea que instigó una rebelión contra Roma, y otro Judas desconocido de Hechos 9.11. Quedamos con tres candidatos:

*Judas, otro discípulo de Jesús (Lc. 6.16)
*Judas Barrabás, compañero de Pablo en Hch. 15.22 
*Y Judas el hermano de Jacobo y medio-hermano de Jesús (Mt.13.55, Mc. 6.3).
La gran mayoría de comentaristas aceptan este último Judas como el autor. El último Judas parece el único que se podría nombrar en una carta sin más introducción o explicación. 

<hr>

En esta carta ''Judas no especifica que es hermano de Jesús.'' Algunos asumen que esto es evidencia que no era el medio-hermano de Jesús. La respuesta es que esta falta de mención es más bien una indicación de su humildad de no querer llamar atención a su relación especial con el Señor. Judas no quiso presumir autoridad en base de esta relación. Santiago tampoco menciona esta relación en su respectiva carta.

<hr>

''No sabemos mucho acerca de Judas, el medio-hermano de Jesús.''

*Sabemos que los hermanos de Jesús no creyeron en él antes de su resurrección (Mt. 12.46-50, Jn. 7.1-5). Pero después se encontraron en el aposento alto (Hch. 1.12-14) y eran ministros (1 Co. 9.5).
*Eusebio nos relata una historia de Hegésipo, que el Emperador Domiciano interrogó a dos nietos de Judas. Domiciano vio que ellos eran campesinos que carecían de riquezas y que esperaban a un reino celestial, no terrenal. Y por esta razón el emperador cesó su persecución del Cristianismo.

<hr>

''Dudas que Judas escribió la carta que tiene su nombre''

<span class="doublelist">

*Algunos han propuesto que otro autor en tiempos posteriores escribió en el nombre de Judas para dar un peso de autoridad a su libro. Pero, ¿Por qué Judas? Judas no era tan conocido. Este argumento no tiene mucho sentido y es basado en argumentos relativos a la fecha. Además, si hubiera sido un libro seudónimo, el autor seguramente habría descrito a Judas como el hermano de Jesús, porque el propósito de escribir un libro pseudónimo era de apelar a la autoridad de alguien más conocido.
*Además, algunos han dicho que Judas no pudo haber escrito esta carta porque el griego es excelente, y Judas era un judío de Palestina. Pero los judíos de Palestina probablemente eran bilingües, y de todos modos, Judas pudo haber utilizado un amanuense. 

</span>
La palabra 'carne' (σάρξ) aparece siete veces en 1 Pedro:

|bluealtrows|k
|1.24|"Toda carne es como hierba . . ." (RV60)|
|3.18|". . . siendo a la verdad muerto en la carne, pero vivificado en espíritu;" (RV60)|
|3.21|". . . no quitando las inmundicias de la carne . . ." (RV60)|
|4.1 (2x)|"Cristo ha padecido por nosotros en la carne . . ." (RV60)<br>". . . pues quien ha padecido en la carne, terminó con el pecado . . ." (RV60)|
|4.2|". . . para no vivir el tiempo que resta en la carne . . ." (RV60)|
|4.6|". . . para que sean juzgados en carne según los hombres . . ." (RV60)|

@@.source Fuente: Geisler@@
|bluealtrows|k
|!2.28|Ahora, hijitos, permaneced en él, para que cuando se manifieste, tengamos confianza, para que en su venida no nos alejemos de él avergonzados.|
|!3.19-22|En esto conocemos que somos de la verdad, y aseguraremos nuestros corazones delante de él, pues si nuestro corazón nos reprende, mayor que nuestro corazón es Dios, y él sabe todas las cosas. Amados, si nuestro corazón no nos reprende, confianza tenemos en Dios; y cualquiera cosa que pidamos la recibiremos de él, porque guardamos sus mandamientos y hacemos las cosas que son agradables delante de él.|
|!4.17|En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo.|
|!5.14|Esta es la confianza que tenemos en él, que si pedimos alguna cosa conforme a su voluntad, él nos oye.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
El libro de Santiago no menciona mucho a Jesucristo. La Cristología no es un enfoque de esta carta. No menciona su muerte, resurrección o ascensión, y no lo llama el Hijo de Dios. Santiago 5.7-8 menciona la segunda venida de Cristo, y 5.14 afirma que Jesucristo sana. 

A veces es difícil decidir cuando la palabra "Señor" se aplica a Jesús, y cuando se aplica a Dios Padre. 

*Jesús: 1.1, 2.1
*Dios: 1.7, 3.9, 4.15, 5.4, 5.10-11.
*Difícil de decidir: Prob. Dios, 4.10, 4.15; Prob. Jesús, 5.7-8, 14, 15.
Pedro, más que otros autores del NT, lanza una severa crítica del paganismo de su día. Pedro refiere a este paganismo como la religión anterior de sus lectores:

<span class="doublelist">

*En 1.14, Pedro les amonesta a que no se conformen a los deseos que tenían cuando antes estaban en “ignorancia”.
*En 1.18, Pedro se refiere a la “vana manera de vivir” que sus lectores recibieron de sus padres, de la cual fueron “rescatados”.
*En 2.11-12, Pedro dice que los paganos acusan a los creyentes, pero los creyentes serán vindicados en el día del Señor, y los paganos tendrán que glorificar a Dios cuando ven nuestra vindicación.
*En 4.3-5, Pedro hace una lista de cosas “abominables” que agradan a los Gentiles. Dice que ya es tiempo de dejar estas cosas atrás. Explica que los Gentiles se sorprenden que los Cristianos no quieren unirse con ellos en “el mismo desenfreno de disolución” en que ellos andan, y ellos se burlan de los Cristianos. Pero no se dan cuenta que pronto serán juzgados por Dios.
*En 4.18, Pedro describe a los inconversos como impíos y pecadores, y dice que el juicio será más severo para ellos que para los Cristianos.

</span>
<table class="altgray"><tr><td>

    El género “apocalípsis” era un género de literatura narrativa que intenta revelar secretos celestiales a través de un intermediario extraterrestre a un personaje importante del pasado por medio de visiones. En un apocalipsis, el mensaje es que Dios promete intervenir en el futuro cercano, juzgando a sus enemigos y vindicando a su pueblo.

</td></tr><tr><td>

    La función de un apocalipsis es de estimular a los lectores a que perseveren en medio de sus tribulaciones. Los apocalipsis dan vuelta a la realidad: la visión celestial se presenta como el mundo “real” y el mundo actual se presenta como momentáneo e ilusorio.

</td></tr><tr><td>

    ''Apocalipsis y apocalíptico''

* ''Apocalipsis'' es un sustantivo que se refiere a un género de literatura que florecía entre 200 a.c. y 100 d.c.
* ''Apocalíptico'' como sustantivo se refiere a un tipo de pensamiento escatológico que produjo esta literatura.
* ''Apocalíptico'' como adjetivo puede modificar tanto la literatura como la teología que la produjo.

</td></tr></table>

<span class="source">Fuente: Carson, Moo y Morris, 478; Osborne, 476.</span>
Santiago usa diatriba, citando a varias personas, imaginarias o no imaginarias. Probablemente Jacobo está usando las palabras de sus lectores:

|bluealtrows|k
| 1.13 |Que no diga que Dios le tiente|
| 2.2-4 |Lo que dicen a los ricos y a los pobres en los cultos|
| 2.14 |El que dice que tiene fe sin obras|
| 2.18 |El que dice “Tú tienes fe y yo tengo obras”|
| 2.19 |El que cree que Dios es uno|
| 4.13 |Los que hablan de sus futuros planes de negocio|
| 4.16 |Los que se jactan|
La palabra elegido / escogido (ἐκλεκτός, συνεκλεκτός) aparece cinco veces en 1 Pedro:

|bluealtrows|k
|1.1|"Pedro, apóstol de Jesucristo, a los elegidos . . ." (NVI)|
|2.4|". . . rechazada por los seres humanos pero escogida y preciosa ante Dios." (NVI)|
|2.6|"Miren que pongo en Sión una piedra principal escogida y preciosa . . ." (NVI)|
|2.9|"Pero ustedes son linaje escogido . . ." (NVI)|
|5.13|"La iglesia que está en Babilonia, elegida juntamente con vosotros . . ." (RV60)|

@@.source Fuente: Geisler@@

<hr>

La palabra 'llamar' (καλέω) aparece seis veces en 1 Pedro:

|bluealtrows|k
|1.15|". . . como también es santo quien los llamó . . ." (NVI)|
|2.9|". . . aquel que los llamó de las tinieblas a su luz admirable." (NVI)|
|2.21|"Para esto fueron llamados, porque Cristo sufrió por ustedes . . ." (NVI)|
|3.6|". . . Sara, que obedecía a Abraham y lo llamaba su señor." (NVI)|
|3.9|". . . para esto fueron llamados, para heredar una bendición." (NVI)|
|5.10|". . . el Dios de toda gracia que los llamó a su gloria eterna en Cristo . . ." (NVI)|

@@.source Fuente: Geisler@@
|bluealtrows|k
|!3.5|Y sabéis que él apareció para quitar nuestros pecados, y no hay pecado en él.|
|!3.8|Para esto apareció el Hijo de Dios, para deshacer las obras del diablo.|
|!4.2-3|En esto conoced el Espíritu de Dios: todo espíritu que confiesa que Jesucristo ha venido en carne, es de Dios; y todo espíritu que no confiesa que Jesucristo ha venido en carne, no es de Dios; y este es el espíritu del Anticristo, el cual vosotros habéis oído que viene, y que ahora ya está en el mundo.|
|!4.9|En esto se mostró el amor de Dios para con nosotros: en que Dios envió a su Hijo unigénito al mundo para que vivamos por él.|
|!5.6|Este es Jesucristo, que vino mediante agua y sangre; no mediante agua solamente, sino mediante agua y sangre. Y el Espíritu es el que da testimonio, porque el Espíritu es la verdad.|
|!5.18|Sabemos que todo aquel que ha nacido de Dios no practica el pecado, pues Aquel que fue engendrado por Dios lo guarda y el maligno no lo toca.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<span class="doublelist">

*Estamos en la última hora. Lo sabemos porque los anticristos han salido al mundo (2.18).
*Jesús vendrá (2.28, 3.2), y los creyentes serán como él y lo verán tal como es. 
*Lo que los creyentes serán aun no ha sido revelado (3.2).
*Habrá un día de juicio (4.17)
*La oscuridad está pasando, y la nueva luz viene (2.8).
*El mundo y sus deseos son pasajeros, pero el hombre que hace la voluntad vivirá para siempre (2.17)

</span>
La palabra 'esperanza' (ἐλπίς) aparece tres veces en 1 Pedro.

|bluealtrows|k
|1.3|". . . nos hizo renacer para una esperanza viva . . ." (RV60)|
|1.21|". . . para que vuestra fe y esperanza sean en Dios." (RV60)|
|3.15|". . . ante todo el que os demande razón de la esperanza que hay en vosotros;" (RV60)|

@@.source Fuente: Geisler@@

<hr>

La palabra 'revelación' (ἀποκάλυψις) aparece tres veces en 1 Pedro:

|bluealtrows|k
|1.7|". . . cuando sea manifestado Jesucristo . . ." (RV60)|
|1.13|". . . cuando Jesucristo sea manifestado . . ." (RV60)|
|4.13|". . . para que también en la revelación de su gloria os gocéis . . ." (RV60)|

@@.source Fuente: Geisler@@

<hr>

Hay dos palabras en griego para el tiempo cronológico, καιρός y χρόνος. Estas palabras aparecen un total de ocho veces en 1 Pedro.

|bluealtrows|k
|1.5|". . . la salvación que está preparada para ser manifestada en el tiempo (καιρός) postrero." (~RV60)|
|1.11|"escudriñando qué persona y qué tiempo (καιρός) indicaba el Espíritu de Cristo . . ." (~RV60)|
|1.17|". . . conducíos en temor todo el tiempo (χρόνος) de vuestra peregrinación . . ." (~RV60)|
|1.20|". . . se ha manifestado en estos últimos tiempos (χρόνος) en beneficio de ustedes." (NVI)|
|4.2|". . . para no vivir el tiempo (χρόνος) que resta en la carne . . ." (~RV60)|
|4.3|"Pues ya basta con el tiempo (χρόνος) que han desperdiciado . . ." (NVI)|
|4.17|"Porque es tiempo (καιρός) de que el juicio comience por la familia de Dios;" (NVI)|
|5.6|". . . para que él los exalte a su debido tiempo (καιρός)." (NVI)|

@@.source Fuente: Geisler@@

<hr>

La palabra ‘siglo / eterno’ (αἰών, αἰώνιος) aparece tres veces en 1 Pedro:

|bluealtrows|k
|4.11 (2x)|“. . . a quien pertenecen la gloria y el imperio por los siglos de los siglos. Amén.” (RV60)|
|5.10 |“. . . que nos llamó a su gloria eterna en Jesucristo . . .” (RV60)|
|5.11 (2x) |“A él sea la gloria y el imperio por los siglos de los siglos. Amén.” (RV60)|

@@.source Fuente: Estudio personal del autor@@

<hr>

La palabras para ‘ahora’ (ἄρτι, νῦν) aparecen seis veces en 1 Pedro.

|bluealtrows|k
|1.6 |En lo cual vosotros os alegráis, aunque ''ahora'' (ἄρτι) por un poco de tiempo, si es necesario, tengáis que ser afligidos en diversas pruebas|
|1.8 |a quien amáis sin haberle visto, en quien creyendo, aunque ''ahora'' (ἄρτι) no lo veáis, os alegráis con gozo inefable y glorioso;|
|1.12 |A éstos se les reveló que no para sí mismos, sino para nosotros, administraban las cosas que ''ahora'' (νῦν) os son anunciadas por los que os han predicado el evangelio por el Espíritu Santo enviado del cielo;|
|2.10 |vosotros que en otro tiempo no erais pueblo, pero que ''ahora'' (νῦν) sois pueblo de Dios; que en otro tiempo no habíais alcanzado misericordia, pero ''ahora'' (νῦν) habéis alcanzado misericordia.|
|2.25 |Porque vosotros erais como ovejas descarriadas, pero ''ahora'' (νῦν) habéis vuelto al Pastor y Obispo de vuestras almas.|
|3.21 |El bautismo que corresponde a esto ''ahora'' (νῦν) nos salva|

<hr>

La palabra ‘fin’ (τέλος) aparece veces en 1 Pedro:

|bluealtrows|k
|1.9|“obteniendo ''el fin'' de vuestra fe, que es la salvación de vuestras almas.” (RV60)|
|3.8|“''En fin'', vivan en armonía los unos con los otros;” (NVI)|
|4.7|“Mas ''el fin'' de todas las cosas se acerca . . .” (RV60)|
|4.17|“¿cuál será ''el fin'' de aquellos que no obedecen al evangelio de Dios?” (RV60|

@@.source Fuente: Geisler@@
La escatología, incluso el juicio final, se menciona en Judas 3, 6, 14-15, 18, 21, y 24:

<span class="doublelist">

*Habrá un gran juicio en el día final (Judas 6)
*El Señor vendrá para juzgar (Judas 14-15)
*Estamos en los últimos tiempos (Judas 18)
*La condenación de algunos fue anticipado hace mucho tiempo (Judas 4)

</span>
<table class="altgray"><tr><td>

1 Juan es el libro más difícil del NT en cuanto a su estructura. Los comentaristas casi concuerdan en cuanto a las perícopas, pero no en cuanto a las divisiones básicas de la carta.

</td></tr><tr><td>

1 Juan parece una sinfonía o un espiral, porque menciona a varios temas y regresa a cada uno repetidamente, cada vez desde otra perspectiva.

</td></tr><tr><td>

La mayoría de comentaristas encuentran tres pruebas de la fe genuina en 1 Juan, y usan estas pruebas como claves para la estructura:

* ¿Crees que Jesús es el Cristo (Mesías), venido en la carne?
* ¿Vives una vida justa?
* ¿Amas a tus hermanos?

</td></tr></table>
* Descripción de un ángel poderoso con un libro (10.1-3a)
* Juan no puede escribir lo que dijeron los siete truenos (10.3b-4)
* El juramento del ángel: el tiempo se ha acabado (10.5-7)
* Juan come el libro: una comisión profética (10.8-11)
!!!La media del templo en Jerusalén (11.1-2)

!!!Los dos testigos (11.3-13)

* El ministerio de los dos testigos (11.3-6)
* El martirio de los dos testigos (11.7-10)
* La resurrección y ascensión de los dos testigos, y el terremoto en Jerusalén (11.11-13)

!!!Comentario: pasó el segundo ay (11.14)

!!!La séptima trompeta: el arca del pacto se ve en el templo (11.15-19)
''Apocalipsis 14.1-20 es una unidad.''

*Se distingue de capítulo 13 por su contenido - capítulo 13 habla de las dos bestias.
*También se distingue de capítulo 15, porque 15.1 abre con las palabras "Vi en el cielo otro señal grande y maravillosa", indicando una nueva sección.

<hr>

''Un bosquejo de Apocalipsis 14:''

|bluebycell|k
|El Cordero y los 144,000 (14.1-5)|!La aparición del Cordero y los 144,000 sobre Sión (14.1)|
|~|!El sonido del canto celestial para los 144,000 (14.2-3a)|
|~|!La descripción de Juan acerca de los 144,000 (14.3b-5)|
|La aparición de tres ángeles (14.6-12)|!El primer ángel (14.6-7)|
|~|!El segundo ángel (14.8)|
|~|!El tercer ángel, con un comentario de Juan (14.9-12)|
|>|Una bienaventuranza sobre los que mueren en el Señor (14.13)|
|Dos narrativas acerca de la cosecha final la tierra (14.14-20)|!La cosecha del grano (14.14-16)|
|~|!La cosecha de las uvas (14.17-20)|
   //Fuente: investigación personal del autor//

<hr>

    ''Un ángel invite a Juan a ser testigo del castigo de una gran ramera (Ap 17.1-3a)''

* La invitación (1)
* El ángel describe la gran ramera (2)
* El ángel lleva a Juan a un desierto (3a)

<hr>

    ''Juan ve a una mujer montada sobre una bestia (Ap 17.3b-6a)''

* Juan ve a la mujer (3b)
* Juan describe la mujer (4-6a)
** Su vestidura (4a)
** Su copa (4b)
** Su título (5)
** Su embriaguez (6a)

<hr>

   '' Juan y el ángel platican sobre la visión (Ap 17.6b-7)''

* Juan reacciona a la visión (17.6b)
* La reacción de Juan sorprende al ángel (7a)
* El ángel ofrece explicar la visión (7b)

<hr>

    ''El ángel interpreta la visión (Ap 17.8-18)''

* La interpretación de la bestia (8)
** Era, no es, regresará del abismo, y será destruido (8a)
** El mundo inconverso se asombrará al verlo (8b)
* Llamado a la sabiduría (9a)
* La interpretación de las siete cabezas (9b-10)
** Son siete colinas (9b)
** También son siete reyes (10a)
** Cinco de ellos han caído (10b)
** El sexto es (10c)
** Un séptimo rey viene para reinar brevemente (10d)
* (paréntesis adicional acerca de la bestia (11)
** Es un octavo rey (11a)
** Pertenece a los siete (11b)
** Será destruido (11c)
* La interpretación de los diez cuernos (12-14)
** Son diez reyes (12a)
** Todavía no han recibido sus reinos (12b)
** Por una hora recibirán sus reinos (12c)
** Están unidos en sus propósitos (13a)
** Cederán su autoridad a la bestia (13b)
** Harán guerra contra el Cordero (14a)
** El Cordero y sus seguidores los derrotarán (14b)
* La interpretación de las aguas (15) - son pueblos, multitudes, naciones y lenguas
* Dios castiga a la ramera (16-17)
** Descripción de la destrucción de la ramera por la bestia y los diez cuernos (16)
** El propósito divino detrás de la destrucción de la ramera (17)
* La interpretación de la ramera (18) - ella es la gran ciudad que reina sobre el mundo
//    Fuente: bosquejo del autor//

<span class="doublelist">

* Una orden a escribir (2.1a)
* Una descripción de Cristo (2.1b) - tiene estrellas, camina por los candeleros
* Las obras que Cristo reconoce (2.2-3) – arduo trabajo, paciencia, su intolerancia de los falsos profetas
* Una queja (2.4) – han perdido el amor que tenían al principio
* Las órdenes de Cristo para la iglesia (2.5a) – Recordarse, arrepentirse
* Las consecuencias de la queja (2.5b) - se quitará su candelero
* Una concesión (2.6) - ellos aborrecen las prácticas de los nicolaítas
* Llamado a la atención (2.7a)
* Una promesa al que venciere (2.7b) – el derecho de comer del árbol de la vida

</span>
    //Fuente: bosquejo del autor.//

<span class="doublelist">

* Una orden a escribir (2.12a)
* Una descripción de Cristo (2.12b) - tiene la espada de doble fila
* Las obras que Cristo reconoce (2.13) - ellos permanecen fieles en una situación difícil, no han renunciado su fe, aún cuando Antipas fue martirizado
* Una queja (2.14-15) - algunos profesan la doctrina de Balaam y los Nicolaítas
* Las órdenes de Cristo para la iglesia (2.16a) - arrepentirse
* Las consecuencias de la queja (2.16b) - Cristo peleará contra ellos con la espada de su boca
* Concesión (omitida)
* Llamado a la atención (2.17a)
* Una promesa al que venciere (2.17b) - maná escondida, una piedra blanca, un nuevo nombre

</span>
    //Fuente: bosquejo del autor//

<span class="doublelist">

* Una orden a escribir (2.18a)Una descripción de Cristo (2.18b) - ojos de fuego y pies de bronce
* Las obras que Cristo reconoce (2.19) - amor, fe, perseverancia, servicio, mejoramiento
* Una queja (2.20-23)    
* La queja propia (2.20a) - ellos toleran a Jezabel
* Descripción de Jezabel (2.20b-21)
* Descripción del castigo inminente de Jezabel (2.22-23)
* Las órdenes de Cristo para la iglesia (2.24-25) - retener lo que tienen
* Las consecuencias (omitidas)
* Una concesión (omitida)
* Una promesa al que venciere (2.26-28) - autoridad sobre las naciones, la estrella de la mañana
* Un llamado a atención (2.29)

</span>
    //Fuente: bosquejo del autor//

<span class="doublelist">

* Una orden a escribir (2.8a)
* Una descripción de Cristo (2.8b) - el primero y el postrero, que murió y volvió a vivir
* Las obras que Cristo reconoce (2.9) - su pobreza, los insultos contra ellos
* Queja (omitida)
* Las órdenes de Cristo para la iglesia (2.10a) - no temer, ser fiel durante una prueba de diez días
* Las consecuencias de la obediencia (2.10b) - la corona de vida
* Concesión (omitida)
* Llamado a la atención (2.11a)
* Una promesa al que venciere (2.11b) la segunda muerte no le hará daño

</span>
    //Fuente: bosquejo del autor.//

<hr>

    ''La visión de Juan de un nuevo orden (21.1-2)''

* Juan ve un nuevo cielo y una nueva tierra sin mar (21.1)
* Juan que el descenso de la nueva Jerusalén desde el cielo (21.2)

<hr>

    ''Juan escucha una voz del o cerca del trono (21.3-4)''

* Dios morará con la humanidad (21.3a)
* Dios será el Dios de su pueblo (21.3b)
* Dios quitará las lágrimas de su pueblo (21.4a)
* El orden anterior y todos sus males se han ido (21.4b)

<hr>

    ''Siete palabras del que está sentado sobre el trono (21.5-8)''

* Una declaración que Dios hace todas las cosas nuevas (21.5a)
* Una orden de escribir sus palabras (21.5b)
* Una declaración que todo está hecho (21.6a)
* La identificación de Dios como Alfa y Omega, etc (21.6b)
* El regalo del agua de vida a los que tienen sed (21.6c)
* Una promesa de una herencia y la presencia de Dios para los que vencen (21.7)
* Una lista de las personas cuyo destino es el lago de fuego (21.8)
* Un ángel lleva a Juan a un monte para ver la novia del Cordero (es decir, la ciudad) (21.9-10)

<hr>

    ''La descripción de la nueva Jerusalén (21.11-22.5)''

* Su gloria (21.11)
* Sus muros y sus doce puertas (21.12-13)
* Su fundamento (21.14)
* Sus dimensiones (21.15-17)
* Los materiales usados en su construcción (21.18-21)
** Los materiales de sus muros (21.18)
** Los materiales de sus fundamentos (21.19-20)
** Los materiales de sus puertas (21.21a)
** Los materiales de su avenida principal (21.21b)
* Lo que Juan no ve en la ciudad (21.22-23)
** No hay templo, porque Dios y el Cordero son su templo (21.22)
** No hay necesidad de sol o luna, porque Dios y el Cordero son su luz (21.23)
* Su dominio sobre las naciones (21.24-26)
** Las naciones caminarán por su luz (21.24a)
** Los reyes traerán su esplendor a ella (21.24b)
** No será necesario cerrar la ciudad en la noche (21.25)
** Las naciones traerán su gloria a ella (21.26)
* Las personas que se admitirán y no se admitirán a la ciudad (21.27)
** Los que no se admitirán (21.27a)
** Los que se admitirán (21.27b)
* El río de vida (22.1-2a)
* El árbol de vida (22.2b)
* La ausencia de la maldición (22.3a)
* El trono de Dios y el Cordero (22.3b)
* Los siervos de Dios (22.3c-5)
** Servirán a Dios (22.3c)
** Verán el rostro de Dios (22.4a)
** El nombre de Dios estará sobre ellos (22.4b)
** Dios siempre les dará luz (22.5a)
** Reinarán para siempre (22.5b)
//Fuente: bosquejo del autor//

<hr>

''Tres confirmaciones de las palabras de este libro (22.6-8a)''

*El ángel afirma la confiabilidad y la fuente divina de las palabras (22.6)
*El Señor habla (22.7)
**Primero de tres dichos "Vengo pronto" (22.7a)
**Bienaventuranza para el lector fiel (22.7b)
*Juan confirma que fue testigo (22.8a)

<hr>

''La interacción entre Juan y el ángel (22.8b-11)''

*Juan intenta adorar al ángel (22.8b)
*El ángel amonesta a Juan (22.9)
**El ángel rehusa la adoración de Juan (22.9a)
**El ángel revela su identidad (22.9b)
**El ángel dirige la adoración de Juan hacia Dios (22.9c)
*El ángel ordena que Juan no selle las palabras del libro (22.10)
*El ángel ordena que la gente siga en su presente conducta (22.11)

<hr>

''Los mensajes del Señor Jesús al oidor (22.12-20)''

*Segundo de tres dichos "Vengo pronto" (22.12)
*Identificación de Jesús como Alfa y Omega, etc (22.13)
*Bienaventuranza para los que lavan sus vestidos (22.14)
*Lista de los que fueron dejados fuera de la ciudad (22.15)
*Confirmación del envío del ángel (22.16a)
*Identificación de Jesús como Raíz, Linaje y Estrella (22.16b)
*Invitaciones a acercarse y tomar el agua de vida (22.17)
*Advertencias (22.18-19)
**Advertencia a los que añaden al libro (22.18)
**Advertencia a los que quitan del libro (22.19)
*Tercero de tres dichos "Vengo pronto" (2.20a)

<hr>

''Conclusión autorial de Juan (22.20b-21)''

*Amén (22.20b)
*Oración (22.20c)
*Bendición de gracia (22.21)
    //Fuente: bosquejo del autor//

<span class="doublelist">

* Una orden a escribir (3.1a)
* Una descripción de Cristo (3.1b) - tiene los siete espíritus y las siete estrellas
* Las obras que Cristo reconoce (3.1c) - tienen una reputación de estar vivos
* Una queja (3.1d) - pero están muertos
* Las órdenes de Cristo para la iglesia (3.2-3a) ' despertarse, fortalecer lo que permanece, recorder, obedecer, arrepentirse
* Las consecuencias de la queja (3.3b) - Cristo vendrá como ladrón
* Una concesión (3.4a) - algunos no han ensuciado sus vestidos
* Una promesa al que venciere (3.4b-5) - caminar con Cristo, vestirse de blanco, tener su nombre en el libro de la vida, ser reconocidos por Cristo
* Un llamado a la atención (3.6)

</span>
 //  Fuente: bosquejo del autor.//

<span class="doublelist">

* Una orden a escribir (3.14a)
* Una descripción de Cristo (3.14b) - Amén, testigo fiel, soberano sobre la creación de Dios
* Las obras que Cristo reconoce (es parte de la queja, abajo)
* Una queja (3.15-17)
** La queja propia (3.15) - Cristo sabe que son tibios
** Consecuencia de la queja (3.16) - Cristo los vomitará de su boca
** Corrección: ellos piensan que son ricos, pero son pobres (3.17)
* Las órdenes de Cristo para la iglesia (3.18-19)
* Una orden (3.18) - comprar oro, ropa blanca y colirio
* Una palabra de ánimo (3.19a) - Cristo los disciplina porque los ama
* Otra orden (3.19b) - Tomar las cosas en serio, arrepentirse
* Las consecuencias de su obediencia (3.20) - Cristo entrará y convivirá con los que lo invitan
* Una concesión (omitida)
* Una promesa al que venciere (3.21) - el derecho de sentarse en el trono de Jesucristo
* Un llamado a la atención (3.22)

</span>
   // Fuente: bosquejo del autor.//

<span class="doublelist">

* Una orden a escribir (3.7a)
* Una descripción de Cristo (3.7b) - tiene las llaves de David, abre y cierra irrevocablemente
* Las obras que Cristo reconoce (3.8-10a)
** Cristo conoce sus obras (3.8a)
** Ha puesto una puerta abierta delante de ellos (3.8b)
** Conoce que a pesar de su debilidad ellos han guardado su pálabra y no han negado su nombre (3.8c)
** Promete obligar a sus perseguidores reconocer el amor de él por ellos (3.9)
** Sabe que ellos han guardado la palabra de su paciencia (3.10a)
* Consecuencia de su obediencia (3.10b) - los guardará de la hora de prueba
* Una queja (omitida)
* Las órdenes de Cristo para su iglesia (3.11a) - retener lo que tienen, porque él viene pronto
* Las consecuencias (3.11b) - para que nadie quite la coronoa de ellos
* Consesión (omitida)
* Una promesa al que venciere (3.12) - ser columna en el templo, nunca saldrán del templo, los nombres de Dios escritos sobre ellos; la nueva Jerusalén y Cristo
* Un llamado a la atención (3.13)

</span>
  ''Juan es llevado al cielo (4.1-2a)''

<span class="doublelist">

* Juan ve una puerta abierta (4.1a)
* Una voz como de trompeta invita a Juan al cielo (4.1b)
* De repente Juan está en el Espíritu (4.2a)

</span>

   '' Juan describe lo que ve en el cielo (4.2b-11)''

<span class="doublelist">

* Una descripción del que está sentado en el trono (4.2b-3)
* Una descripción de los 24 ancianos (4.4)
* Una descripción del área alrededor del trono (4.5-6a)
** Fenómenos cósmicos (4.5a)
** Lámparas (4.5b)
** Un mar de cristal (4.6a)
* Una descripción de los cuatro seres vivientes (4.6b-8a)
** Lugar y descripción inicial (4.6b)
** Descripción del primer ser viviente (como león) (4.7a)
** Descripción del segundo ser viviente (como buey) (4.7b)
** Descripción del tercer ser viviente (como ser humano) (4.7c)
** Descripción del cuarto ser viviente (como águila) (4.7d)
** Descripción general (4.8a)
* Una descripción del culto celestial (4.8b-11)
** La alabanza de los seres vivientes (4.8b)
** La respuesta de alabanza de los 24 ancianos (4.9-11)
*** Se postran (4.9-10a)
*** Echan sus coronas (4.10b)
*** Cantan un himno (4.11)

</span>
    //Fuente: bosquejo del autor//

    ''Una descripción del rollo (5.1)''

    ''La búsqueda de alguien digno de abrir el rollo (5.2-5)''

* El ángel pregunta quién es digno (5.2)
* Nadie en el universo es digno (5.3)
* Juan llora (5.4)
* Uno de los ancianos consuela a Juan: Hay un León que puede abrir el rollo (5.5)

    ''Un Cordero aparece y toma el rollo (5.6-7)''

* La aparición y una descripción del Cordero (5.6)
* El Cordero toma el rollo del que está sentado sobre el trono (5.7)

    ''Varios grupos responden en alabanza al Cordero (5.8-14)''

* La adoración de los cuatro seres vivientes y los 24 ancianos (5.8-10)
** Su acción: se postran (5.8a)
** Su descripción: tienen arpas y copas de incienso (oraciones) (5.8b)
** Su himno (5.9-10)
* La adoración de una multitud de ángeles (5.11-12)
** Su número (5.11a)
** Su lugar (5.11b)
** Su himno (5.12)
* La adoración de toda criatura en el universo (5.13)
* La identidad de los cantantes (5.13a)
** Su himno (5.13b)
* La respuesta de los seres vivientes y los ancianos (5.14)
** Los cuatro seres vivientes dicen Amén (5.14a)
** Los 24 ancianos se postran y adoran (5.14b)
!!!El Cordero abre los primeros seis sellos (6.1-14)

* El primer sello: el jinete con el caballo blanco (6.1-2)
* El segundo sello: el jinete con el caballo rojo (6.3-4)
* El tercer sello: el jinete con el caballo negro (6.5-6)
* El cuarto sello; el jinete con el caballo de color amarillo (6.7-8)
* El quinto sello: las almas debajo del altar necesitan esperar (6.9-11)
* El sexto sello: fenómenos cósmicos en los cielos y en la tierra (6.12-14)
* La reacción de la humanidad (6.15-17)

!!!El sello de los 144.000 (7.1-8)

!!!La gran multitud en el cielo (7.9-17)

* Una descripción de la multitud (7.9)
* La canción de la multitud (7.10)
* La respuesta de los ángeles (7.11-12)
* La explicación de la multitud por el anciano (7.13-17)

!!!El octavo sello: silencio en el cielo por media hora (8.1)
*''Las primeras seis trompetas (8.2-9.21)''

**Preludio a las trompetas (8.2-6)
**La primera trompeta: granizo, fuego y sangre queman la tercera parte de las plantas (8.7)
**La segunda trompeta: una montaña lanzada al mar destruye la tercera parte de la vida marina y los barcos (8.8-9)
**La tercera trompeta: la estrella Ajenjo amarga la tercera parte de las aguas dulces (8.10-11)
**La cuarta trompeta: la tercera parte del sol, la luna y las estrellas se oscurece (8.12)
**''Interludio:'' una aguila anuncia tres ayes (8.13)
**La quinta trompeta: langostas monstruosas del abismo torturan a la humanidad (9.1-11)
**''Comentario parenético:'' pasó la primera de los tres ayes (9.12)
**La sexta trompeta: un ejército monstruoso mata a la tercera parte de la humanidad (9.13-19)
**''Comentario parenético:'' la falta de arrepentimiento de la humanidad (9.20-21)
<table class="altgray"><tr><td>

    La estructura del libro de Apocalipsis es un punto de fuerte debate entre comentaristas. Algunos han comentado de broma que hay más bosquejos del libro que comentaristas. Los bosquejos en este archivo no intentan resolver el asunto. Nuestros bosquejos simplemente notan la estructura interna de cada sección del libro sin tomar decisiones acerca de las relaciones entre las respectivas secciones. Tampoco intentamos aquí presentar todos los bosquejos que hemos visto. Nuestra meta es simplemente presentar al lector algunas de las características que los académicos han usado como marcadores para entender la estructura de Apocalipsis.

</td></tr><tr><td>

        Distinguir las secciones básicas es fácil. Lo difícil es decidir las relaciones entre las secciones.

</td></tr><tr><td>

        Casi todos están de acuerdo que Apocalipsis 1.1-8 es el prólogo del libro y que 22.6-21 es el epílogo o conclusión. Debe notarse, sin embargo, que algunos extienen el prólogo a 1.10 o hasta al 1.20.

</td></tr><tr><td>

        También es evidente que capítulos dos y tres son una unidad distinta compuesta de siete cartas a siete iglesias.

</td></tr><tr><td>

        Capítulos dos y tres se enlazan con el primer capítulo porque las descripciones de Jesús en capítulo uno se repiten en las promesas a las iglesias en capítulos dos y tres. Jesús aparece y se describe en capítulo uno, y procede a dictar cartas a Juan an capítulos dos y tres.

</td></tr><tr><td>

        Capítulos cuatro y cinco forman una sección distinta basada en el escenario (el trono en el cielo) y los personajes presentes. La adoración celestial gira alrededor de Dios como Creador (cap. 4) y Jesucristo como Redentor (cap. 5).

</td></tr><tr><td>

        Hay una conexión entre capítulo 5, donde el Cordero adquiere el rollo, y capítulo 6, donde los sellos alrededor del rollo se abren uno por uno. El Cordero está abriendo los sellos del rollo que recibió del que está sentado sobre el trono.

</td></tr><tr><td>

        Hay tres series de siete juicios de Dios sobre el mundo: siete sellos, siete trompetas y siete copas. Los eruditos debatan si estas series están en orden cronológico, si son paralelos (donde hay repetición o recapitulación del mismo material desde diferentes perspectivas), o si son telescópicos (donde la segunda serie de juicios es una expansión del último artículo de la primera serie, y la tercera serie es una expansión del último artículo de la segunda serie). William Henriksen ve mucha recapituación en Apocalipsis, y desarolló un bosquejo elaborado de lo que el llama 'paralelismo progresivo' a través del libro.

</td></tr><tr><td>

        La relación entre capítulos 19 y 20 es particularmente delicada, porque si son secuenciales o cronológicos, esto apoyaría un punto de vista premilenialista (la venida de Jesús en cap. 19 precede los 1.000 años de cap. 20). Pero si los dos capítulos son paralelos, esto apoyaría un punto de vista amilenialista (cap. 19 termina una sección con la segunda venida, y cap. 20 empieza una nueva sección con los mil años, que preceden la segunda venida de Cristo).

</td></tr><tr><td>

        Algunos autores, viendo que hay cuatro series de sietes (cartas, sellos, trompetas y copas) han buscado tres series más, para llegar a siete series de siete. Hendriksen interpreta Apocalipsis 12.1-15.4 como siete figuras místicas, caps 17-18 como la derrota de siete grandes enemigos, y caps. 20-22 como siete visiones finales. Hay apoyo para la idea de siete series de siete en libros como 4 Esdras y 2 Barúc, que están organizados en siete secciones. En cambio, Felise Tavo levanta una objeción: "Si el autor hubiera querido que sus oidores reconocieran siete visiones en caps. 12-14 y nuevamente en Apoc. 19.11-20.15, probablemente les habría indicado algo al efecto, tal como lo ha hecho en otras secciones."

</td></tr><tr><td>

        Algunos autores dicen que la estructura del libro se basa en la estructura de otro libro. Algunos señalan Ezequiel y Daniel como libros cuyos bosquejos podrían haber influenciado la estructura de Apocalipsis.

</td></tr><tr><td>

        Algunos autores dicen que Apocalipsis sigue la estructura de un drama o desfile griego.

</td></tr><tr><td>

        Unos cuantos autores, entre ellos Elizabeth Schüssler Fiorenza, usan quiasmos muy elaborados para bosquejar Apocalipsis.

</td></tr><tr><td>

        Algunos piensan que Apocalipsis 1.19 indica que el material que sigue está divido entre el presente y el futuro: "las cosas que son ahora" (caps. 2-3) y "las que serán después de estas cosas" (caps. 4-22). Pero esta división no resuelve los demás debates acerca de la estructura del Apocalipsis, porque todas las dificultades estructurales se encuentran a partir del capítulo 6.

</td></tr><tr><td>

        Algunos toman las cuatro referencias a Juan "en el Espíritu" (1.10-11, 4.1-2, 17.1-3 y 21.9-10) como marcadores de nuevas secciones del libro. Cada referencia ocurre en diferentes lugares: Patmos, el cielo, el desierto, y una montaña alta.

</td></tr><tr><td>

        Algunos entienden la frase "después de estas cosas" (4.1, 7.1, 7.9, 15.5, 18.1, 19.1) como marcadores de nuevas secciones.

</td></tr><tr><td>

        Algunos, incluyendo Mark Seaborn Hall, entienden a capítulo 10 como céntrico en el bosquejo de Apocalipsis. En ese capítulo Juan ve lo que aparece ser un segundo rollo. Juan es comisionado a "profetizar otra vez". Según esta perspectiva, hay dos profecías en el libro, caps. 4-9 y caps. 11-22.

</td></tr><tr><td>

        David Aune alega que los dos incidentes donde Juan intenta adora a un ángel (19.9-10 y 22.8-9) forman un inclusio alrededor de esa sección, indicando que es una sección distinta. Christopher R. Smith, escribiendo acerca de estos dos pasajes, dice, "A diferencia de las secciones alrededor, ellos no avanzan el argumento, sino son como cuadros, emblemas ricos en simbolismo cuyo significado se explica y se contempla. Además, son un par distinto en que describen dos ciudades complementarias, Babilonia y Jerusalén, una "cayéndose" y la otra "descendiendo", ciudades que se comparan respectivamente a dos mujeres, una ramera y una novia vírgen...."

</td></tr><tr><td>

        Felise Tavo nos recuerda que debemos buscar una estructura relativamente sencilla, porque el libro fue escrito para leerse en voz alta en público, y los oidores necesitarían ser capaces de discernir la estructura al escucharlo, no después de ver y estudiar a fondo la versión por escrito.

</td></tr></table>

@@.source Fuentes: David E. Aune, Word Biblical Commentary, Vol. 52: Revelation 1-5. (Waco, TX: Word, 1997); José Adriano Filho and Leslie Milton, The Apocalypse of John as an account of a visionary experience: notes on the book’s structure. (Journal for the Study of the New Testament 25 no 2 D 2002, 213-234); Mark Seaborn Hall, The hook interlocking structure of Revelation: the most important verses in the book and how they may unify its structure. (Novum testamentum 44 no 3 2002, 278-296); Christopher R. Smith, The Structure of the Book of Revelation in Light of Apocalyptic Literary Conventions. (Novum testamentum 36 no 4 O 1994, 373-393); Felise Tavo, The structure of the Apocalypse: re-examining a perennial problem. (Novum testamentum 47 no 1 2005, 47-68); Mark Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007);@@
Santiago usa ''conexiones verbales'' para enlazar varias de las unidades de capítulo 1:

*Charein (“Saludos”) en v. 1 y Charan (“gozaos”) en v. 2 
*“Falte” en v. 4 y “falta” en v. 5 
*“Prueba” en v. 12 y “Tentado” en v. 13 (es la misma palabra en griego)
*Palabra en v. 18 y palabras en 21-27

<hr>

''Versículo 12 funciona como puente'' entre 1.2-11 y 1.13-18. Forma un inclusio con 1.2-4 (resistencia en pruebas) e introduce el concepto de obediencia en 1.13-18.

<hr>

En 1.21-27 hay un ''movimiento de lo más general a lo más específico'': 

*Recibir la palabra (21)
*Hacer la palabra (22)
*Hacer la ley (25)
*3 ejemplos específicos (26-27): refrenar la lengua, ayudar a los necesitados, guardarse de la inmoralidad del mundo
*“Nuestra fe”: 5.4
*Creer / no creer: 3.23, 4.1, 5.1, 5.5, 5.10, 5.13
Para Pablo, la fe es mirar hacia atrás, hacia la cruz de Cristo. En cambio, para el autor de Hebreos, la fe es mirar hacia delante con confianza en las promesas de Dios. (Lane)

|bluealtrows|k
|4.2|Los Israelitas no entraron a la promesa porque no combinaron el mensaje con fe.|
|6.1|La fe es una enseñanza básica, y los hebreos deben avanzar a otras enseñanzas también.|
|6.12|Preparación para cap. 11: los hebreos deben ser imitadores de “aquellos que por la fe y la paciencia heredan las promesas.”|
|10.22|Debemos acercarnos a Dios con fe, porque Cristo ha abierto el camino.|
|10.38-39|Cita de Habacuc 2.3-4: el justo (sobre)vivirá por fe, en contraste con el que retrocede, que no sobrevivirá el juicio de Dios.|
|Cap. 11|Versículos 1, 3, 4, 5, 6, 7, 8, 9, 11 13, 17, 20, 21, 22, 23, 24, 27, 28, 29, 30, 31, 33, 39|
|12.1|Jesús el es autor y perfeccionador de nuestra fe|
|13.7|Los destinatarios deben imitar la fe de sus líderes anteriores.|
La habilidad de fijar la fecha de redacción de Judas depende de nuestra interpretación de la evidencia que encontramos dentro de la carta, y nuestra interpretación de la relación entre Judas y 2 Pedro.

<hr>

!!Evidencia interna

<hr>

<span class="doublelist">

* Esta carta pretende venir de la mano de Judas, medio-hermano de Jesús. Si aceptamos a Judas como autor, tenemos que aceptar una fecha dentro del primer siglo.
* Versículo 3 habla de “la fe una vez dada a los santos”, dando la impresión que el mensaje apostólico había tenido suficiente tiempo para concretizarse en un cuerpo establecido de doctrinas.
* La herejía de los 'hombres impíos' necesitaba tiempo para desarrollarse.
* Versículos 17-18 dan la impresión que un tiempo había pasado entre el momento que los lectores recibieron las enseñanzas de los apóstoles y el momento que esta carta fue escrita, y que los apóstoles, ya no accesibles, tienen que ser recordados. Una respuesta a esta interpretación es que Judas no habla necesariamente de todos los apóstoles, solo de los apóstoles que fundaron la iglesia. Dice "sus apóstoles." Y nada de lo que dice Judas necesariamente implica que los apóstoles han fallecido. Así que no tenemos que asumir una fecha muy tarde.

</span>

<hr>

!!La relación entre Judas y 2 Pedro

<hr>

Judas comparte mucho material con 2 Pedro. Es seguro que uno de ellos usó el otro como fuente. Pero, ¿Cuál fue escrito primero?

<span class="doublelist">

* Si decimos que Pedro escribió 2 Pedro, pero que Judas escribió primero, tenemos que poner una fecha muy temprana para Judas, y la evidencia interna va en contra de eso.
* Si decimos que Judas escribió primero, y aceptamos la impresión de la evidencia interna, tenemos que aceptar que 2 Pedro no fue escrito por Pedro sino por otro autor en su nombre, porque Pedro murió en los años 60. La mayoría de los eruditos aceptan que 2 Pedro fue seudónimo, pero esta conclusión causa problemas doctrinales para los que creemos en la inspiración de las Escrituras por un Dios que no miente.
* El presente autor piensa que es preferible creer que Pedro escribió primero, en algún momento antes de su muerte en el año 66 o 67, y Judas escribió después, en la segunda mitad del primer siglo.

</span>

<hr>

!!Judas y el Catolicismo naciente

<hr>

Algunos dicen que Judas es un ejemplo del “Catolicismo Naciente.” Dicen que el estilo y la perspectiva de la carta no es como el estilo y perspectiva de la iglesia primitiva. Dicen que es más parecida a la iglesia en el segundo siglo, cuando sus doctrinas y estructura ya estaban más formadas y concretadas. Pero la respuesta más natural es que Judas no manifiesta ninguno de los elementos más típicos del pensamiento del “Catolicismo Naciente”:

* ¿La pérdida de esperanza en la inminencia de la Parousia? Judas expresa su confianza en vv. 1, 6, 14, 21 y 24.
* ¿Un interés en la iglesia como institución? Judas no menciona la iglesia o sus oficiales.
* ¿El uso de material de credos para resumir la fe Cristiana? Judas tampoco hace esto. 

<hr>

Algunos dicen que los oponentes son Gnósticos, y por eso debemos poner la fecha del libro en el segundo siglo. Pero el Gnosticismo como movimiento bien formado no apareció hasta finales del segundo siglo, muy tarde para este libro. Además, habían ciertos elementos de la doctrina del Gnosticismo que aparecieron antes de la venida del Cristianismo. Si encontramos algunos de estos elementos en esta carta, no es necesario creer que Judas escribió en el segundo siglo cuando el Gnosticismo ya era una religión bien formada.
<table class="altgray"><tr><td>

    Las cartas de Juan no contienen evidencia que nos ayuda a fijar el lugar y la fecha de la composición de la carta.

</td></tr><tr><td>

Si aceptamos a Juan como el autor de estas cartas, Éfeso es el lugar de redacción más probable. Hay evidencia en Eusebio e Ireneo que Juan pasó a vivir en Éfeso.

</td></tr><tr><td>

El contenido del cuarto Evangelio y las tres cartas no nos ayuda a ver la secuencia cronológica en que fueron escritos. Algunos dicen que 1 Juan fue escrito en parte para corregir errores que surgieron por el mal uso del Evangelio de Juan, pero esta teoría se basa en especulación.

</td></tr><tr><td>

En 1 Juan vemos respuestas a doctrinas que después llegarían a formar parte del Gnosticismo. Esta religión no llegó a formarse hasta el segundo siglo. Por esta razón es preferible poner una fecha hacia finales del primer siglo para las cartas de Juan.

</td></tr><tr><td>

Sin embargo, varios libros aluden a 1 Juan a finales del primer siglo y a principios del segundo siglo: 1 Clemente (96 d.c.), el Didaqué (90-120 d.c.), la carta de Policarpo a los Filipenses (c. 110 d.c.), y la epístola de Bernabé (c. 130 d.c.). El uso de las cartas de Juan por estos documentos limita la fecha de las cartas de Juan al primer siglo. Carson, Moo y Morris, 446

</td></tr><tr><td>

Por todas razones la mayoría de los comentaristas dicen que estas cartas fueron escritas entre 80-95 d.c.

</td></tr></table>
<table class="altgray"><tr><td>

La carta a los Hebreos no fue escrita muy temprano, porque según Hebreos 2.3 los destinatarios fueron de la segunda generación de Cristianos. Pero probablemente fue escrita antes de 70 D.C., porque la carta no menciona la destrucción del templo en Jerusalén. Si Hebreos hubiera sido escrita después de la destrucción del templo, seguramente el autor habría mencionado este hecho como una confirmación de su argumento principal, que Jesucristo y su sacrificio en la cruz ha reemplazado el sacerdocio y los sacrificios del templo.

</td></tr><tr><td>

Evidencia que Hebreos no fue escrito muy tarde:

*Timoteo está vivo, según esta carta (Hebreos 13.23)
*1 Clemente (una carta que fue escrita entre 95 y 96 D.C.) cita y aluda a Hebreos extensamente, limitando la fecha de la carta a los Hebreos al primer siglo.

-----

Según Carson, Moo y Morris, es difícil imaginar que el autor hubiera escrito las palabras de Hebreos 8.13 y Hebreos 10.1-2 si el templo todavía estuviera funcionando. 

|bluealtrows|k
|Hebreos 8.13|Al decir «Nuevo pacto», ha dado por viejo al primero; y lo que se da por viejo y se envejece está próximo a desaparecer.|
|Hebreos 10.1-2|La Ley, teniendo la sombra de los bienes venideros, no la imagen misma de las cosas, nunca puede, por los mismos sacrificios que se ofrecen continuamente cada año, hacer perfectos a los que se acercan. 2&nbsp;De otra manera cesarían de ofrecerse, pues los que tributan este culto, limpios una vez, no tendrían ya más conciencia de pecado.|

@@.source Carson, Moo y Morris, 399. Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998).@@

</td></tr><tr><td>

¿De dónde fue escrita la carta a los Hebreos? No podemos estar seguros. En Hebreos 13.24 el autor dice "Los de Italia os saludan." Esto quiere decir una de dos cosas: o el autor escribe desde Italia (específicamente de Roma), o el autor escribe a la iglesia en Roma desde otro lugar, y los Italianos que se encuentran viajando o viviendo cerca del autor saludan a los Cristianos de la iglesia en Roma.

</td></tr></table>
!! Fecha de redacción

''Algunos han favorecido'' una fecha en los años 40 o 50, ''y otros han favorecido'' los años 60.

''Algunos factores apoyan una fecha temprana:''

*Omisión de una cristología alta
*Omisión de la misión a los gentiles o el problema de la circuncisión.
*Esperanza en una inminente segunda venida de Cristo (5.8).
*No hay polémica contra el judaísmo. Esto indica que el cristianismo todavía no se había apartado de su estrecha relación con el Judaísmo cuando Jacobo escribió. Además, llamó a sus lectores las 12 tribus.
*No menciona la destrucción de Jerusalén.
*No menciona ninguna herejía o cisma.

Carson, Moo y Morris sugieren una fecha de 48 o 49, antes del Concilio en Hechos 15. Ellos dicen que 2.14-26 tiene más sentido si Santiago nunca ha escuchado de Pablo.

''Otros factores apoyan una fecha más tarde,'' alrededor de los años 60.

*Está dirigida a los de la dispersión (1.1), así que tenemos que dejar tiempo para la extensión del evangelio antes de esta carta.
*La carta no se preocupa en establecer las doctrinas básicas de la fe Cristiana.
*Hay pistas de pereza espiritual y cristianismo nominal entre los lectores de la carta, sugiriendo que ha pasado suficiente tiempo para que estas cosas se desarrollaran.
*La controversia sobre fe, obras y justificación sugiere que Pablo ha escrito Gálatas y que Jacobo está respondiendo o a Pablo o a personas que lo han malinterpretado.
*Hubo pobreza en Palestina en los años 60, y Pablo colectó ofrendas para ayudar a los cristianos pobres en Palestina.

Jacobo fue ejecutado en 62, limitando la fecha de esta carta a ese año.

!! Lugar de redacción

Si Santiago el hermano del Señor fue el autor, el libro probablemente fue escrito desde Jerusalén, donde era líder. Apoyo: Pistas del clima y agricultura de Palestina:

*El viento cálido en 1.11
*Lluvias tempranas y tardías (5.7)
*Higueras, olivos y uvas (3.12)

[Otro candidato para el lugar de redacción es Roma. Apoyo: El excelente griego, y el estilo helénico, similitudes con 1 Pedro]

,,Fuente: Sílabo de Dr. Dean Deppe, James. Calvin Theological Seminary, 2004.,,
''Fecha''

Si aceptamos a Pedro como autor, esta carta tuvo que haber sido escrita antes de la muerte de Pedro, que según la tradición ocurrió en la persecución bajo Nerón en 64 d.c. En esta carta Pedro todavía tiene una buena actitud acerca del gobierno, indicando que la carta probablemente fue escrita antes de que comenzó la persecución de Nerón.

<hr>

''Lugar''

La carta fue escrita desde “Babilonia” según 5.13. Pero, ¿Cómo debemos interpretar la palabra “Babilonia”? 

Algunos han propuesto la ciudad de Babilonia de Mesopotamia, la misma Babilonia del Antiguo Testamento. Pero esta ciudad estaba casi desierto en el tiempo de Pedro. Además, no hay mención en la tradición de una iglesia cristiana en Babilonia, y Pedro siempre ha sido asociado con Roma.

Había un puesto militar romano llamado Babilonia en Egipto, pero si Pedro quisiera referirse a este puesto tan desconocido, seguramente lo habría identificado más específicamente para no confundirlo con la Babilonia de Mesopotamia, que era más conocida.

La mayoría lo toman como un código para hablar de Roma, como se hace en el libro de Apocalipsis, y como se hacía en muchos escritos cristianos y judíos de la época. Roma es como Babilonia porque ambas fueron ciudades ricas, idolatras, inmorales y poderosas. La tradición pone Pedro en Roma para su martirio, y esto apoya a Roma como lugar de redacción.
Según la tradición, Pedro murió en la persecución de Nerón, alrededor de 64 d.c. Esta carta tendría que haber sido escrita antes de su muerte. (Los que dicen que 2 Pedro es seudónimo ponen una fecha a mediados del segundo siglo. El Apocalipsis de Pedro usa esta carta, así que no podría haber sido escrito después de 150 d.c.)

Un candidato para el lugar de redacción sería Roma. Según la tradición, Pedro murió en Roma. Además, 1 Pedro 5.13 habla de Babilonia, un nombre que podría ser un código para Roma.

Acerca del supuesto catolicismo naciente: Hay ''tres criterios'' que se han usado para determinar que un documento manifiesta un “catolicismo naciente”:

<span class="doublelist">

#''Una disminución de esperanza en la Parusia.'' Se nota que los oponentes de Pedro se burlan de la doctrina de la inminencia de la segunda venida (3.4), y el autor tiene que defender la doctrina (3.9). Puede ser que los destinatarios habían bajado su esperanza. Pero es más que evidente que el autor espera la segunda venida y el juicio final (1.19, 2.12, cap. 3). El autor no pospone la Parousia al futuro. <br><br>Además, sus oponentes caben mejor en el primer siglo que en el segundo. Son escépticos y libertinos que oponen a la escatología para justificar su estilo de vida. No son gnósticos que apelan a revelaciones personales y tienen que ser silenciados por la doctrina ortodoxa.
#''Un aumento en la institucionalización de la iglesia.'' En cuanto a este criterio, no hay evidencia ni a favor ni en contra. 2 Pedro no habla de la estructura o las oficinas de la iglesia.
#''La cristalización de la fe en una forma definida de doctrina.'' Es cierto que 2 Pedro habla de la fe cristiana como “el mandamiento”, “el conocimiento”, y “la verdad que poseen”, términos que enfatizan el contenido doctrinal del evangelio. Pero la mención de estos términos no requiere una fecha en el segundo siglo para explicarse. Además, 2 Pedro no usa fórmulas de credos, y también usa un término ético para hablar de la doctrina: es un “camino”, o sea un estilo de vida. 

</span>

Así que podemos concluir que la idea de un catolicismo naciente no tiene nada que ver con esta carta.
La palabra 'gloria / glorificar' (δόξα, δοξάζω) aparece 16 veces en 1 Pedro.

|bluealtrows|k
|1.7|". . . por las pruebas demostrará que es digna de aprobación, gloria y honor cuando Jesucristo se revele." (NVI)|
|1.8|". . . se alegran con un gozo indescriptible y glorioso . . ." (NVI)|
|1.11|". . . la gloria que vendría después de éstos." (NVI)|
|1.21|". . . Dios, que lo resucitó y glorificó . . ." (NVI)|
|1.24|". . . toda su gloria como la flor del campo;" (NVI)|
|2.12|". . . ellos observen las buenas obras de ustedes y glorifiquen a Dios . . ." (NVI)|
|4.11 (2x)|". . . para que en todo sea Dios glorificado por Jesucristo . . ." (~RV60)<br>"a quien sea la gloria y el poder por los siglos de los siglos. Amén." (NVI)|
|4.13|". . . para que también sea inmensa su alegría cuando se revele la gloria de Cristo." (NVI)|
|4.14 (2x)|". . . él es blasfemado, pero por vosotros es glorificado . . ." (NVI)<br>". . . el glorioso Espíritu de Dios reposa sobre ustedes." (NVI)|
|4.16|". . . no se avergüence, sino glorifique a Dios por ello." (~RV60)|
|5.1|". . . soy también participante de la gloria que será revelada . . ." (NVI)|
|5.4|". . . ustedes recibirán la inmarcesible corona de gloria." (NVI)|
|5.10|"el Dios . . . que los llamó a su gloria eterna en Cristo . . ." (NVI)|
|5.11|"A él sea la gloria y el imperio por los siglos de los siglos. Amén." (~RV60)|

@@.source Fuente: Geisler@@
<table class="altgray">
<tr><td>

La palabra 'gracia' aparece siete veces en Hebreos:

*//Así, por ''la gracia'' de Dios, la muerte que él sufrió resulta en beneficio de todos//. (2.9)
*//Así que acerquémonos confiadamente al trono de ''la gracia'' para recibir misericordia y hallar ''la gracia'' que nos ayude en el momento que más la necesitemos//. (4.16, dos veces)
*//¿Cuánto mayor castigo piensan ustedes que merece el que ha pisoteado al Hijo de Dios, que ha profanado la sangre del pacto por la cual había sido santificado, y que ha insultado al Espíritu de ''la gracia''?// (10.29)
*//Asegúrense de que nadie deje de alcanzar'' la gracia'' de Dios;// (12.15)
*//Conviene que el corazón sea fortalecido por ''la gracia'', y no por alimentos rituales que de nada aprovechan a quienes los comen//. (13.9)
*//Que ''la gracia'' sea con todos ustedes.// (13.25)

<span class="source">Donald Hagner, //Encountering the Book of Hebrews//, 78. La Santa Biblia, Nueva Versión Internacional® NVI®
Copyright © 1986, 1999, 2015 by Biblica, Inc. </span>

</td></tr>
</table>
    //Fuente: Wilson, 55//

<hr>

La hipérbole es otra palabra para la exageración.

* Hacer cosas "día y noche" (4.8, 7.15)
* Una gran multitud que "nadie podía contar" (7.9)
* 200,000,000 soldados en 9.16, una cantidad inconcebible en el primer siglo, podría ser una exageración
* La sangre llegó "hasta los frenos de los caballos" (14.20)
* Los pecados se amontonaron "hasta el cielo" (18.5)
* Humo que sube "por los siglos de los siglos" (19.3)
La frase ‘hacer el bien’ (ἀγαθοποιέω) aparece cuatro veces en 1 Pedro:

|bluealtrows|k
|2.15|“. . . ellos observen las buenas obras de ustedes y glorifiquen a Dios . . .” (NVI)|
|2.20|“. . . si sufren por hacer el bien, eso merece elogio delante de Dios.” (NVI)|
|3.6|“Ustedes son hijas de ella si hacen el bien . . .” (NVI)|
|3.17|“. . . es preferible sufrir por hacer el bien que por hacer el mal.” (NVI)|

@@.source Fuente: Estudio personal del autor@@
<span class="doublelist">

*Está “en él” o “en Dios” (2.4, 5, 6, 15, 27, 28; 3.6, 24; 4.13, 15, 16; 5.20)
*Tiene “comunión” con Dios (1.3, 1.6, 1.7), y lo conoce (4.8). Conoce al Padre, el que es desde el principio (2.13). Conoce al que es verdadero (¿Dios? ¿Jesús?) (5.20).
*Son hijos de Dios, “nacidos” de Dios (2.29, 3.1, 3.2, 3.9, 4.7, 5.1, 5.2, 5.4, 5.18, 5.19). Son “de” Dios (4.4). Como hijos de Dios, son hermanos (varios)
*Han pasado de la muerte a la vida (3.14). Tienen vida eterna (5.13), porque tienen al Hijo (5.12)
*Dios les dio su Espíritu (4.13)
*Tienen una unción del Santo (2.20). Esta unción de “él” permanece en ellos (2.26).
*La semilla de Dios permanece en ellos (3.9).
*Sus pecados han sido perdonados debido al nombre de él (2.12)
*Son justos porque hacen justicia (3.7).
*Conocen la verdad (2.20, 2.21). Pertenecen a la verdad (3.19). No necesitan que otro los enseñe (2.26). Tienen conocimiento de Jesús (5.20).
*Son protegidos por Jesús y el maligno no los puede lastimar (5.18).
*Han vencido al maligno (2.13, 2.14), a los espíritus malignos (4.4), y al mundo (5.4, 5.5)
*No siguen pecando (3.6, 3.9, 5.18)
*Van a la presencia de Dios (3.19). Pueden acercarse a Dios con confianza y pedir según su voluntad, sabiendo que tendrán lo que piden (3.22, 5.14, 5.15)
*Sus corazones necesitan ser tranquilizados, porque los condenan. Si sus corazones no les condenan, ellos tienen confianza ante Dios (3.19, 3.20, 3.21). No tienen temor. El temor tiene que ver con el castigo. El que teme no ha sido perfeccionado por Dios (4.18).
*Tienen esperanza (3.3)
*Si aseguran que el mensaje que escucharon permanece en ellos, ellos permanecerán en el Padre y el Hijo (2.24)
*Si permanecen en él, pueden estar confiados ante Jesús en su venida (2.28)
*Dios vive en ellos y ellos en Dios (4.4, 4.12, 4.13, 4.15, 4.16), si obedecen sus mandamientos (3.24).

</span>
|bluealtrows|k
|Judas 1|Sus integrantes son los “llamados”|
|Judas 3|Los integrantes también son los “santos”|
|Judas 12|La iglesia celebra “ágapes” (fiestas donde se celebra el amor de Dios), comiendo juntos|
|Judas 20|La iglesia tiene una fe santísima|
|Judas 20|Ora en el Espíritu|
|Judas 22-23|Debe extender el cuidado pastoral a sus miembros|

Considerando las alusiones al AT en Judas, se nota también que el autor implica que la iglesia tiene una continuidad con el pueblo de Israel del AT.
El libro de Santiago afirma las siguientes cosas acerca de la iglesia:

<span class="doublelist">

*Los miembros de la iglesia son "hermanos" espirituales
*Los Cristianos son escogidos, herederos del reino (2.5)
*Tiene líderes llamados maestros (3.1) y ancianos (5.14)
*Se reunían todavía en sinagogas judías (2.2)
*La pureza de la iglesia es importante (1.27, 4.4)

</span>
1 Pedro nos llama a que sigamos en las pisadas de Jesús. Este tema de seguir a Jesús fue importante en la vida de Pedro, según el Evangelio de Juan (13.36, 21.19, 21.22). No nos sorprende, entonces, que el mismo tema aparece en sus escritos. Lo que sigue es una lista de textos donde Pedro habla de las similitudes entre Cristo y nosotros sus seguidores.

<span class="doublelist">

#2.21-23 es el texto principal en 1 Pedro acerca de seguir el ejemplo de Jesucristo. Pedro habla con los esclavos y les exhorta a que soporten sin represalias al sufrimiento que reciben de parte de sus amos crueles. Cristo sufrió por ellos, dándoles ejemplo de alguien que aceptó el maltrato sin maldecir a los que lo maldijeron. 3.9 sigue con el mismo tema, exhortándonos a que bendigamos a los que nos maldigan. Y 4.1 continúa el tema, diciendo que debemos armarnos de la misma actitud que Cristo tuvo, el de aceptar los padecimientos y dejar atrás la vida carnal.<br><br>''Ojo:'' Hay un elemento más en esta comparación que sería fácil pasar por alto: cuando Cristo sufrió, era para salvarnos. Y la implicación es que nuestro sufrimiento como Cristianos se realiza con la intencion de salvar a otros también. Pedro dice que nuestro amor "cubre una multitud de pecados" (4.8). Y justo después de que Pedro dice en 2.24-25 que Cristo llevó nuestros pecados y rescató a las ovejas descarriadas, en 3.1 dice que "asimismo" las mujeres deben sujetarse a sus esposos inconversos con el motivo de "ganar" a sus esposos por su conducta.
#Sufrimos y morimos con Cristo, pero también resucitamos con él y él nos lleva a la vida eterna con Dios. Hay dos textos, ambos difíciles, que hacen otra comparación complicada entre Cristo y sus seguidores: Pedro dice en 3.18 que Cristo murió a la carne y fue vivificado por el Espíritu. Y en 4.6 Pedro dice que los creyentes que fueron perseguidos fueron "juzgados" y rechazados por la humanidad por criterios carnales, pero Dios, por su Espíritu, los juzga por otro criterio y los considera vivos. <br><br>La comparación es esta: tanto Cristo como nosotros decimos "Adios" al mundo "de la carne", el mundo bajo los efectos del pecado, el mundo que va an contra de Dios. Tanto Cristo como nosotros creyentes somos "muertos" a ese mundo, y el mundo nos rechaza, pero tenemos vida en otro plano. Ante los ojos de Dios, tenemos una vida indestructible y eterna. Por el Espíritu de Dios hemos pasado al dominio del Espíritu, al reino de Dios.
#3.18 dice que Cristo murió para "llevarnos a Dios." Era necesario porque éramos como ovejas descarriadas que necesitaban regresar a su Pastor (2.25). La idea es similar a lo que encontramos en Hebreos 2.10, 6.20 y 12.2. Jesús es un pionero, alguien que abre un camino para que otros sigan detrás de él. Es nuestro guía, llevándo a los que lo siguen para que lleguen a Dios. Dios nos llamó a su gloria eterna, y llegamos "en Cristo Jesús" (5.10). 
#En 1.20 Pedro dice que Cristo fue escogido antes de la creación del mundo. Y en 1.2 Pedro dice que sus lectores fueron escogidos según la previsión de Dios.
#En 2.4 Cristo es la piedra viva, rechazada por la humanidad pero escogida por Dios y preciosa para él. En el siguiente versículo los lectores de 1 Pedro también son (y somos) piedras vivas. Él es la piedra cabeza del ángulo, la piedra más importante en la fundación de la casa, y nosotros somos las piedras para construir el resto del templo dedicado a Dios. El resto de la carta dice que los lectores también fueron rechazados por la humanidad (igual que Cristo), y son escogidos y preciosos en los ojos de Dios (igual que Cristo).
#En 2.25 y 5.4 Cristo es un Pastor de nuestras almas, el Príncipe de los pastores (NVI "el Pastor supremo"). En 5.2 Pedro exhorta a los ancianos de la iglesia que deben ser pastores del rebaño también.

</span>
Algunos eruditos dudan que Hebreos 13 fue una parte original de la carta, por las siguientes razones:

<span class="doublelist">

*El capítulo comienza con un cambio agudo en tono y tema
*La forma del capítulo es paranesis (exhortaciones cortas), una forma que no se encuentra en el resto del libro
*En otros lugares el autor es cuidadoso en enlazar nuevas secciones a las secciones anteriores (véase Técnicas de Transición, arriba), pero no lo hace aquí.

Sin embargo, hay mucha evidencia que este capítulo fue escrito por el mismo autor en la misma carta:

*Vocabulario característico de Hebreos
*Citas al Pentateuco y los Salmos
*Elementos de estructura que comparte con caps. 1-12
*Aspectos literarios que usa el autor en caps. 1-12 como quiasmo (13.2, 4, 10, 14, 10-16), paronomasía (13.2, 18, 20, 22), orden atípico de palabras para llamar la atención (13.8, 11, 20), estilo elegante (13.17), ritmo lingüístico (13.3), asonancia (13.4, 5, 9, 13, 14, 16), arreglo aliterativo de líneas (13.5, 19), el uso de sintaxis para énfasis (13.3, 4, 5, 9, 11, 15, 18, 20), el uso de modismos clásicos (13.2, 5, 15, 17).

</span>

@@.source Fuente: Lane@@
Santiago enfatiza la integridad contrastada con el doble ánimo o inconsistencia. 

|bluealtrows|k
|1.6-8|...el que duda es semejante a la onda del mar, que es arrastrada por el viento y echada de una parte a otra. No piense, pues, quien tal haga, que recibirá cosa alguna del Señor,&nbsp;ya que es persona ''de doble ánimo e inconstante'' en todos sus caminos.|
|3.8-12|pero ningún hombre puede domar la lengua, que es un mal que no puede ser refrenado, llena de veneno mortal. Con ella bendecimos al Dios y Padre y con ella maldecimos a los hombres, que están hechos a la semejanza de Dios. ''De una misma boca proceden bendición y maldición.'' Hermanos míos, esto no debe ser así. ¿Acaso alguna fuente echa por una misma abertura agua dulce y amarga? Hermanos míos, ¿puede acaso la higuera producir aceitunas, o la vid higos? Del mismo modo, ninguna fuente puede dar agua salada y dulce.|
|3.17|Pero la sabiduría que es de lo alto es primeramente pura, después pacífica, amable, benigna, llena de misericordia y de buenos frutos, sin incertidumbre ni ''hipocresía''.|
|4.8|Pecadores, limpiad las manos; y vosotros los de ''doble ánimo'', purificad vuestros corazones.|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
Los elementos de Apocalipsis 20.1-6 según Amilenialismo:

<span class="doublelist">

#''La atadura de Satanás'' fue logrado en el ministerio y la muerte de Jesucristo en el primer siglo. Ahora Satanás no puede engañar a las naciones, y la iglesia cumple su Gran Comisión.
#''La primera resurrección'' se refiere o a su regeneración en esta vida o a su llegada al estado intermediario. Ellos “vivieron” (se vivificaron) y reinan con Cristo por “mil años.” 
#''El número “mil años”'' es considerado como un número simbólico que cubre todo el tiempo desde de resurrección de Cristo hasta la segunda venida.
#''La segunda resurrección'' ha sido entendido en diferentes maneras:
##La resurrección general de los muertos. (Según esta interpretación, la primera resurrección es espiritual, y la segunda es física)
##Hoekema interpreta v. 5 así, que los inconversos no experimentaron la vida de la primera resurrección durante este tiempo (y nunca lo harán).
##Venema y Shepherd interpretan la segunda resurrección como la resurrección de la creación.
#''La relación entre las dos muertes y las dos resurrecciones'' es así (imagen en línea):

<img src="http://www.giffmex.org/wiki/images/nt3/ap20rezmuertearrows.GIF">

</span>
Hay varias palabras que encontramos por primera vez en la literatura griega aquí en Santiago. Esto nos da la impresión que Jacobo inventó varias palabras griegas traducidas abajo:

<span class="doublelist">

*Doble-ánimo (1.8, 4.8)
*Compasivo, 5.11
*Diabólico, 3.15
*Anillos de oro, 2.2
*Religioso, 1.26

</span>

@@.source Fuente: Notas del Dr. Dean Deppe, Calvin Theological Seminary.@@
    //Fuente: Schreiner, Teología del Nuevo Testamento, 165//

<hr>

    y decían a los montes y a las peñas: «Caed sobre nosotros y escondednos del rostro de aquel que está sentado sobre el trono, y de la ira del Cordero, porque el gran día de su ira ha llegado y ¿quién podrá sostenerse en pie?». (6.16-17)

<hr>

    Las naciones se airaron y tu ira ha venido... (11.18)

<hr>

    él también beberá del vino de la ira de Dios, que ha sido vaciado puro en el cáliz de su ira; (14.10)

<hr>

    El ángel metió su hoz en la tierra, vendimió la viña de la tierra y echó las uvas en el gran lagar de la ira de Dios. (14.19)

<hr>

    Vi en el cielo otra señal grande y admirable: siete ángeles con las siete plagas postreras, porque en ellas se consumaba la ira de Dios. (15.1)

<hr>

    Uno de los cuatro seres vivientes dio a los siete ángeles siete copas de oro llenas de la ira de Dios, quien vive por los siglos de los siglos. (15.7)

<hr>

    Entonces oí desde el templo una gran voz que decía a los siete ángeles: «Id y derramad sobre la tierra las siete copas de la ira de Dios». (16.1)

<hr>

    La gran Babilonia vino en memoria delante de Dios, para darle el cáliz del vino del ardor de su ira. (16.19)

<hr>

    Él pisa el lagar del vino del furor y de la ira del Dios Todopoderoso. (19.15)
|bluealtrows|k
|!1.9|Si confesamos nuestros pecados, él es fiel y justo para perdonar nuestros pecados y limpiarnos de toda maldad.|
|!2.1|Hijitos míos, estas cosas os escribo para que no pequéis. Pero si alguno ha pecado, abogado tenemos para con el Padre, a Jesucristo, el justo.|
|!2.29|Si sabéis que él es justo, sabed también que todo el que hace justicia es nacido de él.|
|!3.7|Hijitos, nadie os engañe; el que hace justicia es justo, como él es justo.|
|!3.10|En esto se manifiestan los hijos de Dios y los hijos del diablo: todo aquel que no hace justicia y que no ama a su hermano, no es de Dios.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<span class="doublelist">

*La palabra 'ley' se menciona en 1.25, 4.11-12; Diez veces en 2.8-13.
*Según Santiago, el amor es la esencia de la ley
*Frases descriptivas que Santiago usa: “La ley real”, “la ley perfecta”, “la ley de libertad”
*Varios de los énfasis de Santiago aparecen en Levítico 19: el mandamiento de amor (2.8, Lv. 19.18), juramientos (5.12, Lv. 19.12), la retención injusta de sueldos (5.5, Lv. 19.13), la parcialidad (2.1-7, Lv. 19.15), la calumnia (4.11-12, Lv. 19.16) (Moo, 31)
*Cuando Santiago dice que la ley habita dentro del creyente, posiblemente alude a Jer. 31.31-34.

</span>

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
<table class="altgray"><tr><td>

    'Apocalipsis' es un término literario inventado por el académico alemán K. I. Nitzsch en 1822. Se refiere a las obras escritas por Judíos y Cristianos entre 200 a.c. y 100 d.c. que comparten ciertas características. Lo que sigue es una lista de estas características.

</td></tr><tr><td>

        Los apocalipsis generalmente son seudónimos - es decir, escritos como si fuera por una figura antigua como Enoc o Abraham.

</td></tr><tr><td>

        Los apocalipsis fueron escritos desde un contexto de opresión, persecución y desesperación. Muchos eruditos usan la frase 'literatura de resistencia' para describirlos.

</td></tr><tr><td>

        Un intermediario celestial aparece en los apocalipsis para interpretar visiones o revelar conocimiento oculto.

</td></tr><tr><td>

        Los apocalipsis contienen un dualismo agudo, un contraste entre lo que se llama el 'siglo presente', dominado por el mal, y un 'siglo venidero' que traerá el cambio deseado.

</td></tr><tr><td>

        Los apocalipsis suelen ser pesimistas en cuanto a la posibilidad de cambios positivos durante el presente siglo. Lo que se necesita, según los apocalipsis, es una intervención radical de parte de Dios para derribar a los enemigos de Dios y poner las cosas en orden.

</td></tr><tr><td>

        Los apocalipsis suelen estar llenos de simbolismo.

</td></tr><tr><td>

        Los apocalipsis tienen ser deterministas, describiendo un futuro inesacapable, escrito en piedra por un calendario fijo por Dios.

</td></tr><tr><td>

        En los apocalipsis, los eventos contemporáneos al autor se describen como si fueron profetizados en el pasado lejano. Lo que sucede en el tiempo del autor es el cumplimiento de profecías que fueron revelados hace siglos.

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Elwell y Yarbrough, Al Encuentro del Nuevo Testamento. (Grand Rapids: Baker), 395, Grant R. Osborne, “Recent Trends in the Study of the Apocalypse”, en The Face of New Testament Studies. (Grand Rapids: Baker Academic, 2004), 476</span>
<span class="doublelist">

*Apocalipsis es el libro del Nuevo Testamento donde el tema de la liturgia o el culto a Dios es ''más prominente''.

*El tema del culto provee ''el conflicto principal ''del libro de Apocalipsis, el contraste entre los que adoran a Dios y los que adoran a la bestia. Dios no tolera la falsa adoración, así que la narrativa gira aldrededor del tema e incluye escenas de adoración verdadera, "Cada etapa de la victoria de Dios - a través de capítulos 7-19 - es acompañada por la adoración en el cielo." - Bauckham

*Thompson menciona ''varias amenazas al culto auténtico'' encontradas en Apocalipsis: el culto al emperador (cap. 13), la sinagoga de Satanás (2.9, 3.9), el trono de Satanás (2.13), la idolatría (9.20), la comida sacrificada a los ídolos (2.14), intentos de adorar a los ángeles (19.10, 22.8-9), y una profetiza falsa dentro de o por lo menos influenciando a las iglesias (2.20). La iglesia tiene que mantener puro su culto aunque esté rodeada de alternativas religiosas.

*El culto ''se describe a veces en términos políticos e imperiales''. Capítulo cuatro no imita cultos judíos, paganos o cristianos, sino imita el culto rendido al emperador romano. La palabra de más uso para el culto en Apocalipsis es 'postrarse' - un acto de sumisón a la soberanía real de Dios. Las coronas se echan delante del trono de Dios, de la misma manera en que hacían los senadores y delegados de otras comunidades delante de César para reconocer su autoridad sobre ellos. Hasta el acto de cantar alrededor del trono de Dios es una parodia política: los emperadores mantenían cortesanos, "notorios en mantener un coro perpétuo de alabanza, dándole loores día y noche..." (Gloer). También hay referencias a Dios como el Todopoderoso, y llamados a rendirle poder y autoridad a él.

*Gloer escribe que la aclamación que Dios es ''digno'' no se encuentra ni en el Antiguo Testamento ni en el Judaísmo. Nahkro dice que la palabra fue usada acerca de las personas en posiciones de alta autoridad política, y de algunos militares importantes (p. ej. los guardaespaldas del emperador y los comandantes de los ejércitos. La palabra originalmente significaba "de igual peso" pero llegó a significar "digno", "merecedor", "apto", "estimable" y "apropiado."

*''El culto se rinde a Dios Padre y también a Jesucristo''. Esto hubiera sido escandaloso para los Judíos del primer siglo, porque eran monoteístas firmes. Pero los primeros Cristianos, también monoteístas firmes, encontraron lugar dentro de su monoteísmo para el culto a Jesús.

*''Motivos del culto a Dios'' en Apocalipsis: es digno, es eterno, es soberano, es santo, es el Creador, es el Redentor, es Juez, su plan se está llevando a cabo. Todos estos temas se conectan a las circunstancias y los propósitos del libro:

**Decir que solo Dios es digno de alabanza es una declaración que implica que el emperador y los ídolos paganos no eran dignos.
**Decir que Dios es eterno y soberano es una consolación a Cristianos perseguidos. Viendo su situación inmediata de sufrimiento, ellos serían tentados a perder la vista de los planes de Dios a largo plazo, y su poder para llevarlo a cabo.
**Decir que Dios es santo traería a la mente de muchos Cristianos los abundantes versículos del Antiguo Testamento acerca de la santidad de Dios y su intolerancia de la idolatría e inmoralidad que asechaban a los Cristianos del primer siglo.
**Decir que Dios es el Creador enfatiza la obediencia que Dios requiere de toda criatura. También nos recuerda que la humanidad es solamente una parte pequeña de un panorama mucho más grande. En Apocalipsis vemos las fuerzas de la creación reaccionando al pecado y rescatando al pueblo de Dios, y vemos la redención de la tierra misma. El Creador restaurará la creación que "el dragón, la serpiente antigua" corrompió cuando llevó a la humanidad por mal camino.
**Decir que el Cordero que fue inmolado es el Redentor traería a la mente el éxodo, donde Israel fue redimida el día después de que fue matado el cordero de la Pascua. La nación de Egipto - poderoso e idólatra, con un rey que alegaba ser Dios - fue derrotada, y Dios llamó su pueblo de ella. Juan y sus lectores enfrentaban una situación similar.
**Decir que Dios es Juez es un consuelo a Cristianos perseguidos, porque implica que si ellos permanecieran fieles, Dios los recompensará, y Dios también juzgará a los adversarios que los tientan y los persiguen.

*Hay ''numerosos elementos litúrgicos'' en Apocalipsis: la palabra amén, canciones antifonales, doxologías, ofrendas (coronas puestas delante del trono), himnos, incienso, la palabra maranata, ramos de palmera, oraciones, postración, vestidos, comidas sagradas, gritos de celebración, silencio, acción de gracias, trompetas, y cantos de victoria.

*Thompson menciona ''un sentido de misterio y distancia'' que hay en un culto. En Apocalipsis no vemos una descripción de Dios mismo, solo de lo que sucede alrededor de su trono. Este sentido de misterio y distancia contrarresta las tendencias humanas de querer entender todo acerca de Dios y de tener demasiada confianza delante de él.

*Apocalipsis conecta el tema de culto con los temas de ''temor'' (11.18, 14.7, 15.4) y de ''servicio ''(7.15, 22.3).

*Richard Bauckham dice que la meta de la adoración en Apocalipsis es “como en el cielo, así también en la tierra.” Antes de capítulo 19, toda la adoración y todas las canciones ocurren en el cielo, no en la terra. No hay culto en la tierra, y las únicas canciones en la tierra son los lamentos para Babilonia en capítulos 17 y 18. Pero cuando se gana la última victoria, por fin hay alabanza tanto en la tierra como en el cielo. Además, al final del libro vemos que el cielo desciende a la tierra, y los dos llegan a ser uno. La adoración de Dios que vemos en el cielo en capítulo 4 llega a la tierra para siempre.

<span class="source">Fuentes: Richard Bauckham, The Theology of the Book of Revelation. (Cambridge: Cambridge University Press, 1993); W. Hulitt Gloer, “Worship God! liturgical elements in the Apocalypse.” in Review and Expositor 98 no 1 Wint 2001, p 35-57; Mazie Nahkro, “The manner of worship according to the book of Revelation.” in Bibliotheca sacra 158 no 630 Ap-Je 2001, p 165-180; Mazie Nahkro, “The meaning of worship according to the book of Revelation.” in Bibliotheca sacra 158 no 629 Ja-Mr 2001, p 75-85; Marianne Meye Thompson, “Worship in the Book of Revelation.” in Ex Auditu 8 1992, 45-54;</span>

</span>
2 Pedro enfatiza la memoria. Escribe para recordar a sus lectores (1.12-15, 3-1-2, 3.8). En contraste, los injustos son olvidadizos (1.9, 3.5).
|bluealtrows|k
|!3.24|El que guarda sus mandamientos permanece en Dios, y Dios en él. Y en esto sabemos que él permanece en nosotros, por el Espíritu que nos ha dado.|
|!4.4|Hijitos, vosotros sois de Dios y los habéis vencido, porque mayor es el que está en vosotros que el que está en el mundo.|
|!4.12-13|Nadie ha visto jamás a Dios. Si nos amamos unos a otros, Dios permanece en nosotros y su amor se ha perfeccionado en nosotros. En esto conocemos que permanecemos en él y él en nosotros, en que nos ha dado de su Espíritu.|
|!4.15-16|Todo aquel que confiese que Jesús es el Hijo de Dios, Dios permanece en él y él en Dios. 16 Y nosotros hemos conocido y creído el amor que Dios tiene para con nosotros. Dios es amor, y el que permanece en amor permanece en Dios y Dios en él.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
Judas anima a sus destinatarios con varias doctrinas:

<span class="doublelist">

* La fe (la doctrina cristiana) que ellos comparten es preciosa (3, 20)
* Las profecías de Enoc (14-15) y los apóstoles de Jesucristo (17-18) se están cumpliendo.
* En la segunda venida de Cristo, los hombres impíos serán juzgados (4-7, 13), y los destinatarios recibirán la vida eterna (21).
* Por mientras, Cristo es poderoso para proteger a su pueblo para que no se caiga, y ellos deben permanecer dentro de su protección (1, 20-21, 24).
* El tema de la misericordia: Dios es misericordioso con ellos, y ellos deben ser misericordiosos también (1, 2, 4, 12, 21, 23).

</span>
|bluealtrows|k
|!1.7|Pero si andamos en luz, como él está en luz, tenemos comunión unos con otros y la sangre de Jesucristo, su Hijo, nos limpia de todo pecado.|
|!2.2|Él es la propiciación por nuestros pecados, y no solamente por los nuestros, sino también por los de todo el mundo. |
|!3.16|En esto hemos conocido el amor, en que él puso su vida por nosotros; también nosotros debemos poner nuestras vidas por los hermanos.|
|!4.10|En esto consiste el amor: no en que nosotros hayamos amado a Dios, sino en que él nos amó a nosotros y envió a su Hijo en propiciación por nuestros pecados.|


<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|!3.14|Nosotros sabemos que hemos pasado de muerte a vida, porque amamos a los hermanos. El que no ama a su hermano permanece en muerte.|
|!5.16-17|Si alguno ve a su hermano cometer pecado que no sea de muerte, pedirá, y Dios le dará vida; esto es para los que cometen pecado que no sea de muerte. Hay pecado de muerte, por el cual yo no digo que se pida. 17 Toda injusticia es pecado, pero hay pecado no de muerte.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|!2.3|En esto sabemos que nosotros lo conocemos, si guardamos sus mandamientos.|
|!2.5| Pero el que guarda su palabra, en ese verdaderamente el amor de Dios se ha perfeccionado; por esto sabemos que estamos en él.|
|!3.21-22|Amados, si nuestro corazón no nos reprende, confianza tenemos en Dios; y cualquiera cosa que pidamos la recibiremos de él, porque guardamos sus mandamientos y hacemos las cosas que son agradables delante de él.|
|!3.24|El que guarda sus mandamientos permanece en Dios, y Dios en él.|
|!5.2-3|En esto conocemos que amamos a los hijos de Dios, cuando amamos a Dios y guardamos sus mandamientos, pues este es el amor a Dios: que guardemos sus mandamientos; y sus mandamientos no son gravosos...|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
El libro de Judas no ha recibido mucha atención por la erudición moderna. Ha sido un libro neglegido. Algunos han tenido una opinión negativa acerca del autor. Han dicho que es un conservador dogmático apegado a la tradición, que se opone sin tolerancia a los que difieren de él.
|bluealtrows|k
|!3.21-22|Amados, si nuestro corazón no nos reprende, confianza tenemos en Dios; y cualquiera cosa que pidamos la recibiremos de él, porque guardamos sus mandamientos y hacemos las cosas que son agradables delante de él.|
|!5.14-16|Esta es la confianza que tenemos en él, que si pedimos alguna cosa conforme a su voluntad, él nos oye. Y si sabemos que él nos oye en cualquiera cosa que pidamos, sabemos que tenemos las peticiones que le hayamos hecho. Si alguno ve a su hermano cometer pecado que no sea de muerte, pedirá, y Dios le dará vida; esto es para los que cometen pecado que no sea de muerte. Hay pecado de muerte, por el cual yo no digo que se pida.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|1.2|". . . mediante la obra santificadora del Espíritu . . ." (NVI)|
|1.15 (2x)|"sean ustedes santos en todo lo que hagan . . ." (NVI)<br>". . . como también es santo quien los llamó;" (NVI)|
|1.16 (2x)|". . . está escrito: «Sean santos . . ." (NVI)<br>" . . . porque yo soy santo.»" (NVI)|
|2.5|"De este modo llegan a ser un sacerdocio santo . . ." (NVI)|
|2.9|"Pero ustedes son . . . nación santa . . ." (NVI)|
|3.5|". . . las santas mujeres que esperaban en Dios . . ." (NVI)|

,,Fuente: Geisler,,
La palabra 'vivir / vida' (ζάω, ζωή) aparece nueve veces en 1 Pedro.

|bluealtrows|k
|1.3|". . . para que tengamos una esperanza viva . . ." (NVI)|
|1.23|". . . mediante la palabra de Dios que vive y permanece." (NVI)|
|2.4|"Cristo es la piedra viva . . ." (NVI)|
|2.5|". . . &nbsp;también ustedes son como piedras vivas . . ." (NVI)|
|2.24|". . . para que muramos al pecado y vivamos para la justicia." (NVI)|
|3.7|". . . esposos, sean comprensivos en su vida conyugal . . ." (NVI)|
|3.10|". . . el que quiera amar la vida y gozar de días felices . . ." (NVI)|
|4.5|". . . aquel que está preparado para juzgar a los vivos y a los muertos." (NVI)|
|4.6|". . . para que . . . vivan conforme a Dios . . ." (NVI)|

@@.source Fuente: Geisler@@
|bluealtrows|k
|1.4|"...por medio de estas cosas nos ha dado preciosas y grandísimas promesas, para que por ellas lleguéis a ser participantes de la naturaleza divina, habiendo huido de la corrupción que hay en el mundo a causa de las pasiones."|
|3.4|"«¿Dónde está la promesa de su advenimiento? Porque desde el día en que los padres durmieron, todas las cosas permanecen así como desde el principio de la creación»."|
|3.9|"El Señor no retarda su promesa, según algunos la tienen por tardanza, sino que es paciente para con nosotros, no queriendo que ninguno perezca, sino que todos procedan al arrepentimiento."|
|3.13|"Pero nosotros esperamos, según sus promesas, cielos nuevos y tierra nueva, en los cuales mora la justicia."|

@@.source Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|1.10|"Por lo cual, hermanos, tanto más ''procurad'' hacer firme vuestra vocación y elección, porque haciendo estas cosas, jamás caeréis."|
|1.15|"También yo ''procuraré'' con diligencia que, después de mi partida, vosotros podáis en todo momento tener memoria de estas cosas."|
|3.14|"Por eso, amados, estando en espera de estas cosas, ''procurad con diligencia'' ser hallados por él sin mancha e irreprochables, en paz."|

@@.source Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
La idea de la perfección en griego significa 'estar completo' o 'no faltar nada.'

|bluealtrows|k
|!1.4|Estas cosas os escribimos para que vuestro gozo sea completo. |
|!2.5|Pero el que guarda su palabra, en ese verdaderamente el amor de Dios se ha perfeccionado; por esto sabemos que estamos en él.|
|!4.12|Nadie ha visto jamás a Dios. Si nos amamos unos a otros, Dios permanece en nosotros y su amor se ha perfeccionado en nosotros.|
|!4.17-18| En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo. En el amor no hay temor, sino que el perfecto amor echa fuera el temor, porque el temor lleva en sí castigo. De donde el que teme, no ha sido perfeccionado en el amor.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|2.10|"Convenía a aquel por cuya causa existen todas las cosas y por quien todas las cosas subsisten que, habiendo de llevar muchos hijos a la gloria, perfeccionara por medio de las aflicciones al autor de la salvación de ellos...."|
|5.9|"...y habiendo sido perfeccionado, vino a ser autor de eterna salvación para todos los que lo obedecen...."|
|7.11|"Si, pues, la perfección fuera por el sacerdocio levítico - bajo el cual recibió el pueblo la Ley - , ¿qué necesidad habría aún de que se levantara otro sacerdote, según el orden de Melquisedec, y que no fuera llamado según el orden de Aarón?"|
|7.19|"- pues la Ley nada perfeccionó - y se introduce una mejor esperanza, por la cual nos acercamos a Dios."|
|7.28|"La Ley constituye sumos sacerdotes a hombres débiles; pero la palabra del juramento, posterior a la Ley, constituye al Hijo, hecho perfecto para siempre."|
|9.11|"Pero estando ya presente Cristo, sumo sacerdote de los bienes venideros, por el más amplio y más perfecto tabernáculo, no hecho de manos, es decir, no de esta creación...."|
|10.1|"La Ley, teniendo la sombra de los bienes venideros, no la imagen misma de las cosas, nunca puede, por los mismos sacrificios que se ofrecen continuamente cada año, hacer perfectos a los que se acercan."|
|10.14|"Y así, con una sola ofrenda hizo perfectos para siempre a los santificados."|
|11.40|"...porque Dios tenía reservado algo mejor para nosotros, para que no fueran ellos perfeccionados aparte de nosotros."|
|12.23|"...a la congregación de los primogénitos que están inscritos en los cielos. Os habéis acercado a Dios, Juez de todos, a los espíritus de los justos hechos perfectos...."|

@@.source Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
Perfección quiere decir integridad y unidad de carácter

|bluealtrows|k
|1.4|Mas tenga la paciencia su obra completa, para que seáis perfectos y cabales, sin que os falte cosa alguna.|
|1.17|Toda buena dádiva y todo don perfecto desciende de lo alto, del Padre de las luces, en el cual no hay mudanza, ni sombra de variación.|
|1.25|Mas el que mira atentamente en la perfecta ley, la de la libertad, y persevera en ella, no siendo oidor olvidadizo, sino hacedor de la obra, éste será bienaventurado en lo que hace.|
|2.22|¿No ves que la fe actuó juntamente con sus obras, y que la fe se perfeccionó por las obras?|
|3.2|Porque todos ofendemos muchas veces. Si alguno no ofende en palabra, éste es varón perfecto, capaz también de refrenar todo el cuerpo.|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
El tema más notable en 1 Pedro es, sin duda, la persecución de los creyentes por los inconversos. Pedro escribió con el propósito de consolar y alentar a los creyentes que estaban experimentando la persecución cuando escribió. (véase sobre las circunstancias y propósito).

Muchos comentaristas usan la palabra 'sufrimiento' para describir este tema, porque Pedro usa la palabra 'sufrir' o 'padecer' muchas veces. Sin embargo, Pedro no habla del sufrimiento humano en general, sino el sufrimiento específico de la persecución de los seguidores de Cristo. Un predicador distorcionaría el mensaje de esta carta si aplicara lo que Pedro dice a los sufrimientos causados por la enfermedad y otras causas.

<hr>

!!!Lo que Pedro dice acerca de la persecución

La persecución vino sobre los primeros lectores de 1 Pedro porque los inconversos no pueden entender el estilo de vida que llevan los seguidores de Cristo (4.4).

En contraste, según Pedro, los creyentes no deben devolver insulto por insulto. Deben usar sus bocas para bendecir a los que los maldicen (3.9-12). Cristo no devolvió insulto por insulto cuando sufrió, y debemos seguir su ejemplo (2.21-23). Más bien, Cristo usó  sus sufrimientos para salvar a otros (2.24-25) y debemos imitar su ejemplo con el propósito de salvar a los demás (p. ej. las esposas deben sujetarse a sus maridos inconversos para convencerlos sin palabras, 3.1-2). 4.1-2 también habla de la imitación del comportamiento de Cristo ante la persecución.

Pedro dice en 4.12-13 que la persecución no debe ser una sorpresa para el creyente. Es algo natural para una persona ligada a Jesús. Cristo sufrió (1.11, 2.21, 4.1, 5.1) y fue rechazado (2.4, 2.7-8), y nosotros experimentaremos el mismo maltrato. 4.13 hasta dice que somos 'partícipantes' en los sufrimientos de Cristo. Más bien, Dios es el que permite el sufrimiento (3.17), y Dios está usando las dificultades de ellos como una prueba, para purificar la fe de sus santos (1.7, 4.1-2).

La nota que Pedro repite varias veces es su contraste entre sufrir por Cristo y sufrir por ser criminal o malhechor (2.19-20, 3.13-14, 3.17, 4.15-6, 4.19). Parece que algunos de los primeros lectores habían sufrido, no por Cristo, sino por hacer cosas indebidas. Pedro les amonesta que si van a sufrir, debe ser porque son Cristianos. No hay ningún beneficio espiritual para ellos si sufren por ser malhechores, porque solo están recibiendo el propio castigo que corresponde a su comportamiento.

Los Cristianos deben soportar los sufrimientos por causa de Cristo, encomendarse a su Creador, y hacer el bien (4.19; véase las comendaciones en 2.19, 3.14, 3.17, 4.14, 4.16). Pedro recuerda a sus lectores que los creyentes en todo el Imperio Romano estaban experimentando las mismas pruebas por causa del diablo (5.8-9). Pero Dios es fiel y los restaurará después de que hayan sufrido (5.10). Pedro usa el tema de la escatología en 1 Pedro para consolar a sus lectores - puede ser que sufran ahora, pero pronto Cristo será revelada, ellos serán glorificados, y sus perseguidores serán juzgados por Dios.

<hr>

!!!Palabras para el sufrimiento

La palabra 'sufrir / sufrimiento / prueba' (πάσχω, πάθημα, πειρασμός) aparece 18 veces en 1 Pedro.

|bluealtrows|k
|1.6|". . . hasta ahora han tenido que sufrir diversas pruebas por un tiempo." (NVI)|
|1.11|". . . acerca de los sufrimientos de Cristo . . ." (NVI)|
|2.19|". . . aun sufriendo injustamente." (NVI)|
|2.20|". . . si sufren por hacer el bien . . ." (NVI)|
|2.21|". . . Cristo sufrió por ustedes . . ." (NVI)|
|2.23|". . . cuando padecía, no amenazaba . . ." (NVI)|
|3.14|"¡Dichosos si sufren por causa de la justicia!" (NVI)|
|3.17|". . . es preferible sufrir por hacer el bien que por hacer el mal." (NVI)|
|3.18|"Él sufrió la muerte en su cuerpo . . ." (NVI)|
|4.1 (2x)|"Cristo sufrió en el cuerpo" (NVI)<br>". . . el que ha sufrido en el cuerpo ha roto con el pecado . . ." (NVI)|
|4.12|". . . no se extrañen del fuego de la prueba que están soportando . . ." (NVI)|
|4.13|". . . alégrense de tener parte en los sufrimientos de Cristo . . ." (NVI)|
|4.15|"Que ninguno tenga que sufrir por asesino . . ." (NVI)|
|4.19|". . . los que sufren según la voluntad de Dios, entréguense a su fiel Creador . . ." (NVI)|
|5.1|". . . testigo de los sufrimientos de Cristo . . ." (NVI)|
|5.9|". . . sus hermanos en todo el mundo están soportando la misma clase de sufrimientos." (NVI)|
|5.10|"Y después de que ustedes hayan sufrido un poco de tiempo . . ." (NVI)|

@@.source Fuente: Geisler@@
En v. 12 la verdad es personificada como si estuviera hablando.
Algunas Biblias modernas tienen “La Epístola de Pablo a los Hebreos” en su título para el libro

!!!Proponentes

Clemente de Alejandria, Eusebio, Jerónimo, Agustin, Orígenes, Tomás Aquino. 

!!!En contra: 

El Canon de Muratori, Ireneo, Hipólito y otros.

!!!Apoyo

''El manuscrito griego más antiguo'' lo pone en las cartas de Pablo, después de Romanos

''Circunstancias parecidas: ''

*Pablo era amigo de Timoteo
*13.18 con Ro. 15.30 y 2 Co. 1.11, etc
*13.19 con Flm. 22, Flp. 1.24-25, etc
*13.20, 25 con Ro. 15.33, 1 Ts.5.28, etc

''Ideas parecidas:''

*''Cristología alta''
**1.2-12 con Col. 1.15-17
**1.4-14, 2.14-17 con Flp. 2.5-11
**10.12 con 1 Ti. 2.6
*''El contraste de los dos pactos ''	
**10.1 con Col. 2.16-17
**8.1-6 y 4.1-2 con 1 Co. 10.11 
**7.18 con Ro. 8.3
**8.13 con 2 Co. 3.9-11
*''Apoyo: términos parecidos''
**1.5 con Hch. 13.33
**2.4 con 1 Co. 12.4, 6, 11
**2.10 con Ro. 11.36, Col. 1.16, 1 Co. 8.6

!!!Problemas con Pablo como autor 

<span class="doublelist">

*Heb. 2 indica que el autor recibió su evangelio. En Gálatas 1.12 Pablo declara enfáticamente que él no recibió su evangelio de nadie.
*Hebreos no contiene la expresión paulina, “Cristo Jesús”
*La superioridad del griego de Hebreos y su estilo y lenguaje son distintos de los del Apóstol Pablo.
*El libro no apela a la apostolicidad de Pablo.
*Hebreos no contiene la introducción típica de las cartas de Pablo
*Pablo no habla tanto del sacerdocio de Cristo

</span>
|bluealtrows|k
|!2.29|Si sabéis que él es justo, sabed también que todo el que hace justicia es nacido de él.|
|!3.9-10|Todo aquel que es nacido de Dios no practica el pecado, porque la simiente de Dios permanece en él; y no puede pecar, porque es nacido de Dios. En esto se manifiestan los hijos de Dios y los hijos del diablo: todo aquel que no hace justicia y que no ama a su hermano, no es de Dios.|
|!4.7|Amados, amémonos unos a otros, porque el amor es de Dios. Todo aquel que ama es nacido de Dios y conoce a Dios.|
|!5.3-4|...pues este es el amor a Dios: que guardemos sus mandamientos; y sus mandamientos no son gravosos, porque todo lo que es nacido de Dios vence al mundo; y esta es la victoria que ha vencido al mundo, nuestra fe.|
|!5.18|Sabemos que todo aquel que ha nacido de Dios no practica el pecado, pues Aquel que fue engendrado por Dios lo guarda y el maligno no lo toca.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<span class="doublelist">

*Oir y hablar, 1.19
*Oir y hacer, 1.22-25
*Hablar y hacer, 1.26-27, 2.1-13
*Creer y hacer, 2.14-26
*Saber y hacer, 4.17
*Oración: 1.5-6, 1.17, 3.9-10, 4.2-3, (4.7-10) (5.1, 4) 5.13-18
*Votos, 5.12
*La lengua, 1.19, 1.26-27, 3.1-12, 4.11-12

</span>

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
Marshall (665) nota la cercana relación entre las descripciones de Dios Padre y las de Jesucristo en Judas:

|bluealtrows|k
|!Descripción|!Dios Padre|!Jesucristo|
|Guarda al creyente|Judas 24-25|Judas 1|
|Ama al creyente|Judas 1, 21 (amor)|Judas 21 (misericordia)|
|Tiene dominio y autoridad|Judas 25|Llamado despotes “dictador, Señor” en Judas 4|
|Es Salvador|Judas 25|Judas 21 (su misericordia nos lleva a la vida eterna)|
|>|>| Muchas veces cuando Judas usa la palabra Señor (kurios), es difícil decidir si se refiere a Dios o a Jesús. |
<img src='https://www.giffmex.org/wiki/images/nt3/elnombresantiago.GIF'>
Bauckham llama nuestra atención a este aspecto de 2 Pedro.

<span class="doublelist">

*2.13 “la recompensa de su injusticia” y 2.15, “el premio de la maldad.” (μισθὸς ἀδικίας)
*Véase también σπουδήν, σπουδάσατε (procurar)  1.5, 1.10, 3.14, ἀποφεύγειν, (escapar) 1.4; 2.18, 20; ἐξακολουθει̂ν, (seguir) 1:16; 2:2, 15; δελεάζειν, (seducen) 2:14, 18; ἔκπαλαι, (hace mucho tiempo) 2.3; 3.5; δωρει̂σθαι, (dar) 1.3–4; ἐπιχορηγει̂ν, (suplir) 1.5, 11; ἐπάγειν, (traer sobre) 2.1, 5; ταχινός, (rápido, rápidamente) 1.14; 2.1.

</span>
Judas usa repetición:

<span class="doublelist">

* Tres veces la cita de 1 Enoc en Judas 15 repite la palabra “impío”.
* Tres veces Judas usa las palabras μὲν ("por un lado") y δὲ ("por el otro lado") para hacer contrastes, en Judas 8, 10, y 22.
* Cinco veces Judas repite la palabra οὑ̂τοι, "estas personas", para empezar una nueva crítica de los hombres impíos (Judas 8, 10, 12, 16, 19).

</span>
|bluealtrows|k
| 2.14 |Jesús por medio de la muerte destruyó al que tenía el poder de la muerte |
| 5.7 |Dios contestó las oraciones de Jesús y lo rescató de la muerte |
| 6.2 |La resurrección de los muertos es una de las enseñanzas que el autor considera básicas |
| 7.16 |Melquisedec (y Jesús) tienen el poder de una vida indestructible |
| 11.11-12 |Abraham tiene fe en que Dios le dará un hijo aunque su cuerpo es “casi muerto” |
| 11.17-19 |Se puede decir que Abraham recibió a Isaac de los muertos |
| 11.35 |Los hijos de algunas madres resucitaron, pero otros aceptaron la muerte para esperar una resurrección mejor |
|13.20-21 |Dios resucitó a Jesús, el pastor del rebaño, de los muertos |

@@.source Fuente: N. T. Wright, ''The Resurrection of the Son of God.'' (Minneapolis: Fortress, 2003), 457-461.@@
<span class="doublelist">

*La verdad (1.12, 2.2) y las mentiras, el error (2.3, 3.17)
*El “santo mandamiento” (2.21, 3.2)
*El conocimiento de Dios y de Jesucristo (1.2, 1.3, 1.5-6, 1.8, 2.20, 2.21, 3.18)
*La profecía y su inspiración divina (1.20-21)
*La inspiración de las cartas de Pablo como Escritura (3.16)
*El “camino” recto de verdad o de justicia, en contraste con el camino de Balaam (2.1, 2.15, 2.21)

</span>
<span class="doublelist">

*La verdad del Nuevo mandamiento se ve en Dios y en los lectores (2.8).
*Es lo que han escuchado desde el principio (2.24, 3.11)
*Viene por una unción que han recibido de Dios. Esta unción enseña a los *lectores acerca de todas las cosas. Es verdadera y no mentira (2.27)
*Su contenido: que amemos unos a otros (3.11)
*El agua y la sangre testifican con el Espíritu Santo (5.7)
*El testimonio de Dios es más autoritario que el testimonio del ser humano, y su testimonio es acerca de su Hijo (5.9, 5.10).
*El testimonio de Dios está en los corazones de los creyentes porque creen (5.10)
*El contendio del testimonio de Dios es que Dios nos ha dado vida eterna por su Hijo (5.11)
*La importancia de preservar la enseñanza y la tradición recibida
**“lo que era desde el principio” (1.1)
**“el viejo mandamiento” (2.7)
*Lo que les fue declarado (1.5)
*Instancias de la palabra 'mandamiento': 2.7-8, 3.23, 4.21
*Lo que sabemos / conocemos, y como lo sabemos:
**“Sabemos”: 2.3, 2.5, 3.2, 3.14, 3.24, 5.15, 5.18, 5.19, 5.20.
**“Conocemos”: 2.3, 2.18, 3.19, 4.6, 4.13, 5.2
**Otras instancias de “saber”: 2.11, 2.29, 3.20.
**Otras instancias de “conocer”: 2.13, 2.14, 3.1, 3.6, 3.16, 4.2, 4.6, 4.7, 4.8, 4.16, 5.20.
**En 1 Juan, tanto la palabra 'saber' como la palabra 'conocer' son traducciones de la palabra “//γινώσκω//”, con la excepción de los siguientes versículos, donde el verbo es “//οἶδα//”: 2.11, 3.2, 3.14, 5.15, 5.18, 5.19, y “sabemos” en 5.20.

</span>
|bluealtrows|k
|1.5|Si alguno de vosotros tiene falta de sabiduría, pídala a Dios, el cual da a todos abundantemente y sin reproche, y le será dada.|
|3.13-17|¿Quién es sabio y entendido entre vosotros? Muestre por la buena conducta sus obras en sabia mansedumbre. Pero si tenéis celos amargos y rivalidad en vuestro corazón, no os jactéis ni mintáis contra la verdad. No es esta la sabiduría que desciende de lo alto, sino que es terrenal, animal, diabólica, pues donde hay celos y rivalidad, allí hay perturbación y toda obra perversa. Pero la sabiduría que es de lo alto es primeramente pura, después pacífica, amable, benigna, llena de misericordia y de buenos frutos, sin incertidumbre ni hipocresía.|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
<table class="altgray"><tr><td>

2 Pedro comienza hablando de la fe (1.1, 1.5), y la pone como el fundamento de la lista de virtudes en 1.5-7. También menciona el arrepentimiento en 3.9. 

</td></tr><tr><td>

La apostasía: El rechazo del conocimiento de Jesucristo pone a los incrédulos en una situación peor que su situación antes de conocerlo.

</td></tr><tr><td>

Esta salvación se expresa como justicia (1.1), gracia y paz (1.2), la purificación de los pecados (1.9), vocación y elección (1.10), la entrada al reino de Jesucristo (1.11). 

</td></tr><tr><td>

Dios da protección a los creyentes: 2.5, 7, 9. 

</td></tr></table>
<table class="altgray"><tr><td>

Dios es un Salvador (Judas 25), y Judas y sus lectores tienen una salvación en común (Judas 3). 

</td></tr><tr><td>

Son 'santos' y han sido llamados por Dios (Judas 1)

</td></tr><tr><td>

Dios les da gracia, misericordia y paz (Judas 2), pero algunos convierten su gracia en una licencia para libertinaje (Judas 4)

</td></tr><tr><td>

Cristo los cuida y guarda hasta el día de su venida cuando serán sin mancha (Judas 1, 25)

</td></tr><tr><td>

Judas no menciona el papel de la muerte y resurrección de Jesucristo en la salvación

</td></tr><tr><td>

El evangelio se menciona en Judas 3 como la fe (o sea, el cuerpo de doctrinas) que fue encomendada a los santos. Ellos tienen que fortalecerse en esta fe (Judas 20)

*Hay más énfasis en la gracia y misericordia de Dios, pero también se menciona la responsabilidad humana, la importancia de mantenerse dentro de la fe (Judas 20-21)
*Recibirán vida eterna (Judas 21) con gozo (Judas 24)
*Mientras tanto, tienen que extender a otros la misericordia que ellos mismos han recibido (compare Judas 22-23 con Judas 21)

</td></tr></table>
<span class="doublelist">

*Dios salva, 4.12
*Regeneración por la palabra (el evangelio), 1.18, 1.21
*No por la fe sola, 2.14.
*Por la oración de fe, 5.15
*Por el esfuerzo de un creyente que busca a los pecadores, 5.20

</span>
|bluealtrows|k
|!2.28|Ahora, hijitos, permaneced en él, para que cuando se manifieste, tengamos confianza, para que en su venida no nos alejemos de él avergonzados.|
|!3.2|Amados, ahora somos hijos de Dios y aún no se ha manifestado lo que hemos de ser; pero sabemos que cuando él se manifieste, seremos semejantes a él, porque lo veremos tal como él es.|
|!4.17|En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
El problema de los destinatarios del libro de Hebreos tenía un aspecto interno, un aspecto externo, y un peligro que surge de los dos aspectos. 

''El aspecto interno del problema''

El aspecto interno era que los destinatarios de Hebreos habían descuidado su vida espiritual y estaban en un estado de apatía y flojera:

|bluealtrows|k
|2.1|La implicación es que algunos no atendían con diligencia al mensaje de Jesús que habían oído.|
|2.3|La implicación es que algunos estaban descuidando la gran salvación que habían recibido.|
|5.11-12|Se habían hecho tardos para oir. Deberían de haberse convertidos en maestros, pero tenían necesidad de que el autor volviera a enseñarles los conceptos más básicos.|
|6.11-12|La implicación es que algunos de ellos son espiritualmente peresozos (flojos)|
|10.25|Algunos habían dejado de asistir a las reuniones de la iglesia.|

''El aspecto externo del problema''

El aspecto externo era que existía la amenaza de una persecución más severa de lo que los destinatarios habían experimentado antes:

|bluealtrows|k
|10.32-34|En algún momento en el pasado, los destinatarios fueron perseguidos, se mantuvieron fieles, y ayudaron a los hermanos que fueron encarcelados por su fe.|
|12.3-6|Hasta la fecha ninguno de los destinatarios había perdido su vida por su fe en Cristo, pero el autor implica que pronto ellos experimentarán una persecución más severa.|
|13.12-13|Los destinatarios tendrán que salir del campamento (cortar sus lazos al Judaísmo) para asociarse con Jesús.|

''El peligro''

El peligro era que la combinación de su flojera y la persecución inminente les ponían en riesgo de la ''apostasía'': dejar al Cristianismo para el Judaísmo. Si leemos entre las líneas del mensaje de la carta, descubrimos que los destinatarios fueron Cristianos presionados por algunos Judíos para que regresaran al Judaísmo.
<table class="altgray"><tr><td>

1 Juan no menciona detalles específicos acerca de sus destinatarios - dónde vivían, si eran Judíos o Gentiles, etc.

</td></tr><tr><td>

Es claro que los destinatarios eran Cristianos y que tenían una relación personal con el autor. Los llama “hijitos míos” (2.1, 12, 14, 18; 3.7, 3.18, 4.4, 5.21).

</td></tr><tr><td>

No eran nuevos creyentes: habían escuchado el mandamiento "desde el principio" (2.7, 2.24, 3.11). 

@@.source Kistemaker 207@@

</td></tr><tr><td>

Algunos habían salido de la iglesia porque rechazaban su doctrina y adoptaban otra (2.18-19). Seguramente después de su salida estos criticaban la doctrina de Juan, y llamaban a los miembros que permanecieron en la iglesia a unirse con ellos.

</td></tr><tr><td>

La falsa doctrina de ellos tenía varios aspectos, pero en particular, ellos negaban que Jesús es el Mesías (2.22, 5.1), y negaban la encarnación (2.22, 4.1-3). Es posible también que decían que no tenían pecado en ellos (1.6-10). Algunos amaban a Dios pero no a su prójimo, amando con palabras sin hechos.

</td></tr><tr><td>

El último versículo de 1 Juan habla de idolatría, y algunos piensan que los que salieron de la iglesia eran idólatras. Pero es más probable que Juan usó la palabra 'idolatría' para enfatizar que la falsa doctrina de los que salieron era nada menos que una falsa religión.

</td></tr><tr><td>

Juan escribió en parte para refutar las falsas doctrinas de estos cismáticos. Pero su propósito principal en escribir era para ministrar a las inquietudes de los que permanecieron. Sus propósitos son pastorales y polémicos.

</td></tr><tr><td>

Los comentaristas proponen tres candidatos históricos para el error que Juan estaba combatiendo: Gnosticismo, Docetismo, y la herejía de Cerinto. 

</td></tr></table>
<table class="altgray"><tr><td>

1 Pedro no contiene referencias específicas a sus lectores, detalles acerca de la vida del autor, ni saludos personales. Pedro no parece haber conocido a sus lectores muy bien. Sin embargo, escribió una carta muy pastoral y sensible. La carta no contiene polémicas contra falsos maestros ni evidencia de facciones entre los lectores. La circunstancia más importante que provocó la carta era la persecución de los lectores por los inconversos alrededor de ellos.

</td></tr><tr><td>

''La naturaleza de la persecución en 1 Pedro''

Antes se creía que la persecución mencionada en 1 Pedro se trataba de la persecución oficial del Imperio Romano. Evidencia:

*3.15: La necesidad de estar preparado para dar una “defensa”—¿defensa en la corte?
*4.12: ¿Es el “fuego de la prueba” literal? (Nerón quemó a los Cristianos)
*4.15-16: ¿Es ser Cristiano un crimen paralelo con ser asesino, ladrón o criminal? 
*5.9: La persecución parece ser ámplia, todo el imperio o todo el mundo.

</td></tr><tr><td>

Pero, en realidad ahora creemos que la persecución mencionada aquí era ''una persecución local'':

*No hay evidencia de una persecución romana oficial a través del imperio para el tiempo en que 1 Pedro fue escrita. La persecución de Nerón (64d.c.) fue limitada a Roma, y la primera persecución oficial fue en el tiempo de Domiciano (81-96 d.c.) y Trajano (98-117 d.c.).
*Los textos mencionados arriba pueden ser interpretados mejor como respuestas a una persecución informal.
*En ninguna parte de 1 Pedro es la persecución conectada con el imperio o el emperador. Más bien, Pedro habla en términos positivos acerca del emperador y los oficiales del gobierno (2.13-14, 2.17). 

</td></tr><tr><td>

Sobre todo, la persecución que los lectores de esta carta habían experimentado fue mayormente ''abuso verbal'', no física. Es interesante notar los verbos griegos que Pedro usa. Con la excepción del último punto en la lista abajo, son verbos que tienen que ver con el uso de la boca:

*Calumniar, murmurar (2.12, 3.16)
*Insultar (3.9)
*Denunciar, maltratar (verbalmente) (3.16)
*Ultrajar (4.4)
*Ultrajar, insultar (4.14)
*Golpear (2.20 - en el contexto de esclavos y amos)

</td></tr><tr><td>

El maltrato que recibieron produjo en ellos sufrimiento (1.6, 2.19), ganas de retallar (2.23, 3.9), temor (3.6, 3.14), confusión (4.12), vergüenza (4.16), y ansiedad (5.7)

</td></tr><tr><td>

''Propósito''

Dada estas circunstancias, entonces, podemos decir con confianza que el propósito de Pedro en escribir esta carta era para consolar y animar a los creyentes que enfrentaban la persecución y el maltrato. 5.12 es una expresión de este propósito.

</td></tr></table>

@@.source Face of New Testament Studies, 382-3.@@
!!La situación del autor

<table class="altgray"><tr><td>

El autor es un anciano que ama a la iglesia en verdad (1)

</td></tr><tr><td>

El autor vio a unos de los miembros de la iglesia andar en la verdad, y eso le llenó de gozo (4)

</td></tr><tr><td>

El autor espera visitar, y los miembros de su iglesia manda saludos a los destinatarios (12-13)

</td></tr></table>

!!!La situación de los destinatarios

<table class="altgray"><tr><td>

El autor escribe a una iglesia y sus miembros (1)

</td></tr><tr><td>

Algunos engañadores habían salido al mundo, y negaban la encarnación de Cristo (7)

</td></tr><tr><td>

En el primer siglo, no había hoteles modernos. Había unos cuantos hostales, pero eran notorios lugares de vicio y enfermedades. Los Cristianos tenían la costumbre de mostrar hospitalidad a los predicadores itinerantes, pero algunos maestros con falsa doctrina se estaban aprovechando de su hospitalidad. Juan advierte a sus lectores a que usen discernimiento para no dar la bienvenida a los herejes y maestros de doctrina no cristiana.

</td></tr><tr><td>

Los destinatarios habían trabajado duro, pero había peligro que perdieran el premio por su trabajo (8)

</td></tr><tr><td>

Había peligro que los engañadores llegaran a la casa donde se reunía la iglesia (10)

</td></tr></table>
!!La situación del autor

<table class="altgray"><tr><td>

El autor afirma ser Simón Pedro, un apóstol de Jesucristo:

<span class="indent1">//Simón Pedro, siervo y apóstol de Jesucristo// (1.1)</span>

</td></tr><tr><td>

Pedro nos dice que fue testigo de la transfiguración de Jesucristo:

<span class="indent1">//Porque no os hemos dado a conocer el poder y la venida de nuestro Señor Jesucristo siguiendo fábulas artificiosas, sino como ''habiendo visto con nuestros propios ojos'' su majestad. Pues cuando él recibió de Dios Padre honra y gloria, le fue enviada desde la magnífica gloria una voz que decía: Este es mi Hijo amado, en el cual tengo complacencia. Y ''nosotros oímos esta voz'' enviada del cielo, cuando ''estábamos con él'' en el monte santo.// (1.16-18)</span>

</td></tr><tr><td>

Parece que hubo una acusación que el evangelio era una mentira inventada por seres humanos, porque Pedro ofrece tanto su propio testimonio de haber visto la gloria de Jesucristo como una mini-teología acerca de la inspiración de la profecía, para defender el evangelio:

<span class="indent1">//no os hemos dado a conocer el poder y la venida de nuestro Señor Jesucristo siguiendo ''fábulas artificiosas''// (1.16)</span>

<span class="indent1">//ninguna profecía de la Escritura es de ''interpretación privada'', porque nunca la profecía fue traída por voluntad humana, sino que los santos hombres de Dios hablaron siendo inspirados por el Espíritu Santo.// (1.20-21)</span>

</td></tr><tr><td>

Hubo otra objeción contra la fe cristiana: que las promesas acerca de la segunda venida de Cristo no se cumplirán, porque mucho tiempo ha pasado y el mundo sigue igual que antes:

<span class="indent1">//¿Dónde está la promesa de su advenimiento? Porque desde el día en que los padres durmieron, todas las cosas permanecen así como desde el principio de la creación.// (3.4)</span>

</td></tr><tr><td>

Pedro dice que recibió una revelación de parte de Jesucristo para decirle que pronto moriría. Pedro desea usar esta carta como oportunidad para recordar a sus lectores de sus enseñanzas para que los puedan recordar después de su muerte. 

<span class="indent1">//Por esto, yo no dejaré de recordaros siempre estas cosas, aunque vosotros las sepáis, y estéis confirmados en la verdad presente. Pues tengo por justo, en tanto que estoy en este cuerpo, el despertaros con amonestación; ''sabiendo que en breve debo abandonar el cuerpo, como nuestro Señor Jesucristo me ha declarado.'' También yo procuraré con diligencia que después de mi partida vosotros podáis en todo momento tener memoria de estas cosas.// (1.12-15)</span>

</td></tr><tr><td>

Esta es la segunda carta que Pedro les escribió:

<span class="indent1">//esta es la segunda carta que os escribo //(3.1)</span>

<span class="indent1">//(No debemos asumir que 1 Pedro es la carta indicada en 2 Pedro 3.1. No hay necesariamente una relación entre estas dos cartas. 2 Pedro 3.1 podría referirse a una carta que no nos fue preservada)//</span>

</td></tr></table>

!!La situación de los primeros destinatarios

<table class="altgray"><tr><td>

Los destinatarios eran Cristianos establecidos en su fe:

<span class="indent1">//yo no dejaré de recordaros siempre estas cosas, aunque ''vosotros las sepáis, y estéis confirmados en la verdad presente''.// (1.12)</span>

</td></tr><tr><td>

Los destinatarios han recibido varias palabras inspiradas:

*Las profecías de Jesús y de los apóstoles (3.2)
*Las cartas de Pablo (3.15-16)
*La carta anterior de Pedro (3.1)

</td></tr><tr><td>

Pedro habla de la inminente venida de falsos profetas, que estorbarán a los destinatarios. Pedro empieza hablando de ellos como si fueran una amenaza para el futuro cercano (2.1-12). Pero a partir de 2.13 Pedro usa el tiempo presente, como si ya estuvieran presentes. Este cambio del tiempo futuro en 2.1-12 al tiempo presente en 2.13-22 nos da un problema interpretativo:

*¿Será que los falsos profetas ya están estorbando a los destinatarios actualmente, y el uso del tiempo futuro en 2.1-12 es la influencia de la profecía que Pablo menciona? (porque desde la perspectiva de la perspectiva de la profecía, los falsos profetas serían una amenaza para el futuro).
*¿Será que los falsos profetas representan una amenaza para el futuro, y el uso del tiempo presente en 2.13-22 es porque Pedro los quiere describir como si estuvieran ya presentes?

</td></tr><tr><td>

Es difícil decidir entre las dos opciones. Vamos a suponer que Pedro les advierte de algo que viene en el futuro cercano, en parte porque en capítulo 3 Pedro vuelve al tiempo futuro, y en parte porque Pedro dice en 3.17 que les está advirtiendo de antemano:

<span class="indent1">//Así que vosotros, oh amados, ''sabiéndolo de antemano'', guardaos// (3.17)</span>

</td></tr><tr><td>

Otra manera de explicar el uso del tiempo presente sería suponer que los falsos maestros existían y causaban problemas en otras partes, pero cuando Pedro escribió esta carta, ellos todavía no habían llegado a la región donde vivían los destinatarios.

</td></tr><tr><td>

En conformidad con esta interpretación, dejaremos nuestra descripción de los falsos maestros hasta la sección acerca del mensaje de 2 Pedro.

</td></tr></table>
<table class="altgray"><tr><td>

Algunos Cristianos han viajado por amor al nombre de Jesús para ministrar:

<span class="indent1">//"...ellos salieron por amor del nombre de Él, sin aceptar nada de los gentiles"// (7)</span>

</td></tr><tr><td>

El autor (de aquí en adelante Juan) envió una carta pidiendo que la iglesia de su amigo Gayo los apoyara.

<span class="indent1">//"Yo he escrito a la iglesia…" //(9)</span>

</td></tr><tr><td>

Gayo recibió a los hermanos y les dio comida y hospedaje

<span class="indent1">//"...fielmente te conduces cuando prestas algún servicio a los hermanos, especialmente a los desconocidos"// (5)</span>

</td></tr><tr><td>

Diótrefes, un miembro de la iglesia de Gayo, no quiso recibir a los hermanos, y expulsó a los miembros que dieron la bienvenida a los hermanos (probablemente incluyendo a Gayo)

<span class="indent1">//"Diótrefes, al cual le gusta tener el primer lugar entre ellos,//

*//no nos recibe . . .profiriendo palabras malignas contra nosotros;//
*//y no contento con estas cosas, no recibe a los hermanos,//
*//y a los que quieren recibirlos se lo prohibe y los expulsa de la iglesia."// (9-10)

</span>

</td></tr><tr><td>

Los hermanos viajaron a la iglesia de Juan, y reportaron a su iglesia lo bueno de Gayo y lo malo de Diótrefes

<span class="indent1">//"Mucho me regocijé cuando vinieron los hermanos y dieron testimonio de tu verdad, de cómo andas en la verdad."// (3)</span>

<span class="indent1">//"…los cuales han dado ante la iglesia testimonio de tu amor"// (6)</span>

</td></tr><tr><td>

Juan escribe para animar a Gayo (probablemente expulsado de su propia iglesia por Diótrefes). Juan desea visitar personalmente para corregir la situación.

<span class="indent1">//"Por esta causa, si yo voy, recordaré las obras que hace profiriendo palabras malignas contra nosotros;"// (10)</span>

<span class="indent1">//"Yo tenía muchas cosas que escribirte, pero no quiero escribírtelas con tinta y pluma, porque espero verte en breve y hablaremos cara a cara."// (13-14)</span>

</td></tr><tr><td>

Juan envía la carta con los hermanos, que van para volver a visitar a Gayo, y con Demetrio.

</td></tr></table>
!!La situación del autor

<hr>

No aprendemos mucho acerca del autor de Judas. Aprendemos su nombre, aprendemos que fue un líder cristiano, y aprendemos que Jacobo fue su hermano.

       <span class="indent1">//«Judas, siervo de Jesucristo, y hermano de Jacobo»// (1)</span>

<hr>

Judas deseaba escribir algo acerca de la salvación, pero la situación en la iglesia de los destinatarios le obligó dirigirse a ese problema.

        <span class="indent1">//«Amados, por la gran solicitud que tenía de escribiros acerca de nuestra común salvación, me ha sido necesario escribiros exhortándoos que contendáis ardientemente por la fe que ha sido una vez dada a los santos.»// (3)</span>

<hr>

!!La situación de los destinatarios

<hr>

Judas no dice nada que nos ayuda a identifcar a los destinatarios, describirlos, o identificar el lugar donde vivían.

<hr>

La gran mayoría de la carta es una descripción de personas malas que habían entrado a la iglesia de los destinatarios, fingiendo ser Cristianos de verdad cuando no lo eran.

        <span class="indent1">//«algunos hombres han entrado encubiertamente...hombres impíos»// (4)</span>

<hr>

Judas no dice en tantas palabras que estas personas eran falsos maestros o falsos profetas. Judas tampoco se refiere a alguna enseñanza de ellos. Los llama simplemente //«hombres impíos»// (4, 15). Sin embargo, una de sus ilustraciones en v. 12 es una alusión a Ezequiel 34, donde el profeta critica a los líderes de Israel, que tenian el cargo de ser pastores y apacentar al rebaño, pero sólo apacentaron a si mismos. Esta alusión nos sugiere que estos 'hombres impíos' pretendían ser líderes.

<hr>

En v. 8 Judas los llama 'soñadores'. Este dato probablemente significa que los impíos profesaban haber recibido revelaciones divinas en sueños y visiones. Usaban estas supuestas revelaciones para imponer su autoridad sobre los miembros de la iglesia. El profeta Jeremías habla de personas que hacían lo mismo:

<span class="indent1">//«Yo he oído lo que aquellos profetas dijeron, profetizando mentira en mi nombre, diciendo: Soñé, soñé.»// (Jeremías 23.25)</span>

<hr>

Judas describe ''cinco pecados'' de estos impíos:

#Abusaban de la doctrina de la gracia de Dios como pretexto para tener vidas inmorales
#Rechazaban las autoridades y los límites puestos sobre ellos
#Cometían pecados sexuales
#En su avaricia usaban la religión para enriquecerse
#Dividían a los miembros de la iglesia

Los comentarios abajo proveen más detalle sobre estos cinco pecados de ellos.

<hr>

''Abusaban de la doctrina de la gracia de Dios'' como pretexto para tener vidas inmorales:

            <span class="indent1">//«convierten en libertinaje la gracia de nuestro Dios»// (4)</span>

Los términos técnicos para este error son 

<span class="">

*'antinomianismo' - la postura de estar opuesto a someterse a las leyes morales (anti = contra; nomos = ley)
*'libertinismo' - el uso del principio de la libertad para rechazar las restricciones morales sobre uno

</span>

<hr>

El apóstol Pablo tuvo que responder a personas con ideas similares, que retorcían las palabras de él acerca de la gracia para promover una conducta inmoral:

*«//¿Qué, pues, diremos? ¿Perseveraremos en el pecado para que la gracia abunde? En ninguna manera.//» (Romanos 6.1-2)
*«//¿Qué, pues? ¿Pecaremos, porque no estamos bajo la ley, sino bajo la gracia? En ninguna manera//.» (Romanos 6.15)

<hr>

Los impíos descritos por Judas ''rechazaban las autoridades'' y los límites puestos sobre ellos:

<span class="doublelist">

* //«niegan a Dios el único soberano, y a nuestro Señor Jesucristo»// (4)
* //«rechazan la autoridad y blasfeman de las potestades superiores.»// (8)
* //«Pero éstos blasfeman de cuantas cosas no conocen;»// (10)
* //«perecieron en la contradicción de Coré.»// (11) - Coré se rebeló contra Moisés
* //«todas las cosas duras que los pecadores impíos han hablado contra él //[= el Señor, v 14]» (15)
* //«Estos son murmuradores, querellosos»// (16)
* Fue profetizado acerca de ellos que //«En el postrer tiempo habrá burladores»// (18)

</span>

<hr>

Los impíos que Judas menciona cometieron ''pecados sexuales:''

<span class="doublelist">

* //«habiendo fornicado e ido en pos de vicios contra naturaleza»// (7)
* //«mancillan la carne»// (8)
* //«y en las que por naturaleza conocen, se corrompen como animales irracionales.»// (10)
* //«que andan según sus propios deseos»// (16)
* fue profetizado acerca de ellos que //«andarán según sus malvados deseos.»// (18)
* //«los sensuales»// (19)

</span>

<hr>

En su ''avaricia'' usaban la religión para enriquecerse:      

<span class="doublelist">

* //«se lanzaron por lucro en el error de Balaam»// (11)
* //«Estos son manchas en vuestros ágapes, que comiendo impúdicamente con vosotros se apacientan a sí mismos;»// (12)
* //«cuya boca habla cosas infladas, adulando a las personas para sacar provecho.»// (16)

</span>

<hr>

''Dividían a los miembros de la iglesia:''

<span class="indent1">//«Estos son los que causan divisiones;»// (19)</span>
''El trasfondo: pobreza y opresión''

|bluealtrows|k
|Los creyentes son pobres, y los ricos los oprimen|¿No os oprimen los ricos y no son ellos los mismos que os arrastran a los tribunales? (2.6)|
|~|¡Vamos ahora, ricos!...El jornal de los obreros que han cosechado vuestras tierras, el cual por engaño no les ha sido pagado por vosotros clama, y los clamores de los que habían segado han llegado a los oídos del Señor de los ejércitos. (5.1-6)|

''Respuestas inadecuadas a su pobreza''

|bluealtrows|k
|La codicia|Codiciáis y no tenéis; matáis y ardéis de envidia y nada podéis alcanzar; combatís y lucháis… (4.2)|
|Ambición: entrar en el comercio sin pensar en Dios|¡Vamos ahora!, los que decís: «Hoy y mañana iremos a tal ciudad, estaremos allá un año, negociaremos y ganaremos»  (4.13)|
|Parcialidad a los ricos para ganar su favor|Si en vuestra congregación entra un hombre con anillo de oro y ropa espléndida, y también entra un pobre con vestido andrajoso, y miráis con agrado al que trae la ropa espléndida y le decís: «Siéntate tú aquí, en buen lugar», y decís al pobre: «Quédate tú allí de pie», o «Siéntate aquí en el suelo» (2.23)|

''Conflictos entre ellos''

|bluealtrows|k
|Los conflictos entre ellos se manifiestan en estas formas:|El enojo: todo hombre sea pronto para oir, tardo para hablar, tardo para airarse, porque la ira del hombre no obra la justicia de Dios. (1.19-20)|
|~|Maldecir a otros: Con la lengua bendecimos a nuestro Señor y Padre, y con ella maldecimos a las personas, creadas a imagen de Dios. 10 De una misma boca salen bendición y maldición. (3.9-10)|
|~|Maldecir a otros: Hermanos, no hablen mal unos de otros. Si alguien habla mal de su hermano, o lo juzga, habla mal de la ley y la juzga (NVI).|
|~|El homicidio*: el que dijo: «No cometerás adulterio», también ha dicho: «No matarás». Ahora bien, si no cometes adulterio, pero matas, ya te has hecho transgresor de la Ley. (2.11)|
|~|El homicidio: matáis y ardéis de envidia... (4.2)|

''Falta de fe en Dios''

|bluealtrows|k
|No oran, y cuando oran, piden con motivos mundanos|…no tenéis lo que deseáis, porque no pedís. Pedís, pero no recibís, porque pedís mal, para gastar en vuestros deleites (4.2-3)|
|Dudan de la generosidad y la bondad de Dios para sacarlos de su pobreza. Se impacientan para salir de ella.|...el que duda es semejante a la onda del mar, que es arrastrada por el viento y echada de una parte a otra. (1.6)|
|~|Cuando alguno es tentado no diga que es tentado de parte de Dios… (1.13)|
|~|Por tanto, hermanos, tengan paciencia hasta la venida del Señor. Miren cómo espera el agricultor a que la tierra dé su precioso fruto y con qué paciencia aguarda las temporadas de lluvia. Así también ustedes, manténganse firmes y aguarden con paciencia la venida del Señor, que ya se acerca. No se quejen unos de otros, hermanos, para que no sean juzgados. ¡El juez ya está a la puerta! Hermanos, tomen como ejemplo de sufrimiento y de paciencia a los profetas que hablaron en el nombre del Señor. En verdad, consideramos dichosos a los que perseveraron. Ustedes han oído hablar de la perseverancia de Job, y han visto lo que al final le dio el Señor. Es que el Señor es muy compasivo y misericordioso. (5.7-11)|

''Hipocresía y doble ánimo''

|bluealtrows|k
|A pesar de todos estas fallas, ellos se consideran a si mismos personas religiosas|Si alguno se cree religioso entre vosotros… (1.26)|
|~|si alguno dice que tiene fe… (2.14)|
|~|¿Quién es sabio y entendido entre vosotros? Muestre por la buena conducta sus obras en sabia mansedumbre….no os jactéis (3.13-14)|
|Santiago los acusa de ser personas de "doble ánimo"|…persona de doble ánimo e inconstante en todos sus caminos. (1.8)|
|Hay una brecha entre lo que oyen y lo que hacen|Si alguno es oidor de la palabra pero no hacedor de ella…(1.23)|
|Hay una brecha entre lo que saben y lo que hacen|El que sabe hacer lo bueno y no lo hace, comete pecado. (4.17)|
|Hay una brecha entre lo que dicen y lo que dicen|Con [nuestra lengua] bendecimos al Dios y Padre y con ella maldecimos a los hombres, que están hechos a la semejanza de Dios. De una misma boca proceden bendición y maldición. Hermanos míos, esto no debe ser así. (3.9-10)|
|Hay una brecha entre lo que creen y lo que hacen|Así también la fe, si no tiene obras, está completamente muerta. (2.17)|

`*`5.6 también menciona el homicidio, pero es un ay contra los opresores ricos, no una descripción de los destinatarios
<span class="doublelist">

*El libro de Santiago no es como las cartas de Pablo, en que no es una carta dirigida a los problemas de una iglesia específica. Santiago 1.1 dice que los lectores están dispersados. No están juntos en una sola iglesia. Además, el libro de Santiago utiliza material de dos otros textos escritos para un amplio público: el Sermón del Monte y el libro de Proverbios. Podemos concluir que Santiago es un libro similar a estos textos. No se dirige a una iglesia en particular, sino se dirige de manera general a personas de una región amplia.
*El libro de Santiago nos da una ventana a los problemas que afectaban a las iglesias en Palestina a mitad del primer siglo. El libro contiene resúmenes de sermones, y podemos notar las situaciones que provocaron a los sermones. El compósito que se produce es de iglesias que viven en un contexto de pobreza y opresión, y que han respondido inadecuadamente a su situación en cuatro áreas:
**Usan estrategias inadecuadas para salir de su situación (envidia, ambición, parcialidad a los ricos)
**Tienen conflictos entre ellos por los pocos recursos que hay
**Dudan la generosidad de Dios, y no oran
**Profesan ser religiosos, pero son hipócritas (de "doble ánimo") 

</span>

-----

Los destinatarios originales del libro de Santiago eran Cristianos Judíos. Apoyo:

<span class="doublelist">

*Jacobo los llama las doce tribus de la diáspora (1.1)
*Hay varias referencias a la ley
*Los lectores creen que Dios es uno. Son monoteístas (2.19)
*Jacobo dice que Abraham es “nuestro” padre en 2.21
*Jacobo usa la palabra “sinagoga” para describir el lugar de reunión de los lectores
*Santiago incluye algunas metáforas que vienen del AT
*No hay mención de cosas más típicas entre Gentiles como la idolatría, la esclavitud, o un estándar bajo de la sexualidad
*El tono del libro combina elementos de literatura profética y de sabiduría, géneros conocidos entre Judíos

</span>

-----

El libro de Santiago refleja una situación de pobreza. Sabemos que Palestina sufrió hambre en 46 d.c., y que la pobreza en Palestina era tan profunda en el tiempo de Pablo, que el apóstol colectó una ofrenda de sus iglesias para la iglesia en Jerusalén. Así que la pobreza en este libro podría reflejar las circunstancias de lectores en Palestina.
<table class="altgray"><tr><td>

    Dios es tan soberano en el libro de Apocalipsis, que ni siquiera se mueve. Pasa todo el libro sentado tranquilamente sobre su trono. Los que actúan son los ángeles.

</td></tr><tr><td>

    El castigo que los ángeles proporcionan en los sellos, trompetas y copas son indicaciones de la soberanía de Dios. Dios pone un sello sobre los santos y los protege. Dios tiene control sobre las personas que serán afectadas por las plagas y las que no.

</td></tr><tr><td>

    Los círculos concéntricos del cielo en Apocalipsis 4, y los cantos antifonales, manifiestan el orden celestial, en contraste con el caos que ocurre en la tierra.

</td></tr><tr><td>

    Dios es victorioso sobre todos sus adversarios en Apocalipsis.

</td></tr></table>
<table class="altgray"><tr><td>

    Dios y Cristo son eternos: Alfa y Omega, el primero y el último, el principio y el fin (1.4, 1.8, 1.17, 2.8, 21.6, 22.13)

</td></tr><tr><td>

    Dios sabe lo que debe suceder en el futuro (1.1, 4.1)

</td></tr><tr><td>

    Dios da su permiso para que ocurra el mal, pero por períodos cortos de tiempo (2.10, 3.10, 6.11, 11.2-3, 12.12, 13.5)

</td></tr><tr><td>

    Dios protege a su pueblo o le da descanso por períodos específicos de tiempo (3.10, 7.3, 8.1, 12.6, 12.14, 20.2-7)

</td></tr><tr><td>

    Dios tiene una hora fija en que juzgará al mundo (10.6-7, 11.18, 14.7, cap. 18 repite la frase “en una hora” tres veces)

</td></tr><tr><td>

    Dios no permite ni a Juan mismo revelar todo acerca del calendario escatológico de Dios (10.4)

</td></tr></table>

<span class="source">Fuente: investigación del autor en preparación de un sermón</span>
Según Pedro, los Cristianos deben someterse a los gobernantes (2.13), las mujeres cristianas deben someterse a sus maridos (3.1,5), y los esclavos cristianos deben someterse a sus amos (2.18). El motivo de estas exhortaciones a la sumisión es la conversión de los inconversos.

Además, los jóvenes deben someterse a los ancianos (las autoridades en la iglesia, 5.5), y todos los creyentes deben practicar la sumisión mútua entre ellos (5.5). Estas exhortaciones son parte del énfasis del amor fraternal en 1 Pedro. 

La palabra 'obediencia' se usa más en 1 Pedro para hablar de la obediencia que los seres humanos deben a Dios. Uno obedece o no obedece al evangelio, por ejemplo.

<hr>

''La palabra 'someterse / sumiso'''

La palabra 'ser sumiso' (ὑποτάσσω) aparece siete veces en 1 Pedro:

|bluealtrows|k
|2.13|"Sométanse . . . a toda autoridad humana . . ." (NVI)|
|2.18|Pedro exhorta a los siervos a que se sometan a sus amos|
|3.1|Pedro exhorta a las esposas, a que se sometan a sus esposos|
|3.5|". . . las santas mujeres que esperaban en Dios, cada una sumisa a su esposo." (NVI)|
|3.22|"Jesucristo . . . a quien están sometidos los ángeles, las autoridades y los poderes." (NVI)|
|5.5 (2x)|". . . jóvenes, sométanse a los ancianos." (NVI)<br>". . . y todos, sumisos unos a otros . . ." (~RV60)|

@@.source Fuente: Geisler@@

<hr>

''La palabra 'obedecer / obediencia'''

La palabra 'obedecer / obediencia' (ὑπακούω, ὑπακοή) aparece cuatro veces en 1 Pedro, y la palabra 'desoboedecer' (ἀπειθέω) aparece tres veces:

''ὑπακούω, ὑπακοή''

|bluealtrows|k
|1.2|". . . para obedecer a Jesucristo y ser redimidos por su sangre . . ." (NVI)|
|1.14|"Como hijos obedientes . . ." (NVI)|
|1.22|"Ahora que se han purificado obedeciendo a la verdad . . ." (NVI)|
|3.6|". . . Sara, que obedecía a Abraham . . ." (NVI)|

<hr>

''ἀπειθέω''

|bluealtrows|k
|2.8|"Ellos, por su desobediencia, tropiezan en la palabra." (RV95)|
|3.20|(los que "desobedecieron" en los días de Noé)|
|4.17|"¿cuál será el fin de aquellos que no obedecen al evangelio de Dios?" (RV95)|

@@.source Fuentes: Geisler, Kistemaker@@
<table class="altgray"><tr><td>

Esta carta no menciona ni a Cristo ni al Espíritu Santo. Solo menciona a Dios, o al Nombre (7). Los malos no han visto a este Dios (11), pero los creyentes (llamados “la iglesia” (6, 9, 10) y “los hermanos” (3, 4, 9)) son “de él” (11) y hacen las cosas de una manera digna de él (6).

</td></tr><tr><td>

Los creyentes reciben maestros itinerantes (5-8), e imitan lo que es bueno (11).

</td></tr><tr><td>

En cambio, los malos chismean y rehusan recibir a los creyentes itinerantes (10).

</td></tr><tr><td>

"La verdad" (1, 3, 4, 8, 12)

</td></tr><tr><td>

Vivir la vida cristiana es "caminar"

</td></tr><tr><td>

El amor (6)

</td></tr></table>
<table class="altgray"><tr><td>

Dios el Padre elige a los creyentes (1) y da mandamientos que ellos deben guardar (6). Dios y Jesucristo son fuentes de gracia, misericordia y paz (v. 3). Jesucristo ha venido en la carne. 2 Juan no menciona al Espíritu Santo.

</td></tr><tr><td>

Juan habla de la “verdad” (5 veces en vv. 1-4), o “la doctrina” acerca de Cristo (9). Los que conocen la verdad deben andar en ella (4) y morar en esta enseñanza (9).

</td></tr><tr><td>

Los creyentes son descritos como “los que conocen la verdad” (1).

</td></tr><tr><td>

Deben amarse mutuamente (5). "El anciano parece distinguir entre el mandamiento de Dios (singular), el de amar (2 Jn 5, 6b, v.t. 1 Jn 2.7-8, 3.23, 4.21), y sus mandamientos (plural), la obediencia a los cuales siendo la sustancia de amar (2 Jn 6a, v.t. 1 Jn 2.3-4, 3.22, 24)." 

@@.source Marshall, New Testament Theology, 531@@

</td></tr><tr><td>

Esperan una recompensa completa, pero esta recompensa es condicional, y ellos deben tener cuidado en no perderla (8).

</td></tr><tr><td>

Hay engañadores o anticristos que no reconocen la encarnación de Cristo y vienen con otra enseñanza (7). Los creyentes no deben recibirlos (10-11). 

</td></tr></table>
''5.7-8:'' ''Ningun manuscrito griego antes del siglo XIV'' contiene las palabras 

“Tres son los que dan testimonio en el cielo: el Padre, el Verbo y el Espíritu Santo; y estos tres son uno. Y tres son los que dan testimonio en la tierra” (5.7-8ª) 

sino en el margen de uno del siglo XI y en el margen de uno del siglo XII. Ningun padre de la iglesia cita estas palabras, cosa rara, considerando que hubiera sido un buen argumento en las controversias cristológicas y trinitarias. Las palabras sí aparecen por primera vez en un tratado del cuarto siglo en Latín, no en un manuscrito bíblico. 

Es sumamente preferible tratarlas como una adición a la Biblia por un escriba que quería meter al texto bíblico un apoyo para la doctrina de la Trinidad.

,,Fuente: Carson, Moo y Morris, 455,,
La palabra 'transmisión' en este contexto se refiere a la transmisión del texto griego de copia a copia. A través de los años errores y lecturas alternativas se introdujeron al texto por los escribas que copiaban el texto a mano. Para cada versículo que tiene más de una lectura, es necesario determinar cuál fue la lectura original.

Algunos de los asuntos textuales más importantes notados en Metzger:

<span class="doublelist">

*1 Pedro 3.8: La Reina Valera opta por la lectura de los manuscritos más recientes cuando pone “amigable” en vez de “humilde.” Pero los manuscritos más antiguos apoyan la lectura humilde.
*1 Pedro 3.15: Manuscritos muy antiguos y diversos apoyan la lectura “Cristo”, no “Dios” en este versículo. Metzger da una calificación “A” a la lectura “Cristo.”
*1 Pedro 3.18-21: Hay un gran número de lecturas alternativas en los manuscritos para este texto enigmático.
*1 Pedro 4.14: En la mayoría de los manuscritos las palabras “Ciertamente, por lo que hace a ellos, él es blasfemado, pero por vosotros es glorificado” no se encuentran. 

</span>

Probablemente un escriba añadió estas palabras de explicación y no son parte del texto original, a pesar de su inclusión en la Reina Valera.
Los manuscritos griegos de 2 Juan contienen algunas pequeñas diferencias, pero nada significativo.
Carson, Moo y Morris dicen que el texto de 2 Pedro tiene muchas discrepancias, debido a su falta de reconocimiento en la iglesia primitiva y su consecuente falta de circulación. Ellos mencionan a 3.10 como ejemplo de un texto difícil de la carta.
Los manuscritos griegos de 3 Juan contienen algunas pequeñas diferencias, pero nada significativo.
<table class="altgray"><tr><td>

    No hay tantos manuscritos griegos de Apocalipsis como hay para los demás libros del Nuevo Testamento.

</td></tr><tr><td>

    Los manuscritos griegos de Apocalipsis circularon independientemente de los manuscritos de los demás libros del Nuevo Testamento, y hasta han sido hallados dentro de colecciones de libos no canónicos.

</td></tr><tr><td>

    Los leccionarios antiguos usados en los cultos cristianos normalmente son una fuente útil para determinar el texto original de los libros del Nuevo Testamento, pero no contienen porciones de Apocalipsis.

</td></tr><tr><td>

    Apocalipsis no fue citado con frecuencia por los padres de la iglesia.

</td></tr><tr><td>

    El libro de Apocalipsis contiene muchos errores gramáticos, y varios escribas intentaron hacer correcciones mientras copiaban al libro. Los críticos textuales usan este hecho para ayudarles a determinar el texto original.

</td></tr><tr><td>

    Los manuscritos griegos considerados las fuentes más confiables para otros libros del Nuevo Testamento no son las fuentes más confiables para Apocalipsis.

</td></tr><tr><td>

    Erasmo, un erudito del Renacimiento, preparó un Nuevo Testamento en griego para publicar en el décimosexto siglo. Pero Erasmo no tuvo acceso a los manuscritos griegos para algunos versículos de Apocalipsis. Así que decidió traducir los versículos en el sentido contrario, del Latín de la Vulgata al griego.

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Carson, Moo y Morris, An Introduction to the New Testament. (Grand Rapids: Zondervan, 1992).</span>
Los siguientes versículos de Judas tienen variantes textuales, según Metzger:

*1 (2)
*3
*4 (2)
*5
*8
*12
*19
*22
*23 (2)
*25 (2)

@@.source Bruce M. Metzger, A Textual Commentary on the Greek New Testament. (Stuttgart:United Bible Societies, 2002), 656-661.@@
Cuando hablamos de la 'integridad' o 'unidad' de un documento, estamos preguntando si el documento como lo tenemos ahora siempre existía en su forma actual, o si es una combinación de dos o más documentos que después fueron juntados por alguna razón. ¿Es 1 Pedro un solo documento, o la fusión de varios documentos?

''Dudas''

En el caso de 1 Pedro, algunos comentaristas han planteado la teoría de que 1 Pedro es la combinación de dos documentos. Dicen que 1.3-4.11 es un documento, y que 4.12-5.14 es el contenido de otra carta que fue añadido después. La evidencia de que estos comentaristas presentan es la siguiente:

<span class="doublelist">

*Hay una división significativa entre 1 Pedro 4.11 y 4.12; 4.11 es un doxología, un elemento que típicamente señala la conclusión de una carta. Hay otra doxología en 5.11. ¿Tenemos un documento que concluye con una doxología en 4.11, con el contenido de otra carta en 4.12-5.14, que también concluye con una doxología en 5.11?
*Según estos comentaristas, la persecución se trata como algo hipotético antes de 4.11, pero en 4.12-5.14 se trata con más urgencia, como si la persecución ya llegó a ser una realidad. ¿Puede ser que tengamos un documento donde Pedro advierte a sus lectores de una persecución inminente, y otro documento donde la persecución ya llegó?
*Según ellos, 1 Pedro 1.3-4.11 no se dirige a una circunstancia específica en la vida de una iglesia. Habla en términos generales, y se concentra en la elocuencia retórica y doctrinal en vez de dirigirse a un problema. En cambio 4.12-5.14 se dirige a la persecución ya experimentada por los lectores. ¿Es 1.3-4.11 un sermón o liturgia para el bautismo (véase [[aquí|El género de 1 Pedro]] para más información), y 4.12-5.14 el contenido de otra carta que fue añadido después?

''Respuestas''

En los últimos años estas dudas acerca de la unidad de 1 Pedro se han disminuido, y muchos más comentaristas reconocen que los argumentos mencionados arriba son especulativos y sujetivos. Además, han planteado varios argumentos a favor de la integridad de esta carta:

*Ningún manuscrito griego da evidencia textual de una división entre 4.11 y 4.12. 
*Otras cartas del NT tienen doxologías antes de la conclusión de la carta: véase Ro. 11.36, Ef. 3.21.
*1.6 parece hablar del sufrimiento como realidad presente.
*Hay muchos temas y elementos que aparecen en las dos partes de 1 Pedro.

</span>

Kistemaker, 24, alista los siguientes temas que aparecen en ambas partes:

|bluealtrows|k
|!Tema|!1.3-4.11|!4.12-5.14|
|Sufrir por causa de Cristo|2.21|4.13|
|El sufrimiento inmerecido|3.17|4.16|
|La sumisión a la autoridad|2.13|5.5|
|La corta duración del sufrimiento|1.6|5.10|
|Resistir al mal|4.1|5.9|
|El fin de todas las cosas|4.7|4.17|
|Citas al Antiguo Testamento|(varios)|(varios)|

Michaels menciona otro: la combinación de la palabra "amados" seguida por una apelación aparece en 2.11 y 4.12.

@@.source Fuentes: Harrison, 397; Kistemaker, 24; Michaels, WBC.@@
Ya que la carta de Judas no es muy larga, nadie ha dudado su integridad. Todos están de acuerdo que fue una sola carta.
|bluealtrows|k
|!1.6|Si decimos que tenemos comunión con él y andamos en tinieblas, mentimos y no practicamos la verdad.|
|!1.8|Si decimos que no tenemos pecado, nos engañamos a nosotros mismos y la verdad no está en nosotros.|
|!2.4|El que dice: «Yo lo conozco», pero no guarda sus mandamientos, el tal es mentiroso y la verdad no está en él.|
|!2.8|Y, sin embargo, os escribo un mandamiento nuevo, que es verdadero en él y en vosotros, porque las tinieblas van pasando y la luz verdadera ya alumbra.|
|!2.20-21|Vosotros tenéis la unción del Santo y conocéis todas las cosas. Os he escrito, no porque seáis ignorantes de la verdad, sino porque la conocéis, y porque ninguna mentira procede de la verdad.|
|!3.18-20|Hijitos míos, no amemos de palabra ni de lengua, sino de hecho y en verdad.<br>En esto conocemos que somos de la verdad, y aseguraremos nuestros corazones delante de él, pues si nuestro corazón nos reprende, mayor que nuestro corazón es Dios, y él sabe todas las cosas.|
|!4.6|Nosotros somos de Dios. El que conoce a Dios, nos oye; el que no es de Dios, no nos oye. En esto conocemos el espíritu de verdad y el espíritu de error|
|!5.6|Este es Jesucristo, que vino mediante agua y sangre; no mediante agua solamente, sino mediante agua y sangre. Y el Espíritu es el que da testimonio, porque el Espíritu es la verdad.|
|!5.20|Pero sabemos que el Hijo de Dios ha venido y nos ha dado entendimiento para conocer al que es verdadero; y estamos en el verdadero, en su Hijo Jesucristo. Este es el verdadero Dios y la vida eterna.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|!2.13-14|Os escribo a vosotros, padres, <br>porque conocéis al que es desde el principio. <br>Os escribo a vosotros, jóvenes, <br>porque habéis vencido al maligno. <br>Os escribo a vosotros, hijitos, <br>porque habéis conocido al Padre. <br>Os he escrito a vosotros, padres, <br>porque habéis conocido al que es desde el principio. <br>Os he escrito a vosotros, jóvenes,<br>porque sois fuertes<br>y la palabra de Dios permanece en vosotros,<br>y habéis vencido al maligno.|
|!4.4|Hijitos, vosotros sois de Dios y los habéis vencido, porque mayor es el que está en vosotros que el que está en el mundo.|
|!5.3-5|pues este es el amor a Dios: que guardemos sus mandamientos; y sus mandamientos no son gravosos, porque todo lo que es nacido de Dios vence al mundo; y esta es la victoria que ha vencido al mundo, nuestra fe. ¿Quién es el que vence al mundo, sino el que cree que Jesús es el Hijo de Dios?|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|!1.2|...la vida fue manifestada y la hemos visto, y testificamos y os anunciamos la vida eterna, la cual estaba con el Padre y se nos manifestó...|
|!2.17|Y el mundo pasa, y sus deseos, pero el que hace la voluntad de Dios permanece para siempre.|
|!2.25|Y esta es la promesa que él nos hizo: la vida eterna.|
|!3.14-15|Nosotros sabemos que hemos pasado de muerte a vida, porque amamos a los hermanos. El que no ama a su hermano permanece en muerte. Todo aquel que odia a su hermano es homicida y sabéis que ningún homicida tiene vida eterna permanente en él.|
|!4.9|En esto se mostró el amor de Dios para con nosotros: en que Dios envió a su Hijo unigénito al mundo para que vivamos por él.|
|!5.11-13|Y este es el testimonio: que Dios nos ha dado vida eterna y esta vida está en su Hijo. El que tiene al Hijo tiene la vida; el que no tiene al Hijo de Dios no tiene la vida. <br>Estas cosas os he escrito a vosotros que creéis en el nombre del Hijo de Dios, para que sepáis que tenéis vida eterna y para que creáis en el nombre del Hijo de Dios.|
|!5.16|Si alguno ve a su hermano cometer pecado que no sea de muerte, pedirá, y Dios le dará vida; esto es para los que cometen pecado que no sea de muerte. Hay pecado de muerte, por el cual yo no digo que se pida.|
|!5.20|Pero sabemos que el Hijo de Dios ha venido y nos ha dado entendimiento para conocer al que es verdadero; y estamos en el verdadero, en su Hijo Jesucristo. Este es el verdadero Dios y la vida eterna.|

<span class="source">
Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
Muchos piensan que Apocalipsis es un libro oscuro y triste, pero en realidad es un libro muy musical y gozoso. Además, Harrison (458) menciona el carácter rítmico de mucho del libro. Lo que sigue es una lista de todas las canciones del libro.

|bluealtrows|k
|!Vv.|!Cantante(s)|!Resumen|!Acción|
|1.5b-6|Juan|¡Gloria al Dios que nos salvó y nos hizo un reino de sacerdotes!| -- |
|4.8|Los cuatro seres vivientes|¡Dios es tres veces santo!|No dejan de decirlo|
|4.11|Los 24 ancianos|¡Dios es digno porque creó todas las cosas!|Se postraron, y echaron sus coronas ante el trono|
|5.9-10|Los seres vivientes y ancianos|¡El Cordero es digno porque redimió a muchos con su sangre y nos hizo un reino de sacerdotes!|Se postraron, cantaron|
|5.12|Los ángeles, ancianos <br>y seres vivientes|¡Digno es el Cordero!| -- |
|5.13b|Toda criatura|¡Alabanza a Dios y al Cordero!| -- |
|5.14|Toda criatura|¡Amén!| -- |
|7.10b|La gran multitud|¡La salvación pertenece a Dios y al Cordero!| -- |
|7.12|Los ángeles|¡Alabanza y gloria, etc, a Dios!|Se postraron y adoraron|
|11.15|Voces celestiales|¡El reino del mundo ha pasado a Dios y a su Cristo!| -- |
|11.17-18|Los 24 ancianos|¡Gracias, Dios, que has comenzado a reinar! ¡El tiempo ha llegado para el juicio!|Se postraron y adoraron|
|¿¿¿12.10-12???|Una voz celestial|¡Regocíjense, cielos, y lamenta, o tierra, porque Dios ha expulsado el dragón del cielo a la tierra!| -- |
|14.3|Los 144,000|Reciben una nueva canción que solo ellos conocen| -- |
|15.3-4|Los victoriosos|¡Tus obras y hechos son grandes, y las naciones te adorarán!|Tocaron arpas|
|16.5-6|Un ángel|¡Eres justo, Dios, porque has juzgado a los que persiguieron a tus santos!| -- |
|16.7b|Los mártires|¡Sí, Dios, eres justo!| -- |
|18.2-3|Un ángel|¡Babilonia ha caido!| -- |
|18.4-7|Una voz|¡Sal de Babilonia, porque Dios le va a pagar por sus crímenes!| -- |
|18.10|Los reyes de la tierra|¡Ay, Babilonia, ya no tienes poder!|Desde lejos clamarán|
|18.16-17ª|Los comerciantes del mundo|¡Ay, Babilonia, ya no tienes riquezas!|Desde lejos llorarán y clamarán|
|18.19|Todos los que viven del mar|¡Ay, Babilonia, ya no tienes comercio!|Echarán polvo a sus cabezas, llorando y lamentando|
|18.20|¿El autor?|Regocíjense, santos y apóstoles, porque Dios ha juzgado a Babilonia| -- |
|18.21-24|Un ángel poderoso|¡Babilonia caerá y ya no habrá nada en ella jamás!|Acto simbólico de aventar una piedra de molino|
|19.1b-3|La gran multitud|¡Aleluya! ¡Dios ha condenado la ramera Babilonia!|Gritaron|
|19.4|Los ancianos y seres vivientes|¡Amén, aleluya!|Se postraron y adoraron|
|19.5|La voz del trono|¡Alaben a Dios, todos sus siervos!| -- |
|19.6b-8|La gran multitud|¡Regocíjense porque Dios reina y la boda del Cordero ha llegado!|Gritaron|

@@.source Fuente: una adaptación de Wilson, //Charts//, 74-75, más el estudio personal del autor@@
!!La estructura quiástica de las advertencias

:2.1-4 <br><br>
::3.7-4.13 <br><br>
:::5.11-6.12 <br><br>
::10.19-39 <br><br>
:12.14-29

!!Paralelos entre las secciones

''2.1-4 y 12.14-29''

*Invoca la necesidad de oir, escuchar el mensaje de Dios
*Usan un argumento del menor al mayor
*Hacen un contraste entre los mediadores de revelaciones anteriores y el nuevo mensaje mediado por el Hijo

''3.7-4.13 y 10.19-39''

*Son más largas que las demás advertencias
*Usan lenguaje emotivo
*Usan argumentos del menor al mayor
*Invocan la necesidad de confiar, obedecer, y temer

@@.source Fuente: Herbert W. Bateman IV, gen. ed. Four Views on the Warning Passages in Hebrews. (Grand Rapids: Kregel, 2007), 27-29, 44.@@
Muchos comentaristas dicen que no hay mucha teología en esta carta. Pero Dr. Dean Deppe considera que cada perícopa mayor contiene una base teológica:

|bluealtrows|k
|!Versículos|!Base teológica|
|1.1-15|Nuestro concepto de Dios influye nuestra reacción a la tentación  y las pruebas|
|1.16-27|La palabra de Dios|
|2.1-13|Lv. 19 y los diez mandamientos|
|2.14-26|El shema (2.19) y la justificación (2.23)|
|3.1-12|Las principalidades y poderes (3.6-8), el ser humano en la imagen de Dios (3.9) y la pefección (3.2)|
|3.13-18|El fruto de la sabiduría (similar al fruto del Espíritu)|
|4.1-12|Base del AT: Pr. 3.34|
|4.13-5.6|La iglesia (5.4-6) y los dichos de Jesús (5.1-3)|
|5.7-11|El ejemplo de los profetas y Job|
|5.12-20|Estos versículos representan una jurisprudencia eclesiástica primitiva (¿?)|

@@.source Fuente: Notas del Dr. Dean Deppe, Calvin Theological Seminary.@@
<table class="altgray"><tr><td>

Las siguientes ocho cartas del Nuevo Testamento son consideradas "cartas generales" o "cartas universales". Esto significa que estas cartas fueron escritas o a un público amplio o a destinatarios que desconocemos, en contraste con las cartas de Pablo, que fueron dirigidas a iglesias particulares (los Romanos, los Corintios, etc).

</td></tr><tr><td>

Algunos dicen que Hebreos no debe ser considerado una carta general porque fue dirigia a una iglesia de Hebreos (Cristianos Judíos). 

</td></tr><tr><td>

Pero en verdad solo Santiago y 1 Pedro fueron escritas para un público amplio, según el primer versículo de estos libros. Las demás cartas fueron escritas a personas o iglesias específicas y responden a situaciones específicas. Así que el nombre "cartas generales" no es la mejor descripción de esta colección de cartas. Por su lugar en el canon del Nuevo Testamento, parecen más bien "las cartas no paulinas" o "las cartas que no fueron escritas por Pablo".

*Hebreos es una carta anónima del primer siglo que habla de la relación entre el Judaísmo y el Cristianismo.
*Santiago es una carta que habla de varios temas morales e insiste en una vida cristiana consistente.
*1 Pedro fue escrita para consolar a iglesias que estaban bajo mucha persecución.
*2 Pedro fue escrita para defender el mensaje de Pedro y recordar a sus iglesias de ese mensaje antes de la inminente muerte de Pedro.
*1 Juan habla de varias maneras en que podemos distinguir falsos Cristianos y Cristianos verdaderos.
*2 Juan es una carta breve para animar a una iglesia a seguir caminando en la verdad.
*3 Juan es otra carta breve para instruir a su amigo Gayo, porque un anciano Diotrefes causó división en su iglesia.
*Judas es una carta con muchos paralelos con 2 Pedro, y fue escrita para denunciar a algunos falsos maestros que habían invadido a la iglesia de los destinatarios.

</td></tr></table>
<table class="altgray"><tr><td>

Podemos discernir seis diferentes narrativas a través de Apocalipsis:

</td></tr><tr><td>

    Los mensajes de Jesucristo a las siete iglesias (Caps. 1-3, 22.6-21)

</td></tr><tr><td>

    La adoración en el cielo y el reportaje de Juan (Caps. 4-5, 7.9-17, cap. 10, 11.15-19, 19.1-10, 22.6-12)

</td></tr><tr><td>

    El juicio sobre la tierra y sus habitantes

* Los primero seis sellos (cap. 6)
* El último sello y las siete trompetas (caps 8-9)
* Las siete copas (15.1, 15.5-8, cap 16)
* El juicio final (20.11-15)

</td></tr><tr><td>

    La guerra contra los enemigos de Dios

* El dragón (cap. 12, 20.1-10)
* Las dos bestias (11.7, cap. 13, 14.9-13, 16.10, 17.3, 17.8-17)
* La ramera de Babilonia (14.8, caps. 17-18)

</td></tr><tr><td>

    Los retratos de la iglesia

* Los santos/mártires (6.9-11, 15.2-4, 20.1-6)
* Los 144,000 y la gran multitud (cap. 7; 14.1-5)
* Los dos testigos (11.1-14)
* La mujer en el cielo y sus hijos (cap. 12)
* La visión de la meta final (21.1-22.5) - es una descripción de la novia (la iglesia)

</td></tr></table>
!!!Circunstancias

El autor les dice que no hay otro sacrificio adecuado si rechazan el sacrificio de Cristo (10.26). Ellos necesitaban una renovación de su valentía (5.11, 6.12, 12.3, 12.12-13) y de su esperanza (3:6; 6:18–20; 10:23–25; 11:1).

@@.source Fuente (adaptada): Lane, WBC@@

<hr>

!!!Propósito

El autor dice que ha escrito “brevemente” :-), y que su carta es una ''“palabra de exhortación.”'' Las secciones expositivas existen para apoyar las secciones hortatorias. Es decir, el propósito del autor es llegar a sus exhortaciones y advertencias, pero primero tiene que exponer las verdades que sirven de fundamento para estas exhortaciones.

''El propósito'' es fortalecer a los destinatarios para que no abandonen su fe en Cristo, ni por causa de la persecución de afuera, ni por la pereza espiritual de ellos mismos. El autor les advierte del juicio de Dios, y los atrae con invitaciones de acercarse a Dios.

En 1.1-4, Dios habla por medio de su Hijo. En 12.25, la exhortación es, “No desechéis al que habla.” Esta es el tema fundamental de Hebreos, según Lane.

“La exhortación implícita de perseverar en la fe es apoyada negativamente por una advertencia que el estado del corazón humano es visible a Dios, y positivamente por una intimación que con Jesús como su sumo sacerdote los lectores pueden venir con confianza ante este Dios y esperar encontrar la misericordia.” (Marshall, 608)
//    Fuentes: Leon Morris, Tyndale NT Commnetaries: Revelation, edición revisada. (Grand Rapids: Wm. B. Eerdmans, 1987); Robert H. Mounce, NICNT: The Book of Revelation, revisado. (Grand Rapids: Wm. B. Eerdmans, 1998); Grant R. Osborne, “Recent Trends in the Study of the Apocalypse”, en The Face of New Testament Studies. (Grand Rapids: Baker Academic, 2004), 476//

<table class="altgray"><tr><td>

    ''El acercamiento preterista'' dice que el libro de Apocalipsis se refiere únicamente a sucesos del primer siglo.

* Proponentes: Proponents: Charles, Sweet, Roloff, Schussler Fiorenza, Collins, Thompson, Barr, los Reconstructionistas Cristianos (fuente: Face of NT Studies)
* Leon Morris dice que este acercamiento hace que el libro no tenga relevancia para hoy, sólo para el primer siglo.
* Robert Mounce dice que este acercamiento implica que las profecías de Apocalipsis fueron equivocadas porque no fueron cumplidas en el primer siglo.

</td></tr><tr><td>

    ''El acercamiento historicista ''dice que el libro de Apocalipsis profetiza eventos específicos que han ocurrido a través de la historia, desde los días de Juan hasta los nuestros. Según los historicistas, los símbolos de Apocalipsis se refieren al papado, el surgimiento de Islam, la Reforma Protestante, etc.

* Proponentes: Joaquín de Fiore, los Franciscanos, los Reformadores, los Dispenscionalistas que siguen a Scofield en su interpretación de caps. 2-3.
* Este acercamiento fue popular durante la Reforma Protestante. Los reformadores dijeron que el Papa católico era la bestia de capítulo 13, y la Iglesia Católica Romana era la ramera de Babilonia de capítulos 17-18.m
* Leon Morris dice que este acercamiento hace que este libro no tenga sentido para sus primeros lectores en el primer siglo.
* Morris dice que otra debilidad de este acercamiento es que tiende limitar su enfoque a la historia de Europa occidental, y no considera la historia del resto del mundo.
* Los historicistas no se concuerdan con respecto a los sucesos históricos que supuestamente fueron profetizados por Apocalipsis. Su método tiende al sujetivismo, y los límites del conocimiento histórico de cada autor limita las posibilidades de su interpretación.

</td></tr><tr><td>

    ''El acercamiento futurista'' trata el libro como una ventana al futuro - un destello de la última generación antes de la segunda venida de Jesucristo.

*Proponentes: Justino Mártir, Ireneo, Ladd, Thomas (Fuente: Face of NT Studies)
*Leon Morris dice que esta interpretación reduce la relevancia del libro a aquella generación futura. Sin embargo, se puede responder que un conocimiento del futuro ayuda a toda generación a ubicarse en la historia y vivir de acuerdo a lo que se espera del futuro.

</td></tr><tr><td>

   '' El acercamiento idealista'' dice que el libro no se trata de detalles históricos particulares sino de principios teológicos generales que son evidentes en cada etapa de la historia humana.

*Proponentes: Milligan, Hendriksen, Hoekema, Hughes, Hays (Source: Face of NT Studies)
*Morris dice que este acercamiento hace que el libro sea relevante para toda generación, pero que falta un ancla histórico.

</td></tr><tr><td>

    En los últimos años, muchos comentaristas (Morris, Johnson, Roloff, Giesen, Mounce, Beale, Osborne y muchos más) han preferido un ''acercamiento ecléctico'', tomando los mejores aspectos de los acercamientos preterista, futurista e idealista. El presente autor apoya el acercamiento ecléctico, por las siguientes razones:

<span class="doublelist">

*Es evidente que Juan escribía para ayudar a sus lectores, y no para dar información acerca de eventos en un futuro lejano. Hay muchos paralelos en Apocalipsis con eventos del primer siglo: Roma como ciudad sobre siete colinas, la lista de bienes importados a Roma, el culto imperial, los paralelos entre las cartas en capítulos 2-3 y el trasfondo histórico de las siete ciudades, etc). Sin duda los primeros lectores veían muchos paralelos más, que ahora están perdidos a la historia. Así que un acercamiento preterista tiene un papel importante en la interpretación del libro.

*Juan pretende hablar del futuro. Muchas de las profecías que Juan menciona en su libro no se cumplieron en el primer siglo tal como fueron profetizadas. Creo que debemos interpretar Apocalipsis de la misma manera en que interpretamos los libros proféticos del Antiguo Testamento: debemos discernir entre cumplimientos cercanos y cumplimientos lejanos. Muchos de los libros proféticos contienen profecías que fueron cumplidas de manera limitada en su propio tiempo, pero que también tenían un cumplimiento mayor en Cristo Jesús. De la misma manera, Apocalipsis, mientras habla a situaciones del primer siglo, también apunta a realidades grandes que aún están por cumplirse. Además, muchos de los sucesos descritos en el libro se presentan como precursores de la segunda venida de Cristo. Así que, un acercamiento futurista también tiene un papel importante para entender el libro de Apocalipsis.

*En mi opinión, la popularidad del acercamiento historicista en siglos pasados es apoyo para la posición idealista. Cada siglo tiende a encontrar en Apocalipsis paralelos con su propia situación política, económica y religiosa. Apocalipsis toca el corazón de personas de todos los siglos. Vemos políticos corruptos, el culto de personalidad, opresión, conformismo, mártires, y sacrificios valientes en cada generación. Así que quiero afirmar la posición idealista también. En lugar de identificar los símbolos de Apocalipsis con un solo momento histórico particular, debemos reconocer que los símbolos de Apocalipsis señalan algo en Roma MAS algo al final de los siglos, MAS algo que vemos desarrollándose en nuestro tiempo.

</span>

</td></tr><tr><td>

    Mi posición no debe confundirse con la posición idealista. Al contrario. Creo que Apocalipsis necesita ser interpretado principalmente en referencia al primer siglo, y segundo en relación a los últimos tiempos. Solo entonces estaremos en la mejor posición para discernir su relevancia para nuestro propio contexto.

</td></tr></table>
<table class="altgray"><tr><td>

El autor de este recurso es amilenialista. Sin embargo, se considera importante reconocer las debilidades de este punto de vista:

</td></tr><tr><td>

 La cantidad de sus interpretaciones que van en contra de la lectura más natural de Ap. 20.

* Inserte una recapitulación en 20.1 donde uno espera una secuencia cronológica. La secuencia entre 19.20 y 20.10 también resulta engañadora.
* La obra del ángel en v. 1 es supuestamente la obra de Cristo en el primer siglo.
* Los mil años y la atadura de Satanás no son literales.
* Lo que aparece ser una resurrección resulta ser el estado intermediario.
* Un quiasmo complicado se necesita para ver la relación entre las dos muertes y las dos resurrecciones.

</td></tr><tr><td>

        Los eruditos advierten que amilenialismo depende de una sola interpretación del libro. El paralelismo progresivo de Hendriksen es debatido. Hay varias ideas acerca de la estructura de Apocalipsis. Hasta los que cree en la recapitulación dentro de Apocalipsis no están todos de acuerdo con las divisiones. Y muchos preguntan por qué estas divisiones no son señaladas formalmente como tal en Apocalipsis.

</td></tr><tr><td>

        En 20.4 los que son resucitados al principio de los mil años son las personas que resistieron a la bestia y el falso profeta. Pero amilenialistas por lo general consideran estos como personajes de los últimos tiempos. ¿Cómo es que los creyentes al principio de la época de la iglesia resistieron a personajes que vienen al final de esta época? En cambio, el premilenialismo parece una lectura más natural cuando dice que resistieron en caps. 13-19 y son resucitados en cap. 20.

</td></tr><tr><td>

        La experiencia, juntamente con textos como Lc. 22:3, Hch. 5:3, 2 Co. 4:3-4, 11:14, Ef. 2:2, 1 Ts. 2:18, 2 Ti. 2:26 y especialmente 1 Pedro 5:8, parece indicar que el diablo no está atado, sino muy activo en la presenta época. Además, si la atadura de Satanás en 20.2 habla de la obra de Cristo en la cruz, ¿implica que cuando Satanás es desatado en 20.3 que parte de la obra de la cruz fue deshecha? Además, 2 Ped. 2.4 describe una atadura del mundo demoníaco que precede la primera venida de Cristo. Parece que debemos entender una serie de limitaciones progresivas puestas sobre el mundo demoníaco.

</td></tr><tr><td>

        Ap. 20.4 no dice que los tronos estaban en el cielo. Además, 5.10, aunque no usa la palabra “trono”, específicamente dice que los creyentes reinarán en la tierra.

</td></tr><tr><td>

        Los amilenialistas interpretan “almas” en v. 4 literalmente, a pesar de que interpretan casi todo el resto del texto simbólicamente. Pero Juan puede “ver” estas almas, y ellas están sentadas en tronos. Tal vez debemos entender “almas” como “personas” y reconocer que Juan no está tratando de hablar de la antropología aquí.

</td></tr><tr><td>

        La proximidad de ἔζησαν a “la primera resurrección” en v. 6 mueve al lector a imaginar que las almas “vivieron” por estar reunidos con sus cuerpos. Una resurrección física es la lectura más natural.

</td></tr><tr><td>

        La objeción contra el premilenialismo que Ap. 20 no incluye todos los detalles no es relevante. Ellos simplemente dicen que hay profecías del AT que no parecen haber sido cumplidos todavía, p. ej., las profecías que dicen que Cristo reinará con un cetro de hierro, un símbolo de poder y autoridad que no puede ser resistidos. ¿Cuándo sucederá esto? ¿En la iglesia? ¿En el estado eterno? Premilenialistas dice que estas profecías y otras serán cumplidas más naturalmente en el milenio.

</td></tr><tr><td>

        Sí, dicen los premilenialistas, ellos creen en una rara mezcla de personas glorificadas y personas mortales en el milenio. Pero responden que la teología depende de la exégesis, no los instintos personales de lo que parece ser extraño o normal. Además, en esta época viven lado a lado creyentes regenerados, ciudadanos de la nueva raza humana, con seres humanos no regenerados. ¿Es menos raro esta combinación?

</td></tr><tr><td>

        ¿De dónde la rebelión? Solo se puede especular, dicen los premilenialistas. Ellos reconocen la fuerza de este argumento. Tienen por lo menos dos opciones:

* descendientes de personas no glorificadas.
* Puede ser que Cristo no destruye las naciones simpatizantes, solo las naciones opuestas a él.

</td></tr><tr><td>

        En cuanto al argumento de los demás textos del NT, que unen la segunda venida, las resurrecciones y el juicio final como un solo evento, los premilenialistas pueden responder que los profetas unían la primera y segunda venida de Cristo como si fuera un solo evento, y después resultó que fueron dos. Puede ser que esto es lo que sucede con estos textos, y Apocalipsis 20 habla con más precisión que ellos.

</td></tr></table>
|bluealtrows|k
|!Versículos|!Figuras|
|1-2|Dios se compara a un padre; Judas compara su relación con Dios como una relación entre esclavo y amo|
|3|Los Cristianos se comparan con hermanos; El acto de defender la fe cristiana se compara con un soldado defendiendo el terreno que ocupa|
|4|Los falsos maestros son como intrusos que entran a una casa a escondidas|
|5-7|El juicio es una imagen jurídica (6); además, es posible que las cadenas y la oscuridad de Judas 6 sean metafóricas|
|8|Los efectos del pecado son como la corrupción física de la carne|
|9| - |
|10|Los intrusos son como animales que siguen sus instintos en lugar de seguir la razón|
|11| - |
|12-13|Los intrusos se comparan a varias cosas: o manchas o arrecifes ocultos (véase la nota abajo); pastores de ovejas que solo se apacientan a si mismos; nubes que no producen lluvia; árboles sin fruto; olas del mar que echan espuma; cometas que vagan sin rumbo en la oscuridad de la noche|
|14-15| - |
|16| - |
|17-18|Los Cristianos se comparan con hermanos;|
|19| - |
|20-21|Los Cristianos se comparan con hermanos;El desarrollo espiritual es como la construcción (20)|
|22-23|El acto de rescatar a las personas de la falsa enseñanza se compara con el acto de rescatar a alguien que está por caer al fuego (23); La mancha que el pecado produce en la ropa de los pecadores se compara con las manchas que se producen por las funciones corporales|
|24-25|Cometer el error espiritual es como atropezar y caer (24)|

<br>

''Nota acerca de Judas 12''

*No es claro si la palabra @@.greek σπιλάδες@@ se refiere a una mancha en la ropa, o a un arrecife oculto que arruina al fondo de los barcos. Debe notarse que Judas se refiere a ropa manchada en v. 23.
|bluealtrows|k
|!Versículos|!Figuras|
|1-2|Una iglesia y sus miembros se describen como una mujer y sus hijos<br>- La verdad es personificada como si fuera una persona morando dentro del autor y sus lectores|
|3|Dios Padre y Jesús se describen como un literal padre y su literal hijo|
|4|Los miembros de una iglesia se describen como hijos<br>- Dios se describe como el padre de los creyentes<br>- La conducta se describe como el acto de andar|
|5|Una iglesia se describe como una mujer|
|6a|La conducta se describe como el acto de andar|
|6b|La conducta se describe como el acto de andar|
|7a| - |
|7b| - |
|8| - |
|9a|Creer la herejía se describe como correr adelante de otra persona y dejarla atrás|
|9b|Dios Padre y Jesús se describen como un literal padre y su literal hijo|
|10| - |
|11| - |
|12| - |
|13|Una iglesia y sus miembros se describen como una mujer y sus hijos|
<table class="altgray"><tr><td>

''Figuras familiales''

*Los Cristianos se describen como "hermanos" en vv. 3, 5-6, 10.
*El anciano refiere a Gayo como su hijo. (4)

</td></tr><tr><td>

''Figuras geográficas''

*La vida Cristiana se describe en vv 3-4 como un proceso de caminar por una senda o camino.

</td></tr></table>
//    Fuente: Gregory Beale and Sean M. ~McDonough, “Revelation”, in Commentary on the New Testament Use of the Old Testament. (Grand Rapids: Baker Academic, 2007).//

<table class="altgray"><tr><td>

    Juan alega que algunas profecías del Antiguo Testamento fueron directamente cumplidas en Apocalipsis

</td></tr><tr><td>

    La universalización: algunas cosas asociadas con Isreael en el AT son aplicadas a la iglesia

</td></tr><tr><td>

    Juan señala semejanzas entre textos del AT y cosas que Apocalipsis menciona

</td></tr><tr><td>

    La ironía: promesas aplicadas a Israel en el AT ahora son aplicadas a los creyentes Gentiles perseguidos por los Judíos (p. ej., Apocalipsis 3.9)

</td></tr><tr><td>

    Se usa muchas imágenes que provienen del AT

</td></tr><tr><td>

    Apocalipsis avanza temas que aparecen en el AT (la creación, el juicio, etc)

</td></tr><tr><td>

    Apocalipsis usa secciones del AT como 'prototipos' que influencian secciones enteras de Apocalipsis

</td></tr><tr><td>

    Juan imita el estilo literario del AT y hasta a veces distorciona el idioma griego para imitar patrones hebreas, todo con el fin de crear un 'efecto bíblico' sobre sus lectores.

</td></tr></table>
Las oraciones declarativas son oraciones gramaticales que declaran o afirman algo:

*Algunas declaran lo que pasó ('Los ángeles derramaron sus copas')
*Algunas declaran lo que el autor cree u opine ('Dios es amor', 'Me gustan los tacos')

La gran mayoría de las oraciones en Apocalipsis son oraciones declarativas, porque Juan está relatando lo que vio en su visión.
<table class="altgray"><tr><td>

Las siguientes oraciones  de 3 Juan son ''exhortaciones'' (oraciones imperativas): 

*//"Nosotros, pues, debemos acoger a tales personas, para que cooperemos con la verdad."// (8) 
**Técnicamente esta es una afirmación de lo que el autor piensa, pero funciona como afirmación por el verbo "deber."
*//"Amado, no imites lo malo, sino lo bueno."// (11a)
*//"Saluda tú a los amigos, a cada uno en particular."// (15c)

</td></tr><tr><td>

Versículo 15a es una ''oración optativa'' (una expresión de un deseo):

*//"La paz sea contigo."// (15a)

</td></tr><tr><td>

Las demás oraciones (en versículos 1-7, 9-10, 11b, 11c, 12-14, y 15b) son ''afirmaciones'' (oraciones declarativas).

</td></tr><tr><td>

No hay ''oraciones interrogativas'' (preguntas de verdad) en 3 Juan. Tampoco hay preguntas retóricas (oraciones en forma de preguntas que funcionan como afirmaciones).

</td></tr></table>
|bluealtrows|k
|1.2|"Gracia y paz os sean multiplicadas, en ''el conocimiento'' de Dios y de nuestro Señor Jesús."|
|1.3|"Todas las cosas que pertenecen a la vida y a la piedad nos han sido dadas por su divino poder, mediante ''el conocimiento'' de aquel que nos llamó por su gloria y excelencia;"|
|1.8|"Si tenéis estas cosas y abundan en vosotros, no os dejarán estar ociosos ni sin fruto en cuanto al ''conocimiento'' de nuestro Señor Jesucristo."|
|1.20|"Pero ante todo ''entended'' que ninguna profecía de la Escritura es de interpretación privada...."|
|2.20|"Ciertamente, si habiéndose ellos escapado de las contaminaciones del mundo por ''el conocimiento'' del Señor y Salvador Jesucristo, enredándose otra vez en ellas son vencidos, su último estado viene a ser peor que el primero."|
|2.21 (2x)|"Mejor les hubiera sido ''no haber conocido'' el camino de la justicia que, después de ''haberlo conocido'', volverse atrás del santo mandamiento que les fue dado."|
|3.3|"''Sabed'' ante todo que en los últimos días vendrán burladores, andando según sus propias pasiones...."|

@@.source Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
|bluealtrows|k
|1.4|"por medio de estas cosas nos ha dado preciosas y grandísimas promesas, para que por ellas lleguéis a ser participantes de la naturaleza divina, habiendo huido de ''la corrupción'' (φθορᾶς.) que hay en el mundo a causa de las pasiones."|
|2.12|"Esos hombres, hablando mal de cosas que no entienden, como animales irracionales nacidos para presa y ''destrucción'' (φθορὰν), ''perecerán'' (φθαρήσονται) en su propia ''perdición'' (φθορᾷ)...."|
|2.19|"Les prometen libertad, y son ellos mismos esclavos de ''corrupción'' (φθορᾶς), pues el que es vencido por alguno es hecho esclavo del que lo venció."|
|3.6|"por lo cual el mundo de entonces ''pereció'' (ἀπώλετο) anegado en agua."|
|3.9|"El Señor no retarda su promesa, según algunos la tienen por tardanza, sino que es paciente para con nosotros, no queriendo que ninguno ''perezca'' (ἀπολέσθαι), sino que todos procedan al arrepentimiento."|
|3.10|"Pero el día del Señor vendrá como ladrón en la noche. Entonces los cielos pasarán con gran estruendo, los elementos ardiendo serán ''deshechos'' (λυθήσεται) y la tierra y las obras que en ella hay serán quemadas."|
|3.11|"Puesto que todas estas cosas han de ser ''deshechas'' (λυομένων), ¡cómo no debéis vosotros andar en santa y piadosa manera de vivir...."|
|3.12|"...esperando y apresurándoos para la venida del día de Dios, en el cual los cielos, encendiéndose, serán ''deshechos'' (λυθήσονται), y los elementos, siendo quemados, se fundirán!"|
|bluealtrows|k
|1.20-21|"Pero ante todo entended que ninguna profecía de la Escritura es de interpretación privada, porque nunca la profecía fue traída por voluntad humana, sino que los santos hombres de Dios hablaron siendo inspirados por el Espíritu Santo."|
|2.16|"...y fue reprendido por su iniquidad, pues una muda bestia de carga, hablando con voz de hombre, refrenó la locura del profeta."|
|3.2|"...para que tengáis memoria de las palabras que antes han sido dichas por los santos profetas, y del mandamiento del Señor y Salvador, dado por vuestros apóstoles."|

@@.source Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
    //Source: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997)//

<hr>

    ¿Se ha dado cuenta de la manera en que las películas muestran las reacciones de los personajes cuando algo grande sucede alrededor de ellos? El libro de Apocalipsis lo hace también:

* En 1.17 Juan se desmaya al ver el Cristo glorificado
* En 5.4-5 Juan llora porque no hay nadie digno de abrir el rollo
* En 17.6 Juan exclama cuano ve a la gran prostituta borracha con la sangre de los santos
* En 19.10 Juan intena adorar a un ángel
* En 22.8-9 Juan nuevamente intenta adorar a un ángel
<span class="doublelist">

*''Obedecer los mandamientos de Dios'' (6)
*''Amar''
**Amarse unos a otros (5)
**Andar en amor (6)
*''Guardar la verdad y rechazar falsas doctrinas''
**Conocer la verdad (1), andar en la verdad (4)
**Reconocer la encarnación de Jesús (7)
**Cuidarse para no perder su recompensa (8)
**Perseverar en la doctrina de Cristo (9)
**No apoyar a los falsos maestros con su hospitalidad (10-11)
*''Esperar una visita del autor (12)''

</span>
-----

Hay cinco respuestas principales que el autor de Hebreos desea de los destinatarios de su carta, indicadas en el siguiente gráfico. Para más detalles véase [[Las respuestas principales deseadas por el autor de Hebreos]]. Temas relacionados: [[El tema de acercarse a Dios en Hebreos]] y [[El tema del sufrimiento en Hebreos]]

<img src="http://www.giffmex.org/images/hebreosrespuestas.gif">

-----

Aparte de las cinco respuestas principales que espera de los destinatarios de Hebreos, hay tres otras exhortaciones que el autor les da:

*Deberían ser fieles en sus matrimonios (13.4)
*Deberían eliminar la avaricia de entre ellos (13.5)
*Deberían someterse a sus pastores actuales (13.17)

-----
<table class="altgray"><tr><td>

Hay 54 imperativos en los 108 versículos del libro de Santiago. Es evidente que su énfasis es el desarrollo de la vida cristiana.

</td></tr><tr><td>

Las exhortaciones en Santiago se pueden categorizar según las cuatro áreas donde los destinatarios tenían respuestas inadecuadas a su situación:

*Exhortaciones a remediar sus estrategias inadecuadas frente a su pobreza|Exhortaciones a los destinatarios de Santiago a remediar sus estrategias inadecuadas frente a su pobreza
*Exhortaciones a superar los conflictos|Exhortaciones a los destinatarios de Santiago a superar los conflictos
*Exhortaciones a renovar su fe en Dios|Exhortaciones a los destinatarios de Santiago a renovar su fe en Dios
*Exhortaciones a dejar la hipocresía|Exhortaciones a los destinatarios de Santiago a dejar la hipocresía

</td></tr><tr><td>

Santiago 3.17-18 resulta ser un texto clave de la carta, porque menciona a cada una de las cuatro áreas donde los lectores necesitaban responder mejor. Véase [[Santiago 3.17-18 y las cuatro respuestas principales de la carta]].

</td></tr></table>
<table class="altgray"><tr><td>

Gayo debe sentir que ha hecho lo correcto en ayudar a los hermanos, y debe seguir ayudándolos con comida y hospedaje

<span class="indent1">//"…harás bien en encaminarlos como es digno de su servicio a Dios, para que continúen su viaje…"// (5-6)</span>

</td></tr><tr><td>

Gayo debe seguir el buen ejemplo de Demetrio, no el mal ejemplo de Diótrefes

<span class="indent1">//"Amado, no imites lo malo, sino lo bueno. El que hace lo bueno es de Dios, pero el que hace lo malo no ha visto a Dios. Todos dan buen testimonio de Demetrio"// (11-12)</span>

</td></tr></table>
<table class="altgray"><tr><td>

Las respuestas que el autor de 1 Juan esperaba de sus destinatarios se pueden agrupar en cinco categorías, indicadas en el siguiente gráfico.

<img src='https://www.giffmex.org/wiki/images/nt3/1juanrespuestas.gif'>

</td></tr><tr><td>

!!Obedecer los mandamientos de Dios:

3.22, 3.24. Solo los que lo hacen lo conocen de verdad. Su amor es perfeccionado en ellos (2.3, 2.5). Los que dicen que lo conocen pero no lo obedecen son mentirosos (2.4). Obedecerlo demuestra que amamos a Dios (5.2, 5.3). Su mandamiento es de amar (4.21). Sus mandamientos no son gravosos (5.3).

</td></tr><tr><td>

''Otras maneras de hablar de la obediencia:''

<span class="doublelist">

*Caminar en la luz, no en las tinieblas, porque Dios es luz, y no hay tinieblas en él. La luz conduce a la comunión y el perdón, las tinieblas al engaño y la mentira (1.6, 1.7).
*Hacer justicia: 2.29, 3.7, 3.10. Los que lo hacen son hijos de Dios (3.10).
*Hacer lo que agrada a Dios: 3.22
*No pecar, no seguir pecando: 3.6, 3.8

</span>

</td></tr><tr><td>

!!Creer en Jesús, no negarlo:

<span class="doublelist">

*Creer que Jesús es el Hijo de Dios (5.5, 5.10), creer en el nombre del Hijo de Dios (5.13) y en el nombre de Jesucristo (3.23). Los que no creen llaman a Dios un mentiroso (5.10).
*Los que creen que Jesús es el Cristo son nacidos de Dios (5.1)
*La fe es una victoria que vence al mundo (5.4)
*Los que niegan a Cristo son el anticristo, y niegan al Padre también (2.22). 
*Los que niegan al Hijo no tienen al Padre, pero los que confiesan al Hijo tienen al Padre (2.23)
*“Tener” al Hijo (5.12)
*Permanecer en él (2.27, 2.28)

</span>

</td></tr><tr><td>

!!Amar a Dios y a Jesús:

Cualquiera que ama al Padre ama al Hijo también (5.1). Debemos amar a Dios (5.2, 3). Si amamos a Dios amaremos a nuestro hermano (4.21).

</td></tr><tr><td>

!!Amar a los hermanos, no odiarlos:

<span class="doublelist">

*A los hermanos: 3.10, 3.14, 4.20. 
*Unos a otros: 3.11, 3.23, 4.7, 4.8, 4.11, 4.12.
*A los hijos de Dios: 5.2
*Vivir en amor: 4.16
*Porque Dios nos amó primero: 4.11, 4.19.
*No solo con palabras sino con acciones: 3.18.
*Tener compasión del hermano necesitado: 3.17. 
*Su amor se perfecciona en nuestro amor (4.12)
*Dar nuestras vidas por los hermanos como Cristo hizo por nosotros: 3.16. Esta es una definición del amor, 3.16, 4.10).
*No ser como Caín que odió y asesinó a su hermano. Ningún asesino tiene la vida eterna (3.12, 3.15)
*Los que aman a sus hermanos son hijos de Dios (3.10).
*El que ama a su hermano vive en la luz y no tropieza (2.10). El que odia está en tinieblas y cae (2.9, 11).
*El amor es la evidencia que pertenecemos a la verdad y nos tranquiliza en la presencia de Dios (3.19).
*El amor es la evidencia que hemos pasado de la muerte a la vida (3.14)
*El que dice que ama a Dios pero no ama a su hermano miente, porque es imposible amar a un Dios invisible si no amamos a las personas visibles (4.20). El que ama a Dios amará también a su hermano (4.21).
*No hay temor en el amor. El amor perfecto echa fuera al temor y perfecciona a las personas (4.18).
*(En las cartas de Juan la palabra griega para “amor” “amar”, etc ocurre 62 veces, de los 310 veces en todo el NT. Aun en el Evangelio de Juan la palabra solo ocurre 63 veces.)

</span>

</td></tr><tr><td>

!!Retener la tradición:

<span class="doublelist">

*Asegurar que permanezca en ellos lo que han escuchado desde el principio (2.24)
*No dejar que otro los engañe (3.7)
*Probar los espíritus para ver si vienen de Dios (4.1)
*Escuchar a los apóstoles (4.6)

</span>

</td></tr><tr><td>

!!Imitar a Jesús: 

*2.6, 3.1, 4.17b.

</td></tr><tr><td>

!!Odiar al mundo, no amarlo:

<span class="doublelist">

*Si alguien ama al mundo o las cosas del mundo, el amor del Padre no está en él (2.15). 
*Las cosas del mundo vienen del mundo, no del Padre (2.16).
*Los creyentes se purifican en esperanza (3.3)

</span>

</td></tr><tr><td>

!!Confesar el pecado, no negarlo

<span class="doublelist">

*Si negamos nuestro pecado, nos engañamos (1.8), llamamos a Dios un mentiroso y su palabra no tiene lugar en nuestras vidas (1.10)
*Si confesamos nuestros pecados, él nos perdonará y purificará (1.9)
*Orar por los pecados que no son de muerte (de otras personas), pero no orar por los pecados de muerte (5.16)

</span>

</td></tr><tr><td>

!!Exhortaciones misceláneas:

<span class="doublelist">

*No sorprenderse de que el mundo les odia (3.13)
*Conocer y confiar en el amor de Dios (4.16)
*Pedir según su voluntad (5.14)
*Huir de la idolatría (5.21)

</span>

</td></tr></table>
<table class="altgray"><tr><td>

Judas deseaba que los destinatarios ''defendieran la fe cristiana'' de la mala influencia de los hombres impíos

<span class="indent1">//«me ha sido necesario escribiros exhortándoos que contendáis ardientemente por la fe que ha sido una vez dada a los santos.»// (3)</span>

</td></tr><tr><td>

Judas deseaba que los destinatarios ''cuidaran su propia vida espiritual'':

<span class="doublelist">

* El verbo principal de vv 20-21 es //«''conservaos'' en el amor de Dios»//
* Las maneras en que deben conservarse en el amor de Dios son tres:
**//«''edificándoos'' sobre vuestra santísima fe»// (20) 
** //«''orando'' en el Espíritu Santo»// (20)
** //«''esperando'' la misericordia de nuestro Señor Jesucristo para vida eterna.»// (21)
* Mientras intentan salvar a otros, deben ''cuidarse de no ser contaminados ellos mismos'' por la maldad de las personas que quieren rescatar:
** //«y de otros tened misericordia con temor, ''aborreciendo aun la ropa contaminada por su carne''.»// (23)

</span>

</td></tr><tr><td>

Pero deben pensar más allá de su propia puridad. Judas les da la misión de ''intentar rescatar a las personas'' influenciadas por estos 'hombres impíos':

<span class="indent1"> //«A algunos que dudan, convencedlos.<br>A otros salvad, arrebatándolos del fuego;<br>y de otros tened misericordia con temor, aborreciendo aun la ropa contaminada por su carne.»// (22-23)</span>

Debemos entender estas tres frases como tres formas de decir lo mismo.

</td></tr></table>
!!Atender a las palabras de revelación que han recibido, y crecer en su conocimiento

2 Pedro enfatiza repetidamente la importancia de la mente y la memoria.

<span class="indent1">//Gracia y paz os sean multiplicadas, ''en el conocimiento de Dios y de nuestro Señor Jesús''. Como todas las cosas que pertenecen a la vida y a la piedad nos han sido dadas por su divino poder, ''mediante el conocimiento de aquel'' que nos llamó por su gloria y excelencia// (1.2-3)</span>

<span class="indent1">//vosotros también, poniendo toda diligencia por esto mismo, añadid a vuestra fe virtud; a la virtud, ''conocimiento'';// (1.5)</span>

<span class="indent1">//Porque si estas cosas están en vosotros, y abundan, no os dejarán estar ociosos ni sin fruto ''en cuanto al conocimiento'' de nuestro Señor Jesucristo.// (1.8)</span>

<span class="indent1">//Pero el que no tiene estas cosas tiene la vista muy corta; ''es ciego, habiendo olvidado'' la purificación de sus antiguos pecados.// (1.9)</span>

<span class="indent1">//Por esto, yo no dejaré de ''recordaros'' siempre estas cosas, aunque vosotros las sepáis, y estéis confirmados en la verdad presente. Pues tengo por justo, en tanto que estoy en este cuerpo, ''el despertaros con amonestación''; ''sabiendo'' que en breve debo abandonar el cuerpo, como nuestro Señor Jesucristo me ha declarado. También yo procuraré con diligencia que después de mi partida vosotros podáis en todo momento ''tener memoria de estas cosas''.// (1.12-15)</span>

<span class="indent1">//la palabra profética...a la cual hacéis bien en ''estar atentos'' como a una antorcha que alumbra en lugar oscuro// (1.19)</span>

<span class="indent1">//Ciertamente, si ''habiéndose ellos escapado de las contaminaciones del mundo'', ''por el conocimiento del Señor y Salvador Jesucristo'', enredándose otra vez en ellas son vencidos...// (2.20)</span>

<span class="indent1">//Porque mejor les hubiera sido no haber ''conocido'' el camino de la justicia, que después de haberlo ''conocido, volverse atrás del santo mandamiento que les fue dado.''// (2.20)</span>

<span class="indent1">//esta es la segunda carta que os escribo, y en ambas ''despierto con exhortación vuestro limpio entendimiento, para que tengáis memoria'' de las palabras que antes han sido dichas por los santos profetas, y del mandamiento del Señor y Salvador dado por vuestros apóstoles;// (3.1-2)</span>

<span class="indent1">//Mas, oh amados, ''no ignoréis'' esto...// (3.8)</span>

<span class="indent1">//creced en la gracia ''y el conocimiento'' de nuestro Señor y Salvador Jesucristo.// (3.18)</span>

!!Huir de los deseos pecaminosos y destructivos del mundo

2 Pedro habla de los deseos como fuente de corrupción y contaminación espiritual. El reto del Cristiano es escapar la influencia de estos deseos (los tres principales son la avaricia - el deseo desordenado para el dinero y las posesiones; la lujuria - el deseo desordenado para el placer sexual; la ambición - el deseo desordenado para el poder)

<span class="indent1">//habiendo huido de la corrupción que hay en el mundo a causa de la concupiscencia;// (1.4)</span>

<span class="indent1">//y libró al justo Lot, abrumado por la nefanda conducta de los malvados (porque este justo, que moraba entre ellos, afligía cada día su alma justa, viendo y oyendo los hechos inicuos de ellos)// (2.7-8) - la implicación es que los destinatarios deben sentir el mismo asco y la misma angustia hacia la iniquidad de los malvados</span>

<span class="indent1">//seducen con concupiscencias de la carne y disoluciones a los que verdaderamente ''habían huido de los que viven en error''.// (2.18)</span>

<span class="indent1">//Ciertamente, si ''habiéndose ellos escapado de las contaminaciones del mundo'', por el conocimiento del Señor y Salvador Jesucristo, enredándose otra vez en ellas son vencidos...// (2.20)</span>

!!Cultivan cualidades relacionadas con la santidad y la piedad

La vida del Cristiano no es únicamente negativa, de huir cosas negativas. Es también positiva, la cultivación de virtudes a través de la diligencia y la práctica.

<span class="indent1">//todas las cosas que pertenecen a la vida ''y a la piedad'' nos han sido dadas// (1.3)</span>

<span class="indent1">//vosotros también, poniendo toda diligencia por esto mismo, añadid a vuestra fe virtud; a la virtud, conocimiento; al conocimiento, dominio propio; al dominio propio, paciencia; a la paciencia, piedad; a la piedad, afecto fraternal; y al afecto fraternal, amor.// (1.5-7)</span>

<span class="indent1">//Porque si estas cosas están en vosotros, y abundan// (1.8) - es decir, las cosas mencionadas en 1.5-7</span>

<span class="indent1">//el que no tiene estas cosas// (1.9) - es decir, las cosas mencionadas en 1.5-7</span>

<span class="indent1">//Por lo cual, hermanos, tanto más procurad hacer firme vuestra vocación y elección;// (1.10)</span>

<span class="indent1">//cómo no debéis vosotros andar en santa y piadosa manera de vivir// (3.11)</span>

<span class="indent1">//procurad con diligencia ser hallados por él sin mancha e irreprensibles// (3.14)</span>

!!Cutlivar el amor y la paz entre ellos

Vale la pena llamar la atención a las relaciones interpersonales, que se mencionan dos veces.

<span class="indent1">//a la piedad, afecto fraternal; y al afecto fraternal, amor.// (1.7)</span>

<span class="indent1">//procurad con diligencia ser hallados por él sin mancha e irreprensibles, ''en paz''. // (3.14)</span>

!!Prepararse para resistir a los falsos profetas

Pedro les ha advertido de la venida inminente de falsos profetas. Pedro quiere que estén listos para su llegada, para poder resistir su mala influencia.

<span class="indent1">//habrá entre vosotros falsos maestros// (2.1)</span>

<span class="indent1">//sabiendo primero esto, que en los postreros días vendrán burladores// (3.3)</span>

<span class="indent1">//Así que vosotros, oh amados, sabiéndolo de antemano, guardaos, no sea que arrastrados por el error de los inicuos, caigáis de vuestra firmeza. // (3.17)</span>

!!Poner su esperanza en la segunda venida, y vivir de manera que apresura esta venida

Pedro usa la escatología, la doctrina de las últimas cosas, como fuente de motivación a la vida cristiana.

<span class="indent1">//''esperando y apresurándoos para la venida del día de Dios'', en el cual los cielos, encendiéndose, serán deshechos, y los elementos, siendo quemados, se fundirán! Pero ''nosotros esperamos'', según sus promesas, cielos nuevos y tierra nueva, en los cuales mora la justicia.// (3.12-13)</span>

<span class="indent1">//tened entendido que la paciencia de nuestro Señor es para salvación;// (3.15)</span>
<span class="doublelist">

*1.9-11, 2.1-13, 4.8-10, 4.13-16, 5.1-6
*Moo reconoce tres temas que Santiago tiene en común con el AT con respecto a la ley:
**Dios se preocupa por los pobres (2.5, cf. Sal. 68.5, Dt. 10.18)
**El pueblo de Dios debe demostrar la misma compasión de Dios a ellos (1.27, cf. Dt. 10.19, Am. 2.6-7)
**Los pobres son asociados con la justicia (2.5, cf. Sal. 10, 3.8-17, 72.2-4, Is. 29.19), mientras los ricos son asociados con la maldad (5.1-6).
*¿Es el rico en 1.10-11 un hermano, o no? Los comentaristas están divididos.

</span>

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
|bluealtrows|k
|Caps. 1-3|Cristo entre los candelabros, dictando cartas a las iglesias|
|Caps. 4-5|Cristo el León y el Cordero, digno de abrir los sellos del rollo|
|Caps. 6-11|Cristo el revelador, abriendo los sellos|
|Caps. 12-14|Cristo el recién nacido y el Cordero|
|Caps. 15-16|Cristo el que viene sobre las nubes para acosechar|
|Caps. 17-20|Cristo el guerrero sobre el caballo blanco|
|Caps. 21-22|Cristo el novio de la iglesia|
Hay una lista de virtudes en Santiago 3.17, una descripción de la sabiduría celestial. Después de la primera virtud, "pura", hay dos series de virtudes:

<span class="doublelist">

*Cuatro virtudes que empiezan con épsilon: eirenike, epieikes, eupeithes, y eleous.
*Tres virtues que empiezan con alfa: agaton, adiacritos, anipocritos.

</span>

@@.source Ralph P. Martin and Peter H. Davids, Dictionary of the Later New Testament and Its Developments, electronic ed. (Downers Grove, IL: InterVarsity Press, 2000).@@
<table class="altgray"><tr><td>

Un tema notable que reaparece varias veces en 1 Pedro es el contraste entre las cosas efímeras y perecibles, por un lado, y las cosas duraderas e indestructibles, por otro lado.

</td></tr><tr><td>

Pedro dice que los seguidores de Cristo Jesús recibirán una herencia "indestructible, incontaminada e inmarchitable" (1.4). Nuestra fe vale más que el oro que es "perecedero" (1.7). La sangre que nos redimió no es como cosas "perecederas", como el oro y la plata (1.18). 

</td></tr><tr><td>

(Nacimos "no de simiente perecedera, sino de simiente imperecedera, mediante la palabra de Dios que vive y permanece" (1.23). En contraste con esta palabra, los seres humanos son efímeros como las flores y el pasto, que rápidamente se secan y caen (1.24-25).

</td></tr><tr><td>

El tema reaparece dos veces más. En 3.7 Pedro exhorta a las mujeres a que tengan una belleza "incorruptible". Y en 5.4, Pedro promete a los ancianos fieles una corona "inmarcesible." 

</td></tr></table>
<span class="doublelist">

#Es mencionado en las listas de los hermanos de Jesús. Además, los hermanos de Jesús no creyeron en Jesús antes de su resurrección (Mc. 3.21, 6.3, Jn. 7.5).
#El Señor apareció a él después de su resurrección (1 Co. 15.7).
#Estuvo presente el día de Pentecostés (Hch. 1.14)
#Era un líder (o el líder principal) en la iglesia en Jerusalén (Hch. 15, 21.18)
#Conoció a Pablo y apoyó al apóstol en el concilio de Jerusalén (Gl. 1.19, 2.9, Hch. 15)
#Pero era un líder del grupo que enfatizaba la circuncisión (Gl. 2.12)
#Convenció a Pablo a demostrar su obediencia a la ley (Hch. 21.24).
#Tiene una posición muy exaltada en la literatura extrabíblica.
##Llamado “Santiago el Justo”, “Obispo”, “Revelador de misterios secretos”
#Eusebio lo describió como un hombre muy ascético, un hombre con “rodillas de camello” porque oraba tanto tiempo de rodillas.
#Murió como mártir alrededor del año 62 d.c. por la mano de los judíos. Una tradición dice que fue apedreado. Otra dice que fue aventado del pináculo del templo. Supuestamente era tan popular en Jerusalén que Agripa removió al Sumo Sacerdote Anas debido a la muerte de Jacobo. Supuestamente algunos Judíos no cristianos creyeron que su muerte fue la causa de la destrucción de Jerusalén.

</span>
<table class="altgray"><tr><td>

Hay un ''diablo'' que ha pecado desde el principio. Los que pecan son del diablo (3.8). Los que no son creyentes son “hijos del diablo” (3.10).

</td></tr><tr><td>

Hay un ''maligno'' que los creyentes han vencido (2.13, 2.14). Este maligno controla al mundo (5.19), pero no puede lastimar a los creyentes (5.18). Caín pertenecía al maligno y asesinó a su hermano. Sus acciones eran malas (3.12)

</td></tr><tr><td>

El que niega que Jesús es el Cristo es el ''anticristo'' (2.22). Hay anticristos que salieron y no se quedaron con Juan y sus colegas. Su salida es evidencia que no pertenecían al Cristianismo (2.18-19). Hay un espíritu de anticristo que los lectores sabían que venía, y que ya llegó al mundo (4.3).

</td></tr><tr><td>

Hay ''falsos profetas'' que han salido al mundo (4.1). Son del mundo, hablan desde la perspectiva del mundo, y el mundo los escucha (4.5). Ellos son los que quieren engañar a los lectores (2.26, 3.7).

</td></tr><tr><td>

Juan habla del ''“mundo”'' en un sentido negativo, como un sistema humano que se opone a Dios (2.15, 16, 17; 3.1, 4.1, 4.3, 4.4, 4.5; 5.4, 5.5, 5.19). El mundo no conoce a “nosotros” (¿los creyentes? ¿los apóstoles?) porque no conoció a Dios (3.2). El mundo odia a los creyentes (3.13). El mundo consiste en los deseos del pecador, la codicia de sus ojos, y el jactarse de lo que tiene y hace (2.16). Juan también habla del mundo en un sentido más néutro, el mundo humano en general (2.2, 4.9, 4.14, 4.17)

</td></tr><tr><td>

Hay ''espíritus'' que no vienen de Dios (4.1), y se conocen porque ellos no confiesan a Jesús (4.3). Hay un espíritu de error (4.6).

</td></tr><tr><td>

''El que está en el mundo'' (¿el diablo? ¿El anticristo?) tiene menos poder que Dios (4.4).

</td></tr><tr><td>

Los inconversos no conocen a Dios (4.8). No han visto o conocido a Jesús (3.6). No son de Dios y no “nos” escuchan (probablemente quiere decir que no escuchan a Juan y sus colegas (4.6).

</td></tr></table>
!!!Los 24 ancianos

<table class="altgray"><tr><td>

        No hay paralelos para los 24 ancianos en el AT o en la literatura judía.

</td></tr><tr><td>

        Hendriksen dice que representan la iglesia. El número 24 representa las 12 tribus de Israel y los 12 discípulos.

</td></tr><tr><td>

Sin embargo, otros comentaristas (Mounce, Ladd) dicen que varios textos muestran que son distintos de la iglesia:

*'' 5.8-10''
** Los ancianos manejan las oraciones de los santos, indicando que son superiores a los santos porque tienen esta habilidad y función. En 8.3 es un ángel que tiene esta función.
** Hay un punto textual importante en 5.9 y 10: Los textos inferiores dicen “…nos has redimido….Nos has hecho reyes….” La lectura de la Reina Valera está basada en estos textos. Los textos superiores dicen “…has redimido gente….De ellos hiciste un reino….” La lectura de la Nueva Versión Internacional está basada en estos textos superiores. Si aceptamos la lectura de la NVI, los seres vivientes
*'' 7.9-11''
** Los ancianos parecen ser distintos de la gran multitud.
* ''7.13-14''
** Uno de los ancianos habla de la compañía de los santos como si no fuera parte de ellos.
** 14.3: Son distintos de los 144,000.

</td></tr><tr><td>

        Mounce y Ladd dice que los ancianos son una orden especial de ángeles.

* Tienen vestiduras blancas como los ángeles usan en otros textos.
* Salmo 89.7 habla de Dios rodeado por criaturas así

</td></tr></table>

!!!Los cuatro seres vivientes

<table class="altgray"><tr><td>

        Cada ser viviente tiene el aspecto de algún sector de la creación animal. Ladd dice que estos seres o representan la creación misma con su adoración, o que representan ángeles que reinan sobre la creación.

</td></tr><tr><td>

        Hendriksen dice que solo la segunda opción de Ladd es posible. Son ángeles y no la creación. Pero si aceptamos que son ángeles, ¿por qué no pueden ser ángeles que tienen alguna autoridad sobre la creación o que representan la creación ante Dios? ¿Podemos decir que ambas cosas son correctas?

</td></tr><tr><td>

        El trasfondo de los seres vivientes es Ezequiel 1 y 10. Ezequiel 10.20 dice específicamente que son querubines. Hay diferencias menores entre Ezequiel y Apocalipsis, pero las similitudes son fuertes.

</td></tr></table>
2 Pedro menciona a los ángeles dos veces: el encarcelamiento de los ángeles malvados (2.4—véase también Judas 6) y la virtud de los ángeles buenos, que no maldicen a otros seres celestiales (2.11).
    //Fuente: Wilson, 58-59//

    ''Los ángeles''

<span class="doublelist">

* Un ángel de Cristo (1.1)
* Los ángeles de las siete iglesias (1.16, 1.20, 2.1, 2.8, 2.12, 2.18, 3.1, 3.7, 3.14)
* Ángeles de Cristo (3.5)
* Un ángel poderoso (5.2)
* Ángeles alrededor del trono (5.11, 7.11)
* Cuatro ángeles sobre los cuatro ángulos de la tierra (7.1-2)
* Un ángel del oriente (7.2-3)
* Siete ángeles con siete trompetas (8.2, 8.6-8, 8.10, 8.12, 9.1, 9.13, 11.15)
* Un ángel con un incensario de oro (8.3-5)
* El sexto ángel (9.14)
* Cuatro ángeles atados al río Eufrates (9.14-15)
* Un ángel poderoso que desciende del cielo (10.1-11)
* Miguel y sus ángeles (12.7)
* Un ángel en medio del cielo (14.6)
* Un segundo ángel en medio del cielo (14.8)
* Un tercer ángel en medio del cielo (14.9-11)
* Un ángel saliendo del templo (14.15)
* Otro ángel saliendo del templo en el cielo (14.17-19)
* Un ángel a cargo del fuego del altar (14.18)
* Siete ángeles vestidos de lino limpio y cintos de oro (15.1, 15.6-8)
* Siete ángeles con siete copas (16.1-4, 16.8, 16.10, 16.12, 16.16)
* Un ángel a cargo de las aguas (16.5)
* Uno de los siete ángeles con siete copas (17.1-3, 17.7, 17.15)
* Un ángel con gran autoridad que desciende del cielo (18.1-3)
* Un ángel poderoso (18.21-24)
* Un ángel (implícito), consiervo de Juan (19.9-10)
* Un ángel parado en el sol (19.17-18)
* Un ángel que viene del cielo con la llave del abismo y una gran cadena (20.1-3)
* Uno de los siete ángeles con las copas, que tenía una caña de medir de oro (21.9, 21.15-21, 22.1-6, 22.8-11)
* Doce ángeles (21.12)
* Un ángel de Cristo (22.16)

</span>

    ''Los demonios''

<span class="doublelist">

* El ángel del abismo (Abadón, Apolyón) (9.11)
* Demonios (9.20)
* Los ángeles del dragón (12.7-9)
* Espíritus que aparecen como ranas (16.13-14)
* Demonios y todo espíritu maligno (18.2)
* (¿Las langostas en 9.3-11?)

</span>
|bluealtrows|k
|!2.18-22|Hijitos, ya es el último tiempo. Según vosotros oísteis que el ''Anticristo'' viene, así ahora han surgido ''muchos anticristos''; por esto conocemos que es el último tiempo. Salieron de nosotros, pero no eran de nosotros, porque si hubieran sido de nosotros, habrían permanecido con nosotros; pero salieron para que se manifestara que no todos son de nosotros.<br> Vosotros tenéis la unción del Santo y conocéis todas las cosas. Os he escrito, no porque seáis ignorantes de la verdad, sino porque la conocéis, y porque ninguna mentira procede de la verdad. ¿Quién es el mentiroso, sino el que niega que Jesús es el Cristo? Este es el anticristo, pues niega al Padre y al Hijo.|
|!4.1-5|Amados, no creáis a todo espíritu, sino probad los espíritus si son de Dios, porque muchos falsos profetas han salido por el mundo. En esto conoced el Espíritu de Dios: todo espíritu que confiesa que Jesucristo ha venido en carne, es de Dios; y todo espíritu que no confiesa que Jesucristo ha venido en carne, no es de Dios; y este es ''el espíritu del Anticristo'', el cual vosotros habéis oído que viene, y que ahora ya está en el mundo.<br>Hijitos, vosotros sois de Dios y los habéis vencido, porque mayor es el que está en vosotros que el que está en el mundo. Ellos son del mundo; por eso hablan de las cosas del mundo y el mundo los oye.|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<table class="altgray"><tr><td>

    El dragón amenaza a Jesús sin éxito (vv. 1-6)

</td></tr><tr><td>

    El dragón batalla contra Miguel, y pierde (vv. 7-12)

</td></tr><tr><td>

    El dragón amenaza a los mártires, pero ellos lo 'vencen' porque mueren sin renunciar a su fe (v. 11)

</td></tr><tr><td>

    El dragón amenaza a la mujer celestial (el pueblo de Dios del AT y NT) sin éxito, vv. 13-16)

</td></tr><tr><td>

    El dragón hace guerra contra los hijos de la mujer (esto se refiere al contenido de cap. 13, la persecución de los creyentes por la bestia y el falso profeta)

</td></tr></table>
// Fuente: Wilson, 44//

<hr>

* Amarillo (9.17)
* Azúl (9.17)
* Blanco (1.14, 2.17, 3.4, 3.5, 3.18, 4.4, 6.2, 6.11, 7.9, 7.13, 7.14, 14.14, 19.11, 19.14, 20.11)
* Dorado (1.13, 15.6)
* Escarlata (17.4, 18.16, cf. 18.12)
* Negro (6.5, 6.12)
* Púrpura (17.4, 18.16, cf. 18.12)
* Rojo (6.4, 12.3)
* Verde (6.8, 8.7, 9.4)
* Un arcoiris (4.3, 10.1)
!!!El premilenialismo (premilenarismo) dispensacionalista

<table class="altgray"><tr><td>

        Enseña que la iglesia será arrebatada por 7 años de Gran Tribulación, y que Cristo vendrá al final para establecer un milenio literal en la tierra. Después habrá una rebelión final, y después de la victoria final de Jesús, se iniciará el juicio final y el estado eterno.

</td></tr><tr><td>

        Ventajas: énfasis en la escatología que en círculos reformados no es tan prominente; su perspectiva les da motivación para evangelizar.

</td></tr><tr><td>

        Desventajas: muy pesimista acerca de este mundo; desinclinados a involucrarse en la acción social para mejorar al mundo.

</td></tr><tr><td>

        Los teólogos reformados rechazan al dispensacionalismo por varias razones hermenéuticas y teológicas. Su perspectiva sobre el milenio es igual que la de los premilenialistas moderadas. Trataremos los dos puntos de vista juntas.

</td></tr></table>

!!!El premilenialismo (premilenarismo) moderado o histórico

<table class="altgray"><tr><td>

        Enseña que Cristo vendrá para establecer su reino en la tierra. Después habrá una rebelión final, y después de la victoria final de Jesús, se iniciará el juicio final y el estado eterno.

</td></tr></table>

!!!El posmilenialismo (posmilenarismo)

<table class="altgray"><tr><td>

        Enseña que el reino de Cristo es su reino actual en los corazones. En esta época la iglesia va convirtiendo a las naciones, y cuando las naciones se convierten habrá un largo período de paz, los mil años. Al final del milenio habrá una rebelión y Cristo vendrá.

</td></tr><tr><td>

        Ventajas: optimismo, activismo en el mundo, reconocimiento de los logros de las iglesias.

</td></tr><tr><td>

        Desventajas: tendencia de olvidarse de lo sobrenatural y tratar de establecer el reino de Dios por esfuerzos humanos (p. ej, el evangelio social).

</td></tr><tr><td>

        En contra de posmilenialismo: la experiencia y la Biblia demuestran que el mundo no está mejorándose, sino que hay un crecimiento gradual de maldad, apostasía, y persecución. No parece que podemos esperar un período de paz donde la mayoría de las personas son cristianas.

</td></tr></table>

!!!El amilenialismo (amilenarismo)

<table class="altgray"><tr><td>

        Enseña que esta época desde la resurrección hasta la segunda venida es el reino, el milenio. Hay un crecimiento gradual, tanto de la iglesia como de la maldad. Al final de este tiempo habrá el rebelión final, y Cristo vendrá para juzgar y para establecer al estado eterno.

</td></tr></table>
Los ''debates principales'' entre eruditos acerca de Judas son los siguientes:

<span class="doublelist">

*¿Judas escribió esta carta, o fue una carta seudónima, o sea escrita en su nombre por otra persona?
*Debido a la similitud entre 2 Pedro y Judas, ¿Cuál de las dos cartas fue escrita primera, e influenció a la otra?
*¿Se refiere v. 6 a Génesis 6.1-4 o no? La mayoría de los eruditos dicen que v. 6 se trata de la interpretación que 1 Enoc da a Génesis 6.1-4, que los hijos de Dios eran ángeles que tuvieron relaciones sexuales con mujeres. Otros dicen que los ángeles no pueden tener relaciones sexuales, e insisten que los hijos de Dios en Gén. 6 fueron príncipes, y que Judas se refiere a una caída de los ángeles antes de los relatos de Genesis 1-3.
*¿La frase "otra carne" en v. 7 se refiere a las relaciones homosexuales, o a las relaciones entre seres humanos y ángeles?
*¿Son dos grupos o tres mencionados en vv. 22-23? Los manuscritos griegos difieren entre sí.

</span>
<table class="altgray"><tr><td>

La lista larga de regiones indica que era una carta circular. Es una carta a un grupo de creyentes en una región ámplia pero específica.

</td></tr><tr><td>

Acerca de las regiones de Ponto, Galacia, Capadocia, Asia y Bitinia (1.1), podemos decir lo siguiente:

*Eran zonas generales del norte de Asia Menor, lo que ahora es Turquía (véase la imagen abajo).
*Se presentan en el orden de la ruta que el mensajero tomaría para entregar la carta.
*Tres de estos lugares, Capadocia, Ponto y Asia, se mencionan en Hechos 2.9-10. Eran regiones representadas por las multitudes presentes en Jerusalén para el día de Pentecostés.
*El Espíritu no permitió a Pablo evangelizar estas regiones, según Hechos 16.6-10. (nota: Pablo fue a la región Galacia del sur, y escribió una carta a los creyentes de esa región, pero no tenía relación con la Galacia del norte, adonde fue dirigida la presente carta).
*Pedro no evangelizó a sus lectores. En 1.12 él menciona a los que les predicaron el evangelio.

</td></tr><tr><td>

<img src='https://www.giffmex.org/wiki/images/nt3/1pedromapa.JPG'>

</td></tr><tr><td>

Por muchos siglos se creía que los lectores eran Judíos, en gran parte por sus muchas referencias al Antiguo Testamento, combinadas con sus referencias a sus lectores como expatriados en 1.1. Sin embargo, los eruditos de hoy en día han llegado a un consenso de que hay ámplia evidencia que sus destinatarios fueron Gentiles.

*1.14, 1.18, 2.10, 4.3 son textos bastantes claros que los lectores eran paganos antes de convertirse.
*2.25 y 3.6 no son tan claras, pero también dan la impresión de que no eran Judíos antes de convertirse.

</td></tr><tr><td>

Aunque Pedro dijo en Gl. 2.7, 9 que iba a trabajar con los Judíos, no debemos asumir que //nunca// trabajaba con Gentiles. Más bien la Biblia da evidencia del ministerio de Pedro entre los Gentiles (Gl. 2.12, Hch. 10.34-38, 15.7-11)

</td></tr><tr><td>

¿Eran nuevos convertidos? Es posible. Pedro los compara con infantes en 2.2, y se refiere al bautismo en 3.21. Sin embargo, no podemos estar seguros.

</td></tr></table>
No sabemos mucho acerca de los destinatarios de Judas.

<span class="doublelist">

* //¿Eran Judíos o Gentiles?// Posiblemente Judas está escribiendo a Gentiles, y por eso menciona “nuestra común salvación” en v. 3. En otras palabras, “la salvación que ustedes Gentiles y nosotros Judíos compartimos.” Pero su carta presume que sus lectores entienden los ejemplos del AT y de Enoc que usa. Esta familiaridad sería más probable si sus lectores eran Judíos. Simplemente no sabemos.
* //¿Dónde vivían?// Las varias sugerencias no son nada más que conjecturas.
* Podemos por lo menos asumir que Judas escribe a una iglesia específica, porque se refiere a ellos como “vosotros”, y habla de falsos maestros que han entrado entre ellos. Además, sabemos que los recipientes oyeron las enseñanzas directamente de los apóstoles (17-18).

</span>
    //Texto: NVI//

<hr>

<span class="doublelist">

* ¡En esto consisten la perseverancia y la fidelidad de los santos! (13.18)
* En esto consiste la sabiduría: el que tenga entendimiento, calcule el número de la bestia, pues es número de un ser humano: seiscientos sesenta y seis. (13.10b)
* ¡En esto consiste la perseverancia de los santos, los cuales obedecen los mandamientos de Dios y se mantienen fieles a Jesús! (14.12)
* ¡En esto consisten el entendimiento y la sabiduría! Las siete cabezas son siete colinas sobre las que está sentada esa mujer. (17.9)

</span>
    //Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI.//

<hr>

<span class="doublelist">

Varios elementos se encuentran tanto a la conclusión de Apocalipsis como a la introducción, formando inclusios:

* Referencias a la segunda venida al principio (1.7) y al final (22.7, 12, 20) del libro
* Referencias a la autenticidad de las visiones (1.10-11, 22.6)
* Bendiciones a los que leen (1.3) y guardan (22.7) las palabras del libro
* Referencias al libro como profecía (1.3, 22.7)
* Referencias al Alfa y Omega: Dios como el Alfa y Omega en 1.8, y Jesucristo como el Alfa y Omega en 22.13.
* Indicaciones que el libro será leída en voz alta en las iglesias. Una bendición al que escucha (1.3) y una advertencia al que escucha (22.18-19,
* (1.3, 22.18)
* El hecho que visión es de Dios, dada a Jesucristo, mediado por su ángel (1.1, 22.6, 22.16)
* Las cosas que deben de suceder pronto (1.1, 22.6)

</span>
* Saludo de gracia (1.4) y bendición de gracia (22.21)
* El tiempo está cerca (1.3, 22.10)
Hay una gran variedad de lugares adonde el libro de Apocalipsis nos lleva:

<span class="doublelist">

* Desde los abismos hasta los cielos
* Desde la tierra y hasta el mar
* Los cuatro ángulos de la tierra
* El trono de Dios y el trono de Satanás
* El lago de fuego y el mar de cristal
* Jerusalén, el Monte Sión, Sodoma, Egipto, Armagedón, Gog y Magog, Bablionia y la nueva Jerusalén
* El santuario del tabernáculo del testimonio
* La isla de Patmos y las siete ciudades en Asia menor en caps. 2-3
* Montañas, cuevas, ríos, desiertos, el río Éufrates
* Hades
* Nuevos cielos y nueva tierra
* Un lagar
* Véase la frase en 5.3 y frases similares, y la frase en 5.6 y frases similares

</span>
Los merismos son referencias al primer y el último artículo de una serie para representar toda la serie. Apocalipsis usa tres merismos:

*El Alfa y la Omega, 1.8, 21.6, 22.13
*El primero y el postrero, 1.17, 2.8, 22.13
*El principio y el fin, 21.6, 22.13

@@.source Fuente: Wilson, 54@@
|bluealtrows|k
|! Palabra o frase griega |! Traducción |! Frecuencia |! Versículos |
|ὁ θεός|Dios| 58x |1.1, 1.2, 1.9, 2.7, 5.9, 6.9, 7.11, 7.15, 7.17, 8.2, 8.4, 9.4, 9.13, 10.7, 11.1, 11.11, 11.16 (2x), 11.19, 12.5, 12.6, 12.17, 13.6, 14.4, 14.7, 14.10, 14.12, 14.19, 15.1, 15.2, 15.3, 15.8, 16.1, 16.9, 16.19, 16.21, 17.17 (2x), 18.5, 18.20, 19.4, 19.5, 19.9, 19.10, 19.17, 20.4, 20.6, 21.2, 21.3 (3x), 21.10, 21.11, 21.23, 22.1, 22.3, 22.9, 22.18, 22.19|
|ἀρνίον|El Cordero| 25x |5.6, 5.8, 5.13, 6.1, 6.16, 7.9, 7.10, 7.14, 12.11, 14.1, 14.4 (2x), 14.10, 15.3, 17.14 (2x), 19.7, 19.9, 21.9, 21.14, 21.22, 21.23, 21.27, 22.1, 22.3 |
|τὸ πνεῦμα |El Espíritu| 13x |1.10, 2.7, 2.11, 2.17, 2.29, 3.6, 3.13, 3.22, 4.2, 14.13, 17.3, 21.10, 22.17|
| Ἰησοῦ|Jesús| 9x |1.9 (2x), 12.17, 14.12, 17.6, 19.10 (2x), 20.4, 22.16|
|τοῦ καθημένου ἐπὶ τοῦ θρόνου |El que estaba sentado en el trono| 9x |4.9, 4.10, 5.1, 5.7, 5.13, 6.16, 7.15, 20.11, 21.5|
|τῷ θεῷ ἡμῶν |Nuestro Dios| 6x |5.10, 7.3, 7.12, 12.10 (2x), 19.1|
|τοῦ θεοῦ μου |Mi Dios| 5x |3.2, 3.12 (4x)|
|τὰ ἑπτὰ πνεύματα τοῦ θεοῦ|los siete espíritus de Dios| 4x |1.4, 3.1, 4.5, 5.6|
|τῇ κυριακῇ |Señor| 3x |1.10, 14.13, 15.4|
|τῷ ζῶντι εἰς τοὺς αἰῶνας τῶν αἰώνων|El que vive por los siglos de los siglos| 3x |4.9, 4.10, 10.6 |
|κύριε ὁ θεὸς ὁ παντοκράτωρ |Señor Dios Todopoderoso| 3x |15.3, 16.7, 21.22|
|Ἰησοῦ Χριστοῦ|Jesucristo| 2x |1.1, 1.2|
|ὅμοιον υἱὸν ἀνθρώπου|uno semejante al Hijo del hombre| 2x |1.13, 14.14|
|ὁ πρῶτος καὶ ὁ ἔσχατος, καὶ ὁ ζῶν|el primero y el último, el que vive| 2x |1.17-18, 2.8|
|τῷ θεῷ τοῦ οὐρανοῦ|El Dios del cielo| 2x |11.13, 16.11 |
|τοῦ Χριστοῦ αὐτοῦ|Su Cristo| 2x |11.15, 12.10|
|τοῦ θεοῦ τοῦ παντοκράτορος|Dios Todopoderoso| 1x |16.14, 19.15 |
|κύριος ὁ θεὸς |Señor Dios| 2x |18.8, 22.5|
|τοῦ καθημένου ἐπὶ τοῦ ἵππου|el que montaba el caballo| 2x |19.19, 19.21|
|τοῦ Χριστοῦ |Cristo| 2x |20.4, 20.6|
|κύριε Ἰησοῦ|El Señor Jesús| 2x |22.20, 22.21|
|ὁ ὢν καὶ ὁ ἦν καὶ ὁ ἐρχόμενος|el que es y que era y que ha de venir| 1x |1.4 |
|Ἰησοῦ Χριστοῦ, ὁ μάρτυς ὁ πιστός, ὁ πρωτότοκος τῶν νεκρῶν καὶ ὁ ἄρχων τῶν βασιλέων τῆς γῆς|Jesucristo, el testigo fiel, el primogénito de los muertos y el soberano de los reyes de la tierra| 1x |1.5 |
|τῷ θεῷ καὶ πατρὶ αὐτοῦ |Dios, su Padre| 1x |1.6 |
|τὸ Ἄλφα καὶ τὸ Ὦ|el Alfa y la Omega| 1x |1.8 |
|ὁ θεός, ὁ ὢν καὶ ὁ ἦν καὶ ὁ ἐρχόμενος, ὁ παντοκράτωρ|Dios, el que es y que era y que ha de venir, el Todopoderoso | 1x |1.8 |
|ὁ κρατῶν τοὺς ἑπτὰ ἀστέρας ἐν τῇ δεξιᾷ αὐτοῦ, ὁ περιπατῶν ἐν μέσῳ τῶν ἑπτὰ λυχνιῶν τῶν |El que tiene las siete estrellas en su diestra, el que camina en medio de los siete candelabros de oro| 1x |2.1 |
|ὁ ἔχων τὴν ῥομφαίαν τὴν δίστομον τὴν ὀξεῖαν|El que tiene la espada aguda de dos filos| 1x |2.12 |
|ὁ υἱὸς τοῦ θεοῦ|El Hijo de Dios| 1x |2.18 |
|ὁ ἔχων τὰ ἑπτὰ πνεύματα τοῦ θεοῦ καὶ τοὺς ἑπτὰ ἀστέρας· |El que tiene los siete espíritus de Dios y las siete estrellas| 1x |3.1 |
|τοῦ πατρός μου |Mi Padre| 1x |3.5 |
|ὁ ἅγιος, ὁ ἀληθινός, ὁ ἔχων τὴν κλεῖν Δαυίδ, ὁ ἀνοίγων καὶ οὐδεὶς κλείσει, καὶ κλείων καὶ οὐδεὶς ἀνοίγει|el Santo, el Verdadero, el que tiene la llave de David, el que abre y ninguno cierra, y cierra y ninguno abre| 1x |3.7 |
|ὁ Ἀμήν, ὁ μάρτυς ὁ πιστὸς καὶ ἀληθινός, ἡ ἀρχὴ τῆς κτίσεως τοῦ θεοῦ|El Amén, el testigo fiel y verdadero, el Principio de la creación de Dios| 1x |3.14 |
|κύριος ὁ θεὸς ὁ παντοκράτωρ, ὁ ἦν καὶ ὁ ὢν καὶ ὁ ἐρχόμενος|Señor Dios todopoderoso, el que era, que es, y el que ha de venir| 1x |4.8 |
|ὁ κύριος καὶ ὁ θεὸς ἡμῶν|Señor y Dios nuestro| 1x |4.11 |
|ὁ λέων ὁ ἐκ τῆς φυλῆς Ἰούδα, ἡ ῥίζα Δαυίδ|el León de la tribu de Judá, la raíz de David| 1x |5.5 |
|τὸ ἀρνίον τὸ ἐσφαγμένον|El Cordero que fue inmolado| 1x |5.12 |
|ὁ δεσπότης ὁ ἅγιος καὶ ἀληθινός|Señor, santo y verdadero| 1x |6.10 |
|θεοῦ ζῶντος|Dios vivo| 1x |7.2 |
|τῷ θεῷ ἡμῶν τῷ καθημένῳ ἐπὶ τῷ θρόνῳ|Nuestro Dios que está sentado en el trono| 1x |7.10 |
|τὸ ἀρνίον τὸ ἀνὰ μέσον τοῦ θρόνου |el Cordero que está en medio del trono| 1x |7.17 |
|τοῦ κυρίου τῆς γῆς ἑστῶτες|el Señor de la tierra| 1x |11.4 |
|ὁ κύριος αὐτῶν |El Señor mismo| 1x |11.8 |
|τοῦ κυρίου ἡμῶν |Nuestro Señor| 1x |11.15|
|κύριε ὁ θεὸς ὁ παντοκράτωρ, ὁ ὢν καὶ ὁ ἦν, ὅτι εἴληφας|Señor Dios todopoderoso, el que eres y que eras y que has de venir| 1x |11.17 |
|ἔτεκεν υἱόν, ἄρσεν, ὃς μέλλει ποιμαίνειν πάντα τὰ ἔθνη ἐν ῥάβδῳ σιδηρᾷ|un hijo varón, que va a regir a todas las naciones con vara de hierro| 1x |12.5 |
|ἔτεκεν τὸν ἄρσενα|El hijo varón| 1x |12.13 |
|τοῦ ἀρνίου τοῦ ἐσφαγμένου ἀπὸ καταβολῆς κόσμου|el Cordero que fue inmolado desde la fundación del mundo| 1x |13.8 |
|τοῦ πατρὸς αὐτοῦ |Su Padre| 1x |14.1 |
|τῷ ποιήσαντι τὸν οὐρανὸν καὶ τὴν γῆν καὶ θάλασσαν καὶ πηγὰς ὑδάτων|aquel que hizo el cielo y la tierra, el mar y las fuentes de las aguas| 1x |14.7 |
|ὁ βασιλεὺς τῶν ἐθνῶν|Rey de las naciones| 1x |15.3 |
|τοῦ θεοῦ τοῦ ζῶντος εἰς τοὺς αἰῶνας τῶν αἰώνων|Dios, quien vive por los siglos de los siglos| 1x |15.7 |
|ὁ ὢν καὶ ὁ ἦν, ὁ ὅσιος|el que eres y que eras, el Santo| 1x |16.5 |
|κύριος κυρίων ἐστὶν καὶ βασιλεὺς βασιλέων|Señor de señores y Rey de reyes| 1x |17.14 |
|κύριος ὁ θεὸς [ἡμῶν] ὁ παντοκράτωρ|Señor nuestro Dios todopoderoso| 1x |19.6 |
|τὸ πνεῦμα τῆς προφητείας|el Espíritu de la profecía| 1x |19.10 |
|πιστὸς καὶ ἀληθινός|Fiel y Verdadero| 1x |19.11 |
|ὁ λόγος τοῦ θεοῦ|La Palabra de Dios| 1x |19.13 |
|Βασιλεὺς βασιλέων καὶ κύριος κυρίων|Rey de reyes y Señor de señores| 1x |19.16 |
|τὸ Ἄλφα καὶ τὸ Ὦ, ἡ ἀρχὴ καὶ τὸ τέλος|el Alfa y la Omega, el principio y el fin| 1x |21.6 |
|αὐτῷ θεὸς|El Dios de él| 1x |21.7 |
|ὁ κύριος, ὁ θεὸς τῶν πνευμάτων τῶν προφητῶν|El Señor, el Dios de los espíritus de los profetas| 1x |22.6 |
|τὸ Ἄλφα καὶ τὸ Ὦ, ὁ πρῶτος καὶ ὁ ἔσχατος, ἡ ἀρχὴ καὶ τὸ τέλος|el Alfa y la Omega, el principio y el fin, el primero y el último| 1x |22.13 |
|ἡ ῥίζα καὶ τὸ γένος Δαυίδ, ὁ ἀστὴρ ὁ λαμπρὸς ὁ πρωϊνός|la raíz y el linaje de David, la estrella resplandeciente de la mañana| 1x |22.16 |
    //Fuente: Wilson, 44//

<hr>

!!!Olores

<hr>

* Canela (18.13)
* Especias aromáticas (18.13)
* Incienso (5.8, 8.3-5, 18.13)
* Mirra (18.13)

<hr>

!!!Sabores

<hr>

* Amargo (8.11, 10.9-10)
* Dulce (10.9-10)
* El sabor asqueroso de agua tibia (3.16)
<table class="altgray"><tr><td>

!!!Cristianos del primer siglo

<span class="singlelist">

*Juan el escritor
*Las siete iglesias
*Antipas el mártir

</span>

</td></tr><tr><td>

!!!Adversarios humanos del primer siglo

<span class="singlelist">

*Los que profesan ser apóstoles y no son
*Los que profesan ser Judíos y no son; la sinagoga de Satanás
*Los nicolaítas
*«Jezabel»

</span>

</td></tr><tr><td>

!!!Descripciones del pueblo de Dios

<span class="singlelist">

*Los decapitados
*Los 144.000
*La gran multitud en vestiduras blancas
*Los dos testigos
*La mujer del cielo y sus hijos
*Los que no han manchado sus vestiduras
*Los mártires
*Los santos delante del trono
*Santos, apóstoles y profetas (18.20)

</span>

</td></tr><tr><td>

!!!Descripciones de la humanidad

<span class="singlelist">

*Los comerciantes de la tierra
*Los Gentiles
*Los moradores de la tierra
*Los muertos
*Las naciones
*Los reyes del oriente
*Los reyes de la tierra
*200.000.000 tropas
*v.t. 6.15, 18.17, 18.22-23, 19.18, 21.8, 22.15

</span>

</td></tr><tr><td>

!!!Seres buenos

<span class="singlelist">

*Los ángeles de las siete iglesias
*Miguel y sus ángeles
*''Los seres alrededor del trono:''
**Los 24 ancianos
**Los siete espíritus
**Los cuatro seres vivientes
**Muchos millares de ángeles
*''Los seres que ejecutan el juicio''
**Los cuatro jinetes
**Los cuatro ángeles de los cuatro ángulos de la tierra (7.2)
**Los siete ángeles delante de Dios (8.2)
**Un octavo ángel (8.3)
**El águila que anuncia (8.13)
**Abadón / Apolión, y sus langostas (9.11)
**Los cuatro ángeles atados por el Éufrates (9.14)
**El ángel fuerte (10.1)
**Seis ángeles en el cielo (cap. 14)
**Los siete ángeles con las últimas plagas (cap. 15)
**Un ángel con gran autoridad (18.1)
**Un ángel parado en el sol, y sus aves (19.17)
**El ángel con la llave del abismo (20.1)
**Los ejércitos del cielo

</span>

</td></tr><tr><td>

!!!Seres malos

<span class="singlelist">

*Hadés personificado
*El dragón rojo y sus ángeles
*La bestia del mar
*La bestia de la tierra (el falso profeta)
*La rama de Babilonia y su bestia de escarlata
*Tres espíritus como ranas (16.13)

</span>

</td></tr><tr><td>

!!!Personajes del Antiguo Testamento

<span class="singlelist">

*Balaam
*Balac
*David
*Gog y Magog
*Los Israelitas
*Jezabel
*Moisés
*Los profetas

</span>

</td></tr></table>
<img src='https://www.giffmex.org/wiki/images/nt3/cast2jn.jpg'>
<html><iframe src="http://www.giffmex.org/wiki/pdfs/cast2pedro.pdf" width="1000" height="780" 
style="border: none;"></iframe></html>
<img src='https://www.giffmex.org/wiki/images/nt3/cast3jn.jpg'>
''El autor y los alrededor de él''

*Judas (1)
*Jacobo (1)
*Los destinatarios
*Los 'hombres impíos' que han invadido la iglesia de los destinatarios
*Los apóstoles (17)

''Personajes del AT''

*Adán (14), Balaam (11), Caín (11), Coré (11), Enóc (14), los Israelitas (5), Moisés (9), las ciudades de Sodoma y Gomorra (7)

''Ángeles y demonios''

*Ángeles que no quedaron en su lugar (6), Miguel (9), el diablo (9)

''Misceláneos personajes''

*Santas decenas de millares (14)
Juan menciona sus propósitos en escribir, en los siguientes versículos:

|bluealtrows|k
|1.4|Estas cosas os escribimos, para que vuestro gozo sea cumplido.|
|2.1|Hijitos míos, estas cosas os escribo para que no pequéis;|
|2.7-8|Hermanos, no os escribo mandamiento nuevo, sino el mandamiento antiguo que habéis tenido desde el principio; este mandamiento antiguo es la palabra que habéis oído desde el principio. <br><br>Sin embargo, os escribo un mandamiento nuevo, que es verdadero en él y en vosotros, porque las tinieblas van pasando, y la luz verdadera ya alumbra.|
|2.12-14|Os escribo a vosotros, hijitos, porque vuestros pecados os han sido perdonados por su nombre. <br>Os escribo a vosotros, padres, porque conocéis al que es desde el principio. <br>Os escribo a vosotros, jóvenes, porque habéis vencido al maligno. <br>Os escribo a vosotros, hijitos, porque habéis conocido al Padre. <br>Os he escrito a vosotros, padres, porque habéis conocido al que es desde el principio. <br>Os he escrito a vosotros, jóvenes, porque sois fuertes, y la palabra de Dios permanece en vosotros, y habéis vencido al maligno.|
|2.21|No os he escrito como si ignoraseis la verdad, sino porque la conocéis, y porque ninguna mentira procede de la verdad.|
|2.26|Os he escrito esto sobre los que os engañan. |
|5.13|Estas cosas os he escrito a vosotros que creéis en el nombre del Hijo de Dios, para que sepáis que tenéis vida eterna, y para que creáis en el nombre del Hijo de Dios.|

2.26 es la clave: hay personas que salieron de la iglesia que quieren engañar a los que permanecieron. Quieren que los destinatarios duden la enseñanza que Juan les ha dado. Y Juan escribe para responder que sus lectores ya saben la verdad (2.21), han vencido al maligno, han sido perdonados, y son fuertes (2.12-14). Por estas razones ellos no deben cometer el gran pecado de abandonar a Cristo y aceptar la falsa doctrina (2.1). Juan quiere recordarles del viejo mandamiento que, sin embargo, es nuevo (2.7-8). Los que creen en Jesucristo y siguen fieles a él pueden y deben tener la confianza que tienen la vida eterna (5.13). Y si los destinatarios son fieles a Jesucristo, completarán el gozo de Juan (1.4).

"Juan ve que tiene que calmar a los fieles y explicarles en términos claros las diferencias entre los dos grupos y así darles fundamentos para su propia seguridad y confianza delante de Dios (5.13) en un momento cuando [los cismáticos] los hacían que se sintieran inferiores y espiritualmente amenazados." ,,Carson, Moo y Morris, 452.,,
Beale (página desconocida) da una lista de los refranes en Apocalipsis acerca de la caída de Babilonia:

|bluealtrows|k
|14.8|Otro ángel lo siguió, diciendo: «Ha caído, ha caído Babilonia, la gran ciudad, porque ha hecho beber a todas las naciones del vino del furor de su fornicación».|
|16.19|La gran ciudad se dividió en tres partes y las ciudades de las naciones cayeron. La gran Babilonia vino en memoria delante de Dios, para darle el cáliz del vino del ardor de su ira.|
|17.16|Y los diez cuernos que viste, y la bestia, aborrecerán a la ramera, la dejarán desolada y desnuda, devorarán sus carnes y la quemarán con fuego. |
|18.2|Clamó con voz potente, diciendo: «¡Ha caído, ha caído la gran Babilonia!|
|18.10|Poniéndose lejos por el temor de su tormento, dirán: «¡Ay, ay de la gran ciudad, de Babilonia, la ciudad fuerte!, porque en una sola hora vino tu juicio».|
|18.16-17|«¡Ay, ay de la gran ciudad, que estaba vestida de lino fino, púrpura y escarlata, y estaba adornada de oro, piedras preciosas y perlas!, porque en una sola hora han sido consumidas tantas riquezas».|
|18.19-20|Y echaron polvo sobre sus cabezas y dieron voces, llorando y lamentando, diciendo: «¡Ay, ay de la gran ciudad, en la cual todos los que tenían naves en el mar se habían enriquecido de sus riquezas! ¡En una sola hora ha sido desolada! Alégrate sobre ella, cielo, y vosotros santos, apóstoles y profetas, porque Dios os ha hecho justicia en ella».|
|19.1-3|«¡Aleluya! Salvación, honra, gloria y poder son del Señor Dios nuestro, porque sus juicios son verdaderos y justos, pues ha juzgado a la gran ramera que corrompía la tierra con su fornicación, y ha vengado la sangre de sus siervos de la mano de ella». Otra vez dijeron: «¡Aleluya! El humo de ella ha de subir por los siglos de los siglos».|
Apocalipsis es un libro bullicioso - he aquí los sonidos que se encuentran ahí:

<span class="doublelist">

* Voces (1.10, 1.12, 4.1, 5.2, 5.11, 5.12, 6.1, 6.7, 7.2, 7.10, 8.13, 9.13, 10.4, 10.8, 11.12, 12.10, 14.2, 14.7, 14.9, 14.13, 14.15, 14.18, 16.1, 16.17, 18.2, 18.4, 19.1, 19.5, 19.6, 19.17, 21.3, cf. 18.23)
* Estruendo de cataratas (1.15, 14.2, 19.6)
* Truenos (4.5, 8.5, 11.19, 16.18, cf. 6.1, 14.2, 19.6)
* Estruendos (Reina Valera "voces") (4.5, 8.5, 11.19, 16.18)
* Trompetas (8.7, 8.8, 8.10, 8.12, 9.1, 9.13, 11.15, 18.22)
* Arpas (14.2, 18.22)
* Músicos (18.22)
* Flautas (18.22)
* El sonido de molino (18.22)

</span>
<table class="altgray"><tr><td>

Los pecados de los hombres impíos: ''la insubordinación, la inmoralidad, el menosprecio'' que tienen para ''los ángeles'' (4-19)

</td></tr><tr><td>

Los ''ejemplos'' de los pecadores antiguos y la condenación que recibieron (5-7, 11)

</td></tr><tr><td>

''El juicio final'' que pueden esperar los hombres impíos

</td></tr><tr><td>

La esperanza que los creyentes guardan para el día de ''la venida de Cristo''

</td></tr><tr><td>

El poder de Cristo para proteger y ''cuidar'' a su pueblo de caídas por mientras, y la responsabilidad de los creyentes de mantenerse dentro de su protección (1, 20-21, 24)

</td></tr><tr><td>

La ''misericordia'' de Dios y la obligación de los creyentes de ser misericordiosos con otros (1, 2, 4, 12, 21, 23)

</td></tr></table>
Hay ''dos tipos de oraciones'' en Judas:

<span class="singlelist">

*Las oraciones declarativas, que afirman lo que el autor cree. Estas son las que por lo general contienen más teología, lo que hay que creer.
*Las oraciones imperativas, que ordenan que alguien haga algo. Estas son las que por lo general indican la aplicación, lo que hay que hacer.

</span>

<hr>

La tabla abajo tiene una celda por cada oración gramatical en el texto griego de Judas. Las celdas blancas representan las oraciones declarativas, y las celdas anaranjadas representan las oraciones imperativas.

<table  class="distribution">
<tr>
<td style="background-color: #fff;"><span class="tooltip">1-2<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">3<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">4<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">5-7<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">8<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">9<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">10<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">11<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">12-13<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">14-15<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">16<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">17-18^^1^^<span class="tooltiptext"></span></span></td>
<td style="background-color: #fff;"><span class="tooltip">19<span class="tooltiptext"></span></span></td>
<td style="background-color: #fd7;"><span class="tooltip">20-21<span class="tooltiptext"></span></span></td>
<td style="background-color: #fd7;"><span class="tooltip">22-23<span class="tooltiptext"></span></span></td>
<td style="background-color: #fd7;"><span class="tooltip">24-25<span class="tooltiptext"></span></span></td>
</tr>
</table>

^^1^^ El verbo en v. 17 es un imperativo, pero sólo funciona para llamar la atención del lector al contenido de la declaración. Por esta razón calificamos a v. 17 como una oración declarativa, no una oración imperativa. 

<hr>

Se puede ver que casi todo el libro de Judas es declarativo, con la excepción de versículos 20-25. 

<span class="singlelist">

*En versículos 1-19 Judas explica y afirma lo que sus lectores necesitan saber.
*En versículos 20-23 Judas ordena a sus lectores a responder apropiadamente a lo que les dijo en versículos 1-19.
*Versículos 24-25 son una doxología, que se expresa en el modo imperativo ("A Dios sea la gloria...").

</span>
<img src='https://www.giffmex.org/wiki/images/nt3/iglesiasdeapoc2y3.jpg'>
Judas emplea la técnica interpretativa que se llama ''midrás'', un comentario o explicación de un texto después de citarlo. Richard Bauckham dirige nuestra atención al hecho de que Judas utiliza las propias palabras de los textos antiguos dentro de su exposición y aplicación de ellas:

<span class="doublelist">

*''ἀσεβής/ ἀσρβει̂ν/ ἀσέβεια'' (impío, Judas 4, 15, 18)
*''σάρξ'' (carne, Judas 7–8, 23) 
*''βλασφημει̂ν/ βλασφημία'' (blasfemia, injuria, Judas 8–10)
*''πλάνη/ πλανήτης'' (errar, desviarse, Judas 11, 13)
*''λαλει̂ν'' (hablar, Judas 15–16) 
*''κατα τὰς ὠπιθυμίας πορευόμενοι'' (siguiendo a sus propios deseos, Judas 16, 18) 
*''ζόφος … τηρει̂ν'' (oscuridad...reservados, Judas 6, 13) 
*''τηρει̂ν'' (reservados/guardados, Judas 1, 6, 13, 21)

</span>

@@.source Richard J. Bauckham, ''Word Biblical Commentary: Jude, 2 Peter.'' (Waco, TX: Word, 1983)@@
    //Fuente: Wilson, 45//

<hr>

    ''Minerales''

* Oro    (1.12, 1.20, 2.1, 3.18, 4.4, 5.8, 8.3, 9.7, 9.13, 9.20, 14.14, 15.7, 17.4, 18.12, 18.16, 21.15, 21.18, 21.21)
* Bronce (1.15, 2.18, 9.20, 18.12)
* Azufre (9.17, 9.18, 14.10, 19.20, 20.10, 21.8)
* Plata (9.20, 18.12)
* Hierro (18.12)

<hr>

   '' Joyas''

* Perlas (17.4, 18.12, 18.16, 21.21)
* Jaspe (4.3, 21.11, 21.18, 21.19)
* Zafiro (21.19)
* Ágata (21.19)
* Esmeralda (21.19)
* Ónice (21.20)
* Cornalina     (4.3, 21.20)
* Crisólito (21.20)
* Crisopraso (21.20)
* Jacinto (21.20)
* Amatista (21.20)

<hr>

    ''Otros materiales''

* Piedra (2.17, 9.20, 18.21)
* Vidrio (4.6, 15.2, 21.18, 21.21)
* Cristal (4.6, 22.1)
* Madera (9.20, 18.12)
* Cidro (18.12)
* Marfil (18.12)
* Mármol (18.12)
|bluealtrows|k
|!Palabra o frase griega|!Traducción|!Frecuencia|!Versículos|
|ὁ θεὸς|Dios|59x|1:5, 2:5, 2:14, 2:17, 3:1, 3:2, 3:8, 3:9 (3x), 3:10 (2x), 3:17, 3:20, 3:21, 4:1, 4:2 (2x), 4:3, 4:4, 4:6 (3x), 4:7 (3x), 4:8 (2x), 4:9, 4:10, 4:11, 4:12 (2x), 4:15 (3x), 4:16 (4x), 4:20 (2x), 4:21, 5:1, 5:2 (2x), 5:3, 5:4, 5:5, 5:9 (2x), 5:10 (3x), 5:11, 5:13, 5:18 (2x), 5:19|
|ὁ υἱὸς τοῦ θεοῦ|El Hijo, su Hijo, el Hijo de Dios|17x|2:22, 2:23 (2x), 2:24, 3:8, 4:10, 4:14, 4:15, 5:5, 5:9, 5:10 (2x), 5:11, 5:12 (2x), 5:13, 5:20|
|ὁ πατὴρ|El Padre|12x|1:2, 1:3, 2:1, 2:13, 2:15, 2:16, 2:22, 2:23 (2x), 2:24, 3:1, 4:14|
|τὸ πνεῦμα τοῦ θεοῦ |El Espíritu (de Dios) / su Espíritu|6x|3:24, 4:2, 4:13, 5:6 (2x), 5:8|
|Ἰησοῦς|Jesús|5x|2:22, 4:3, 4:15, 5:1, 5:5|
|τοῦ υἱοῦ αὐτοῦ Ἰησοῦ Χριστοῦ|Su hijo Jesucristo|3x|1:3, 3:23, 5:20|
|ὁ Χριστός|El Cristo|2x|2:22, 5:1|
|Ἰησοῦν Χριστὸν |Jesucristo|2x|4:2, 5:6|
|τὴν ζωὴν τὴν αἰώνιον |Vida eterna|2x|1:2, 5:20|
|τοῦ λόγου τῆς ζωῆς|La palabra de vida|1x|1:1|
|ἡ ζωὴ |:La vida|1x|1:2|
|Ἰησοῦ τοῦ υἱοῦ αὐτοῦ|Jesús su Hijo|1x|1:7|
|Ἰησοῦν Χριστὸν δίκαιον|Jesucristo el justo|1x|2:1|
|τοῦ ἁγίου|El Santo|1x|2:20|
|τὸ πνεῦμα τῆς ἀληθείας |El Espíritu de verdad|1x|4:6|
|τὸν υἱὸν αὐτοῦ τὸν μονογενῆ |Su hijo único [o unigénito]|1x|4:9|
|σωτῆρα τοῦ κόσμου|El Salvador del mundo|1x|4:14|
|ὁ ἀληθινὸς θεὸς |El verdadero Dios|1x|5:20|
“Estadísticamente [1 Pedro] tiene la palabra “Dios” 39x, que significa un promedio de una vez por cada 43 palabras.” (Carson, Moo y Morris, 428). Solamente 1 Juan (1 x cada 34 palabras) y Romanos (1 x cada 46 palabras) son comparables con 1 Pedro en su uso de la palabra Dios.

|bluealtrows|k
|!''Palabra o frase griega''|!''Traducción''|!''Frecuencia''|!''Versículos''|
|θεὸς |Dios |36x |1:5, 1:21 (2x), 1:23, 2:4, 2:5, 2:10, 2:12, 2:15, 2:16, 2:17, 2:19, 2:20, 3:4, 3:5, 3:17, 3:18, 3:20, 3:21, 3:22, 4:2, 4:6, 4:10, 4:11 (3x), 4:14, 4:16, 4:17 (2x), 4:19, 5:2 (2x), 5:5, 5:6, 5:12 |
|Χριστοῦ  |Cristo |13x |1:11 (2x), 1:19, 2:21, 3:15, 3:16, 3:18, 4:1, 4:13, 4:14, 5:1, 5:10, 5:14 |
|Ἰησοῦ Χριστοῦ  |Jesucristo |8x |1.1, 1.2, 1.3, 1.7, 1.13, 2.5, 3.21, 4.11 |
|ὁ κύριος |El Señor |6x |1.25, 2.3, 2.13, 3.12 (2x), 3.15 |
|πνεύματος |El Espíritu |2x |1.2, 3.18 |
|θεοῦ πατρός  |Dios Padre |1x |1.2 |
|ὁ θεὸς καὶ πατὴρ τοῦ κυρίου ἡμῶν Ἰησοῦ Χριστοῦ  |El Dios y Padre (de nuestro Señor Jesucristo) |1x |1.3 |
|τοῦ κυρίου ἡμῶν Ἰησοῦ Χριστοῦ  |Nuestro Señor Jesucristo |1x |1.3 |
|πνεῦμα Χριστοῦ  |El Espíritu de Cristo |1x |1.11 |
|πνεύματι ἁγίῳ  |El Espíritu Santo |1x |1.12 |
|πατέρα  |un Padre |1x |1.17 |
|λίθον ζῶντα |piedra viva |1x |2.4 |
|τὸν ποιμένα καὶ ἐπίσκοπον τῶν ψυχῶν ὑμῶν  |El Pastor y Obispo de vuestras almas |1x |2.25 |
|τὸ τῆς δόξης καὶ τὸ τοῦ θεοῦ πνεῦμα  |El Espíritu de Gloria y de Dios |1x |4.14 |
|πιστῷ κτίστῃ  |el fiel Creador |1x |4.19 |
|ἀρχιποίμενος  |el Príncipe de los pastores |1x |5.4 |
|Ὁ θεὸς πάσης χάριτος |El Dios de toda gracia |1x |5.10 |
|bluealtrows|k
|!Palabra o frase griega|!Traducción|!Frecuencia|!Versículos|
|ὁ θεὸς |Dios|5x|1:2, 1:21, 2:4, 3:5, 3:12|
|τοῦ κυρίου ἡμῶν καὶ σωτῆρος Ἰησοῦ Χριστοῦ|Nuestro Señor y Salvador Jesucristo|5x|1:11, 1:14, 1:16, 2:20, 3:18|
|κύριος|El Señor|5x|2:9, 2:11, 3:8, 3:9, 3:10|
|Ἰησοῦ Χριστοῦ|Jesucristo|1x|1:1|
|τοῦ θεοῦ ἡμῶν καὶ σωτῆρος Ἰησοῦ Χριστοῦ|Nuestro Dios y Salvador Jesucristo|1x|1:1|
|Ἰησοῦ τοῦ κυρίου ἡμῶν|Jesús nuestro Señor|1x|1:2|
|θεοῦ πατρὸς|Dios Padre|1x|1:17|
|Ὁ υἱός μου|(Mi) hijo|1x|1:17|
|πνεύματος ἁγίου|El Espíritu Santo|1x|1:21|
|δεσπότην |El Señor soberano|1x|2:1|
|τοῦ κυρίου καὶ σωτῆρος|El Señor y Salvador|1x|3:2|
|τοῦ κυρίου ἡμῶν |Nuestro Señor|1x|3:15|
Es interesante notar que el autor nunca usa el nombre “Cristo Jesús”, que Pablo usa alrededor de 90 veces.

|bluealtrows|k
|! Palabra o frase griega |! Traducción |! Frecuencia |! Versículos |
|θεός|Dios|54x|1.1, 1.6, 1.8, 1.9 (2x), 2.4, 2.9, 2.13, 2.17, 3.4, 4.4, 4.9, 4.10, 4.12, 5.1, 5.4, 5.10, 5.12, 6.1, 6.3, 6.5, 6.7, 6.10, 6.13, 6.17, 6.18, 7.19, 7.25, 9.14, 9.20, 9.24, 10.7, 10.12, 10.21, 10.36, 11.3, 11.4 (2x), 11.5 (2x), 11.6, 11.10, 11.16, 11.19, 11.25, 11.40, 12.2, 12.7, 12.15, 12.28, 12.29, 13.4, 13.7, 13.15, 13.16|
|κύριος |(el) Señor|14x|1.10, 2.3, 7.21, 8.2, 8.8, 8.9, 8.10, 8.11, 10.16, 10.30, 12.5, 12.6, 12.14, 13.6|
|τοῦ Χριστοῦ|Cristo|9x|3.6, 3.14, 5.5, 6.1, 9.11, 9.14, 9.24, 9.28, 11.26|
|Ἰησοῦ|Jesús|5x|2.9, 6.20, 7.22, 10.19, 13.12|
|τὸ πνεῦμα τὸ ἅγιον|El Espíritu Santo|5x|2.4, 3.7, 6.4, 9.8, 10.15 |
|θεοῦ ζῶντος|El Dios viviente|4x|3.12, 9.14, 10.31, 12.22|
|υἱὸν|(el) Hijo|3x|1.2, 1.8, 7.28|
|τὸν υἱὸν τοῦ θεοῦ|El Hijo de Dios|3x|6.6, 7.3, 10.29 |
|Ἰησοῦ Χριστοῦ|Jesucristo|3x|10.10, 13.8, 13.21|
|τῆς μεγαλωσύνης ἐν ὑψηλοῖς o τῆς μεγαλωσύνης ἐν τοῖς οὐρανοῖς|la Majestad en las alturas|2x|1.3, 8.1|
|πρωτοτόκων|El Primogénito|2x|1.6, 12.23|
|αὐτῷ, δι’ ὃν τὰ πάντα καὶ δι’ οὗ τὰ πάντα|Aquel por cuya causa existen todas las cosas y por quien todas las cosas subsisten |1x|2.10|
|τὸν ἀρχηγὸν τῆς σωτηρίας|El autor de la salvación de ellos|1x|2.10|
|τὸν ἀπόστολον καὶ ἀρχιερέα τῆς ὁμολογίας ἡμῶν Ἰησοῦν|El apóstol y sumo sacerdote de nuestra profesión, Jesús|1x|3.1|
|Ἰησοῦν τὸν υἱὸν τοῦ θεοῦ|Jesús el Hijo de Dios|1x|4.14|
|τοῦ θεοῦ τοῦ ὑψίστου|Dios Altísimo|1x|7.1|
|ὁ κύριος ἡμῶν|nuestro Señor|1x|7.14|
|πνεύματος αἰωνίου |el Espíritu eterno|1x|9.14|
|τὸ πνεῦμα τῆς χάριτος|el Espíritu de gracia|1x|10.29|
|αὐτοὺς ὁ θεὸς |Dios de ellos|1x|11.16|
|τὸν τῆς πίστεως ἀρχηγὸν καὶ τελειωτὴν Ἰησοῦν|Jesús, el autor y consumador de la fe|1x|12.2|
|τῷ πατρὶ τῶν πνευμάτων|el Padre de los espíritus|1x|12.9|
|κριτῇ θεῷ πάντων|Dios, Juez de todos|1x|12.23|
|διαθήκης νέας μεσίτῃ Ἰησοῦ|Jesús, Mediador del nuevo pacto|1x|12.24|
|ὁ θεὸς ἡμῶν |nuestro Dios|1x|12.29|
|Ὁ θεὸς τῆς εἰρήνης|el Dios de paz|1x|13.20|
|τὸν ποιμένα τῶν προβάτων τὸν μέγαν ἐν αἵματι διαθήκης αἰωνίου, τὸν κύριον ἡμῶν Ἰησοῦν|nuestro Señor Jesucristo, el gran pastor de las ovejas|1x|13.20|
|bluealtrows|k
|!Palabra o frase griega|!Traducción|!Frecuencia|!Versículos|
|κύριος|El Señor|3x|5, 9, 14|
|τοῦ κυρίου ἡμῶν Ἰησοῦ Χριστοῦ·|Nuestro Señor Jesucristo|3x|17, 21, 25|
|Ἰησοῦ Χριστοῦ|Jesucristo|2x|1 (2x)|
|θεῷ πατρὶ|Dios Padre|1x|1|
|τοῦ θεοῦ ἡμῶν|Nuestro Dios|1x|4|
|τὸν μόνον δεσπότην καὶ κύριον ἡμῶν Ἰησοῦν Χριστὸν|Jesucristo, nuestro único Señor soberano|1x|4|
|πνεῦμα|El Espíritu|1x|19|
|πνεύματι ἁγίῳ|El Espíritu Santo|1x|20|
|θεοῦ|Dios|1x|21|
|μόνῳ θεῷ σωτῆρι ἡμῶν|El único Dios nuestro Salvador|1x|25|
|bluealtrows|k
|!Palabra o frase griega|!Traducción|!Frecuencia|!Versículos|
|ὁ θεὸς|Dios|15x|1:1, 1:5, 1:13 (2x), 1:20, 2:5, 2:19, 2:23 (2x), 3:9, 4:4 (2x), 4:6, 4:7, 4:8|
|ὁ κύριος|El Señor|10x|1:7, 4:10, 4:15, 5:7, 5:8, 5:10, 5:11 (2x), 5:14, 5:15|
|κριτής|(el) Juez|2x|4:12, 5:9|
|κυρίου Ἰησοῦ Χριστοῦ|El Señor Jesucristo|1x|1:1|
|τοῦ πατρὸς τῶν φώτων|El Padre de luces|1x|1:17|
|τῷ θεῷ καὶ πατρὶ|[nuestro] Dios y Padre|1x|1:27|
|τοῦ κυρίου ἡμῶν Ἰησοῦ Χριστοῦ τῆς δόξης|Nuestro glorioso Señor Jesucristo|1x|2:1|
|τὸν κύριον καὶ πατέρα|El Señor y Padre|1x|3:9|
|νομοθέτης|Dador de la ley|1x|4:12|
|κυρίου Σαβαὼθ|El Señor de los ejércitos|1x|5:4|
Hay cuatro secciones distintas en capítulo 12:

:''12.1-6'', el dragón no logra devorar al hijo de la mujer celestial
::''12.7-9'', Miguel y sus ángeles vencen al dragón y sus ángeles, y los lanzan a la tierra
::''12.10-12'', un himno celebrando la victoria de Dios sobre el dragón
:''12.13-17'', el dragón no logra ahogar a la mujer celestial

<hr>

Las dos secciones intermedias parecen ser un paréntesis entre las dos secciones acerca del dragón y la mujer, por las siguientes razones:

#Vv. 1-6 y 13-17 son narrativas que se enfocan en la mujer, los hijos de la mujer, y el dragón. Vv. 7-12 mencionan el dragón, pero estos versículos son distintos en su enfoque.
#Versículos 6 y 13 repiten la idea de que el dragón fue lanzado a la tierra. Estas repeticiones forman un marco alrededor de la intrusión de vv. 7-12. Son 'ganchos' que conectan vv. 1-6 y 13-17.
#Vv. 10-12 son un comentario acerca de vv. 7-9. 
La carta de Judas inicia como una típica carta antigua, con referencias al autor y los destinatarios, y una bendición (vv. 1-2)

<hr>

Versículos 3-4 actúan como puente al cuerpo de la carta, anunciando el propósito del autor (v. 3) y la situación que provocó la composición de la carta (v. 4).

<hr>

La carta de Judas no concluye con los elementos típicos que normalmente aparecen al final de una carta antigua. Más bien se termina como sermón antiguo, con una doxología (24-25).

<hr>

Para bosquejar el cuerpo de la carta, podríamos notar la división entre las oraciones declarativas (5-16) y las oraciones imperativas (17-23). Pero esta división es engañosa, porque el verbo imperativo en v. 17 (μνήσθητε, "Recuérdense") sólo actúa para llamar la atención de los lectores a la declaración en el resto del versículo. En realidad, versículos 17-19 continúan la descripción de los impíos. La nueva sección con las verdaderas exhortaciones empieza en v. 20.

Así que el cuerpo de la carta se divide en dos secciones:

*La descripción de los impíos que invadieron la iglesia de los destinatarios (5-19)
*Las cosas que los destinatarios deben hacer para enfrentar la influencia mala de los impíos (20-23)

<hr>

Varios comentaristas han notado una estructura quiástica en Judas:

<span class="indent2">A: Judas urge a los destinatarios a ''defender la fe'' (v. 3)</span><br
/><span class="indent3">B: Judas anuncia el problema, la llegada de ''los impíos'' (4)</span><br
/><span class="indent3">B: Judas describe el problema, el peligro de ''los impíos'' (5-19)</span><br
/><span class="indent2">A: Judas da exhortaciones específicas que explican cómo ''defender la fe''  (20-23)</span>

<hr>

La sección que describe a los impíos (5-19) se puede dividir en cuatro argumentos. Los primeros dos argumentos empiezan con tres ejemplos del Antiguo Testamento cada uno:

*Israel, los ángeles, y Sodoma (5-7)
*Caín, Balaam, Coré (11)

Los otros dos argumentos empiezan con citas a textos el autor considera autoridades:

*1 Enoc 1.9 (14-15)
*2 Pedro 3.3 (17-18)

<hr>

Cada argumento tiene dos partes:

*Empieza con los ejemplos y citas mencionadas arriba. 
*Después sigue una descripción de los impíos, para mostrar la manera en que el texto tiene que ver con estos impíos. Cada descripción usa la palabra οὗτοι ("estos") para referirse a los impíos (8, 10, 12, 16, 19).

El primer argumento (5-10) es distinto porque la descripción de los impíos se interrumpe con un texto adicional de apoyo en v. 9 (la disputa entre Miguel y el diablo). La descripción de los impíos se reanude en v. 10.

<hr>

La sección de exhortaciones (20-23) es la parte de la carta que el autor más quiso enfatizar. Se divide en dos oraciones gramaticales. 

*La primera oración (20-21) da cuatro exhortaciones, todas relacionadas al cuidado espiritual de los oidores mismos. La exhortación principal es "consérvense en el amor de Dios", y hay tres participios que explican cómo los oidores pueden conservarse: edificándose en su fe, orando en el Espíritu, y esperando la misericordia de Jesucristo.
*La segunda oración (22-23) da tres exhortaciones, todas relacionadas con las acciones que los oidores deben tomar con respecto a tres grupos que han sido afectadas por los impíos: los oidores deben convencer a algunos, rescatar a otros, y mostrar misericordia (de manera cuidadosa) a otros.

<hr>

<span class="source">Fuente principal: Richard J. Bauckham, //2 Peter, Jude, vol. 50, Word Biblical Commentary// (Dallas: Word, Incorporated, 1998), 3-5.</span>
''La "señora elegida y sus hijos"'' a los cuales el anciano escribe en 2 Juan 1 es probablemente una iglesia y los miembros de la iglesia. John Stott nota que el autor cambia entre la segunda personal singular y la segunda persona plural en su carta, y algunos de los comentarios que el anciano hace en su carta no tendría sentido si la carta hablara de una mujer literal con sus hijos literales.

<hr>

''La frase "a quienes yo amo en la verdad"'' en 2 Juan 1 podría significar "a quienes amo de verdad." Pero es más probable que el anciano hace un contraste entre él mismo y los falsos maestros que él menciona más adelante en su carta. El anciano está en la verdad, y los falsos maestros no.

<hr>

John Stott comenta acerca de ''2 Juan 2'' que"...somos ligados a nuestros hermanos en Cristo con una liga especial de la verdad. La verdad es la base del amor recíprioco y cristiano." Stott sugiere que la unidad cristiana es debilitada y no mejorada cuando diluimos la verdad cristiana. Por el otro lado, también podemos decir que un compromiso con la verdad no debe minar nuestra responsabilidad de amarnos mútuamente. Muchos Cristianos han caído en conflictos y actitudes poco amables sobre cuestiones de doctrina, y este hecho es una contradicción de la misma doctrina que defendemos. Stott escribe, "Nuestro amor se vuelve débil si no es fortalecido por la verdad, y nuestra verdad se vuelve dura si no es suavizada por el amor." <span class="source">John R. W. Stott, The Letters of John (Grand Rapids: Eerdmans, 19XX), 205, 207.</span>

<hr>

Según ''2 Juan 4'', la verdad del mensaje cristiano no es simplemente algo de creer, sino un camino dentro del cual uno necesita caminar. La misma idea se encuentra en 1 Juan 1.6 y 3 Juan 3-4.

<hr>

''2 Juan 5'' contiene lógica circular. Sin embargo, su pensamiento no es contradictorio: amar de verdad implica obedecer los mandamientos de Dios, y el mandamiento de Dios es amar. Obedecer a Dios es una de las maneras en que le mostramos nuestro amor, y el amor es una de las maneras en que obedecemos a Dios.

<hr>

"El mandamiento que Juan menciona [en ''2 Juan 6''] fue un mandamiento viejo porque estaba en la ley (Lv 19.18), aunque el ejemplo de Jesús lo dio una nueva importancia (Jn 13.34-35). En el contexto de 1-2 Juan, "amarse mútuamente" significa adherirse a la comunidad cristiana (en lugar de dejarla, como hacían los secesionistas)." <span class="source">Craig S. Keener, The IVP Bible Background Commentary: New Testament. (Downer's Grove, IL: ~InterVarsity, 1993)</span> 1 Juan 2.7-8, 3.11 es otro texto que dice que el nuevo mandamiento de amar es el mandamiento viejo, el que los lectores tenían desde el principio.

<hr>

En 2 Juan 7 el anciano escribe que muchos ''engañadores'' 'han salido' al mundo. Con la palabra 'han salido', ¿quiere decir el autor que ellos han salido de la iglesia? ¿Serán los mismos sececionistas mencionados en 1 Juan 2.18-19? ¿Será un contraste intencional de parte del autor entre 'algunos' de los hijos que andan en la verdad (4) y los 'muchos' que no? Yo creo que esta conclusión sería una sobre-interpretación del texto. No hay necesidad de conectar las personas en v. 7 con los secesionistas en 1 Juan. Tampoco hay necesidad de conectar 'algunos' en v. 4 con los 'muchos' en v. 7. Puede ser que estas conexiones sean válidas, pero no tenemos suficiente información para estar seguros. Una lectura normal de 2 Juan, sin ser influenciada por 1 Juan, sería que a) el anciano de repente se encontró con algunos miembros de la iglesia y los encontró andando en la verdad, y b) el anciano sabe que hay falsos maestros saliendo al mundo para difundir sus enseñanzas. Aún Smalley, que cree que son secesionistas, menciona que la selección de la frase 'han salido' podría haber sido influenciada por el vocabulario misionero del autor. En Juan 8.42, 13.3, 17.18, 20.21 y 3 Juan 7, la palabra ἐξῆλθον tiene que ver con las misiones. <span class="source">Stephen S. Smalley, vol. 51, Word Biblical Commentary : 1,2,3 John, Word Biblical Commentary (Dallas: Word, Incorporated, 2002), 328.</span>

<hr>

''La encarnación de Cristo en 2 Juan 7'' - 2 Juan 7 eleva la doctrina de la encarnación de Cristo, y hace de ella una doctrina que distingue los verdaderos Cristianos de los inconversos. El anciano hasta dice que las personas que no creen en la encarnación de Cristo son anticristos.

<hr>

''2 Juan 8: ¿"Nuestro" trabajo o "vuestro" trabajo?'' Lee 2 Juan 8 con cuidado: los mejores manuscritos dicen "para que no perdáis el fruto de nuestro trabajo" (no "vuestro" trabajo como en la traducción Reina Valera). La idea es que el autor y los lectores han trabajado juntos para avanzar el reino de Dios y cosechar el correspondiente fruto. Pero si recibieran a los falsos maestros, los lectores compartirían en sus malas obras (versículo 11) y perderían el terreno que han logrado.

<hr>

''2 Juan 8 y Jesús'' La advertencia en 2 Juan 8, "Mirad por vosotros mismos", en cuanto a los falsos maestros, da eco a una advertencia similar de Jesús en Marcos 13.5: "Mirad que nadie os engañe...." que también se trata de las mentiras de personas falsas.

<hr>

''2 Juan 9 y 1 Juan 2.23'' expresan las mismas ideas en diferentes palabras. Cristo es el camino a Dios, y los que piensan alcanzar a Dios sin Cristo están equivocados.

<hr>

''Correr adelante en 2 Juan 9'' En 2 Juan 9 el anciano critica a todos los que "corren adelante" (una traducción literal del griego) y no permanece en la doctrina de Cristo. John Stott nota que el anciano probablemente usa sarcasmo aquí. Se burla de las alegaciones de los falsos maestros de tener enseñanzas "progresivas" o "avanzadas" que van más allá de las enseñanzas de los apóstoles. Stott saca lo gracioso de las palabras del anciano: "Ellos habían avanzado tanto que hasta habían dejado a Dios detrás de ellos." <span class="source">John R. W. Stott, The Letters of John. (Grand Rapids: Eerdmans, 19XX), 213)</span> Kistemaker escribe, "El verdadero progreso siempre tiene sus raíces en la enseñanza de Cristo." <span class="source">Simon J. Kistemaker, James and I-III John (Grand Rapids: Baker, 1986), 382.</span>

<hr>

La frase ''"la doctrina de Cristo"'' en 2 Juan 9 probablmente significa "la doctrina que viene de Cristo" y no "la doctrina acerca de Cristo." Simon J. Kistemaker, 382, nota que en Juan 7.16-17, Jesús habla dos veces de "mi doctrina".

<hr>

''La hospitalidad en 2 Juan 10-11'' En 3 Juan 5-8, el anciano aplaude a Gayo por haber provisto alojamiento a los misioneros itinerantes. Tal hospitalidad fue extremadamente importante en el tiempo de Juan, porque no hubo hoteles modernos, y los hostales de ese tiempo tenía una reputación sórdida. Pero en 2 Juan 10-11, el anciano enfatiza que los misioneros que no traen el mensaje cristiano auténtico no deben recibir la misma hospitalidad de parte de los miembros de las iglesias en casas a las cuales escribe. Capítulos 11 y 12 del Didaché, un documento de la iglesia antigua, contiene una discusión similar y más extensa de este tema.

<hr>

''La aplicación de 2 Juan 10'' 2 Juan 10 no prohibe la recepción de maestros de sectas como los Testigos de Jehová a la casa de uno para dialogar. Lo que prohibe es que los Cristianos den alojamiento y apoyo financiero a tales maestros. Y prohibe que las iglesias, como las iglesias en casa a las cuales el anciano escribe, den a tales personas una bienvenida oficial para hablar y tomar un papel activo en las actividades de la iglesia. Este versículo no enseña un odio intolerante para las personas que tienen creencias diferentes. Solo pide que no apoyemos a los esfuerzos de las personas que activamente promuevan creencias falsas y dañinas.

<hr>

Las palabras "Los hijos de tu hermana, la elegida" en ''2 Juan 13'' se refieren a la iglesia desde la cual el anciano escribe, y sus miembros.
!!!Apocalipsis 14 es un contraste con capítulo 13

//Fuente: Aune; Texto bíblico: NVI//

<table class="altgray"><tr><td>

El Cordero y los 144,000 en 14.1-5 son un contraste con la bestia y sus seguidores en cap. 13

</td></tr><tr><td>

El sello sobre los 144,000 en 14.1-5 es un contraste con la marca de la bestia en cap. 13

</td></tr><tr><td>

La adoración a Dios en 14.2-3 es un contraste con la adoración a la Bestia en cap. 13, y el ángel en 14.9-12 anuncia las consecuencias de adorar a la bestia y recibir su marca

</td></tr><tr><td>

14.12 imita la forma de 13.10 y el contenido de 12.17

*14.12: ¡En esto consiste la perseverancia de los santos, los cuales obedecen los mandamientos de Dios y se mantienen fieles a Jesús!
*13.10: ¡En esto consisten la perseverancia y la fidelidad de los santos! 
*12.17: ...los cuales obedecen los mandamientos de Dios y se mantienen fieles al testimonio de Jesús. 

</td></tr><tr><td>

La mención en 13.15 que la bestia tiene poder para matar a los santos anticipa la bendición en 14.13 sobre los que mueren en el Señor (por perder sus vidas en la persecución)

</td></tr></table>

!!!Los 144,000 y su sello de 14.1-5 ya se mencionaron en capítulo 7

<table class="altgray"><tr><td>

Además, 14.1-5 y cap. 7 tienen la misma estructura:

|bluealtrows|k
|!Cap 7|!14.1-5|
|Los 144,000 aparecen y son sellados (7.1-8) |Los 144,000 aparecen y han sido sellados (14.1)|
|Alabanza celestial (7.9-12)|Alabanza celestial (14.2-3a)|
|Explicación de parte de Juan (7.13-17)|Explicación de parte del ángel (14.3b-5)|

<span class="source">Fuente: Aune</span>

</td></tr></table>
//Un resumen de deSilva, D. A. (2012). The Letter to the Hebrews in Social-Scientific Perspective. Eugene, OR: Cascade Books.//

<hr>

    Hebreos es un libro anónimo, pero es posible hacer lo que deSilva llama un '''perfil social''' de él. - <span class="source">resumen deSilva, 2012, p. 14</span>

<hr>

    deSilva rechaza la idea que ''Pablo'' fue autor de Hebreos. <span class="source">- resumen deSilva, 2012, p. 15-16</span>

<hr>

    El autor de Hebreos fue un hombre que había recibido ''una educación formal en retórica''. Este hecho se ve en las muchas técnicas literarias que usa. - <span class="source">resumen deSilva, 2012, p. 16</span>

<hr>

    deSilva compara ''Hebreos 12.5-11'' a una típica estructura que se usaba en los manuales de retórica para enseñar la estructura de los argumentos. -<span class="source"> resumen deSilva, 2012, p. 17-19</span>

<hr>

    ''Hebreos 12.11'' alude a un proverbio famoso que muchos atribuyen a Aristóteles: "La raíz de la educación es amarga, pero su fruto es dulce." - <span class="source">resumen deSilva, 2012, p. 20</span>

<hr>

    ''Hebreos 1.1-4'' tiene varias técnicas literarias en griego: aliteración de la letra 'p', homeotéleuton (la repetición de los sufijos de las palabras), y paralelismo. - <span class="source">resumen deSilva, 2012, p. 21</span>

<hr>

    Se ve que el autor de Hebreos fue ''un Judío Cristiano en la diáspora''. Es decir, un hombre de la raza judía, de la religión cristiana, que no vivía en Palestina sino en otra parte del mundo helénico.

* Judío: usa muchas técnicas interpretativas que usaban los rabinos (por ejemplo: los argumentos de menor a mayor, y el uso de los nombres personales como claves interpretativas).
* Judío: tiene un amplio conocimiento del Antiguo Testamento
** Cita directamente los libros de Génesis, Éxodo, Deuteronomio, 2 Samuel, Salmos, Proverbios, Isaías, Jeremías, Hageo, Habacuc
** Explica pasajes en Levítico y Números
** Alude a muchos otros libros
* De la diáspora: no cita la versión hebrea del AT sino la versión griega.

    - <span class="source">resumen deSilva, 2012, p. 22-23</span>

<hr>

En ''Hebreos 5.8'', el autor utiliza un juego de palabras usada en la educación griega. Con la similitud de las palabras //emathen// y //epathen//, los griegos enfatizaban el sufrimiento necesario para aprender.

|bluealtrows|k
|ἔμαθεν (emathen)|aprender|
|ἔπαθεν (epathen)|sufrir|

<span class="indent1">//Aunque era Hijo, mediante el sufrimiento (ἔπαθεν) aprendió (ἔμαθεν) a obedecer; //(Hebreos 5.8 NVI)</span>

 <span class="source">- resumen deSilva, 2012, p. 24</span>

<hr>

    Lo que Hebreos 12 dice acerca de la disciplina es similar a lo que ''Séneca'' dice en su libro Sobre la Providencia, especialmente sección 1.6. - <span class="source">resumen deSilva, 2012, p. 24</span>

<hr>

    ''La educación griega'' del autor de Hebreos se ve en Hebreos 5.11-14:

* Usa metáforas griegas para referirse al proceso de la educación: de leche a carne, de infante a adulto
* 5.14 usa la definición clásica de la sabiduría, el discernimiento entre el bien y el mal.

    - <span class="source">resumen deSilva, 2012, p. 25</span>

<hr>

    Que el autor vivía en un contexto griego se ve también en su uso de ''imágenes del atletismo'':

* 12.1-4 habla de correr y de la lucha libre. Habla de los espectadores en el estadio, el vestido de los atletas, y la necesidad de enfocar la vista en el final de la carrera.
* 12.11 usa una palabra para el entrenamiento atlético.

    - <span class="source">resumen deSilva, 2012, p. 26</span>

<hr>

    Hay un posible paralelo con ''la filosofía griega'' en Hebreos. deSilva menciona que Hebreos 2.14-15 es similar a los ejemplos que los filósofos usaban para ayudar a su público a superar su temor a la muerte. Un ejemplo sería la descripción en Séneca de la muerte de Sócrates. Sócrates se pone como ejemplo de una persona que no tuvo miedo antes de su muerte, y su muerte debe inspirar a otros a vivir sin temor a la muerte. - <span class="source">resumen deSilva, 2012, p. 28-29</span>

<hr>

deSilva explica ''la autoridad del autor de Hebreos''. Empieza explicando la teoría de Max Weber acerca de las categorías de la autoridad legítima.

|bluealtrows|k
|!La autoridad carismática|Cuando alguien es líder por su cercanía a las cosas sobrenaturales, o por su heroismo, o por sus cualidades especiales|Los seguidores se someten a él como individuo|
|!La autoridad tradicional|Cuando alguien es líder por su familia o por un papel que juega en la sociedad|Los seguidores se someten no tanto a él sino al sistema social que lo aprueba|
|!La autoridad racional-legal|Cuando alguien es líder por su puesto en la jerarquía de una institución, con tal de que consiguió su puesto según los principios que correspoden a su puesto|Los seguidores se someten no tanto a él, sino a los principios que él representa|

<span class="source">- resumen deSilva, 2012, p. 30-32</span>

<hr>

    deSilva distingue entre ''tres niveles de liderazgo'' en la iglesia primitiva:

* Los apóstoles como representantes de Jesús
* Los colegas de los apóstoles (p. ej., Timoteo)
* Los líderes en las iglesias locales

    deSilva dice que el autor niega ser apostol en Hebreos 2.1-4, y se distingue entre si mismo y los líderes de la iglesia (cap. 13). Así que debemos colocarlo en el segundo nivel de liderazgo.

    - <span class="source">resumen deSilva, 2012, p. 32-34</span>

<hr>

    Dos otros datos acerca de ''la relación entre el autor y el público'' de Hebreos:

* En algunos lugares el autor usa 'nosotros' en un contexto donde es claro que la palabra no incluye a los destinatarios (5.11-12, 6.9-12, 13.18).
* El autor les ha visitado por lo menos una vez (13.19).

    - <span class="source">resumen deSilva, 2012, p. 35</span>

<hr>

    ''¿Qué autoridad tiene el autor de Hebreos'' para ordenar a los destinatarios?

    Es notable que el autor no basa su autoridad en una revelación especial que recibió de Dios. Tampoco basa su autoridad en algún puesto eclesiástico o alguna comisión de parte de los apóstoles para que los escriba.

    La única fuente de autoridad que el autor menciona es la autoridad de las Escrituras. El autor basa sus argumentos en pasajes de varios libros del Antiguo Testamento. Estos libros tienen su propia autoridad. Si el autor ha representado fielmente las Escrituras en su argumento, los destinatarios estarán obligados a reconocer la autoridad de su argumento.

    La dependencia del autor en la autoridad de las Escrituras es tan notable, que a veces es difícil distinguir entre la voz del autor y la voz de Dios que habla por medio de los pasajes que el autor cita.

    - <span class="source">resumen deSilva, 2012, p. 36-38</span>
//Un resumen de deSilva, D. A. (2012). The Letter to the Hebrews in Social-Scientific Perspective. Eugene, OR: Cascade Books.//

<hr>

    ''No sabemos dónde, en términos geográficos, se ubicaban'' los destinatarios de Hebreos, y esto nos limita mucho. En contraste, por ejemplo, nuestro conocimiento de Corinto enriquece nuestra interpretación de las cartas de Pablo a los Corintios. - <span class="source">resumen deSilva, 2012, p. 44-46</span>

<hr>

    En contraste con muchos comentaristas, deSilva prefiere ser agnóstico en cuanto a la ciudad de los destinatarios de Hebreos. <span class="source">- resumen deSilva, 2012, p. 47</span>

<hr>

    David deSilva dice que el título ''"a los Hebreos"'', que se aplicó a la carta en el segundo siglo, nos hace asumir que los destinatarios fueron Judíos. deSilva no está convencido de esta teoría. - <span class="source">resumen deSilva, 2012, p. 47</span>

<hr>

    Muchos dicen que los destinatarios de Hebreos tenían que haber sido Judíos, porque el libro asume que ellos entenderían sus muchas ''referencias al Antiguo Testamento''. Sin embargo, deSilva responde que las cartas de Gálatas y 1 Pedro fueron escritas a Gentiles, y los autores usan muchos argumentos del AT en esas cartas. - resumen deSilva, 2012, p. 47

<hr>

    Muchos dicen que los destinatarios de Hebreos fueron Judíos porque mucho del libro se trata del ''sistema levítico'', y ese tema sólo interesaría a los Judíos. deSilva responde que sin duda los Gentiles que se habían convertido a la fe Cristiana tendrían mucho interés en saber cómo deben leer e interpretar el Antiguo Testamento, que menciona esos temas. - resumen deSilva, 2012, p. 48

<hr>

    deSilva dice que ''no debemos asumir'' que la amenaza para los destinatarios era el peligro de regresar al Judaísmo. Es igualmente posible que la carta advierte a las personas tentadas a regresar al paganismo de la sociedad romana.

* Por ejemplo, Hebreos 6.1-2 habla de temas que serían rutinarias para los Judíos pero para los convertidos del paganismo serían de mucho interés.
* Además, la mención de Timoteo en 13.23 nos muestra que la iglesia de los 'Hebreos' es parte de la red de iglesias asociadas con Pablo, y el ministerio de Pablo fue a los Gentiles.

<span class="source">    - resumen deSilva, 2012, p. 49-50</span>

<hr>

    Muchos asumen que todos los Cristianos del primer siglo eran de la clase baja. Sin embargo, hay evidencias que los destinatarios de Hebreos ''tenían educación y dinero''.

* La calidad del estilo y el vocabulario griego en esta carta muestran que el autor confiaba en la habilidad de los destinatarios de entender lo que escribió. Esto implica una iglesia con amplia educación.
* La mención de la pérdida de propiedades (10.34) implica que, por lo menos en el pasado, algunos de ellos tenían propiedades que perder.
* El tema de la hospitalidad (10.33-34, 13.2, 13.16) implica que tenían sus propias casas y suficientes medios para brindar esa hospitalidad.
* 13.5 habla de una ambición para el dinero, y 13.14 habla de una ambición para el estatus. Estas ambiciones tienen más sentido, dice deSilva, para los que tienen algo de dinero.

<span class="source">    - resumen deSilva, 2012, p. 50-51</span>

<hr>

    deSilva distingue ''tres etapas en la 'historia social''' de la iglesia de los Hebreos:

* Su conversión (mencionada en 2.1-4) (52)
* Su formación y socialización (5.11-6.3) (53-59)
* La persecución de ellos (10.32-34) (60-61)

<span class="source">    - resumen deSilva, 2012, p. 52-61</span>

<hr>

    La frase ''"obras muertas" ''en Hebreos 6.1 y 9.14 probablemente se refiere, no a los sacrificios levíticos, sino a la idolatría.

* Hebreos 9.14 hace un contraste entre 'obras muertas' y el 'Dios viviente'
* El libro de la Sabiduría usa el contraste entre ídolos muertos y el Dios viviente. (Sabiduría 13.10, 13.18, 15.5, 15.17)

    - <span class="source">resumen deSilva, 2012, p. 53</span>

<hr>

    ''La persecución'' de los Hebreos se menciona en 10.32-34.

* Insultos
* Encarcelamiento
* Confiscación de propiedades
* Va implícito también que sus vecinos dejarían de hacer negocios con ellos, y eso tendría un impacto adicional en las finanzas y la reputación de ellos.

    Estas reacciones de parte de los vecinos de los Cristianos eran intentos de ''avergonzar'' a los Cristianos para que regresaran a las normas de la sociedad mayor. Y además eran intentos de disuadir a otras personas de querer unirse con los Cristianos.

    - <span class="source">resumen deSilva, 2012, p. 61-62</span>

<hr>

    ¿Por qué los vecinos de los Cristianos los perseguían tan severamente?

* ''Los paganos'' mostraban la lealtad de sus ciudades a los dioses a través de la idolatría. De esta manera deseaban conseguir el favor de los dioses. Pero los Cristianos rechazaban la idolatría, y se separaban de los eventos que la incluían. Según la perspectiva de los paganos, los Cristianos ponían en riesgo el bienestar de su ciudad - los dioses podrían ver que hubo ciudadanos desleales, y podrían quitar su bendición de la ciudad.
* ''Los paganos'' verían el rehuso de los Cristianos de involucrarse en la idolatría como un rechazo total de los valores de la sociedad. 'Si no honrarán ni siquiera a los dioses, ¿acaso hay algo que honrarán?'
* ''Los Judíos'' verían al Cristianismo como un movimento que se iba separando del Judaísmo, y por eso era un peligro. Además, verían a Jesús como un pretendiente mesiánico que no cumplió y fue ejecutado.

    - <span class="source">resumen deSilva, 2012, p. 63-64</span>

<hr>

    El problema principal de Hebreos no era una teología deficiente, sino una ''falta de compromiso''. - resumen deSilva, 2012, p. 65

    deSilva interpreta ''el problema detrás de Hebreos'' de esta manera:

* Los miembros de la iglesia perdieron estatus y honor en la ola de persecución que experimentaron.
* Había pasado un tiempo desde esa persecución, pero los miembros todavía no habían recibido la recompensa de haberse mantenido fieles. El precio había sido alto, y el premio no había llegado. Los miembros se sentían decepcionados.
* La presión social seguía, y la tentación de los miembros era de retirarse y dejar de asociarse con este movimiento perseguido (10.25).

    - <span class="source">resumen deSilva, 2012, p. 67</span>

<hr>

    El autor de Hebreos usó ''tres estrategias retóricas'' para convencer a los destinatarios a perseverar y seguir avanzando en Cristo:

* Fortalecer la cosmovisión de ellos para ayudarles a reinterpretar las tensiones sociales alrededor de ellos
* Fortalecerlos como comunidad
* Proteger a los miembros de los intentos que la sociedad usaba para avergonzarlos.

    - <span class="source">resumen deSilva, 2012, p. 68-69</span>
   '' Bosquejo''

* v. 10 - Una declaración de la victoria de Dios sobre el diablo, con la razón detrás de la victoria
* (v. 11 - Información adicional acerca de los mártires mencionados en v. 10)
* v. 12a - Un llamado a la alabanza, dirigida a los cielos
* v. 12b - Un ay dirigido a la tierra y el mar

<hr>

    ''Se nota que v. 11 es un paréntesis:''

* Si leemos vv. 10 y 12 juntos sin v. 11, la conexión entre los versículos resulta muy clara: Dios reina, porque el diablo ha sido lanzado del cielo a la tierra. Así que los cielos deben regocijarse, y la tierra y el mar deben lamentar.
* El motivo del llamado a la alabanza en v. 12 es la victoria de Dios en v. 10. Sería extraño llamar al universo a la alabanza porque los mártires murieron (v. 11).
* V. 11 no continua el pensamiento de v. 10. En v. 10 la victoria es que el dragón ha sido lanzado a la tierra. En v. 11, la victoria es la perseverancia de los mártires, y no se trata del lanzamiento del dragón.
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/f8fYHkIZSmnuDF" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/2-juan-srmp" title="2 Juan SRMP" target="_blank">2 Juan SRMP</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/64jCektMYOUfqe" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/3-juansrmp-8608732" title="3 juansrmp" target="_blank">3 juansrmp</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/8gbcwXI05iTbNQ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-juan-s-8780454" title="1 Juan S" target="_blank">1 Juan S</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/aIKoIZc322u3yo" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-juan-r-8780814" title="1 Juan R" target="_blank">1 Juan R</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/LPXcotlRg1r2Gk" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-juan-m-8783650" title="1 Juan M" target="_blank">1 Juan M</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="http://www.slideshare.net/slideshow/embed_code/key/xgLI9YOHdJ3VhJ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-juan-p" title="1 Juan P" target="_blank">1 Juan P</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
Tenemos dos presentaciones en Slideshare.net acerca de 1 Pedro, disponibles abajo.

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/AUdTzYEuj4pIQd" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-pedro-s" title="1 Pedro &#x27;S&#x27;" target="_blank">1 Pedro &#x27;S&#x27;</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/E8BgVySKnzUBo7" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/1-pedro-r" title="1 Pedro R" target="_blank">1 Pedro R</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
Tenemos cuatro presentaciones en slideshare.net acerca de 2 Pedro, disponibles abajo.

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/uxsuhZHpfdf8Oy" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/2-pedro-s" title="2 Pedro S" target="_blank">2 Pedro S</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/iUOhCU3dIyPqL5" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/2-pedro-r" title="2 Pedro R" target="_blank">2 Pedro R</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/1L6wggbc1nFxvG" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/2-pedro-m-8854271" title="2 Pedro M" target="_blank">2 Pedro M</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/zcu3nGZI6Ghpeo" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/2-pedro-p" title="2 Pedro P" target="_blank">2 Pedro P</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/qZGSXFlmbnPUZM" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/apocalipsis-01-panorama" title="Un panorama del libro de Apocalipsis" target="_blank">Un panorama del libro de Apocalipsis</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/wu7CKT4JH3I9Pw" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/apocalipsis-02-situacion-respuesta-mensaje" title="Apocalipsis 0.2 situacion y respuesta" target="_blank">Apocalipsis 0.2 situacion y respuesta</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
<iframe src="https://www.slideshare.net/slideshow/embed_code/key/2NvKhi6O0xPq9a" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/hebreos-s" title="Hebreos S" target="_blank">Hebreos S</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/Ed559gQ0EUSxG" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/hebreos-r-8855180" title="Hebreos R" target="_blank">Hebreos R</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
Tenemos cuatro presentaciones en Slideshare.net acerca de Judas, que puedes ver abajo:

<iframe src="http://www.slideshare.net/slideshow/embed_code/key/MvSK1h9KcozQdA" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/NoteStorm/judas-s-8780332" title="Judas S" target="_blank">Judas S</a> </strong> from <strong><a target="_blank" href="http://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/BE2In6wLFNsJJ" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/judas-r-8716692" title="Judas &#x27;R&#x27;" target="_blank">Judas &#x27;R&#x27;</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/IsLdc3gIi0gdeH" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/judas-m-8780344" title="Judas M" target="_blank">Judas M</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/4asFSkUPHzfARO" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/judas-p" title="Judas P" target="_blank">Judas P</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

|bluealtrows|k
|!4.10|En esto consiste el amor: no en que nosotros hayamos amado a Dios, sino en que él nos amó a nosotros y envió a su Hijo en propiciación por nuestros pecados.|
|!4.18-21|En el amor no hay temor, sino que el perfecto amor echa fuera el temor, porque el temor lleva en sí castigo. De donde el que teme, no ha sido perfeccionado en el amor.<br>Nosotros lo amamos a él porque él nos amó primero. Si alguno dice: «Yo amo a Dios», pero odia a su hermano, es mentiroso, pues el que no ama a su hermano a quien ha visto, ¿cómo puede amar a Dios a quien no ha visto? Y nosotros tenemos este mandamiento de él: «El que ama a Dios, ame también a su hermano».|
|!5.1-3|Todo aquel que cree que Jesús es el Cristo es nacido de Dios; y todo aquel que ama al que engendró ama también al que ha sido engendrado por él. En esto conocemos que amamos a los hijos de Dios, cuando amamos a Dios y guardamos sus mandamientos, pues este es el amor a Dios: que guardemos sus mandamientos; y sus mandamientos no son gravosos|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
|bluealtrows|k
|!2.10|El que ama a su hermano, permanece en la luz y en él no hay tropiezo.|
|!3.10-11|En esto se manifiestan los hijos de Dios y los hijos del diablo: todo aquel que no hace justicia y que no ama a su hermano, no es de Dios. Este es el mensaje que habéis oído desde el principio: que nos amemos unos a otros.|
|!3.14|Nosotros sabemos que hemos pasado de muerte a vida, porque amamos a los hermanos. El que no ama a su hermano permanece en muerte.|
|!3.16-18|En esto hemos conocido el amor, en que él puso su vida por nosotros; también nosotros debemos poner nuestras vidas por los hermanos. Pero el que tiene bienes de este mundo y ve a su hermano tener necesidad y cierra contra él su corazón, ¿cómo mora el amor de Dios en él? Hijitos míos, no amemos de palabra ni de lengua, sino de hecho y en verdad.|
|!3.23|Y este es su mandamiento: que creamos en el nombre de su Hijo Jesucristo y nos amemos unos a otros como nos lo ha mandado.|
|!4.7-8|Amados, amémonos unos a otros, porque el amor es de Dios. Todo aquel que ama es nacido de Dios y conoce a Dios. El que no ama no ha conocido a Dios, porque Dios es amor.|
|!4.11-12|Amados, si Dios así nos ha amado, también debemos amarnos unos a otros. Nadie ha visto jamás a Dios. Si nos amamos unos a otros, Dios permanece en nosotros y su amor se ha perfeccionado en nosotros.|
|!4.16-21|Y nosotros hemos conocido y creído el amor que Dios tiene para con nosotros. Dios es amor, y el que permanece en amor permanece en Dios y Dios en él. En esto se ha perfeccionado el amor en nosotros, para que tengamos confianza en el día del juicio, pues como él es, así somos nosotros en este mundo. En el amor no hay temor, sino que el perfecto amor echa fuera el temor, porque el temor lleva en sí castigo. De donde el que teme, no ha sido perfeccionado en el amor. <br>Nosotros lo amamos a él porque él nos amó primero. Si alguno dice: «Yo amo a Dios», pero odia a su hermano, es mentiroso, pues el que no ama a su hermano a quien ha visto, ¿cómo puede amar a Dios a quien no ha visto? Y nosotros tenemos este mandamiento de él: «El que ama a Dios, ame también a su hermano».|
|!5.1-2|Todo aquel que cree que Jesús es el Cristo es nacido de Dios; y todo aquel que ama al que engendró ama también al que ha sido engendrado por él. En esto conocemos que amamos a los hijos de Dios, cuando amamos a Dios y guardamos sus mandamientos...|

<span class="source">Texto bíblico: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)</span>
<table class="altgray"><tr><td>

Richard Bauckham y James Ressequie dicen que Apocalipsis pinta un retrato de un "éxodo escatológico" de un nuevo Israel a la tierra prometida (la nueva Jerusalén). En este éxodo, Cristo saca su pueblo de Babilonia tal como Dios sacó que pueblo de Egipto. Lo que sigue es la evidencia que estos autores ofrecen.

</td></tr><tr><td>

Jesús se describe como un cordero que actúa como rescate (similar al cordero de la Pascua).

</td></tr><tr><td>

Jesús convierte su pueblo en un reino y sacerdotes que sirven a Dios (Apocalipsis 1.6, 5.10; compare con Éxodo 19.5-6).

</td></tr><tr><td>

Varias de las plagas en Apocalipsis dan eco a las diez plagas del éxodo.

</td></tr><tr><td>

En Apocalipsis 7 los santos son sellados para protegerlos de las plagas (especialmente en 7.3 y 9.4). Esto es similar a la protección que Dios dio a Israel durante la primera Pascua, cuando la última plaga afectó a los Egipcios pero no a los Israelitas que habían aplicado la sangre a sus puertas.

</td></tr><tr><td>

En Apocalipsis 10.1 las piernas del ángel se describen como pilares de fuego.

</td></tr><tr><td>

Los dos testigos de Apocalipsis 11 tienen el poder de convertir el agua en sangre y afectar a la tierra con todo tipo de plagas, tal como Dios hizo por medio de Moisés en Egipto (Apocalipsis 11.6). En Apocalipsis 11.8 Jerusalén es llamada Egipto.

</td></tr><tr><td>

Apocalipsis 15.2-4 se parece a Éxodo 15. En Éxodo 15 Israel cantó el cántico de Moisés al lado del mar después de la derrota del ejército de faraón. De la misma manera, en Apocalipsis 15.2-4 el pueblo de Dios "canta el cántico de Moisés" al lado de un mar. Además, en Éxodo 15.11 el pueblo canta las maravillas y proezas gloriosas de Dios y preguntan "¿Quién como tú?", y en Apocalipsis 15.2-4 el pueblo canta las maravillas y proezas gloriosas de Dios y preguntan, "¿Quién no te temerá?"

</td></tr><tr><td>

Los fenómenos cósmicos en Apocalipsis 16.18 son reminescientes de los fenómenos cósmicos que acompañaban la aparición de Dios en el Monte Sinaí en Éxodo.

</td></tr><tr><td>

En Apocalipsis 18.4 una voz celestial llama, «¡Salid de ella, pueblo mío, para que no seáis partícipes de sus pecados ni recibáis parte de sus plagas!»

</td></tr></table>

<span class="source">Fuentes: Richard Bauckham, The Theology of the Book of Revelation. (Cambridge: Cambridge University Press, 1993); James Ressequie, The Revelation of John: A Narrative Commentary. (Grand Rapids: Baker Academic, 2009)</span>
<table class="altgray"><tr><td>

''Objeción:'' 2 Pedro fue escrito después de Judas al final del primer siglo, así que no puede haber sido escrito por Pedro.

://Respuesta: véase la introducción a Judas para argumentos a favor de la posición que Pedro escribió primero.//

</td></tr><tr><td>

''Objeción:'' 2 Pedro fue disputado desde el principio en la iglesia patrística (véase Aceptación en el Canon).

''Objeción:'' El autor se refiere a las cartas de Pablo como Escrituras. Es evidencia de una fecha muy tarde. 

://Respuesta: Pablo mismo refiere a sus cartas y sus enseñanzas como Palabra de Dios y considera que sus palabras tienen una autoridad máxima (1 Co. 2.16, 7.17, 7.40, 14.37-38, 1 Ts. 2.13, 2 Ts. 3.14). //

</td></tr><tr><td>

''Objeción:'' Tiene una cristología deficiente (No pude encontrar evidencia para esta posición)

''Objeción:'' Tiene una escatología deficiente (Ladd, 650. Ladd no da evidencia para esta posición)

''Objeción:'' Tiene un sabor Gnóstico, donde el mundo es una cárcel corrupta que necesitamos escapar, y el objetivo del creyente es participar en la naturaleza divina de Dios después de la muerte (1.4).

://Respuesta: Ladd dice que Pedro usa el lenguaje del Gnosticismo (participar en la naturaleza divina) para expresar una creencia cristiana, la unión con Cristo. “Los Gnósticos enseñaban que gnosis era el destino de la humanidad después de la muerte; en esta vida el cuerpo no importa, así que uno tiene la libertad de dar plena expresión a todos los apetitos corporales. 2 Pedro dice, al contrario, que esta conducta inmoral constituye la contaminación del mundo desde la cual el “gnóstico” Cristiano ha sido liberado.” (Ladd, 651)//

://Respuesta: había ideas gnósticas en el primer siglo. Y muchos énfasis del Gnosticismo del segundo siglo no se encuentran en 2 Pedro.//

</td></tr><tr><td>

''Objeción:'' Habla de la “fe” como la tradición—el cuerpo de doctrinas que uno tiene que creer—en vez de tratarlo como la actividad de fe que uno realiza. Esto, según algunos, es una señal que la carta viene de una época posterior cuando la doctrina estaba más codificada.

://Respuesta: No hay necesidad de requerir una diferencia de muchas décadas para explicar el desarrollo de la palabra “fe” como un cuerpo de doctrinas. Puede ser el resultado del deseo de los apóstoles de trasmitir sus creencias a otros. Usaban las palabras evangelio o verdad, pero también podían haber usado “fe” para notar el contenido de su “fe.”//

</td></tr><tr><td>

''Objeción:'' 1 Pedro usa apokalupsis donde 2 Pedro usa parousia, para hablar de la segunda venida de Cristo.

://Respuesta: La diferencia entre apokalupsis y parousia no significa nada. Pablo usa ambos términos como sinónimos en sus cartas. Y si la carta hubiera sido escrita por un impostor, podemos preguntar por qué no fue más cuidadoso en imitar el vocabulario de 1 Pedro.//

</td></tr><tr><td>

''Objeción:'' ¿Por qué Pedro usó la frase “sus apóstoles” en 3.2? Parece raro si Pedro es uno de los apóstoles y colega de ellos.
*1 Pedro cita el AT 31 veces, 2 Pedro 5 veces.

://Respuesta:  Hay más alusiones al AT en 2 Pedro—véase Contexto Canónico abajo. Además, es interesante notar que ambas cartas muestran una preferencia para los mismos libros, Salmos, Proverbios e Isaías.//

</td></tr><tr><td>

''Objeción:'' El tono es muy diferente entre las dos cartas. 

://Respuesta: Esto se debe a los propósitos distintos de las dos cartas.//

</td></tr><tr><td>

''Objeción:''El vocabulario es muy diferente entre las dos cartas

*Solo tienen 100 palabras en común, mientras que las palabras que no tienen en común son 599. (Harrison 414-415)
*La mayoría de las palabras en común son palabras comunes. Solo 26 de ellos ocurren menos de 20 veces en el NT, y solo 10 ocurren menos de diez veces en el NT (Bauckham).

://Respuesta: La diferencia entre el vocabulario de las cartas se debe a los énfasis distintos entre los libros.//

</td></tr><tr><td>

''Objeción:''La calidad de griego es inferior a 1 Pedro

*El uso de los artículos es deficiente
*Usa la palabra gar (por) excesivamente
*El estilo no es muy elegante 

://Respuesta: La diferencia entre el griego de 1 Pedro y 2 Pedro puede ser debido al uso de un amanuenses para 1 Pedro (Silvano en 1 Pedro 5.12), resultando en un estilo superior. 2 Pedro, entonces, es el fruto de un escritor que era un pescador galileo que aprendió el griego como segundo idioma, posiblemente cuando ya era un adulto.//

</td></tr><tr><td>

''Objeción:'' El autor usa la transfiguración para fingir que es Pedro.

://Respuesta: es pura conjectura. Además, debemos notar que el autor no usa el lenguaje de los Evangelios Sinópticos para hablar de la transfiguración. Si fue Pedro, es natural que dependió de su propia memoria del evento en vez de basarse en los relatos de otros. Si fue un impostor, es difícil ver por qué no usó el lenguaje de los Sinópticos.//

</td></tr><tr><td>

''Objeción:'' Es imposible que Pedro hubiera hablado de Pablo en términos tan positivos en 3.15-16 después de su conflicto en Antioquia (Gal. 2.11ff). Tampoco es posible que Pedro hubiera clasificado a sus cartas como Escrituras.

://Respuesta: Es muy posible que Pedro aprendió su lección en Antioquia, o por lo menos no guardó rencor contra Pablo después del evento.// 

</td></tr></table>
<table class="altgray"><tr><td>

El autor nunca dice que es un apóstol.

<span class="indent1">//Una respuesta sería que las iglesias a las cuales Juan escribe sabrían cuál de los Juanes les escribe. Así que no era necesario identificarse con más especificidad, ni enfatizar su apostolicidad.//</span>

</td></tr><tr><td>

El estilo y el vocabulario de Apocalipsis son notablemente diferente a los del Evangelio y las cartas de Juan.

<span class="indent1">//Esto sí es un argumento de peso. Pero una respuesta podría ser que el contenido de los libros es muy distinto, y esto requiere un cambio en estilo y vocabulario.//</span>

</td></tr><tr><td>

La calidad de la gramática griega en Apocalipsis es muy inferior a la del Evangelio y las cartas de Juan.

<span class="indent1">//Este argumento es posiblemente el de más peso. Pero algunos responden diciendo que el griego no era el primer idioma de Juan. Cuando Juan escribió el Evangelio, tenía la ayuda de un amanuensis (secretario). En cambio, cuando escribió Apocalipsis, estaba exiliado a una isla-cárcel sin la ayuda amanuensis (secretario) para limpiar su griego. Otros dicen que Juan fue intencional en escribir Apocalipsis con griego inferior. Él quería detener a sus lectores para que leyeran su libro con cuidado, para fijarse en los detalles de su libro.//</span>

</td></tr><tr><td>

Se puede decir que la teología de Apocalipsis difiere de la teología del Evangelio y las cartas de Juan.

* Algunos dicen que el Dios del Evangelio es amor, pero el Dios de Apocalipsis es un Dios de juicio. Pero esta idea simplista. En toda la Biblia vemos tanto la justicia como el amor de Dios. Las dos cosas no contradicen.
* Algunos dicen que el retrato de Cristo en Juan es de un Revelador y un Redentor, pero el Cristo de Apocalipsis es un Guerrero y un Soberano. Pero no vemos ninguna tensión entre estas diferentes funciones de Cristo.
* Algunos dicen que el Evangelio de Juan se enfoca en "escatología realizada" (es decir, los cambios que el evangelio hace en las personas en el presente), mientras Apocalipsis se enfoca en la escatología futura. Pero este contraste no es correcto. El Evangelio de Juan está lleno de referencias a la escatología futura también.

</td></tr><tr><td>

Hay una tradición que alega que Juan el apóstol murió jóven como mártir. Él no hubiera vivido una vida suficiente large para vivir y escribir en el tiempo en que fue escrito Apocalipsis.

<span class="indent1">//Pero muchos de la iglesia antigua creían que Juan el apóstol lo escribió, y que escribió en el tiempo del emperador Domiciano, hacia los finales del primer siglo. Así que esta tradición de la muerte temprana de Juan no fue universalmente aceptada.//</span>

</td></tr><tr><td>

Apocalipsis menciona el nombre de su autor, mientras el Evangelio de Juan es anónimo, escrito por "el discípulo amado".

<span class="indent1">//Esta diferencia es en verdad sorprendente, pero no elimina la posibilidad que el autor tuvo diferentes intenciones cuando escribió sus respectivos libros. Puede ser que por modestidad excluyó su nombre del Evangelio, especialmente porque aparece en el Evangelio. Pero en el caso de Apocalipsis, sintió la necesidad de incluir su nombre para autenticar la profecía que recibió de Jesús.//</span>

</td></tr><tr><td>

No hay nada en Apocalipsis que indica que el autor había conocido a Jesús personalmente durante la vida de éste en la tierra. Esto es sorprendente si el libro fue escrito por uno de los doce apóstoles.

<span class="indent1">//La respuesta es que el autor de Apocalipsis está reportando el contenido de una visión. No está exponiendo sus propios pensamientos. No tenía necesidad de mencionar su pasado con Jesús en este libro. ¿Hubiera sido necesario que los apóstoles incluyeran menciones de su tiempo con Jesús en todas las cosas que escribieron?//</span>

</td></tr><tr><td>

Algunas personas en los primeros siglos de la iglesia cristiana (Gayo, Dionisio, Marción) no creían que Juan era el autor de Apocalipsis.

<span class="indent1">//Gayo y Dionisio, ambos del tercer siglo, tenían motivos teológicos para negar que Juan era el autor de Apocalipsis: ellos querían detener los movimientos milenialistas que usaban Apocalipsis 20 para apoyar sus ideas. En el caso de Marción, no debemos tomar muy en serio sus conclusiones acercda de autorío de Apocalipsis, porque él tenía la costumbre de rechazar cualquier porción del Nuevo Testamento que no apoyaba sus creencias distintas.//</span>

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Carson, Moo and Morris, An Introduction to the New Testament. (Grand Rapids: Zondervan, 1992)</span>
//    Fuentes: Carey, Greg, “Teaching and preaching the book of Revelation in the church”, Review & Expositor 98 no 1 Wint 2001, p 87-100; Craddock, Fred B, “Preaching the Book of Revelation”, Interpretation 40 no 3 Jl 1986, p 270-282; Wishart, Charles Frederick, “Patmos in the pulpit: a meditation on apocalyptic”,Interpretation 1 no 4 O 1947, p 456-465; Wray, Judith K Hoch, “The revelation: worship resource for preaching”, Living Pulpit 12 no 3 Jl-S 2003, p 8-9//

<hr>

    Fred Craddock nos urge a no evitar predicar sobre Apocalipsis solo porque no nos gusta el tiempo y el esfuerzo que se requiere para entenderlo. Nosotros y nuestras iglesias necesitamos y merecemos ser inspirados por esta parte importante de la Palabra de Dios. Además, predicar sobre Apocalipsis es una manera importante de disipar las ideas erróneas que se han desarrollado alrededor de este libro.

<hr>

    Los dos propósitos de este libro son de confortar a los Cristianos perseguidos, y fortalecerlos para resistir las presiones de la sociedad a aceptar una vida idólatra e inmoral. Debemos considerar cuál de estos dos propósitos es más relevante para nuestros oidores. Puede ser que nuestra iglesia es perseguida a menudo, o puede ser que hayan muchas tentaciones a las cuales nuestra iglesia está expuesta. Debemos mostrar a nuestros oidores las formas en que Apocalipsis les habla con respecto a estos propósitos.

<hr>

    Hay que aprovechar de los muchos himnos y coros basados en el libro de Apocalipsis. Usa su letra como material para tus sermones sobre Apocalipsis. Haz que se canten estos himnos y coros en los cultos donde se predica de Apocalipsis.

<hr>

    Hay muchos conceptos erróneos populares acerca de la escatología en general y acerca del libro de Apocalipsis en particular. Necesitarás corregir estos conceptos para ayudar a tus oidores a formar un mejor entendimiento de este libro.

<hr>

    El libro de Apocalipsis es una obra de arte. Inculca en tus oidores un sentido de fascinación para los muchos aspectos impresionantes de este libro, incluyendo sus muchas alusiones al Antiguo Testamento, y su vasta variedad de técnicas literarias.

<hr>

    Fred Craddock nos recuerda que el acto de explicar un texto no es igual al acto de predicar el texto. En el caso del libro de Apocalipsis, las explicaciones de sus detalles a veces impiden algo que es mucho más importante: permitir que el libro "forme su propio mundo" en las mentes de tus oidores.

<hr>

    Los mensajes a las siete iglesias en capítulos dos y tres formarían una buena serie de siete sermones. Se podría preguntar, "¿Cómo es nuestra iglesia similar a la iglesia en este texto?" "¿Qué escribiría Jesucristo si enviara una carta a nuestra iglesia?" "¿A cuál de las siete iglesias es más semejante nuestra iglesia?"

<hr>

    Judith Wray recomienda usar pasajes del libro de Apocalipsis a través del culto. Ella nota que hay referencias a la oración, al incienso, al silencio, a los testimonios, a las trompetas, y a las invitaciones. Yo añadaría las bienaventuranzas, las doxologías, y la apertura y lectura de libros. Estos elementos de Apocalipsis podrían conectarse a las diferentes partes del culto - tocar una trompeta, guardar silencio, quemar incienso, etc, para resaltar el texto de Apocalipsis a través del culto y no solo durante la predicación. Para dar un ejemplo, Wray recomienda que se usa Apocalipsis 22.17 como invitación a la Santa Cena.
<table class="altgray"><tr><td>

    Tanto Apocalipsis 1.3 como Lucas 11.28 pronuncian una bienaventuranza sobre los que oyen y obedecen la palabra de Dios.

</td></tr><tr><td>

    Tanto Apocalipsis 1.7 como Mateo 24.30 dicen que Jesús vendrá sobre las nubes y que las naciones lamentarán por causa de su venida.

</td></tr><tr><td>

    La descripción de Jesús en Apocalipsis 1.16 es similar a la descripción de la transfiguración de Jesús en Mateo 17.2.

</td></tr><tr><td>

    La frase "El que tiene oídos para oír" en Apocalipsis 2.7, 2.11 y 2.17 da eco al uso similar de Jesús en Mateo 11.15, 13.9, etc.

</td></tr><tr><td>

    La venida de Jesús se compara a un ladrón en Apocalipsis 3.3, Mateo 24.42-43 y Lucas 12.39-40.

</td></tr><tr><td>

    En Apocalipsis 3.5 Jesús dice que él reconocerá delante de su Padre a los que vencen. En Mateo 10.32 y Lucas 12.8, Jesús dice que reconocerá delante de su Padre a los que lo reconocen a él.

</td></tr><tr><td>

    Apocalipsis 3.20-21 dice que Jesús llama, y los que lo invitan y vencen en sus pruebas comerán y beberán con Jesús y se sentarán en su trono. Lucas 12.35-40 habla de siervos que necesitan abrir la puerta cuando su Amo llama. Lucas 22.28-30 dice que los discípulos de Jesús comerán y beberán con él y se sentarán sobre tronos. Mateo 19.28 también menciona los tronos de los discípulos de Jesús.

</td></tr><tr><td>

    Los siete sellos en Apocalipsis 6 y el discurso escatológico en Mateo 24, Marcos 13 y Lucas 21 mencionan los mismos fenómenos en casi el mismo orden: falsos Cristos, guerras, hambre, plagas, temblores, persecución, y disturbios en los cielos.

</td></tr><tr><td>

    Apocalipsis 12.9 y Lucas 10.18 hablan de la caída de Satanás del cielo.

</td></tr><tr><td>

    Apocalipsis 13.10 y Mateo 26.52 tienen proverbios similares acerca de perecer a espada.

</td></tr><tr><td>

    Apocalipsis 18.24 dice que "Babilonia" (es decir, Roma) es responsable por la muerte de todos los profetas. Lucas 11.50 dice que la generación de Jesús es responsable por ese crimen.

</td></tr><tr><td>

    Mark Wilson tiene una tabla de todos los paralelos entre Apocalipsis y los Evangelios Sinópticos, que incluye higueras, ángeles, los cuatro vientos, trompetas, los Gentiles que pisotean, el engaño de las naciones, exhortaciones a velar y perseverar, cosechas, banquetes, etc.

</td></tr></table>

<span class="source">Fuentes: David E. Aune, Word Biblical Commentary, Vol. 52: Revelation 1-5. (Waco, TX: Word, 1997); William Hendriksen, More Than Conquerors. (Grand Rapids: Baker, 1986), 47; Mark Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), 36-37, 77.</span>
Duane F. Watson y Richard Bauckham organizan el bosquejo de 2 Pedro en maneras similares, organizando sus bosquejos alrededor de las acusaciones de los adversarios y las respuestas de Pedro. En la tabla abajo he combinado los mejores aspectos de cada uno en un solo bosquejo.

|bluealtrows|k
|1.1-15|Introducción y exhortaciones|
|1.16-19|Primera acusación: Los apóstoles inventaron todo|
|1.20-21|Segunda acusación: Las profecías del AT no son de Dios|
|2.1-3a|Predicción de los falsos profetas|
|2.3b-10a|Tercera acusación: Los adversarios no serán juzgados por Dios|
|2.10b-22|Pedro denuncia de los falsos profetas|
|3.1-2|Transición|
|3.3-13|Cuarta acusación: El día del Señor se ha tardado - nunca vendrá|
|3.14-18|Exhortaciones|

@@.source Face of New Testament Studies, 388-389.@@
<table class="altgray"><tr><td>

!!!Una estructura basada en 1.19

*Lo que has visto (1.1-20)
*Lo que es ahora (2.1-3.21)
*Lo que sucederá después (4.1-22.21)

</td></tr><tr><td>

!!!Una estructura basada en las experiencias que Juan tiene “en el Espíritu”

*En el Espíritu en la isla de Patmos (1.9-10)
*En el Espíritu en el cielo (4.1-2)
*En el Espíritu en el desierto (17.3)
*En el Espíritu en una montaña (21.10)

<span class="source">Mark S. Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel 2007), p. 31</span>

</td></tr><tr><td>

!!!Una estructura de Apocalipsis como un drama de siete escenas

* Prólogo (1.1-8)
* Primera escena: Las siete lámparas (1.9-3.22)
* Segunda escena: Los siete sellos (4.1-8.4)
* Tercera escena: Las siete trompetas (8.5-11.18)
* Cuarta escena: Los siete "tableaux" (11.19-15.4)
* Quinta escena: Las siete copas de ira (15.5-16.21)
* Sexta escena: Los siete juicios (17.1-20.3)
* Séptima escena: Las siete promesas grandes (20.4-22.5)
* Epílogo (22.6-21)

<span class="source">Fuente desconocida.</span>

</td></tr></table>
<table class="altgray"><tr><td>

!!!La tercerca parte

* La tercerca parte de la tierra (8.7)
* La tercerca parte de los árboles (8.7)
* La tercerca parte del mar (8.7)
* La tercerca parte de los seres vivientes (8.9)
* La tercerca parte de los barcos (8.9)
* La tercerca parte de los ríos (8.10)
* La tercerca parte de las aguas (8.11)
* La tercerca parte del sol (8.12)
* La tercerca parte de la luna (8.12)
* La tercerca parte de las estrellas (8.12, 12.4)
* La tercerca parte de la humanidad (9.15, 9.18)

</td></tr><tr><td>

!!!Dos

* Dos testigos (11.3)
* Dos olivos (11.4)
* Dos candelabros (11.4)
* Dos candelabros (11.10)
* Dos alas (12.14)
* Dos cuernos (13.11)
* Dos bestias (19.20)

</td></tr><tr><td>

!!!Tres

* La Trinidad (Dios Padre, Cristo y el Espíritu) y la falsa trinidad del dragón, la bestia, y el falso profeta (16.13)
* Tres ángeles en 8.13; 14.6, 8, 9
* Santo, santo, santo (4.8), Ay, ay, ay (8.13), Aleluya, aleluya, aleluya (19.1, 3, 6).
* Tres objetos en una oración gramatical (2.2-5,9; 3.18; 4.9,11; 5.3; 7.1; 8.7,9,12; 9.17,20; 10.6; 12.1; 13.2; 14.2,3,4; 18.2,7,17,20,22-23,24; 19.6; 21.4)
* 666 como múltiple de tres

</td></tr><tr><td>

!!!Cuatro

* Cuatro criaturas vivientes, cuatro ángeles en 9.13-15 en los cuatro ángulos de la tierra (20.8) retienen los cuatro vientos (7.1). 
* Hay varias listas de cuatro objetos: 5.9,13; 6.8; 7.9; 8.21; 9.15,21; 10.11; 11.9; 12.9,10; 13.7; 14.6,7; 17.15; 18.12-13,22

</td></tr><tr><td>

!!!Doce

* Una mujer (Israel) con doce estrellas en su cabeza (12.1)
* Doce puertas con doce ángeles y los nombres de las doce tribus (21.12, 22)
* Doce cimientos de doce piedras preciosas con los nombres de los doce apóstoles (21.14-21)
* Doce perlas (21.21)
* Doce cosechas (22.2)
* Múltiples de doce: 12,000 (14.1-3, 21.16) y 144,000 (7.4-8)
* Títulos para Jesucristo (1.5; 3.7,14; 6.9; 22.13) y tres títulos para Dios (1.8; 11.17)

</td></tr><tr><td>

!!!Tres años y medio, tres días y medio (la mitad de siete)

*42 meses (11.2)
*1260 días (11.3)
*3 ½ días (11.11)

</td></tr><tr><td>

!!!666 (13.18)

Ha habido muchos intentos de descifrar el significado de este número con gemátria, la ciencia de conectar letras con números.

Ejemplos:

*6 como el número del hombre, 1 falta para la perfección de Dios (7).
*El valor de las palabras “Nerón Cesar” en consonantes hebreos

Debemos notar que algunos manuscritos griegos de Apocalipsis dicen 616 en lugar de 666, y algunos comentaristas piensan que 616 fue el número original en el texto.

</td></tr></table>
Comentarista Stephen S. Smalley señala los paralelos en 1 Juan 1.8-2.2:

<span class="doublelist">

*''1.8 y 1.10 son paralelos'': ambos versículos critican proposiciones falsas acerca de no tener pecado; ambos versículos mencionan dos resultados de creer estas proposiciones: el engaño / la mentira, y la falta de la palabra de Dios en nosotros.
*''1.9 y 2.1-2 son paralelos'': ambos textos mencionan una acción de un Cristiano (confesar el pecado, pecar [la confesión es implícita]); ambos textos mencionan los efectos de estas acciones: el perdón de los pecados.

</span>

|bluealtrows|k
|1.8|A|<span class="wine">Si decimos que no tenemos pecado</span> / <span class="red">nos engañamos a nosotros mismos,</span> / <span class="orange">y la verdad no está en nosotros.</span>|
|1.9|B|<span class="pink">Si confesamos nuestros pecados,</span> / <span class="purple">él es fiel y justo para perdonar nuestros pecados,</span> / <span class="blue">y limpiarnos de toda maldad.</span>|
|1.10|A|<span class="wine">Si decimos que no hemos pecado</span> / <span class="red">le hacemos a él ''mentiroso''</span> / <span class="orange">y'' su palabra no está en nosotros''</span>|
|2.1-2|B|Hijitos míos, estas cosas os escribo para que no pequéis; <br><br>y <span class="pink">si alguno hubiere pecado</span> / <span class="purple">abogado tenemos para con el Padre, a Jesucristo el justo</span>. / <span class="blue">Y él es la propiciación por nuestros pecados; y no solamente por los nuestros, sino también por los de todo el mundo</span>.|

<span class="source">Fuente: Stephen S. Smalley, Word Biblical Commentary, vol. 51: 1, 2, 3 John. (Waco, TX: Word, 1984)</span>
|bluealtrows|k
|!1 Pedro|!Evangelio|!Punto de comparación|
|1.8|Juan 20.29|Mención de los que creen en Cristo aunque no le hayan visto.|
|1.8-9|Mateo 5.12|Los que sufren se regojican ahora porque serán recompensados en la venida de Cristo|
|1.22|Juan 13.34-35|Una exhortación a que se amen unos a otros|
|2.12|Mateo 5.16|Una exhortación a que vivan de tal manera que provoquen que los Gentiles alaben a Dios|
|2.19-20|Lucas 6.32-34|Una crítica de los que tienen una moralidad mínima, con una exhortación a una moralidad más costosa|
|3.9|Lucas 6.27-28|Una exhortación a que bendigan a los que los maldigan|
|3.14|Mateo 5.10|Bienaventurados los perseguidos|
|4.7|Lucas 21.31, 34, 36|Mención de la importancia de la oración en el contexto de la inminente venida de los postreros tiempos|
|4.13|Mateo 5.12|Los que sufren se regojican ahora porque serán recompensados en la venida de Cristo|
|4.14|Mateo 5.11|Bienaventurados los que sufren por causa de Cristo|
|5.8-9|Lucas 22.31-32|El deseo del diablo de destruir a los creyentes y asecharlos con dificultades|

@@.source Fuente: Kistemaker, 12; Michaels, WBC@@
|bluealtrows|k
|!1 Pedro |!Romanos |!Punto de comparación|
| 1.14 | 12.2 |Exhortación a no ser conformados a lo malo|
| 1.22 | 12.9ff |Exhortación al amor fraternal entre Cristianos|
| 2.5 | 12.1 |Los creyentes ofrecen sacrificios espirituales aceptables a Dios|
| 2.6-8 | 9.32ff |Cita de Is. 28.16 (Cristo es la piedra de tropiezo)|
| 2.10 | 9.25 |Cita de Oseas 1.6, 9; 2.23 (los que no fueron pueblo han recibido misericordia)|
| 2.13-17 | 13.1-7 |Responsabilidades cívicas hacia los reyes y los ciudadanos|
| 3.8-11 | 12.17-21 |Bendecir al que te maldiga|
| 4.7-14 | Cap. 12 |El uso de los dones, la hospitalidad, la humildad, el amor, el gozo en medio de persecución|

@@.source Fuente desconocida@@
|bluealtrows|k
|!1 Pedro |!Santiago |!Punto de comparación|
| 1.1 | 1.1 |La carta dirigida a la 'dispersión' de Cristianos entre varias naciones|
| 1.6 | 1.2 |Regocijar en medio de las pruebas|
| 1.23 | 1.18 |Fuimos nacidos por medio de la palabra de Dios|
| 1.24 | 1.10 |Las personas comparadas con flores que rápidamente pierden su belleza|
| 2.1 | 1.21 |Desechar lo malo|
| 4.8 | 5.20 |El amor cristiano 'cubre una multitud de pecados'|
| 5.4 | 1.12 |La recepción de una corona|
| 5.5 | 4.6 |Cita de Pr. 3.34 (Dios se opone a los soberbios pero da gracia a los humildes)|
| 5.9ff | 4.7-10 |Exhortación a resistir al diablo|

@@.source Fuente desconocida@@

!!!Más

|bluealtrows|k
|!Santiago|!1 Pedro|!Punto de comparación|
|1.2|1.6|Varias tentaciones|
|1.3|1.7|Probar la fe|
|1.11|1.24|Referencia a Isaías 40.6|
|1.12|5.4|Recibir una corona|
|1.18|1.23|Engendrado por la palabra|
|1.21|2.2|“Salvación” y “desechar”|
|1.27|2.5|Adoración espiritual|
|3.13|2.12|Caminar con honestidad|
|4.1|2.11|El deseo produce la guerra|
|4.6|5.5b|Referencia a Proverbios 3.34|
|4.7|5.5a|Someterse a las autoridades|
|4.7|5.9|Resistir al Diablo|
|4.10|5.6|Ser humillado|
|5.20|4.8|Referencia a Proverbios 10.12|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
!!!!Paralelos verbales

|bluealtrows|k
|!1 Pedro|!2 Pedro|!Punto de comparación|
|1.2|1.2|“Gracia y paz os sean multiplicadas”|
|1.7, 1.19, 2.6-7|1.1, 1.4|“Preciosas”|
|2.9|1.3, 1.5|“Virtud”|
|3.21|1.14|“Abandonar”|
|4.1|2.14|“Saciarse de pecar”|
|2.12, 3.2|1.16|“Visto con…propios ojos”|
|4.11|1.5, 1.11|“Añadir”|
|1.22|1.7|“Afecto fraternal”|
|1.15, 1.18, 2.12,<br>3.1, 3.2, 3.16|2.7, 3.11|“Manera de vivir”|
|1.19|2.13, 3.14|“Sin mancha e irreprensibles”|

@@.source Harrison, 422@@

!!!!Paralelos conceptuales

|bluealtrows|k
|!1 Pedro|!Paralelo|!2 Pedro|
|1.10-12|La inspiración del Antiguo Testamento|1.19-21|
|1.2|La doctrina de la elección|1.10|
|1.23|La doctrina del nuevo nacimiento|1.4|
|2.11-12|La necesidad de la santidad|1.5-9|
|3.19|Los ángeles pecadores en prisiones|2.4|
|3.20|Noé y su familia protegidos|2.5|
|4.2-4|La inmoralidad y el juicio|2.10-22|
|4.7-11|Una exhortación a la conducta cristiana|3.14-18|
|4.11|Una doxología|3.18|

@@.source Kistemaker, 220@@

<hr>

"En ambas cartas el escritor despierta a sus lectores de su letargia espiritual (véase 1 Pedro 1.13, 4.7, 2 Peter 1.5, 1.10, 3.17). En estas dos epístolas, Pedro exhorta a los lectores a recordarse del acercamiento del día de juicio (compare 1 Pedro 2.12, 2 Pedro 3.12). Y en estos escritos, el autor exhorta a los recipientes a seguir el ejemplo de Jesucristo." - @@.source Kistemaker, 224@@
Versículos 6 y 14 dan la misma información, aunque v. 14 da más detalle que v. 6:

|bluealtrows|k
|!v. 6|!v. 14|
|La mujer huye|La mujer huye - porque fue dada alas de águila|
|Huye al desierto|Huye al desierto|
|donde hay un lugar preparado para ella|donde hay un lugar preparado para ella|
|donde se cuida de ella|donde se cuida de ella|
|por 1260 días (3 años y medio)|Por dos tiempos, un tiempo y mediotiempo (3 años y medio)|
| -- |Está fuera del alcance del serpiente|
|bluealtrows|k
|!Caps. 2-3|!Caps. 19-22|!Punto de comparación|
|2.7|21.7|Arbol de vida|
|2.11|20.6|La segunda muerte|
|2.17|19.12|Nuevo nombre secreto|
|2.29|22.16|Estrella de la mañana|
|3.5|20.12, 15; 21.27|Libro de la vida|
|3.12|21.2|Nueva Jerusalén|
|3.21|20.4, 20.11, 22.3|El trono de Dios y del Cordero|

@@.source Fuente desconocida.@@
<table class="altgray"><tr><td>

    Apocalipsis 1.5 y Colosenses 1.18 refieren a Jesús como el "el primogénito de entre los muertos" en contextos que hablan de su reinado.

</td></tr><tr><td>

    Apocalipsis 3.3 y 16.15 dicen que Jesús vendrán como ladrón. Pablo en 1 Tesalonicenses 5.2 y 5.4 dice que el día del Señor vendrá como un ladrón en la noche.

</td></tr><tr><td>

    Apocalipsis 3.12, 21.23 y 21.10 refieren a una nueva Jerusalén que desciende del cielo. Gálatas 4.26 habla del "Jerusalén de arriba".

</td></tr><tr><td>

    Apocalipsis 17.14 y 1 Timoteo 6.15 refieren a Jesús como Rey de reyes y Señor de señores.

</td></tr><tr><td>

    Apocalipsis 18.4 pide que sus lectores salgan de Babilonia y no participen en sus pecados. 2 Corintios 6.17 cita Isaías 52.11, otra llamada de salir de Babilonia. En Efesios 5.11 Pablo pide que sus lectores no participen en los pecados de la oscuridad.

</td></tr><tr><td>

    En Apocalipsis 21.4, una voz desde el trono dice que el orden anterior de las cosas ya pasó, y en versículo 5 Dios dice, "Yo hago nuevas todas las cosas". 2 Corintios 5.17 dice que si alguien está en Cristo, lo viejo ha pasado y lo nuevo ha venido.

</td></tr><tr><td>

    Mark Wilson también tiene una tabla que contiene temas escatológicos que tanto Apocalipsis como Pablo mencionan, como gritos, trompetas, coronas, y ángeles en el último día; Jesús vendrá sobre las nubes y reinará sobre las naciones; un día de venganza e ira; las naciones serán engañadas; juicio y recompensa; y exhortaciones de velar y de perseverar.

</td></tr></table>

<span class="source">Fuentes: William Hendriksen, More Than Conquerors. (Grand Rapids: Baker, 1986), 47; Mark Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), 36-37.</span>
<table class="altgray"><tr><td>

    Hay un paralelo ente Apocalipsis y ''Hechos'': en Apocalipsis 2.20-24, una profetiza que Juan llama Jezabel seduce a la iglesia en Tiatira a meterse en la inmoralidad sexual y comer comida sacrificada a ídoloes. En Hechos 15.28 el concilio de Jerusalén prohibió que las iglesias se metieran en estas dos actividades.

</td></tr><tr><td>

    Hay un paralelo entre Apocalipsis y la carta de ''Santiago'': en Apocalipsis 2.10 Jesús advierte a la iglesia en Esmirna que será probada, y promete que los fieles recibirán la 'corona de vida'. Santiago 1.12 dice que la persona que pasa la prueba recibirá la corona de vida.

</td></tr><tr><td>

Hay dos paralelos entre Apocalipsis y ''1 Pedro'':

* Apocalipsos 13.8 habla del "Cordero que fue inmolado" y en el mismo versículo menciona las palabras "desde el principio del mundo". 1 Pedro 1.19-20 igualmente compara Jesús a un cordero sacrificado, y dice que fue escogido desde la creación del mundo.
* Tanto Apocalipsis como 1 Pedro 5.13 refieren a Roma como Babilonia.

</td></tr><tr><td>

Apocalipsis tiene numerosos paralelos con ''2 Pedro y Judas''. Para la lista completa, consulta Wilson, 40. Lo que sigue es una muestra de ejemplos notables:

* Falsos maestros comparados con Balaám: Apocalipsis 2.14; 2 Pedro 2.15, 3.17; Judas 11.
* Contrastes entre conocimiento falso y conocimiento verdadero: Apocalipsis 2.17, 24; 2 Pedro 1.2-3, 16; Judas 10.
* Cristo llamado la estrella de la mañana: Apocalipsis 2.28, 22.16; 2 Pedro 1.19.
* El día de Cristo comparado a un ladrón: Apocalipsis 3.3, 16.15; 2 Pedro 3.10.
* La desaparición del los cielos actuales y la tierra actual: Apocalipsis 6.14, 16.20, 20.11; 2 Pedro 3.10.
* Ángeles caídos encadenados en un abismo: Apocalipsis 20.1-3; 2 Pedro 2.4; Judas 6.
* Sodoma y Egipto: Apocalipsis 11.8; 2 Pedro 2.6; Judas 5, 7.

</td></tr></table>

<span class="source">Fuentes: William Hendriksen, More Than Conquerors. (Grand Rapids: Baker, 1986), 47; Mark Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), 40.</span>
|bluealtrows|k
|!1 Pedro |!Efesios |!Punto de comparación|
| 1.3 | 1.3 |"Bendito el Dios y Padre de nuestro Señor Jesucristo"|
| 1.10-12 | 3.2-6 |Cosas que no fueron reveladas en otro tiempo ahora reveladas a nosotros|
| 1.20 | 1.4 |Cristo fue escogido antes de la creación del mundo|
| 2.1 | 4.25, 31 |Exhortación a desechar la malicia, el engaño, la maledicencia, etc|
| 2.2-6 | 2.18-22 |La iglesia como templo edificado de piedras, con Cristo como la piedra de ángulo|
| 3.1 | 5.22 |Exhortación a las esposas que se sujeten a sus maridos|
| 3.22 | 1.20ff |Cristo fue al cielo y está sobre autoridades y poderes|

@@.source Fuente desconocida@@
|bluealtrows|k
|!Puntos de comparación|!Juan|!1 Juan|
|Somos “del diablo”, un asesino|8.44|3.8, 3.10|
|Somos “del mundo”|8.23, 15.19|2.16, 4.5|
|Pecamos|8.34|3.4|
|“Tenemos pecado”|9.41|1.8|
|Andar en tinieblas|8.12, 12.35|1.6, 2.11|
|Espiritualmente “ciegos”|12.40|2.11|
|“Muertos”|5.25|3.14|
|El “Salvador de mundo”|4.42|4.14|
|“Para que vivamos”|3.16|4.9|
|Cristo el “único”|1.14, 1.18, 3.16, 3.18|4.9|
|“En” o “desde el principio”|1.1|1.1|
|Vino “en la carne”|1.14|4.2|
|“Entregó su vida” por nosotros|10.11-18|3.16|
|“Quitar” al pecado|1.29|3.5|
|“Testimonio” de los que han “visto” y “proclamado”|1.34, 19.35|1.2-3, 4.14|
|Testimonio de Dios|3.33, 5.32-37|5.9|
|Testimonio del Espíritu|15.26|5.6|
|Debemos “aceptar” este testimonio|3.11, 3.32-33, 5.34|5.9|
|“Creer” en él de quien el testimonio habla|5.37-40|5.10|
|“Confesar”lo|9.22|4.2-3|
|Creer en su “nombre”|1.12|5.13|
|Pasar de la muerte a la vida”|5.24|3.14|
|“Tenemos vida”|3.15, 3.36, 20.31|5.11-12|
|La vida está en su Hijo|1.4, 14.6|5.11-12|
|“Nacido de Dios”|1.13|2.29, 3.9, 5.4, 5.18|
|“Hijos” de Dios|1.12, 11.52|3.1-10, 5.2|
|Son “de Dios”|8.47|3.10|
|Conocer a Dios por Jesús|17.3|5.20|
|Han visto a Dios|14.9|3.6, 3 Jn. 11|
|Aunque nadie lo ha visto literalmente|1.18, 6.46|4.12, 4.20|
|Somos “de” la verdad|18.37|2.21, 3.19|
|La verdad “en” nosotros|8.44|1:8, 2.4|
|Practicar la verdad |3.21|1.6|
|“El Espíritu de verdad”|14.17, 15.26, 16.13|4.6, 5.6|
|“Permanecer” en Jesús|15.4-10|2.6, 2.27-28, 3.6, 3.24, 4.13-16|
|;Cristo vive en nosotros|6.56, 15.4-5|2.24, 3.24, 4.12-16|
|Su palabra vive en nosotros|5.38, 15.7|1.10, 2.14, 2.24|
|“Obedecer su palabra”|8.51-55, 14.23, 15.20, 17.6|2.5|
|Obedecemos sus mandamientos|14.15, 14.21,15.10|2.3-4, 3.22-24, 5.2-3|
|Nuevo mandamiento, amémonos unos a otros|13.34|2.8-10, 3.11, 3.23, 2 Jn. 5-6|
|El mundo los odia|15.18|3.13|
|Ya no pertenecer al mundo|15.19, 17.16|4.5-6|
|No amar al mundo|17.15|2.15-16|
|Vencer al mundo|16.33|5.4-5|
|Gozo como el objetivo|15.11, 16.24, 7.13|1.4|
|Agua y sangre|19.34|5.6|
|“Cometer” pecado|8.34|3.4|
|Hemos conocido y creemos”|6.69|4.16|

Smalley, xxix, dice hay una concentración notable de enlaces entre 1 Juan y Juan 14-17.

,,Stott, 21-23, Harrison, 440,,

''Vocabulario compartido''

Padre, Hijo, Espíritu, comienzo, Palabra, Paracleto, creer, vida, eterno, amor, permanecer, guardar, mandamiento, verdadero, conocer, tener, nacer, testificar, luz, oscuridad, mundo, pecado, diablo. 

''Estilo similar''

#“Esto es…”
#“En esto…”
#“pax” (Todo) + artículo + participio
#Parataxis
#Asíndeton
#Paralelismo

,,Harrison, 440,,
|bluealtrows|k
|!Hebreos|!1 Pedro|!Punto de comparación|
|9.26|1.20, 5.4|Cristo fue “manifestado”|
|7.27, 9.26, 10.12|3.18|Cristo murió “una vez para siempre”, proveyendo la salvación|
|9.22, 12.24|1.2|La redención es por “sangre rociada / derramada”|
|11.8-16, 13.14|2.11|Los lectores son extranjeros y peregrinos|
|3.2-6|2.5|Los creyentes son la casa de Dios|
|10.32, 10.39, 12.2, 3, 7|2.20|Son llamados a perseverar|
|12.3|2.21|Ponen su mirada en Cristo|
|13.20|5.4|Jesús es el Gran Pastor|
|1.4, 6.12, 9.15|1.4-5, 3.9|Anticipan una herencia|
|10.25|4.7|El fin se acerca|

@@.source Guthrie, “Hebrews in its First-Century Contexts”, p. 440@@
''Temas comunes entre Hebreos y las cartas de Pablo:''

<span class="doublelist">

*La preexistencia de Jesucristo
*Su encarnación
*Su obediencia al punto de morir
*Su muerte como sacrificio
*Su exaltación
*Su intercesión celestial por su pueblo
*Su victoria sobre los poderes malignos
*La anticipación de su segunda venida
*Todo será sujetado a él
*La superioridad del nuevo pacto
*Dones distribuidos por el Espíritu Santo
*Abraham como ejemplo de la fe
*Los Israelitas en el desierto como un ejemplo de la desobediencia
*La vida cristiana como carrera 

</span>

@@.source Guthrie, “Hebrews in its First-Century Contexts”, 438@@
|bluealtrows|k
|!Punto de comparación|!1 Juan|!2-3 Juan|
|“La verdad”|9x|11x|
|“Jesucristo ha venido en la carne”|4.2|2 Jn. 7|
|“al Padre y al Hijo”|2.23|2 Jn. 9|
|engañador / anticristo|2.22, 26|2 Jn. 7|
|“Permanecer” en la doctrina|2.27|2 Jn. 9|
|La doctrina debe “vivir” o “permanecer” en ellos|2.14, 24|2 Jn. 2|
|“No un nuevo mandamiento” sino “el que habéis oído desde el principio”, que “nos amemos unos a otros”|2.7, 3.11|2 Jn. 5-6|
|Gozo completo en la comunión de los creyentes|1.4|2 Jn. 12, 3 Jn. 4|
|Los que aman y hacen el bien son “de Dios”|3.10, 4.4, 7|3 Jn. 10|
|Los que pecan y hacen el mal “no han visto a Dios”|3.6|3 Jn. 11|

@@.source Fuente: Stott, 28-29@@
<table class="altgray"><tr><td>

Hay paréntesis entre el sexto y el séptimo juicio en cada serie:

* Entre el sexto y el séptimo sello, 7.1-17
* Entre la sexta y la séptima trompeta, 10.1-11.14
* Entre el sexto y la séptima copa, 16.13-16

</td></tr><tr><td>

    Hay un paréntesis entre la serie de trompetas y la serie de copas, 12-1-14.20

</td></tr><tr><td>

    Hay un paréntesis entre la séptima copa y la descripción de la segunda venida de Jesús, 17.1-19.10

</td></tr></table>
2 Pedro usa una gran cantidad de palabras en pares. Muchos de los pares son sinónimos o palabras similares: 

*1.3, gloria y excelencia
*1.4, preciosas y grandísimas
*1.8,  ociosos y sin fruto
*1.9, muy corto de vista; está ciego
*1.10, vocación y elección
*1.16, el poder y la venida
*1.17; honra y gloria
*2.10, Atrevidos y obstinados
*2.11, en fuerza y en poder
*2.13; inmundicias y manchas
*3.7, del juicio y de la perdición
*3.11, santa y piadosa
*3.14, sin mancha e irreprochables
*3.16, los indoctos e inconstantes
<img src='https://www.giffmex.org/wiki/images/nt3/cast1jn.jpg'>
Esta es una lista de todos los personajes mencionados en 1 Pedro, con la excepción de los miembros de la Trinidad.

''El autor''

*Pedro, apóstol de Jesucristo (1.1)
*Yo, anciano también con ellos y testigo de los padecimientos de Cristo, que soy también participante de la gloria que será revelada (5.1)

''Los lectores''

*Los expatriados de la dispersión en el Ponto, Galacia, Capadocia, Asia y Bitinia, elegidos según el previo conocimiento de Dios Padre en santificación del Espíritu (1.1-2)
*Vosotros, que sois guardados por el poder de Dios (1.4-5)
*Vosotros los que creéis (2.7)
*Amados (2.11, 4.12)
*Cada uno [de ustedes] (4.10)
*Alguno [de ustedes] (4.11)
*Todos [ustedes] (3.8, 5.5)
*Todos vosotros los que estáis en Jesucristo (5.14)

''Grupos específicos entre los lectores''

*Criados (2.18)
*Vosotras, mujeres (3.1, 3.7)
*Vosotros, maridos (3.2, 3.7)
*Los ancianos (5.1, 5.5)
*Los que están a vuestro cuidado (5.3)
*Jóvenes (5.5)

''Otros creyentes específicos''

*Los que os han predicado el evangelio (1.12)
*Vuestros hermanos en todo el mundo (5.9)
*Silvano (5.12)
*La iglesia que está en Babilonia, elegida juntamente con vosotros (5.13)
*Marcos mi hijo (5.13)

''La iglesia (descripciones generales de la los creyentes en un sentido plural o colectivo)''

*Los que hacen bien (2.14)
*Los hermanos (2.17)
*Los justos (3.12)
*Los injustos [los creyentes considerados de un punto de vista antes de su conversión] (3.18)
*La casa de Dios (4.17)

*"Nosotros" (4.17)

*Los que padecen según la voluntad de Dios (4.19)
*La grey de Dios (5.2), la grey (5.3)
*Los humildes (5.5)
''Los creyentes (descripciones generales de individuos)''
*El que crea en él (2.6)
*Alguien (2.19)
*El que quiere amar la vida y ver días buenos (3.10)
*Quien ha padecido en la carne (4.1)
*El justo (4.18)

''Personajes de la historia de Israel''

*Los profetas (1.10)
*Aquellas santas mujeres que esperaban en Dios y sus maridos (3.5)
*Sara (3.6)
*Abraham (3.6)
*Noé (3.20)
*Ocho personas [la familia de Noé] (3.20)
*[Los que se burlaban de Cristo cuando estuvo en la cruz] (2.23)

''Seres sobrenaturales y los muertos''

*Los ángeles (1.12)
*Los muertos (1.21, 4.5, 4.6)
*Los espíritus encarcelados, los que en otro tiempo desobedecieron (3.20)
*Ángeles, autoridades y poderes (3.22)
*Vuestro adversario el diablo (5.8)

''Los seres humanos (palabras generales)''

*Cada uno (1.17)
*Toda carne (1.24)
*El hombre (1.24)
*Los vivos (4.5)

''Inconversos específicos''

*Vuestros padres (1.18)
*El rey (2.13, 2.17)
*Los gobernadores (2.14)
*Vuestros amos (2.18)
*Los [amos] buenos y afables (2.18)
*Los [amos que son] difíciles de soportar (2.18)

''Los inconversos (palabras generales)''

*Los hombres [en el sentido despectivo] (2.4, 2.8)
*Los edificadores (2.7)
*Los que no creen (2.7)
*Los paganos (2.12, 4.3)
*Los malhechores (2.14)
*Hombres insensatos (2.15)
*Aquellos que hacen el mal (3.12)
*Todo el que os demande razón de la esperanza que hay en vosotros (3.15)
*Los que hablan mal de la buena conducta de ustedes en Cristo (3.16)
*Aquellos que no obedecen al evangelio de Dios (4.17)
*El impío y el pecador (4.18)
*Los soberbios (5.5)
<img src='https://www.giffmex.org/wiki/images/nt3/castheb.jpg'>
<img src='https://www.giffmex.org/wiki/images/nt3/caststg.jpg'>
Muchos comentaristas creen que 1 Pedro citó materiales tradicionales tomados de la liturgia cristiana del primer siglo. Varias secciones de 1 Pedro tienen un estilo elevado y hermoso. Puede ser que los siguientes textos fueron usados primero en los cultos, y que Pedro despues los citó en su carta. ¿Qué opinas tú?

|bluealtrows|k
|1 Pedro 1.3-12|"Bendito el Dios y Padre de nuestro Señor Jesucristo, que según su gran misericordia nos hizo renacer para una esperanza viva, por la resurrección de Jesucristo de los muertos, para una herencia incorruptible, incontaminada e inmarchitable, reservada en los cielos para vosotros, que sois guardados por el poder de Dios, mediante la fe, para alcanzar la salvación que está preparada para ser manifestada en el tiempo final. Por lo cual vosotros os alegráis, aunque ahora por un poco de tiempo, si es necesario, tengáis que ser afligidos en diversas pruebas, para que, sometida a prueba vuestra fe, mucho más preciosa que el oro (el cual, aunque perecedero, se prueba con fuego), sea hallada en alabanza, gloria y honra cuando sea manifestado Jesucristo. Vosotros, que lo amáis sin haberlo visto, creyendo en él aunque ahora no lo veáis, os alegráis con gozo inefable y glorioso, obteniendo el fin de vuestra fe, que es la salvación de vuestras almas. Los profetas que profetizaron de la gracia destinada a vosotros inquirieron y diligentemente indagaron acerca de esta salvación, escudriñando qué persona y qué tiempo indicaba el Espíritu de Cristo que estaba en ellos, el cual anunciaba de antemano los sufrimientos de Cristo y las glorias que vendrían tras ellos. A estos se les reveló que no para sí mismos, sino para nosotros, administraban las cosas que ahora os son anunciadas por los que os han predicado el evangelio por el Espíritu Santo enviado del cielo; cosas en las cuales anhelan mirar los ángeles."|
|1 Pedro 1.18-21|"...pues ya sabéis que fuisteis rescatados de vuestra vana manera de vivir (la cual recibisteis de vuestros padres) no con cosas corruptibles, como oro o plata, sino con la sangre preciosa de Cristo, como de un cordero sin mancha y sin contaminación. Él estaba destinado desde antes de la fundación del mundo, pero ha sido manifestado en los últimos tiempos por amor de vosotros. Por medio de él creéis en Dios, quien lo resucitó de los muertos y le ha dado gloria, para que vuestra fe y esperanza sean en Dios."|
|1 Pedro 2.4-8|"Acercándoos a él, piedra viva, desechada ciertamente por los hombres, pero para Dios escogida y preciosa, vosotros también, como piedras vivas, sed edificados como casa espiritual y sacerdocio santo, para ofrecer sacrificios espirituales aceptables a Dios por medio de Jesucristo. Por lo cual también dice la Escritura: «He aquí, pongo en Sión la principal piedra del ángulo, escogida, preciosa; el que crea en él, no será avergonzado». Para vosotros, pues, los que creéis, él es precioso. En cambio para los que no creen: «La piedra que los edificadores desecharon ha venido a ser la cabeza del ángulo» y: «Piedra de tropiezo y roca que hace caer». Ellos, por su desobediencia, tropiezan en la palabra. ¡Ese es su destino!"|
|1 Pedro 2.21-25|"Para esto fuisteis llamados, porque también Cristo padeció por nosotros, dejándonos ejemplo para que sigáis sus pisadas. Él no cometió pecado ni se halló engaño en su boca. Cuando lo maldecían, no respondía con maldición; cuando padecía, no amenazaba, sino que encomendaba la causa al que juzga justamente. Él mismo llevó nuestros pecados en su cuerpo sobre el madero, para que nosotros, estando muertos a los pecados, vivamos a la justicia. ¡Por su herida habéis sido sanados! Vosotros erais como ovejas descarriadas, pero ahora habéis vuelto al Pastor y Obispo de vuestras almas."|
|1 Pedro 3.18, 22|"Asimismo, Cristo padeció una sola vez por los pecados, el justo por los injustos, para llevarnos a Dios, siendo a la verdad muerto en la carne, pero vivificado en espíritu....quien habiendo subido al cielo está a la diestra de Dios; y a él están sujetos ángeles, autoridades y poderes." (tratando a los versículos 19 al 21 como paréntesis)|

@@.source Carson, Moo y Morris, 428; Harrison, Kistemaker, 22; Texto: Reina Valera Revisada (1995) Bible Text (Miami: Sociedades Biblicas Unidas, 1998)@@
<table class="altgray"><tr><td>

Warren Carter describe la diversidad de opiniones en las iglesias a las cuales Juan escribió su apocalipsis. Juan representa un extremo, llamando a los Cristianos que se retiren de los asuntos políticos, económicos y religiosos que minaban la integridad de su fe. Pero otros (llamados Balaam y Jezabel por Juan) son más abiertos y flexibles en su acercamiento a las prácticas prevalentes en su sociedad. Carter parece unirse a los adversarios de Juan, y favorece la asimilación cultural. Carter ofrece cinco argumentos a favor de la asimilación, y siete argumentos de Juan en contra de la asimilación. Abajo expongo los argumentos, con mis respuestas a Carter, y termino con unas conclusiones generales.

</td></tr><tr><td>

!!!Cinco argumentos a favor de la asimiliación o participación cultural

<span class="doublelist">

*Los adversarios de Juan podrían haber argumentado que la participación activa en las actividades sociales, políticas y económicas, aunque mezcladas con la idolatría, era necesaria para sobrevivir. ''Mi respuesta:'' Yo respondería que Daniel en el Antiguo Testamento participaba en su cultura pero hubiera preferido morir antes de practicar la idolatría.
*Los adversarios de Juan posiblemente dijeron, similar a 1 Pedro 2.11-17, que la participación en la sociedad y la cultura era una estrategia evangelística. Para mantener la reputación del Cristianismo, sería necesario mantener los contactos de negocio y de política, y participar en prácticas como la de honrar al rey (1 Pedro 2.17). ''Mi respuesta:'' Mi respuesta es que las perspectivas de Apocalipsis y 1 Pedro no están en conflicto.
*Puede ser que los adversarios de Juan usaron un argumento que encontramos en las cartas de Pablo: que los Cristianos saben que los dioses representados por los ídolos no existen, y que hay un solo Dios (1 Corintios 8.4), y por eso no significa nada comer carne sacrificada al ídolo. ''Mi respuesta:'' Yo respondería así: este argumento no es de Pablo sino de sus adversarios. Pablo está de acuerdo con el argumento en teoría, pero en la práctica Pablo prohibía que los Cristianos comieran en los templos paganos, y prohibía el consumo de carne sacrificada a los ídolos en ciertas situaciones.
*Es posible que los adversarios de Juan mencionaron a personajes como José en el libro de Génesis, que estaba involucrado políticamente con poderes imperiales. ''Mi respuesta:'' Mi respuesta es que Génesis enfatiza que José fue excepcionalmente fiel a Dios, hasta sufriendo por años en la cárcel para ser fiel a sus convicciones. La pregunta no es si debemos estar involucrados en las sociedades en que nos encontramos. La pregunta es, hasta qué punto podemos involucrarnos sin perder nuestros principios y convicciones. 
*Puede ser que los adversarios de Juan usaban la destrucción de Jerusalén como señal que una rebelión contra Roma sería inútil, y que Roma había sido escogida por Dios para reinar. ''Mi respuesta:'' Mi respuesta es que la fidelidad a Dios y el rechazo de la idolatría son fundamentales, y no importan las circunstancias en que nos encontramos.

</span>

</td></tr><tr><td>

!!!Los siete argumentos de Juan en contra de la asimilación cultural (un resumen de Carter)

<span class="doublelist">

*Los que viven fiel a Jesús chocarán con el poder imperial, y sufrirán. No gozarán de una vida fácil y cómoda.
*La participación en las celebraciones cúlticas del imperio mina la lealtad a Dios y al Cordero, quienes son los únicos dignos de culto.
*El imperio está bajo el juicio de Dios
*El imperio está bajo el control del diablo (el dragón)
*Dados los cuatro puntos anteriores, la estrategia cristiana requiere retirarse y distanciarse
*Juan reconoce que retirarse resultará en oposición y sufrimiento.
*Pero los Cristianos deben permanecer fieles porque Dios al final triunfará.

</span>

</td></tr><tr><td>

!!!Comentarios generales

Es desafortunado que Carter compara estas dos posiciones (Juan y sus adversarios) con las categorías de Niebuhr, "Cristo abraza la cultura" y "Cristo contra cultura", y se une a los adversarios de Juan en contra del mensaje de Apocalipsis. Niebuhr tiene otra categoría, "Cristo transforma la cultura", y esta categoría es más fiel al mensaje a la Biblia, y no contradice el mensaje de Juan en Apocalipsis. Nuestra intención debe ser involucrarnos en la sociedad al grado posible sin minar nuestros principios. Pero en situaciones como la de los lectores de Apocalipsis, donde hay muchos más paganos que Cristianos y donde la iglesia lucha para sobrevivir contra fuerzas opuestas muy poderosas, es necesario suspender temporalmente la meta noble de transformar la cultura. En tales situaciones la meta debe ser la preparación de los Cristianos para sobrevivir los ataques de sus adversarios y mantenerse fieles en toda situación.

</td></tr></table>

<span class="source">Fuente: Warren Carter, “Accommodating Jezebel and withdrawing John: negotiating empire in Revelation then and now” en Interpretation 63 no 1 Ja 2009, pp. 32-47</span>
<span class="doublelist">

*¿Cómo se llama el destinatario de 3 Juan?
*¿Cómo se llaman los dos hombres que sirven de buen ejemplo y de mal ejemplo en 3 Juan?
*Describe brevemente la situación que provocó la composición de 3 Juan.
*¿Qué cinco cosas malas hizo Diótrefes?
*¿Por qué el autor escribe a Gayo de sucesos que Gayo seguramente ya sabía?
*¿Cómo debe responder Gayo, según el anciano?
*¿Qué le dice el anciano a Gayo para motivarlo a responder apropiadamente?
*Según 3 Juan, qué sucede cuando mostramos la hospitalidad a los obreros cristianos?

</span>
<table class="altgray"><tr><td>

¿Por qué el uso extraño del “Nombre” en v. 7?

</td></tr><tr><td>

¿Será cierto que Juan implica que Diótrefes no es un verdadero creyente en v. 11?

</td></tr></table>
Tres veces en el libro de Santiago, Jacobo hace una pregunta y en seguida llega a una conclusión en base a la respuesta.

|bluealtrows|k
|3.13|Quién es sabio y entendido entre ustedes? Que lo demuestre con su buena conducta...|
|4.14|¿Qué es su vida? Ustedes son como la niebla, que aparece por un momento y luego se desvanece.|
|5.13-14|¿Está afligido alguno entre ustedes? Que ore. ¿Está alguno de buen ánimo? Que cante alabanzas. ¿Está enfermo alguno de ustedes? Haga llamar a los ancianos de la iglesia para que oren por él y lo unjan con aceite en el nombre del Señor.|

@@.source Ben Witherington, We Have Seen His Glory. (Grand Rapids: Wm. B. Eerdmans, 2010).@@
Santiago contiene catorce preguntas retóricas (afirmaciones en la forma de preguntas).

|bluealtrows|k
|2.4-7|¿acaso no hacen discriminación entre ustedes, juzgando con malas intenciones?<br>¿No ha escogido Dios a los que son pobres según el mundo para que sean ricos en la fe y hereden el reino que prometió a quienes lo aman?<br>¿No son los ricos quienes los explotan a ustedes y los arrastran ante los tribunales?<br>¿No son ellos los que blasfeman el buen nombre de aquel a quien ustedes pertenecen?|
|2.14-16|¿de qué le sirve a uno alegar que tiene fe, si no tiene obras?<br>¿Acaso podrá salvarlo esa fe?<br>¿De qué servirá eso?|
|2.20|¿Quieres convencerte de que la fe sin obras es estéril?|
|3.11-12|¿Puede acaso brotar de una misma fuente agua dulce y agua salada?<br>¿acaso puede dar aceitunas una higuera o higos una vid?|
|4.1|¿De dónde surgen las guerras y los conflictos entre ustedes?<br>¿No es precisamente de las pasiones que luchan dentro de ustedes mismos?|
|4.4-5|¿No saben que la amistad con el mundo es enemistad con Dios?<br>¿O creen que la Escritura dice en vano que Dios ama celosamente al espíritu que hizo morar en nosotros?|

@@.source Ben Witherington, We Have Seen His Glory. (Grand Rapids: Wm. B. Eerdmans, 2010)@@
Tenemos tres presentaciones acerca de Santiago, que se pueden ver abajo:

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/13FeM8v6lTNTRe" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/santiago-s-8609396" title="Santiago &#x27;S&#x27;" target="_blank">Santiago &#x27;S&#x27;</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/3NEWbUVsuS3aac" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/sanitago-r" title="Sanitago &#x27;R&#x27;" target="_blank">Sanitago &#x27;R&#x27;</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/iduTAG3JIZVzGl" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/NoteStorm/sanitago-p" title="Sanitago P" target="_blank">Sanitago P</a> </strong> from <strong><a target="_blank" href="https://www.slideshare.net/NoteStorm">Dave Gifford</a></strong> </div>
''Hay un quiasmo en 1 Juan 1.6-7'' (Reina Valera 1995):

@@.indent1 A	Si decimos que tenemos comunión con él@@

@@.indent2 B 	y andamos en tinieblas,@@

@@.indent3 C	mentimos y no practicamos la verdad.@@

@@.indent2 B 	Pero si andamos en luz, como él está en luz,@@

@@.indent1 A 	tenemos comunión unos con otros@@

,,Fuente: Breck, BTB, citado en Sidney Greidanus, The Modern Preacher and the Ancient Text. (Downer’s Grove: Inter-Varsity, 1988), 321.,,
Hay un posible quiasmo en 1 Pedro 2.6-7:

:''Escogida'' <br><br>
::''Preciosa'' <br><br>
:::No averguenza al que pone su fe en él <br><br>
::él es ''precioso'' <br><br>
:rechazado por los hombres pero ''escogido'' por Dios como ángulo
A pesar de que escribe una carta, el autor de Hebreos usa referencias a ''la comunicación oral'', no escrita (2.5, 5.11). Es decir, el autor menciona los actos de hablar y oír, no de escribir y leer.

|bluealtrows|k
|2.5|"...acerca del cual estamos hablando."|
|5.11|"Acerca de esto tenemos mucho que decir, pero es difícil de explicar, por cuanto os habéis hecho tardos para oir."|
|6.9|"...aunque hablamos así...."|
|8.1|"Ahora bien, el punto principal de lo que venimos diciendo...."|
|9.5|"De estas cosas no se puede ahora hablar en detalle."|
|11.32|"¿Y qué más digo? El tiempo me faltaría para hablar de Gedeón...."|

@@.source William L. Lane, vol. 47A, Word Biblical Commentary : Hebrews 1-8, Word Biblical Commentary (Dallas: Word, Incorporated, 2002), lxxiv. Texto bíblico: Reina Valera Revisada (1995) (Miami: Sociedades Biblicas Unidas, 1998).@@
''Ritmo''

|bluealtrows|k
|3.6-8|...la lengua es un fuego, un mundo de maldad. Siendo uno de nuestros órganos, contamina todo el cuerpo y, encendida por el infierno, prende a su vez fuego a todo el curso de la vida. El ser humano sabe domar y, en efecto, ha domado toda clase de fieras, de aves, de reptiles y de bestias marinas; pero nadie puede domar la lengua. Es un mal irrefrenable, lleno de veneno mortal (NVI).|

''Rima''

|bluealtrows|k
|!Versículo|!Griego|!Transliteración|
|1.6|ἀνεμιζομένῳ καὶ ῥιπιζομένῳ|anemizomenoi kai ripizomenoi|
|1.14|ἐξελκόμενος καὶ δελεαζόμενος|ekselkomenos kai deleazomenos|
|2.12|οὕτως λαλεῖτε καὶ οὕτως ποιεῖτε|houpos laleite kai houpos poiete|
|3.17|ἀδιάκριτος, ἀνυπόκριτος|adiakritos, anupokritos|
|4.8|καθαρίσατε χεῖρας, ἁμαρτωλοί, <br>καὶ ἁγνίσατε καρδίας, δίψυχοι|katharisate cheiras, hamartoloi,<br>kai hagnisate kardias, dipsuchoi|

@@.source Ben Witherington, We Have Seen His Glory. (Grand Rapids: Wm. B. Eerdmans, 2010)@@
<span class="singlelist">

*''Santiago, asuntos introductorios''

**[[Presentaciones acerca de Santiago en SlideShare]]
**[[La situación en las iglesias de Santiago]]
**[[La situación histórica detrás de Santiago]]
**[[Las respuestas que Jacobo esperaba de los destinatarios originales de Santiago]]

*''La estructura de Santiago''

**[[Un bosquejo de Santiago]]

*''La teología y los temas de Santiago''

**[[Las bases teológicas de Santiago]]
**[[La relación entre creer, saber, oir, hablar y hacer en Santiago]]
**[[La cristología en Santiago]]
**[[Dios Padre en Santiago]]
**[[El diablo, los demonios en Santiago]]
**[[Divisiones y facciones en Santiago]]
**[[El dominio propio en Santiago]]
**[[El engaño en Santiago]]
**[[Escatología en Santiago]]
**[[La iglesia en Santiago]]
**[[La integridad en Santiago]]
**[[La ley de Dios en Santiago]]
**[[Nombres para Dios en Santiago]]
**[[El pecado y la tentación en Santiago]]
**[[La perfección en Santiago]]
**[[Las riquezas en Santiago]]
**[[La sabiduría en Santiago]]
**[[La salvación en Santiago]]

*''Santiago en el contexto del canon''

**[[Citas y alusiones al Antiguo Testamento en Santiago]]
**[[Santiago y la literatura sapiencial]]
**[[Santiago y el Sermón del Monte]]
**[[Las cartas generales]]
**[[Paralelos entre 1 Pedro y Santiago]]
**[[Tres textos parecidos en Romanos, Santiago y 1 Pedro]]

*''Las características literarias de Santiago''

**[[La aliteración en Santiago]]
**[[Amonestaciones en Santiago]]
**[[Conexiones verbales en Santiago]]
**[[La diatriba en Santiago]]
**[[El lenguaje figurativo de Santiago]]
**[[El género de Santiago]]
**[[La invención de nuevas palabras en Santiago]]
**[[Listas de virtudes en Santiago]]
**[[Personajes mencionados en Santiago]]
**[[Preguntas rápidamente contestadas en Santiago]]
**[[Preguntas retóricas en Santiago]]
**[[Ritmo y rima en Santiago]]

*''Santiago, asuntos avanzados''

**[[La aceptación de Santiago al canon, y la historia de su interpretación]]
**[[Argumentos acerca del autor de Santiago]]
**[[La relación entre los nombres Jacobo y Santiago]]
**[[Lo que sabemos acerca de Jacobo]]
**[[La fecha y el lugar de la composición de Santiago]]
**[[Asuntos textuales en Santiago]]

*''Exégesis de textos en Santiago''

**[[La estructura de Santiago capítulo 1]]
**[[Santiago 1.2-4: Alegrarse en las pruebas]]
**[[Santiago 1.5-8: Pedir la sabiduría]]
**[[Santiago 1.9-11: Consejo para los ricos]]
**[[Conceptos repetidos en Santiago 2.14-26]]
**[[Santiago 2.14-26, apuntes]]
**[[Santiago 3.1-12, estructura]]
**[[Santiago 3.13-18 y 4.1-11, paralelos]]
**[[Santiago 4.5, la supuesta cita bíblica]]
**[[Santiago 4.13-17, estructura]]
**[ext[Un sermón sobre Santiago 4.13-17 (pdf)|https://www.giffmex.org/wiki/pdfs/santiago.4.13-17.sermon.2019.pdf]]
**[[Conceptos repetidos en Santiago 5.1-6]]
**[[Santiago 5.1-6, apuntes]]
**[ext[Un sermón sobre Santiago 5.13-18 (pdf)|https://www.giffmex.org/wiki/pdfs/santiago.5.13-18.sermon.pdf]]
**[[Santiago 5.13-16 diagramo]]
**[[Santiago 5.14, ungir con aceite]]

</span>
!!Funciones

"""
''1.2-3''
<span class="indent1">
''Exhortación'' - Hermanos míos, tened por sumo gozo cuando os halléis en diversas pruebas,<br>
''Razón'' - sabiendo que la prueba de vuestra fe produce paciencia.
</span>
''1.4''
<span class="indent1">
''Exhortación'' - Mas tenga la paciencia su obra completa,<br>
''Razón'' - para que seáis perfectos y cabales, sin que os falte cosa alguna.
</span>
"""

!!Repetición

Hermanos míos, tened por sumo gozo cuando os halléis en diversas <span class="purplebk">pruebas</span>, sabiendo que la <span class="purplebk">prueba</span> de vuestra fe produce <span class="turqbk">paciencia</span>. Mas tenga la <span class="turqbk">paciencia</span> su obra completa, para que seáis <span class="greenbk">perfectos</span> y <span class="greenbk">cabales</span>, <span class="greenbk">sin que os falte cosa alguna</span>. 

!!Paralelos canónicos

|bluealtrows|k
|tened por sumo gozo cuando os halléis en diversas pruebas, sabiendo que la prueba de vuestra fe produce paciencia. Mas tenga la paciencia su obra completa, para que seáis perfectos y cabales, sin que os falte cosa alguna. (Santiago 1.2-4)|''nos gloriamos en las tribulaciones'', ''sabiendo que la tribulación produce paciencia''; y la paciencia, prueba; y la prueba, esperanza; y la esperanza no avergüenza; (Romanos 5.3-5)<br><br>''os alegráis'', aunque ahora por un poco de tiempo, si es necesario, tengáis que ser ''afligidos en diversas pruebas'', para que sometida ''a prueba vuestra fe'', mucho más preciosa que el oro, el cual aunque perecedero se prueba con fuego, sea hallada en alabanza, gloria y honra cuando sea manifestado Jesucristo (1 Pedro 1.6-7)|
!!Funciones

"""
''1.5''
<span class="indent1">
''Exhortación'' - Y si alguno de vosotros tiene falta de sabiduría, pídala a Dios,<br>
''Descripción'' - el cual da a todos abundantemente y sin reproche,<br>
''Resultado'' - y le será dada.
</span>
''1.6''
<span class="indent1">
''Exhortación'' - Pero pida con fe, no dudando nada;<br>
''Razón'' - porque el que duda es semejante a la onda del mar, que es arrastrada por el viento y echada de una parte a otra.
</span>
''1.7''
<span class="indent1">
''Exhortación'' - No piense, pues, quien tal haga, que recibirá cosa alguna del Señor.
</span>
''1.8''
<span class="indent1">
''Afirmación'' - El hombre de doble ánimo es inconstante en todos sus caminos.
</span>
"""

!!Repetición

Y si alguno de vosotros tiene falta de sabiduría, <span class="orangebk">pídala</span> a Dios, el cual <span class="greenbk">da a todos abundantemente</span> y sin reproche, y le será <span class="greenbk">dada</span>. Pero <span class="orangebk">pida</span> con fe, <span class="bluebk">no dudando nada</span>; porque <span class="bluebk">el que duda</span> es semejante a la onda del mar, que es <span class="yellowbk">arrastrada por el viento y echada de una parte a otra</span>. No piense, pues, quien tal haga, que <span class="greenbk">recibirá</span> cosa alguna del Señor. El hombre de <span class="yellowbk">doble ánimo</span> es <span class="yellowbk">inconstante</span> en todos sus caminos. 

!!Figuras

<span class="singlelist">

* Ondas del mar, arrastradas por el viento
* Caminos

</span>

!!Paralelos canónicos

|bluealtrows|k
|Y si alguno de vosotros tiene falta de sabiduría, pídala a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. (Santiago 1.5)|''Si clamares a la inteligencia'', Y a la prudencia dieres tu voz; Si como a la plata la buscares, Y la escudriñares como a tesoros, Entonces entenderás el temor de Jehová, Y hallarás el conocimiento de Dios. Porque ''Jehová da la sabiduría'', Y de su boca viene el conocimiento y la inteligencia. (Proverbios 2.3-6)<br><br>''Pedid, y se os dará''; buscad, y hallaréis; llamad, y se os abrirá. (Mateo 7.7)|
|Pero pida con fe, no dudando nada; (Santiago 1.6)|Por tanto, os digo que ''todo lo que pidiereis'' orando, ''creed'' que lo recibiréis, y os vendrá. (Marcos 11.24)|
!!Funciones

''9-10''
<span class="indent1">
''Exhortación'' - El hermano que es de humilde condición, gloríese en su exaltación; <br>
''Exhortación'' - pero el que es rico, en su humillación; <br>
''Razón'' - porque él pasará como la flor de la hierba. 
</span>
''11''
<span class="indent1">
''Afirmación'' - Porque cuando sale el sol con calor abrasador, la hierba se seca, su flor se cae, y perece su hermosa apariencia; <br>
''Afirmación'' - así también se marchitará el rico en todas sus empresas. 
</span>

!!Reptición

El hermano que es de <span class="bluebk">humilde</span> condición, gloríese en su exaltación; pero el que es <span class="tanbk">rico</span>, en su <span class="bluebk">humillación</span>; porque él <span class="graybk">pasará</span> como <span class="greenbk">la flor</span> de la hierba. Porque cuando sale el sol con calor abrasador, <span class="greenbk">la hierba</span> <span class="graybk">se seca</span>, <span class="greenbk">su flor</span> <span class="graybk">se cae</span>, y <span class="graybk">perece</span> su hermosa apariencia; así también se <span class="graybk">marchitará</span> <span class="tanbk">el rico</span> en todas sus empresas. 

!!Figuras

*La flor que se seca y muere por el calor del sol

!!Paralelos canónicos

|bluealtrows|k
|pero el que es rico, [gloríese] en su humillación; (Santiago 1.10)|Así dijo Jehová: No se alabe el sabio en su sabiduría, ni en su valentía se alabe el valiente, ni el rico se alabe en sus riquezas. (Jeremías 9.23)<br><br>A los ricos de este siglo manda que no sean altivos, ni pongan la esperanza en las riquezas, las cuales son inciertas (1 Timoteo 6.17)|
|porque él pasará como la flor de la hierba. Porque cuando sale el sol con calor abrasador, la hierba se seca, su flor se cae, y perece su hermosa apariencia; así también se marchitará el rico en todas sus empresas. (Santiago 1.10-11)|Mis días son como sombra que se va, Y me he secado como la hierba. (Salmo 102.11)<br><br>toda carne es hierba, y toda su gloria como flor del campo. La hierba se seca, y la flor se marchita, porque el viento de Jehová sopló en ella; ciertamente como hierba es el pueblo. (Isaías 40.6-7 - citado también en 1 Pedro 1.24)|
''La estructura de Santiago 2.14-26''

<span class="doublelist">

*''Dos preguntas retóricas (2.14):'' Resumen: ¿Una fe sin obras podría salvar a uno? (la respuesta implícita es "no.")
*''Una ilustración (2.15-17):'' Resumen: No es suficiente hablar de ayudar a los pobres. Necesitas darles comida y abrigo, o morirán. De la misma manera, si no vestimos y alimentamos nuestra fe con las buenas obras, morirá de hambre y frío.
*''Una objeción con dos respuestas (2.18-19):'' Resumen: 
**La objeción: "uno tiene fe, otro obras, no hay diferencia, Dios acepta cualquier de los dos."
**La primera respuesta: Las buenas obras son la manera en que la fe se expresa. Son la única evidencia que la fe de uno es real.
**La segunda respuesta: te felicito por tu fe, pero si lo pensamos bien, los demonios también tienen buena teología y no les ayuda porque siguen desobedeciendo a Dios. Si no tienes obras, ¿cómo eres mejor que ellos?
*''El ejemplo de Abraham (2.20-24):'' Resumen: Abraham fue justificado por la fe, pero no por una fe sin obras sino por una fe que se demostró visiblemente cuando ofreció a Isaac.
*''El ejemplo de Rahab (2.25):'' Resumen: De la misma manera, Rahab fue salva por una fe que actuó concretamente cuando recibió y ayudó a los espías.
*''Una ilustración (2.25):'' Resumen: Cuando el cuerpo y el espíritu están separados, el hombre muere. De la misma manera, cuando la fe está divorciada de las obras, está muerta.

</span>

<hr>

Jacobo repite su punto principal tres veces, para que no haya duda acerca de su mensaje:

<span class="doublelist">

* //"la fe, si no tiene obras, es muerta en sí misma" //(2.17)
* //"la fe sin obras es muerta (Reina Valera 60; NVI "estéril")"// (2.20)
* //"la fe sin obras está muerta"// (2.26)

</span>

<hr>

La palabra "obras" significa cualquier acto de obediencia a Dios y su ley. Habla de la conducta cristiana. Otros sinónimos serían hechos o acciones.

<hr>

Según Moo, las traducciones como la Reina Valera oscurecen la interpretación de la segunda pregunta en v. 14. La pregunta no es si la fe en sí puede salvarle. La pregunta es si el tipo de fe mencionada en la pregunta anterior puede salvarle. Y la presencia del partículo griego "me" indica que Jacobo asume una respuesta negativa: "No, ese tipo de fe falsa no puede salvarle."

<hr>

La palabra "salvarle" en v. 14 no se refiere a una salvación de una prueba terrenal, como cuando un equipo rescata a un niño de un edificio a punto de colapsarse. Se refiiere a la salvación del ser humano de sus pecados.

<span class="doublelist">

* Santiago 1.21 usa la misma palabra para hablar de la salvación de las almas: "recibid con mansedumbre la palabra implantada, la cual puede salvar vuestras almas."
* Moo, 121, señala que en el contexto vemos que Jacobo habla de la justificación (2.21-25): Abraham y Rahab fueron justificados por Dios.
* Asi que la salvación aquí se refiere a ser salvos de los pecados. Habla de la salvación que nos da la vida eterna.

</span>

<hr>

Es importante notar que v. 14 no pregunta qué provecho hay cuando tenemos fe pero no tenemos obras. Jacobo pregunta qué provecho hay en decir que tenemos fe cuando no tenemos obras. En los versículos que siguen, llega a ser evidente que Jacobo no cree que una fe verdadera puede existir aparte de las obras.

<hr>

La ilustración en v. 15-16 de no ayudar a los pobres se conecta con la sección anterior (2.1-13), donde Jacobo condena el favoritismo que prefiere recibir a los ricos con gusto cuando llegan al culto, y menosprecia a los pobres que llegan al culto. Es evidente que la ayuda para los necesitados es una de las obras más importantes que Jacobo quiere ver en sus destinatarios.

<hr>

Sin embargo, no debemos pensar que la ayuda a los necesitados es el punto principal de versículos 15-17. En realidad, versículos 15 y 16 son una ilustración que prepara al lector para entender el punto principal en v. 17: la fe es como un necesitado que necesitamos alimentar y abrigar con las buenas obras, o si no, morirá de hambre y frío.

<hr>

Las palabras "Id en paz" (ὑπάγετε ἐν εἰρήνῃ) en v. 16 representan una típica despedida judía: shalom.

<hr>

El problema en v. 15-16 es que en lugar de alimentar y vestir al hombre, la persona habla bonito y usa la bendición religiosa como sustituto. El que habla en versículos 1516 dice "Que Dios te dé lo que necesitas" en lugar de darle lo que necesita. Es una declaración vacía, y Jacobo dirá que la declaración "Yo tengo fe" es una declaración igualmente vacía si no hay obras.

<hr>

Versículos 18 y 19 usan una técnica retórica llamada una "diatriba," una conversación con un adversario imaginario que hace preguntas o levanta objeciones.

<hr>

Hay dificultad en discernir hasta donde se extiende la cita de la persona en v. 18. Algunos dicen, por ejemplo, que la cita incluye todo el contenido de versículos 18 y 19, y que es una cita de alguien con quien Jacobo está de acuerdo. El presente autor, en cambio, toma la posición que la cita sólo incluye las palabras "Tú tienes fe, y yo tengo obras," las palabras de un adversario imaginario, y el resto del versículo es parte de la respuesta de Jacobo a este adversario.

<hr>

La frase que el adversario dice en v. 18, "Tú tienes fe, y yo tengo obras," podría confundir al novato. No son palabras de Jacobo al adversario, diciendo que su adversario tiene fe, y él mismo tiene obras. Pero tampoco es son las palabras del adversario diciendo que Jacobo tiene fe y él mismo tiene obras. Moo y Kistemaker afirman que estas sí son palabras del adversario, pero su punto no es para identificar quién tiene qué cualidad. Es como una expresión general. Nuestra paráfrasis sería esta:  "Pues, uno tiene fe, otro tiene obras, ¿qué importa?" - con la implicación de que no importa quién tiene qué cualidad, porque ambas son igualmente aceptadas por Dios. Así que según esta objeción, uno puede tener fe sin obras y no será afectado adversamente.

<hr>

Jacobo responde a esta objeción de su adversario imaginario con un reto en vv. 18-19. Mi paráfrasis: "Dame evidencia que tienes fe sin obras, si crees que puedes. No creo que puedas. Pero yo sí puedo probar que tengo fe por medio de mis obras."

<hr>

En v. 19 Jacobo dice que una fe sin obras no es mejor que la fe de los demonios, que tienen toda su teología correcta, pero rehusan someterse a Dios. Hasta la fe sin obras podría resultar peor que la "fe" de los demonios, porque por lo menos ellos tiemblan al pensar en Dios.

<hr>

El monoteísmo, la doctrina de la existencia de un solo Dios, era la distinción principal que separaba los Judíos de los paganos en el mundo antiguo. Los Judíos repiten el Shema de Deuteronomio 6.4 que enseña el monoteísmo. Pero Jacobo dice que ser monoteísta no nos da ventaja sobre el diablo si no practicamos nuestra fe de manera concreta. Por extensión, un predicador hoy en día podría aplicar este versículo diciendo que creer en una confesión de fe, o un catecismo, o saber mucha teología, no nos ayuda si no ponemos en práctica lo que creemos.

<hr>

Los ejemplos de Abraham (vv. 20-24) y Rahab (v. 25) son contrastes, porque Abraham y Rahab son de los dos extremos del espectro social:

<span class="doublelist">

* Abraham era hombre, y Rahab era mujer. En el mundo antiguo - y desafortunadamente todavía en el día de hoy en muchos lugares - las mujeres no era valoradas como iguales a los hombres.
* Abraham era el patriarco, padre y progenitor de los Judíos. Rahab era una Gentil de Jericó. Venía de una raza y una ciudad que se oponían a Israel.
* Abraham era considerado por los Judíos una de las personas más morales y ejemplares de toda su historia. Rahab era una prostituta.
* Con este contraste, Jacobo enfatiza que las personas de todo tipo, de todo el espectro, se salvan de la misma manera: por una fe viva que se manifiesta a través de actos concretos de obediencia.

</span>

<hr>

La pregunta "¿quieres saber...que la fe sin obras está muerta?" en v. 20 puede entenderse como "¿quieres pruebas? ¿quieres evidencia? ¿quieres que te convenza de esto?"

<hr>

En versículo 20 los manuscritos que la Reina Valera 1960 usó son inferiores. La Reina Valera 1960 y la de 1995 tienen que la fe sin obras es "muerta." Pero la NVI sigue los manuscritos más confiables, y pone que la fe sin obras "es estéril." La palabra griega en estos manuscritos es "argos," literalmente, "el que no trabaja." Moo, 132, dice que Jesús usa este adjetivo en Mateo 20.3 y 20.6 para hablar de los obreros que todavía estaban esperando en la plaza "desocupados."

<hr>

Hay un juego de palabras en v. 20 que no se puede traducir al español. La palabra para obras es "erga". Y la palabra para estéril es "argos." Así que Jacobo dice, "¿Quieres evidencia de que la fe sin erga es argos?" 

<hr>

Moo, 133, observa que 1 Macabeos 2.51-52 tiene muchos paralelos con Santiago 2.20-24. 

<hr>

Muchos estudiantes de la Biblia han notado algunas aparentes contradicciones verbales entre Santiago 2.21-26 y las cartas de Pablo:

<span class="doublelist">

* ''Stg. 2.21 vs. Romanos 4.2:'' Ambos apelan al ejemplo de Abraham, pero para decir lo que parecen ser dos cosas opuestas.
** "¿No fue justificado por las obras Abraham nuestro padre...?" (Santiago 2.21)
** "Porque si Abraham fue justificado por las obras, tiene de qué gloriarse, pero no para con Dios." (Romanos 4.2)
* ''Stg. 2.21 vs. Romanos 4.10:'' Uno dice que Abraham fue justificado cuando ofreció a Isaac, mucho después de que fue circuncidado. El otro dice que fue justificado antes de ser circuncidado
** "¿No fue justificado por las obras Abraham nuestro padre, cuando ofreció a su hijo Isaac sobre el altar?" (Santiago 2.21)
** "Porque decimos que a Abraham le fue contada la fe por justicia. ¿Cómo, pues, le fue contada? ¿Estando en la circuncisión, o en la incircuncisión? No en la circuncisión, sino en la incircuncisión." (Romanos 4.10)
* ''Stg. 2.24 vs. Romanos 3.20:'' Uno dice que la justificación es por obras, no por la fe solamente. El otro dice que jamás será justificado un hombre por las obras.
** "Vosotros veis, pues, que el hombre es justificado por las obras, y no solamente por la fe." (Santiago 2.24)
** "ya que por las obras de la ley ningún ser humano será justificado delante de él;" (Romanos 3.20)
** "Concluimos, pues, que el hombre es justificado por fe sin las obras de la ley." (Romanos 3.28)
* ''Stg. 2.26 vs. Romanos 3.28:'' Uno dice que la fe, aparte de las obras, está muerta. El otro dice que la fe aparte de las obras justifica.
** "Porque como el cuerpo sin espíritu está muerto, así también la fe sin obras está muerta." (Santiago 2.26)
** "Concluimos, pues, que el hombre es justificado por fe sin las obras de la ley." (Romanos 3.28)

</span>

<hr>

Hay varias maneras en que podemos ver que Santiago 2 no contradice las enseñanzas de Pablo:

<span class="doublelist">

* Los dos operan con ''diferentes definiciones de “fe”: ''
** Para Pablo, fe es una cualidad impartida por la gracia de Dios. “Fe muerta” sería una contradicción de términos para Pablo. 
** En cambio, para Santiago, fe es una confesión verbal de fe, divorciada de la obediencia y la acción.
* Los dos tienen ''diferentes definiciones de “obras”: ''
** Para Pablo las obras son los intentos de ser justificados ante Dios por las cosas que separan los Judíos de los Gentiles—la circuncisión, la obediencia a Torá, etc. Es poner un obstáculo para que los Gentiles no sean parte del pueblo de Dios y jactarse de ser judío como raza privilegiada. 
** En cambio, para Santiago, obras son cualquier expresión de obediencia a Dios.
* Los dos tienen ''diferentes definiciones de “justificación”: ''
** Para Pablo la justificación es una proclamación divina que la persona está legalmente inocente ante la ley debido a la obra de Cristo a su favor.
** Para Santiago la justificación es una proclamación moral acerca de una persona y sus acciones (véase Mt 12.36-37 y Lc. 18.14 para usos parecidos). 
* Están ''atacando diferentes abusos'': 
** Pablo se está oponiendo a la forma en que las personas abusaban de su obediencia a la ley.
** Santiago se está oponiendo a las excusas que las personas usaban para omitir la obediencia a la ley.
* Están ''diciendo dos cosas distintas'':
** Pablo está explicando la base de la justificación: “la justificación es por la fe en Jesucristo, no por obras.”
** Santiago está describiendo una fe auténtica: “la fe que justifica es una fe que se expresa con las obras.”

</span>

<hr>

Jacobo no es el único escritor del Nuevo Testamento que enfrentó este abuso de la gracia de Dios para justificar una vida de maldad.

<span class="doublelist">

* Judas escribirá años después acerca de hombres impios. "que convierten en libertinaje la gracia de nuestro Dios." (Judas 4)
* Pablo varias veces explica que su perspectiva no permite la licencia, mostrando su acuerdo con lo que dice Santiago.
**// "¿Y por qué no decir (como se nos calumnia, y como algunos, cuya condenación es justa, afirman que nosotros decimos): Hagamos males para que vengan bienes?"// (Romanos 3.8)
** //"¿Qué, pues, diremos? ¿Perseveraremos en el pecado para que la gracia abunde? En ninguna manera. Porque los que hemos muerto al pecado, ¿cómo viviremos aún en él?"// (Romanos 6.1-2)
** //"Porque vosotros, hermanos, a libertad fuisteis llamados; solamente que no uséis la libertad como ocasión para la carne, sino servíos por amor los unos a los otros."// (Gálatas 5.13).

</span>

<hr>

Hay otro juego de palabras en v. 22 en griego: "la fe actuó juntamente con sus obras" es literalmente "la fe //obró// juntamente con sus obras." (Moo, 136) Es decir, su fe y sus obras colaboraron juntos.

<hr>

Cuando versículo 22 dice que "la fe se perfeccionó por las obras," quiere decir que la fe se hace visible, se expresa visiblemente, se manifiesta, a través de las obras. Es similar a 1 Juan 4.12, donde el Dios invisible se hace visible a través de los actos de amor de su pueblo: //"Nadie ha visto jamás a Dios. Si nos amamos unos a otros, Dios permanece en nosotros y su amor se ha perfeccionado en nosotros."//

<hr>

Normalmente cuando leemos en la Biblia acerca del cumplimiento de una Escritura, pensamos en las profecías que se cumplen. Pero versículo 23 usa el lenguaje de cumplir las Escrituras en otro sentido: 

<span class="doublelist">

* Dios le acreditó justicia a Abraham en Génesis 15.6, porque Dios vio la fe de Abraham, como dice Pablo en Romanos 4.10. 
* Pero la fe de Abraham, de que habla Génesis 15.6, //llegó a su máxima expresión// en su sacrificio de Isaac, en Génesis 22. En este acto, más que en Génesis 15, se ve más claramente la fe de Abraham que impresionó tanto a Dios. 
* En este sentido, el de llegar a su máxima expresión, Jacobo dice que Génesis 15.6 fue "cumplido" por el sacrificio de Isaac.

</span>

<hr>

La idea que Abraham fue llamado 'amigo' de Dios se encuentra en estos versículos:

<span class="doublelist">

* //"Dios nuestro, ¿no expulsaste tú a los habitantes de esta tierra delante de tu pueblo Israel, y la diste a la descendencia de tu amigo Abraham para siempre?"// (2 Crónicas 20.7)
* //"Pero tú, Israel, siervo mío eres; tú, Jacob, a quien yo escogí, descendencia de Abraham mi amigo."// (Isaías 41.8)
* La idea también se encuentra repetidamente en otra literatura judía.

</span>

<hr>

En versículo 24 Jacobo termina su conversación su adversario imaginario, y regresa a la segunda persona plural ("ustedes" o "vosotros"), para dirigirse a sus destinatarios.

<hr>

Moo, 142, nota el parallelismo entre las expresiones de v. 21 acerca de Abraham, y las expresiones en v. 25 acerca de Rahab:

* //"¿No fue justificado por las obras Abraham nuestro padre, cuando ofreció a su hijo Isaac sobre el altar?" //(2.21)
* //"Asimismo también Rahab la ramera, ¿no fue justificada por obras, cuando recibió a los mensajeros y los envió por otro camino?"// (2.25)

<hr>

La historia de Rahab se encuentra en Josué 2.

<hr>

Cuando leemos versículo 26, no debemos intentar conectar "fe" y "obras" con "cuerpo" y "espíritu," o vice versa. La ilustración no funciona de esa manera. La comparación es simplemente que cuando el cuerpo y el espíritu se separan, la persona muere. De la misma manera, la fe, separada de las obras, es muerta. No es una fe viva o verdadera. Nuestra declaración de tener fe es nada más una expresión falsa y muerta si nuestra fe no produce obras.

<hr>

Aquí está una liga a un sermón que escribí sobre este texto: http://recursos.giffmex.org/pdf/sermon.stgo.2.14-26.pdf

@@.source Simon J. Kistemaker, New Testament Commentary: James and I-III John. (Grand Rapids: Baker, 1986); Ralph P. Martin, Word Biblical Commentary, Vol. 48: James. (Waco, TX: Word, 1988); Douglas J. Moo, The Pillar New Testament Commentary: The Letter of James. (Grand Rapids: Wm. B. Eerdmans, 2000). Texto bíblico: Reina Valera Revisada (1960) (Miami: Sociedades Biblicas Unidas, 1998).@@
''3.1-2: Introducción: advertencia acerca del deseo de ser maestros''

*3.1a: Advertencia a que no se afanen para llegar a ser maestros
*3.1b-2a: Motivo de la advertencia: seremos juzgados porque fallamos muchas veces
*3.2b: Evaluación del que no ofende de palabra

''3.3-6: La lengua es pequeña pero peligrosa''

*3.3: Descripción de frenos pequeños para caballos
*3.4: Descripción de timones pequeños para naves
*3.5a: Comparación: La lengua también es pequeña pero importante
*3.5b: Descripción del fuego y el bosque
*3.6: Comparación de la lengua con el fuego

''3.7-8: La lengua es indomable''

*3.7: Afirmación que los animales han sido domados
*3.8: Descripción de la naturaleza indomable de la lengua

''3.9-12: La lengua produce palabras contradictorias''

*3.9-10: Descripción de la naturaleza contradictoria de la lengua
*3.11: Ilustración de agua dulce y amarga (pregunta retórica)
*3.12a: Ilustración de higueras y aceitunas (pregunta retórica)
*3.12b: Ilustración de vides e higos (pregunta retórica)
*3.12c: Ilustración de agua salada y dulce (afirmación)

!!!Notas acerca de la estructura

*En versículos 2 y 3 Santiago usa una técnica de conectar las ideas con palabras claves.
**En 3.2a, dice que todos “ofendemos”, y en v. 2b dice si alguno no “ofende”
**En 2b habla de ser capaz de “refrenar” la boca, y en v. 3 habla de poner “frenos” en las bocas de los caballos.
*Hay un pequeño quiasmo en versículos 11-12:

:Aguas
::Cosechas
::Cosechas
:Aguas

@@.source Fuente: estudio personal del autor.@@
Deppe sugiere los siguientes paralelos entre 3.13-18 y 4.1-11

|bluealtrows|k
|!|!3.13-18|!4.1-11|
|Pregunta con respuesta|3.13|4.1|
|Descripción de la vida falsa<br>*Sus características<br>*Su fuente|3.14-16<br>*3.14<br>*3.15-16|4.2-6<br>*4.2-3<br>*4.4|
|||(citas, 4.5-6)|
|Siete características de la vida genuina|Descripción<br>1. Pura<br>2. Pacífica<br>3. Amable<br>4. Benigna<br>5. Llena de misericordia y buenos frutos<br>6. Sin incertidumbre<br>7. Sin hipocresía|Exhortación<br>1. Someteos a Dios<br>2. Resistid al diablo<br>3. Acercaos a Dios<br>4. Limpiad las manos<br>5. Afligíos, lamentad y llorad<br>6. Convierte su risa en lloro<br>7. Humillaos|
|Transicción a la siguiente sección|3.18, paz y conflictos, un tema de la próxima sección|4.11ª, murmurar, un tema de la próxima sección|

@@.source Fuente: Sílabo de Dr. Dean Deppe, James. Calvin Theological Seminary, 2004.@@
|bluealtrows|k
|!Versículos|!Función sintáctica|!Resumen|
|4.13ª|Llamado a la atención|Vamos ahora|
|4.13b|Descripción de las palabras de sus oyentes|Los que dicen, “….”|
|4.14ª|Amonestación – afirmación de la ignorancia de sus oyentes|No saben lo que será mañana|
|4.14b|Pregunta retórica|¿Qué es su vida?|
|4.14c|Comparación, ilustración|Son como la neblina|
|4.15|Recomendación, exhortación|Deberían decir, “….”|
|4.16ª|Evaluación|Pero ahora se jactan|
|4.16b|Evaluación|Jactarse de cualquier manera es malo|
|4.17|Afirmación proverbial para concluir|El que sabe…y no lo hace, comete pecado|
No hay variantes en los manuscritos de este versículo. Seguramente tenemos las palabras originales de Santiago aquí. Sin embargo, este versículo es uno de los más difíciles de interpretar en todo el NT. El primer problema es entender lo que dice, y el otro problema es saber a qué texto del AT Santiago 4.5 se refiere.

<hr>

πρὸς φθόνον ἐπιποθει̂ τὸ πνευ̂μα ὃ κατῴκισεν ἐν ἡμι̂ν

Traducción literal: “A celos anhela el espíritu que él causó habitar en nosotros.”

<hr>

''El problema interpretativo:''

<span class="doublelist">

#¿“Espíritu” se refiere al Espíritu Santo o al espíritu humano? La Reina Valera pone la palabra en mayúscula, pero no había capitalización en los manuscritos antiguos de la Biblia. Podría referirse al espíritu humano que Dios sopló en el hombre (Gn. 2.7), o el Espíritu Santo que Dios causa morar en cada creyente cristiano.
#Gramáticamente en griego “espíritu” podría ser el sujeto o el objeto de la oración. Es el sujeto el e/Espíritu o Dios? Es el e/Espíritu que anhela, o Dios que anhela al e/Espíritu?
#¿Se refiere la palabra φθόνον a la envidia del hombre, o al celos de Dios (Ex. 20.5)? En el NT, y en particular en Stg. 3.13-4.3, esta palabra griega siempre se refiere a la envidia humana, y nunca se refiere a Dios.
#¿Cómo se debe traducir ἐπιποθει̂ y πρὸς? ¿“Se inclina hacia” o “Anhela de una manera”? “Se inclina hacia” es más fiel a la preposición πρὸς, mientras que “Anhela de una manera” es más fiel al verbo ἐπιποθει.
''Llegamos a tres traducciones principales:''
#“Dios anhela celosamente al Espíritu que él causó habitar en nosotros.”
#“El Espíritu que él causó habitar en nosotros anhela celosamente.”
#“El espíritu (humano) que él causó habitar en nosotros se inclina hacia el celos.”

</span>

<hr>

En las primeras dos traducciones, el celo es algo bueno, el celo que Dios tiene para su pueblo. En la última traducción el celo es algo malo, la envidia y codicia del ser humano.

<hr>

En cualquiera de las primeras dos traducciones, la idea es, “Ustedes no deben amar al mundo (v. 4), cediendo a los deseos y la codicia (vv. 1-3), porque las Escrituras dicen que Dios es celoso.” 

<hr>

En la tercera interpretación, la idea es, “Ustedes no deben amar al mundo (v. 4), cediendo a los deseos y la codicia (vv. 1-3). ¿No saben que las Escrituras nos advierten que el espíritu humano (que Dios puso en el hombre en Gn. 2.7) está inclinado hacia la envidia y los celos?”

<hr>

El contexto de versículos 1-4 no nos ayudan a interpretar este versículo. Vv. 1-3 hablan de la codicia y los deseos dentro del ser humano—el envidioso espíritu humano. Pero v. 4 habla del celo de Dios: Amar al mundo provoca la enemistad con Dios.

<hr>

//Tentativamente, este autor se inclina hacia la primera traducción.// El versículo nos enseña que no debemos tener amistad con el mundo (v. 4) o ceder a los deseos codiciosos que producen conflictos (vv.1-3) porque el Dios que ha puesto su Espíritu Santo en nosotros es un Dios celoso. Se enoja contra los que lo traicionan, prefiriendo al mundo más que a él.  

<hr>

''El problema canónico: ¿A qué texto del AT se refiere?''

<span class="doublelist">

*Si favoreces una de las primeras dos interpretaciones, hay varias referencias al celo de Dios (Ex. 20.5, 34.14; Zac. 8.2).
*Si favoreces la tercera interpretación, Gn. 6.1-7 habla del espíritu que Dios puso en el hombre (v. 3) y las inclinaciones pecaminosas en el corazón del hombre (v. 5).
*Otro texto que menciona el Espíritu y el celo es Nm. 11.29.
*Pero ningunos de estos textos se parecen mucho a las palabras citadas en Santiago 4.5. Debemos concluir que no es una cita formal de un solo texto del AT, sino un resumen de una verdad que encontramos en el AT.

</span>

@@.source Moo, 188-191.@@
Esta sección comienza con las mismas palabras de 4.13-17 (“Ven ahora”), y comparte con 4.13-17 una condenación de personas buscando la prosperidad financiera en maneras que no agradan a Dios.

Se dirige a los inconversos. No hay un llamado para que se arrepientan. Tampoco hay promesas de restauración. Son exhortados a lamentar su 
destino. Esto constituye un problema: Esta es una carta escrita para creyentes. ¿Para qué dirigirse a los inconversos? Tal vez el propósito no es tanto para condenar a los inconversos sino para consolar a los creyentes de que sus opresores serán condenados.

''Sus pecados:''

#Amor al dinero y el deseo de acumular posesiones materiales (vv. 3, 5) 
#No pagar el sueldo (o por lo menos el sueldo adecuado) a sus obreros (v. 4)
#Hacer morir, directamente o indirectamente, a una(s) persona(s) justa(s) (v. 6).

!!!Bosquejo sintáctio

|bluealtrows|k
|!Versículos|!Función sintáctica|!Resumen|
|5.1a|Llamado a la atención|Vamos ahora|
|5.1b|Exhortaciones|Lamentad sus futuras miserias|
|5.2-3|Descripción del testimonio de los tesoros de sus lectores|Sus riquezas testificarán contra ustedes y les destruirá|
|5.4ª|Llamado a la atención|He aquí|
|5.4b|Descripción del testimonio de los sueldos retenidos|El salario que no has pagado a sus obreros clama|
|5.4c|Descripción del testimonio de las oraciones de los obreros defraudados|Dios ha oído los clamores de los obreros|
|5.5ª|Descripción|Han seguido sus deseos libertinos|
|5.5b|Comparación|Son como animales gordos, listos para la matanza|
|5.6|Descripción de su pecado|Han matado al justo|
<img src='https://www.giffmex.org/wiki/images/nt3/stg5.13.16chart.gif'>
Probablemente Santiago está hablando de la enfermedad física, y no la debilidad espiritual, como dicen algunos comentaristas.

Es notable que Pablo habla de personas con el don de sanar a otros, pero Santiago involucra a los ancianos de la iglesia.

<hr>

Ungir con aceite: ¿Por qué? Hay cuatro interpretaciones:

!!!Interpretación #1. "El aceite tiene un poder medicinal”. 

Se usaba aceites medicinales en el primer siglo (Lc. 10.34). Si esta interpretación es correcta, Santiago está exhortando a los ancianos a que aplican tanto la medicina como la oración. Objeción: Si es medicinal, surgen algunas preguntas:

#¿Por qué esperar la llegada de los ancianos para administrar medicina? Lo más lógico es que un familiar dará la medicina de inmediato.
#¿Está recetando la misma medicina (aceite) para todo tipo de enfermedad? 

<hr>

!!!Interpretación #2. “Usar aceite de esta forma tiene un poder sacramental.” 

Según esta interpretación, el aceite es el “vehículo del poder divino” (Davids, 193) igual como los sacramentos fortalecen la fe del creyente. 

#La unción extrema de la Iglesia Católica Romana es una aplicación de esta interpretación. 
#Con esta interpretación siempre hay el peligro de la superstición, el peligro de atribuir al aceite en sí un poder mágico, como se hace hoy en día con el agua bendita, etc. 

<hr>

!!!Interpretación #3. “El aceite no tiene poder en sí, pero es un símbolo de la consagración.”
 
Según esta interpretación, la iglesia aparta o consagra al enfermo para atención especial en oración, igual como Israel consagraba sacerdotes y otros funcionarios ungiéndolos con aceite para varios ministerios (Lc. 4.18, Hch. 4.27, 10.38, 2 Co. 1.21, Heb. 1.9). Moo afirma que esta interpretación más concuerda con el uso en el AT de los verbos que Santiago usa aquí. 

#Objeción: los ejemplos en la Biblia de la consagración son consagraciones para un ministerio, no para ser el objeto de las oraciones. 

<hr>

!!!Interpretación #4. “El aceite no tiene poder en sí, pero usar el aceite tiene un valor pastoral.” 

Según esta interpretación el aceite es una ilustración concreta y visible de la gracia de Dios y las oraciones de los ancianos. Inspira esperanza en el enfermo de una forma más eficaz que las palabras por si solas. Su valor es para fortalecer el ánimo del enfermo, no para curar.

#Objeción: ¿Pero no sería suficientemente inspirador la imposición de manos? ¿Por qué el aceite?
#Si ungir aceite no tiene el mismo efecto pastoral hoy en día, ¿Estamos libres para suspenderlo? ¿Es el aceite una parte esencial de ser obediente a la exhortación de Stg. 4.5? ¿O es una parte cultural?

<hr>

También se puede combinar dos o más de las posiciones. 

<hr>

En Mc. 6.13 y Lc. 10.34 encontramos otras curaciones usando aceite. Pero la gran mayoría de las curaciones milagrosas en el NT no incluyen aceite.

<hr>

!!!Conclusión

Cada iglesia debe reflexionar sobre estas opciones y consideraciones y llegar a su propia conclusión. Este autor se inclina hacia opciones 3 y 4 en conjunto.

@@.source Moo, 236-242@@
|bluealtrows|k
|!Santiago|!Mateo|!Punto de comparación|
|1.2|5.11-12|"Gozaos" en las pruebas|
|1.4|5.48|Sed perfectos|
|1.5|7.7|Pida lo que necesita y le será dada|
|1.9|5.3|Los pobres son benditos|
|1.17|7.11|Dios es el dador de buenas dádivas|
|1.19-20|5.22|Contra el enojo|
|1.22|7.24|No solo oir la palabra de Dios sino ponerla en práctica|
|2.5|5.3|Los pobres heredarán el reino|
|2.10|5.19|Quebrantar aún uno de los mandamientos trae culpa|
|2.13|5.7|Los misericordiosos reciben misericordia|
|3.12|7.16|Somos conocidos por nuestros frutos|
|3.18|5.9|Hacedores de paz|
|4.4|6.24|La imposibilidad de servir a Dios y al mundo / el dinero|
|4.10|5.5|Los mansos / humildes serán exaltados|
|4.11-12|7.1-2|No juzgar|
|5.2-3|6.19-20|Acumular tesoros en el cielo, no en este mundo|
|5.9|7.1|No juzgar para no ser juzgados|
|5.10|5.12|La persecución de los profetas como una consolación|
|5.12|5.34-37|No jurar por el cielo, la tierra, ni por otra cosa; que tu sí sea sí, y tu no sea no; jurar trae maldición|

@@.source Fuente: Sílabo de Dr. Dean Deppe, Calvin Theological Seminary, Grand Rapids, MI@@
|bluealtrows|k
|!Santiago|!Lit. Sapiential|!Punto de comparación|
|1.5|Pr. 2.6-7|Dios es la fuente de la sabiduría|
|1.7-8|Sirac 1.28|No debemos acercarnos a Dios con un corazón dividido|
|1.10-11|Pr. 11.28|El rico perecerá|
|1.19-20|Pr. 14.17, 15.18|Contra el enojo|
|1.27|Pr. 14.31|Tener misericordia de los pobres|
|2.1|Pr. 18.5|No hacer acepción de personas|
|3.2|Pr. 10.19|Refrenar las palabras, fuente de muchos pecados|
|3.6|Pr. 16.27|La boca como una peligrosa llama de fuego|
|3.17-18|Pr. 3.17-18|Producir paz, producir frutos como árbol|
|4.1|Pr. 29.22|La fuente de los conflictos|

@@.source Fuente: Sílabo de Dr. Dean Deppe, James. Calvin Theological Seminary, 2004.@@
//    Fuente: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament feature en Logos Bible Software versión 4//

<table class="altgray"><tr><td>

    En Apocalipsis 1.1, Dios le da a Jesús una visión para mostrar a sus siervos "lo que debe suceder pronto". En Daniel 2.28-29 y 2.45 Daniel le dice al rey que por medio de una visión, Dios ha mostrado al rey "lo que ha de acontecer en el porvenir."

</td></tr><tr><td>

    En Apocalipsis 1.4, Juan desea gracia y paz para sus lectores "del que es, que era y que ha de venir."

* En Éxodo 3.14, Dios dice que su nombre es "Yo so". En otras palabras, es el que es.
* En Isaías 41.4, Dios usa el mismo nombre para si mismo, pero también dice que es el principio y el fin, enfatizando su naturaleza eterna.

</td></tr><tr><td>

    En Apocalipsis 1.5, Jesús se llama el primogénito, el gobernante de los reyes de la tierra, y nos ha liberado de nuestros pecados por su sangre.

*El vocabulario de "primogénito, gobernante de los reyes de la tierra" viene de Salmo 89.27.
*Algunos dicen que Salmo 130.8 e Isaías 40.2 son alusiones a Apocalipsis 1.5, pero me parecen más como casos de lenguage similar, y no alusiones.

</td></tr><tr><td>

    Apocalipsis 1.6 dice que Jesús ha convertido a los santos en un reino y sacerdotes para servir a Dios.

*En Éxodo 19.6 Dios dice que Israel será un reino de sacerdotes."
*En Isaías 61.6 el profeta dice que las personas que regresan del cautiverio serán llamadas sacerdotes y ministros de Dios.

</td></tr><tr><td>

    Apocalipsis 1.7 describe la venida de Jesús sobre las nubes, y los que lo traspasaron y los linajes de la tierra lamentarán por causa de su venida.

* En Daniel 5.13, uno como el hijo del hombre aparece sobre nubes, llegando al trono de Dios.
* En Zacarías 12.10-14 Dios dice que Israel verá "a mí, al que traspasaron", y llorará y se afligirá.

</td></tr><tr><td>

    En Apocalipsis 1.8, dando eco a 1.4, "el Señor Dios" se describe como "el que es, el que era, y el que ha de venir, el Todopoderoso."

* En Éxodo 3.14, Dios dice que su nombre es "Yo so". En otras palabras, es el que es.
* En Isaías 41.4, Dios usa el mismo nombre para si mismo, pero también dice que es el principio y el fin, enfatizando su naturaleza eterna.
* Amós 3.13 y 4.13 enfatizan el título de Dios, "el Señor Dios todopoderoso."

</td></tr></table>
<table class="altgray"><tr><td>

En mi opinión, está indeciso el asunto si Juan el apóstol fue el autor de Apocalipsis o no. Pero lo que sigue es una lista de argumentos a favor de él.

</td></tr><tr><td>

La evidencia de los padres de la iglesia antigua es temprana y fuerte.

* La tradición temprana es unánima en atribuir el libro al apóstol, desde el segundo siglo con Justino Mártir en adelante.
* Ireneo, que conoció a Policarpo, un discípulo de Juan, dijo que Juan escribió Apocalipsis.
* Justino es notable porque vivió en Éfeso un tiempo. Ireneo es notable también, porque como niño conoció a Policarpo, quien fue un discípulo de Juan. Aparte de las excepciones notadas abajo, la iglesia fue unánime en nombrar a Juan como el autor.

</td></tr><tr><td>

El autor no sintió la necesidad de distinguirse de otros Juanes. Algunos dicen que esto significa que era el Juan que no necesitaba introducción, Juan el apóstol.

*La respuesta de David Aune es que es evidente que el autor y los destinatarios se conocen íntimamente. Y Juan hubiera enviado este libro con un mensajero que quitaría cualquier duda en cuanto a la identidad de su autor. Así que no era necesario identificarse con algo más específico que "Juan".

</td></tr><tr><td>

Leon Morris enumera las similitudes entre Apocalipsis y el Evangelio atribuido a Juan el apóstol.

* Tienen vocabulario similar (cordero, agua de vida, el que vence, guardar los mandamientos, el adjetivo "verdadero")
* Tienen invitaciones a personas sedientas (Juan 7.37, Apocalipsis 22.17)
* Mencionan mandamientos recibido por Cristo del Padre (Juan 10.18, Apocalipsis 2.27)
* Mencionan ropa blanca (Juan 20.12, Apocalipsis 3.4)
* Tienen contrastes agudos entre el bien y el mal
* Enfatizan la importancia de testificar y guardar los mandamientos

</td></tr><tr><td>

Robert Mounce (14) añade dos paralelos más:

* La palabra griega 'logos' se usa en ambos libros para referirse a una persona (Juan 1.1, Apocalipsis 19.13)
* La profecía de Zacarías 12.10 se menciona tanto en Apocalipsis 1.7 como en Juan 19.37, usando el mismo verbo griego, un verbo que no aparece ni en la Septuaginta ni en el resto del Nuevo Testamento.

</td></tr><tr><td>

Mark S. Wilson (38-39) añade una lista larga de temas que los dos libros comparten. Véase el libro de Wilson para las referencias.

* Cristo como testigo, como el "Yo soy", como vencedor, como cordero, como pastor, como juez, como templo
* La unidad entre Cristo y Dios; además, tanto Dios como Cristo se presentan como verdad y luz
* El Espíritu Santo habla a los creyentes en ambos libros
* Los creyenes / la iglesia como testigos, como verdaderos Judíos, como ovejas y corderos, como la novia de Cristo, odiando el mal y caracterizados por amor
* Satanás como 'el diablo' y como líder y general
* Temas e imágenes como sangre redentora, siervos de Dios, la vida en el cielo, maná, pan viviente, puertas, vino, viñas, el parto, novios
* Ambos libros contienen escatología futura y escatología presente
* Ambos contienen listas de siete artículos

</td></tr><tr><td>

David Aune menciona la observación de H. B. Swete acerca de ciertos aspectos de Juan que lo haría un buen candidato para el autor de este libro:

* Fue uno de los 'hijos de trueno'
* Fue testigo de la transfiguración de Jesús, y su resurrección
* Prohibió que otros expulsen demonios en el nombre de Jesús
* Quería pedir fuego del cielo sobre los Samaritanos inhospitalarios (Lc 9.52-55)

</td></tr></table>

<span class="source">Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Leon Morris, Tyndale NT Commnetaries: Revelation, revised edition. (Grand Rapids: Wm. B. Eerdmans, 1987), p. 32. .Robert H. Mounce, NICNT: The Book of Revelation, revised edition. (Grand Rapids: Wm. B. Eerdmans, 1998), p. 14; Mark S. Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), pp. 38-39.</span>
    //Fuente: Ben Witherington, Revelation. (Cambridge University Press, 2003).//

|bluealtrows|k
|!Apocalipsis 12|!Apocalipsis 17|
|La mujer se describe como madre (12.2)|La ramera se describe como madre (17.5)|
|La mujer aparece en el desierto (12.6)|La ramera aparece en el desierto (17.3)|
|En Apocalipsis 12.4 el dragón desea devorar al niño cuando nazca.|Apocalipsis 17.6 dice que la ramera bebió la sangre de los santos mártires.|
|>|Apocalipsis 12.1 y 17.4 usan la misma palabra griega para describir a las mujeres siendo 'vestidas' de ropa hermosa|
|12.7 menciona a personas que guardan el testimonio de Jesús|Apocalipsis 17.6 mencionan testigos de Jesús|
<table class="altgray"><tr><td>

    Jesús tiene siete estrellas en su mano (compare Apocalipsis 1.16 con 2.1, 3.1)

</td></tr><tr><td>

    Jesús camina entre los siete candelabros (compare 1.13 con 2.1)

</td></tr><tr><td>

    Jesús es el primero y el postrero, el que estuvo muerto y vivió (compare 1.17-18 con 2.8)

</td></tr><tr><td>

    Una espada aguda de dos filos sale de la boca de Jesús (compare 1.16 y 2.12)

</td></tr><tr><td>

    Jesús tiene ojos de fuego y sus pies son como bronce pulido (compare 1.14-15 con 2.18)

</td></tr><tr><td>

    Tanto capítulo 1 como 3.1 mencionan a los siete espíritus

</td></tr><tr><td>

    Jesús es el testigo fiel (compare 1.5 con 3.14)

</td></tr></table>

<span class="source">Fuente: William Hendriksen, More Than Conquerors. (Grand Rapids: Baker, 1986), p. 25.</span>
<table class="altgray"><tr><td>

En Apocalipsis 6.2 hay un jinete sobre caballo blanco, enviado a conquistar. En Apocalipsis 19.11, 19.14 hay un jinete sobre caballo blanco, listo para hacer guerra.

</td></tr><tr><td>

En Apocalipsis 6.8 hay un jinete con una espada grande, y en 19.15, 19.21 el jinete tiene una espada aguda.

</td></tr><tr><td>

La muerte y el Hades se mencionan en 6.8 y ambos son aventados al lago de fuego en 20.13-14.

</td></tr><tr><td>

Apocalipsis 6.9 menciona las almas que murieron por causa de la palabra de Dios y su testimonio. Apocalipsis 20.4 menciona las almas decapitadas por sus testimonios y por causa de la palabra de Dios.

</td></tr><tr><td>

El cielo desaparece en Apocalipsis 6.14, y en Apocalipsis 20.11 el cielo no puede ser hallada.

</td></tr><tr><td>

Tanto Apocalipsis 6.15 como 19.18 mencionan reyes, generales, los poderosos, los esclavos y los libres.

</td></tr><tr><td>

Tanto Apocalipsis 6.17 como 19.15 mencionan la ira de Dios.

</td></tr></table>

<span class="source">Felise Tavo, The structure of the Apocalypse: re-examining a perennial problem. (Novum testamentum 47 no 1 2005), 66.</span>
<table class="altgray"><tr><td>

Ambas hablan de la futura salvación, la futura vindicación de los fieles, y la futura destrucción para los impíos. Sin embargo,

*La profecía tiende a ser la recepción de un mensaje verbal, mientras apocalíptica tiende a ser la recepción de una visión
*La profecía tiende a ser más optimista—hay verdadera posibilidad para los malos si se arrepienten—mientras la apocalíptica tiende a ser más pesimista—el mundo está inevitablemente en rumbo a la destrucción, y los malos son los incorrigibles adversarios de Dios y su pueblo.

</td></tr><tr><td>

Rowley dice que la literatura “apocalíptica es el hijo de la profecía.”

</td></tr></table>

<span class="source">Fuente: Mounce 1- 8, Osborne, 477.</span>
 <table class="rotate">
  <tr>
<th class="rotate"><div><span></span></div></th>
<th class="rotate"><div><span>''Text in bold''</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
<th class="rotate"><div><span>XX</span></div></th>
  </tr>
  <tr>
<td>1.1</td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
<td></td>
<td> </td>
  </tr>
  <tr>
<td>1.2-4</td>
<td></td>
<td></td>
  </tr>
  <tr>
<td>1.5-8</td>
<td></td>
<td></td>
  </tr>
  <tr>
<td>1.9-11</td>
    <td><span style="font-size:25px;color:#f3a;">&#9679;</span></td>
<td></td>
  </tr>
  <tr>
<td>1.12</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>1.13-18</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>1.19-20</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>1.21-27</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>

  <tr>
<td>2.1-9</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>2.10-13</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>2.14-26</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>3.1-2a</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>3.2b-12</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>3.13-18</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.1-3</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.4-5</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.6-10</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.11-12</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.13-16</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>4.17</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>5.1-6</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>5.7-11</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>5.12-18</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
  <tr>
<td>5.19-20</td>
    <td> <span style="font-size:25px;color:#f3a;">&#9679;</span> </td>
<td></td>
  </tr>
</table> 

<span style="font-size:25px;color:#f3a;">&#9679;</span>
!!Palabras-ganchos en Hebreos

Palabras-ganchos se refiere al uso de una palabra al final de una sección y el principio de otra sección para enlazar las dos secciones.

*1.1-4 y 1.5-14 están unidos por la palabra “ángeles” en vv. 4 y 5.
*1.5-14 está unido con 2.1-4 por la palabra “salvación” en 1.14 y 2.3. 2.1-4 está unido con 2.5-9 con la palabra “testificar” en 2.4 y 2.6.
*2.10-18 y 3.1-6 están unidos por la palabra “sumo sacerdote” en 2.17 y 3.1.

<hr>

!!Palabras-ganchos distantes en Hebreos

Usadas para unir secciones donde otra sección las separa, especialmente cuando una sección de exhortación separa dos secciones de exposición.

*1.5-14 y 2.5-9 están separados por 2.1-4. La palabra que los une es μέλλειν, “estar al punto de” en 1.14 y 2.5. Con esta técnica el autor resume su descripción de Cristo, superior a los ángeles.
*La expresión “En servicio a Dios . . . pecados” en 2.17-18 y 5.1 une esas secciones en medio de las cuales viene la exhortación de caps. 3 y 4.

<hr>

!!Palabras claves enganchadas en Hebreos

Donde una palabra que reocurre dentro de una sección es usada para enlazar esa sección con otra. Hay tres patrones:

*“Ángeles” en 1.4 se convierte en la palabra clave para 1.5-2.18, donde aparece 10 veces.
*“Ángeles”, palabra clave para 1.5-14, se repite en 2.2.
*La palabra clave de 2.5-9, “gloria,” se repite en 2.10, mientras dos palabras claves para 2.10-18, “sufrimiento” y “muerte”, se anticipan en 2.9.

<hr>

!!Unidades con dos funciones en Hebreos

Unidades que sirven tanto para concluir una sección como para iniciar la próxima sección.

*4.14-16 es integral a la sección 3.1-4.16, pero también es integral como la introducción de 4.14-10.18.
*10.19-25 es la conclusión de 4.14-10.18 pero funciona como puente para introducir el resto del contenido de la carta.

<hr>

!!Introducciones paralelas en Hebreos

Expresiones casi idénticas que introducen dos diferentes secciones del libro.

*5.1 y 8.3 contienen expresiones casi idénticas, que sirven para introducir y enlazar las secciones 5.1-7.28 y 8.3-10.18, secciones que están separadas por 8.1-2.

<hr>

!!Transiciones intermediarias en Hebreos

Secciones independientes que funcionan como puentes entre las secciones que las preceden y las siguen.

*8.1-2, notado arriba en la figura en #5. 8.1 es una declaración basada en todo lo que precede, mientras las palabras “santuario” y “tabernáculo” en 8.2 son términos importantes en la exposición que sigue.

@@.source Fuente: Lane.@@
//    Fuentes: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament en Logos Bible Software version 4//

<table class="altgray"><tr><td>

Apocalipsis 2.18 describe a Cristo, cuyos pies son como bronce pulido. Daniel 10.6 describe a un hombre en una visión, cuyas piernas son como bronce pulido.

</td></tr><tr><td>

Apocalipsis 2.20 compara una falsa profetisa a Jezabel, y dice que ella dirige el pueblo de Cristo hacia la inmoralidad sexual y comida sacrificada a los ídolos.

* Números 25.1-2 es acerca de Balaamm, pero menciona que Israel fue seducida a la inmoralidad sexual y la comida sacrificada a ídolos.
* 1 Reyes 16.3| menciona el matrimonio de Jeroboam a Jezabel y su subsecuente culto a los ídolos.
* En 2 Reyes 9.22 Jehú menciona la idolatría y brujería de Jezabel.

</td></tr><tr><td>

    En Apocalipsis 2.23 Cristo dice que matará a los hijos de Jezabel, conb el resultado que las iglesias sabrán que él es el que escudriña los corazones y las mentes" y recompensa a cada uno según sus obras.

* En Salmo 7.9 el salmista ora al Dios que escudriña los corazones y las mentes.
* En Salmo 62.12 el salmista expresa su confianza que Dios recompensará a cada uno según lo que ha hecho.
* Proverbios 24.12 conecta los pensamientos de los dos salmos antes mencionados. Dios conoce las almas, y pagará a las personas según sus obras.
* Jeremías 11.20 entiende a Dios como alguien que prueba los corazones y los juzga apropiadamente.
* Jeremías 17.10 parece ser el versículo principal de esta alusión en Apocalipsis. En este versículo Dios dice que escudriña los corazones y las mentes, y recompensa a las personas según sus hechos.

</td></tr></table>
   //Fuentes: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament en Logos Bible Software version 4//

<table class="altgray"><tr><td>

    En Apocalipsis 3.14, Jesús se llama el soberano de la creación de Dios. Proverbios 8.22 habla de la sabiduría como la primera o la principal de las obras de Dios.

</td></tr><tr><td>

    En Apocalipsis 3.17 Jesús cita las palabras de la iglesia en Laodicea. La iglesia ha dicho, "Yo soy rico, me he enriquecido". Estas palabras son casi idénticas a las de Efraín en Oseas 12.8: "Ciertamente me he enriquecido, me he labrado una fortuna."

</td></tr><tr><td>

    En Apocalipsis 3.19 Jesús dice que amonesta y disciplina a los que ama, Es una alusión a Proverbios 3.12 que dice que Dios disciplina a las personas que ama.

</td></tr></table>
//    Fuentes: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament feature in Logos Bible Software version 4.//

En Apocalipsis 3.5, Jesús promete nunca borrar del libro de la vida el nombre del que vence. Hay tres textos del Antiguo Testamento parecidos:

<span class="doublelist">

* En Éxodo 32.32-33 Moisés dice que si Dios no perdonara los pecados de Israel, Moisés preferiría que Dios borre su nombre del libro que ha escrito. Dios responde que los que serán borrados de su libro son los que pecan contra él.
* En Salmo 69.28, el salmista pide que Dios borre los nombres de sus asaltantes del libro de los vivos.
* Y según Daniel 12.1, todos los que tienen su nombre en 'el libro' serán rescatados de la calamidad.

</span>
//    Fuente: The Greek New Testament (UBS, 4th edition), comparado con Old Testament Quotations and Allusions in the New Testament en Logos Bible Software version 4.//

<table class="altgray"><tr><td>

En Apocalipsis 3.7, Jesús se presenta como el que tiene la llave de David. Lo que abre, nadie puede cerrar, y lo que cierra, nadie puede abrir.

* En Isaías 22.22 Dios dice que dará la llave de David a Eliaquim (el administrador de la casa del rey Ezequías), y lo que abre, nadie puede cerrar, y lo que cierra, nadie puede abrir.
* Job 12.14 dice que si Dios derriba, nadie puede edificar, y lo que Dios cierra, nadie puede abrir.

</td></tr><tr><td>

En Apocalipsis 3.9 Jesús dice a la iglesia en Filadelfia que él hará que los miembros de la 'sinagoga de Satanás' se postren delante de sus pies y reconocer que él ha amado a los miembros de la iglesia.

* En Isaías 43.4 Dios dice a Israel que la ama.
* En Isaías 45.14 Dios dice que los Egipcios, los Etiopíes y los Sabeos se postrarán delante de los Israelitas y suplicarlos, reconociendo que Dios está con los Israelitas.
* En Isaías 49.23 Dios dice que los reyes y reinas se postrarán delante de los Israelitas y lamer sus pies. Entonces los Israelitas reconocerán que Jehová es Dios.
* En Isaías 60.14 Dios dice que los hijos de los que afligían a Israel se postrarán delante de ella y reconocerla como la ciudad de Dios.

</td></tr><tr><td>

En Apocalipsis 3.12 Jesús promete que sobre el que venciere, Jesús escribirá su propio nombre, y el nombre la de ciudad de su Dios.

* En Isaías 62.2 Isaías dice que la boca del Señor dará un nuevo nombre a Jerusalén.
* En Isaías 65.15 Isaías dice que algún día Dios llamará a sus siervos por otro nombre.
* En Ezequiel 48.35, parte de la visión de Ezequiel de una futura Jerusalñen, Ezequiel escucha que el nombre de la ciudad es "El Señor está ahí."

</td></tr></table>
    //Fuente: conclusiones personales del autor.//

<hr>

    El primer punto y lo más importante: Apocalipsis es lo que repetidamente alega ser: una profecía en la tradición de los profetas del Antiguo Testamento.

<hr>

    Dentro de los libros proféticos hay varios subgéneros y convenciones literarias (narrativa, poesía, reportes de visiones, etc). Apocalipsis usa principalmente las convenciones literarias de la literatura apocalíptica. Así que podemos decir que Apocalipsis es una profecía apocalíptica (o, si prefiere, un apocalipsis profético).

<hr>

Por último, Apocalipsis está envuelto en un 'marco epistolario' - es decir, empieza y se termina como carta (véase 1.1-8 y cap. 22). Esto no quiere decir que el género de Apocalipsis es carta o epístola. La gran mayoría del libro no tiene nada en común con una carta. El marco epistolario significa que el libro de Apocalipsis fue correspondencia personal enviado por un mensajero. Y por supuesto, no solamente las cartas se enviaban por correo, sino todo tipo de documentos también. Además, puede ser que el marco epistolario fue una forma en que Juan quería que su libro fuera leído en el contexto de los cultos litúrgicos, porque las cartas de los apóstoles fueron leídas durante los cultos. Así que podemos decir que Apocalipsis es una profecía apocalíptica envuelta en un marco epistolario.
   // Fuentes: David Aune, Word Biblical Commentary: Revelation 1-5. (Waco, TX: Word, 1997); Mark S. Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel, 2007), p. 20.//

<hr>

    El autor especificamente describe su libro como profecía (Apocalipsis 1.3, 22.7, 22.10, 22.18, 22.19. cf. 19.10).

<hr>

    El autor nunca se refiere como profeta, pero recibe comisiones proféticas en Apocalipsis 1.9-20 y 10.1-11.

<hr>

Wilson (20) hace una lista de elementos en los libros proféticos que encontramos en Apocalipsis. Véase su libro para los versículos.

* Vocabulario de revelación
* Lenguaje de cumplimiento
* Recepción de la palabra de Dios
* Exhortaciones
* El tema de sufrir en exilio
* Experiencias proféticas mientras estar "en el Espíritu"
* Exhortaciones a escribir
* La fórmula "Así dice..."
* Visiones de un trono celestial
* La mención de profetas
* Acciones simbólicas y proféticas
* Viajes proféticas
* Fórmulas proféticas de votos
* Sellos proféticos
* Maldiciones proféticas
<table class="altgray"><tr><td>

    ''Simultáneos:'' Los sellos, trompetas y copas ocurren simultáneamente, pero son repetidos en Apocalipsis para mostrar la intensificación de los juicios.

</td></tr><tr><td>

    ''Consecutivos:'' Los sellos, trompetas y copas ocurren en secuencia cronológica.

</td></tr><tr><td>

    ''Telescópicos:'' Según esta interpretación, el séptimo sello introduce la serie de las trompetas, y la séptima trompeta introduce la serie de copas.

</td></tr></table>

<span class="source">Fuente: H. Wayne House, Chronological and Background Charts of the New Testament. (Grand Rapids: Academie Books), p. 146</span>
|bluealtrows|k
|Santiago 1.2-4|Hermanos míos, gozaos profundamente cuando os halléis en diversas pruebas, sabiendo que la prueba de vuestra fe produce paciencia. Pero tenga la paciencia su obra completa, para que seáis perfectos y cabales, sin que os falte cosa alguna.|
|1 Pedro 1.6-7|Por lo cual vosotros os alegráis, aunque ahora por un poco de tiempo, si es necesario, tengáis que ser afligidos en diversas pruebas, para que, sometida a prueba vuestra fe, mucho más preciosa que el oro (el cual, aunque perecedero, se prueba con fuego), sea hallada en alabanza, gloria y honra cuando sea manifestado Jesucristo.|
|Romanos 5.3-5|Y no solo esto, sino que también nos gloriamos en las tribulaciones, sabiendo que la tribulación produce paciencia; y la paciencia, prueba; y la prueba, esperanza; y la esperanza no nos defrauda, porque el amor de Dios ha sido derramado en nuestros corazones por el Espíritu Santo que nos fue dado.|

@@.source Texto bíblico: Reina Valera 1995.@@
Aune (25) cita los siguientes ejemplos de tríadas (grupos de tres elementos) en Apocalipsis:

<span class="doublelist">

* el que lee, y los que oyen las palabras de esta profecía, y guardan las cosas en ella escritas; (1.4)
* Yo soy el Alfa y la Omega, principio y fin, dice el Señor, el que es y que era y que ha de venir, el Todopoderoso. (1.8)
* en la tribulación, en el reino y en la paciencia de Jesucristo (1.9)
* yo soy el primero y el último; y el que vivo, y estuve muerto; mas he aquí que vivo (1.17-18)
* tus obras, y tu arduo trabajo y paciencia (2.2)
* que no puedes soportar a los malos, y has probado a los que se dicen ser apóstoles, y no lo son, y los has hallado mentirosos; (2.2)
* y has sufrido, y has tenido paciencia, y has trabajado arduamente (2.3)
* Recuerda, por tanto, de dónde has caído, y arrepiéntete, y haz las primeras obras (2.5)
* gloria y honra y acción de gracias (4.9)
* la gloria y la honra y el poder (4.11)
* hubo granizo y fuego mezclados con sangre (8.7)
* que creó el cielo y las cosas que están en él, y la tierra y las cosas que están en ella, y el mar y las cosas que están en él (10.6)
* que has visto, era, y no es (17.8)
* que era y no es, y será (17.8)

</span>
|bluebycell|k
|!Versículos|!Tipo de oración|
|1-2|No es oración (introducción)|
|3|Oración declarativa|
|4|Oración declarativa|
|5|Oración <span class="wine">imperativa suave</span>|
|6a|Oración declarativa|
|6b|Oración declarativa|
|7a|Oración declarativa|
|7b|Oración declarativa|
|8|Oración <span class="wine">imperativa</span>|
|9a|Oración declarativa|
|9b|Oración declarativa|
|10|Oración <span class="wine">imperativa</span>|
|11|Oración declarativa|
|12|Oración declarativa|
|13|Oración declarativa|
|bluealtrows|k
|1-3:|Apertura de la carta|
|4:|Un cumplido para la Elegida|
|5-6:|Exhortación a que se amen mutuamente|
|7-11:|Advertencia a no recibir a los falsos maestros|
|12:|El deseo del autor a visitar a los destinatarios|
|13:|Saludos finales|

A primera vista, la sección en 2 Juan acerca del amor y la sección acerca de los engañadores no tienen ninguna conexión lógica. Pero en griego están conectadas por la palabra 'por'. Los destinatarios aparentemente necesitan mostrar amor entre ellos por medio de su rechazo de las doctrinas falsas que harían daño a su grupo.
|bluebycell|k
|>|Introducción (1.1-2)|
|Cuerpo de la carta (1.3-3.18a)|La importancia de la santificación (1.3-11)|
|~|Defensa de la verdad (1.12-21)|
|~|Advertencia contra los falsos profetas (2.1-22)|
|~|El propósito de las cartas de Pedro (3.1-2)|
|~|Defensa de la doctrina de la segunda venida de Cristo (3.3-18a)|
|>|Doxología (3.18b)|
<span class="doublelist">

*''Introducción epistolaria (1-2)''
*''Acción de gracias (3-4)''
*''Cuerpo de la carta (5-12)''
**Comendación de la hospitalidad de Gayo hacia los misioneros (5-8)
**Condenación de Diótrefes (9-10)
**Contraste entre los buenos y malos ejemplos (11)
**Recomendación de Demetrio (12)
*''Conclusión epistolaria (13-15)''
**El deseo del anciano de visitar (13-14)
**Bendición de paz (15a)
**Saludos (15b)

</span>
''    El dragón no logra devorar al hijo de la mujer celestial (12.1-6)''

* Introducción de la mujer celestial (12.1-2)
* Introducción del dragón (12.3)
* El dragón amenaza a la mujer y su hijo (12.4)
* El hijo y la mujer escapan del dragón (12.5-6)

''    Miguel y sus ángeles lanzan al dragón y sus ángeles a la tierra (12.7-9)''

* Descripción general de la guerra (12.7)
* La derrota del dragón y sus ángeles (12.8)
* El lanzamiento del dragón y sus ángeles a la tierra (12.9)

''    Un himno celebrando la victoria de Dios sobre el dragón (12.10-12)''

* Una declaración de la victoria de Dios sobre el diablo, con la razón detrás de la victoria (12.10)
* Información adicional acerca de los mártires mencionados en v. 10 (12.11)
* Un llamado a la alabanza, dirigida a los cielos (12.12a)
* Un ay dirigido a la tierra y el mar (12.12b)

   '' El dragón no logra ahogar a la mujer celestial (12.13-17)''

* El dragón persigue a la mujer (12.13)
* La mujer escapa del dragón (12.14)
* El dragón ataca a la mujer con agua (12.15)
* La tierra protege a la mujer (12.16)
* El dragón deja a la mujer para hacer guerra con sus otros hijos (12.17)
|bluebycell|k
|Jesús y su mensaje son superiores a los ángeles y su mensaje (1.1-2.18)|Dios ha hablado nuevamente a través de su Hijo (1.1-4)|
|~|Las Escrituras muestran que su Hijo es superior a los ángeles (1.5-14)|
|~|Por esta razón su mensaje es superior, y no debemos rechazarlo (2.1-4)|
|~|El Hijo parece menor que los ángeles, porque fue hecho menor que ellos, para librar a sus hermanos a través de su sufrimiento y muerte (2.5-18)|
|Debemos responder a Jesús con fe y entrar en el reposo que nos ofrece (3.1-4.16)|Así que debemos enfocarnos en él. Él es más digno aun que Moisés (3.1-6)|
|~|No debemos endurecer nuestros corazones como los Israelitas hicieron en el desierto (3.7-19)|
|~|En contraste con esa generación, debemos entrar al reposo de Dios mientras que la promesa de este reposo todavía existe (4.1-13)|
|~|Tenemos un sumo sacerdote que simpatiza con nosotros, así que debemos acercarnos a Dios con confianza (4.14-16)|
|El sacerdocio y el sacrificio de Cristo son superiores a los de los levitas (5.1-10.25)|Ningún sacerdote se nombra a si mismo, sino que es nombrado por Dios. Así fue con Cristo, sacerdote como Melquisedec (5.1-10)|
|~|//''Paréntesis:'' Pero Ustedes faltan de madurez para entender lo de Melquisedec (5.11-14). Advertencia: Tenemos que ir más allá de las enseñanzas básicas. Los que oyen y después dan la espalda serán condenados para siempre. Pero confío que ustedes no son personas así. Seguirán fieles como eran antes, e imitarán a los herederos de las promesas de Dios (6.1-12). Dios subrayó su promesa a Abraham con un juramento, así que la esperanza de nosotros, los herederos de Abraham, es doblemente seguro (6.13-20)//|
|~|Melquisedec fue eterno. Él fue superior a Abraham, y por eso fue superior a Leví también (7.1-10)|
|~|El sacerdocio de Cristo es superior al de los Levitas porque él es sacerdote en el linaje superior de Melquisedec (7.11-28)|
|~|Cristo ofrece sacrificios en un santuario celestial, no un santuario terrenal (8.1-6)|
|~|Las Escrituras muestran que un nuevo pacto iba a reemplazar el pacto anterior (8.7-13)|
|~|La composición del tabernáculo nos muestra que el acceso a Dios era bloqueado antes de la venida de Cristo (9.1-10)|
|~|Pero el sacrificio de Cristo se lleva a cabo en un tabernáculo celestial, es un sacrificio de su propia sangre, es de una vez para siempre, y efectúa una limpieza de nuestras conciencias (9.11-28)|
|~|El sacrificio de Cristo hizo lo que todos los sacrificios anteriores no pudieron (10.1-18)|
|~|Debemos acercarnos a Dios por medio de él y congregarnos para mantener firme nuestra esperanza (10.19-25)|
|Hay que mantener la fe en Cristo y la santidad frente a la persecución (10.26-12.29)|No hay otro sacrificio más que el de Cristo. Los que rechazan su sacrificio experimentarán la ira de Dios (10.26-31)|
|~|Manténganse firmes, pues, ante la persecución, como hacían al principio (10.32-39)|
|~|Los santos del AT nos dan ejemplo de la fe, viviendo y perseverando debido a su confianza en realidades futuras e invisibles (11.1-40)|
|~|Así que imitemos el ejemplo de ellos y de Cristo, y soportemos la disciplina de Dios nuestro Padre (12.1-13)|
|~|Sean santos. Han venido a un monte superior a Sinaí, y van a recibir un reino inconmovible (12.14-29)|
|Conclusión de la carta (13.1-25)|Varias exhortaciones finales (13.1-17)|
|~|Mensajes personales y doxología (13.18-25)|
|bluealtrows|k
|Las pruebas y <br>tentaciones (1.1-18)|Saludo (1.1)|
|~|Regocijad en las pruebas (1.2-4)|
|~|Pide sabiduría sin dudar (1.5-8)|
|~|La gloria de los ricos y los pobres (1.9-11)|
|~|Una bienaventuranza (1.12)|
|~|La fuente y el resultado de la tentación (1.13-15)|
|~|Dios es la fuente de las cosas buenas (1.16-18)|
|Una sección donde <br>se concentran las palabras <br>“palabra”, “ley” y “obras” (1.19-2.26)|Sean tardos para airarse (1.19-20)|
|~|Hacedores de la Palabra (1.21-27)|
|~|Prohibición del favoritismo hacia los ricos (2.1-9)|
|~|La necesidad de guardar toda la ley de Dios (2.10-13)|
|~|La fe sin obras no es una fe auténtica (2.14-26)|
|Los conflictos entre <br>creyentes (3.1-4.12)|Advertencia contra un deseo prematuro de enseñar (3.1-2a)|
|~|La lengua es peligrosa y difícil de dominar (3.2b-12)|
|~|Contraste entre la sabiduría ambiciosa del mundo y la sabiduría pacífica que proviene de Dios (3.13-18)|
|~|Los deseos desordenados son la fuente de los conflictos (4.1-3)|
|~|Amistad con el mundo es enemistad contra Dios (4.4-5)|
|~|Humíllense delante de Dios (4.6-10)|
|~|Prohibición de las críticas negativas (4.11-12)|
|Cuarta sección <br>(4.13-5.11)|Amonestación para los comerciantes orgullosos (4.13-16)|
|~|Falta de obediencia es un pecado (4.17)|
|~|Ay contra los opresores ricos (5.1-6)|
|~|Llamado a la paciencia hasta la segunda venida (5.7-9)|
|~|Ejemplos de la paciencia del AT (5.10-11)|
|Quinta sección<br> (5.12-20)|Prohibición de los juramentos (5.12)|
|~|Llamado a varios tipos de oración (5.13-16)|
|~|La oración de Elías (5.17-18)|
|~|La bendición de rescatar a los hermanos caídos (5.19-20)|

<hr>

''Otra estructura propuesta divide la carta así:''

* 1.1-21: Introducción
* 1.22-2.26: Pronto para oír
* 3.1-18: Tardo para hablar
* 4.1-5.6: Tardo para la ira

@@.source Wall, DLNTD, “James, Letter of”)@@
Cuando las cosas son difíciles, los líderes en la iglesia, …

''1. …atienden a su ambiente (17-19)''

<span class="indent1">En otras palabras, se preparan para la oposición</span>

''2. …atienden a si mismos (20-21)''

* Crecen en la fe
* Oran en el Espíritu (Rom. 8.26)
* Se mantienen en el amor de Dios

''3. …atienden a su rebaño (22-23)''

<span class="indent1">Misericordia mezclado con cuidado</span>

''4. …atienden a su Salvador (24-25)''
''1 Juan'' es el libro más difícil del NT en cuanto a su estructura. Los comentaristas casi concuerdan en cuanto a las perícopas, pero no en cuanto a las divisiones básicas de la carta. Abajo solo mostramos las perícopas y su contenido.

|bluealtrows|k
|1.1-4|Testificamos de la Palabra de vida que vimos|
|1.5-7|Dios es luz, y sus seguidores caminan en la luz|
|1.8-10|Todos tenemos que confesar nuestros pecados|
|2.1-2|Jesucristo hace propiciación para los pecados|
|2.3-6|Los que profesan conocer a Dios tienen que obedecerle|
|2.7-11|El que odia a su hermano está todavía en la oscuridad|
|2.12-14|Propósitos de de la carta|
|2.15-17|No debemos amar al mundo|
|2.18-27|El ungimiento que nos protege de los anticristos|
|2.28-3.3|Como hijos de Dios, tenemos una esperanza de ser vindicados y glorificados|
|3.4-10|Los hijos de Dios no siguen pecando|
|3.11-18|Amémonos unos a otros como Cristo hizo|
|3.19-24|Los que obedecen sus mandamientos no son condenados por sus corazones|
|4.1-6|Cómo discernir entre los espíritus y el Espíritu|
|4.7-12|Amemos como Dios nos amó, enviando a Cristo|
|4.13-15|Testificamos del Hijo de Dios|
|4.16-21|El que ama a Dios no tiene temor, y también ama a su hermano|
|5.1-5|El que ama a Dios tiene que creer que Jesús es su Hijo y obedecerlo|
|5.6-12|El testimonio que Dios ha dado acerca de su Hijo|
|5.13|Propósito de la carta|
|5.14-15|La confianza que tenemos para orar|
|5.16-17|Aplicación de 5.14-15: intercesión para algunos de los pecadores|
|5.18-20|Los hijos de Dios están en Jesucristo, protegidos del maligno|
|5.21|Exhortación final acerca de los ídolos|
|bluealtrows|k
|>|Introducción (1.1-2)|
|Cuerpo de<br> la carta (1.3-5.11)|La herencia segura que nos espera (1.3-12)|
|~|Acciones que resultan de la doctrina cristiana (1.13-2.3)|
|~|La iglesia, piedra escogida por Dios (2.4-10)|
|~|Código de hogar (2.11-3.12)|
|~|Respuestas a la persecución (3.13-17)|
|~|Tenemos que morir al pecado con Cristo (3.18-4.6)|
|~|La vida apropiada en vista del fin del mundo (4.7-11)|
|~|La respuesta apropiada al sufrimiento y el juicio que se acerca (4.12-19)|
|~|Exhortaciones finales (5.1-11)|
|>|Conclusión (5.12-14)|
|bluebycell|k
|!24a|''Ahora a aquel''|!Complemento indirecto, anticipación de 25a|
|!24b|@@.indent1 que es capaz@@|!Descripción de "aquel"|
|!24c|@@.indent2 para guardarlos sin caída@@|!Elaboración de qué es capaz Dios|
|!24d|@@.indent2 y presentarlos@@|!Elaboración de qué es capaz Dios|
|!24e|@@.indent3 sin mancha@@|!Elaboración de cómo los presentará|
|!24f|@@.indent3 delante de su gloria@@|!Elaboración de cómo los presentará|
|!24g|@@.indent3 con gran gozo,@@|!Elaboración de cómo los presentará|
|!25a|''Al único Dios''|!Complemento indirecto, continuación de 24a|
|!25b|@@.indent1 nuestro Salvador@@|!Descripción de "Dios"|
|!25c|@@.indent1 por medio de Jesucristo nuestro Señor@@|!El medio que lo cual la gloria será a Dios|
|!25d|''[sea] la gloria, la majestad, el dominio y la autoridad''|!Verbo implícito ("sea") y los sujetos|
|!25e|@@.indent1 antes de todos los siglos@@|!Cuando la gloria será atribuida a Dios|
|!25f|@@.indent1 y ahora@@|!Cuando la gloria será atribuida a Dios|
|!25g|@@.indent1 y por todos los siglos, Amén.@@|!Cuando la gloria será atribuida a Dios|
<img src='https://www.giffmex.org/wiki/images/nt3/respuestasapoc.gif'>
<img src='https://www.giffmex.org/wiki/images/nt3/apocmensajesprincipales.jpg'>
<img src='https://www.giffmex.org/wiki/images/nt3/problemsrev.jpg'>
Gregory Beale nota que los personajes malos son vencidos en Apocalipsis 17-20 en el orden reverso de lo que fueron introducidos en caps. 12-14. Esto resulta en el siguiente quiasmo:

: El dragón introducido en cap. 12<br><br>

:: La bestia y el falso profeta introducidos en cap. 13<br><br>

::: Babilonia la ramera introducida en 14.8<br><br>

::: Babilonia la ramera vencida en caps. 17-18<br><br>

:: La bestia y el falso profeta vencidos en 19.20-21<br><br>

: El dragón vencido en cap. 20
!!El contexto de Judas

<hr>

!!!La situación que provocó la composición de la carta de Judas

<hr>

Judas escribió su carta porque algunas personas que él llama 'hombres impíos' entraron a la iglesia de los destinatarios y su influencia fue dañina en las siguientes áreas:

* Abusaban de la doctrina de la gracia de Dios como pretexto para tener vidas inmorales
* Rechazaban las autoridades y los límites puestos sobre ellos
* Cometían pecados sexuales
* En su avaricia usaban la religión para enriquecerse
* Dividían a los miembros de la iglesia

Para más información, consulta <a href="##situacion">La situación detrás de la composición de Judas</a>.

<hr>

<span class="greenbk">!!!Respuestas</span>

<hr>

<span class="greenbk">!!!Mensaje</span>

<hr>

!!Los temas de Judas

<hr>

!!El diseño de Judas

<hr>

!!!El género literario

<hr>

''El género literario'' al cual Judas pertenece es una epístola (una carta). Sin embargo, su contenido es más similar a un sermón que a una carta. Consulta <a href="##gen">El género literario de Judas</a> para más información.

<hr>

!!!La estructura

<hr>

<span class="greenbk">Structure</span>

<hr>

!!!Las características literarias

<hr>

Judas 24-25 contienen ''una doxología'' (un elemento litúrgico que atribuye gloria a Dios).

<hr>

A pesar de su brevedad, esta carta contiene una abundancia de ''figuras''. Ve nuestra lista <a href="##figuras">aquí</a>. 

<hr>

A pesar de su brevedad, Judas contiene 14 ''hapax legomenoi'' (palabras en griego que no aparecen en el resto del NT). Consulta <a href="##hapax">Hapax legomenoi en Judas</a> para más información.

<hr>

Judas emplea la técnica interpretativa que se llama ''midrás'', un comentario o explicación de un texto después de citarlo. Consulta <a href="##midras">Midrás en Judas</a> para más información.

<hr>

Al autor de Judas le gustaba ''el número tres''. Tiene varias listas de tres unidades a través de esta breve carta. Consulta <a href="##tres">El número tres en Judas</a> para más información. 

Además ''el número cuatro'' aparece dos veces: cuatro ilustraciones tomadas de la naturaleza en versículos 12-13, y cuatro veces que se menciona versiones de la palabra 'impío' en versículo 15.

<hr>

Hay dos ejemplos de ''paralelismo'' en Judas:

*En v. 6 hay dos cláusulas con paralelismo sinónimo: «No guardaron su dignidad» y «Abandonaron su morada». Son sinóminos porque en el acto de abandonar su morada, los ángeles no guardaron su dignidad.
*En v. 10 hay dos cláusulas con paralelismo antitético: «cuantas cosas no conocen» y «las que por naturaleza conocen».

@@.source Richard J. Bauckham, ''Word Biblical Commentary: Jude, 2 Peter.'' (Waco, TX: Word, 1983)@@

<hr>

A pesar de su brevedad, esta carta menciona a varios ''personajes''. Ve nuestra lista <a href="##personajes">aquí</a>.

<hr>

!!La composición de Judas

<hr>

''El autor'' de esta carta probablemente fue Judas, el medio-hermano de Jesús. Consulta <a href="##aut">La autoría de Judas</a> para más información.

<hr>

''La fecha de la composición'' de Judas probablemente fue después de la composición de 2 Pedro, en las últimas tres o cuatro décadas del primer siglo. En decir esto, el presente autor resiste la presión de muchos eruditos de poner a Judas antes de 2 Pedro, y asignar otro autor a 2 Pedro. Ve <a href="##fecha">La fecha de la composición de Judas</a> para más información.

<hr>

No se puede fijar con precisión ''el lugar de la composición'' de Judas.

<hr>

Ya que la carta de Judas no es muy larga, nadie ha dudado su ''integridad''. Todos están de acuerdo que fue una sola carta.

<hr>

!!Después del libro de Judas

<hr>

La carta de Judas tuvo dificultad en ser aceptada para ''inclusión en el canon'' porque cita a dos autores pseudo-canónicos. Ve <a href="##aceptacion">La aceptación de Judas al canon</a> para más información.

<hr>

El libro de Judas no ha recibido mucha atención por la erudición moderna. Ha sido un libro neglegido. Algunos han tenido una opinión negativa acerca del autor. Han dicho que es un conservador dogmático apegado a la tradición, que se opone sin tolerancia a los que difieren de él.

<hr>

Los ''debates principales'' entre eruditos acerca de Judas son los siguientes:

*¿Judas escribió esta carta, o fue una carta seudónima, o sea escrita en su nombre por otra persona?
*Debido a la similitud entre 2 Pedro y Judas, ¿Cuál de las dos cartas fue escrita primera, e influenció a la otra?
*¿Se refiere v. 6 a Génesis 6.1-4 o no? La mayoría de los eruditos dicen que v. 6 se trata de la interpretación que 1 Enoc da a Génesis 6.1-4, que los hijos de Dios eran ángeles que tuvieron relaciones sexuales con mujeres. Otros dicen que los ángeles no pueden tener relaciones sexuales, e insisten que los hijos de Dios en Gén. 6 fueron príncipes, y que Judas se refiere a una caída de los ángeles antes de los relatos de Genesis 1-3.
*¿La frase "otra carne" en v. 7 se refiere a las relaciones homosexuales, o a las relaciones entre seres humanos y ángeles?
*¿Son dos grupos o tres mencionados en vv. 22-23? Los manuscritos griegos difieren entre sí.

<hr>

Recomendamos los siguientes versículos de Judas para ''usar en el culto'':

|bluealtrows|k
|Judas 1b-2|Apertura del culto|"...a los llamados, santificados en Dios Padre y guardados en Jesucristo: Misericordia, paz y amor os sean multiplicados."|
|Judas 24-25|Doxología|"A aquel que es poderoso para guardaros sin caída y presentaros sin mancha delante de su gloria con gran alegría, 25&nbsp;al único y sabio Dios, nuestro Salvador, sea gloria y majestad, imperio y poder, ahora y por todos los siglos. Amén."|

<hr>

!!Los pasajes de Judas

<hr>

!!!Judas 1-4

<hr>

!!!

<hr>

!!!Judas 22-23

<hr>

!!!Judas 24-25

Versículos 24-25 de Judas son una doxología. En esta doxología, Judas motiva a sus lectores, en peligro de ser seducidos por los hombres impíos. Los motiva con la esperanza escatológica y con los atributos de Dios: 

*Los destinatarios tienen la esperanza de ser presentados gozosamente ante la presencia de Dios como sacrificios aceptables a Dios. Ellos deben mantener esta esperanza en sus mentes mientras luchan contra sus adversarios.
*El Dios que adoran tiene el poder de protegerlos de las tentaciones de los hombres impíos.
*Tanto los hombres impíos como los destinatarios deben reconocer y someterse a la gloria, majestad, poder y autoridad de Dios, y alabar a Dios por estas cualidades.

Consulta los siguientes recursos sobre estos versículos:

*<a href="##XXX">Judas 24-25 apuntes</a>
*<a href="##XXX">Un bosquejo sintáctico para Judas 24-25</a>
<span class="doublelist">

#"Deseaba escribirles de otro tema" (3)
#"Pero sentí la necesidad de exhortarlos a que defiendan la fe cristiana contra personas que han invadido su iglesia" (4)
#"Tres ejemplos antiguos nos muestran que Dios castiga a los desobedientes" (5-7)
#"Los intrusos impíos de nuestro día tienen los mismos pecados que los antiguos - la inmoralidad sexual, la insubordinación, y su menosprecio para los ángeles" (8)
#"Ni siguiera el arcángel Miguel atrevía hablar como ellos hablan" (9-10)
#"Están en los mismos errores de Caín, Balaam y Coré (11)
#//(Más descripción de ellos, 12-13)//
#"Enoc predijo la condenación de ellos" (14-15)
#//(Más descripción de ellos, 16)//
#"Los apóstoles también predijeron que estos impíos vendrían" (17-19)
#"Ustedes en cambio deben fortalecerse en su fe, orar en el Espíritu, y mantenerse en el amor de Dios mientras esperan el día final (20-21)
#"Muestren misericordia a los demás, y rescátalos" (22-23)
#"Dios nos protegerá de caernos. Toda la gloria sea a él" (24-25)

</span>
|bluealtrows|k
|!Paralelo|!1 Juan|!2 Juan|
|El tema de la verdad|1.6, 1.8, 2.4, 2.8, 2.20, 2.21, 3.18, 3.19, 4.6, 5.7|Versículos 1, 2, 3, 4|
|Jesucristo ha venido en carne|"...todo espíritu que confiesa que Jesucristo ha venido en carne, es de Dios;" (1 Juan 4.2)|"Muchos engañadores han salido por el mundo, que no confiesan que Jesucristo ha venido en carne." (2 Juan 7)|
|Tener al Padre y al Hijo|"Todo aquel que niega al Hijo, tampoco tiene al Padre. El que confiesa al Hijo tiene también al Padre." (1 Juan 2.23)|"Cualquiera que se extravía y no persevera en la doctrina de Cristo, no tiene a Dios; el que persevera en la doctrina de Cristo, ese sí tiene al Padre y al Hijo." (2 Juan 9)|
|Engañador, anticristo|"¿Quién es el mentiroso, sino el que niega que Jesús es el Cristo? Este es el anticristo, pues niega al Padre y al Hijo." / "Os he escrito esto sobre los que os engañan." (1 Juan 2.22 / 2.26)|"Muchos engañadores han salido por el mundo, que no confiesan que Jesucristo ha venido en carne. Quien esto hace es el engañador y el anticristo." (2 Juan 7)|
|Permanecer en la doctrina|"...así como la unción misma os enseña todas las cosas, y es verdadera, y no es mentira, según ella os ha enseñado, permaneced en él." (1 Juan 2.27)|"Cualquiera que se extravía y no persevera en la doctrina de Cristo, no tiene a Dios; el que persevera en la doctrina de Cristo, ese sí tiene al Padre y al Hijo." (2 Juan 9)|
|La doctrina debe 'vivir' o 'permanecer' en los lectores|"Pero la unción que vosotros recibisteis de él permanece en vosotros..." (1 Juan 2.27)|"...la verdad que permanece en nosotros y estará para siempre con nosotros..." (2 Juan 2)|
|El mandamiento de amar no es nuevo sino es el que los lectores han oído desde el principio|"Hermanos, no os escribo un mandamiento nuevo, sino el mandamiento antiguo que habéis tenido desde el principio. Este mandamiento antiguo es la palabra que habéis oído desde el principio." / "Este es el mensaje que habéis oído desde el principio: que nos amemos unos a otros." (1 Juan 2.7 / 3.11)|"Y ahora te ruego, señora, no como escribiéndote un nuevo mandamiento, sino el que hemos tenido desde el principio, que nos amemos unos a otros. Y este es el amor: que andemos según sus mandamientos. Este es el mandamiento: que andéis en amor, como vosotros habéis oído desde el principio." (2 Juan 5-6)|
|La comunión cristiana completa el gozo del autor|"...eso os anunciamos, para que también vosotros tengáis comunión con nosotros; y nuestra comunión verdaderamente es con el Padre y con su Hijo Jesucristo. Estas cosas os escribimos para que vuestro gozo sea completo." (1 Juan 1.3-4)|"...espero ir a vosotros y hablar cara a cara, para que nuestro gozo sea completo." (2 Juan 12)|

@@.source Texto bíblico: Reina Valera Revisada (1995) (Miami: Sociedades Biblicas Unidas, 1998).@@
|bluealtrows|k
|!Paralelo|!2 Juan|!3 Juan|
|El autor se refiere a si mismo como 'el anciano'|"El anciano..." (2 Jn 1)|"El anciano..." (3 Jn 1)|
|El tema de la verdad|Versículos 1, 2, 3, 4|Versículos 3, 4, 8, 12|
|Le da gozo al anciano encontrar a otros andando en la verdad|"Mucho me regocijé porque he hallado a algunos de tus hijos andando en la verdad" (2 Jn 4a)|"Mucho me regocijé cuando vinieron los hermanos y dieron testimonio de tu verdad, de cómo andas en la verdad. No tengo yo mayor gozo que oir que mis hijos andan en la verdad." (3 Jn 3-4)|
|Ser hospitalario con otros significa colaborar con ellos|"Si alguno viene a vosotros y no trae esta doctrina, no lo recibáis en casa ni le digáis: «¡Bienvenido!», porque el que le dice: «¡Bienvenido!» participa en sus malas obras." (2 Jn 10–11)|"Nosotros, pues, debemos acoger a tales personas, para que cooperemos con la verdad." (3 Jn 8)|
|Expresiones casi idénticas del deseo del autor de visitar|"Tengo muchas cosas que escribiros, pero no he querido hacerlo por medio de papel y tinta, pues espero ir a vosotros y hablar cara a cara, para que nuestro gozo sea completo."  (2 Jn 12)|"Yo tenía muchas cosas que escribirte, pero no quiero escribírtelas con tinta y pluma, porque espero verte en breve y hablaremos cara a cara." (3 Jn 13–14)|
|Saludos finales de parte de otros|"Los hijos de tu hermana, la elegida, te saludan." (2 Jn 13)|"Los amigos te saludan." (3 Jn 15)|

@@.source Texto bíblico: Reina Valera Revisada (1995) (Miami: Sociedades Biblicas Unidas, 1998).@@
//Fuente desconocida.//

|bluealtrows|k
|!La caída del diablo a la tierra|!La caída del diablo al lago de fuego|
|El conflicto precipitado por la venida del niño con el cetro de hierro (4-5)|El conflicto precipitado por la venida del jinete sobre un caballo blanco con un cetro de hierro (19.11, 15)|
|Residió en el cielo (7)|Residió en la tierra (implicado en v. 1)|
|Batalla con Miguel y sus ángeles (7)|Un ángel agarra al diablo sin una batalla (2)|
|El dragón y sus ángeles derrotados (8)|El dragón atado por 1,000 años (2)|
|El dragón también llamado la serpiente antigua, el diablo o Satanás (9)|El dragón también llamado la serpiente antigua, el diablo o Satanás (2)|
|La misión del dragón es de engañar al mundo (9)|El dragón ya no puede engañar a las naciones (3)|
|El dragón y sus ángeles lanzados a la tierra (9)|El dragón lanzado al abismo (3)|
|Sus acusaciones contra los creyentes ante Dios terminan porque el dragón es lanzado a la tierra (10)|Su engaño a las naciones termina porque el dragón está encerrado en el abismo por 1,000 años (3, 7)|
|Los santos pueden morir, pero triunfan por la sangre del Cordero y por su testimonio (11, 17)|Los santos decapitados por el testimonio de Jesús y la palabra de Dios (4)|
|El tiempo del dragón es corto (12)|El dragón es suelto por un tiempo corto (3)|
|El dragón hace guerra contra los hijos de la mujer (17)|Satanás con las naciones hace guerra contra el campamento de los santos (8-9)|
   // Fuente: Ben Witherington, Revelation. (Cambridge University Press, 2003), página desconocida.//

|bluealtrows|k
|!Jezabel en Apocalipsis 2|!La mujer en Apocalipsis 12|
|Una madre cuyos hijos son amenazados por el Hijo de Dios (2.23)|Una madre cuyos hijos son amenazados por Satanás (12.4)|
|Una alusión a Salmo 2.8 en 2.27|Una alusión a Salmo 2.8 en 12.5|
|El uso de "engañar" πλανᾷ, 2.20)|El uso de "engañar" (πλανῶν, 12.9)|
|Jezabel es agresiva|La mujer es pasiva|
|Conectada a actividad sexual ilícita|Conectada a actividad sexual lícita, apropiada|
!!El Cristiano responde a Dios y a su Cristo

*''Adorar, glorificar a Dios''

**“¡Temed a Dios y dadle gloria, porque la hora de su juicio ha llegado. Adorad a aquel que hizo el cielo y la tierra, el mar y las fuentes de las aguas!” (14.7)
**“¿Quién no te temerá, Señor, y glorificará tu nombre?, pues solo tú eres santo; por lo cual todas las naciones vendrán y te adorarán, porque tus juicios se han manifestado». (15.4)
**“Alabad a nuestro Dios todos sus siervos, y los que lo teméis, así pequeños como grandes.” (19.5)
**Escenas de adoración en caps 4-5, 7.10ff, 11.15ff, cap. 15, 19.1-10
**“¡Adora a Dios!” (19.10, 22.9)
**V.t. 1.6, 11.1, 11.13, 11.18, 16.9, 22.3

*''Amar a Jesús''

**“Pero tengo contra ti que has dejado tu primer amor.” (2.4) v.t. 2.19

*''Responder a la invitación de Dios''

**“si alguno oye mi voz y abre la puerta…” (3.20)
**“Al que tiene sed, le daré gratuitamente de la fuente del agua de vida.” (21.6)
**“El Espíritu y la Esposa dicen: «¡Ven!». El que oye, diga: «¡Ven!». Y el que tiene sed, venga. **El que quiera, tome gratuitamente del agua de la vida.” (22.17)

*''Seguir al Cordero''

**“el Cordero que está en medio del trono los pastoreará y los guiará a fuentes de aguas vivas.” (7.17)
**“Son los que siguen al Cordero por dondequiera que va.” (14.4)

*''Trabajar, servir, hacer “obras”''

**“Yo conozco tus obras” (2.2, 2.19, 3.2, 3.8, 3.15), v.t. 2.26
**“Cada uno juzgado según sus obras (2.23, 20.12-13, 22.12)
**Los creyentes como “siervos de Dios” (7.3, 11.18, 
**“Sí, dice el Espíritu, descansarán de sus trabajos, porque sus obras con ellos siguen…” (14.13)
**“el lino fino significa las acciones justas de los santos” (19.8)
**“el que es justo, practique la justicia todavía” (22.11) 

!!El Cristiano responde a la Palabra de Dios

*''Arrepentirse, despertarse, recordarse, regresar a lo anterior''

**“Pero tengo contra ti que has dejado tu primer amor. 5 Recuerda, por tanto, de dónde has caído, arrepiéntete y haz las primeras obras, pues si no te arrepientes, pronto vendré a ti y quitaré tu candelabro de su lugar.” (2.4-5)
**“Sé vigilante y confirma las otras cosas que están para morir….Acuérdate, pues, de lo que has recibido y oído; guárdalo y arrepiéntete, pues si no velas vendré sobre ti como ladrón y no sabrás a qué hora vendré sobre ti.” (3.2-3)
**“Bienaventurado el que vela” (16.15)
**Las naciones no se arrepintieron (9.20-21, 16.8, 16.11)
**V.t. 2.16, 2.22, 3.19

*''Oir, poner atención''

**“Bienaventurado el que lee y los que oyen las palabras de esta profecía, y guardan las cosas en ella escritas, porque el tiempo está cerca.” (1.3)
**“El que tiene oído, oiga lo que el Espíritu dice a las iglesias” (2.7, 2.11, 2.17, 2.29, 3.6, 3.13, 3.22)
**“si alguno oye mi voz y abre la puerta” (3.20)

*''Guardar las palabras de Dios''

**Guardar los mandamientos (12.17, 14.12)
**Guardar las palabras de este libro (22.7, 22.9, 22.18-19) 

*''Testificar''

**Juan “estaba en la isla llamada Patmos, por causa de la palabra de Dios y del testimonio de Jesucristo.” (1.9)
**“Antipas, mi testigo fiel” (2.13)
**“vi debajo del altar las almas de los que habían muerto por causa de la palabra de Dios y del testimonio que tenían.” (6.9)
**Los dos testigos de capítulo 11
**“Ellos lo han vencido por medio de la sangre del Cordero y de la palabra del testimonio de ellos” (12.11)
**“Y vi las almas de los decapitados por causa del testimonio de Jesús y por la palabra de Dios” (20.4)
**V.t. 12.17, 19.10

!!El Cristiano responde a la persecución

*''Vencer''

**“Al vencedor le daré…” (2.7, 2.11, 2.17, 2.26, 3.5, 3.12, 3.21)
**“Ellos lo han vencido por medio de la sangre del Cordero y de la palabra del testimonio de ellos” (12.11) 
**V.t. 15.2, 21.7

*''Preparación personal: fortalecerse, completar lo que falta, sanarse''

**2.19 (siempre mejorarse), 3.2 (acabar las obras), 3.15-16 (ser frío o caliente), 3.17-18 (comprar oro, vestiduras y colirio de Cristo)

*''Orar''

**Clamaban a gran voz, diciendo: «¿Hasta cuándo Señor, santo y verdadero, vas a tardar en juzgar y vengar nuestra sangre de los que habitan sobre la tierra?». (6.10)
**Otro ángel vino entonces y se paró ante el altar, con un incensario de oro; y se le dio mucho incienso para añadirlo a las oraciones de todos los santos sobre el altar de oro que estaba delante del trono. El humo del incienso con las oraciones de los santos subió de la mano del ángel a la presencia de Dios. (8.3-4)

*''Perseverar''

**“Aquí está la perseverancia de los santos”(13.10, 14.12) 
**1.9, 2.2, 2.3, 2.19, 3.10, 6.11

*''Fe, fidelidad, ser fiel hasta el final''

**“No temas lo que has de padecer. El diablo echará a algunos de vosotros en la cárcel para que seáis probados, y tendréis tribulación por diez días. ¡Sé fiel hasta la muerte y yo te daré la corona de la vida!” (2.10) 
**“Pero retienes mi nombre y no has negado mi fe ni aun en los días en que Antipas, mi testigo fiel, fue muerto entre vosotros” (2.13)
**“Vengo pronto; retén lo que tienes, para que ninguno tome tu corona” (3.11), 
**“que menospreciaron sus vidas hasta la muerte.” (12.11) 
**V.t. 2.19, 2.25, 3.8, 3.10, 13.10, 14.12, 17.14

*''No to temer, no asombrarte''

**Cuando le vi, caí como muerto a sus pies. Y él puso su diestra sobre mí, diciéndome: No temas; yo soy el primero y el último; (1.17)
**“No temas lo que has de padecer. El diablo echará a algunos de vosotros en la cárcel para que seáis probados, y tendréis tribulación por diez días. ¡Sé fiel hasta la muerte y yo te daré la corona de la vida!” (2.10) 
**Vi a la mujer ebria de la sangre de los santos, y de la sangre de los mártires de Jesús; y cuando la vi, quedé asombrado con gran asombro. Y el ángel me dijo: ¿Por qué te asombras? Yo te diré el misterio de la mujer, y de la bestia que la trae, la cual tiene las siete cabezas y los diez cuernos. (17.6-7)

!!El Cristiano responde a la atracción del pecado

*''Aborrecer / no tolerar la falsa enseñanza''

**“Pero tienes esto: que aborreces las obras de los nicolaítas, las cuales yo también aborrezco.” (2.6)
**V.t. 2.2, 2.14-15, 2.20, 2.24

*''Purificarse / ser santo''

**“Pero tienes unas pocas personas en Sardis que no han manchado sus vestiduras y andarán conmigo en vestiduras blancas, porque son dignas.” (3.4)
**“Estos son los que han salido de la gran tribulación; han lavado sus ropas y las han blanqueado en la sangre del Cordero.” (7.14)
**“Estos son los que no se han contaminado con mujeres, pues son vírgenes.” (14.4)
**“el que es santo, santifíquese más todavía “ (22.11)
**“Bienaventurados los que lavan sus ropas” (22.14)
**V.t. 19.7-8

*''Regocijarse sobre la destrucción de Bablionia''

**“Alégrate sobre ella, cielo, y vosotros santos, apóstoles y profetas, porque Dios os ha hecho justicia en ella» (18.20)

*''Salir/huir de Babilonia''

**“Y oí otra voz del cielo, que decía: «¡Salid de ella, pueblo mío, para que no seáis partícipes de sus pecados ni recibáis parte de sus plagas!” (18.4)

*''No adorar a la Bestia ni recibir su marca''

**Y engaña a los moradores de la tierra con las señales que se le ha permitido hacer en presencia de la bestia, mandando a los moradores de la tierra que le hagan imagen a la bestia que tiene la herida de espada, y vivió. (13.14)
**Y el tercer ángel los siguió, diciendo a gran voz: Si alguno adora a la bestia y a su imagen, y recibe la marca en su frente o en su mano (14.9)
**Y vi tronos, y se sentaron sobre ellos los que recibieron facultad de juzgar; y vi las almas de los decapitados por causa del testimonio de Jesús y por la palabra de Dios, los que no habían adorado a la bestia ni a su imagen, y que no recibieron la marca en sus frentes ni en sus manos; y vivieron y reinaron con Cristo mil años. (20.4)
//Las iglesias de Asia Menor enfrentaban una situación de persecución y tentación. Jesucristo quiso que las iglesias respondieran apropiadamente. Los 16 mensajes abajo son las maneras en que Jesucristo motivó a las iglesias a responder con firmeza y valentía.//

*//Reflexiona sobre cada sección. ¿Cómo es esta sección un socorro para Cristianos perseguidos? ¿Cómo actúa esta sección para fortalecer a Cristianos tentados a convertirse a otras religiones más grandes y falsas doctrinas más atractivas?//
*//¿Puedes encontrar pasajes para cada punto e inciso?//

<table class="altgray"><tr><td>

!!!Se requiere esfuerzo para percibir las cosas correctamente

*La necesidad de esta visión / profecía
*La perspectiva celestial no es la misma que la terrenal. Necesitamos ver a nuestro mundo desde una perspectiva celestial.
*Somos parte de una guerra invisible
*Algunas cosas, p. ej., lo que dicen los siete truenos, no es revelado a todos
*La calculación de los números y otros detalles requieren sabiduría

</td></tr><tr><td>

!!!Dios es glorioso

*La gloriosa descripción de su trono – sin describir a Dios mismo
*Las doxologías ascribiéndolo gloria, honra, poder
*Las aclamaciones que es verdadero, justo, santo, etc
*Sus ángeles son gloriosos e impresionantes también
*Dios es Creador y Redentor (4.11, 14.7)
*Toda la creación lo alaba
*Es Alfa y Omega, principio y fin, primero y postrero
*Cielo y tierra “huyen” de él

</td></tr><tr><td>

!!!Las palabras de Dios se cumplirán

*Este libro es una profecía verdadera y confiable
*Jesucristo es el testigo fiel, y este libro es su testimonio
*Aclamaciones acerca del cumplimiento de profecías (p.ej. 17.17)
*Es peligroso añadir o quitar de esta profecía

</td></tr><tr><td>

!!!Dios es soberano

*Dios es tan soberano y su reino es tan seguro que Dios no tiene que levantarse de su trono o actuar. Permanece sentado y tranquilo.
*El cielo le obedece, y aparece como círculos concéntricos alrededor de su trono
*La naturaleza le obedece en su control sobre los sellos, trompetas y copas
*Hasta los enemigos de Dios tienen que recibir su autoridad de él – véase las muchas frases como “le fue dado autoridad” “fue permitido por un tiempo”, etc
*Dios es soberano sobre el tiempo y ha decretado los tiempos para cada cosa. Puede parecer que tarda mucho, y hasta los santos en el cielo preguntan “¿Hasta cuando?”, pero el tiempo del diablo es corto, y el número de los santos tiene que completarse primero
*Tiene un libro de vida desde la creación con los nombres de todos, con su destino final (13.8)

</td></tr><tr><td>

!!!Jesucristo es glorioso

*La gloriosa descripción de él en cap. 1
*Conoce las obras de sus iglesias
*Nadie más en toda la creación es digno de abrir el rollo
*Es digno porque venció a sus enemigos por su muerte
*Es un león, un jinete con caballo blanco
*Es Alfa y Omega, principio y fin, primero y postrero
*Es alabado a nivel de Dios
*Resucitó de la muerte y tiene soberanía sobre ella
*Tiene corona gloriosa
*Es la raíz de David, estrella resplandeciente de la mañana
*Un ejército celestial, vestido de blanco, lo sigue

</td></tr><tr><td>

!!!Dios y Jesucristo reinarán para siempre

*“Los reinos del mundo han venido a ser de nuestro Señor y de su Cristo; y él reinará por los siglos de los siglos.Cristo es Rey de reyes y Señor de señores…. Te damos gracias, Señor Dios Todopoderoso, el que eres y que eras y que has de venir, porque has tomado tu gran poder, y has reinado.” (11.15, 17)
*Reinará para siempre
*Hará todas las cosas nuevas; nuevos cielos y nueva tierra – las cosas viejas serán reemplazados o restaurados
*El mar (el miedoso caos del pecado) ya no existirá
*La ciudad de Dios será inmensa, brillando con la luz de Dios mismo, y su belleza será incomparable
*No habrá necesidad de cerrar las puertas de la ciudad, porque sus enemigos ya no existirán para amenazarla
*Las naciones traerán su gloria a su ciudad, y serán sanadas ahí

</td></tr><tr><td>

!!!Los enemigos de Dios son malos y feos

*Juan queda impresionado con la ramera, pero "el ángel me dijo: ¿Por qué te asombras?” (18.6-7)
*Son dragones, monstruos y prostitutas borrachas
*Engañan a la humanidad, emborrachan a las naciones
*Sus bocas son llenas de blasfemias
*De sus bocas salen espíritus demoníacos que parecen ranas
*Son culpables de la muerte de profetas, apóstoles, y toda muerte
*Son los que destruyen la tierra
*Los enemigos mismos pelean entre sí (matan a Babilonia)

</td></tr><tr><td>

!!!Los enemigos de Dios son débiles imitaciones (parodias)

*Satanás imita a Dios
*La bestia imita a Cristo
*El falso profeta imita a los dos testigos
*La ramera imita la novia
*Babilonia imita a Jerusalén
*La marca de la bestia imita el sello del Cordero
*Los milagros de la bestia y el falso profeta imitan los milagros de Jesucristo, son falsas señales

</td></tr><tr><td>

!!!Los enemigos de Dios son incapaces de detener a Dios

*El dragón ya fue vencido por Miiguel y lanzado del cielo
*El dragón ha sido encarcelado por mil años y no puede engañar a las naciones
*El dragón intentó devorar al niño Cristo y no pudo
*El dragón persigue a la mujer y trata de matarla, y no puede
*El dragón está furioso porque sabe que su tiempo es corto
*“Y se airaron las naciones” (11.18)…es alusión a Salmo 2, donde el Señor se burla de las naciones porque se amotinan planean contra él en vano.
*La bestia, como Faraón, es impotente para detener la oscuridad con que Dios llena su reino (16.10)
*Babilonia es jactante, pero caerá y perderá todo

</td></tr><tr><td>

!!!Los santos no deben seguir a las masas, porque la humanidad es necia

*Es engañada por el dragón, la bestia, y el falso profeta y sus falsas señales
*Es emborrachada por la ramera
*Es rápida para festejar la muerte de los dos testigos
*No se arrepienta a pesar de todas las plagas que vienen sobre ella
*Llorarán y se esconderán en las cuevas y en las montañas a la venida de Jesús

</td></tr><tr><td>

!!!Dios derrotará y juzgará a sus enemigos, y a todos los que siguen a sus enemigos

*Dios derramará su ira sobre el mundo en sellos, trompetas y copas
*Babilonia caerá en una sola noche, y será desierta, abandonada
*Los que participan en los pecados de Babilonia participarán en los castigos que caerán sobre ella
*Los grandes ejércitos que rodean a los santos son consumidos por fuego celestial y sus cadáveres consumidos por las aves
*Las ciudades caen
*Dios tendrá una cosecha de todo el mundo, y aplastará a sus enemigos como un obrero de viña aplasta las uvas en el lagar
*Todos aparecerán delante de él para ser juzgados o vindicados
*Satanás, la bestia, el falso profeta, la muerte y el Hades son lanzados al lago de fuego
*Los pecadores serán excluidos de la ciudad final y lanzados al lago de fuego

</td></tr><tr><td>

!!!Los santos son gloriosos

*Son testigos, olivos y candeleros delante de Dios
*El pueblo de Dios es una hermosa mujer celestial
*Los santos son un reino, son jueces, son sacerdotes
*Los santos son el verdadero Israel
*Son un ejército organizado 
*Son una gran incontable multitud, compuesta de personas de toda nación, tribu y lengua
*Son la novia radiante de Cristo

</td></tr><tr><td>

!!!Los santos son protegidos por Dios

*Los 144.000 reciben su sello
*Los dos testigos son protegidos
*La mujer recibe alas para volar al desierto, donde será nutrida y protegida por 3 años y medio
*La tierra traga el río que sale de la boca del dragón para intentar matar a la mujer
*Las oraciones de los santos son como incienso en su altar, y él responde a sus oraciones

</td></tr><tr><td>

!!!Los santos, como su Señor, vencen a sus enemigos por medio de su perseverancia y martirio

*Jesucristo es león porque fue cordero inmolado
*Al que venciere daré…
*“Estos son los que han salido de la gran tribulación, y han lavado sus ropas, y las han emblanquecido en la sangre del Cordero.” (7.14)
*“Y ellos le han vencido por medio de la sangre del Cordero y de la palabra del testimonio de ellos, y menospreciaron sus vidas hasta la muerte.” (12.11)
*El testimonio y martirio de los testigos, y su resurrección sorprende a sus enemigos
*“Y vi tronos, y se sentaron sobre ellos los que recibieron facultad de juzgar; y vi las almas de los decapitados por causa del testimonio de Jesús y por la palabra de Dios, los que no habían adorado a la bestia ni a su imagen, y que no recibieron la marca en sus frentes ni en sus manos; y vivieron y reinaron con Cristo mil años.” (20.4)

</td></tr><tr><td>

!!!Los santos serán recompensados en el porvenir

*Jesucristo trae su recompensa consigo
*Aunque lamentan ahora, cantarán el “¡Aleluya!” de cap. 19
*Dios vengará su sangre
*Recompensas que Cristo dará al vencedor (caps 2-3)
*Siete bienaventuranzas
*Les da nuevas vestiduras blancas
*Les da un nuevo nombre, y su propio nombre está sobre ellos
*Les da un canto especial que solo ellos saben
*Tienen una invitación especial a una cena de matrimonio, y se visten de blanco para prepararse por ella
*La muerte no tiene poder sobre ellos
*Él estará con ellos para siempre, y ellos verán su cara
*Él quitará toda lágrima, dolor, muerte, maldición, noche, cosa inmunda, etc de ellos
*Tienen el derecho de entrar a la ciudad, comer del árbol de la vida, tomar del río de la vida, 
*Reinarán para siempre

</td></tr><tr><td>

!!!Estas cosas sucederán pronto

*Se llevará a cabo “sin demora”, “muy pronto”
*Cristo vendrá “como ladrón”

</td></tr></table>
: Prólogo (1.1-8)<br><br>
:: Siete iglesias (2.1-4.2)<br><br>
::: Siete sellos (3.1-8.5)<br><br>
:::: Siete trompetas - Ángeles - Dos testigos (8.2-11.19)<br><br>
::::: La mujer, el dragón y el niño (12.1-17)<br><br>
:::: Dos bestias - Ángeles - Siete copas (13.1-16.21)<br><br>
::: La destrucción de Babilonia (16.18-19.10)<br><br>
:: La nueva Jerusalén, la esposa (19.6-22.9)<br><br>
: Epílogo (22.6-21)

<span class="source">Mark S. Wilson, Charts on the Book of Revelation. (Grand Rapids: Kregel 2007), p. 31</span>
!!Comentarios iniciales

<table class="altgray"><tr><td>

Buist M. Fanning menciona algunas ironías graciosas acerca del libro de Hebreos:

<span class="doublelist">

*Se llama la epístola a los Hebreos, pero algunos lo llaman el libro más griego del canon
*Es una carta pero no empieza como carta
*Pretende ser breve, según 13.22, sin embargo ¡es una carta de trece capítulos!
*No da indicaciones de su autor ni el contexto de su redacción. Es parecido a Melquisedec, “sin padre, sin madre, sin genealogía” (7.3) 

</span>

@@.source Buist M. Fanning, “A Classical Reformed View” en Herbert W. Bateman IV, Four Views on the Warning Passages in Hebrews. (Grand Rapids: Kregel, 2007), 173@@

</td></tr></table>

!!Género literario

<table class="altgray"><tr><td>

El género literario de Hebreos es un sermón con unos elementos epistolarios al final.

</td></tr></table>

!!Estructura, lógica e interconexiones

<table class="altgray"><tr><td>

La estructura de Hebreos ha sido un misterio por muchos siglos. Antes, los comentaristas usaban bosquejos temáticos. Ahora con la explosión de la interpretación literaria, los comentaristas han descubierto varias pistas que nos ayudan a ver la estructura claramente. Véase nuestro [[Un bosquejo de Hebreos]] para los resultados.

</td></tr><tr><td>

El libro de Hebreos varias veces alterna entre secciones que exponen doctrina, y secciones que exhortan y advierten a sus lectores. Véase [[Alternación entre exposición y exhortación en Hebreos]].

</td></tr><tr><td>

El libro de Hebreos tiene cinco secciones hortativas (secciones con advertencias y exhortaciones): 2.1-4, 3.7-4.13, 5.11-6.12, 10.19-39, 12.14-29. Estas secciones están organizadas en forma quiástica: la primera y la última sección son similares, y la segunda y la cuarta sección son similares. Véase [[Las advertencias en Hebreos – estructura quiástica]] para más información.

</td></tr></table>

!!Aspectos literarios

<table class="altgray"><tr><td>

El autor de Hebreos fue un genio literario. Hay una gran lista de técnicas retóricas y estilísticas que el autor de Hebreos usa, incluso: ritmo, preguntas retóricas, aliteración, anáfora, antitesis, asonancia, asíndeton, polisíndeton, quiasmo, hendiadys, inclusio, palabras-ganchos, hipérbole, metáfora, vocabulario extenso, etc. - @@.source George H. Guthrie, “Hebrews in Its First-Century Contexts: Recent Research,” en Scot McKnight y Grant R. Osborne, The Face of New Testament Studies. (Grand Rapids: Baker Academic, 2004), 422.@@

</td></tr><tr><td>

De las 4,942 palabras en total en el libro de Hebreos, el escritor utiliza un vocabulario de 1,038 diferentes palabras; de ellas, 169 solo se encuentran en Hebreos en el NT. Es decir, usa ''un vocabulario extenso.'' @@.source William L. Lane, vol. 47A, Word Biblical Commentary : Hebrews 1-8, Word Biblical Commentary (Dallas: Word, Incorporated, 2002), l.@@

</td></tr><tr><td>

Hebreos no comienza con una mención del autor o los destinatarios, y tampoco empieza con un saludo, los tres elementos básicos de la introducción de las cartas del Nuevo Testamento.

</td></tr><tr><td>

Hay por lo menos dos ejemplos de ''inclusio'' en el libro de Hebreos:

*El autor empieza y termina la sección 1.5-14 con la pregunta “¿A cual de los ángeles dijo Dios jamas.…?” (1.5, 1.13)
*El autor empieza y termina la sección 2.5-18 con la frase “No es a los ángeles….” (2.5, 2.16)

</td></tr><tr><td>

El autor de Hebreos tiene la tendencia de concluir una sección anunciando los temas para tratar en la próxima sección, en ''orden inverso''.

*En 2.17, usa los términos “misericordioso” y “fiel”. En 3.1-4.13 habla de la fidelidad de Jesús, y en 4.14-5.10 habla de su misericordia.
*En 5.9-10, describe a Jesús como la fuente de eterna salvación y como un sacerdote en la línea de Melquisedec. En 7.1-28 vemos su relación con Melquisedec, y en 8.1-10.18 vemos que es la fuente de la salvación.
*En 10.36-39, habla de paciencia y fe. Cap. 11 se trata de la fe, mientras cap. 12 se trata de la paciencia en las tribulaciones.

</td></tr></table>

!!Hebreos en su contexto del canon bíblico

<table class="altgray"><tr><td>

Lane dice que en el libro de Hebreos hay 31 citas explícitas del AT y 4 citas implícitas (35 en total). También hay por lo menos 39 alusiones, 19 ocasiones cuando Hebreos resume material del AT, y 13 ocasiones más cuando Hebreos menciona un nombre o un tema del AT sin especificar un contexto en el AT. Para ver todas las citas y alusiones en el libro de Hebreos, véase [[Citas al Antiguo Testamento en Hebreos]], [[Alusiones al Antiguo Testamento en Hebreos]], y [[Citas y alusiones a los libros apócrifos o deuterocanónicos en Hebreos]].

</td></tr><tr><td>

De las 35 citas al Antiguo Testamento en Hebreos, 20 son asignados a Dios (1:5a, 5b, 6, 7, 8–9, 10–12, 13; 4:4; 5:5, 6; 6:14; 7:17, 21; 8:5, 8–12; 10:30a, 30b, 37–38; 12:26; 13:5), cuatro a Jesús (2:12, 13a, 13b; 10:5–7), y cinco al Espíritu Santo (3:7b–11; presumably 4:3, 5, 7; 10:16–17). @@.source Fuente: Lane.@@

</td></tr><tr><td>

El autor del libro de Hebreos usa sus citas y alusiones al Antiguo Testamento en una rica variedad de maneras. Véase [[El uso del Antiguo Testamento en Hebreos]].

</td></tr><tr><td>

Muchos creían que Pablo era el autor de Hebreos porque vieron algunos paralelos entre el libro de Hebreos y las cartas de Pablo. Véase [[Paralelos entre Hebreos y Pablo]] para los paralelos.

</td></tr></table>

!!El autor de Hebreos

<table class="altgray"><tr><td>

El libro de Hebreos es anónimo, y los comentaristas han propuesto a varios Cristianos del primer siglo como el autor. Lo que parece seguro es que el apóstol Pablo no fue el autor de esta carta. Vease [[Candidatos para el autor de Hebreos]] y [[La propuesta de Pablo como autor de Hebreos]].

</td></tr><tr><td>

El libro de Hebreos no da mucha información acerca de su autor. Sabemos que Timoteo era uno de sus colegas (13.23), y que el autor deseaba visitar a los destinatarios (13.18-19).

</td></tr></table>

!!La situación detrás de Hebreos

<table class="altgray"><tr><td>

La situación de los destinatarios de Hebreos se puede resumir con este gráfico: <img src="http://www.giffmex.org/images/hebreossituacion.gif"> Véase [[La situación de los destinatarios de Hebreos]] para ver los versículos y detalles.

</td></tr><tr><td>

Los destinatarios de Hebreos fueron de la segunda generación de Cristianos. Recibieron el evangelio de parte de personas que no fueron testigos oculares (2.3-4). Los líderes que fundaron la iglesia ya habían fallecido (13.7).

</td></tr><tr><td>

En Hebreos 13.24 el autor dice que "''los de Italia'' os saludan.” No estamos seguros si era el autor que vivía en Roma y pasa los saludos de la iglesia de Roma a los destinatarios, o si los destinatarios vivían en Roma, y el autor pasa los saludos de los Italianos que residen con él en otro lugar.

</td></tr><tr><td>

Los destinatarios del libro de Hebreos tenían una buena reputación de trabajo, amor y servicio (Hebreos 6.9-10).

</td></tr></table>

!!La transmisión de su texto griego

<table class="altgray"><tr><td>

77.2% del texto de Hebreos es libre de variaciones (234 de sus 303 versículos), y en general es un texto bien preservado. Textos difíciles incluyen 1.8, 11.17, 11.37, 12.3, y 12.7 - @@.source Fuentes: Lane; Carson, Moo, Morris, 404.@@

</td></tr><tr><td>

Algunos eruditos dudan que Hebreos 13 fue parte de la carta original. Véase [[La integridad de Hebreos 13]] para los pros y contra

</td></tr></table>

!!La historia de su interpretación

<table class="altgray"><tr><td>

[[La aceptación de Hebreos al canon]]

</td></tr><tr><td>

Muchos Cristianos Protestantes o evangélicos han usado el libro de Hebreos para refutar ciertas doctrinas de la Iglesia Católica Romana. [[Hebreos y la Iglesia Católica Romana]]

</td></tr></table>
''La ambición''

*A Diótrefes le gustó ser el primero entre los hermanos de la iglesia. (9)

''La amistad''

*El anciano usa "amigos" en los saludos finales. (15b)

''El amor''

*El anciano llama a Gayo "el amado" cuatro veces en 3 Juan, en versículos 1, 2, 5, y 11.
*El anciano ama a Gayo en la verdad (1).
*Los hermanos dieron informe sobre el amor de Gayo hacia ellos, mostrado en su hospitalidad. (6)

''La calumnia''

*Diótrefes habló mal del anciano en la iglesia (10)

''Dios''

*Gayo debe proveer por el viaje de los misioneros de una manera que honra a Dios. (6)
*Los misioneros salieron a su misión por amor al "Nombre." (7)
*Los que hacen lo bueno son de Dios, y los que hacen lo malo no han visto a Dios. (11)

''La disciplina eclesiástica''

*El anciano llamará la atención de la iglesia a las malas obras de Diótrefes (10)
*Diótrefes expulsó de la iglesia a los que quisieron recibir a los hermanos. (10)

''La fidelidad''

*Gayo había sido fiel a la verdad (3).
*En ayudar a los hermanos, Gayo se había conducido fielmente. (5)

''El gozo''

*El anciano se regocija por la fidelidad de Gayo, y no tiene mayor gozo que escuchar que sus discípulos caminan en la verdad. (3-4)

''La hospitalidad''

*En vv. 5-8 el anciano felicita a Gayo por la hospitalidad que brindó a los hermanos misioneros, y le pide que siga haciéndolo.

''La iglesia como familia''

*El anciano refiere a otros Cristianos como hermanos (3).
*El anciano refiere a Gayo y a otros como sus hijos (4).

''La imitación''

*Gayo debe imitar lo bueno, y no lo malo. (11)

''Las misiones''

 *Gayo apoyó con su hospitalidad a los misioneros que salieron por el amor a Dios sin la ayuda de los paganos. Y cuando los Cristianos ayudan a los misioneros, están colaborando a favor de la verdad. (5-8)

''La oración''

*El anciano ora en v. 2 por la salud y la prosperidad de Gayo.

''La paz''

*El anciano desea paz para Gayo en su bendición de paz. (15a)

''La prosperidad''

*El anciano sabe que el alma de Gayo prospera, y en su saludo desea que Gayo también prospera en todo lo demás (2)

''La salud''

*En su saludo el anciano desea que Gayo tenga buena salud (2).

''El testimonio, testificar''

*Todos dan testimonio de Demetrio, la verdad da testimonio de él, y el anciano lo hace también. (12)

''La verdad''

*El anciano ama a Gayo "en la verdad" (1).
*Versículos 3 y 4 enfatizan la importancia de "caminar en la verdad."
*Ayudar a los misioneros es colaborar a favor de la verdad. (8)
*La verdad da testimonio bueno a Demetrio. (12)

''La vida cristiana''

*La vida cristiana se describe con la figura de "caminar en la verdad" (3, 4).
<table class="altgray"><tr><td>

    En cuanto a la fecha de composición de Apocalipsis, los eruditos por lo general han favorecido fechas después de la muerte de Nerón (68-69 D.C.) o fechas en el tiempo de Domiciano (quien reinó entre 81-96 D.C.). Mi propia teoría es que Juan escribió Apocalipsis durante el reinado de Vespasiano (69-79 D.C.), probablemente en los últimos años de su reinado). Lo que sigue es una lista de mis argumentos.

</td></tr><tr><td>

        Juan y sus lectores ya experimentaron persecución, pero Juan profetiza que una gran persecución venía en camino. Yo creo que esta persecución es la que instigó Domiciano, pero para Juan es algo futuro. No ha sucedido todavía. Apocalipsis es profecía predictiva antes del evento. Así que tendría ser antes del reino de Domiciano, o a más tardar en los primeros años de su reino. Si usamos una fecha antes de una persecución domiciana, entonces llega a ser irrelevante debatir sobre Domiciano mismo. Puede ser o no que Domiciano exigía culto a si mismo como dominus et deus. Puede ser o no que la persecución domiciana era intensa, extensa o ambos. Pero esto no afecta la fecha o la interpretación de Apocalipsis, porque Juan escribe no para describir o responder a la persecución sino para anticiparla.

</td></tr><tr><td>

        Si colocamos la fecha de Apocalipsis hacia el final del reinado de Vespasiano, esto permite unos años para el desarrollo del mito de Nerón redivivus después de la muerte de Nerón.

</td></tr><tr><td>

        Si colocamos la fecha de Apocalipsis hacia el final del reinado de Vespasiano, esto permite hasta 19 años para que la ciudad de Laodicea recupere del temblor que destruyó la ciudad en 60 D.C. Los Cristianos en Laodicea habrían tenido suficiente tiempo para llegar a ser prósperos y apáticos como Apocalipsis 3 los describe.

</td></tr><tr><td>

        Esta fecha también permite el desarrollo de otras cosas que vemos en Apocalipsis: el declive espiritual en algunas de las siete iglesias, y el surgimiento de los grupos heréticos mencionados en el libro.

</td></tr><tr><td>

        Es cierto que se usa 'Babilonia' para hablar de Roma en 1 Pedro, con fecha antes de 70 D.C. Pero si colocamos la composición de Apocalipsis después de 70 D.C., la comparación de Roma como una nueva Babilonia tendría más sentido, porque Roma ya habrá destruido la ciudad de Jerusalén, como los Babilonios habían hecho siglos antes.

</td></tr><tr><td>

        No pienso que las referencias a Jerusalén en Apocalipsis 11 requieren que la ciudad todavía exista. Y yo veo tres problemas con la idea de pensar que Apocalipsis fue escrito antes de la destrucción de Jerusalén en 70 D.C:

* Tenemos que limitarnos a las fechas 68-69, entre la muerte de Nerón y la destrucción del templo. Esto no da mucho tiempo para permitir el desarrollo del mito de Nerón redivivus.
* Tenemos que decir que Juan se equivocó cuando dice en Apocalipsis 11 que Jerusalén fue destruida por un temblor.
* Tenemos que identificar los dos testigos de Apocalipsis 11 con individuos o iglesias en Jerusalén durante los años 68-69 D.C.

</td></tr><tr><td>

        Los reyes en Apocalipsis 17.10-11 se interpretan mejor si ponemos la composición de Apocalipsis durante el reinado de Vespasiano. Si contamos desde Augusto, emperador cuando Cristo nació, y si no incluimos a los tres emperadores con reinados muy breves durante la guerra civil, llegamos a la siguiente calculación:

* Los cinco que han caído: Augusto, Tiberio, Calígula, Claudio y Nerón
* El que es: Vespasiano
* El que aún no viene, que reinará poco tiempo: Tito, que solo reinó tres años
* El octavo rey, que irá a la destrucción y es la bestia: Domiciano.

</td></tr></table>
2 Pedro es una carta escrita por el apóstol Pedro antes de su muerte (64 d.c.). Pedro sabe que pronto morirá, y quiere preparar a los destinatarios para los falsos maestros que pronto vendrán. Estos maestros rechazan la autoridad (incluso la de Pedro y los profetas, 1.16-21), y siguen sus deseos para el sexo y el dinero.

Pedro describe y denuncia a estos maestros en cap. 2, y llama a sus lectores a que se fortalezcan para evitar el error de ellos (3.17-18) y escapar la corrupción en el mundo debido a los deseos (1.3-4). Los llama a que crezcan en las virtudes (1.5-11), que se acuerden de lo que saben (1.12-15, 3.1-2), y que vivan de una manera que refleja lo que ellos creen acerca de la destrucción del mundo y la nueva creación (3.8-14).

La erudición moderna ha declarado que esta carta no fue escrita por Pedro. Sin embargo, a pesar de que la gran mayoría de eruditos fuertemente rechazan su autenticidad, hay respuestas a las objeciones y argumentos a favor de su origen petrino.
<table class="altgray"><tr><td>

    El libro de Judas es una carta escrita por el medio-hermano de Jesús en la segunda mitad del primer siglo, a una iglesia específica que ahora desconocemos. En esta iglesia habían entrado falsos maestros, carismáticos itinerantes, quienes Judas describe y denuncia severamente en vv. 4-16. Judas dice que ellos no reconocían ninguna autoridad sobre ellos, cometían la inmoralidad sexual, blasfemaban a los ángeles, y alababan a las personas para aprovecharse financieramente de ellos.

</td></tr><tr><td>

    Judas postergó la carta que iba a escribirles, y escribió esta carta para exhortar a sus lectores a defender su fe (3), recordar las advertencias de los apóstoles (17-19), cuidar su propia integridad espiritual (20-21), y rescatar a los que podían de su error (22-23).

</td></tr><tr><td>

    La carta es una fuerte denuncia de estos falsos maestros, al estilo de los profetas del AT. Judas alude a varios ejemplos y enseñanzas del AT, pero su única cita formal es del libro seudocanónico de Enoc. Este hecho brevemente complicó su aceptación al canon del NT.

</td></tr><tr><td>

    La carta de Judas comparte mucho material con 2 Pedro 2. Muchos eruditos dicen que Judas escribió primero, y que el autor de 2 Pedro usó Judas como fuente, pero esta teoría rechaza a Pedro como el autor de 2 Pedro. Es mejor creer que Pedro escribió 2 Pedro antes de su muerte, y que Judas usó 2 Pedro como fuente.

</td></tr></table>
|bluealtrows|k
|!#|!Sellos|!Trompetas|!Copas|
|1|Caballo blanco: conquista|Granizo y fuego; 1/3 de las plantas quemadas|Heridas|
|2|Caballo rojo: guerra|Montaña de fuego; 1/3 de las criaturas del mar mueren|El mar se convierte en sangre|
|3|Caballo negro: hambre|La estrella ajenjo, 1/3 del agua dulce es envenenada|Agua dulce se convierte en sangre|
|4|Caballo pálido: la muerte|Oscuridad de 1/3 del cielo|El sol quema|
|5|Los mártires asegurados|Langostas del abismo|Oscuridad|
|6|Terremoto, señales en el cielo|Cuatro ángeles matan a 1/3 de la población|El Río Eufrates se seca|
|7|Media hora de silencio|Proclamación de victoria|Terremoto y granizo|

@@.source Fuente: H. Wayne House, Chronological and Background Charts of the New Testament. (Grand Rapids: Zondervan) 146-147@@
!!!1.1-11:
>''1.3-4:'' Exposición: el poder y las promesas de Dios nos dan todo lo que necesitamos para escapar al mundo y disfrutar la vida piadosa.
>''1.5-11:'' Aplicación de la exposición
>>''1.5-7:'' Exhortación: Construyan virtud sobre virtud
>>''1.8:'' Razón positiva: Hacerlo resulta en que su conocimiento de Cristo no sea ineficaz
>>''1.9:'' Razón negativa: No hacerlo resulta en la ceguera espiritual y el olvido.
>>''1.10ª:'' Exhortación: Asegúrense de su vocación
>>''1.10b-11:'' Dos razónes: 
>>>''1.10b:'' Razón #1: No caerán 
>>>''1.11:'' Razón #2: Recibirán la bienvenida al reino de Cristo
!!!1.12-21: 
>''1.12-15:'' Propósito de sus cartas: Pedro considera importante recordarles de la verdad, porque pronto va a morir.
>''1.16-18:'' Justificación de la autoridad de Pedro: fue testigo de la majestad de Jesucristo en su transfiguración.
>''1.19-21:'' Exhortación: La certeza de palabra de los profetas
>>''1.19:'' La exhortación propia: Presten atención a la palabra de los profetas
>>''1.20-21:'' Razón: Sus palabras no son de ellos mismos sino de Dios.
!!!2.1-22: Advertencia contra los falsos profetas
>''2.1-3a:'' Una profecía acerca de falsos apóstoles y la actividad engañosa de ellos
>''2.3b-10ª:'' Evidencia del AT que los falsos profetas serán condenados y los lectores rescatados
>>''2.3b:'' Declaración que los falsos profetas serán condenados
>>''2.4:'' Evidencia #1: Dios no perdonó a los ángeles de la antigüedad
>>indent{2.5: Evidencia #2: Dios no perdonó a los contemporáneos de Noé, pero rescató a Noé y su familia
>>''2.6-8:'' Evidencia #3: Dios condenó a Sodoma y Gomorra, pero rescató a Lot
>>''2.9-10ª:'' Conclusión: Dios sabe rescatar a los piadosos y juzgar a los impíos
>''2.10b-22:'' Descripción de los falsos profetas
>>''2.10b-12ª:'' Contraste: la blasfemia arrogante de ellos y la humildad de los ángeles
>>''2.12b:'' Comparación de los profetas falsos con los animales salvajes
>>''2.13-14:'' Descripción: Su búsqueda vergonzosa del placer
>>''2.15-16:'' Comparación: Son como Balaam
>>''2.17-19:'' Descripción: Hacen grandes promesas de libertad, pero sus palabras son vacías y ellos mismos son esclavos
>>''2.20-22:'' Denuncia: su destino es peor que el destino que habría tenido si nunca hubiera escuchado de Cristo
!!!3.1-18: Conclusión de la carta
>''3.1-2:'' Propósito de las cartas de Pedro: recordar a sus lectores del testimonio de los profetas y apóstoles, y estimular su reflexión
>''3.3-13:'' Defensa de la doctrina de la segunda venida de Cristo
>>''3.3-4:'' Objeción: Burladores dirán que la ausencia del juicio es prueba de que Jesús no vendrá
>>''3.5-7:'' Respuesta #1: Dios destruirá al mundo con fuego como destruyó al mundo con agua en el tiempo de Noé
>>''3.8-10:'' Respuesta #2: Dios tiene otro concepto del tiempo. Ha demorado en venir por causa de su paciencia; pero su venida será repentina
>>''3.11-12ª:'' Aplicación: Deben vivir vidas santas y esperar ese día
>>''3.12b-13:'' Clarificación: El día del Señor será la destrucción de la creación, pero también será la llegada de una nueva creación. Esta última es la parte que esperamos.
>''3.14-18ª:'' Exhortaciones finales / aplicación de 3.3-13
>>''3.14-15a:'' La exhortación comienza
>>''3.15b-16:'' Paréntesis: Pablo dice lo mismo
>>''3.17-18ª:'' La exhortación concluye
>''3.18b:'' Doxología
!!!1.3-12: La herencia segura que nos espera
>1.3ª: Doxología
>1.3b-5: Afirmación: Esperamos una salvación segura
>1.6-7: Afirmación: Sus pruebas refinan su fe
>1.8-9: Afirmación: Ustedes creen y aman a un Dios que no ven, y tienen gozo
>1.10-12: Afirmación: los profetas sirvieron a ustedes.
!!!1.13-2.3: Acciones que resultan de la doctrina cristiana
>1.13: Exhortación: Preparen sus mentes y esperen la venida del Señor
>1.14-16: Exhortación: Vivan en santidad
>>1.14-15: Exhortación propia
>>1.16: Cita del AT de apoyo
>1.17-21: Exhortación: Vivan en temor santo
>>1.17ª: Razón: Tu Padre es un juez imparcial
>>1.17b: Exhortación propia
>>1.18-21: Razón: Han sido redimidos por la sangre preciosa de Cristo
>1.22b-25: Exhortación: Vivan en amor
>>1.22ª: Razón: Sus almas han sido purificados
>>1.22b: Exhortación propia
>>1.23-25: Razón: Han sido regenerados por la palabra de Dios
>2.1-3: Exhortación: Cambien de apetito
>>2.1: Exhortación: Eliminen la maldad
>>2.2ª: Exhortación: Tengan sed para la leche espiritual
>>2.2b-3: Razón: Han probado la bondad del Señor
!!!2.4-10: La iglesia, piedra escogida por Dios
>2.4-8: Afirmación: La iglesia es la formación de un sacerdocio
>>2.4-5: Afirmación propia
>>2.6-8: Cita del AT de apoyo
>2.9ª: Afirmación: La identidad teológica de la iglesia: el nuevo Israel
>2.9b: El propósito de la iglesia: evangelismo
>2.10: Afirmación: la iglesia es la formación de un nuevo pueblo

!!!2.11-3.12: Código de Hogar: Exhortaciones a varios miembros del hogar
>2.11-12: Exhortación a un estilo de vida evangelístico
>2.13-17: Exhortaciones a los ciudadanos y libres
>2.18-25: Exhortaciones a los esclavos
>3.1-6: Exhortaciones a las esposas
>3.7: Exhortaciones a los maridos
>3.8: Exhortación general al amor
>3.9-12: Exhortación general a bendecir a los que los maldicen
>>3.9a: Exhortación propia
>>3.9b: Motivo: Si lo hacen, recibirán una bendición
>>3.10-12: Cita del AT de apoyo
!!!3.13-17: Respuestas a la persecución
>3.13: Pregunta: ¿Quién te lastimará por hacer el bien?
>3.14ª: Afirmación: Pero los que son maltratados así son benditos.
>3.14b: Cita del AT de apoyo
>3.15-16: Exhortación: Estén listos para defender su esperanza
>>3.15: Exhortación propia
>>3.16: Razón: Para silenciar a los acusadores
>3.17: Afirmación: Es mejor sufrir por Cristo que por ser malhechor
!!!3.18-4.6: Tenemos que morir al pecado con Cristo
>3.18a: Afirmación: Cristo murió para llevarnos a Dios
>3.18b: Afirmación: Aunque Cristo murió, el Espíritu le hizo vivir nuevamente
>3.19-20a: Afirmación: En el Espíritu, Cristo predicó a los espíritus encarcelados que desobedecieron en el tiempo de Noé
>3.20b: Afirmación: 8 personas fueron salvas por atravesar el agua en el arca
>3.21-22: Afirmación: Asimismo, las aguas del bautismo les salvan a ustedes por medio de la resurrección de Cristo, exaltado sobre los poderes espirituales
>4.1ª: Aplicación / exhortación: Estén dispuestos a sufrir como Cristo
>4.1b-2: Razón: Los que han sufrido ya no viven para el pecado
>4.3: Amonestación: Ustedes ya han pasado suficiente tiempo en el pecado
>4.4-5: Afirmación: Los paganos no les entienden, pero tendrán que rendir cuentas al Dios que juzga a los vivos y a los muertos
>4.6: Explicación de la idea en v. 5 que Dios juzgará a 'los muertos' 
!!!4.7-11: La vida apropiada en vista del fin del mundo
>4.7a: Afirmación: El fin se acerca
>4.7b-c: Exhortación a la sobriedad
>>4.7b: Exhortación propia
>>4.7c: Motivo: para que puedan orar
>4.8a-b: Exhortación al amor mútuo
>>4.8a: Exhortación propia
>>4.8b: Motivo: porque el amor cubre los pecados
>4.9: Exhortación a la hospitalidad
>4.10-11c: Exhortación al uso fiel de la gracia / los dones
>>4.10: Exhortación propia
>>4.11a: primer ejemplo: los que hablan
>>4.11b: segundo ejemplo: los que sirven
>>4.11c: Motivo: para que Dios sea alabado
>4.11d: Doxología
!!!4.12-19: La respuesta apropiada al sufrimiento y el juicio que se acerca
>4.12-13: Exhortación: No deben ser sorprendidos por las pruebas
>>4.12-13a: Exhortación propia: No se sorprendan por las pruebas sino regocíjense
>>4.13b: Motivo: porque van a participar en la gloria venidera
>4.14-18: Promesa condicional: los que son insultados son bienaventurados
>>4.14a: Promesa propia: Considérense benditos si son insultados
>>4.14b: Motivo: porque el Espíritu está sobre ustedes
>>(4.15-16: Paréntesis: deben sufrir por ser Cristianos, no por ser criminales)
>>4.17-18: Motivo: el juicio se acerca
>4.19: Exhortación final: los que sufren deben encomendarse a Dios y seguir haciendo el bien
!!!5.1-11: Exhortaciones finales
>5.1-4: Exhortación a los ancianos: apacenten la grey
>5.5a: Exhortación a los jóvenes: sométanse a sus ancianos
>5.5b-10: Exhortaciones a todos
>>5.5b: Exhortación a la humildad
>>5.5c: Motivo: Promesa del AT
>>5.6a: Repetición de la exhortación a la humildad
>>5.6b: Razón: para que Dios los apoye
>>5.7a: Exhortación a que dependan de la gracia
>>5.7b: Motivo: porque Dios se preocupa por ellos
>>5.8a: Exhortación al dominio propio
>>5.8b: Motivo: porque el diablo busca devorarlos
>>5.9a: Exhortación de resistir al diablo
>>5.9b: Motivo: porque otros creyentes están enfrentando la misma oposición
>>5.10: Promesa: Después de los sufrimientos Dios les restaurará y fortalecerá
>5.11: Doxología
!!!5.12-14: Conclusión de la carta
>5.12: Recomendación de Silvano y la exhortación de obedecer la carta
>5.13-14a: Saludos finales
>5.14b: Bendición de paz

@@.source Fuente: estudio personal del autor, comparando los resultados después con bosquejos de varios comentarios.@@
Aune (53) dice que la palabra Ἰδοὺ tiene dos significados en Apocalipsis:

*Cuando ocurre en discurso, significa 'ciertamente.' (1.7, 1.18; 2.10, 2.22; 3.8, 3.9, 3.20; 5.5; 9.12; 11.14; 21.3, 21.5)
*Cuando ocurre en narrativa, significa, 'mira, oye, presta atención' (4.1, 4.2; 5.6; 6.2, 6.5, 6.8, 6.12; 7.9; 12.3; 14.1, 14.14; 15.5; 19.11)

Aune observa en particular estos cuatro textos paralelos:

|bluealtrows|k
|3.11|[ἰδοὺ] ἔρχομαι ταχύ·|Ciertamente vengo pronto|
|16.15|Ἰδοὺ ἔρχομαι ὡς κλέπης·|Ciertamente vengo como ladrón|
|22.7|καὶ ἰδοὺ ἔρχομαι ταχύ|Y ciertamente vengo pronto|
|22.12|Ἰδοὺ ἔρχομαι ταχύ|Ciertamente vengo pronto|