# HG changeset patch # User Kaito Tokumori # Date 1389630702 -32400 # Node ID 845ff8ff4fc95a893eec13af17bea5c871a7e20f 1st diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/2013_12_20.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/2013_12_20.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,46 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.5上での実装

+


Kaito Tokumori
December 20, 2013

+
+
+

研究目的

+

 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。

+

本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。

+
+ +
+

今回したこと

+
    +
  • __returnの実装
  • +
+
+ +
+

__returnの実装

+
    +
  • code segmentの引数に__returnが存在する場合、環境付き継続のための__CbC_return変数を自動生成する。
  • +
  • return1(外に宣言してる戻ってくる用のcode segment)のアドレスの代入分も生成。
  • +
+
+ +
+

次回課題

+
    +
  • __environmentも同様に処理する
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/CbC_example.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/CbC_example.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,450 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-12 07:49:05 +0000 + Creator + test + DisplayScale + 1 0/72 in = 1 0/72 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{216, 81}, {274, 51}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 9 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 __code code_segment_name()\ + - Declaration of the code segment.\ + - Code segment do not have a return value.} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{36, 90}, {171, 198}} + Class + ShapedGraphic + ID + 8 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + + + + Bounds + {{216, 225}, {299, 85}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 12 + + ID + 7 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 goto code_segment_name();\ + - Goto next code segment.\ + - We cannot return the previous code segment.\ + - When code segment goto next code segment,\ + they get rid of the previous environment.} + VerticalPad + 0 + + Wrap + NO + + + Class + LineGraphic + ID + 6 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {189, 148} + {243, 150} + {243, 211} + {189, 211} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{54, 92}, {143, 192}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 4 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 AndaleMono;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 \ +__code cs1()\{\ + /* something */\ + goto cs2();\ + // unreachable\ +\}\ +\ +__code cs2()\{\ + /* something */\ + goto cs3();\ +\}\ +} + VerticalPad + 0 + + Wrap + NO + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-12 08:08:29 +0000 + Modifier + test + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{291, 0}, {693, 778}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{0, 0}, {558, 639}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/CbC_example.png Binary file 2013/2013_12_20/CbC_example.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/LLVM_clang.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/LLVM_clang.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,460 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-10 06:02:50 +0000 + Creator + test + DisplayScale + 1 0/72 in = 1 0/72 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{351, 54}, {126, 27}} + Class + ShapedGraphic + ID + 15 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 LLVM} + + + + Bounds + {{72, 54}, {126, 27}} + Class + ShapedGraphic + ID + 14 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 clang} + + + + Bounds + {{189, 23}, {171, 27}} + Class + ShapedGraphic + ID + 11 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 clang auaua.c/cpp/m} + + + + Bounds + {{432, 126}, {99, 63}} + Class + ShapedGraphic + ID + 8 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 Machine code} + + + + Bounds + {{351, 135}, {54, 45}} + Class + ShapedGraphic + ID + 7 + Shape + AdjustableArrow + ShapeData + + ratio + 0.60000002384185791 + width + 18 + + + + Bounds + {{225, 126}, {99, 63}} + Class + ShapedGraphic + ID + 6 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 LLVM IR} + + + + Bounds + {{144, 135}, {54, 45}} + Class + ShapedGraphic + ID + 4 + Shape + AdjustableArrow + ShapeData + + ratio + 0.60000002384185791 + width + 18 + + + + Bounds + {{18, 126}, {99, 63}} + Class + ShapedGraphic + ID + 3 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 C/C++/Objective-C} + + + + Bounds + {{9, 63}, {252, 189}} + Class + ShapedGraphic + ID + 12 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + Bounds + {{288, 63}, {252, 189}} + Class + ShapedGraphic + ID + 13 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + Bounds + {{0, 36}, {549, 243}} + Class + ShapedGraphic + ID + 9 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-10 06:13:29 +0000 + Modifier + test + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{203, -119}, {843, 778}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-75, 0}, {708, 639}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/LLVM_clang.png Binary file 2013/2013_12_20/LLVM_clang.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/LLVM_clang_CbC.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/LLVM_clang_CbC.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,461 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-10 06:02:50 +0000 + Creator + test + DisplayScale + 1 0/72 in = 1.0000 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{351, 54}, {126, 27}} + Class + ShapedGraphic + ID + 15 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 LLVM} + + + + Bounds + {{72, 54}, {126, 27}} + Class + ShapedGraphic + ID + 14 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 clang} + + + + Bounds + {{189, 23}, {171, 27}} + Class + ShapedGraphic + ID + 11 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 clang auaua.c/cpp/m} + + + + Bounds + {{432, 126}, {99, 63}} + Class + ShapedGraphic + ID + 8 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 Machine code} + + + + Bounds + {{351, 135}, {54, 45}} + Class + ShapedGraphic + ID + 7 + Shape + AdjustableArrow + ShapeData + + ratio + 0.60000002384185791 + width + 18 + + + + Bounds + {{225, 126}, {99, 63}} + Class + ShapedGraphic + ID + 6 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 LLVM IR} + + + + Bounds + {{144, 135}, {54, 45}} + Class + ShapedGraphic + ID + 4 + Shape + AdjustableArrow + ShapeData + + ratio + 0.60000002384185791 + width + 18 + + + + Bounds + {{18, 126}, {99, 63}} + Class + ShapedGraphic + ID + 3 + Shape + Rectangle + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;\red255\green0\blue12;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 C/C++/Objective-C/\ +\cf2 CbC} + + + + Bounds + {{9, 63}, {252, 189}} + Class + ShapedGraphic + ID + 12 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + Bounds + {{288, 63}, {252, 189}} + Class + ShapedGraphic + ID + 13 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + Bounds + {{0, 36}, {549, 243}} + Class + ShapedGraphic + ID + 9 + Shape + Rectangle + Style + + stroke + + CornerRadius + 9 + + + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-12 07:35:28 +0000 + Modifier + test + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{203, 0}, {843, 778}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-75, 0}, {708, 639}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/LLVM_clang_CbC.png Binary file 2013/2013_12_20/LLVM_clang_CbC.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuationWithEnv.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/continuationWithEnv.c Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,39 @@ +__code code1(int n,__code(*exit___code)(int,void *),void *exit_env){ + /* do something */ + goto exit___code(n,exit_env); +} + +/* these are created automatically +__code return1 (int n,void* env){ + *(int*)((struct __CbC_env *)(env))->ret_p = n; + longjmp((((struct __CbC_env *)env)->env),1); +} +*/ + +int main1 (){ + __return; // -> __code (*___return)(); + __environment; // -> struct __CbC_env ___environment; + /* these are emited automatically + int i_buf[128]; + int retval; + ___environment.ret_p = &retval; + ___environment.env = i_buf; + printf("main1 : main1 entry\n"); + if (setjmp(___environment.env)){ + printf("main1 : main1 return\n"); + return *((int *)___environment.ret_p); + } + __CbC_return = return1; + */ + + goto code1(30,__CbC_return,&___environment); + return 0; +} + +int main (){ + int n; + n = main1(); + printf("returned\n"); + printf("return = %d\n",n); + return 1; +} diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuation_with_environment.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/continuation_with_environment.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,1573 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-10 06:02:50 +0000 + Creator + test + DisplayScale + 1 0/72 in = 1.0000 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{330, 434}, {93, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 70 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 get rid of \ +the environments} + VerticalPad + 0 + + Wrap + NO + + + Class + LineGraphic + ID + 69 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {375.5, 396} + {375.5, 432} + {375.5, 432} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{153, 434}, {93, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 68 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 get rid of \ +the environments} + VerticalPad + 0 + + Wrap + NO + + + Class + LineGraphic + ID + 67 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {198.5, 396} + {198.5, 432} + {198.5, 432} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{330, 203}, {93, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 66 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 get rid of \ +the environments} + VerticalPad + 0 + + Wrap + NO + + + Class + LineGraphic + ID + 65 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {375.5, 165} + {375.5, 201} + {375.5, 201} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{152.5, 200}, {93, 28}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + ID + 64 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 get rid of \ +the environments} + VerticalPad + 0 + + Wrap + NO + + + Class + LineGraphic + ID + 63 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {198, 162} + {198, 198} + {198, 198} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{447, 437.02031779289246}, {42, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 62 + Line + + ID + 58 + Position + 0.26947563886642456 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 return} + + Wrap + NO + + + Bounds + {{360, 477}, {36, 36}} + Class + ShapedGraphic + ID + 61 + Shape + Circle + Style + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 ?} + + + + Class + LineGraphic + ID + 58 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {468, 405.5} + {468, 432} + {396, 495} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 53 + + + + Bounds + {{361, 311.99999570846558}, {34, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 57 + Line + + ID + 56 + Position + 0.46666669845581055 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto} + + Wrap + NO + + + Class + LineGraphic + ID + 56 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {360, 369} + {378, 369} + {378, 270} + {396, 270} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{181, 311.99999570846558}, {34, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 55 + Line + + ID + 54 + Position + 0.46666669845581055 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto} + + Wrap + NO + + + Class + LineGraphic + ID + 54 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {180, 369} + {198, 369} + {198, 270} + {216, 270} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + Group + Graphics + + + Bounds + {{432, 252}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 52 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 codeB()} + + + + Bounds + {{396, 261}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 53 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* something to do */\ +\ +/ +\fs24 / cannot return correctly +\fs28 \ +return; } + + + + ID + 51 + + + Class + Group + Graphics + + + Bounds + {{252, 252}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 49 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 codeA()} + + + + Bounds + {{216, 261}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 50 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 int auaua;\ +\ +/* something to do */\ +\ +goto codeB();} + + + + ID + 48 + + + Class + Group + Graphics + + + Bounds + {{72, 252}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 46 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 auaua()} + + + + Bounds + {{36, 261}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 47 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* something to do */\ +\ +goto codeA();\ +\ +/* something to do \ + +\fs24 It can't work correctly...\ + +\fs28 */} + + + + ID + 45 + + + Bounds + {{361, 86.999995708465576}, {34, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 44 + Line + + ID + 43 + Position + 0.46666669845581055 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto} + + Wrap + NO + + + Class + LineGraphic + ID + 43 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {360, 144} + {378, 144} + {378, 45} + {396, 45} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Bounds + {{181, 86.999995708465576}, {34, 24}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 42 + Line + + ID + 41 + Position + 0.46666669845581055 + RotationType + 0 + + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto} + + Wrap + NO + + + Class + LineGraphic + ID + 41 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {180, 144} + {198, 144} + {198, 45} + {216, 45} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + Group + Graphics + + + Bounds + {{432, 27}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 38 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 code3()} + + + + Bounds + {{396, 36}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 39 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* something to do */\ +\ +goto code4();\ +\ +/* unreachable */} + + + + ID + 37 + + + Class + Group + Graphics + + + Bounds + {{252, 27}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 35 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 code2()} + + + + Bounds + {{216, 36}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 36 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 int auaua;\ +\ +/* something to do */\ +\ +goto code3();} + + + + ID + 34 + + + Class + Group + Graphics + + + Bounds + {{72, 27}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 32 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 code1()} + + + + Bounds + {{36, 36}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 33 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 int a,b;\ +\ +/* something to do */\ +\ +goto code2();} + + + + ID + 31 + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-10 07:22:42 +0000 + Modifier + test + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{203, 0}, {843, 778}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-75, 0}, {708, 639}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuation_with_environment.png Binary file 2013/2013_12_20/continuation_with_environment.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuation_with_environment2.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/continuation_with_environment2.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,867 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {559, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-10 06:02:50 +0000 + Creator + test + DisplayScale + 1 0/72 in = 1.0000 in + GraphDocumentVersion + 8 + GraphicsList + + + Class + LineGraphic + ID + 76 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {189, 342.5} + {162, 306} + {99, 171} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + Group + Graphics + + + Bounds + {{225, 261.00000000000006}, {72, 9.529411764705884}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 74 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 __return()} + + + + Bounds + {{189, 265.76470588235304}, {144, 76.235294117647072}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 75 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* some process for returning auaua() */} + + + + ID + 73 + + + Bounds + {{387, 99}, {97, 38}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 72 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto with \ +the environment} + + Wrap + NO + + + Class + LineGraphic + ID + 71 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {360, 117} + {378, 135} + {378, 162} + {396, 162} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + LineGraphic + ID + 58 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {468, 288.5} + {468, 306} + {333, 306} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + Tail + + ID + 53 + + + + Bounds + {{351, 304}, {97, 38}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 62 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto with \ +the environment} + + Wrap + NO + + + Bounds + {{207, 36}, {97, 38}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Color + + w + 0 + + Font + Helvetica + Size + 12 + + ID + 55 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs24 \cf0 goto with \ +the environment} + + Wrap + NO + + + Class + LineGraphic + ID + 54 + OrthogonalBarAutomatic + + OrthogonalBarPoint + {0, 0} + OrthogonalBarPosition + -1 + Points + + {180, 54} + {198, 54} + {198, 99} + {216, 99} + + Style + + stroke + + HeadArrow + FilledArrow + Legacy + + LineType + 2 + TailArrow + 0 + + + + + Class + Group + Graphics + + + Bounds + {{432, 135}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 52 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 codeB()} + + + + Bounds + {{396, 144}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 53 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* something to do */\ +\ +/ +\fs24 / can return correctly!! +\fs28 \ +__return; } + + + + ID + 51 + + + Class + Group + Graphics + + + Bounds + {{252, 81}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 49 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 codeA()} + + + + Bounds + {{216, 90}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 50 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 int auaua;\ +\ +/* something to do */\ +\ +goto codeB();} + + + + ID + 48 + + + Class + Group + Graphics + + + Bounds + {{72, 18}, {72, 18}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 46 + Shape + Rectangle + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc + +\f0\fs28 \cf0 auaua()} + + + + Bounds + {{36, 27}, {144, 144}} + Class + ShapedGraphic + FontInfo + + Font + Helvetica + Size + 12 + + ID + 47 + Shape + Rectangle + Style + + shadow + + Draws + NO + + + Text + + Align + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs28 \cf0 /* something to do */\ +\ +goto codeA();\ +\ +/* something to do \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\fs24 \cf0 It can't work correctly...\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\fs28 \cf0 */} + + + + ID + 45 + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 1 + ImageCounter + 1 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-14 13:51:48 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{349, 275}, {843, 778}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-75, 0}, {708, 623}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuation_with_environment2.jpg Binary file 2013/2013_12_20/continuation_with_environment2.jpg has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/continuation_with_environment2.png Binary file 2013/2013_12_20/continuation_with_environment2.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex.eps Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,1040 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 1908.000000 396.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.9 (Build 13A3028) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 1908 396 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/setupFunEval +{ + begin + /nRange Range length 2 idiv store + /mulRange + + [ + 0 1 nRange 1 sub + { + 2 mul/nDim2 xd + Range nDim2 get + Range nDim2 1 add get + 1 index sub + + 255 div + exch + }for + ]store + end +}bd +/FunEval +{ + begin + + nRange mul /val xd + + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd + val + add DataSource exch get + mulRange nDim2 get mul + mulRange nDim2 1 add get + add + }for + end +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEval + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEval + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + 0/Function load FunEval sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + Nsteps/Function load FunEval sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 1908 396 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Osaka-Mono +%!FontType1-1.0: Osaka-Mono 1.0000.3.0000 + /FontInfo 1 dict dup begin + /FSType 4 def + end readonly def + 14 dict begin/FontName /Osaka-Mono def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /a5f put + dup 34 /a63 put + dup 35 /a6f put + dup 36 /a64 put + dup 37 /a65 put + dup 38 /a20 put + dup 39 /a31 put + dup 40 /a28 put + dup 41 /a69 put + dup 42 /a6e put + dup 43 /a74 put + dup 44 /a2c put + dup 45 /a2a put + dup 46 /a78 put + dup 47 /a29 put + dup 48 /a76 put + dup 49 /a7b put + dup 50 /a2f put + dup 51 /a73 put + dup 52 /a6d put + dup 53 /a68 put + dup 54 /a67 put + dup 55 /a3b put + dup 56 /a7d put + dup 57 /a61 put + dup 58 /a72 put + dup 59 /a75 put + dup 60 /a6c put + dup 61 /a79 put + dup 62 /a43 put + dup 63 /a62 put + dup 64 /a2d put + dup 65 /a3e put + dup 66 /a70 put + dup 67 /a3d put + dup 68 /a6a put + dup 69 /a66 put + dup 70 /a5b put + dup 71 /a32 put + dup 72 /a38 put + dup 73 /a5d put + dup 74 /a2e put + dup 75 /a26 put + dup 76 /a22 put + dup 77 /a3a put + dup 78 /a80 put + dup 79 /a33 put + dup 80 /a30 put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[256 0 1 index div -49 2 index div 262 3 index div 220 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C000000046670676D00000000000000A000000004676C796600000000000000A400000E08686561640000000000000EAC00000036686865610000000000000EE400000024686D74780000000000000F08000000C46C6F63610000000000000FCC000000646D6178700000000000001030000000207072657000000000000010500000000400000000000000000002000A0000007600AB00030007000037331523371533350A6C6C0562ABABA6A1A10002001C006E006400A8000300070000372733072327330750061A073A071A066E3A3A3A3A0000030000FFFB008000A600080014003300003727061514171633322736353427262322070615141F012327062322272635343726353437363332171615140717363D01331514512A1409090D1016170504090805054819190B1218170D0E1D110B0B110D0B091E2503131A3411140D08095C110F0805040508070D591E0E130D0E121B18170E100B0B08070E17172D0B1405051C00010014FFD9007000AB0011000017152627263534373637150607061514171670281A1A1A1A281F131515131710031E202829201F011003181925231A1900010010FFD9006C00AB0011000037351617161514070607353637363534272610281A1A1A19291E151414159B10011F202928201E031003191A23241A18000100110045006F00A600110000372717233707273727371727330737170717651E0314021D0A20200A1D0214031E0A20205514242414110F10111424241411100F0001002CFFD30054001F001400001735363736352227263534373633321716151407062C0A05050905050505070907060B0D2D0D0109080A05050807050507070F110E0F0001001800390068004A00030000373315231850504A11000001002FFFFB0051001D000F000017222726353437363332171615140706400705050505070705050505050505070705050505070705050000010003FFFB007D00A600030000173733070367136705ABAB0000030007FFFB007900A60008001100210000370716333237363534073726232207061514373217161514070623222726353437365F37090E0F090D4438090F0E090D24190D13130D19180F12120F73590F0E13260B2F58100D1324186C12162D2E161212172D2D161200000100140000007500A2000C000033233533350607353637331533756127171017101426107D100612091092000100100000007100A6001E000037331523353437363736373635342726232207353633321716151407060706244D6106061D1A030407070D121A131D150C0B060729141212120C0A0B1D1D0607070A04070C120A090B0F0B0B0C2715000001000FFFFB007200A6002A000037351633323736353427262B013533323736 + 353427262322073536333217161514071617161514070623220F1811110A0A0B0A1D0B0F130A0907071011140F161D0A0C1B0F0C0810101C0F03140C0A0A0F0E0B0A1009080C0B07060912070A0A12180E040C0B10160F0F0003000EFFFB007400A6000D001B00360000370615141716333237363534272627363534272623220706151417160727263534373633321716151407161716151407062322272635343E1B09080D0B0B0806090C1607070B09080705040204150D0E12140A0B1C1905050D0D19180E0D4D15130A080808080908070B23101108060606070805080617031114100C0B0A0B0E161614080D08120C0D0C0C121C000002002FFFFB00510078000F001F00001722272635343736333217161514070627222726353437363332171615140706400705050505070705050505070705050505070705050505050505070705050505070705055B0505070705050505070705050002002CFFD300540078001400240000173536373635222726353437363332171615140706372227263534373633321716151407062C0A05050905050505070907060B0D0207050505050707050505052D0D0109080A05050807050507070F110E0F820505070705050505070705050000020007001E00790052000300070000372335333523353379727272721E101410000001000700000079007100050000372735170735554E72723827123839120001000CFFFB007100A7001900003715062322272635343736333217152623220706151417163332710E121D141414141D120E1011120C10100C121115130717172828171707130910132223131000010025FFD9007900AB00070000173315233533152338415454411710D2100000010007FFD9005B00AB00070000372335331523353348415454419B10D2100000010007FFF000790000000300003B011523077272100002000BFFFD00740076000C002000003735262322070615141716333237062322272635343736332216173315141723265D0A0A110C0C0706081513121B100A0B11101B030F0A130414013132030D0D1A1307090B1D0D0E181F14130101521909070002000FFFFE007400A8000C001E000037151623323736353427262322073533153633321716151407062322272623221805120C0C060807152613121A0F0C0B1112190304040B4332020E0E1712090865A84E1E0D0E181F1414010100010011FFFD007200780019000037150623222726353437363332171526232207061514171633327213121A1111121118170F1311120B0B0D0A121116130611111B1B12110713090C0E12150D0A0002000CFFFD007100A8000C001E0000373526232207061514171633323715233506232227263534373633221617355E0A09120C0C070608152613121A100A0C12101A030F0A + 3132030D0D1A13070999A81A1D0D0E182013130101340002000EFFFD00730078000900200000373335342726232207061715062322272635343736333217161D01231417163332243A07080B090B094A1B11161110101116140D0D510B0B0F14450310070808073F110B11101C1D10110F0D2104130B0C00000100110000007900AB001700003723152335233533353437363322171526232207061D01336D2E141A1A0D0D18042014070F08082E5B5B5B1005210D0D021305090B1507000002000CFFD000710076000C002B000037352623220706151417163332173506232227263534373633221617331514070607062322273516333237365E0A09120C0C0706081513121A100A0C12101A030F0A1305050D0E1518131715130A093132030D0D1A13070905101D0D0E1820131301015225110D07080A140E0A09000100100000007100A80013000037152335331536333217161D0123353427262322241414111A10090913050408194444A84D1D0B0A224143150806000200100000006500AB000700170000373315233523353327343736333217161514070623222726442134213416030405060403030505040503101064102A060304040306050305050300020012FFCF006300AB001100210000173516333237363D012335331514070623223734373633321716151407062322272612160511070731450C0D1A0D290304060504040405040505032E130509071A5A1066230D0FCF0603040403060503050503000001000D0000006700A80007000037331523352335334324382236101098100000010007000000790078002B000037152335331536333217161D01363736333217161D01233534272627262322070607152335342726232207061811110E0F080605040B070808060511010201010304050708100201060305084343741A1E06080C06100907070811584F0E01040101060717404F070A040509000100100000007100780013000037152335331536333217161D0123353427262322241414111A1009091305040819444474191D0B0A22414315080600020009FFFD00770078000F001F00003732373635342726232207061514171617222726353437363332171615140706400F0A09090B0E0F090A0A090F180F10100F1817110F0F110D0C0B16180A0B0B0A18170A0C1011101C1D101111101D1B11110002000FFFD300740078000C001F00003715162332373635342726232207353315363332171615140706232227262315221805120C0C060807152613121A0F0C0B1112190304040B4332020E0E1712090892A11A1E0D0E181F141401012D0001001A000000710078000F0000371523353315363332171523352623222D1313121D0E0712010717444474191D042A1B0100010011FFFD007000780029000037351633 + 32373635342726272627263534373633321715262322070615141716171617161514070623221117180E080604051D1506060B0B19131013110C080605051C1407060B0A1C1606150E0505060604050A0807080A0D0B090611060504060503040B0708070C0F090A0001000AFFFD0071009A00170000371506232227263D01233533353315331523151417163332711609150B0B1D1D13343407060D0E1611080B0B192F102F2F102F1107070001000FFFFD007000740013000037353315233506232227263D01331514171633325C1414121910090913050507193143741A1D0B0B204143140806000100030000007D00740006000037330723273317691433143316287474745C000100060000007B0074000B00003323270723372733173733077B192323162E2B191E1D16282E2E3D372727350000010003FFCF007D007400120000372733173733070607062332273516233237363B36162A24142D100C0E13021212020B0B0B056F57576C25090B021102080800010016FFD9007300AB00340000371615140706151417163B01152322272635343736353427262B01353332373635342726353437363B0115232207061534171635143917040306050F1010180B0A0601070710090910070706010A0A1910101004060502420C140C0F0B030704051008070F071D01070B06061007060B0519020B10070710040407021C1808140001000DFFD9006A00AB00350000372635343736353427262B01353332171615140706151417163B01152322070615141716351407062B013533323736351427342631344717040305041110101A0A0A070108070F09090F080706020A0B1910100D08050502420C140D0F0905060504100707100C1801060B06071006060C041A12050F07081005050606200609140000010003FFFB007D00A6000300003733172303136713A6AB0001000000030000FCE44FCE5F0F3CF501010100A692F1FD0000000000000000B37C66DB0000FFCF010600DC0000000A00020000000000000001000000DBFFCF000001000000FFBD0106000100000000000000000000000000000031010000000080001C008000000080001400800010008000110080002C008000180080002F008000030080000700800014008000100080000F0080000E0080002F0080002C00800007008000070080000C0080002500800007008000070080000B0080000F008000110080000C0080000E008000110080000C0080001000800010008000120080000D0080000700800010008000090080000F0080001A008000110080000A0080000F008000030080000600800003008000160080000D0080000300800000000000110024006E008D00AC00CD00EF00FB011701240159016F019E01DA022A025B029302A402B302DA02EA02FA030503360364 + 038B03B903EA040D044C046A048F04C104D1050E052C055D058C05A505E20604062206320649066906B006F80704070400010000003100D00018000000000002000C00060000000007E8000000040001B801FF85 + 00>] def + /CharStrings 49 dict dup begin + /.notdef 0 def +/a22 1 def +/a26 2 def +/a28 3 def +/a29 4 def +/a2a 5 def +/a2c 6 def +/a2d 7 def +/a2e 8 def +/a2f 9 def +/a30 10 def +/a31 11 def +/a32 12 def +/a33 13 def +/a38 14 def +/a3a 15 def +/a3b 16 def +/a3d 17 def +/a3e 18 def +/a43 19 def +/a5b 20 def +/a5d 21 def +/a5f 22 def +/a61 23 def +/a62 24 def +/a63 25 def +/a64 26 def +/a65 27 def +/a66 28 def +/a67 29 def +/a68 30 def +/a69 31 def +/a6a 32 def +/a6c 33 def +/a6d 34 def +/a6e 35 def +/a6f 36 def +/a70 37 def +/a72 38 def +/a73 39 def +/a74 40 def +/a75 41 def +/a76 42 def +/a78 43 def +/a79 44 def +/a7b 45 def +/a7d 46 def +/a80 47 def +/a20 48 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontInfo 1 dict dup begin + /FSType 4 def + end readonly def + /FontType 1 def + /FontMatrix [ 0.00390625 0 0 0.00390625 0 0 ] def + /FontBBox{0 -49 262 220}def + /UniqueID 4282574 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C94D62A069D16B42DC713A3CCB6051AA434463E2559D7E1B4AC0CAF8C8984040B22F316BA797179BD86033CC155C34D89F4B22CF711787C71A687EC758ED4C38B72A5B874A259301A47B918ABCC24526DF3F774BB0AB2A0720428F3543B381C2D23D9E611BDC99BF9C1D94443ADFFC125695EC4FCF2737EB93547BA1F151B43C9FBE82556496AC39437CF8B3F4B088A84307AFC58658426C47EBF4345609B18475D8D73B4A85BE868C3E5924E8B5E708768EF436BBA91B7E30DCEC401D1209CAF33504AB3E1319BB4002D5B9B0EC2524E94508F058630A08175BA02A810425328222A2408C1035D030C7C6FD3A101D7B782B58A22DCA39E37A65918A8E516972918965D9EA4E20F84053AA1322CE9921F319BD977417B14FD8A1E745BDB86F489AE51DED45D89C3C3931A5A12017628108FA44E06E0253DD6D0C8367D7BBE93A577FCB6E41FF0F58945181442D36EC7E21923917BCCDB3EB780D92572754D9250B062FF5799FE3DAC8A15AB6F889A6A54A684908C36A217B98CB33913805FD8F6B2EBD7B14221770B39A4F90F7A170193CBD1E3FF505FBE7013714610866F491494EF4E6564B2F1AB99F4A1D5264D4FD96BDDDA67A6F03C41E29B9FF1B4057683AC763922F9642A893B52211600DA4AD1CDA96D9C797BB87AF8F38C673F34E082CF7AC09413152A36372C8FA08BD7812748582A4396CB647E53C194873E11D2C24D99A2367CB730594AA8953DF5D9AA02C6CC03B5D7CA5D5CAD2B67F27FD919C887 + 8F78280C57043465C8A6F9AEDDE45E17DF8E49EE804E3E1FB0CC5E8BCDA89BD883A7E534EAAF8F3FC0EA08F23A0C06360EF0B01086DCA90F007DC6EBB935B7084F75A2293DE87358E8D0895A3F2B9C55CCC11A369D91FDC970DB8B6C40DFC40487FE3E5481C83F346B6D27C0C67816227550CBEDC45A61717934B210C2AB466E8752B08AF26E428CB9B7E52B636D1E8CB351509F68399F7BB50A4A1C2AE88EFE617BDA5A0362782D00D69FD78CA2B6479539B4816143E0C3CF6497C48342A6F041091787D302550A67F5BD1E7B99BC00B9D2EB1FED033A23B5137A7138B814A5FB119A09B7BF9E73ECF44CEB154F3C33982A0D85846ED0913E7DA5627B31F845EBE9F004CFCA45D1D52CFD63BAB3A7F2D43D1330B64EB2044F3652A43B32DC67E8898E1369FE938FEBA735DF1618C4FFD6B1B873F96C154ABADD5127E3B2B08F7CD1D352BE28F6274B06E5876969D4733555B35D307633F934C53D80DCDA5F2B0941B8A893888A8E4DB7AB930431FCEAA672B7752DDD169DD53CBD8B6F0E1907E5F55860E039E3240C5977FE7AAB37E9F427B6CBE06A1A6D68975CEB5D4A7A42C87E4C8885BC57C53B3DE6E2C2146FBBE80DA7DB6E476480470CE1B3E1CDDDF6846C9274DA92D562A789F59B3D314FCDFFE7E592D9A4F17C7E9A31F8A509703F20B484E6B81C7EAD9A77D6177F26E48084AA817C5D4496A49A63857BD2DFF4C7CE18B0A29C11C088FC7FB9E879678D92748F47166F5241F3102DD4CADFF8105CD9C928EF6481DB971562CE9517916FE5D618AE4AA52E9810B732D06736ABBCE2B419AE8251E816164E1011DE1B7F61C42E566A4DCB6D68EBAF7F631AD95D7FFB7B3C727F64F7EEC1A9430D2F57A2B17AB32340E9733749DB1061391D0E032222482632863B5277971617E42CCFDE800CBC4FCA1BB98E051FEEE1E0D65A3BA6F92B0ED84FE70919605D456022E869FEF7F72D4F2EB5E7E9506E7AF6C5C5630ECD639298AA4BF475FE523A37A455ED693F64F0B0B8DA108BE0EC8A3D689074F608D82DC012F6233B51211F61D9A90E175B344F6234711A1B1126D2EEC050091562FBB364CFDC5EC7BCC0BBFBD285862C2149ADE51C793150CA2F3047BC21C2E5DED9FF614C5E6F0555604CAA12E50AF6514E9F02FA92AB12E1E7090CD0D640D685185E633E31911835351BC4086A575F859DC8CB8C8541F258C1FB361AE0D6F99CC11B98946F2E62C9A5B8C614EDB4ABA92A6742CBA5D2988E956937EDC08FE5241959C59BC135F7AA78D6EFBFDFB4E230EB1AAA6D7F345B86635138212679765D53EBC88E9028777C549ADDC337474B55DC0494F054D9582A4245C9F24E90EBAA182FB2121F0A5A897BB772EA93572B3CD1BBA3EB165BCD597B2E5D47864DEFA2E063B9B98FD679AD7165D16BDD85A0DDC99395E10E424734068C5F2AEA6F2813 + 1EE6A00FBAE0EBDC126E8F282986A35D05A2D0CC2E47903221F95D80A1EF62980DBC2FD6384FA30852F9D33FF483AD7BE59F47FD940E87A20B7CB783B12751A1B4B0209AF2790D7FE3AC1EAECCDD3BD5C2515EFCA3C61D62EEDD6CC832E0DCE36FF45907DFC266F4614BBFA30C1645785EA67F095A7E809CAF3BB19981B80B1458CDC941B952DC8CBC7FD81F376929E32756FCEE11FEEB907574CDD0BE43F9423D9AE75FB2380910BC60FAD69F1B6A55B96278252AFE8154092E068340EE35122DC64EE0DE6F1EDFA0A4A0868758DD26E88E6F5A00E445816D74F469D2A38E4778FB810C32DB107B04142B8518639A4B9FE7FDFB692EC1FD30EAC6407A17A8F8DF78A9EA71CC499C6318266EC5B7EA8A032316D70CB4CA3C1A481CBA79110D8C3339ACC18156F11E01DA417A930F932EA90343FE0CDF23D6BD540A914457841B4D2532675F50B0C5290294B59D99D924B8A5DC68CE3A08AC7EC665350521CD1F1007083E28E9A16A39FD17D2B4379D85DD681F836D98ED1519C61083A898BD1532212002C97378B7CC6A697E8B8DB8E0BE3156FE6E7809711EB00066C88174F5C671A6AFBA766B0173671268FFF4E926C8785E16A11E5A3991250FA5EEEBAE8E6E4BFD7E163ECC621708A2EF1807AB4EF6F17C9C47AC40A4E228667DDC03DCBB5EEB8E6E6DA13207BB3C516F6620C707EE4ECBA937A1D3EE5E01E7EAFFA0DB6080D049887353CAA88E3865E47AC2430168B4DB06EEC44346543073AD6F3FECDDCB84951121561D3A451FB54303D4E88909B876F3C8DFFFD73A689FB1A63D3EFA98B9A00FEB03A1AD737B1772032E78BB5646672472A49F0CEF534135327789E2488F92FDB200939403B6806EB240782BA1DBDDA801EEC6FACBEE9C9866E53B429E609A858D50BFC8A0086C2CC4BCBF0B2F63D51626E53799EA3F7766DF3780CC98A629B14439F0CFC29E1B9D6C52966F2D220D5CD69C21294B95F86862304772479DC3F4EF0CFE0C388D086C0C290B57C8F5C597F57F1081CE602135B67D38F9AACF7B4F2D74EA277843BCFA7BA920B9554C488EAD369B7A3590AA35CCDF942A8F9BB843F88CA62CA06FB2496FDFF21B572FA045BDB71CD4444D024FEC6C5878D5D0E6ABD4D96642273F01DA9931D4284282868A3BB0E5569C89C1B3757BB0DF8B5FD7B8A86717A232BCA1076D6FAD24AFB457850C7EEE4E5F23ED081FAE76B39DEF5BBAB033E8269D838B7FBC0A17C7C0AD0C7F702B751BB69824AE18807AC10DBB7424657ABA7B078D4D56314837032B6C6C3F1E564547309AFDE82FBA7D18B067CD5DD8D9B1A7FBFAD628C1EABF1E6CC0F10A94BE39C694D460F2082C0B924DB80BB05B26AAE0CA0F6BB59E120A0A1065521BC32DAF7797690BFA558399F910BD7C717B6945E22EA99BE8456D83CC4FAB056C8642E23D1B6E4C2951D9906C + 94AEAC04937B5DBCB144F062F6F9B577D5CF62F5972B62E942110DE3B28DE7F77FA31A4A2BBFA84B2621B0A80435C1E297E9A627AC2AC807E17F3931D424120447B44B2AAB1A954C4070DD3F94567E524EE6AB15D5A66525C222C7F24B93BC6A10D8FC07121DB01C160DA12E8939AC119DF170C213B9525F9334447B7851FB0C3A7CB81C6D661C13BD338639056D15E58B20FC44E9F2316A6FAF367A499C9E2DA6ABCB285A988398430D2BE5DEA61877D32D217994E42B7DA9BD589E12A16C33FC68FC25ADEF6E42E2E610AA2C9A78D6AC26F17DB8DC2F5A95208AC8686F4A8C053240F5E7ECFF77B8DE11D2A05473A102CAC4110FA317DBFB0B6180F6FE90F2EF7C4E5F4780D978C837079D05C708ECD2EC4194461B846CDF8511C404857E2D95868F3B4FBF2D0A307B49049A75AAD5F5B248885D897F314DB6E657F5E2E164BC740F3A38AD58B4A2C1F28DDE5F60EA251A3F426BEFDDB76EADAACA66203FCD81F9C18203A2C3313C08BCB60DCD6DCFB325CF7F17FE30712AC3601D64E22252DBD710136811D4A3FE5396B21B2D221E3D0C94B1D6D329D2F0962B8286AB819EB2EA1072E9F1073BDA4F14E800FC90ED1B7F554024156BCBB7901121BD221C56E4A4EA52D6A0402A36A90A8329FF7F6453AAF21E62534E9F55D5ABE6E6034ADEE448248F12CC6EAD97196FDA0D67AEA4981A109C44BE8813D9A3C719291C24C723DED0884FE7B44632F189F3126B8B406518BA746479C87B286A07F3A53F9D951F63A411752FD7E0E7E3C4AFC173264BE335DD1DA9FE61B71A45E5AFABC360B7A6E0A25B9C14FDB5B3A2A8A34C3633439B611B3D2DA7D98466EC6B73EC4566EBFBDA965BBEFB6E0FFC7EAFC635A56F6FCC9227DDC0A569B1C1CA6D0A395AE8301AB56D239DC5D72A0726D8E6AF1A392B2BAD06D98E6275650A764BAFF8F88DF2908E5A4CBD627A5121FDA507C9B2716B20DC72317BC70528B185B7CD86450394E46574E254B9D5AD570C823F741C2D20BCEA03F39C676B8177DD44B08D8E580C50D572DFB1A7F89FDC442427207CBDD95B83C573D827E40DBBD51EB7FE98E6088F30C66C22D2BEF591539168DD36C89E7B8DD840E2F411DE88B32C8AB29611371F162108FDC2C697CFBBE7EC03E6D9DA261A964F00657D18714E110837EF7C9532AA34186BBDC84F6D16952BE1E59A90B9276E9CE900BA536D6FFF8CBCD90BD2999967177D3E5B6ACB43F5C1B992A2A8E5137C3F56B7D81CEE8D0DA9773A13945C87470BD75BA2AF8E7395C423F072C4D5B31991EE477DE953A4928D3EF54E3C682121C0491CE7276E89A95F9C7101681B3A36F5158A58F16665EA896905EC04855F29AEB7B791123512E5773CC1F8803A67DE77DDA51BBEA3DDB993992EC75F73535B0E95883296BFEA3566A7AE265EF4B918D46FADE1DA265A50EC37377EE1 + F585C581AFAE3C400F4BEBBD5CBCCD83706F658992FC341CF9CE33F7D9D328FC37AF689DFFD3F5232298921FEC12B18D264673C951E74CBD8269692F66CA754F8E1132E99CE578C650DFF7BCE65DCDEC1E7335205730DB84D308A86F1FEF63F9079A1B70EB5B22A97F1F9472CE9AC58E2AEED1B3B2B67D4BCEF0880F74DA90FE62432AADDDC74426A842523BD7A3D44C2ECD4E401E59874F6CA2E843A015A9247057B966387A30A204955A4298E00A9F28A7D453AC916A7C25D6D8E4E8FA4B64812D5E98747AE5391FCB3AA43D75CA0E694895ECE41785246AF9ED7510ACC00428A54A80FF95B98823370A5A13EA2CD5AA4280593E3DB07A229628D504E4859DA4E06C5027C28F4C38F9B32F0DDEF375DD4567C6C7DF571985582FF888577B8EED3E0E329E4510C81CE58D370EFB5515283592002B080A8972E267E388648C244F8348B49D6A3D94DD4A7AE530454BBDA146B11FCF149AB7471E14C0D28D2332A01B69A4E6C1C44EA64BE7C4DB0A7E360DA468C21847E93ED3746ECDC0DFB1A318A68564FB5C5FAD626120D1915952B3E9BB038AA49E71857BB7FB2BD644A1251C2603199466383E6BD1A47CCF8F8A678B2F10DE136BD54077A7E94E9B19A02F6018F62BEA2FB099F81F5ECB1E0D30CCC95443CCD513A8C6F0E2377F8E5237F62853434243C114EE12AF06D4C5AC18237FC4675BE5CC5089770856FF18E7A7FA67AB2D8C556DC7642C0EE717C6183906161E9D03935580E510F1E8BB5CF9559828E6F3894FDC48D94B4D37C787A896F09B3C1120F9F3B2AB6C2D7FE86F6BD06D16EB81D789D6D93F7C53466DFDCD3F2F672A77CDBD3993F910B4C9AB4EC3F4745BAB03C6D72D2690C071F61777192D3416E4275A72D96C247315A216F983D8836463DBEF1782DEBEF25438F683D4F566CC64A0469E4F33A3F5C00ECCF3FC50F1B6AE83EB0C181B6A27DBB3AD7CC04137DE1EAE6DCD16E8DEC598DED8B1617D05184EC1B30B5999EB165E17A8D580CA0632B5D2F3326F4CE48D07A784688BFE5F21E49F0410F768BC5F68A0DD3275F6E6B5F412CCF0F0C8B9C89638FB32C890D2E7289D6F107F0008978A378722E40AB31D156458D53E56D54FB87FFB2DC8A7489F03F9D2023A4D27C934700DAEB26BD1CF2F53DD4B285931243A2AC63104EEE313FF63EF9D29C166699AE998AD495F9F5022EB35EB93432260E40938C9DC668E101A66A7FFED7635990766405C81EC60870951DFA5FBCEF9406C6B7EFD8D3DE0D32792E2725BC9B6C5A936C00F16375AD70808213D5F3B2CAE0BBCFB30C504BFFA0514B949D91455CB28063F283177A33FADC93C86FC7A3253F55C728DA9D5DB2FDC135061468D27FD75494466DB68B42A81248FFE6DB1593430EFD831D1168D1299A2A23C9B527E3F9CECCD04BDE3C2CEC1BC1CDB3DDED57CD05E91C5B6865B + C8D469E86C4C3B601C7147C6B5A5862C1C54BC8AE57642F6B851119FA2F9D9B3263ACEE8F06333388EB948295A69070F9EC142208510AC018F6657160312405DE0EE02B54A6E383D278DA5C769625B8B2F3E93B115FB2F83C116034DF2E929B2CAC808744FF7980D5B1D771C09792CB7B953E05652E7662933A9117E67702F487A694CCFB2766EF7B70EBEAC754EABB59F2876A71F6E97E7D130EE4FDBC4C7AA2CA452C5ED9C8DECFDCC3658D82BA234D1EDF5DDE14E7A8C207C86C48604DCF45C7595380B4FE414004F88B205CE00D5226B660EBC62237362F3999B602F28FBE44DCBDA2D2E31F6566C5957ECC3A28E3EB2A1415F41DEA4F7F5362FB8E1FC6F931512AA692890BF2CB2D6F996BE98BD53F56D26FDDB594A78811EA2C1911F96C12464C831933F792EE24AA0B10AEB503432C0E8EBA3DF6B3A38C9450216646EF5BB1F3E4F1E865BEC11273E2D922EB86F2474368C4D40D2519282A5332743DB1B1248CA73C153F829F2342012F7DD1D57E1E376B68443D4DCC7FAE6C8D2A59083269FE6F3B025D10E7D24AA2276E9541D02FDBD563E599C1CC8F4C64D52A5653B0DC8F1C406A099EDBF6928647F9004A749C74232B8A161BDCDBDEE8D3C87E3D82553075560A2BBF99508E5910EF752DFF83B2591EBC49C74F0F3D522561BCAA0C3F18A9F56C46DCC03E8048515411E149B386C3079B2F8297536406B8EE173545496B4957657F401362B6C576FAF81110F7397E6A97FE9113072C440280F217CC696FBCF2243F8D7A394668F45C7B859762BBC42B3F598A448EEF5E3405CCFCCD38BA9008EE7E38B1F098FDB20A6B9734FF4AC0230C8C0D04ABF7746523BD152708DF03505E6F3E110 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Osaka-Mono cguidfix +/F1.1/Osaka-Mono renmfont +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs1 exch/ColorSpace dr pop +%%EndPageSetup +0.60000002 i +/Cs1 SC +1 1 1 sc +q +0 0 1908 396 rc +-0.5 432.5 m +2235.5 432.5 l +2235.5 -350.5 l +-0.5 -350.5 l +h +-0.5 432.5 m +f +0 i +0.90196079 1 0.86274511 sc +0 396 m +1908 396 l +1908 12 l +0 12 l +h +f +0.16078432 0.56862748 0.10588235 sc +1 0 0 -1 954 198 cm +/F1.1[ 12 0 0 -12 0 0]sf +-954 -176 m +(!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 -176 m +(&)s +0.27450982 0 1 sc +-912 -176 m +("#$%')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-882 -176 m +(\()s +0.16078432 0.56862748 0.10588235 sc +-876 -176 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-858 -176 m +(&)s +0.73725492 0.38039216 0.098039217 sc +-852 -176 m +(*)s +0.078431375 0.078431375 0.078431375 sc +-846 -176 m +(,)s +0.16078432 0.56862748 0.10588235 sc +-840 -176 m +(!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-804 -176 m +(\(-)[ 6.000000 0.000000 ] xS +0.73725492 0.38039216 0.098039217 sc +-792 -176 m +(%.\)+!!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-726 -176 m +(/\()[ 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-714 -176 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-696 -176 m +(,)s +0.16078432 0.56862748 0.10588235 sc +-690 -176 m +(0#\)$)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-666 -176 m +(&-/,)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-642 -176 m +(0#\)$)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-618 -176 m +(&-)[ 6.000000 0.000000 ] xS +0.73725492 0.38039216 0.098039217 sc +-606 -176 m +(%.\)+!%*0)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-558 -176 m +(/1)[ 6.000000 0.000000 ] xS +-954 -164 m +(&&)[ 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-942 -164 m +(2-&$#&3#4%+5\)*6&-2)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 -152 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 -152 m +(6#+#)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 -152 m +(&)s +0.15686275 0.5529412 0.54509807 sc +-912 -152 m +(%.\)+!!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-846 -152 m +(\(*,%.\)+!%*0/7)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -140 m +(8)s +0.7764706 0.1254902 0.086274512 sc +-954 -116 m +(2-&+5%3%&9:%&":%9+%$&9;+#49+\)"9<<=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -116 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -104 m +(!!"#$%&:%+;:*'&\(\)*+&*,0#\)$-&%*0/1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -104 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -92 m +(&&-\(\)*+-/\(\(3+:;"+&!!>?>!%*0&-/\(%*0//@A:%+!B&C&*7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -92 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -80 m +(&&<#*6D4B\(\(\(\(3+:;"+&!!>?>!%*0&-/%*0/@A%*0/,'/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -80 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -68 m +(8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -68 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -56 m +(-2)[ 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-954 -32 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-936 -32 m +(&)s +0.27450982 0 1 sc +-930 -32 m +(49\)*')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-900 -32 m +(&\(/1)[ 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -20 m +(&&!!:%+;:*7&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-882 -20 m +(22&@A&&!!"#$%&\(-!!:%+;:*/\(/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +654 -20 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 -8 m +(&&!!%*0\):#*4%*+7&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-852 -8 m +(22&@A&&3+:;"+&!!>?>!%*0&!!%*0\):#*4%*+7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +684 -8 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 4 m +(&&)[ 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-942 4 m +(2-&+5%3%&9:%&%4\)+%$&9;+#49+\)"9<<=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +594 4 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 16 m +(&&\)*+&\)!?;EF'GHI7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 16 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 28 m +(&&\)*+&:%+09<7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 28 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 40 m +(&&!!%*0\):#*4%*+J:%+!B&C&K:%+09<7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 40 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 52 m +(&&!!%*0\):#*4%*+J%*0&C&\)!?;E7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 52 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 64 m +(&&B:\)*+E\(L49\)*'&M&49\)*'&%*+:=N*L/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 64 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 76 m +(&&\)E&\(3%+D4B\(!!%*0\):#*4%*+J%*0//1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 76 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 88 m +(&&&&B:\)*+E\(L49\)*'&M&49\)*'&:%+;:*N*L/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 88 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 100 m +(&&&&:%+;:*&-\(\(\)*+&-/!!%*0\):#*4%*+J:%+!B/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 100 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 112 m +(&&8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 112 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 124 m +(&&!!>?>!:%+;:*&C&:%+;:*'7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 124 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 136 m +(&&-2)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 160 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 160 m +(6#+#)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 160 m +(&)s +0.15686275 0.5529412 0.54509807 sc +-912 160 m +("#$%')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-882 160 m +(\(OP,!!>?>!:%+;:*,K!!%*0\):#*4%*+/7)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 172 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 172 m +(:%+;:*)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-906 172 m +(&P7)[ 6.000000 6.000000 0.000000 ] xS +-954 184 m +(8)s +ep +end +%%Trailer +%%EOF diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,623 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {2236, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-14 13:08:36 +0000 + Creator + utah + DisplayScale + 1 0/72 in = 1.0000 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{90, 373}, {189, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 21 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{295, 398}, {55, 17}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 20 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs22 \cf0 \'82\'b1\'82\'c1\'82\'bf\'82\'e0\'81\'42} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{288, 83}, {227, 34}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 19 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;\f1\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs22 \cf0 \'82\'bb\'82\'ea\'82\'bc\'82\'ea +\f1 __return,__environment +\f0 \'82\'c6\'8f\'91\'82\'af\'82\'e9\'95\'fb\'82\'aa\ +\'97\'c7\'82\'a2\'81\'48} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{306, 36}, {99, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 18 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{144, 36}, {99, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 17 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{0, 36}, {1908, 396}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 16 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 Osaka-Mono;} +{\colortbl;\red255\green255\blue255;\red41\green145\blue27;\red230\green255\blue220;\red20\green20\blue20; +\red70\green0\blue255;\red188\green97\blue25;\red198\green32\blue22;\red189\green0\blue255;\red40\green141\blue139; +} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs24 \cf2 \cb3 \CocoaLigature0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx2978\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf2 __code\cf4 \cf5 code1\cf4 (\cf2 int\cf4 \cf6 n\cf4 ,\cf2 __code\cf4 (*\cf6 exit___code\cf4 )(\cf2 int\cf4 ,\cf2 void\cf4 *),\cf2 void\cf4 *\cf6 exit_env\cf4 )\{\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf4 \cf7 /* do something */\cf4 \ + \cf8 goto\cf4 \cf9 exit___code\cf4 (n,exit_env);\ +\}\ +\ +\cf7 /* these are created automatically \cf4 \ +\cf7 __code return1 (int n,void* env)\{ \cf4 \ +\cf7 *(int*)((struct __CbC_env *)(env))->ret_p = n; \cf4 \ +\cf7 longjmp((((struct __CbC_env *)env)->env),1); \cf4 \ +\cf7 \} \cf4 \ +\cf7 */\cf4 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf2 int\cf4 \cf5 main1\cf4 ()\{\ + __return; \cf7 // -> __code (*__return)(); \cf4 \ + __environment; \cf7 // -> struct __CbC_env __environment; \cf4 \ + \cf7 /* these are emited automatically \cf4 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf7 int i_buf[128]; \cf4 \ +\cf7 int retval; \cf4 \ +\cf7 __environment.ret_p = &retval; \cf4 \ +\cf7 __environment.env = i_buf; \cf4 \ +\cf7 printf("main1 : main1 entry\\n"); \cf4 \ +\cf7 if (setjmp(__environment.env))\{ \cf4 \ +\cf7 printf("main1 : main1 return\\n"); \cf4 \ +\cf7 return *((int *)__environment.ret_p); \cf4 \ +\cf7 \} \cf4 \ +\cf7 __CbC_return = return1; \cf4 \ +\cf7 */\cf4 \ +\ + \cf8 goto\cf4 \cf9 code1\cf4 (30,__CbC_return,&__environment);\ + \cf8 return\cf4 0;\ +\}\ +} + VerticalPad + 0 + + Wrap + NO + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 4 + ImageCounter + 3 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-17 06:50:16 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{244, 164}, {855, 938}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{0, 0}, {720, 783}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex.png Binary file 2013/2013_12_20/with_env_ex.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex1.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex1.svg Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,663 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex2.eps --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex2.eps Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,1170 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 1908.000000 398.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.9 (Build 13A3028) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 1908 398 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +{ld}repeat pop +/SC{ + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd +/cm {cmmtx astore CM concat}bd +/W{clip newpath}bd +/W*{eoclip newpath}bd +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop + true +}{ + pop + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse +{ + { + { + pop pop + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add +dict begin +{def} repeat +pop +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end +}bd +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def +/cp_proc/x_proc ld +/base_charpath +{ + /t_array xs + /t_i 0 def + { + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ +findfont dup length dict copy definefont pop +}bd +L3? dup dup{save exch}if +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def +/setupFunEval +{ + begin + /nRange Range length 2 idiv store + /mulRange + + [ + 0 1 nRange 1 sub + { + 2 mul/nDim2 xd + Range nDim2 get + Range nDim2 1 add get + 1 index sub + + 255 div + exch + }for + ]store + end +}bd +/FunEval +{ + begin + + nRange mul /val xd + + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd + val + add DataSource exch get + mulRange nDim2 get mul + mulRange nDim2 1 add get + add + }for + end +}bd +/max +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd +/sh2 +{ + /Coords load aload pop + 3 index 3 index translate + + 3 -1 roll sub + 3 1 roll exch + sub + 2 copy + dup mul exch dup mul add sqrt + dup + scale + atan + + rotate + + /Function load setupFunEval + + + clippath {pathbbox}stopped {0 0 0 0}if newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop + grestore + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd +/shp +{ + 4 copy + + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd +/calcmaxs +{ + + xmin dup mul ymin dup mul add sqrt + xmax dup mul ymin dup mul add sqrt + xmin dup mul ymax dup mul add sqrt + xmax dup mul ymax dup mul add sqrt + max max max +}bd +/sh3 +{ + /Coords load aload pop + 5 index 5 index translate + 3 -1 roll 6 -1 roll sub + 3 -1 roll 5 -1 roll sub + 2 copy dup mul exch dup mul add sqrt + /dx xs + 2 copy 0 ne exch 0 ne or + { + + exch atan rotate + }{ + pop pop + }ifelse + + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub + /Nsteps xs + setupFunEval + + + + + + dx r2 add r1 lt{ + + 0 + }{ + dx r1 add r2 le + { + 1 + }{ + r1 r2 eq + { + 2 + }{ + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs + clippath {pathbbox}stopped {0 0 0 0}if + newpath + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and + { + 0/Function load FunEval sc + + + + + { + { + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { + + + + + 0 r1 xmin abs r1 add neg r1 shp + } + { + + + r2 r1 gt{ + + 0 r1 + r1 neg r2 r1 sub div dx mul + 0 + shp + }{ + + + + 0 r1 calcmaxs + dup + + r2 add dx mul dx r1 r2 sub sub div + neg + exch 1 index + abs exch sub + shp + }ifelse + } + }sh3tp get exec + }if + }if + + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + + /d0 d0 di add store + /r0 r0 ri add store + }for + pop + + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and + { + Nsteps/Function load FunEval sc + + + + + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill + } + { + + + xmax abs r1 add r1 dx r1 shp + } + { + + r2 r1 gt{ + + + + calcmaxs dup + + r1 add dx mul dx r2 r1 sub sub div + exch 1 index + exch sub + dx r2 + shp + }{ + + r1 neg r2 r1 sub div dx mul + 0 + dx + r2 + shp + }ifelse + } + } + sh3tp get exec + }if + }if +}bd +/sh +{ + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop + 2 index sub + 3 index + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd +{restore}if not dup{save exch}if + L3?{ + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if +end +setpacking +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 1908 398 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Osaka-Mono +%!FontType1-1.0: Osaka-Mono 1.0000.3.0000 + /FontInfo 1 dict dup begin + /FSType 4 def + end readonly def + 14 dict begin/FontName /Osaka-Mono def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /a5f put + dup 34 /a63 put + dup 35 /a6f put + dup 36 /a64 put + dup 37 /a65 put + dup 38 /a20 put + dup 39 /a31 put + dup 40 /a28 put + dup 41 /a69 put + dup 42 /a6e put + dup 43 /a74 put + dup 44 /a2c put + dup 45 /a2a put + dup 46 /a78 put + dup 47 /a29 put + dup 48 /a76 put + dup 49 /a7b put + dup 50 /a2f put + dup 51 /a73 put + dup 52 /a6d put + dup 53 /a68 put + dup 54 /a67 put + dup 55 /a3b put + dup 56 /a7d put + dup 57 /a61 put + dup 58 /a72 put + dup 59 /a75 put + dup 60 /a6c put + dup 61 /a79 put + dup 62 /a43 put + dup 63 /a62 put + dup 64 /a2d put + dup 65 /a3e put + dup 66 /a70 put + dup 67 /a3d put + dup 68 /a6a put + dup 69 /a66 put + dup 70 /a5b put + dup 71 /a32 put + dup 72 /a38 put + dup 73 /a5d put + dup 74 /a2e put + dup 75 /a26 put + dup 76 /a22 put + dup 77 /a3a put + dup 78 /a80 put + dup 79 /a33 put + dup 80 /a30 put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[256 0 1 index div -49 2 index div 262 3 index div 220 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C000000046670676D00000000000000A000000004676C796600000000000000A400000E08686561640000000000000EAC00000036686865610000000000000EE400000024686D74780000000000000F08000000C46C6F63610000000000000FCC000000646D6178700000000000001030000000207072657000000000000010500000000400000000000000000002000A0000007600AB00030007000037331523371533350A6C6C0562ABABA6A1A10002001C006E006400A8000300070000372733072327330750061A073A071A066E3A3A3A3A0000030000FFFB008000A600080014003300003727061514171633322736353427262322070615141F012327062322272635343726353437363332171615140717363D01331514512A1409090D1016170504090805054819190B1218170D0E1D110B0B110D0B091E2503131A3411140D08095C110F0805040508070D591E0E130D0E121B18170E100B0B08070E17172D0B1405051C00010014FFD9007000AB0011000017152627263534373637150607061514171670281A1A1A1A281F131515131710031E202829201F011003181925231A1900010010FFD9006C00AB0011000037351617161514070607353637363534272610281A1A1A19291E151414159B10011F202928201E031003191A23241A18000100110045006F00A600110000372717233707273727371727330737170717651E0314021D0A20200A1D0214031E0A20205514242414110F10111424241411100F0001002CFFD30054001F001400001735363736352227263534373633321716151407062C0A05050905050505070907060B0D2D0D0109080A05050807050507070F110E0F0001001800390068004A00030000373315231850504A11000001002FFFFB0051001D000F000017222726353437363332171615140706400705050505070705050505050505070705050505070705050000010003FFFB007D00A600030000173733070367136705ABAB0000030007FFFB007900A60008001100210000370716333237363534073726232207061514373217161514070623222726353437365F37090E0F090D4438090F0E090D24190D13130D19180F12120F73590F0E13260B2F58100D1324186C12162D2E161212172D2D161200000100140000007500A2000C000033233533350607353637331533756127171017101426107D100612091092000100100000007100A6001E000037331523353437363736373635342726232207353633321716151407060706244D6106061D1A030407070D121A131D150C0B060729141212120C0A0B1D1D0607070A04070C120A090B0F0B0B0C2715000001000FFFFB007200A6002A000037351633323736353427262B013533323736 + 353427262322073536333217161514071617161514070623220F1811110A0A0B0A1D0B0F130A0907071011140F161D0A0C1B0F0C0810101C0F03140C0A0A0F0E0B0A1009080C0B07060912070A0A12180E040C0B10160F0F0003000EFFFB007400A6000D001B00360000370615141716333237363534272627363534272623220706151417160727263534373633321716151407161716151407062322272635343E1B09080D0B0B0806090C1607070B09080705040204150D0E12140A0B1C1905050D0D19180E0D4D15130A080808080908070B23101108060606070805080617031114100C0B0A0B0E161614080D08120C0D0C0C121C000002002FFFFB00510078000F001F00001722272635343736333217161514070627222726353437363332171615140706400705050505070705050505070705050505070705050505050505070705050505070705055B0505070705050505070705050002002CFFD300540078001400240000173536373635222726353437363332171615140706372227263534373633321716151407062C0A05050905050505070907060B0D0207050505050707050505052D0D0109080A05050807050507070F110E0F820505070705050505070705050000020007001E00790052000300070000372335333523353379727272721E101410000001000700000079007100050000372735170735554E72723827123839120001000CFFFB007100A7001900003715062322272635343736333217152623220706151417163332710E121D141414141D120E1011120C10100C121115130717172828171707130910132223131000010025FFD9007900AB00070000173315233533152338415454411710D2100000010007FFD9005B00AB00070000372335331523353348415454419B10D2100000010007FFF000790000000300003B011523077272100002000BFFFD00740076000C002000003735262322070615141716333237062322272635343736332216173315141723265D0A0A110C0C0706081513121B100A0B11101B030F0A130414013132030D0D1A1307090B1D0D0E181F14130101521909070002000FFFFE007400A8000C001E000037151623323736353427262322073533153633321716151407062322272623221805120C0C060807152613121A0F0C0B1112190304040B4332020E0E1712090865A84E1E0D0E181F1414010100010011FFFD007200780019000037150623222726353437363332171526232207061514171633327213121A1111121118170F1311120B0B0D0A121116130611111B1B12110713090C0E12150D0A0002000CFFFD007100A8000C001E0000373526232207061514171633323715233506232227263534373633221617355E0A09120C0C070608152613121A100A0C12101A030F0A + 3132030D0D1A13070999A81A1D0D0E182013130101340002000EFFFD00730078000900200000373335342726232207061715062322272635343736333217161D01231417163332243A07080B090B094A1B11161110101116140D0D510B0B0F14450310070808073F110B11101C1D10110F0D2104130B0C00000100110000007900AB001700003723152335233533353437363322171526232207061D01336D2E141A1A0D0D18042014070F08082E5B5B5B1005210D0D021305090B1507000002000CFFD000710076000C002B000037352623220706151417163332173506232227263534373633221617331514070607062322273516333237365E0A09120C0C0706081513121A100A0C12101A030F0A1305050D0E1518131715130A093132030D0D1A13070905101D0D0E1820131301015225110D07080A140E0A09000100100000007100A80013000037152335331536333217161D0123353427262322241414111A10090913050408194444A84D1D0B0A224143150806000200100000006500AB000700170000373315233523353327343736333217161514070623222726442134213416030405060403030505040503101064102A060304040306050305050300020012FFCF006300AB001100210000173516333237363D012335331514070623223734373633321716151407062322272612160511070731450C0D1A0D290304060504040405040505032E130509071A5A1066230D0FCF0603040403060503050503000001000D0000006700A80007000037331523352335334324382236101098100000010007000000790078002B000037152335331536333217161D01363736333217161D01233534272627262322070607152335342726232207061811110E0F080605040B070808060511010201010304050708100201060305084343741A1E06080C06100907070811584F0E01040101060717404F070A040509000100100000007100780013000037152335331536333217161D0123353427262322241414111A1009091305040819444474191D0B0A22414315080600020009FFFD00770078000F001F00003732373635342726232207061514171617222726353437363332171615140706400F0A09090B0E0F090A0A090F180F10100F1817110F0F110D0C0B16180A0B0B0A18170A0C1011101C1D101111101D1B11110002000FFFD300740078000C001F00003715162332373635342726232207353315363332171615140706232227262315221805120C0C060807152613121A0F0C0B1112190304040B4332020E0E1712090892A11A1E0D0E181F141401012D0001001A000000710078000F0000371523353315363332171523352623222D1313121D0E0712010717444474191D042A1B0100010011FFFD007000780029000037351633 + 32373635342726272627263534373633321715262322070615141716171617161514070623221117180E080604051D1506060B0B19131013110C080605051C1407060B0A1C1606150E0505060604050A0807080A0D0B090611060504060503040B0708070C0F090A0001000AFFFD0071009A00170000371506232227263D01233533353315331523151417163332711609150B0B1D1D13343407060D0E1611080B0B192F102F2F102F1107070001000FFFFD007000740013000037353315233506232227263D01331514171633325C1414121910090913050507193143741A1D0B0B204143140806000100030000007D00740006000037330723273317691433143316287474745C000100060000007B0074000B00003323270723372733173733077B192323162E2B191E1D16282E2E3D372727350000010003FFCF007D007400120000372733173733070607062332273516233237363B36162A24142D100C0E13021212020B0B0B056F57576C25090B021102080800010016FFD9007300AB00340000371615140706151417163B01152322272635343736353427262B01353332373635342726353437363B0115232207061534171635143917040306050F1010180B0A0601070710090910070706010A0A1910101004060502420C140C0F0B030704051008070F071D01070B06061007060B0519020B10070710040407021C1808140001000DFFD9006A00AB00350000372635343736353427262B01353332171615140706151417163B01152322070615141716351407062B013533323736351427342631344717040305041110101A0A0A070108070F09090F080706020A0B1910100D08050502420C140D0F0905060504100707100C1801060B06071006060C041A12050F07081005050606200609140000010003FFFB007D00A6000300003733172303136713A6AB0001000000030000FCE44FCE5F0F3CF501010100A692F1FD0000000000000000B37C66DB0000FFCF010600DC0000000A00020000000000000001000000DBFFCF000001000000FFBD0106000100000000000000000000000000000031010000000080001C008000000080001400800010008000110080002C008000180080002F008000030080000700800014008000100080000F0080000E0080002F0080002C00800007008000070080000C0080002500800007008000070080000B0080000F008000110080000C0080000E008000110080000C0080001000800010008000120080000D0080000700800010008000090080000F0080001A008000110080000A0080000F008000030080000600800003008000160080000D0080000300800000000000110024006E008D00AC00CD00EF00FB011701240159016F019E01DA022A025B029302A402B302DA02EA02FA030503360364 + 038B03B903EA040D044C046A048F04C104D1050E052C055D058C05A505E20604062206320649066906B006F80704070400010000003100D00018000000000002000C00060000000007E8000000040001B801FF85 + 00>] def + /CharStrings 49 dict dup begin + /.notdef 0 def +/a22 1 def +/a26 2 def +/a28 3 def +/a29 4 def +/a2a 5 def +/a2c 6 def +/a2d 7 def +/a2e 8 def +/a2f 9 def +/a30 10 def +/a31 11 def +/a32 12 def +/a33 13 def +/a38 14 def +/a3a 15 def +/a3b 16 def +/a3d 17 def +/a3e 18 def +/a43 19 def +/a5b 20 def +/a5d 21 def +/a5f 22 def +/a61 23 def +/a62 24 def +/a63 25 def +/a64 26 def +/a65 27 def +/a66 28 def +/a67 29 def +/a68 30 def +/a69 31 def +/a6a 32 def +/a6c 33 def +/a6d 34 def +/a6e 35 def +/a6f 36 def +/a70 37 def +/a72 38 def +/a73 39 def +/a74 40 def +/a75 41 def +/a76 42 def +/a78 43 def +/a79 44 def +/a7b 45 def +/a7d 46 def +/a80 47 def +/a20 48 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontInfo 1 dict dup begin + /FSType 4 def + end readonly def + /FontType 1 def + /FontMatrix [ 0.00390625 0 0 0.00390625 0 0 ] def + /FontBBox{0 -49 262 220}def + /UniqueID 4282574 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C94D62A069D16B42DC713A3CCB6051AA434463E2559D7E1B4AC0CAF8C8984040B22F316BA797179BD86033CC155C34D89F4B22CF711787C71A687EC758ED4C38B72A5B874A259301A47B918ABCC24526DF3F774BB0AB2A0720428F3543B381C2D23D9E611BDC99BF9C1D94443ADFFC125695EC4FCF2737EB93547BA1F151B43C9FBE82556496AC39437CF8B3F4B088A84307AFC58658426C47EBF4345609B18475D8D73B4A85BE868C3E5924E8B5E708768EF436BBA91B7E30DCEC401D1209CAF33504AB3E1319BB4002D5B9B0EC2524E94508F058630A08175BA02A810425328222A2408C1035D030C7C6FD3A101D7B782B58A22DCA39E37A65918A8E516972918965D9EA4E20F84053AA1322CE9921F319BD977417B14FD8A1E745BDB86F489AE51DED45D89C3C3931A5A12017628108FA44E06E0253DD6D0C8367D7BBE93A577FCB6E41FF0F58945181442D36EC7E21923917BCCDB3EB780D92572754D9250B062FF5799FE3DAC8A15AB6F889A6A54A684908C36A217B98CB33913805FD8F6B2EBD7B14221770B39A4F90F7A170193CBD1E3FF505FBE7013714610866F491494EF4E6564B2F1AB99F4A1D5264D4FD96BDDDA67A6F03C41E29B9FF1B4057683AC763922F9642A893B52211600DA4AD1CDA96D9C797BB87AF8F38C673F34E082CF7AC09413152A36372C8FA08BD7812748582A4396CB647E53C194873E11D2C24D99A2367CB730594AA8953DF5D9AA02C6CC03B5D7CA5D5CAD2B67F27FD919C887 + 8F78280C57043465C8A6F9AEDDE45E17DF8E49EE804E3E1FB0CC5E8BCDA89BD883A7E534EAAF8F3FC0EA08F23A0C06360EF0B01086DCA90F007DC6EBB935B7084F75A2293DE87358E8D0895A3F2B9C55CCC11A369D91FDC970DB8B6C40DFC40487FE3E5481C83F346B6D27C0C67816227550CBEDC45A61717934B210C2AB466E8752B08AF26E428CB9B7E52B636D1E8CB351509F68399F7BB50A4A1C2AE88EFE617BDA5A0362782D00D69FD78CA2B6479539B4816143E0C3CF6497C48342A6F041091787D302550A67F5BD1E7B99BC00B9D2EB1FED033A23B5137A7138B814A5FB119A09B7BF9E73ECF44CEB154F3C33982A0D85846ED0913E7DA5627B31F845EBE9F004CFCA45D1D52CFD63BAB3A7F2D43D1330B64EB2044F3652A43B32DC67E8898E1369FE938FEBA735DF1618C4FFD6B1B873F96C154ABADD5127E3B2B08F7CD1D352BE28F6274B06E5876969D4733555B35D307633F934C53D80DCDA5F2B0941B8A893888A8E4DB7AB930431FCEAA672B7752DDD169DD53CBD8B6F0E1907E5F55860E039E3240C5977FE7AAB37E9F427B6CBE06A1A6D68975CEB5D4A7A42C87E4C8885BC57C53B3DE6E2C2146FBBE80DA7DB6E476480470CE1B3E1CDDDF6846C9274DA92D562A789F59B3D314FCDFFE7E592D9A4F17C7E9A31F8A509703F20B484E6B81C7EAD9A77D6177F26E48084AA817C5D4496A49A63857BD2DFF4C7CE18B0A29C11C088FC7FB9E879678D92748F47166F5241F3102DD4CADFF8105CD9C928EF6481DB971562CE9517916FE5D618AE4AA52E9810B732D06736ABBCE2B419AE8251E816164E1011DE1B7F61C42E566A4DCB6D68EBAF7F631AD95D7FFB7B3C727F64F7EEC1A9430D2F57A2B17AB32340E9733749DB1061391D0E032222482632863B5277971617E42CCFDE800CBC4FCA1BB98E051FEEE1E0D65A3BA6F92B0ED84FE70919605D456022E869FEF7F72D4F2EB5E7E9506E7AF6C5C5630ECD639298AA4BF475FE523A37A455ED693F64F0B0B8DA108BE0EC8A3D689074F608D82DC012F6233B51211F61D9A90E175B344F6234711A1B1126D2EEC050091562FBB364CFDC5EC7BCC0BBFBD285862C2149ADE51C793150CA2F3047BC21C2E5DED9FF614C5E6F0555604CAA12E50AF6514E9F02FA92AB12E1E7090CD0D640D685185E633E31911835351BC4086A575F859DC8CB8C8541F258C1FB361AE0D6F99CC11B98946F2E62C9A5B8C614EDB4ABA92A6742CBA5D2988E956937EDC08FE5241959C59BC135F7AA78D6EFBFDFB4E230EB1AAA6D7F345B86635138212679765D53EBC88E9028777C549ADDC337474B55DC0494F054D9582A4245C9F24E90EBAA182FB2121F0A5A897BB772EA93572B3CD1BBA3EB165BCD597B2E5D47864DEFA2E063B9B98FD679AD7165D16BDD85A0DDC99395E10E424734068C5F2AEA6F2813 + 1EE6A00FBAE0EBDC126E8F282986A35D05A2D0CC2E47903221F95D80A1EF62980DBC2FD6384FA30852F9D33FF483AD7BE59F47FD940E87A20B7CB783B12751A1B4B0209AF2790D7FE3AC1EAECCDD3BD5C2515EFCA3C61D62EEDD6CC832E0DCE36FF45907DFC266F4614BBFA30C1645785EA67F095A7E809CAF3BB19981B80B1458CDC941B952DC8CBC7FD81F376929E32756FCEE11FEEB907574CDD0BE43F9423D9AE75FB2380910BC60FAD69F1B6A55B96278252AFE8154092E068340EE35122DC64EE0DE6F1EDFA0A4A0868758DD26E88E6F5A00E445816D74F469D2A38E4778FB810C32DB107B04142B8518639A4B9FE7FDFB692EC1FD30EAC6407A17A8F8DF78A9EA71CC499C6318266EC5B7EA8A032316D70CB4CA3C1A481CBA79110D8C3339ACC18156F11E01DA417A930F932EA90343FE0CDF23D6BD540A914457841B4D2532675F50B0C5290294B59D99D924B8A5DC68CE3A08AC7EC665350521CD1F1007083E28E9A16A39FD17D2B4379D85DD681F836D98ED1519C61083A898BD1532212002C97378B7CC6A697E8B8DB8E0BE3156FE6E7809711EB00066C88174F5C671A6AFBA766B0173671268FFF4E926C8785E16A11E5A3991250FA5EEEBAE8E6E4BFD7E163ECC621708A2EF1807AB4EF6F17C9C47AC40A4E228667DDC03DCBB5EEB8E6E6DA13207BB3C516F6620C707EE4ECBA937A1D3EE5E01E7EAFFA0DB6080D049887353CAA88E3865E47AC2430168B4DB06EEC44346543073AD6F3FECDDCB84951121561D3A451FB54303D4E88909B876F3C8DFFFD73A689FB1A63D3EFA98B9A00FEB03A1AD737B1772032E78BB5646672472A49F0CEF534135327789E2488F92FDB200939403B6806EB240782BA1DBDDA801EEC6FACBEE9C9866E53B429E609A858D50BFC8A0086C2CC4BCBF0B2F63D51626E53799EA3F7766DF3780CC98A629B14439F0CFC29E1B9D6C52966F2D220D5CD69C21294B95F86862304772479DC3F4EF0CFE0C388D086C0C290B57C8F5C597F57F1081CE602135B67D38F9AACF7B4F2D74EA277843BCFA7BA920B9554C488EAD369B7A3590AA35CCDF942A8F9BB843F88CA62CA06FB2496FDFF21B572FA045BDB71CD4444D024FEC6C5878D5D0E6ABD4D96642273F01DA9931D4284282868A3BB0E5569C89C1B3757BB0DF8B5FD7B8A86717A232BCA1076D6FAD24AFB457850C7EEE4E5F23ED081FAE76B39DEF5BBAB033E8269D838B7FBC0A17C7C0AD0C7F702B751BB69824AE18807AC10DBB7424657ABA7B078D4D56314837032B6C6C3F1E564547309AFDE82FBA7D18B067CD5DD8D9B1A7FBFAD628C1EABF1E6CC0F10A94BE39C694D460F2082C0B924DB80BB05B26AAE0CA0F6BB59E120A0A1065521BC32DAF7797690BFA558399F910BD7C717B6945E22EA99BE8456D83CC4FAB056C8642E23D1B6E4C2951D9906C + 94AEAC04937B5DBCB144F062F6F9B577D5CF62F5972B62E942110DE3B28DE7F77FA31A4A2BBFA84B2621B0A80435C1E297E9A627AC2AC807E17F3931D424120447B44B2AAB1A954C4070DD3F94567E524EE6AB15D5A66525C222C7F24B93BC6A10D8FC07121DB01C160DA12E8939AC119DF170C213B9525F9334447B7851FB0C3A7CB81C6D661C13BD338639056D15E58B20FC44E9F2316A6FAF367A499C9E2DA6ABCB285A988398430D2BE5DEA61877D32D217994E42B7DA9BD589E12A16C33FC68FC25ADEF6E42E2E610AA2C9A78D6AC26F17DB8DC2F5A95208AC8686F4A8C053240F5E7ECFF77B8DE11D2A05473A102CAC4110FA317DBFB0B6180F6FE90F2EF7C4E5F4780D978C837079D05C708ECD2EC4194461B846CDF8511C404857E2D95868F3B4FBF2D0A307B49049A75AAD5F5B248885D897F314DB6E657F5E2E164BC740F3A38AD58B4A2C1F28DDE5F60EA251A3F426BEFDDB76EADAACA66203FCD81F9C18203A2C3313C08BCB60DCD6DCFB325CF7F17FE30712AC3601D64E22252DBD710136811D4A3FE5396B21B2D221E3D0C94B1D6D329D2F0962B8286AB819EB2EA1072E9F1073BDA4F14E800FC90ED1B7F554024156BCBB7901121BD221C56E4A4EA52D6A0402A36A90A8329FF7F6453AAF21E62534E9F55D5ABE6E6034ADEE448248F12CC6EAD97196FDA0D67AEA4981A109C44BE8813D9A3C719291C24C723DED0884FE7B44632F189F3126B8B406518BA746479C87B286A07F3A53F9D951F63A411752FD7E0E7E3C4AFC173264BE335DD1DA9FE61B71A45E5AFABC360B7A6E0A25B9C14FDB5B3A2A8A34C3633439B611B3D2DA7D98466EC6B73EC4566EBFBDA965BBEFB6E0FFC7EAFC635A56F6FCC9227DDC0A569B1C1CA6D0A395AE8301AB56D239DC5D72A0726D8E6AF1A392B2BAD06D98E6275650A764BAFF8F88DF2908E5A4CBD627A5121FDA507C9B2716B20DC72317BC70528B185B7CD86450394E46574E254B9D5AD570C823F741C2D20BCEA03F39C676B8177DD44B08D8E580C50D572DFB1A7F89FDC442427207CBDD95B83C573D827E40DBBD51EB7FE98E6088F30C66C22D2BEF591539168DD36C89E7B8DD840E2F411DE88B32C8AB29611371F162108FDC2C697CFBBE7EC03E6D9DA261A964F00657D18714E110837EF7C9532AA34186BBDC84F6D16952BE1E59A90B9276E9CE900BA536D6FFF8CBCD90BD2999967177D3E5B6ACB43F5C1B992A2A8E5137C3F56B7D81CEE8D0DA9773A13945C87470BD75BA2AF8E7395C423F072C4D5B31991EE477DE953A4928D3EF54E3C682121C0491CE7276E89A95F9C7101681B3A36F5158A58F16665EA896905EC04855F29AEB7B791123512E5773CC1F8803A67DE77DDA51BBEA3DDB993992EC75F73535B0E95883296BFEA3566A7AE265EF4B918D46FADE1DA265A50EC37377EE1 + F585C581AFAE3C400F4BEBBD5CBCCD83706F658992FC341CF9CE33F7D9D328FC37AF689DFFD3F5232298921FEC12B18D264673C951E74CBD8269692F66CA754F8E1132E99CE578C650DFF7BCE65DCDEC1E7335205730DB84D308A86F1FEF63F9079A1B70EB5B22A97F1F9472CE9AC58E2AEED1B3B2B67D4BCEF0880F74DA90FE62432AADDDC74426A842523BD7A3D44C2ECD4E401E59874F6CA2E843A015A9247057B966387A30A204955A4298E00A9F28A7D453AC916A7C25D6D8E4E8FA4B64812D5E98747AE5391FCB3AA43D75CA0E694895ECE41785246AF9ED7510ACC00428A54A80FF95B98823370A5A13EA2CD5AA4280593E3DB07A229628D504E4859DA4E06C5027C28F4C38F9B32F0DDEF375DD4567C6C7DF571985582FF888577B8EED3E0E329E4510C81CE58D370EFB5515283592002B080A8972E267E388648C244F8348B49D6A3D94DD4A7AE530454BBDA146B11FCF149AB7471E14C0D28D2332A01B69A4E6C1C44EA64BE7C4DB0A7E360DA468C21847E93ED3746ECDC0DFB1A318A68564FB5C5FAD626120D1915952B3E9BB038AA49E71857BB7FB2BD644A1251C2603199466383E6BD1A47CCF8F8A678B2F10DE136BD54077A7E94E9B19A02F6018F62BEA2FB099F81F5ECB1E0D30CCC95443CCD513A8C6F0E2377F8E5237F62853434243C114EE12AF06D4C5AC18237FC4675BE5CC5089770856FF18E7A7FA67AB2D8C556DC7642C0EE717C6183906161E9D03935580E510F1E8BB5CF9559828E6F3894FDC48D94B4D37C787A896F09B3C1120F9F3B2AB6C2D7FE86F6BD06D16EB81D789D6D93F7C53466DFDCD3F2F672A77CDBD3993F910B4C9AB4EC3F4745BAB03C6D72D2690C071F61777192D3416E4275A72D96C247315A216F983D8836463DBEF1782DEBEF25438F683D4F566CC64A0469E4F33A3F5C00ECCF3FC50F1B6AE83EB0C181B6A27DBB3AD7CC04137DE1EAE6DCD16E8DEC598DED8B1617D05184EC1B30B5999EB165E17A8D580CA0632B5D2F3326F4CE48D07A784688BFE5F21E49F0410F768BC5F68A0DD3275F6E6B5F412CCF0F0C8B9C89638FB32C890D2E7289D6F107F0008978A378722E40AB31D156458D53E56D54FB87FFB2DC8A7489F03F9D2023A4D27C934700DAEB26BD1CF2F53DD4B285931243A2AC63104EEE313FF63EF9D29C166699AE998AD495F9F5022EB35EB93432260E40938C9DC668E101A66A7FFED7635990766405C81EC60870951DFA5FBCEF9406C6B7EFD8D3DE0D32792E2725BC9B6C5A936C00F16375AD70808213D5F3B2CAE0BBCFB30C504BFFA0514B949D91455CB28063F283177A33FADC93C86FC7A3253F55C728DA9D5DB2FDC135061468D27FD75494466DB68B42A81248FFE6DB1593430EFD831D1168D1299A2A23C9B527E3F9CECCD04BDE3C2CEC1BC1CDB3DDED57CD05E91C5B6865B + C8D469E86C4C3B601C7147C6B5A5862C1C54BC8AE57642F6B851119FA2F9D9B3263ACEE8F06333388EB948295A69070F9EC142208510AC018F6657160312405DE0EE02B54A6E383D278DA5C769625B8B2F3E93B115FB2F83C116034DF2E929B2CAC808744FF7980D5B1D771C09792CB7B953E05652E7662933A9117E67702F487A694CCFB2766EF7B70EBEAC754EABB59F2876A71F6E97E7D130EE4FDBC4C7AA2CA452C5ED9C8DECFDCC3658D82BA234D1EDF5DDE14E7A8C207C86C48604DCF45C7595380B4FE414004F88B205CE00D5226B660EBC62237362F3999B602F28FBE44DCBDA2D2E31F6566C5957ECC3A28E3EB2A1415F41DEA4F7F5362FB8E1FC6F931512AA692890BF2CB2D6F996BE98BD53F56D26FDDB594A78811EA2C1911F96C12464C831933F792EE24AA0B10AEB503432C0E8EBA3DF6B3A38C9450216646EF5BB1F3E4F1E865BEC11273E2D922EB86F2474368C4D40D2519282A5332743DB1B1248CA73C153F829F2342012F7DD1D57E1E376B68443D4DCC7FAE6C8D2A59083269FE6F3B025D10E7D24AA2276E9541D02FDBD563E599C1CC8F4C64D52A5653B0DC8F1C406A099EDBF6928647F9004A749C74232B8A161BDCDBDEE8D3C87E3D82553075560A2BBF99508E5910EF752DFF83B2591EBC49C74F0F3D522561BCAA0C3F18A9F56C46DCC03E8048515411E149B386C3079B2F8297536406B8EE173545496B4957657F401362B6C576FAF81110F7397E6A97FE9113072C440280F217CC696FBCF2243F8D7A394668F45C7B859762BBC42B3F598A448EEF5E3405CCFCCD38BA9008EE7E38B1F098FDB20A6B9734FF4AC0230C8C0D04ABF7746523BD152708DF03505E6F3E110 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Osaka-Mono cguidfix +/F1.1/Osaka-Mono renmfont +%RBIBeginFontSubset: HiraKakuProN-W3 +%!FontType1-1.0: AAAAAB+HiraKakuProN-W3 001.003 %%CreationDate: 12/17/13 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition -60 def /UnderlineThickness 63 def end readonly def /FontName /AAAAAB+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /uni3002.635 put dup 1 /uniFF1F.641 put readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF1B347 379D624CCBE3728B3FCEB06CAD89F683033F68423A0045251C1D05B98F791A7080A26D7D62EFFDBEF6CE4DFB44C8A789 CFAD7CA84E7DAD78569556AFD5107D5BC2998E752D38CCF8A5C31B93D304B4416C683A8953F08EC406B919BB1D4BB27C 23488028B8EFBFB302DD47D108000486F05639CF7CACBA17E08C161A29CBFB06128991FC5A39576B3B90B798AE5ADFC1 3F550646CF0DEF06188790214BAF5EFA41CB77ABF53BC8C6E902C2A4C89396C6DEAF3ED8A0CB7DB454796B533E6974F9 9C7649F786B2E5E81B63E9CC5ADD1F2E4E33BB0BC5D6F45BD6E01DFDD487D07453431E5A991A63A65A2C999EA4E545D2 0932EA96C8F15016D996F06F72AAF7BECCE45FE0C343E70330639C21D89FE676FB0512DC0FDE000D4D4DFBBD7C7C45AF EFE403AEF6CC4FAE80B57A2A583FEBBAE805C1B9868EC2C6619BC71E37EC8E4BC03625B3985A303D99ED23DCE4BB0733 DB8E09FD597349E9A29B0886B880991F755B2DBA4BD7E5C4C7F5DA608E0F759290617F4C49DE307FE885FDC5512B2409 21FDA16DA939F5A06219A2224923EFE663BED0360B38AF94A440AA82149540E5A7BFFDEB6440BB65D2F651835427B765 A5843CABED7B0A2A9C8E5E5B948E83D15BCCD24602347E8C6038FC6D35CE221E4D387BA6DBCE91649008256A66253337 07FED2645A8FB885CEE58F74C9AE79A839AB5E372EE2A9634A8D94B941728CE34575C1C599ABD9792FB76B323B464267 9790C695E605841B36C82FF229A5DEE0BB26824CD3258B8723269785A24F5D4217DD71E627F2A1FF603FF542318E14FB 75E9EF6814D7FF147033D2FD6E0ADF1E861807F1BC95DF7F868D00A7481132DF4B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType1-1.0: AAAAAC+HiraKakuProN-W3 001.003 %%CreationDate: 12/17/13 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition -60 def /UnderlineThickness 63 def end readonly def /FontName /AAAAAC+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF6BBFE 9894E98A45451587A0F2A611FFB73A088280BDAEFFB7130A2536AE538232C139667CDDAE99612166DE4E37CBFB1ECA9F 5BDAD2F3B03BB391034ADE0B84BC134B5CF66869530C3FA2D54E9081AE735EEEB61420AB9D08F856252569A789E4B94B 8A87E827012A4FA8C15EB5F07968B68AB938C5FAD581B6F2CEF87A0E1E96D571D45531A991B9879516AAF044AB17C780 93C359905990AB0E0E797DBDB99A64188AE12BD30CFD0ECA81990CC369CD1D746BF85DE8767900436BA57F9256E691BB A74FFA2F121BE405D8039B4045FE792A4EC34A5D7EAE59D3E8AFB9C36031F5179672C1EF4F482F348E081D6D161E6CCB F051B080A225D62FB0344E238635ADBFC239596B219F56100E14BE80B4EEAB7DA57ECB4E790FD76B9F1840AAA7C25510 38304F079A04AA1B65D9835E5527F7E9768F5C3ACEAF824805B580B4920707A305EED377A0BC64F28696ABA5872573AC BCA8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType1-1.0: AAAAAD+HiraKakuProN-W3 001.003 %%CreationDate: 12/17/13 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition -60 def /UnderlineThickness 63 def end readonly def /FontName /AAAAAD+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /uni3044.845 put dup 1 /uni304C.853 put dup 2 /uni3051.858 put dup 3 /uni3053.860 put dup 4 /uni305D.870 put dup 5 /uni305E.871 put dup 6 /uni3061.874 put dup 7 /uni3063.876 put dup 8 /uni3068.881 put dup 9 /uni3082.907 put dup 10 /uni308B.916 put dup 11 /uni308C.917 put readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF4CA5E E427E2991C1BBA8D8D869F618F24BEB4B22D4B1F4C7A1CE896C9D316ED13DF03C997D7EAD4D0555427E76B445F0A9C6C 1120B51DAD37FA8C3D568F14002962CAA095B5A6B83C7CEDC9E9B380BD7313FD4A3D7A0FD7217FDDC2243F4DAB5773BF 32D702413FD98E3D0505DE42E3EACF966454C9139A93E5E9CE292D7DF6D024DAD9AFDD841BDD6C805D18ACDF7E2D3442 F73C01F05BF50127D84CD9842297BA4B471EF818CDDBF939C64DC870515654951E89E55FEB3EAF7D386A419991E14C70 C0FA07A73E00E31FE4095E5313B16D1EF24AB599B726D2007A4765436DBF9EAFD5753C7237B6715D6C61CDF6B012491A 28808393355BE6615BBFB6FE212A205DED7935DEC964AEDBC7F242FA64FE4E61B717CE6EE3E58BB2A38DBD67EDACAE02 56F0F6632499A4A98919BBD957FF00454A56EF15484DF4371143EBBC5915BA214D769C2139A2E1A2E86D4A85A4DCDEB2 2D83D72F0A07FEFA8E863A9782E27D983EEBAF9AA8B32D24F64710E1FC88CA72C0AC9DD7244BAC999D6D7B30298E063B 048BAD503E4BAAABFFC32923910BA4BDD015AFDC84759879DDF488E5850C8D545F27D40B3BC2C024873F03F20D46CC7C 532C00DFD033A37CC73B09386B9FEF06D9E6DA87102BF9DC5E68D75B7F1B4EE361D1F8DD103955C58B8EA5C2778C7069 AFB5CC103CD40B095BB4766D5C7A1B98AAC2140A5601827A57D63FB721141D0C7FB9A1180156DA984CBEAA603F6C633C 374A917C66C16C125CA87AD7D141EFC4B98165C7FD2DA339F95436DC23E33EA08F6F383072EE512DC071D0018BD9A697 8F022EB9501235A25A4D742764B208A313BC1506818365C332B307AD5CD4CD42A5B4DFE4420592600A4DB3B9DF373F8C 5AB57ABBEDC250A1FCB65056DCFD10D92AAD36835F2F4E99105502AC5E8209BB5ACC8DA89A1E493477B4BC368554BD61 5EC50B6328E5D261125E3DB9E7598F8CD3DFFC7712D3EF9543CAFE9A042E2230471D2E3EC891BF7A13A3A5BE34C038D8 3CEE6A00D57AF80AC1D4AFD3958A864D60AF079B3C7A28BC24BC75B2A2762D763C53A5B0BC4C34CBC62269270E1D9FA3 CECB92E5719C602FB0451D49CCAC2194643EEAA2E195C55DFA0150131268258D15F2C3BF0B39F7053B9726C6F451586E FA62AFE75C3E83DF1B23A79CE511265CDDEB7348868C831C6338E9B0EDA36169AA774B4CD818E72F09768DC0BE848BC3 59857B9F3A70D363558A7845A22C65892E0F343AEB0A333962D4BDCD7E01A4A2F225E132EEF6835A68D9DE0B4FB2370D C53DC397A26D6CCEF7D210754F50F79AC6F7450DF177D13C1B4EEC9E435CDA806DC29DE7206BC4CC4BBC401920AAF24F 97F0648454382FDA315DF4A01D5F35F16D333B0A7E0552813C96D578655A2517A514A38C8529DB6BACF364CFE03A3E1C E039B0FCEE00061EB920F91324FE7171019BB90FD0192FA9AFF923E1531ACAF421432C961D41465A2A843DCED0694721 125D9B5301B7906FDF31178310D77C504612E7CBD06D89C2479FB0E2583CFAB9D3407AC56CAAA916F6CFA3993B2CC97A A898727665C17223149FE3890B42286F305D09C77416C4AB650137985FF0E88AE8DD20295829EB0813EC420B55419849 1D6F5C55B615764C8761B84D327F41AEA135E065B33ACB4DBF5F8F9EA0D5373268533EA0C8707ADFDF7A300E7DBA63F0 01951AB46C8FBB42770A1DEBCFCE5E633E6D142CFD9DB30F23D50806FDAD2950243343F204C241EA1F02D1DB561A4137 13BC8317D01966E48CAA4D51732C5B30F380FC13CB609E30DB77E8C5E4FE853BE2B4B394913592DCFF806EED5E0A2494 08544029B420C01E09EB4D51F4C292030C1846F1178A72BF51E2F558EE35A742F5009FB6FC368C76A0CAC4241AA35241 E2C438F1F456047687C511A9FBB78DFED599754A8191D1763095324F5A84F2B98AE3C043C5F137DE73CA558F51AF45D0 73FFCFB1AA525507DA92E3E3FFDE9E82824A0F1D961DE5C5B36EC3ADC0AF33BA888F807495C28D8829F1BC04F6E8EF0F EBC7D8619CE4797DFA578CB4E8CFD3A1B17B4DC973E4A2BA915523E8F7D5ED5DBC4C3273A3F554E14693D789F3BABC59 E21639DB4E294FB00F9A7592424CBCDD9FF59F40729B25733F08A8BA315E8FC6CEE03F480547F75673160AC424A9EC31 F2B82757318270392C167D9DF1B490C1FE19E5D4F2D1DDE9C85A1B6D8B3A4720E5863D869E4846A77CAB0DEDBE7EC884 4E4380A1A042A7DF5794CFF41ADF7D63B7A9F12FDA2E8287EBAD571665BF6A98CD9ED3205EB811BEA6F65B8F201BC069 B9B8FC09EC9DE3D5B394C0C3272D777B52D58531840043DF2E3C63B816F2C4277E1ECADC4265252F301E4A25413D5FA1 0ED35900B2164091083E5FB8C74C86F9E472242E14CD5EC9C9A714F5713F76CEE76B268D4D16689CADF647E429AE1014 6EB97AA5A5AC415D14449A092C6CA18EB160748630C7B255CF2148A7C611F6B74E90519F0008174F458EA0E6DE0E9BDE AEE8AD91D01C20879D754D7377C6ADA8DCA2229FBD09F323299F50C0676B41F3BB12C4B447CEA8708DFC7350D0859BB2 D76F7D016184CBB4113C11700417EDC90D22C4CD192A48B6C5A5E94BF5EF110D850CED60DAE8585618044FA4608D1A9A 574C8F12736E8B176677A3EB0C03265196484E8B33C867119D21EBD1170B959F9486756E6D9B97A5588B5438A38C2113 43281EEBE029687F6C90B19DC3EC0EF09F22A9CF6C6D39ED5B71CE7DAF74CBFA44206B30078B6B9D4CF32CA822362D84 89A1D22126E9E0047700B805862087DAACE46884C1364F5B8D5760BF6A389251564A609AADE47E1D24D4E3E14CC77739 8C976F98BE1A1219185AB46F108A9C0120BF6443F0933A448F5B8994D3D1B957C8A4F08E9F92FB66903D2E67A3695B78 0BE1B88DF753DCBD935590A942424861407A072BDB9DDDE6600F755C1CB87354B241F19D625A8A64ACEC0D2001B75CCE CB17DF5D67C87659E959706FEFF62CA5D3FDD71AA81A147B18772218EE8244350178F3132290620F45B834D8F08B0AAF 4E963F8BEE756CC3100A28026445DDF9D003E7CD0F90ED14B395C2E47E5BB58B9237763DFC3C9E7610674E92403D7B06 E1E649891D8E63DF6EFA6EF5317471943DA09CA649F36EC5859F9F0B11233C946001343F613E77A51C7E6EEC76985B5D 383CD4823B6B199D6CDB50F4FFC93B7733ED8D3E36FA177D8852B522BF558E18CF0CF19F7786FB83984A21F4C2904873 151661C3E0F7C090588702DC0150CA1C15952FD340A48ED1F7E7409D2F1933AAF465C7FAAA4D6D440E4BD3350E0CF010 6709EBF50C3EA36DAA987FB50C45A9A529B9A09CBCBFADA4501FAF22BD707ADC0976CA7127AF2E818720F3CF006CBE56 47456245B2A35D7AC1A42FBA5EF827810B884CD70BED46D74404AACB0F5394ADFCFE99835A5DC4893315246FA8E0199D 6E4FAFC14692681C0E79DC4A54734DA20D1E11149E73DA0D259DF0744B46DB7E507A0186DB483C5F5F1B034F81EFED11 54D90AA955DE6C18B5B3377D734911597F5E11113207E3CC2A6301ADFD19F56627BD0EF4F76CC72597CF361A224E134D F06A56D527E925F749669E42519B194B5521D6654324B42D9729FBBED11BBD5017D65486F7228DCE53A18329E8A1A9FE 2D812864C8E344A7F235C7FEAA900EC72650399221B963400AF2C272F266E7D0E4EA7556A9A747C01D70E26DAA04D6A9 089CB3D273B1DABC05A65787CBBE36C3498370BE229643A57570133D94E7053E1400C7D0EF59DC73CFCEDFEDC6A89FDC 49D64999D3B014427EF63AA9F968E78950998CE7469CD9DF4973228A189F89B07FE3C5D664F633269807DDA0BFCB369B 4D97C18307E6C024BCA6F42E9ADECBD5B8277979F3895028673CD22F0275E28332CBB1C95B49C34F5226570B854DF364 2F7D6870491D01E4FB650BD331843965BEF3DA1EE8D0C354D6FBC0EE6A2AF6610A1007ED3AA20E54E0944EFF7B3ADF74 47052DA565F942596D79F4BBB24E8DBF63F49ECB223B723203F6998F6B56062D72234944A251FEBEC840DCA10B094B5B ABC91ACFE8B770EBF371E0CB858115FA33D5F39264ED6688F0B075D6203C038E9A85E7AF7C00C047A2ED497128BB521B 4B1343047E79E70F2208DFBC63AEDE5F3E620F4B19DAACCE7AD98BAC05430C47739FB524241E45923E1DF171DD159703 BD8ABB422551F651E2B610405C1DA1D97F9CD31DFD31CF4A55591B9EB1ADC3E5EFDA4403A3E2ABF3B3EE883B6A599A14 73903739FFCB5EE32E7EF74473CED4B53CF0A981540CDC346EC9382A5BBABB9EF36136729359087CB0D6ACE619814EEC 4568D978038F8C443D70BF04DB7851C74DD3F8E8D92C91D17EFCAFF68CFB21BFF456EFB820916E312D8E4AD9701EB338 86DA0E93BF3F3253B49599599AB9E605D68A89F1AF2D186957961061592F166676EAE9B8A23C5D8026159BB491F70969 337D0935587224D82687F371326133150B93095C0E31FB01D06343EB68D5D91FD72EEB348639196298CB165DA53B3FDD 16E53F233483F8D70D9DEDF4BEAA7476DFDD36220E7A164EFC56AC706831AE49795EF58239EE92382464C6D83A97A815 62F3AB242CFA4CD235BD16BC835C9CDFB5E48907B58D0A5B8C6F7E656C52936BFCBC4B6163E5AFC9DCD79F9388A706B3 D3C377775B7CFFF226C5A3D4930A57E719798CC067ED85F205680360E4242DDCDF606F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType1-1.0: AAAAAE+HiraKakuProN-W3 001.003 %%CreationDate: 12/17/13 % Copyright �2003 Apple Computer, Inc. and its licensors, all rights reserved. 11 dict begin /FontInfo 9 dict dup begin /version (001.003) readonly def /FullName (HiraKakuProN-W3) readonly def /Weight (SnapShot) readonly def /isFixedPitch false def /UnderlinePosition -60 def /UnderlineThickness 63 def end readonly def /FontName /AAAAAE+HiraKakuProN-W3 def /PaintType 0 def /FontType 1 def /FontMatrix [0.0010 0 0 0.0010 0 0] readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /uni66F8.2427 put dup 1 /uni65B9.3661 put dup 2 /uni826F.3985 put readonly def /FontBBox {-386 -373 1232 1266} readonly def currentdict end currentfile eexec D9D66F633B846A989B9974B0179FC6CC4458BB4CB99E3608702C78822367AAF89059868F63F93207640A6BD5DA214789 139C491E02A37BF3866F2964E8D690D48D9F6C4A5EC22355F8123573812483E06B968AE84B5F20A982A0E65764753516 97AB8C6EA040355C5542F297D7A3AF28AB93EA0771E0D56DBF00F7CA9CE9FB9FC2E0ECB00D04D5F5F3F24B987B546D62 74971A477DEE12C44623C180BCDBA21172627610C4736632D1A4693E79719C3BC43DF5330790A52DCD4CF455ACC213F6 B1C4BA249179DB360225568161552A16682E3A3604BFC39D571B1F8F18375BEF1B05D6DE4413DDBDB2D936EF6A197BC8 7EF3384DF04E6025A3A7EFFF451D52E96886EE4B4169EC3DEEE64932AF4AECA3AAB81853B58042BA51BAD1CF1FE64675 4A29D2100BBA83E7F6E2F5DFB112F838CA7F659DA7A6373BB1B86BF204DA715F2942AD8690FB1C37539822AE991DF19E AFFBD3E70C395C40FA19CBA66F6F776EC20B6398A64B19208F0E64419A3F9DB393F17B6A206EFAE3B72BBB97405C4CB8 2801FFF79A60CA475287D576B5FAE301357949AC6E4F6EF1B8E41EC8819429C31C995A8D02C6F93131B3C3FD0563C5B2 C561EF5E734C7AC2E2F882889F4D04700D54FF4ABFEB4AC7C99214F399F62A2920477FEA7111FBD7B5EC77864EA25A03 88721F3165F5B0867D1C7C29DFA0394F00B032672FD41DA7C59FA55B9E3AF89B81799A0B27F1420BA48F9FA3B4693FDB 053C26BACF8A048849E5C5B195ED71C79113DD547B1468FEEC4C124788537CF90C3E1DB8793BD8E61BC72DD310B89670 021372EA4C700AD16A855D0917C5F105706F3206540AEBA75926DC784B77FAA8F2459B9A468E2A06318839FA8C08FA7A 8241BE54D435D7E1CE8BB877839B32897C38ECC3B2B63BFD6083CBD67A33FDFC81F548A162333DCE29E28232431AF514 37794B82CDAA0282850FBBCB8A0A9CAE35CC3991AA9FBE225251C0E9E3F59F39EC952D556BEDE7BA8BA8BCA5546B665B 2481E6F4EE3929FE02EFB2402EFDBD1FAC1C72B9CFCFE391E0291A712286845FD31A23988776578437DD63EE0C3ED76E A391B35D2355FED30B1FD068D708EA45C4BE46C0F907CAB826ECAA27734D9723CF21C18BB7B30819E095E25833FB53FA 83710AC4E86D305F2EE40138D4BECB08688944C0D68C62E39899104AD6E587EC0F3FC097CE79F16A2C519A3B4ADA4712 EFAA7D9C7A17BC5023789142657BA7D164124537929053C2A7A0D2E8E4E63CFA5179983FDCC84769897719FB24472CCA 9EA1577B22B8B29703CCC51B7A254194DD86210204BEB444EA4A0D95A73FDBE953C0BDD8ED9074555027E745D457D989 412029757A42BCAA87154D3479D568532C656227DECD1A94699177522FB013228446DE961EDC5C6CDBF3CD69FA2B5F7E 2137C9DE65C2B6327032847044CCA017F9B2E8177A4A4B6D7DDBAC578CC2E98EB131C49BE0E818CF78C8DD2B562D74A1 A9CEEEF49606115A53F15F15D080A3ABB6D990CFEA9C58779C7E388C90BF6C7C1ADCA733C293E821F528A8A25B16CEFF 39B103A0000382CE00343EB20473864E5EE271B9F16B48543620B37B95B5C016B6BDF34B868DAE1E3581207508587E0D 44760E91C5E8183D629898CD1FD0E1D2798E7DDBF7A2997AD582AB85DCF50C2301E775AC7AD675A059D273D13E77A7EA 38DA6F3B16DDF2087940136B83C511845E6A91B8D2B8E3D892958966D1E22B2BC977734ECA36565C4A0FD0DE93F30256 40B66827F52733B55B565D4C60B8A3A5AF5EA3F5DDE6901C913366D3952F3FBD1B3FA9E4DE1474E006280D61EF34D830 490F88722027E57AD7F3FAA60FF2172B435493B0B726C9BFFB996459F29609633507AF1DA7A9F84094F7C61B0EEBA767 0540DA3ABAE2EE2C565DC4B7A061BE2B5375121676FDE5B0C37B9D922C0CEF05056E77E641B66DEEDE17E1C6714DC4A7 B16764EA5D4C7331DE2B1472FC3E610FB03B5842F4B7D9D268CF3204EEE860B1B96EB272DF663849EC387B8135065F48 4863D2C1263604ECBA3F3BF4344916C70485FA8B9E61C9F6A83C70EDBBB3E3F5A63B0C9BBAE3A3B457D94E5669B60812 E2B88E0A767E549573484C03CD45364AA230827B160318E25F95D8ADBD664C1DE213CDC3454775A09DA3858AC9622DB9 4A66012A14588548B12011E64B1CAB38834EEA24AA78C7FDA24690D53CE063EF666119954BD289925D2667AB00834FD4 1EC048E6ADAFC36FE8971B9A3B776906C22414478E6D4731FD1125256E30E2ECEB7600643ADFB27EED6B7040DEEF0580 ABAF22E011D407D171ED48A915140FE722E3DDFE39AFB34043406803C8C0CD5D729243F2450E9F7AE57A85910D0C304A 290941ED125758860B66D4CA4E00F1F6BABC431CD4B2E2C0B9C2DADE8EAD2BB86D96EA93D125497F487C77BC15BA284A 04A55EE8DA4D52C365D845AD7D66672664B1B6D113376C4136E18A77579176C5BAEF5D063127ACEB217340F93AC314FE 151AC07E75980038953DE1ADBFF288C3C0CE5974F5ABCEC9B7780CA3A7949C232DCF7C36331A48DF504C45E69BE408DD D4DFAB2CE40717D026086DCD1097B8D79157EC780F6EE40798794591698E8894B0229F5541131FFC3777DA24ED84FA84 EA3C49B49D8B8168764BE94AD9CD73303A9C02C4B30273D995D77E093F9B20716ED7A8D1882A8A3ACE81154B739FDEC7 D3E560D8733BFD7A7FC51BDD337587FB4471C0E735DA3A11DE1CE7510EC7000A78EB103DD08B79D3CDC791077780EECA 983D71377D598198DF0A02F9315A92A1708B997FE3FE467B06970D58C676D1AE871F2A3AAF6E85BD087A77A92918B0AB D6DC855C54CF7A69CF96D20B74AD321DCC3B7018A7444D4F2A193451672F3A720DA457D38F60B5775C157059CC76938A 5E396C70D7FA75E105636F9F2C27F5FAC0A0DE4AC709899A15B85D546B0D6020B509DBADC91624359D5B74575D67408A 0B9D67AD007066510B5D0D1B0EC5244C1AEF02E521DA2BF5ED41CACA27127A53415F188264B610C4C837720CF95B8E78 D7B36D0C3E86CC7CEC6ACF71575B9D28BC7155C67B45CEC4DCB47D8474A1ABFC1CD4A284109F175FABC93B3020C61D0E 31C976A6D252B773FB84F044052F027ACCE86453F830BA312657154C8C25AF0D965497C02E9CD04B3BC66E08E942AC45 1D0ABC63A739E527D5ACDBFC52C6357FC7A5FD91740DB7584C3C12B1F5BEF9A0A44B5DB530603FF7F1696ADE05102600 5919B9E0923BA37B60C7611E7EF96DEAA7552F8B28AD9DD5C3A2A45D37BC3026CBFFC6429C69CB444D4C460BF6F7B15E E6523F1768568E1357DBF96488F4CDF3D9633C8CC2B3732B05A338622C30DAD2966CFF5B3EFCE688EFE2A0AE6040ADD3 567E90A16026A42A2EF287CF3D8ABA5A6E6E251938B96BC6D38EE53F70163447DFB2EFB45D5E609E135AFB66185BB12C E5950CEBFF13E5DB2848616FB0D5277EC40B2C41FA40D086E8164884A49BFB03BAE3E66B099DF735697986BBAEEA8856 2B9730476EE58E06138502D055A88DDE2CE4E944771E1B9D34A739A87A2EA404CFEC8FF65824E74D954EF758DFB4AEBB 875810571F2A6A6F75608E7B52682225EEEF094340B12E03718CACA3E6D5FAE9BBBFCA7FFD14DCFF08A057F4E379D622 A338012DE2C834A83767864DB7C9823DC75AAA381B068E57A6A4FF9773C2183470F1FB20122DBEE76D826337E5D01DDB 295036CE9D5852B3BE4E0CADC66E42B16305CB7368EF293F42E80AEDB791C6E9BD45933A9A2F17FD60E551E1548C1AEF 6B36A262D82C1ABA3C7F6C51DB913E16D8795640B2FC7ADBE003B48B62E096011398F387E77585064C481BDFCA7C47B9 CA1A3B755CEC4A0596120A4E75119FC14B8A6C13E93694D2C319653A413B8E4CBB1A55E7BC555911F2D31678D4A5DF56 8DC4218AD6573BA07D46160134286FCB4C1F803E07723552D7C854CFBC3597DE9BF1B9930B6997AB2E9D384934BD1730 BACB9586D46B81022DF89010B65E3DFBF7178C543A46BFE5CF6B6E3D2A5C74ADFEF13F131FA05AE05251FCF217F92769 26F6E5FBEA94F40F1F9910DC865321A0495A8CBB5487BB2E96CD075E3CD99EF552ECF67C331CDC1CAECA526DBBB3314B 6C8FCFE65278A70C484356867A41DA7D0C0CFCCFBC09DDE65C81D980190E539A67D8D4F02DCC8D9936CBCB796D84C8ED 7A0F35F4E73D5210A625ACB7860AD39B09F4609C1D9FDF1056D9CBA5BBB371A674045316DC6D97B4E3EBA6732EE42A5E CBDD20F8C7DC6B8EAD36AD7931D33445B38B78BF4714466CB9EFDF75F9E88622610759ABDCD6DDF314B21D5ADB663BF0 2B232EC7BE6AAFBF0E60A734037477B8E6F7FFC1290E89E251FBB5F91EF78AC3B71DBE01A7E8F0F8BCB6E62F50E3A415 8803FD7CCD69F45F274EBD2843E77369A66750D7E5C82F42AEE451D6F81E3BF18D2EF5D4A8F7BBC43D5DA3FC1EC142E8 8EFC114D9FD3E758A217D3088B31417DCC3E6658C97BBAF1C35327F1FAAD78512CEE74AE6B4E1863DBB552CCA429AA2C A39563E8FB771E2493F6340014AA43972720FB7449D1569C8EF84EA788CB9FF7B106DFA7C57A4918534F8ABE0DA68652 25D8524B0D74FD65C5981AD546696209E82579650251CA16599FC06D15C79EEC51B71E35D070C5069319943C92B6E25A 96C50995E3D26548716BDF002B6BE74EC140AC12454D62419B00F312C979E0879AB5966CDFD1A4FBFCB7C1057C4D2C01 A6B78DDEF4C368F9DE27AAD7CE33C3DB1BE034122F8E4C7BA559A394E19E1DCA4E55CADA86B0820D2F49AA88C81F0E23 194CF929CF4F3ADC4C89E3FD4900E5D694B0E81A4174F9F8E279FC45B790119811992A209263BE9BEB655592DE9E8132 6E7D45345377E356A7BA1BDF524257EAB9E61752B685890BC824AFA834605712AFE431180E9C87F09A87A1F490A9C64A 7EF8232E3685EA6DE55F4586202D727D15B0AD4ECF9337802641B344E45635D344E82AAB61E083B8DF276C80E82E9960 E00EADE00DA94EF49F30327FD659B8A60318720E9A0BAB66DF457A0191D864A080C99D75BADF49DFC668094A600E561E CF3FE3B0BC981831D569CDBDCE3E7819FC4A706848C2B52097988C0EEF4B0C1CA1B58CF82D3BE14349C5CC7E934B1E0B BA3B8D0C93C9C14E11101DEE66576FA53F7B910EBEB05C26C6BB539FEA91E9FC72B2B25E3BF532A709A4AF8E4609752F 495FDAB446FE4D04629BFCD1C961A52C913E1EAA315C7C4FB8A6C692A16FE0D08B2959FA9B31D3270701B9D050D8B2E9 8350D7416F89404CA56AAF343F1E037873E86B71E6ED894A14A9C8C70A41D6ACAB8236CD51362340C02EDC49996A9530 65999DB2E09F06376F27791E4DA56AE2AE9152B606301BE973621C0F358E3100E07C3ADD21A8EDE860477BFA33A4DB6D 45E8A1D657109D6074FDBB986F3D7CD9F61A0C313A424AFE26359E69848876E1C69D9A76D11A4D20289C2D788B469FF2 850FB4CF98FB96B14347FE1E9C195AC54203021A7E8803AE91C6AA6E4946010582040D6ED65E940D3B8BA5F4FF2BF2CF 35EC93026AD01B6D1C9C3BD77FE4284D1825A0DBD180AFF5BD78AFB25690AD1977D5956D1923802A37A5948FB006AB14 88CBCF39CDC48CFB047794CBCBBD955CA179C92806F60A51C04CD5AF79979284D49C2B8350784E8A77B8ABBDEA6395CB 006DE254798D9DECF3C9FBC7E826F4E445230EEFD7E0FE335F63EEB793AC66C5079A232528504A8729F428CB8AA722C6 B1587E3A385777CA694F072915D24415BA6C7A0014252BDDDA51FB7E8D2EAB6DCE526EB520E289AC9B878C3A79EE36A1 6D0F7B221F7A1B533FC07302411987C8B473482F8105D7987EB492F60952B9F53AE45E8CFEAB3E621040CD0E9F084752 3EDC72070DBDC97BE62602ED1EBE39D065A751A4D4B7E3B7ECB986D9D6ADC861F79C06FD992E99119ACAD8ECBC6972E0 C611266C5E2DF852D48F20BA787820E9797295DD624FDE043E2F8E732F2D40A7056566192C23128595C04B9D57792BED 1110C0698351B733A2950A53BE8E4591747EA5622906D577456D5AFCAA5468D804FCF69D3D331377E99B706E851F604A F7A5BADC977CBF4C3B6EBF0055ED81D9AAD07634B7343CFFEE27F54082BC46EA444C3D45DE9BFCC0569EFACFB45E9972 3D2DA81DCB5A9B61D114C5304C266553816928E3F69816C54B17D249EFC73D73BF7209CDF08116BB080EA8EDCA478543 CB90080BCC142A6BA4629D397CCD33F523F418450B30E53C9961202A56E8F1DC2B26CEB569989AF68BB2C7E22BDCB0D4 8EB53DB93B0F6C56ACE62DD1BC52F368DCCF019CCC499AFC89BE8D75B876F58B7554FB1EADC26C1A15F2D9DA5AA23061 F8CB2CAA187F3BA480B0F3E88453E868E94DD6FC2ACA3BBE5CA690837914603DD8BF52D9B82E345B9418CC69F91C1064 39FF0E34ADD15A95204BFE952FAAB3FD46A6FF972D3E5C01AB858B9076CD1D0056BC203BBC2B6B5BDD7FD3163673CC5E 9385C021ABB8F9BB41C915E0B70A0EB7B375EAD870C2AA26FC330D7B837224915EA521CABD0B05DB0516000EB5441DDD C715F977C4CD8CA71AB98BA5C8C09CF3D9CBBC91989BFC648E9FE64E30AEB9472D8A55A85A2E2AD545802E1FB5DB0ED0 6B3B3E1114767604572EE2ECD482790FC20D9C31C2EADF34DEE0591091BF70725DB3C08DB4829C212B387DB403AEB671 435233F888DB23D61A517A69BC729ACA0DC54DB830AA7A4075252818FD12DA5995826945DA3A02162B87888D04331575 BF739CBF4938643C7E7AC857D1F48D3401EEC9D5EF79F88A9DE5B0A1524CB2054C744F67890295C274BB3DA00754902B 56D0C7378CEB0B4B9691ED0780B2088481764119BF566CE707F88129383883971DC823DB1CC291AB831BD1A9439B31E9 36F7541F59C86DB1D6644AD6394DBFDDA6A34BF8D6CE874979743DA3E086278AB6759773E2A895862CD6BC283068F6CD 341D733D2F25F2ED98AC5FD38746F8E5062203689B2EBB03671ADBFD82E74327481D8E432C461A9EA1DA2538E2379E1F 735152CC244F73E7E61F83540367965AB032BF6FEC717B1DC5268EE16CEA459087212E2DDF2FB95B75195B34CAC09D63 AAB2E9EFA8E091A8FEC9305D43B8D25698DD38AE3144AC6C7536D643C24557BB57F4E7EBA56757AE565CD8E2EBCDC382 21F61D3057E4355F6E9BE1F8D01094ECBC0CE0707E7E97C7D728C52D31C8A7F657126AB268318BAE4314B982024C7E18 65723C492A604052869EB906B36B47959B6F0E1B106BCD9DA911B3F80E83C31E6BF969406297E02261CFA837C8D6D417 FA28CA00BB365B5929F5BF79FA67DF5C07E8C78D7AFAF485258EDEA48F95721EF0B7A60641364F069565A442FF7C0D47 C96E60E03EDDF952A7AA446E62B3B811679AEFAD99DFC2AA8557431A97A61A1CA8FBECD0C8E371A47E6F3337DCDF8D44 B89E343FD527774A47B7EED62A2C42CAEDC6530F93B01D7BBDE0B64FE479DD20288260E6CADC651B15918CA53FA06D5A E37FEB6A39CA039FE8093B9316E7ACDB7DE4192456F6B87923795F364402850D24EB7B86EF1DBA07C2B5766FD717F844 83690C81B2292635A47389310C9D526BD7DB1954261A39A2FFF662AE7C34C7A539CE4ECB5AF35E5051591DA941454754 2516AD530E95647321034441CEFE4C5097BAB5FEDF74D1C78DA517D304CB0865E91FC4BD6B9BE210EDE1A246EE8EA6B8 9685AD1FE94F7BD87F4F23EE64789BB62814BFD39467349768BCD0895ACAF4429ECEC180417BAE4FBEF9162C42464519 DC4553DA98E4A3A410EACF491FA3A91AFD5F499A82A8496618108A2BAE1FCA3F40454602EA4A2E064396D118947A1E85 98CB9DF9ABAC08B3580C52060EF5F3B5F40DBF82D4EA7D9BB075F7D7D552A717312642E28D1D8DD763C048B33A0A58E9 498169ACC4C9E8BD6B4758F8E6A181FE956C2C21B77C4EAF880CBA35004626AE78410CE513F48B923CF078140C6254A5 E6325D2198D244B14BF25335E6DEE22AEB2EF84D8D8F39B41DF5DF85E56F9E52F76751B33A2518E045B4C075BFC88630 D19430F05FE1A7CA8D08C6699954352CE3AEF7CD33355EC1FDC5DBBBDC5FA8A7E63C9B0BBECC0BD36ED093378B6BC8F6 4644AF567945DAA219C41EF808746E9BAFE2F4C2D1EC9FB758A45AAF0FE38F656D39CCB11A8ED3E3000695590CFBD757 0E6AB5CC9A8233189995777FD7D3BC58D9AD6770A67E7B99F3B1D7C27F7E781713D5DEBEF969714EFA224531443DC19A 5A24A2FF30348287C9C3FA0B60EBA57F1D020852B5AFA1C37066BB8045A2D75631964EA9A34813F0D42CA3610CFC9052 F207742D31C0B69D58353D733ABA1BE112A5A75185C138CF29A874B1310EA9F7D7AA800069519198CF3762F9DDF0E46F 9816B740D232C5565953E2DDCAA71D6B809EE7160C34558BA647E7DC86A65773118E5998E13C6B14334CAA05A6B65256 EE8DBA9AC9A494EE797CB3183B402834CA26D8D7E25EB14563B4F1638295132C44B455E55F5D7533DCFDA7268DD93E58 3032A74D64C33A0F714A6024EEBAC43356A36D0FEF4162CDAA0E7E62B50C03239CA422B5E6EF081DE254CF21F2FF3373 CF618800EF5F06FF19B0FC224AF3B0126B50CE900DC9219746BD34FAD93CC458F7576862D679E7BEBE46D9ABB7B8D148 F89CD37C06B488BACDE3C1DDAA01A1FA67D51D95E2CA38950CB8F27ED1DB287FAB125016C78822CA6B234876FEBEFB24 F2BD223C3AAD7FA0E869A81C447725BB30646213E8AD59DC6363B2C5956CDC4C5FB999FA128528CBA80C2CE1A249C780 30D4A9CD5C2EA00B42992455FF642DEAD105E8480B76962CFF9014C78CF9468FBE7E46D5CFA81C908BEB217A85E09038 BBEF22C3F255A611BB072C2F025477587BFFDF425CCC9D472FFAA42D9866B673E3D1344C7E4B7928EB64BB1EC0BAE81B 9670BECF0894766D5DD7531B4879FB8BFE9F9BB78170082B77FB09F9705645B0449E656170898D2906D87C9B857D74A4 7BEF8E19F021650EE8BCF493FB926D99C460953791E6A1AB93FE60D8A8F347B1F63F39B750A0068B1D723F5671813579 B6E768F8756117EA0DFC606BB60E6DE20988F99FC3D49264730A38F2AFB80FA85C4C1660C0ECFE08D788678A98A9438E E48F384FB1FF740B058EE6043D0CC9980F3C83F9A508F3EAAEA9CAF3003A468D5D24F00F1FC8B29A1CE3420561F11D4F EDEDB587463551A938F9D8B9C543100BAFC268AC8118FFB06FF0980B775969A83CE125EC2A013D4996BF9CEF8C0EE526 9D95CF1CA5753D1955B5BED3F3B1323BD40DE4BD4A5FBEAABAE849D1D059D9D91D2F6A0F346831B10AF33FA528D789E2 14ECDD157858A46B164D25B0B46F858427F18AE63C3A104CAB9AF8DDC131A8C6894DE11C31F9B8AFA28B7045F5683E3F A0C9B53411F870A4523AE861D342FF1288A3A1C23862EE731ADAE37F8066430D2FD623F1EDCBC1521F0092D888CF2614 8B4B971250521768EAD0D3294E098EC737AA3C0762CE5ABC38762C27901CA2DC3FA02F8F0A2E3F72A770DF9E0736802F AC2F0BF303EF34895C00E971A1BACE50C4A1EE20A25D27916EEBF5168FE5015C0049FFEDAEFC45FF8A43C06D7FFCD922 09BA6A34EC3F2D10D040898AAEE0C15CFA516F6AFE878D4C670A46B54279ADF59956C4C91280A07E031AC49D6B8EA59C FADACC917B9A25F2547111050DD2645D2425A905EF05C09D18D4EA1B167CA1F225C1D5EC485C2D9AEF77E786CE5CEF82 1E76E975016879C1CA4E377DF75A524619D75558AA576F66982C6EA83D552C3000CE7AE7FD6A5B7E7BE92EE1F27AB860 EAFDFE6260AE14753EF6C7DECDEABEEEAA3AE1342AF02A5B5EFC93CFAB6FFB9B29D48DC23E8AE405B845657732302553 7712C730A9ACC907429F317629721D304BA21756B180361F19A5268F19B7EAD44D690C8B185E5271FD5918118341F309 FD09B388F72D276A85F1DA2D751257532896D272BE4C9E6C32F01B477087DF7F528A2DEAEE5391EC78807CDCEF578662 90720F92BF16AC9890C20E7D1CF339A27A0853C8BA74563021CFB40105A730EFBAE60BEB8A9E3DAC7D185D93153B2721 0F498B246263664C5561F4FFABB567EFFA3CFC840ABDEB394C21FC4911066CFA93DCB28BC631ED882D7A7FAEC45D9AEF 120FB303C7550AAD811F116256887C0BA92EA1668FD581209618C6861F416D4B8A73B0BE4EBFD381BBB90F1409F5CEEA 23213753337F53D82ACB8BBA8587187115 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %!FontType3-1.0: HiraKakuProN-W3 19 dict dup begin /FontType 3 def /FontMatrix matrix def /FontBBox {0 0 0 0} readonly def /PaintType 0 def /StrokeWidth 0 def /BuildGlyph{save 3 1 roll 1 index dup begin /ShowProc get 3 1 roll 1 index /CharProcs get exch get exec 7 -1 roll exec end restore } bind def /BuildChar{1 index /Encoding get exch get 1 index /BuildGlyph get exec} bind def /$SP{3 -1 roll dup /SetupSubFont get exec dup setfont exch 0 0 2 index stringwidth } bind def /$SPW{4 -1 roll dup /SetupSubFont get exec dup setfont 3 1 roll 0 0 0 4 2 roll} bind def /$SPTW{5 -1 roll dup /SetupSubFont get exec dup setfont 4 1 roll neg 0 3 -1 roll 0} bind def /$RP{6 -1 roll dup /SetupSubFont get exec dup setfont 5 1 roll translate -90 rotate 0 0 0 4 2 roll} bind def /SetupSubFont{dup /PaintType get 1 index /StrokeWidth get 3 -1 roll /$SubFontArray get 4 1 roll 3 index 3 index get dup /PaintType known{dup /PaintType get}{0}ifelse 1 index /StrokeWidth known{1 index /StrokeWidth get}{0}ifelse 3 index ne exch 4 index ne or {dup length 2 add dict begin {1 index /FID eq {pop pop}{def}ifelse}forall /StrokeWidth exch def /PaintType exch def currentdict end dup /CIDFontName known {/Anonymous exch /CIDFont defineresource}{/Anonymous exch definefont}ifelse dup 4 1 roll put }{ pop pop pop get}ifelse } bind def /ShowProc{systemdict /rectfill known {0 setcachelimit}if 6 -1 roll dup /FontMatrix get exch /FontBBox get aload pop 4 index transform 4 2 roll 5 -1 roll transform 4 2 roll setcachedevice moveto dup type /stringtype eq {show}{glyphshow} ifelse } bind def /FontInfo 4 dict dup begin /Registry (Adobe/) def /Ordering (Japan1/) def /Supplement 6 def end readonly def /FontName /HiraKakuProN-W3 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /uni305D.870 put dup 34 /uni308C.917 put dup 35 /uni305E.871 put dup 36 /uni3068.881 put dup 37 /uni66F8.2427 put dup 38 /uni3051.858 put dup 39 /uni308B.916 put dup 40 /uni65B9.3661 put dup 41 /uni304C.853 put dup 42 /uni826F.3985 put dup 43 /uni3044.845 put dup 44 /uniFF1F.641 put dup 45 /uni3053.860 put dup 46 /uni3063.876 put dup 47 /uni3061.874 put dup 48 /uni3082.907 put dup 49 /uni3002.635 put readonly def /$SubFontArray [/AAAAAB+HiraKakuProN-W3 findfont /AAAAAC+HiraKakuProN-W3 findfont /AAAAAD+HiraKakuProN-W3 findfont /AAAAAE+HiraKakuProN-W3 findfont ] def /CharProcs 19 dict dup /uniFFFD.0 {(\000) 1 $SP} 2 index /.notdef 2 index put put dup /uni3002.635 {(\000) 0 $SP} put dup /uniFF1F.641 {(\001) 0 $SP} put dup /uni3044.845 {(\000) 2 $SP} put dup /uni304C.853 {(\001) 2 $SP} put dup /uni3051.858 {(\002) 2 $SP} put dup /uni3053.860 {(\003) 2 $SP} put dup /uni305D.870 {(\004) 2 $SP} put dup /uni305E.871 {(\005) 2 $SP} put dup /uni3061.874 {(\006) 2 $SP} put dup /uni3063.876 {(\007) 2 $SP} put dup /uni3068.881 {(\010) 2 $SP} put dup /uni3082.907 {(\011) 2 $SP} put dup /uni308B.916 {(\012) 2 $SP} put dup /uni308C.917 {(\013) 2 $SP} put dup /uni66F8.2427 {(\000) 3 $SP} put dup /uni65B9.3661 {(\001) 3 $SP} put dup /uni826F.3985 {(\002) 3 $SP} put def end dup /FontName get exch definefont pop %RBIEndFontSubset +/HiraKakuProN-W3 cguidfix +/F2.1/HiraKakuProN-W3 renmfont +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /underscore put + dup 34 /r put + dup 35 /e put + dup 36 /t put + dup 37 /u put + dup 38 /n put + dup 39 /comma put + dup 40 /v put + dup 41 /i put + dup 42 /o put + dup 43 /m put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A1D676C79660000000000000E28000009846865616400000000000017AC000000366868656100000000000017E400000024686D74780000000000001808000000346C6F6361000000000000183C0000001C6D617870000000000000185800000020707265700000000000001878000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0401BB000598A8A20B0032653582321B0808A8A1B8A235920B0032653582321B800C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00000000020042000004D005BD000300070043B800532BB800082FB800042FB8000810B80000D0B800002FB8000410B80003DCB8000010B80007DCB8000310B80009DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB30000000100AAFED0018000DA000E002D401600230E0A64080A1017171A07340A640008190F6365182B4E10F44D3CFDED4E456544E6003F4DEDD4ED3130173637363534262723353315140607AA451C0F01026DD66076D10C552D2A070B07DACA77B41500000000010000FF000473FF650003000FB50146000205003C103C002FED3130113521150473FF0065650000030048FFDA041A0449001C00240025010C40799708991AA71F03050E020F0514150E120F1514400C401408291A014B0BB603C701C603C71BD808D909D61FD823E817E8230BC711C712025C080521240F9A161D243906070716211D1C070A1D160B2507971CA71CB71CD71C0425160F251C05190A0C07110E270F1D27051A27242E072719192627D421A65D182B2B4EF44DFDE44E10F64DEDD4FD391239391112393912392F5D003F3FED3FED12392F3CFD3C10ED1112393130437940460023040503050205010504061F26111012101310141004060C25221B24260020001D + 26011E1D09170726000B150E26010D0E231A2126011E0521260108180A26000D100A2600002B2B2B2B01103C2B2B103C2B2B2B2A2B2A8101715D00715D5D00161716171615211E013332373637330E01070607062322001110003301262726232206070102B4D638361210FCEF0590978D543014B1074F3152794152C8FEEA0118E2011F0B284AAD7CA805012304476B55516C4AA2A3C55D36473B912E501C100123010601020142FE26754682B38A01DC000000000200840000013B05BD000300070036401C07E50400010006030A0917171A06010229070300190809AA216242182B2B4EF43C4DC4FD3CC44E456544E6003F3F3C3F4DED3130133311231133152384B7B7B7B7042AFBD605BDCC00000001008400000625044700260085403B0708070E060F1708170E170F2708270E270F4819560B670B0C23250A1A1D23190A02041725211D171D0D060700061B1C2503130A2817171A112914B80101B21A291DB80101400A00012E25292600192728B8010DB3216242182B2B4EF43C4DFDE410F4EDF4FD4E456544E6003F173C3F3F3C4DEDED111217390111123912393130005D13331536373633321716173E01333217161511231134262322061511231134272623220615112384B240345971804E2C243CA265D84E2ABB6B4D6A99B71A297066A7B4042F984F243D3F244656539C548EFD3702E86B508EA6FD9102BB6D324B9ECFFDC80000020084000003ED04490019001A005E4031B706C706020406140627147606740705140C021418101D05070006180B0A1A071A1A000C29091A1C012E18291900191B1CB80106B3216242182B2B4EF43C4DFDE44E10F64DED12392F003F3F3C3F3FED1139390112393130005D015D1333153E01333217161511231134272623220706070E011511230184AB4CAA68E4502CB71D307E40294A382D1BB401A7042F985E529F57A2FD5102A3623C640D1642357169FDCF0449000003003BFFD90421044E000C0018001900904033980896109916A504A808A610A916B808C808D704E50EE9140C3A08061D18070C1D120B190719191502270F1A1B092715191A1BB80109B321725D182B2B4EF44DED4E10F64DED12392F003F3FED3FED31304379402C001704260B1309260000110226010717092600050D0226010A140C260001100C26000816062601030E0626012B2B2B2B012B2B2B2B2B81005D241235342726232206151416331200111002212200351000330702E085304CBAA59696A3D6011EFCFEF7DDFEFC0112E70674010FA6965E94FCB2ABE403DAFEECFEF4FEFDFEAE012BFC010E014005000100890000029204470011004F40262703260D37034704040E0810020E0911090C270805070006110A081A13012E10291100191213B80145B321627E182B2B4EF43C4DFDE44E10E6003F3F4D3FC4FD + C411123939011112393130005D1333153E0133321617152E0123220615112389AB15A46B05181D101B108892B4042FB9369B0203BE0302AF72FD980000010017FFEF0209055A00180052B50D2E0AC00E01B8013F40250416391703060E0A111A17171A0301062900150E150F031F030203FC1619191AFC21677D182B2B4EF44DFD5D39C42F3CFD3C104E456544E6002F3F3F3C4DFD3CED10FDE431301333113315231114171633323637150E012322263511233533A8B6ABAB2615310D1E141F43277E5A9191055AFED593FD4538130B01028E0908816702C593000000020080FFE303DE044900170018005E403AB814C81402091308141913191428067703D707070800050E0A00060D0A051D120B180718180B160D2E0A290C0B1A1A01291619191AD2216242182B2B4EF44DED4E10F63C4DFDE41112392F003F3FED3F3F3C391112393130005D015D0111141716333237363511331123370607062322272635112501381A3083BC4425B4AA0223346793E5532D01AF042FFD39523460A85A9D020EFBD19E3D2A5499528902D81A000001000B000003EA042F00060102402E4201C5010200670068026803670687048805A700A802084700480245044A0586048905C704C80508492873280708B80109B321677E182B2B4B5279B8FF70B40105042004B80183B703036D1202010205B80183401E06066D120000010506040301010502030603000605040A0817171A03AF02BA018400000184B301AF0619194EF4184DFDE0E0FD194E456544E618003F3C3F173C1239011112391239074D2E2B104EE44D072E2B104EE44D2B4B51794025022912030304002912060605010502030603000605040A0817171A020403AF050001AF0619194EF4184DFD3939FD3939194E456544E618003F3C3F173C12390507102B07102B313001715D005D7113090133012301DC011E012BC5FE6CC0FE75042FFC980368FBD1042F0001005EFFFB041D059F001E008FB800532BBA0000001000562BBA0007000600562BB8000010B8000DDCBA000E00100000111239B80011D0BA001200100000111239B8001010B80013D0B8000D10B80015D0B8000010B80017D0B8000110B80018D0BA001900100007111239B8000010B8001BD0B8000110B8001CD0BA001D00100007111239B8000710B80020DC00B800162FBA0001000C00562B30310111323E023533140E022B01110735373507353711331125150515251501EE63986735984EA3FCAE36EEEEEEEEA2016FFE91016F02EEFDAB4278A76592E49C5202AD648264926481650161FEE49C819C939D82000100000000000030CEDBBF5F0F3CF500110800000000005F4D8F0000000000CDB9BAB7F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B9100010000000000000000 + 000000000000000D05120042023900AA047300000473004801C7008406AA0084047300840473003B02AA008902390017047300800400000B0473005E000000360068007C0146017401F0024C02C4030A035A03B4044A04C200010000000D00920009006B0007000200100010005D000007E80A1D00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003 + 266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 13 dict dup begin + /.notdef 0 def +/comma 1 def +/underscore 2 def +/e 3 def +/i 4 def +/m 5 def +/n 6 def +/o 7 def +/r 8 def +/t 9 def +/u 10 def +/v 11 def +/u20BA 12 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-1947 -985 2961 2297}def + /UniqueID 4449471 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C91B71CCBEC8DADBFCB2CF6F614DCF0404E4678133CDA654CD39ADC4A8DD9DC9E199CA389B3097EA53D68A2728AA3C6C75ED53FA8420C021D872E28D46F54806A8A409E053FBF428B872BD7670370D1C6BC11C4F08B535F81FEC94056308C62C3056DA955E536634276472DA06E3549947F4DFC836F8042D24F147AC0598ACF8272C3A557399193DA8B7142E77D1535F33FC3C419C736E102A904067D3014AEDE2611B431F1F8141CE03A409D2F41302E140ED6B9FDF73BAD539837269C125BACF36415F84CD32A14D56B085E9C3EE650E3D72F7113EB6E3FC6C28530F48EE6D613DBAB72F26B5F5CD9420EDDDF481022EAF6E45BD2D1AAC71D5503833B112DE89EC42D4364DD7DF47B449C4C1F21D9B782CA21DA739946BD01F2FB3A135ACC4EB3010ED28C7C0F0A2094671AEAE38ADB69406A4A0863CBED948A2A4C7CD8B0ADB558003A23EDB28D018C682758040047B2C9BA3787CC96DF664B91F4557898A73D31B2CD8CBC23257AAFEC8A6D723ED83DAB83B391F24AFD35E8657945A16EAF02230BB435F48C48B27E3D9B7D88AECD91896AF8DD5FBDAE8FAC2034A1BB6360107E2CEA691D2948ADFC6B5D882901379C26257019CC3A6F205FC0B104A8048D3CF96ECCDB482311B3E31A275740BCB037DB404F181781AE4A03576EE591435C13E02723D5E23FC5D664210F9CC06337618F247E398FDBFC46FFF69454C18A6E129466462F1066ADE229EB246B74ADD70FD1CA3A7694F3001C6267E7F012B0959D + 456307652171DDCEE661227BDC3170604B342C260E583032E04C7A33B94B336049DDC07F4BC595685C3CFC0FF4400B9299CE7BE324BDFB2498D190A65FD5365E1F83D39EBBE38DB15222CA4B0BFF0EAD913EB9B9147AA309B21D9A71A368C082C2FA27B988DE01152BC99683AB3E02A6DBCBE32034D565DABDDA7F3864090C0BDE68537A0BCD59DBD72CE9AAB64534CE69F72FB4CEDE6CB61CADC4D660D82692E8C95B9CFD29981DC8997FA994014198B6475D8C06347BB13A20DBE3865C2326BE65E26C9CEF0586ABEF7AC2BC8AADAB76D50D6B5758A5FCE8598E315EAF59AD131907385014CD4E11F5BA7EDFB2FCC6A24364137F5A7EA5005DF1F18537EDEF533DDBC68758339347B1DB00C7BA74C1FDBAFE53DE6ABDCF686A6306994AF8DAF6BE0FE64D1764C7E940A3CF742BD8A350D8C6CF1A6F0D118DBF145F0CDE488EF5AEBED4C0584398A2B0FE6A719F562C7E8357404B43F6865C1A214DF9DF22C6F434216A94D4ECE560C0C40A7D44DF6B97D3E2B6A96489ED997D21838BC95E11B2217525E83E9EF96F7173C7DD71948A5A35E3E6A9BAB1B2E53F291A1760459EBC873434D65DC9B8306DE6B9CBD73FFA2EA571C9A325D4159496B905BBCFE4305B29510955A8B70E93F20B053D22B7FF8CC85018BC0C4DD07A202F8AFEC9DD26971678AF45CB51476DDA39A1F927D414BFFA4AFF0EE91DEC29C587A026994FE075AD2FA920A8527339FE9518A9BBEFBAEFCEFE4EFDF1D752292158CA583693FA8B2456EA044B2DE4F00FAA2ABD1430F19221F857FAEDF2CE795399334697444135908A30C81DCA79148C955E36D01A025B85DD76E4F122ACE64D2ABBFFE758ED79F2CE1242CA0F28BA58C3A40FD502C4B139B6EE666C59599C15814616F0394B5BB4988399C1C9A9DE7ABC8B010467EEB2A5E1A4367CCB97647C48A3ABA5CBBAC7E5CF8DB482C7CE7A75A0B27F147FBDF071A75FE0B3719CF353B8411C62C1EF35CCE67E5C5DCAD1210118BAAE6FD90F7660CA2F757EA8324E74BF0242AD7D6FB70F1D96E9348FD727061E21BE43D415B5A4D098C0ECBD4F90C00C6109BFF67347A045567E16F15B5DA8C9BE127799350366EDD1E7BBA5CB2B237117EDCE4FF8C5473444EA741B4DC82DFB1BF93C9CD34F26D4FE88474EAFFBC5587382528FBCE274CF2ABB8367A86FE986C5B1FFA70D3B23C668CE29D9C4ABCADC91F49CCA24A1320ACD19647863D5BF1EC19A7D8EC62E1D901B7C41E6F67C6FBA7B33785048BB50181C4F8E5815036BA329160B20CFA7A59616AFBBB0A8D381F04422078FA9E027DF058D29A4CB078CE53C391B8B1FE175A9DF1012D419ACAAFCC3CC6F562EF46D0097DE27148A20A5E40B84B828A2ACC5EE1671E23AA2D05B2903911A6701B80DD71D3328319B6BE93BD08FD48B3F2C85103A533C145821009DCC18CBA44C + 67F1ED6FEBCC43612C91701A2DD1F569726DEB + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Helvetica cguidfix +/F3.1/Helvetica renmfont +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs1 exch/ColorSpace dr pop +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { { 1.8008 exp } bind exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs2 exch/ColorSpace dr pop +%%EndPageSetup +0.60000002 i +/Cs1 SC +1 1 1 sc +q +0 0 1908 398 rc +-0.5 432.5 m +2235.5 432.5 l +2235.5 -350.5 l +-0.5 -350.5 l +h +-0.5 432.5 m +f +0 i +0.90196079 1 0.86274511 sc +0 396 m +1908 396 l +1908 12 l +0 12 l +h +f +0.16078432 0.56862748 0.10588235 sc +1 0 0 -1 954 198 cm +/F1.1[ 12 0 0 -12 0 0]sf +-954 -176 m +(!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 -176 m +(&)s +0.27450982 0 1 sc +-912 -176 m +("#$%')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-882 -176 m +(\()s +0.16078432 0.56862748 0.10588235 sc +-876 -176 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-858 -176 m +(&)s +0.73725492 0.38039216 0.098039217 sc +-852 -176 m +(*)s +0.078431375 0.078431375 0.078431375 sc +-846 -176 m +(,)s +0.16078432 0.56862748 0.10588235 sc +-840 -176 m +(!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-804 -176 m +(\(-)[ 6.000000 0.000000 ] xS +0.73725492 0.38039216 0.098039217 sc +-792 -176 m +(%.\)+!!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-726 -176 m +(/\()[ 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-714 -176 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-696 -176 m +(,)s +0.16078432 0.56862748 0.10588235 sc +-690 -176 m +(0#\)$)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-666 -176 m +(&-/,)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-642 -176 m +(0#\)$)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-618 -176 m +(&-)[ 6.000000 0.000000 ] xS +0.73725492 0.38039216 0.098039217 sc +-606 -176 m +(%.\)+!%*0)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-558 -176 m +(/1)[ 6.000000 0.000000 ] xS +-954 -164 m +(&&)[ 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-942 -164 m +(2-&$#&3#4%+5\)*6&-2)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 -152 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 -152 m +(6#+#)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 -152 m +(&)s +0.15686275 0.5529412 0.54509807 sc +-912 -152 m +(%.\)+!!!"#$%)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-846 -152 m +(\(*,%.\)+!%*0/7)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -140 m +(8)s +0.7764706 0.1254902 0.086274512 sc +-954 -116 m +(2-&+5%3%&9:%&":%9+%$&9;+#49+\)"9<<=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -116 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -104 m +(!!"#$%&:%+;:*'&\(\)*+&*,0#\)$-&%*0/1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -104 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -92 m +(&&-\(\)*+-/\(\(3+:;"+&!!>?>!%*0&-/\(%*0//@A:%+!B&C&*7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -92 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -80 m +(&&<#*6D4B\(\(\(\(3+:;"+&!!>?>!%*0&-/%*0/@A%*0/,'/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -80 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -68 m +(8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 -68 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -56 m +(-2)[ 6.000000 0.000000 ] xS +0.16078432 0.56862748 0.10588235 sc +-954 -32 m +(\)*+)[ 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-936 -32 m +(&)s +0.27450982 0 1 sc +-930 -32 m +(49\)*')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-900 -32 m +(&\(/1)[ 6.000000 6.000000 6.000000 0.000000 ] xS +-954 -20 m +(&&!!:%+;:*7&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-882 -20 m +(22&@A&&!!"#$%&\(-!!!:%+;:*/\(/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +654 -20 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 -8 m +(&&!!%*0\):#*4%*+7&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-852 -8 m +(22&@A&&3+:;"+&!!>?>!%*0&!!%*0\):#*4%*+7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +684 -8 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 4 m +(&&)[ 6.000000 0.000000 ] xS +0.7764706 0.1254902 0.086274512 sc +-942 4 m +(2-&+5%3%&9:%&%4\)+%$&9;+#49+\)"9<<=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +594 4 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 16 m +(&&\)*+&\)!?;EF'GHI7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 16 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 28 m +(&&\)*+&:%+09<7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 28 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 40 m +(&&!!%*0\):#*4%*+J:%+!B&C&K:%+09<7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 40 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 52 m +(&&!!%*0\):#*4%*+J%*0&C&\)!?;E7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 52 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 64 m +(&&B:\)*+E\(L49\)*'&M&49\)*'&%*+:=N*L/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 64 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 76 m +(&&\)E&\(3%+D4B\(!!%*0\):#*4%*+J%*0//1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 76 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 88 m +(&&&&B:\)*+E\(L49\)*'&M&49\)*'&:%+;:*N*L/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 88 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 100 m +(&&&&:%+;:*&-\(\(\)*+&-/!!%*0\):#*4%*+J:%+!B/7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 100 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 112 m +(&&8&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 112 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 124 m +(&&!!>?>!:%+;:*&C&:%+;:*'7&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +582 124 m +(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 136 m +(&&-2)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-954 160 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 160 m +(6#+#)[ 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-918 160 m +(&)s +0.15686275 0.5529412 0.54509807 sc +-912 160 m +("#$%')[ 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-882 160 m +(\(OP,!!>?>!:%+;:*,K!!%*0\):#*4%*+/7)[ 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +-954 172 m +(&&)[ 6.000000 0.000000 ] xS +0.74117649 0 1 sc +-942 172 m +(:%+;:*)[ 6.000000 6.000000 6.000000 6.000000 6.000000 0.000000 ] xS +0.078431375 0.078431375 0.078431375 sc +-906 172 m +(&P7)[ 6.000000 6.000000 0.000000 ] xS +-954 184 m +(8)s +1.5 w +1 J +1 j +0.60000002 i +0.91936398 0 0.039878398 sc +1 0 0 -1 0 432 cm +158.49826 41.272091 m +139.16722 48.301525 139.16722 59.698475 158.49826 66.727905 c +177.82919 73.757378 209.17081 73.757378 228.50174 66.727905 c +247.83278 59.698475 247.83278 48.301525 228.50174 41.272091 c +209.17081 34.242622 177.82919 34.242622 158.49826 41.272091 c +S +320.49826 41.272091 m +301.16721 48.301525 301.16721 59.698475 320.49826 66.727905 c +339.82919 73.757378 371.17081 73.757378 390.50174 66.727905 c +409.83279 59.698475 409.83279 48.301525 390.50174 41.272091 c +371.17081 34.242622 339.82919 34.242622 320.49826 41.272091 c +S +/Cs2 SC +0 sc +0 i +1 0 0 -1 401.5 332 cm +/F2.1[ 11 0 0 -11 0 0]sf +-113.5 -7 m +(!"#")[ 11.000000 11.000000 11.000000 0.000000 ] xS +/F3.1[ 11 0 0 -11 0 0]sf +-69.5 -7 m +(!!"#$%"&'!!#&\(\)"*&+#&$)[ 6.117676 6.117676 3.663086 6.117676 3.056152 6.117676 3.663086 6.117676 3.056152 6.117676 6.117676 6.117676 6.117676 5.500000 2.443848 3.663086 6.117676 6.117676 9.163086 6.117676 6.117676 0.000000 ] xS +/F2.1[ 11 0 0 -11 0 0]sf +47.294434 -7 m +($%&'\(\))[ 11.000000 11.000000 10.670000 11.000000 11.000000 0.000000 ] xS +-113.5 10 m +(*+,)[ 11.000000 11.000000 0.000000 ] xS +1 0 0 -1 322.5 25.5 cm +-27.5 1.5 m +(-./01)[ 11.000000 11.000000 11.000000 11.000000 0.000000 ] xS +0.60000002 i +/Cs1 SC +0.91936398 0 0.039878398 sc +1 0 0 -1 0 432 cm +117.67848 378.27209 m +80.773773 385.30151 80.773773 396.69849 117.67848 403.72791 c +154.58301 410.75739 214.41699 410.75739 251.32152 403.72791 c +288.22623 396.69849 288.22623 385.30151 251.32152 378.27209 c +214.41699 371.24261 154.58301 371.24261 117.67848 378.27209 c +S +ep +end +%%Trailer +%%EOF diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex2.png Binary file 2013/2013_12_20/with_env_ex2.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex2.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex2.svg Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,711 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex3.graffle --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex3.graffle Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,680 @@ + + + + + ActiveLayerIndex + 0 + ApplicationVersion + + com.omnigroup.OmniGraffle + 139.18.0.187838 + + AutoAdjust + + BackgroundGraphic + + Bounds + {{0, 0}, {2236, 783}} + Class + SolidGraphic + ID + 2 + Style + + shadow + + Draws + NO + + stroke + + Draws + NO + + + + BaseZoom + 0 + CanvasOrigin + {0, 0} + ColumnAlign + 1 + ColumnSpacing + 36 + CreationDate + 2013-12-14 13:08:36 +0000 + Creator + utah + DisplayScale + 1 0/72 in = 1.0000 in + GraphDocumentVersion + 8 + GraphicsList + + + Bounds + {{198, 208}, {110, 17}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 22 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs22 \cf0 \'82\'bb\'82\'e0\'82\'bb\'82\'e0\'90\'e9\'8c\'be\'82\'b5\'82\'c8\'82\'a2\'81\'48} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{-9, 198}, {189, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 21 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{295, 398}, {110, 17}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 20 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs22 \cf0 \'82\'b1\'82\'b1\'82\'c5\'8c\'a9\'82\'c2\'82\'af\'82\'bd\'82\'e7\'90\'b6\'90\'ac} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{288, 83}, {227, 34}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 19 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 HiraKakuProN-W3;\f1\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs22 \cf0 \'82\'bb\'82\'ea\'82\'bc\'82\'ea +\f1 __return,__environment +\f0 \'82\'c6\'8f\'91\'82\'af\'82\'e9\'95\'fb\'82\'aa\ +\'97\'c7\'82\'a2\'81\'48} + VerticalPad + 0 + + Wrap + NO + + + Bounds + {{306, 36}, {99, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 18 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{144, 36}, {99, 36}} + Class + ShapedGraphic + HFlip + YES + ID + 17 + Magnets + + {1, 0.5} + {1, -0.5} + {-1, 0.5} + {-1, -0.5} + {0.5, 1} + {-0.5, 1} + {0.5, -1} + {-0.5, -1} + + Shape + Circle + Style + + fill + + Color + + b + 0.783463 + g + 0.793076 + r + 0.792802 + + Draws + NO + + shadow + + Draws + NO + + stroke + + Color + + b + 0.0398784 + g + 0 + r + 0.919364 + + Width + 1.5 + + + Text + + Align + 0 + VerticalPad + 0 + + + + Bounds + {{0, 36}, {1908, 396}} + Class + ShapedGraphic + FitText + YES + Flow + Resize + FontInfo + + Font + Helvetica + Size + 9 + + ID + 16 + Shape + Rectangle + Style + + fill + + Draws + NO + + shadow + + Draws + NO + + stroke + + Draws + NO + + + Text + + Align + 0 + Pad + 0 + Text + {\rtf1\ansi\ansicpg1252\cocoartf1265 +\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset128 Osaka-Mono;} +{\colortbl;\red255\green255\blue255;\red41\green145\blue27;\red230\green255\blue220;\red20\green20\blue20; +\red70\green0\blue255;\red188\green97\blue25;\red198\green32\blue22;\red189\green0\blue255;\red40\green141\blue139; +} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural + +\f0\fs24 \cf2 \cb3 \CocoaLigature0 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx2978\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf2 __code\cf4 \cf5 code1\cf4 (\cf2 int\cf4 \cf6 n\cf4 ,\cf2 __code\cf4 (*\cf6 exit___code\cf4 )(\cf2 int\cf4 ,\cf2 void\cf4 *),\cf2 void\cf4 *\cf6 exit_env\cf4 )\{\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf4 \cf7 /* do something */\cf4 \ + \cf8 goto\cf4 \cf9 exit___code\cf4 (n,exit_env);\ +\}\ +\ +\cf7 /* these are created automatically \cf4 \ +\cf7 __code return1 (int n,void* env)\{ \cf4 \ +\cf7 *(int*)((struct __CbC_env *)(env))->ret_p = n; \cf4 \ +\cf7 longjmp((((struct __CbC_env *)env)->env),1); \cf4 \ +\cf7 \} \cf4 \ +\cf7 */\cf4 \ +\ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf2 int\cf4 \cf5 main1\cf4 ()\{\ + \cf7 // __return;\cf4 \ + \cf7 // __environment;\cf4 \ + \cf7 /* these are emited automatically \cf4 \ +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural +\cf7 int i_buf[128]; \cf4 \ +\cf7 int retval; \cf4 \ +\cf7 __environment.ret_p = &retval; \cf4 \ +\cf7 __environment.env = i_buf; \cf4 \ +\cf7 printf("main1 : main1 entry\\n"); \cf4 \ +\cf7 if (setjmp(__environment.env))\{ \cf4 \ +\cf7 printf("main1 : main1 return\\n"); \cf4 \ +\cf7 return *((int *)__environment.ret_p); \cf4 \ +\cf7 \} \cf4 \ +\cf7 __CbC_return = return1; \cf4 \ +\cf7 */\cf4 \ +\ + \cf8 goto\cf4 \cf9 code1\cf4 (30,__return,__environment); \cf7 // __code (*__return)(); struct __CbC_env __environment\cf4 \ + \cf8 return\cf4 0;\ +\}\ +} + VerticalPad + 0 + + Wrap + NO + + + GridInfo + + SnapsToGrid + YES + + GuidesLocked + NO + GuidesVisible + YES + HPages + 4 + ImageCounter + 3 + KeepToScale + + Layers + + + Lock + NO + Name + Layer 1 + Print + YES + View + YES + + + LayoutInfo + + Animate + NO + circoMinDist + 18 + circoSeparation + 0.0 + layoutEngine + dot + neatoSeparation + 0.0 + twopiSeparation + 0.0 + + LinksVisible + NO + MagnetsVisible + NO + MasterSheets + + ModificationDate + 2013-12-17 07:17:42 +0000 + Modifier + utah + NotesVisible + NO + Orientation + 2 + OriginVisible + NO + PageBreaks + YES + PrintInfo + + NSBottomMargin + + float + 41 + + NSHorizonalPagination + + coded + BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG + + NSLeftMargin + + float + 18 + + NSPaperSize + + size + {595, 842} + + NSPrintReverseOrientation + + int + 0 + + NSRightMargin + + float + 18 + + NSTopMargin + + float + 18 + + + PrintOnePage + + ReadOnly + NO + RowAlign + 1 + RowSpacing + 36 + SheetTitle + Canvas 1 + SmartAlignmentGuidesActive + YES + SmartDistanceGuidesActive + YES + UniqueID + 1 + UseEntirePage + + VPages + 1 + WindowInfo + + CurrentSheet + 0 + ExpandedCanvases + + + name + Canvas 1 + + + Frame + {{576, 226}, {855, 938}} + ListView + + OutlineWidth + 142 + RightSidebar + + ShowRuler + + Sidebar + + SidebarWidth + 120 + VisibleRegion + {{-9, 0}, {720, 783}} + Zoom + 1 + ZoomValues + + + Canvas 1 + 1 + 1 + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/2013_12_20/with_env_ex3.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/2013_12_20/with_env_ex3.svg Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,718 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2012_12_18.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2012_12_18.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,53 @@ + + + + slide + + + + + + + +
+ +
+

+ Seminar
18,December +

+

+
    +
  • Kaito Tokumori
  • +
+

+
+

+
+ +
+
+

+ 論文読み。 +

+
    +
  • CbCコンパイラのGCC-4.2による実装
  • +
  • CbCのGCC-4.6上の実装について
  • +
  • DataSegment API を用いた分散フレームワークの設計
  • +
+
+
+ +
+
+

+ 論文読み。 +

+
    +
  • Code Segment ? DataSegment ?
  • +
+
+
+
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_03_12.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_03_12.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,75 @@ + + + + 資料 + + + + + + + +
+ +
+

+ Merch 12, 2013 +

+

+
    +
  • Kaito Tokumori
  • +
+

+
+

+
+ +
+
+

+ 今週したこと +

+
    +
  • Message Packについて
  • +
+
+
+ +
+
+

+ Message Pack (1) +

+
    +
  • javascriptのserializerを読んだ。
  • +
  • pack,unpack,upload,download
  • +
  • 真偽値、数値、文字列、配列、ハッシュが使用可能。
  • +
+
+
+ +
+
+

+ Message Pack (2) +

+
    +
  • JSONとのシリアライズデシリアライズ速度比較
  • +
  • javascriptだとJSONの方が速い。
  • +
  • javascriptだと数値は全部NumberなのでサイズもJSONの方が小さい。
  • +
  • StringにしておけばMessage Packの方が小さくなる?
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_03_19.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_03_19.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,90 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのGCC4.7.2上での実装

+


Kaito Tokumori
March 19, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。CbCはCからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+  当初CbCのコンパイルにはMicro-C版の独自のコンパイラを用いていたが、2008年の研究においてGCC-4.2ベースのCbCコンパイラが開発され、2010年にはGCC-4.4、2012年にはGCC-4.6へとアップデートが行われた。GCCへの実装によりGCCの最適化やデバッガの機能を使うことが出来より実用的なCbCプログラミングが行えるようになったが、GCCのアップデートに合わせてCbCのコンパイラも変更する必要がある。本研究では、既存のCbC-GCCをGCC-4.7.2へとアップデートし、CbCの拡張を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • CbCに関連する論文読み +
      +
    • Continuation based CコンパイラのGCC4.2による実装
    • +
    • Continuation based CコンパイラのGCC4.6上の実装について
    • +
    • mercurial上のCbC対応gccをとってきてgcc4.7.2と一緒に眺めた
    • +
    +
  • +
+
+
+ +
+
+

+ CbC +

+
    +
  • アセンブリより上位でCより下位な言語。Cからループ制御と関数コールを取り除いたもの。
  • +
  • 継続という独自のgoto、code segmentを導入。
  • +
  • call命令じゃなくてjump命令で根源の関数に飛ぶので無駄なreturnが無い。
  • +
  • code segmentはCbCにおける最も基本的な処理単位。
  • +
  • 継続(goto)はCにおけるlabelのgotoではない。goto cs();というようにしてcode segmentからcode segmentへ継続していく。
  • +
+
+
+ +
+
+

+ 既存のCbC-GCCとGCC4.7.2の実装箇所の違い +

+
    +
  • 予約語の定義は同じ場所。gcc/c-family/c-common.cのc_commoc_reswords構造体。
  • +
  • 予約語の定義に必要なid(RID_CbC_CODE)の宣言場所も同じ。同ディレクトリのc-common.h。
  • +
  • 4.7.2も、statmentのparseはc_parser_statement_after_labels()関数内で行われているようなので継続(goto)の実装箇所も同じ。
  • +
+
+
+ +
+
+

+ 次したいこと +

+
    +
  • 誤ってCbC-GCCのGCCのバージョンが4.4のものを読んでいたので最新(4.6?)のを読みたい。
  • +
  • わからなかった部分を調べ直す。
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_03_26.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_03_26.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,102 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのGCC4.9.0上での実装

+


Kaito Tokumori
March 26, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。CbCはCからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+  当初CbCのコンパイルにはMicro-C版の独自のコンパイラを用いていたが、2008年の研究においてGCC-4.2ベースのCbCコンパイラが開発され、2010年にはGCC-4.4、2012年にはGCC-4.6へとアップデートが行われた。GCCへの実装によりGCCの最適化やデバッガの機能を使うことが出来より実用的なCbCプログラミングが行えるようになったが、GCCのアップデートに合わせてCbCのコンパイラも変更する必要がある。本研究では、既存のCbC-GCCをGCC-4.9.0へとアップデートし、CbCの拡張を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • GCCのアップデート +
      +
    • 4.6 -> 4.9.0
    • +
    +
  • +
  • GCCのアップデートに伴うCbC-GCCの変更
  • +
+
+
+ +
+
+

+ GCCのアップデート +

+
    +
  • 最新版の4.9.0にした。
  • +
  • GCC_originalをclone、中身を4.9.0にかえてaddremoveしてcommit,push
  • +
+
+
+ +
+
+

+ GCCのアップデートに伴うCbC-GCCの変更 +

+
    +
  • 殆ど hg mergeで解決。
  • +
  • 駄目だった物 +
      +
    • gcc/c-family/c-common.c
    • +
    • gcc/config/i386/i386.c
    • +
    • gcc/configure.ac
    • +
    • gcc/gimple.h
    • +
    • gcc/gimplify.c
    • +
    • gcc/tree-ssa-operands.c
    • +
    • gcc/tree.c
    • +
    +
  • +
+
+
+ +
+
+

+ 変更部分 +

+
+
+ +
+
+

+ 次したいこと +

+
    +
  • うごくようにする。
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_04_02.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_04_02.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,103 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのGCC4.9.0上での実装

+


Kaito Tokumori
April 2, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。CbCはCからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+  当初CbCのコンパイルにはMicro-C版の独自のコンパイラを用いていたが、2008年の研究においてGCC-4.2ベースのCbCコンパイラが開発され、2010年にはGCC-4.4、2012年にはGCC-4.6へとアップデートが行われた。GCCへの実装によりGCCの最適化やデバッガの機能を使うことが出来より実用的なCbCプログラミングが行えるようになったが、GCCのアップデートに合わせてCbCのコンパイラも変更する必要がある。本研究では、既存のCbC-GCCをGCC-4.9.0へとアップデートし、CbCの拡張を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • GCCのアップデートに伴うCbC-GCCの変更
  • +
+
+
+ + +
+
+

+ GCCのアップデートに伴うCbC-GCCの変更 +

+
    +
  • ediffを用いて解決。
  • +
  • mergeが必要だったファイル +
      +
    • gcc/c-family/c-common.c
    • +
    • gcc/config/i386/i386.c
    • +
    • gcc/configure.ac
    • +
    • gcc/gimple.h
    • +
    • gcc/gimplify.c
    • +
    • gcc/tree-ssa-operands.c
    • +
    • gcc/tree.c
    • +
    +
  • +
+
+
+ +
+
+

+ GCCのアップデートに伴うCbC-GCCの変更 +

+
    +
  • 場所の変更があったファイル +
      +
    • gcc/c-parser.c -> gcc/c/c-parser.c
    • +
    • gcc/c-typec.c -> gcc/c/c-typec.c
    • +
    • gcc/c-decl.c -> gcc/c/c-decl.c
    • +
    • gcc/c-tree.h -> gcc/c/c-tree.h
    • +
  • +
+
+
+ +
+
+

+ make error 直し +

+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_04_09.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_04_09.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,91 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのGCC4.9.0上での実装

+


Kaito Tokumori
April 9, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。CbCはCからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+  当初CbCのコンパイルにはMicro-C版の独自のコンパイラを用いていたが、2008年の研究においてGCC-4.2ベースのCbCコンパイラが開発され、2010年にはGCC-4.4、2012年にはGCC-4.6へとアップデートが行われた。GCCへの実装によりGCCの最適化やデバッガの機能を使うことが出来より実用的なCbCプログラミングが行えるようになったが、GCCのアップデートに合わせてCbCのコンパイラも変更する必要がある。本研究では、既存のCbC-GCCをGCC-4.9.0へとアップデートし、CbCの拡張を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • CbC-examplesが動作するかどうかの確認
  • +
  • CbC-GCCをgdb経由で動かす
  • +
+
+
+ +
+
+

+ GCCのアップデートに伴うCbC-GCCの変更 +

+
    +
  • 動作した物 +
      +
    • pointer_check
    • +
    • rectype
    • +
    • regexp
    • +
    • return_check
    • +
  • +
  • 動作しなかった物 +
      +
    • quick_sort
    • +
    • rectypeTest
    • +
  • +
+
+
+ +
+
+

+ CbC-GCCをgdb経由で動かす +

+
    +
  • configureにCbC-INSTALLにメモされていたオプションを指定するとそのまま通った。
  • +
  • cc1の場所は"(インストール先)/libexec/gcc/x86_64-apple-darwin12.3.0/4.9.0/cc1"
  • +
+
+
+ + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_05_07.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_05_07.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,110 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのGCC4.9.0上での実装

+


Kaito Tokumori
May 7, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。CbCはCからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+  当初CbCのコンパイルにはMicro-C版の独自のコンパイラを用いていたが、2008年の研究においてGCC-4.2ベースのCbCコンパイラが開発され、2010年にはGCC-4.4、2012年にはGCC-4.6へとアップデートが行われた。GCCへの実装によりGCCの最適化やデバッガの機能を使うことが出来より実用的なCbCプログラミングが行えるようになったが、GCCのアップデートに合わせてCbCのコンパイラも変更する必要がある。本研究では、既存のCbC-GCCをGCC-4.9.0へとアップデートし、CbCの拡張を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • CbC-examplesが動作するかどうかの確認
  • +
  • rectype,selftypeを取り除く
  • +
  • 出力されるアセンブラコードのチェック
  • +
+
+
+ +
+
+

+ CbC-examples +

+
    +
  • 前回動作しなかった物 +
      +
    • quick_sort
    • +
    • rectypeTest
    • +
  • +
+
+
+ +
+
+

+ CbC-examples +

+
    +
  • quick_sort +
      +
    • header生成スクリプトのバグ
    • +
    • headerを編集したら動いた
    • +
    +
  • +
  • rectypeTest +
      +
    • rectypeを一度取り除くことに
    • +
    +
  • +
+
+
+ +
+
+

+ arg.cについて +

+
    +
  • -O3オプションつけないとWarningがでる
  • +
  • transition to code segment "carg3" with CbC goto, but tail call optimization was cut.
  • +
  • -Sでアセンブラファイルを出力すると、-O3なしでは一部のコードセグメントがcallで呼ばれていた。
  • +
  • -O3つけたらcallが消えたり。
  • +
  • コードセグメント内部で生成した構造体を別のコードセグメントに渡すか渡さないか?
  • +
  • 単純にinline化されたからcallが消えただけ?
  • +
  • mainからcode segmentに行くときはcallされる?
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_05_21.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_05_21.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,75 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
May 21, 2013

+
+ +
+
+

+ 研究目的 +

+

+  当研究室ではcode segment単位で処理を記述するContinuation based C(以下CbC)というプログラミング言語を開発している。Cからループ制御と関数コールを取り除いたもので、C言語よりも細かく、アセンブリより高級なプログラミングが可能である。 +

+

+ また、CbCはcode segment間の移動をcall命令でなくjmp命令で行うという特性を持っており、これにより余分なreturnを減らすことができる。これはtail call eliminationのによって実現されるので、CbCを利用することでtail call eliminationを強制し、プログラムをより最適化できるとも言える。 +

+

+  現在CbCのコンパイルはMicro-C版、GCC版がある。今回の研究ではさらにllvm,clangを用いたコンパイラの実装を行う。 +

+
+ +
+
+

+ 今週したこと +

+
    +
  • 予約語として"__code"を認識させる
  • +
  • 現時点ではとりあえず"void"と同様に扱う
  • +
+
+
+ +
+
+

+ "__code"の認識 +

+
    +
  • 予約語は"clang/include/clang/Basic/TokenKinds.def"で登録する。
  • +
  • ここで登録すると"kw_(登録したワード)"として扱われる。parserのswitch文はこれを用いて分岐。
  • +
  • "clang/lib/Parse/ParseDecl.cpp"の"Parser::ParseDeclarationSpecifiers()"
  • +
  • ここで"TST_***"としてDeclSpecクラスに送られる。
  • +
  • 今はここをkw_voidのときと同じ処理をするようにしてvoidとして扱っている。
  • +
+
+
+ + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_05_28.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_05_28.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,75 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
May 28, 2013

+
+ +
+
+

+ 研究目的 +

+
    +
  • 当研究室で開発しているContinuation based C(CbC)によるtail call eliminationの強制。
  • +
  • Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。
  • +
+ +
+ +
+
+

+ 今週したこと +

+
    +
  • llvmコードでコードセグメントである情報を残す手段の模索
  • +
+
+
+ +
+
+
    +
  • 関数に対するフラグ
  • +
  • __attribute__
  • +
  • metadata
  • +
+
+
+ + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_06_04.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_06_04.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,76 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
June 4, 2013

+
+ +
+
+

+ 研究目的 +

+
    +
  • 当研究室で開発しているContinuation based C(CbC)によるtail call eliminationの強制。
  • +
  • Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。
  • +
+ +
+ +
+
+

+ 今週したこと +

+
    +
  • Tail Call Flagを立てる手段の模索
  • +
+
+
+ +
+
+
    +
  • Tail CallかどうかのフラグはCallInstクラスが持っている。
  • +
  • -O2オプションを負荷した場合はTailCallElimというパスを通ることによってCallInst.setTailCall()される。
  • +
  • -O0の場合はTailCallElimが実行するパスとして含まれない。
  • +
  • -O0で__codeのときにTailCallをセットするためのパスを作らないといけない?
  • +
+
+
+ + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_06_11.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_06_11.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,76 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
June 11, 2013

+
+ +
+
+

+ 研究目的 +

+
    +
  • 当研究室で開発しているContinuation based C(CbC)によるtail call eliminationの強制。
  • +
  • Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。
  • +
+ +
+ +
+
+

+ 今週したこと +

+
    +
  • goto cs();のparse
  • +
+
+
+ +
+
+
    +
  • goto が来た時の処理はParseStatementOrDeclarationAfterAttributes関数で行われる
  • +
  • goto の次のトークンがidentifierでさらにその次がl_parenの時にCbCのgotoと判断
  • +
  • 今はただのcall
  • +
  • やっぱりpassを通るようにしないといけない
  • +
+
+
+ + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_06_15.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_06_15.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,106 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
June 25, 2013

+
+ +
+
+

+ 研究目的 +

+
    +
  • 当研究室で開発しているContinuation based C(CbC)を用いたtail call eliminationの強制。
  • +
  • tail call eliminationにより、Cにおける大きなオーバーヘッドである関数呼び出しの際のreturnの削減。
  • +
  • goto文による処理の記述は状態遷移系とも相性が良い。
  • +
  • Micro-C,GCC版に次ぐllvmを使用したコンパイラの実装。
  • +
+
+ +
+
+

+ 今週したこと +

+
    +
  • 拡張子がcbcのファイルをコンパイルできるように
  • +
  • 拡張子がcbcのばあいにO2フラグの強制付与
  • +
  • llvmでtail call optimizationが行われる条件について調査
  • +
+
+
+ +
+
+

+ O2の付与 +

+
    +
  • IK_CbCを宣言して拡張子がcbcの場合はInputKindをCbCに
  • +
  • これであとでオプション指定するときにIK_CbCならOptLevelを2ってできる
  • +
+
+
+ +
+
+

+ llvmでtail call optimizationが行われる条件(x86/x86-64の場合) +

+
    +
  • CallerとCalleeの両方のcalling conventionがfastcc,cc10,cc11のいずれか
  • +
  • callの直後にretが来る +
      +
    • ret voidというのが自動的に付加されるので特に考えなくていい?
    • +
    +
  • +
  • tailcalloptが有効
  • +
  • variable argument listsを使用していない
  • +
+
+
+ +
+
+

+ llvmでSibling call optimizationが行われる条件 +

+
    +
  • x86/x86-64じゃなきゃだめ
  • +
  • CallerとCalleeのcalling conventionがcかfastccで一致している
  • +
  • callの直後にretが来る
  • +
  • CallerとCalleeの戻り値の方が一致していてCalleeの戻り値が使用されない +
      +
    • code segmentはvoidで統一されているので無問題
    • +
    +
  • +
  • variable argument listsを使用していない
  • +
+
+
+
+
+

+ 次したいこと +

+
    +
  • 拡張子に頼らないで.cでも__codeが入っていたらO2入れるようにする必要がある?
  • +
  • tail call eliminationを満たす条件を__codeが満たすようにする(そうすればO2だからかってにjmpになる説)
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_07_02.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_07_02.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,86 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
July 2, 2013

+
+ +
+
+

+ 研究目的 +

+
    + 書きなおす + +
+
+ +
+
+

+ 今週の課題 +

+
    +
  • goto code segmentの直後にreturnの挿入
  • +
  • 拡張子でなく、__codeの有無で-O2の付与
  • +
  • goto cs()のときtail call eliminationが行われるよう条件を満たさせる
  • +
+
+
+ +
+
+

+ O2の付与 +

+
    +
  • 最適化のPassを通すか通さないかはCodeGenOpts.OptimizeLevelを見ている。
  • +
  • この他に、LangOptionsにもOptimizationがあり、こっちも1にしないといけない。
  • +
  • どちらもCompilerInvocation以外からはconst修飾子が付いた状態でしか参照できず値が書き換えられない。
  • +
  • 適当なヘッダを作成してLangOptions等とは別に作成する。
  • +
+
+
+ +
+
+

+ returnの挿入 +

+
    +
  • parseReturnStmtを真似て実装。(未)
  • +
  • csからcsに飛ぶ時だけ挿入するようにする。
  • +
+
+
+ +
+
+

+ 次したいこと +

+
    +
  • ふたつの問題を解決する
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_07_09.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_07_09.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,113 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
July 9, 2013

+
+ +
+
+

+ 研究背景と目的(1) +

+

 現在までに多くのプログラミング言語が開発され、そのたびにプログラミング言語の流行は変化してきた。Cは比較的歴史の古い言語であるが、普及率が高く古い資産の多くがCを用いて記述されていたことから現在でも多くのシステム開発に用いられている。しかし、Cにはいくつか問題がある。その一つには関数呼び出しの際のオーバーヘッドが大きいことがある。さらに関数呼び出しを過度に繰り返すとスタックオーバーフローが生じる危険性もある。 +

+
+ +
+
+

+ 研究背景と目的(2) +

+

 当研究室ではこれらの問題に取り組むためCountinuation based C (CbC)という言語の開発を行なっている。CbCはCから関数呼び出しやループ制御を取り除き、代わりに継続(Continuation)を用いて制御を行う言語であり、継続とはプログラムの次の実行処理を表現する制御構造である。この特徴からCbCはCの下位言語、即ち互換性のある言語と考えることが出来る。 +
 CbCコンパイラは初めにmicro-cをベースとしたものが開発され、続いて2008年の研究によりGCCベースのものが開発された。本研究ではこれらに続くLLVMベースのコンパイラの開発を行う。 +

+ +
+ +
+
+

+ 今週の課題 +

+
    +
  • 研究目的を考える
  • +
  • goto code segmentの直後にreturnの挿入
  • +
  • goto cs()のときtail call eliminationが行われるよう条件を満たさせる
  • +
+
+
+ +
+
+

+ returnの挿入 +

+
    +
  • parseReturnStmtを真似て実装。
  • +
  • csからcsに飛ぶ時だけ挿入するようにする。
  • +
  • いまはreturn typeをvoidにしてるのでvoidのときもreturn入れてる。
  • +
  • そもそもvoid型関数のときはTCEしていいのかだめなのか。
  • +
+
+
+ +
+
+

+ TailCallElimについて +

+
    +
  • CallingConvをGHCとかHiPEとかにすればいけるのでは? +
      +
    • X86ISelLowering.cppでのIsTailCallConvention()で確かにこれらのCalling Conventionのときにtrueを返しているが、IsTailCallConventionを呼ぶ前にisTailCallがtrueでないとそこまで到達しない
    • +
    • なのでやっpりTailCallElimPassとおしてsetTailCall()しないといけない。そのあとにCallingConvを変えて様子を見たい
    • +
    +
  • +
+
+
+ +
+
+

+ TailCallElimPassについて +

+
    +
  • 'escaping alloca'があったらなにもしない。(tail call flag立てない)。
  • +
  • まずがあったらなにもしない。(tail call flag立てない)。
  • +
  • 先に末尾最適化を行う。
  • +
  • それからtail call frag を立てていく。
  • +
  • 'escaping alloca'はこのPassに入る前にとおるSROA(Scalar Replacement Of Aggregates)のPassで処理される。
  • +
+
+
+ + +
+
+

+ TailCallElimPassについて +

+
    +
  • SROAを真似てescaping allocaを除去してTailCallElimPassを通せばとりあえずスタートライン?
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_07_16.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_07_16.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,69 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
July 16, 2013

+
+ +
+
+

+ 研究背景と目的 +

+

+ 比較的歴史の古い言語であるCは普及率が高く多くのシステムに用いられている。そのCの問題のひとつに関数呼び出しの際のオーバーヘッドが大きいというものがある。当研究室ではこれらの問題に取り組むためにCountinuation based C (CbC)という言語の開発を行なっている。CbCはCの関数呼び出しやループ制御の代わりに継続を用いて制御を行うもので、Cの下位言語に当たる。本研究ではmicro-c,GCC版に次ぐLLVMベースのCbCコンパイラ開発を行う。 +

+
+ +
+
+

+ 今週の課題 +

+
    +
  • 研究目的をゼミ用に小さくする
  • +
  • goto cs()のときtail call eliminationが行われるよう条件を満たさせる
  • +
+
+
+ +
+
+

+ llvm Typeに__codeを認識させる +

+
    +
  • clangのもつ***Tyとは別にllvm側にも***Typeあってそっちがvoidになってた。
  • +
  • flagをつけて__codeの時はそれで判別するようにした。
  • +
+
+
+ +
+
+

+ TailCallElim +

+
    +
  • とりあえず通してただけなので、flagをつけて-O2によって呼ばれてないときは__codeのみ触るようにした。
  • +
  • Alloca除去のためにSROAも。
  • +
  • これでやっとスタート(まだcallが残ってる)
  • +
  • factorialだとprint_factorialがcall。なぜかreturnで終わってるかどうかのところでひっかかてる。
  • +
  • 普通に入れてもだめ。
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_07_30.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_07_30.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,68 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
July 30, 2013

+
+ +
+
+

+ 研究背景と目的 +

+

+ 比較的歴史の古い言語であるCは普及率が高く多くのシステムに用いられている。そのCの問題のひとつに関数呼び出しの際のオーバーヘッドが大きいというものがある。当研究室ではこれらの問題に取り組むためにCountinuation based C (CbC)という言語の開発を行なっている。CbCはCの関数呼び出しやループ制御の代わりに継続を用いて制御を行うもので、Cの下位言語に当たる。本研究ではmicro-c,GCC版に次ぐLLVMベースのCbCコンパイラ開発を行う。 +

+
+ +
+
+

+ 今週の課題 +

+
    +
  • + goto cs()のときtail call eliminationが行われるよう条件を満たさせる +
      +
    • GuaranteedTailCallOptを立てよう
    • +
    +
  • +
+
+
+ +
+
+

+ TailCallElim +

+
    +
  • + __codeが含まれている場合にGuaranteedTailCallOptを立てることが出来た。 +
      +
    • しかしその場合でも、unreachableで終わっている必要があり無意味
    • +
    +
  • +
  • + clangで吐き出したllvmコードをllcでコンパイルするとcallがとれていた。 +
      +
    • また、castに成功しており、callの直後にreturnがあると判別されていた。
    • +
    +
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_08_20.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_08_20.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,69 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
August 20, 2013

+
+ +
+
+

研究背景と目的

+

+ 比較的歴史の古い言語であるCは普及率が高く多くのシステムに用いられている。そのCの問題のひとつに関数呼び出しの際のオーバーヘッドが大きいというものがある。当研究室ではこの問題をTail Call Eliminationの強制により解決しようと考えており、それを実現すべくCountinuation based C (CbC)という言語の開発を行なっている。CbCはCの関数呼び出しやループ制御の代わりに継続を用いて制御を行うもので、Cの下位言語に当たる。本研究ではmicro-c,GCC版に次ぐLLVMベースのCbCコンパイラ開発を行う。 +

+
+ +
+
+

今週の課題

+
    +
  • llvmのdownload〜makeまでをwikiにまとめる
  • +
  • 関数呼び出しの後にReturnが来ない原因について
  • +
+
+
+ +
+
+

wikiにまとめる

+
    +
  • まとめました。
  • +
  • http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/index.php?llvm
  • +
+
+
+ +
+
+

returnの問題

+
    +
  • ReturnInstでなくBranchInstで終わっていることがわかった。
  • +
  • llvmアセンブリからも読み取れる。
  • +
  • llvmアセンブリではBranchInstでもllcを通せばReturnInstに変わっている。
  • +
  • どこかにBranchInstをReturnInstに直すような最適化を行っている部分があるのではないか。
  • +
+
+
+ +
+
+

次の課題

+
    +
  • どこかにBranchInstをReturnInstに直す部分を探し、処理の確認とclangへの導入。
  • +
+
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_09_17.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_09_17.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,104 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
September 17, 2013

+
+ +
+
+

研究背景と目的

+

+ 比較的歴史の古い言語であるCは普及率が高く多くのシステムに用いられている。そのCの問題のひとつに関数呼び出しの際のオーバーヘッドが大きいというものがある。当研究室ではこの問題をTail Call Eliminationの強制により解決しようと考えており、それを実現すべくCountinuation based C (CbC)という言語の開発を行なっている。CbCはCの関数呼び出しやループ制御の代わりに継続を用いて制御を行うもので、Cの下位言語に当たる。本研究ではmicro-c,GCC版に次ぐLLVMベースのCbCコンパイラ開発を行う。 +

+
+ +
+
+

今日までの

+
    +
  • tail call elimination を適用する
    • returnが後ろに来ない問題
  • +
+
+ + +
+
+

returnの問題

+
    +
  • ReturnInstでなくBranchInstで終わっていることがわかった。
  • +
  • llvmアセンブリからも読み取れる。
  • +
  • llvmアセンブリではBranchInstでもllcを通せばReturnInstに変わっている。
  • +
  • どこかにBranchInstをReturnInstに直すような最適化を行っている部分があるのではないか。
  • +
+
+ +
+
+

returnの問題

+
    +
  • lib/Transforms/Scalar/CodeGenPrepare.cpp L706 DupRetToEnableTailCallOpts()
  • +
  • llcはこいつがはいっていた。
  • +
+
+ +
+
+

DupRetToEnableTailCallOpts()

+
+
+/// DupRetToEnableTailCallOpts - Look for opportunities to duplicate return
+/// instructions to the predecessor to enable tail call optimizations. The
+/// case it is currently looking for is:
+/// bb0:
+///   %tmp0 = tail call i32 @f0()
+///   br label %return
+/// bb1:
+///   %tmp1 = tail call i32 @f1()
+///   br label %return
+/// bb2:
+///   %tmp2 = tail call i32 @f2()
+///   br label %return
+/// return:
+///   %retval = phi i32 [ %tmp0, %bb0 ], [ %tmp1, %bb1 ], [ %tmp2, %bb2 ]
+///   ret i32 %retval
+/// =>
+/// bb0:
+///   %tmp0 = tail call i32 @f0()
+///   ret i32 %tmp0
+/// bb1:
+///   %tmp1 = tail call i32 @f1()
+///   ret i32 %tmp1
+/// bb2:
+///   %tmp2 = tail call i32 @f2()
+///   ret i32 %tmp2
+	  
+
+
+ +
+
+

returnの問題

+
    +
  • HasCodeSegmentというオプションを付加。
  • +
  • code segmentを持っている時にはここを必ず通るように。
  • +
  • returnがきちんと認識された。
  • +
  • O2のときにはどのBasicBlockもReturnInstを持ってない扱いでcallがtailにならない。
  • +
  • O2の時に通るパスの影響?
  • +
  • emit-llvmしてllc通してもダメなのでPassの影響だとしたらCodeGenのPass以外
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_10_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_10_1.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,58 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
October 1, 2013

+
+ +
+
+

研究背景と目的

+

+ 比較的歴史の古い言語であるCは普及率が高く多くのシステムに用いられている。そのCの問題のひとつに関数呼び出しの際のオーバーヘッドが大きいというものがある。当研究室ではこの問題をTail Call Eliminationの強制により解決しようと考えており、それを実現すべくCountinuation based C (CbC)という言語の開発を行なっている。CbCはCの関数呼び出しやループ制御の代わりに継続を用いて制御を行うもので、Cの下位言語に当たる。本研究ではmicro-c,GCC版に次ぐLLVMベースのCbCコンパイラ開発を行う。 +

+
+ +
+
+

先週課されたもの

+
    +
  • -O2 で Tail Call Eliminationできるようにする。
  • +
+
+ + +
+
+

-O2でもTail Call Elimination

+
    +
  • createPruneEHPassの行う最適化が原因でTCEされなかった。
  • +
  • 関数内にreturnが無いときにnoreturnが付与される。
  • +
  • print_factorialはexitで抜けていたのでnoreturnが付く。
  • +
  • …だけどprint_factorialを呼び出すときにjmpにならない問題だからなんか違うような。
  • +
  • 一応これによってjmpを出すようになった。
  • +
+
+ +
+
+

+
    +
  • createPruneEHPassが実際のところなにをしているのか知りたい
  • +
  • その上でcreatePruneEHPassによってどうしてjmpにならなかったのか突き止める
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_10_15.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_10_15.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,77 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
October 15, 2013

+
+ +
+
+

研究背景と目的

+

省略

+
+ +
+

先週課されたもの

+
    +
  • 研究目的をもうちょっとなんとか…(2回目)
  • +
  • TCEが失敗したのにエラーが出なかった問題の調査と解決
  • +
+
+ +
+

TCE失敗時にエラーが出ない問題

+
    +
  • factorialでテストした時に、-O2だとひとつだけcallのfactorialがあった。
  • +
  • code segmentのTCEチェックはtail callの条件チェック後に行っていたのにエラーが出なかった。
  • +
+
+ +
+

TCE失敗時にエラーが出ない問題(調査結果)

+
    +
  • 最適化によって、計算処理を全部main内で行っていた。
  • +
  • print_factorialだけが使用されて、mainから直接呼び出されていた。
  • +
  • アセンブリファイルに色々残っているけど実際は下のmainの部分しか通らない。
      +
    • llvmアセンブリコードより。
    • +
  • +
+
+ +
+

factorial.ll(factorial.cをllvm assembly fileにしたもの)

+

+ factorial.ll +

+
+ +
+

TCE失敗時にエラーが出ない問題、TCEされない問題

+
    +
  • callとなっていたprint_factorialはmainから呼ばれているのでcallなのは当然。
  • +
  • code segmentからcode segmentへのgotoじゃないのでエラーが出ないのも当然。
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_10_29.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_10_29.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,59 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
October 15, 2013

+
+ +
+

研究背景と目的 (1)

+

現代社会においてプログラムは様々な場所で用いられ、その用途に応じて求められる要素も様々である。例えばReal-timeな制御が重要視される場合には速度が、組込みシステムなどのメモリが制限される環境では軽量なプログラムが求められる。軽量で高速であるという条件に最も適しているのはアセンブリ言語であるが、低レベル過ぎてわかりづらい上に、アーキテクチャへの依存性が高いため汎用的でない。当研究室ではそういった要求に応える言語としてCbCを提案している。

+
+ +
+

研究背景と目的 (2)

+

CbCのコンパイラとしては初めにmicro-cをベースとしたものが開発され、続いて2008年の研究によりGCCベースのものが開発されGCCの持つ最適化の恩恵を受けることに成功した。しかし、Mac OS Xの最新版であるMavericksでは、cコンパイラとしてgccではなくllvm(clang)が用いられるようになった。llvmもgccと同じように強力な最適化を持っており、さらにエラーメッセージがgccに比べ丁寧であるという特徴を持つ。本研究では、micro-c,gccに続くLLVM/clangベースのコンパイラの開発を行う。

+
+ +
+

先々週課されたもの

+
    +
  • 研究目的をもうちょっとなんとか(3回目)
  • +
  • 環境付き継続について考える
  • +
+
+ +
+

環境付き継続

+
    +
  • gccと同様にnested functionを用いる
  • +
  • exceptionを使う
  • +
  • setjmp,longjmpを使う
  • +
  • 何かllvmの機能でどうにかこうにか
  • +
+
+ +
+

llvm

+
    +
  • 何かllvmの機能でどうにかこうにか
  • +
  • llvm.returnaddressとかllvm.frameaddressとか
      +
    • 注意書き:debug時限定に使用されるべき
    • +
  • +
  • llvmでのException handlingはSetjmp/Longjmpを用いて行われる
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_10_8.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_10_8.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,143 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
October 8, 2013

+
+ +
+
+

研究背景と目的

+
    +
  • 関数呼び出しの際のオーバーヘッド解決
      +
    • Tail Call Elimination
    • +
    • 継続による制御
    • +
  • +
  • インライン展開について
      +
    • インライン展開によってオーバーヘッドが削減される点について
    • +
    • 展開にも限度がある
    • +
  • +
  • その他
      +
    • Cの一部を置き換えるCwCという方式を取ればCとの互換性がある
    • +
    • コードセグメント単位で分けると処理内容が明確
    • +
  • +
+ +
+ +
+
+

先週課されたもの

+
    +
  • 研究目的をもうちょっとなんとか…
  • +
  • code segmentなのにcallされた時にエラーを出す。
  • +
  • createPruneEHPassによってどうしてjmpにならなかったのか
  • +
+
+ +
+
+

エラーを出す

+
    +
  • SelectionDAGBuilder.cppのLowerCallTo関数でチェック
  • +
  • LowerCallTo関数でチェック
      +
    • LowerCallTo関数が呼び出す関数を辿って行くとTCEするかどうか調べる処理群にたどりつく。
    • +
    • LowerCallTo関数がCallLoweringInfoを作るときに呼び出す関数がTarget依存のようなのでここで調べるといちいちTarget毎に書かなくていい。
    • +
  • +
  • callerとcalleeがcode segmentの時にtail call flagがfalseにされていたらerrorを出す。
  • +
+
+ +
+
+

llvm::Typeについて

+
    +
  • errorを出させるときになぜかexit()がcode segmentと言われて怒られた。
  • +
  • llvm側のTypeは基本はvoidと同じようにして扱い、__codeであることがわかればいいことからis__Codeというflagを設けそれを用いて判断していた。
  • +
    • なぜかcode segmentでない関数もis__Codeがtrueになっていた
    +
+
+ +
+
+

llvm::Typeについて(解決編)

+
    +
  • 原因:llvmのFunctionTypeが参照するReturnTypeは型毎に同じアドレスのオブジェクトを参照している!
  • +
  • なので一つのコードセグメントに対してFlagを建てた時に全てのvoid関数がコードセグメントとして扱われることになっていた
  • +
  • これより、flagを廃止して__CodeTyを作成する方向に変更。"include/llvm/IR/Type.h"でIDを定義して"lib/IR/Type.cpp"で関数を書く。
  • +
+
+ +
+
+

エラー

+
    +
  • Emiterrorという関数をつかって出力できた。
  • +
+

+
+ +
+
+

createPruneEHPassを通すとjmpにならない

+
    +
  • createPruneEHPassが実際のところなにをしているのかまではいまいち…
  • +
  • createPruneEHPassを通ると例の直後にreturnが来てるかどうかの部分でひっかかかる。
      +
    • unreachableになっていた。
    • +
  • +
+
+ +
+
+

createPruneEHPassを通すとjmpならない(回避策)

+
    +
  • unreachableの時にはGuranteedTailCallOptがtrueじゃないといけない。
      +
    • GuranteedTailCallOptをtrueにする場合、CallingConventionに制限がかかる。
        +
      • それを避けたくてGuaranteedTailCallOptを入れていなかった…。
      • +
    • +
  • +
  • どのCallingConventionでなければならないかはTarget Machineによって異なる。
      +
    • X86はFastCC,HiPE,GHC。ARMArch64はFastCCだけ。等
    • +
  • +
+
+ +
+
+

回避策としてCallingConventionをFastCCにした場合

+
    +
  • O0では特に問題なし。TCEもされる。エラーも出ない。
  • +
  • O2だと一部callのまま…。(factorialの場合複数あるprint_factorialのうち1つだけcall)
  • +
  • しかもエラー出ない。
      +
    • つまりTail Call Flagのチェック以後にcallにされている?
    • +
    • どちらにしてもエラーを吐く場所を変えないといけない可能性
    • +
  • +
  • print_factorialが複数生成されているのはそういう最適化?
  • +
+
+ +
+
+

+
    +
  • print_factorialがjmpにならない原因を探る
  • +
  • 必要であればエラーを出力する場所を変更
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_11_19.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_11_19.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,70 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
November 19, 2013

+
+
+

研究目的

+

 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。

+

本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。

+
+ +
+

今回したこと

+
    +
  • 不具合の修正
      +
    • stdio.hをincludeせずにputs等の関数を使用した時にclangが止まる問題
    • +
    • __codeを含まないコードの時にTCEが無効になる問題
    • +
    • alloca instructionが正しく除去されない問題
    • +
    • ポインタ経由で関数を呼び出した時にTCEが無効になる問題
    • +
  • + +
+
+ +
+

不具合の修正(1)

+
    +
  • stdio.hをincludeせずにputs等の関数を使用した時にclangが止まる問題
        +
      • stdio.hをincludしないとTailCallElimパスに入る時点ではFunctionの実体が無く(null)、そこにアクセスしようとして止まっていた。
      • +
      • Functionがnullかどうか調べてから処理を行うように変更。
      • +
  • + +
  • __codeを含まないコードの時にTCEが無効になる問題
        +
      • if文の条件ミス。
      • +
  • +
+
+ +
+

不具合の修正(2)

+
    +
  • alloca instructionが正しく除去されない問題
        +
      • 条件の変更によって解決。
      • +
      • code segmentを呼び出しているかどうか → 対象関数がcode segmetかどうか
      • +
  • + +
  • ポインタ経由で関数を呼び出した時にTCEが無効になる問題
        +
      • LowerCallingInfo関数で、TCE可能かどうか調べる処理群の直前にフラグを立てる処理を挿入。
      • +
  • +
+
+ +
+

次回課題

+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_11_26.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_11_26.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,72 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
November 26, 2013

+
+
+

研究目的

+

 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。

+

本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。

+
+ +
+

今回したこと

+
    +
  • 不具合の修正
  • +
  • 環境付き継続の実装について
  • +
+
+ +
+

不具合の修正(1)

+
    +
  • stdio.hをincludeせずにputs等の関数を使用した時にclangが止まる問題
        +
      • stdio.hをincludしないとTailCallElimパスに入る時点ではFunctionの実体が無く(null)、そこにアクセスしようとして止まっていた。
      • +
      • Functionがnullかどうか調べてから処理を行うように変更。
      • +
  • + +
  • __codeを含まないコードの時にTCEが無効になる問題
        +
      • if文の条件ミス。
      • +
  • +
+
+ +
+

不具合の修正(2)

+
    +
  • alloca instructionが正しく除去されない問題
        +
      • 条件の変更によって解決。
      • +
      • code segmentを呼び出しているかどうか → 対象関数がcode segmetかどうか
      • +
  • + +
  • ポインタ経由で関数を呼び出した時にTCEが無効になる問題
        +
      • LowerCallingInfo関数で、TCE可能かどうか調べる処理群の直前にフラグを立てる処理を挿入。
      • +
  • +
+
+ +
+

環境付き継続

+
    +
  • malloc廃止
  • +
  • 戻り値とjmp_bufを一つの構造体にまとめた。
      +
    • これにより__returnに与える引数がGCC版環境付き継続と同じになった。
    • +
  • +
  • link
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_11_5.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_11_5.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,129 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
November 5, 2013

+
+ +
+

研究目的

+

 当研究室では継続を用いて処理制御を行うプログラミング言語"CbC"の開発を行っている。CbCコンパイラとしては最初にmicro-cベースのものが2001年に開発され、続いて2008年の研究によりGCCベースのものが開発された。またこの研究によりGCCの持つ最適化の恩恵を受けることに成功した。

+

 しかし、Mac OS Xの最新版であるMavericksではCコンパイラとしてGCCではなくClangが用いられるようになった。さらに、LLVMもGCC同様強力な最適化を持っていることや、GCCに比べて丁寧なエラーメッセージを出力する等の特徴から、GCCではなくClangに移り変わる人々も少なくない。

+

よって、本研究ではmicro-c,GCCに続くLLVM/ClangをベースとしたCbCコンパイラの開発を行う。

+
+ + +
+

今回したこと

+
    +
  • 研究目的をゼミ用に短縮
  • +
  • 中間発表の予稿作成
  • +
  • TCE条件の再確認
  • +
  • variable arguments list の問題の回避
  • +
+
+ +
+

TCE条件の再確認 (1)

+
    +
  • caller と callee の calling convention が fastcc,cc10,cc11のいずれか +
      • + FastCCに設定。 +
    +
  • +
  • 関数呼び出しの直後がreturnであることに加えvoid型 +
        +
      • returnの挿入は済ませている
      • +
      • ifやswitchを使った時にbranchになってしまうのを防ぐパスも通るようにした
      • +
      • code segmentはvoid型で統一
      • +
    +
  • +
+
+ +
+

TCE条件の再確認 (2)

+
    +
  • tailcalloptが有効になっている。 +
      • + LLVM内部ではGuaranteedTailCallOptとなっており、__codeを含む場合コレを有効化するようにしている。 +
    +
  • +
  • variable argument list が使用されていない。 +
      • + 後述。 +
    +
  • +
  • byval parameter が使用されていない。(PowerPCのみ) +
      • + 引数に付けれる属性の一つ。構造体などの値渡しの時に使われるだろうと書かれている。 +
    +
  • +
  • GOT / PIC を使用するときは visibility が hidden か protected じゃないといけない。 +
      • + GCC 同様 -fPIC で PIC が有効になるらしい。 +
    +
  • +
+
+ +
+

variable arguments list の問題

+
    +
  • variable arguments list を引数に持つときは calling convention が CC じゃないといけない。
  • +
  • code segment は calling convention を FastCC にしていたので怒られる。
  • +
  • エラー回避のためとりあえず variadic function だったら calling convention を戻して タイプも Void に変更 +
      +
    • __CodeType のままだと TCE できたかどうかのチェックに引っかかるので。
    • +
    +
  • +
  • ちなみにGCC版だとコンパイルは通るけど実行すると illegal hardware instruction と出て落ちる。
  • +
+
+ +
+

バグ報告

+
    +
  • stdio.hをincludeせずにputs()を使うとコンパイルに失敗する。
  • +
  • printf()は大丈夫。
  • +
  • TailCallElimあたりで文句言われてる。
  • +
+
+ +
+

次回課題

+
    +
  • バグ修正
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_12_03.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_12_03.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,61 @@ + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4上での実装

+


Kaito Tokumori
December 03, 2013

+
+
+

研究目的

+

 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。

+

本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。

+
+ +
+

今回したこと

+
    +
  • jmp_bufの代わりにintの配列でもsetjmp,longjmpできることの確認。
  • +
  • 環境付き継続実装作業
  • +
+
+ +
+

jmp_bufの代わりにintの配列でもsetjmp,longjmpできることの確認

+
    +
  • jmp_buf(environment)がintの配列だと決まったのでenvをvoidのポインタからintのポインタに変更。
  • +
  • castが少し減った。
  • +
  • 動作は問題ないけどwarning(setjmp.hをincludeしろ)が出る。
  • +
+
+ +
+

環境付き継続実装作業

+
    +
  • 構造体(CbC_env)をつくるための調査
  • +
  • structがきた時の処理はParseDecl.cppのParseDeclarationSpecifiers関数2998行目以降。
  • +
  • scopeについてはclangにScopeクラスがあるみたいだからそれかなで触れる…?
  • +
  • 構造体冥は関数や変数同様IdentifierInfoクラスが持つ。getIdentifierInfoしたときに見つからなかったら生成。
  • +
  • LLVMはIdentifierInfoをmapで管理しているみたい。
  • +
+
+ + +
+

次回課題

+
    +
  • 引き続き。
  • +
+
+ +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/2013_12_17.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/2013_12_17.html Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,161 @@ + + + + + + + + + + +
+ +
+

CbCコンパイラのLLVM3.4 → 3.5上での実装

+


Kaito Tokumori
December 17, 2013

+
+
+

研究目的

+

 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。

+

本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。

+
+ +
+

今回したこと

+
    +
  • 環境付き継続に使用する__CbC_env構造体の自動生成。
  • +
  • __returnの実装。
  • +
  • LLVM/clang 3.4 から 3.5へアップデート.
  • +
+
+ +
+

__CbC_envの自動生成

+
    +
  • "__code"を見つけた時に自動的に生成するようにした。
      +
    • "__code"が宣言された時の処理を一旦置いといて先に構造体を作りに行く感じ。
    • +
  • +
  • 生成前に現在のスコープを確認して、global でない場合には生成しないように。
      +
    • へんなとこに作らないように。
    • +
  • +
+
+ +
+

__returnの実装 (1)

+
    +
  • __returnを確認したらcode segmentへのポインタ型を宣言。
  • +
  • '__CbC_return'という変数名に。(__returnは使用できない)
  • +
  • __returnをキーワードとして登録せずにidentifierを読む度にチェックして__returnのときにはどうこうするーの方が良い?
  • +
  • 名前テーブルからkw___returnを削除してidentifierとして再登録もいいかもしれない。そうしたら後は放っといてもidentifierとして処理される。
  • +
  • これらについては__environmentにも同じことが言える。
  • +
+
+ +
+

__returnの実装 (2)

+ +
+ +
+

__returnの実装 (3)

+ +
+ +
+

__returnの実装 (4)

+ +
+ +
+

__returnの実装 (5)

+
    +
  • キーワードとして登録せずにidentifierが__returnである度にチェックするなら、Scopeの判別にgetCurScope()が使える。関数内部の時だけ生成であとは普通のidentifierにすればいいはず。
  • +
+
+ +
+

次回課題

+
    +
  • 環境付き継続実装継続
      +
    • __return宣言時の処理
    • +
    • __environment宣言時の処理
    • +
    • 元の環境に戻る関数(return1)の生成
    • +
    • 環境付き継続元の関数内でのsetjmpを使った構文の生成
    • +
  • +
+
+ +
+

LLVMのお話

+
    +
  • LLVMというのはプロジェクトの名前で、コンパイラやツールチェーン技術を開発するプロジェクト。
  • +
  • 単にLLVMというとLLVM Coreの事を指し、これはコンパイラの基板となるライブラリの集合。
  • +
  • 仮想機械を持ち、それをターゲットとした言語(LLVM IR)で書かれたプログラムの実行、最適化が可能。
  • +
  • LLVM IRから特定のターゲットの機械語に変換することもできる。
  • +
  • 特定の言語をLLVMが受け付ける形に変換することができればLLVMの最適化機能や機械語への変換機能を利用できる。
  • +
+
+ +
+

clangのお話

+
    +
  • C/C++/Obj-C コンパイラで、LLVMを使用する。
  • +
  • clang側でC/C++/Obj-CをLLVM IRにして、そこから先はLLVMを利用してターゲットの機械語に変換する。
  • +
  • 最適化とかもLLVMを用いる。
  • +
+
+ +
+

たとえば clang auaua.cとかauaua.cppとかやった場合

+

+

+

clangがC/C++/Obj-CをLLVM IRにして、それからLLVM Core libraryを利用してmachine codeにする。

+
+ +
+

CbCのお話(1)

+
    +
  • Continuaiton based Cの略で当研究室で開発中の言語。
  • +
  • プログラムをcode segmentとdata segmentの二種に分けるという考え方を用いる。
  • +
  • Cの関数呼び出しの代わりにgotoによる継続を使って処理を制御する。
  • +
  • CbCのコンパイラとしては現在Micro-C,GCC上のものがある。
  • +
+
+ +
+

CbCのお話(2)

+
    +
  • CbCではcode segmentを__codeというキーワードを使って宣言する。
  • +
  • 継続は"goto code_segment_name();"というように関数呼び出しのように行う。
  • +
  • 継続時に環境を破棄するので、継続先から戻ってくることはない。戻り値も返さない。
  • +
+
+ +
+

環境付き継続について(1)

+

+
    +
  • 通常、CbCでは継続時に継続前の環境を保持しない。つまり継続前の環境に戻ることができない。
  • +
  • 戻れないということはCの関数の途中でcode segmentにgotoしてその後に何らかの処理をするというようなことができない。
  • +
  • Cとの互換性を持つために環境を保持した継続が必要。
  • +
+
+ +
+

環境付き継続について(2)

+

+
    +
  • 環境付き継続があればこのように正しく戻れる。
  • +
  • 環境付き継続は"__return","__environment"という変数を用いて行う。
  • +
  • "__return"は元の環境に戻るためのcode segmentへのポインタ,"__environment"は環境を保持する役割を持つ。
  • +
+
+ + + +
+ + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/factorial.ll --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/factorial.ll Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,97 @@ +; ModuleID = 'factorial/factorial.c' +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" +target triple = "x86_64-apple-macosx10.8.0" + +@.str = private unnamed_addr constant [16 x i8] c"factorial = %d\0A\00", align 1 + +; Function Attrs: noreturn nounwind ssp uwtable +define fastcc void @print_factorial(i32 %prod) #0 { +entry: + %call = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8]* @.str, i64 0, i64 0), i32 %prod) #5 + call void @exit(i32 0) #6 + unreachable +} + +; Function Attrs: nounwind +declare i32 @printf(i8* nocapture, ...) #1 + +; Function Attrs: noreturn +declare void @exit(i32) #2 + +; Function Attrs: nounwind ssp uwtable +define fastcc void @factorial0(i32 %prod, i32 %x) #3 { +entry: + %cmp4 = icmp sgt i32 %x, 0 + br i1 %cmp4, label %return, label %if.else + +if.else: ; preds = %return, %entry + %prod.tr.lcssa = phi i32 [ %prod, %entry ], [ %mul, %return ] + tail call fastcc void @print_factorial(i32 %prod.tr.lcssa) + unreachable + +return: ; preds = %entry, %return + %x.tr6 = phi i32 [ %sub, %return ], [ %x, %entry ] + %prod.tr5 = phi i32 [ %mul, %return ], [ %prod, %entry ] + %mul = mul nsw i32 %x.tr6, %prod.tr5 + %sub = add nsw i32 %x.tr6, -1 + %cmp = icmp sgt i32 %sub, 0 + br i1 %cmp, label %return, label %if.else +} + +; Function Attrs: nounwind ssp uwtable +define fastcc void @factorial(i32 %x) #3 { +entry: + %cmp4.i = icmp sgt i32 %x, 0 + br i1 %cmp4.i, label %return.i, label %if.else.i + +if.else.i: ; preds = %return.i, %entry + %prod.tr.lcssa.i = phi i32 [ 1, %entry ], [ %mul.i, %return.i ] + tail call fastcc void @print_factorial(i32 %prod.tr.lcssa.i) #5 + unreachable + +return.i: ; preds = %entry, %return.i + %x.tr6.i = phi i32 [ %sub.i, %return.i ], [ %x, %entry ] + %prod.tr5.i = phi i32 [ %mul.i, %return.i ], [ 1, %entry ] + %mul.i = mul nsw i32 %prod.tr5.i, %x.tr6.i + %sub.i = add nsw i32 %x.tr6.i, -1 + %cmp.i = icmp sgt i32 %sub.i, 0 + br i1 %cmp.i, label %return.i, label %if.else.i +} + +; Function Attrs: nounwind ssp uwtable +define i32 @main(i32 %argc, i8** nocapture %argv) #3 { +entry: + %arrayidx = getelementptr inbounds i8** %argv, i64 1 + %0 = load i8** %arrayidx, align 8, !tbaa !0 + %call = call i32 @atoi(i8* %0) #5 + %cmp4.i.i = icmp sgt i32 %call, 0 + br i1 %cmp4.i.i, label %return.i.i, label %if.else.i.i + +if.else.i.i: ; preds = %return.i.i, %entry + %prod.tr.lcssa.i.i = phi i32 [ 1, %entry ], [ %mul.i.i, %return.i.i ] + tail call fastcc void @print_factorial(i32 %prod.tr.lcssa.i.i) #5 + unreachable + +return.i.i: ; preds = %entry, %return.i.i + %x.tr6.i.i = phi i32 [ %sub.i.i, %return.i.i ], [ %call, %entry ] + %prod.tr5.i.i = phi i32 [ %mul.i.i, %return.i.i ], [ 1, %entry ] + %mul.i.i = mul nsw i32 %prod.tr5.i.i, %x.tr6.i.i + %sub.i.i = add nsw i32 %x.tr6.i.i, -1 + %cmp.i.i = icmp sgt i32 %sub.i.i, 0 + br i1 %cmp.i.i, label %return.i.i, label %if.else.i.i +} + +; Function Attrs: nounwind readonly +declare i32 @atoi(i8* nocapture) #4 + +attributes #0 = { noreturn nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #2 = { noreturn "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #3 = { nounwind ssp uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #4 = { nounwind readonly "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } +attributes #5 = { nounwind } +attributes #6 = { noreturn nounwind } + +!0 = metadata !{metadata !"any pointer", metadata !1} +!1 = metadata !{metadata !"omnipotent char", metadata !2} +!2 = metadata !{metadata !"Simple C/C++ TBAA"} diff -r 000000000000 -r 845ff8ff4fc9 2013/old/mytrunk/customSlides.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/mytrunk/customSlides.js Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,12 @@ +/* + The script for Google HTML5 slides. + + Authors: Kaito Tokumori +*/ + +function jumpSlides(direction){ + if(direction <= 0 || direction > slideEls.length) + return; + curSlide = direction - 1; + updateSlides(); +} diff -r 000000000000 -r 845ff8ff4fc9 2013/old/tailCallError.png Binary file 2013/old/tailCallError.png has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.DS_Store Binary file 2013/old/trunk/.DS_Store has changed diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/all-wcprops --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/trunk/.svn/all-wcprops Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,23 @@ +K 25 +svn:wc:ra_dav:version-url +V 22 +/svn/!svn/ver/20/trunk +END +prettify.js +K 25 +svn:wc:ra_dav:version-url +V 33 +/svn/!svn/ver/2/trunk/prettify.js +END +styles.css +K 25 +svn:wc:ra_dav:version-url +V 33 +/svn/!svn/ver/20/trunk/styles.css +END +slides.js +K 25 +svn:wc:ra_dav:version-url +V 32 +/svn/!svn/ver/20/trunk/slides.js +END diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/entries --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/trunk/.svn/entries Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,136 @@ +10 + +dir +20 +http://html5slides.googlecode.com/svn/trunk +http://html5slides.googlecode.com/svn + + + +2011-06-22T03:59:28.325313Z +20 +lukem@google.com + + + + + + + + + + + + + + +5963eb91-a1a4-c111-6e9c-cdd99a89fa83 + +prettify.js +file + + + + +2012-05-09T05:39:46.000000Z +d8c38aae6cceb1ef2b5f511d4b65f343 +2011-05-20T16:47:00.952438Z +2 +mwichary@google.com + + + + + + + + + + + + + + + + + + + + + +53996 + +images +dir + +styles.css +file + + + + +2012-05-09T05:39:46.000000Z +ed52b35fae826c2315f9737a4efe0697 +2011-06-22T03:59:28.325313Z +20 +lukem@google.com +has-props + + + + + + + + + + + + + + + + + + + + +11337 + +template +dir + +slides.js +file + + + + +2012-05-09T05:39:46.000000Z +d61fff7e1ca0fd9a6b10e54ba203485b +2011-06-22T03:59:28.325313Z +20 +lukem@google.com + + + + + + + + + + + + + + + + + + + + + +14813 + diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/prop-base/styles.css.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/trunk/.svn/prop-base/styles.css.svn-base Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,9 @@ +K 14 +svn:executable +V 1 +* +K 13 +svn:mime-type +V 8 +text/css +END diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/text-base/prettify.js.svn-base --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/2013/old/trunk/.svn/text-base/prettify.js.svn-base Tue Jan 14 01:31:42 2014 +0900 @@ -0,0 +1,1391 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + * + *

+ * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending dynamic event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var COFFEE_KEYWORDS = "all and by catch class else extends false finally " +
    +      "for if in is isnt loop new no not null of off on or return super then " +
    +      "true try unless until when while yes ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   source: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      source: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.source} around style boundaries in {@code job.decorations}
    +   * and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    source: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.source in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.source;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Simplify decorations.
    +    var decPos = 0;
    +    for (var i = 0; i < nDecorations;) {
    +      // Skip over any zero-length decorations.
    +      var startPos = decorations[i];
    +      var start = i;
    +      while (start + 2 < nDecorations && decorations[start + 2] === startPos) {
    +        start += 2;
    +      }
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[start + 1];
    +      var end = start + 2;
    +      while (end + 2 <= nDecorations
    +             && (decorations[end + 1] === startDec
    +                 || decorations[end] === decorations[end + 2])) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    // Strip any zero-length decoration at the end.
    +    if (decPos && decorations[decPos - 2] === sourceLength) { decPos -= 2; }
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      if (textNode.nodeType !== 1) {  // Don't muck with <BR>s or <LI>s
    +        var styledText = source.substring(sourceIndex, end);
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.source;
    +      job.source = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/text-base/slides.js.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/.svn/text-base/slides.js.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,634 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +var PERMANENT_URL_PREFIX = 'http://html5slides.googlecode.com/svn/trunk/';
    +
    +var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
    +
    +var PM_TOUCH_SENSITIVITY = 15;
    +
    +var curSlide;
    +
    +/* ---------------------------------------------------------------------- */
    +/* classList polyfill by Eli Grey 
    + * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
    +
    +if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
    +
    +(function (view) {
    +
    +var
    +    classListProp = "classList"
    +  , protoProp = "prototype"
    +  , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
    +  , objCtr = Object
    +    strTrim = String[protoProp].trim || function () {
    +    return this.replace(/^\s+|\s+$/g, "");
    +  }
    +  , arrIndexOf = Array[protoProp].indexOf || function (item) {
    +    for (var i = 0, len = this.length; i < len; i++) {
    +      if (i in this && this[i] === item) {
    +        return i;
    +      }
    +    }
    +    return -1;
    +  }
    +  // Vendors: please allow content code to instantiate DOMExceptions
    +  , DOMEx = function (type, message) {
    +    this.name = type;
    +    this.code = DOMException[type];
    +    this.message = message;
    +  }
    +  , checkTokenAndGetIndex = function (classList, token) {
    +    if (token === "") {
    +      throw new DOMEx(
    +          "SYNTAX_ERR"
    +        , "An invalid or illegal string was specified"
    +      );
    +    }
    +    if (/\s/.test(token)) {
    +      throw new DOMEx(
    +          "INVALID_CHARACTER_ERR"
    +        , "String contains an invalid character"
    +      );
    +    }
    +    return arrIndexOf.call(classList, token);
    +  }
    +  , ClassList = function (elem) {
    +    var
    +        trimmedClasses = strTrim.call(elem.className)
    +      , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
    +    ;
    +    for (var i = 0, len = classes.length; i < len; i++) {
    +      this.push(classes[i]);
    +    }
    +    this._updateClassName = function () {
    +      elem.className = this.toString();
    +    };
    +  }
    +  , classListProto = ClassList[protoProp] = []
    +  , classListGetter = function () {
    +    return new ClassList(this);
    +  }
    +;
    +// Most DOMException implementations don't allow calling DOMException's toString()
    +// on non-DOMExceptions. Error's toString() is sufficient here.
    +DOMEx[protoProp] = Error[protoProp];
    +classListProto.item = function (i) {
    +  return this[i] || null;
    +};
    +classListProto.contains = function (token) {
    +  token += "";
    +  return checkTokenAndGetIndex(this, token) !== -1;
    +};
    +classListProto.add = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.push(token);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.remove = function (token) {
    +  token += "";
    +  var index = checkTokenAndGetIndex(this, token);
    +  if (index !== -1) {
    +    this.splice(index, 1);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.toggle = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.add(token);
    +  } else {
    +    this.remove(token);
    +  }
    +};
    +classListProto.toString = function () {
    +  return this.join(" ");
    +};
    +
    +if (objCtr.defineProperty) {
    +  var classListPropDesc = {
    +      get: classListGetter
    +    , enumerable: true
    +    , configurable: true
    +  };
    +  try {
    +    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +  } catch (ex) { // IE 8 doesn't support enumerable:true
    +    if (ex.number === -0x7FF5EC54) {
    +      classListPropDesc.enumerable = false;
    +      objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +    }
    +  }
    +} else if (objCtr[protoProp].__defineGetter__) {
    +  elemCtrProto.__defineGetter__(classListProp, classListGetter);
    +}
    +
    +}(self));
    +
    +}
    +/* ---------------------------------------------------------------------- */
    +
    +/* Slide movement */
    +
    +function getSlideEl(no) {
    +  if ((no < 0) || (no >= slideEls.length)) { 
    +    return null;
    +  } else {
    +    return slideEls[no];
    +  }
    +};
    +
    +function updateSlideClass(slideNo, className) {
    +  var el = getSlideEl(slideNo);
    +  
    +  if (!el) {
    +    return;
    +  }
    +  
    +  if (className) {
    +    el.classList.add(className);
    +  }
    +    
    +  for (var i in SLIDE_CLASSES) {
    +    if (className != SLIDE_CLASSES[i]) {
    +      el.classList.remove(SLIDE_CLASSES[i]);
    +    }
    +  }
    +};
    +
    +function updateSlides() {
    +  for (var i = 0; i < slideEls.length; i++) {
    +    switch (i) {
    +      case curSlide - 2:
    +        updateSlideClass(i, 'far-past');
    +        break;
    +      case curSlide - 1:
    +        updateSlideClass(i, 'past');
    +        break;
    +      case curSlide: 
    +        updateSlideClass(i, 'current');
    +        break;
    +      case curSlide + 1:
    +        updateSlideClass(i, 'next');      
    +        break;
    +      case curSlide + 2:
    +        updateSlideClass(i, 'far-next');      
    +        break;
    +      default:
    +        updateSlideClass(i);
    +        break;
    +    }
    +  }
    +
    +  triggerLeaveEvent(curSlide - 1);
    +  triggerEnterEvent(curSlide);
    +
    +  window.setTimeout(function() {
    +    // Hide after the slide
    +    disableSlideFrames(curSlide - 2);
    +  }, 301);
    +
    +  enableSlideFrames(curSlide - 1);
    +  enableSlideFrames(curSlide + 2);
    +  
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(slideEls[curSlide]);
    +  }  
    +
    +  updateHash();
    +};
    +
    +function buildNextItem() {
    +  var toBuild  = slideEls[curSlide].querySelectorAll('.to-build');
    +
    +  if (!toBuild.length) {
    +    return false;
    +  }
    +
    +  toBuild[0].classList.remove('to-build', '');
    +
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(toBuild[0]);
    +  }
    +
    +  return true;
    +};
    +
    +function prevSlide() {
    +  if (curSlide > 0) {
    +    curSlide--;
    +
    +    updateSlides();
    +  }
    +};
    +
    +function nextSlide() {
    +  if (buildNextItem()) {
    +    return;
    +  }
    +
    +  if (curSlide < slideEls.length - 1) {
    +    curSlide++;
    +
    +    updateSlides();
    +  }
    +};
    +
    +/* Slide events */
    +
    +function triggerEnterEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onEnter = el.getAttribute('onslideenter');
    +  if (onEnter) {
    +    new Function(onEnter).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideenter', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +
    +  el.dispatchEvent(evt);
    +};
    +
    +function triggerLeaveEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onLeave = el.getAttribute('onslideleave');
    +  if (onLeave) {
    +    new Function(onLeave).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideleave', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +  
    +  el.dispatchEvent(evt);
    +};
    +
    +/* Touch events */
    +
    +function handleTouchStart(event) {
    +  if (event.touches.length == 1) {
    +    touchDX = 0;
    +    touchDY = 0;
    +
    +    touchStartX = event.touches[0].pageX;
    +    touchStartY = event.touches[0].pageY;
    +
    +    document.body.addEventListener('touchmove', handleTouchMove, true);
    +    document.body.addEventListener('touchend', handleTouchEnd, true);
    +  }
    +};
    +
    +function handleTouchMove(event) {
    +  if (event.touches.length > 1) {
    +    cancelTouch();
    +  } else {
    +    touchDX = event.touches[0].pageX - touchStartX;
    +    touchDY = event.touches[0].pageY - touchStartY;
    +  }
    +};
    +
    +function handleTouchEnd(event) {
    +  var dx = Math.abs(touchDX);
    +  var dy = Math.abs(touchDY);
    +
    +  if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
    +    if (touchDX > 0) {
    +      prevSlide();
    +    } else {
    +      nextSlide();
    +    }
    +  }
    +  
    +  cancelTouch();
    +};
    +
    +function cancelTouch() {
    +  document.body.removeEventListener('touchmove', handleTouchMove, true);
    +  document.body.removeEventListener('touchend', handleTouchEnd, true);  
    +};
    +
    +/* Preloading frames */
    +
    +function disableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    disableFrame(frame);
    +  }
    +};
    +
    +function enableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    enableFrame(frame);
    +  }
    +};
    +
    +function disableFrame(frame) {
    +  frame.src = 'about:blank';
    +};
    +
    +function enableFrame(frame) {
    +  var src = frame._src;
    +
    +  if (frame.src != src && src != 'about:blank') {
    +    frame.src = src;
    +  }
    +};
    +
    +function setupFrames() {
    +  var frames = document.querySelectorAll('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    frame._src = frame.src;
    +    disableFrame(frame);
    +  }
    +  
    +  enableSlideFrames(curSlide);
    +  enableSlideFrames(curSlide + 1);
    +  enableSlideFrames(curSlide + 2);  
    +};
    +
    +function setupInteraction() {
    +  /* Clicking and tapping */
    +  
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'prev-slide-area';  
    +  el.addEventListener('click', prevSlide, false);
    +  document.querySelector('section.slides').appendChild(el);
    +
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'next-slide-area';  
    +  el.addEventListener('click', nextSlide, false);
    +  document.querySelector('section.slides').appendChild(el);  
    +  
    +  /* Swiping */
    +  
    +  document.body.addEventListener('touchstart', handleTouchStart, false);
    +}
    +
    +/* ChromeVox support */
    +
    +function isChromeVoxActive() {
    +  if (typeof(cvox) == 'undefined') {
    +    return false;
    +  } else {
    +    return true;
    +  }
    +};
    +
    +function speakAndSyncToNode(node) {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);  
    +  cvox.ChromeVox.navigationManager.syncToNode(node);
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +  var target = node;
    +  while (target.firstChild) {
    +    target = target.firstChild;
    +  }
    +  cvox.ChromeVox.navigationManager.syncToNode(target);
    +};
    +
    +function speakNextItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.next(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.firstChild) {
    +      target = target.firstChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.next(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +function speakPrevItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.previous(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.lastChild){
    +      target = target.lastChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.previous(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +/* Hash functions */
    +
    +function getCurSlideFromHash() {
    +  var slideNo = parseInt(location.hash.substr(1));
    +
    +  if (slideNo) {
    +    curSlide = slideNo - 1;
    +  } else {
    +    curSlide = 0;
    +  }
    +};
    +
    +function updateHash() {
    +  location.replace('#' + (curSlide + 1));
    +};
    +
    +/* Event listeners */
    +
    +function handleBodyKeyDown(event) {
    +  switch (event.keyCode) {
    +    case 39: // right arrow
    +    case 13: // Enter
    +    case 32: // space
    +    case 34: // PgDn
    +      nextSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 37: // left arrow
    +    case 8: // Backspace
    +    case 33: // PgUp
    +      prevSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 40: // down arrow
    +      if (isChromeVoxActive()) {
    +        speakNextItem();
    +      } else {
    +        nextSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +
    +    case 38: // up arrow
    +      if (isChromeVoxActive()) {
    +        speakPrevItem();
    +      } else {
    +        prevSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +  }
    +};
    +
    +function addEventListeners() {
    +  document.addEventListener('keydown', handleBodyKeyDown, false);  
    +};
    +
    +/* Initialization */
    +
    +function addPrettify() {
    +  var els = document.querySelectorAll('pre');
    +  for (var i = 0, el; el = els[i]; i++) {
    +    if (!el.classList.contains('noprettyprint')) {
    +      el.classList.add('prettyprint');
    +    }
    +  }
    +  
    +  var el = document.createElement('script');
    +  el.type = 'text/javascript';
    +  el.src = PERMANENT_URL_PREFIX + 'prettify.js';
    +  el.onload = function() {
    +    prettyPrint();
    +  }
    +  document.body.appendChild(el);
    +};
    +
    +function addFontStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = 'http://fonts.googleapis.com/css?family=' +
    +            'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
    +
    +  document.body.appendChild(el);
    +};
    +
    +function addGeneralStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = PERMANENT_URL_PREFIX + 'styles.css';
    +  document.body.appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'viewport';
    +  el.content = 'width=1100,height=750';
    +  document.querySelector('head').appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'apple-mobile-web-app-capable';
    +  el.content = 'yes';
    +  document.querySelector('head').appendChild(el);
    +};
    +
    +function makeBuildLists() {
    +  for (var i = curSlide, slide; slide = slideEls[i]; i++) {
    +    var items = slide.querySelectorAll('.build > *');
    +    for (var j = 0, item; item = items[j]; j++) {
    +      if (item.classList) {
    +        item.classList.add('to-build');
    +      }
    +    }
    +  }
    +};
    +
    +function handleDomLoaded() {
    +  slideEls = document.querySelectorAll('section.slides > article');
    +
    +  setupFrames();
    +
    +  addFontStyle();
    +  addGeneralStyle();
    +  addPrettify();
    +  addEventListeners();
    +
    +  updateSlides();
    +
    +  setupInteraction();
    +  makeBuildLists();
    +
    +  document.body.classList.add('loaded');
    +};
    +
    +function initialize() {
    +  getCurSlideFromHash();
    +
    +  if (window['_DEBUG']) {
    +    PERMANENT_URL_PREFIX = '../';
    +  }
    +
    +  if (window['_DCL']) {
    +    handleDomLoaded();
    +  } else {
    +    document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
    +  }
    +}
    +
    +// If ?debug exists then load the script relative instead of absolute
    +if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
    +  document.addEventListener('DOMContentLoaded', function() {
    +    // Avoid missing the DomContentLoaded event
    +    window['_DCL'] = true
    +  }, false);
    +
    +  window['_DEBUG'] = true;
    +  var script = document.createElement('script');
    +  script.type = 'text/javascript';
    +  script.src = '../slides.js';
    +  var s = document.getElementsByTagName('script')[0];
    +  s.parentNode.insertBefore(script, s);
    +
    +  // Remove this script
    +  s.parentNode.removeChild(s);
    +} else {
    +  initialize();
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/.svn/text-base/styles.css.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/.svn/text-base/styles.css.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,612 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +           
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +/* Framework */
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  display: block !important;
    +
    +  height: 100%;
    +  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
    +
    +  -webkit-font-smoothing: antialiased;
    +}
    +
    +.slides {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slides > article {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +.slides.layout-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +}
    +.slides.layout-faux-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +  
    +  padding: 40px 160px;
    +}
    +
    +.slides.template-default > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/google-logo-small.png) 710px 625px no-repeat;  
    +  
    +  background-color: white;  
    +} 
    +
    +.slides.template-io2011 > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/colorbar.png) 0 600px repeat-x,
    +              url(images/googleio-logo.png) 640px 625px no-repeat;
    +
    +  background-size: 100%, 225px;  
    +
    +  background-color: white;  
    +}
    +.slides.layout-widescreen > article:not(.nobackground):not(.biglogo),
    +.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) {
    +  background-position-x: 0, 840px;
    +}
    +
    +/* Clickable/tappable areas */
    +
    +.slide-area {
    +  z-index: 1000;
    +
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 150px;
    +  height: 700px;  
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  cursor: pointer;  
    +  margin-top: -350px;  
    +  
    +  tap-highlight-color: transparent;
    +  -o-tap-highlight-color: transparent;
    +  -moz-tap-highlight-color: transparent;
    +  -webkit-tap-highlight-color: transparent;
    +}
    +#prev-slide-area {
    +  margin-left: -550px;
    +}
    +#next-slide-area {
    +  margin-left: 400px;
    +}
    +.slides.layout-widescreen #prev-slide-area,
    +.slides.layout-faux-widescreen #prev-slide-area {
    +  margin-left: -650px;
    +}
    +.slides.layout-widescreen #next-slide-area,
    +.slides.layout-faux-widescreen #next-slide-area {
    +  margin-left: 500px;
    +}
    +
    +/* Slide styles */
    +
    +.slides.template-default article.biglogo {
    +  background: white url(images/google-logo.png) 50% 50% no-repeat;
    +}
    +
    +.slides.template-io2011 article.biglogo {
    +  background: white url(images/googleio-logo.png) 50% 50% no-repeat;
    +
    +  background-size: 600px;
    +}
    +
    +/* Slides */
    +
    +.slides > article {
    +  display: none;
    +}
    +.slides > article.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slides > article.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +.slides > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides > article.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +.slides > article.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +.slides.layout-widescreen > article.far-past,
    +.slides.layout-faux-widescreen > article.far-past {
    +  display: block;
    +  transform: translate(-2260px);
    +  -o-transform: translate(-2260px);
    +  -moz-transform: translate(-2260px);
    +  -webkit-transform: translate3d(-2260px, 0, 0);
    +}
    +.slides.layout-widescreen > article.past,
    +.slides.layout-faux-widescreen > article.past {
    +  display: block;
    +  transform: translate(-1130px);
    +  -o-transform: translate(-1130px);
    +  -moz-transform: translate(-1130px);
    +  -webkit-transform: translate3d(-1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.current,
    +.slides.layout-faux-widescreen > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides.layout-widescreen > article.next,
    +.slides.layout-faux-widescreen > article.next {
    +  display: block;
    +  transform: translate(1130px);
    +  -o-transform: translate(1130px);
    +  -moz-transform: translate(1130px);
    +  -webkit-transform: translate3d(1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.far-next,
    +.slides.layout-faux-widescreen > article.far-next {
    +  display: block;
    +  transform: translate(2260px);
    +  -o-transform: translate(2260px);
    +  -moz-transform: translate(2260px);
    +  -webkit-transform: translate3d(2260px, 0, 0);
    +}
    +
    +/* Styles for slides */
    +
    +.slides > article {
    +  font-family: 'Open Sans', Arial, sans-serif;
    +
    +  color: rgb(102, 102, 102);
    +  text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  letter-spacing: -1px;
    +}
    +
    +b {
    +  font-weight: 600;
    +}
    +
    +.blue {
    +  color: rgb(0, 102, 204);
    +}
    +.yellow {
    +  color: rgb(255, 211, 25);
    +}
    +.green {
    +  color: rgb(0, 138, 53);
    +}
    +.red {
    +  color: rgb(255, 0, 0);
    +}
    +.black {
    +  color: black;
    +}
    +.white {
    +  color: white;
    +}
    +
    +a {
    +  color: rgb(0, 102, 204);
    +}
    +a:visited {
    +  color: rgba(0, 102, 204, .75);
    +}
    +a:hover {
    +  color: black;
    +}
    +
    +p {
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 20px;
    +}
    +p:first-child {
    +  margin-top: 0;
    +}
    +
    +h1 {
    +  font-size: 60px;
    +  line-height: 60px;
    +
    +  padding: 0;
    +  margin: 0;
    +  margin-top: 200px;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -3px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h2 {
    +  font-size: 45px;
    +  line-height: 45px;
    +
    +  position: absolute;
    +  bottom: 150px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -2px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h3 {
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -1px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +article.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +ul {
    +  list-style: none;
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 40px;
    +
    +  margin-left: .75em;
    +}
    +ul:first-child {
    +  margin-top: 0;
    +}
    +ul ul {
    +  margin-top: .5em;
    +}
    +li {
    +  padding: 0;
    +  margin: 0;
    +
    +  margin-bottom: .5em;
    +}
    +li::before {
    +  content: '·';
    +
    +  width: .75em;
    +  margin-left: -.75em;
    +
    +  position: absolute;
    +}
    +
    +pre {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  font-size: 20px;
    +  line-height: 28px;
    +  padding: 5px 10px;
    +  
    +  letter-spacing: -1px;
    +
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  
    +  overflow: hidden;
    +}
    +
    +code {
    +  font-size: 95%;
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  color: black;
    +}
    +
    +iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +}
    +
    +h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +article.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +article.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +  margin-top: 40px;
    +}
    +th {
    +  font-weight: 600;
    +  text-align: left;
    +}
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;  
    +  line-height: 18px;
    +}
    +
    +q {
    +  display: block;
    +  font-size: 60px;
    +  line-height: 72px;
    +  
    +  margin-left: 20px;
    +  
    +  margin-top: 100px;
    +  margin-right: 150px;    
    +}
    +q::before {
    +  content: '“';
    +  
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -2.1em;
    +  width: 2em;
    +  text-align: right;
    +  
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);
    +}
    +q::after {
    +  content: '”';
    +
    +  position: absolute;  
    +  margin-left: .1em;
    +
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);  
    +}
    +div.author {
    +  text-align: right;  
    +  font-size: 40px;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;    
    +}
    +div.author::before {
    +  content: '—';
    +}
    +
    +/* Size variants */
    +
    +article.smaller p,
    +article.smaller ul {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller table {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller pre {
    +  font-size: 15px;
    +  line-height: 20px;
    +  letter-spacing: 0;
    +}
    +article.smaller q {
    +  font-size: 40px;
    +  line-height: 48px;
    +}
    +article.smaller q::before,
    +article.smaller q::after {
    +  font-size: 60px;
    +}
    +
    +/* Builds */
    +
    +.build > * {
    +  transition: opacity 0.5s ease-in-out 0.2s;
    +  -o-transition: opacity 0.5s ease-in-out 0.2s;
    +  -moz-transition: opacity 0.5s ease-in-out 0.2s;
    +  -webkit-transition: opacity 0.5s ease-in-out 0.2s;
    +}
    +
    +.to-build {
    +  opacity: 0;
    +}
    +
    +/* Pretty print */
    +
    +.prettyprint .str, /* string content */
    +.prettyprint .atv { /* a markup attribute value */
    +  color: rgb(0, 138, 53); 
    +}  
    +.prettyprint .kwd, /* a keyword */
    +.prettyprint .tag { /* a markup tag name */
    +  color: rgb(0, 102, 204);
    +}
    +.prettyprint .com { /* a comment */
    +  color: rgb(127, 127, 127); 
    +  font-style: italic; 
    +}  
    +.prettyprint .lit { /* a literal value */
    +  color: rgb(127, 0, 0);
    +}  
    +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */
    +.prettyprint .opn, 
    +.prettyprint .clo { 
    +  color: rgb(127, 127, 127); 
    +}
    +.prettyprint .typ, /* a type name */
    +.prettyprint .atn, /* a markup attribute name */ 
    +.prettyprint .dec, 
    +.prettyprint .var { /* a declaration; a variable name */
    +  color: rgb(127, 0, 127);
    +}  
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.DS_Store
    Binary file 2013/old/trunk/images/.DS_Store has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/all-wcprops
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/all-wcprops	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,29 @@
    +K 25
    +svn:wc:ra_dav:version-url
    +V 29
    +/svn/!svn/ver/12/trunk/images
    +END
    +google-logo-small.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 51
    +/svn/!svn/ver/12/trunk/images/google-logo-small.png
    +END
    +googleio-logo.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 46
    +/svn/!svn/ver/3/trunk/images/googleio-logo.png
    +END
    +colorbar.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 41
    +/svn/!svn/ver/3/trunk/images/colorbar.png
    +END
    +google-logo.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 44
    +/svn/!svn/ver/9/trunk/images/google-logo.png
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/entries
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/entries	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,164 @@
    +10
    +
    +dir
    +20
    +http://html5slides.googlecode.com/svn/trunk/images
    +http://html5slides.googlecode.com/svn
    +
    +
    +
    +2011-05-20T17:19:33.425808Z
    +12
    +mwichary@google.com
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +5963eb91-a1a4-c111-6e9c-cdd99a89fa83
    +
    +google-logo-small.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +135f45372a8c114bf3e2aeb599e4f936
    +2011-05-20T17:19:33.425808Z
    +12
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +8466
    +
    +googleio-logo.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +1f7e00dc3ff015f831ce3eb5dbd23550
    +2011-05-20T16:49:11.026922Z
    +3
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +84742
    +
    +colorbar.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +4a80fb8dc88969ddb33e1b69d2d0127a
    +2011-05-20T16:49:11.026922Z
    +3
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +213
    +
    +google-logo.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +e8734f1b87d204e4d325f5fc73fab31e
    +2011-05-20T17:14:27.670900Z
    +9
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +31769
    +
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/prop-base/colorbar.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/prop-base/colorbar.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,9 @@
    +K 14
    +svn:executable
    +V 1
    +*
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/prop-base/google-logo-small.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/prop-base/google-logo-small.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,5 @@
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/prop-base/google-logo.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/prop-base/google-logo.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,5 @@
    +K 13
    +svn:mime-type
    +V 9
    +image/png
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/prop-base/googleio-logo.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/images/.svn/prop-base/googleio-logo.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,9 @@
    +K 14
    +svn:executable
    +V 1
    +*
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/text-base/colorbar.png.svn-base
    Binary file 2013/old/trunk/images/.svn/text-base/colorbar.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/text-base/google-logo-small.png.svn-base
    Binary file 2013/old/trunk/images/.svn/text-base/google-logo-small.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/text-base/google-logo.png.svn-base
    Binary file 2013/old/trunk/images/.svn/text-base/google-logo.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/.svn/text-base/googleio-logo.png.svn-base
    Binary file 2013/old/trunk/images/.svn/text-base/googleio-logo.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/access.asta
    Binary file 2013/old/trunk/images/access.asta has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/access.asta.bak
    Binary file 2013/old/trunk/images/access.asta.bak has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/colorbar.png
    Binary file 2013/old/trunk/images/colorbar.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/google-logo-small.png
    Binary file 2013/old/trunk/images/google-logo-small.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/google-logo.png
    Binary file 2013/old/trunk/images/google-logo.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/images/googleio-logo.png
    Binary file 2013/old/trunk/images/googleio-logo.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/prettify.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/prettify.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1391 @@
    +// Copyright (C) 2006 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +/**
    + * @fileoverview
    + * some functions for browser-side pretty printing of code contained in html.
    + *
    + * <p>
    + * For a fairly comprehensive set of languages see the
    + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    + * file that came with this source.  At a minimum, the lexer should work on a
    + * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    + * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    + * and a subset of Perl, but, because of commenting conventions, doesn't work on
    + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    + * <p>
    + * Usage: <ol>
    + * <li> include this source file in an html page via
    + *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    + * <li> define style rules.  See the example page for examples.
    + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending dynamic event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var COFFEE_KEYWORDS = "all and by catch class else extends false finally " +
    +      "for if in is isnt loop new no not null of off on or return super then " +
    +      "true try unless until when while yes ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   source: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      source: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.source} around style boundaries in {@code job.decorations}
    +   * and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    source: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.source in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.source;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Simplify decorations.
    +    var decPos = 0;
    +    for (var i = 0; i < nDecorations;) {
    +      // Skip over any zero-length decorations.
    +      var startPos = decorations[i];
    +      var start = i;
    +      while (start + 2 < nDecorations && decorations[start + 2] === startPos) {
    +        start += 2;
    +      }
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[start + 1];
    +      var end = start + 2;
    +      while (end + 2 <= nDecorations
    +             && (decorations[end + 1] === startDec
    +                 || decorations[end] === decorations[end + 2])) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    // Strip any zero-length decoration at the end.
    +    if (decPos && decorations[decPos - 2] === sourceLength) { decPos -= 2; }
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      if (textNode.nodeType !== 1) {  // Don't muck with <BR>s or <LI>s
    +        var styledText = source.substring(sourceIndex, end);
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.source;
    +      job.source = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/slides.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/slides.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,634 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +var PERMANENT_URL_PREFIX = './trunk/';
    +
    +var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
    +
    +var PM_TOUCH_SENSITIVITY = 15;
    +
    +var curSlide;
    +
    +/* ---------------------------------------------------------------------- */
    +/* classList polyfill by Eli Grey 
    + * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
    +
    +if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
    +
    +(function (view) {
    +
    +var
    +    classListProp = "classList"
    +  , protoProp = "prototype"
    +  , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
    +  , objCtr = Object
    +    strTrim = String[protoProp].trim || function () {
    +    return this.replace(/^\s+|\s+$/g, "");
    +  }
    +  , arrIndexOf = Array[protoProp].indexOf || function (item) {
    +    for (var i = 0, len = this.length; i < len; i++) {
    +      if (i in this && this[i] === item) {
    +        return i;
    +      }
    +    }
    +    return -1;
    +  }
    +  // Vendors: please allow content code to instantiate DOMExceptions
    +  , DOMEx = function (type, message) {
    +    this.name = type;
    +    this.code = DOMException[type];
    +    this.message = message;
    +  }
    +  , checkTokenAndGetIndex = function (classList, token) {
    +    if (token === "") {
    +      throw new DOMEx(
    +          "SYNTAX_ERR"
    +        , "An invalid or illegal string was specified"
    +      );
    +    }
    +    if (/\s/.test(token)) {
    +      throw new DOMEx(
    +          "INVALID_CHARACTER_ERR"
    +        , "String contains an invalid character"
    +      );
    +    }
    +    return arrIndexOf.call(classList, token);
    +  }
    +  , ClassList = function (elem) {
    +    var
    +        trimmedClasses = strTrim.call(elem.className)
    +      , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
    +    ;
    +    for (var i = 0, len = classes.length; i < len; i++) {
    +      this.push(classes[i]);
    +    }
    +    this._updateClassName = function () {
    +      elem.className = this.toString();
    +    };
    +  }
    +  , classListProto = ClassList[protoProp] = []
    +  , classListGetter = function () {
    +    return new ClassList(this);
    +  }
    +;
    +// Most DOMException implementations don't allow calling DOMException's toString()
    +// on non-DOMExceptions. Error's toString() is sufficient here.
    +DOMEx[protoProp] = Error[protoProp];
    +classListProto.item = function (i) {
    +  return this[i] || null;
    +};
    +classListProto.contains = function (token) {
    +  token += "";
    +  return checkTokenAndGetIndex(this, token) !== -1;
    +};
    +classListProto.add = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.push(token);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.remove = function (token) {
    +  token += "";
    +  var index = checkTokenAndGetIndex(this, token);
    +  if (index !== -1) {
    +    this.splice(index, 1);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.toggle = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.add(token);
    +  } else {
    +    this.remove(token);
    +  }
    +};
    +classListProto.toString = function () {
    +  return this.join(" ");
    +};
    +
    +if (objCtr.defineProperty) {
    +  var classListPropDesc = {
    +      get: classListGetter
    +    , enumerable: true
    +    , configurable: true
    +  };
    +  try {
    +    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +  } catch (ex) { // IE 8 doesn't support enumerable:true
    +    if (ex.number === -0x7FF5EC54) {
    +      classListPropDesc.enumerable = false;
    +      objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +    }
    +  }
    +} else if (objCtr[protoProp].__defineGetter__) {
    +  elemCtrProto.__defineGetter__(classListProp, classListGetter);
    +}
    +
    +}(self));
    +
    +}
    +/* ---------------------------------------------------------------------- */
    +
    +/* Slide movement */
    +
    +function getSlideEl(no) {
    +  if ((no < 0) || (no >= slideEls.length)) { 
    +    return null;
    +  } else {
    +    return slideEls[no];
    +  }
    +};
    +
    +function updateSlideClass(slideNo, className) {
    +  var el = getSlideEl(slideNo);
    +  
    +  if (!el) {
    +    return;
    +  }
    +  
    +  if (className) {
    +    el.classList.add(className);
    +  }
    +    
    +  for (var i in SLIDE_CLASSES) {
    +    if (className != SLIDE_CLASSES[i]) {
    +      el.classList.remove(SLIDE_CLASSES[i]);
    +    }
    +  }
    +};
    +
    +function updateSlides() {
    +  for (var i = 0; i < slideEls.length; i++) {
    +    switch (i) {
    +      case curSlide - 2:
    +        updateSlideClass(i, 'far-past');
    +        break;
    +      case curSlide - 1:
    +        updateSlideClass(i, 'past');
    +        break;
    +      case curSlide: 
    +        updateSlideClass(i, 'current');
    +        break;
    +      case curSlide + 1:
    +        updateSlideClass(i, 'next');      
    +        break;
    +      case curSlide + 2:
    +        updateSlideClass(i, 'far-next');      
    +        break;
    +      default:
    +        updateSlideClass(i);
    +        break;
    +    }
    +  }
    +
    +  triggerLeaveEvent(curSlide - 1);
    +  triggerEnterEvent(curSlide);
    +
    +  window.setTimeout(function() {
    +    // Hide after the slide
    +    disableSlideFrames(curSlide - 2);
    +  }, 301);
    +
    +  enableSlideFrames(curSlide - 1);
    +  enableSlideFrames(curSlide + 2);
    +  
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(slideEls[curSlide]);
    +  }  
    +
    +  updateHash();
    +};
    +
    +function buildNextItem() {
    +  var toBuild  = slideEls[curSlide].querySelectorAll('.to-build');
    +
    +  if (!toBuild.length) {
    +    return false;
    +  }
    +
    +  toBuild[0].classList.remove('to-build', '');
    +
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(toBuild[0]);
    +  }
    +
    +  return true;
    +};
    +
    +function prevSlide() {
    +  if (curSlide > 0) {
    +    curSlide--;
    +
    +    updateSlides();
    +  }
    +};
    +
    +function nextSlide() {
    +  if (buildNextItem()) {
    +    return;
    +  }
    +
    +  if (curSlide < slideEls.length - 1) {
    +    curSlide++;
    +
    +    updateSlides();
    +  }
    +};
    +
    +/* Slide events */
    +
    +function triggerEnterEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onEnter = el.getAttribute('onslideenter');
    +  if (onEnter) {
    +    new Function(onEnter).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideenter', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +
    +  el.dispatchEvent(evt);
    +};
    +
    +function triggerLeaveEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onLeave = el.getAttribute('onslideleave');
    +  if (onLeave) {
    +    new Function(onLeave).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideleave', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +  
    +  el.dispatchEvent(evt);
    +};
    +
    +/* Touch events */
    +
    +function handleTouchStart(event) {
    +  if (event.touches.length == 1) {
    +    touchDX = 0;
    +    touchDY = 0;
    +
    +    touchStartX = event.touches[0].pageX;
    +    touchStartY = event.touches[0].pageY;
    +
    +    document.body.addEventListener('touchmove', handleTouchMove, true);
    +    document.body.addEventListener('touchend', handleTouchEnd, true);
    +  }
    +};
    +
    +function handleTouchMove(event) {
    +  if (event.touches.length > 1) {
    +    cancelTouch();
    +  } else {
    +    touchDX = event.touches[0].pageX - touchStartX;
    +    touchDY = event.touches[0].pageY - touchStartY;
    +  }
    +};
    +
    +function handleTouchEnd(event) {
    +  var dx = Math.abs(touchDX);
    +  var dy = Math.abs(touchDY);
    +
    +  if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
    +    if (touchDX > 0) {
    +      prevSlide();
    +    } else {
    +      nextSlide();
    +    }
    +  }
    +  
    +  cancelTouch();
    +};
    +
    +function cancelTouch() {
    +  document.body.removeEventListener('touchmove', handleTouchMove, true);
    +  document.body.removeEventListener('touchend', handleTouchEnd, true);  
    +};
    +
    +/* Preloading frames */
    +
    +function disableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    disableFrame(frame);
    +  }
    +};
    +
    +function enableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    enableFrame(frame);
    +  }
    +};
    +
    +function disableFrame(frame) {
    +  frame.src = 'about:blank';
    +};
    +
    +function enableFrame(frame) {
    +  var src = frame._src;
    +
    +  if (frame.src != src && src != 'about:blank') {
    +    frame.src = src;
    +  }
    +};
    +
    +function setupFrames() {
    +  var frames = document.querySelectorAll('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    frame._src = frame.src;
    +    disableFrame(frame);
    +  }
    +  
    +  enableSlideFrames(curSlide);
    +  enableSlideFrames(curSlide + 1);
    +  enableSlideFrames(curSlide + 2);  
    +};
    +
    +function setupInteraction() {
    +  /* Clicking and tapping */
    +  
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'prev-slide-area';  
    +  el.addEventListener('click', prevSlide, false);
    +  document.querySelector('section.slides').appendChild(el);
    +
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'next-slide-area';  
    +  el.addEventListener('click', nextSlide, false);
    +  document.querySelector('section.slides').appendChild(el);  
    +  
    +  /* Swiping */
    +  
    +  document.body.addEventListener('touchstart', handleTouchStart, false);
    +}
    +
    +/* ChromeVox support */
    +
    +function isChromeVoxActive() {
    +  if (typeof(cvox) == 'undefined') {
    +    return false;
    +  } else {
    +    return true;
    +  }
    +};
    +
    +function speakAndSyncToNode(node) {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);  
    +  cvox.ChromeVox.navigationManager.syncToNode(node);
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +  var target = node;
    +  while (target.firstChild) {
    +    target = target.firstChild;
    +  }
    +  cvox.ChromeVox.navigationManager.syncToNode(target);
    +};
    +
    +function speakNextItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.next(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.firstChild) {
    +      target = target.firstChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.next(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +function speakPrevItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.previous(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.lastChild){
    +      target = target.lastChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.previous(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +/* Hash functions */
    +
    +function getCurSlideFromHash() {
    +  var slideNo = parseInt(location.hash.substr(1));
    +
    +  if (slideNo) {
    +    curSlide = slideNo - 1;
    +  } else {
    +    curSlide = 0;
    +  }
    +};
    +
    +function updateHash() {
    +  location.replace('#' + (curSlide + 1));
    +};
    +
    +/* Event listeners */
    +
    +function handleBodyKeyDown(event) {
    +  switch (event.keyCode) {
    +    case 39: // right arrow
    +    case 13: // Enter
    +    case 32: // space
    +    case 34: // PgDn
    +      nextSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 37: // left arrow
    +    case 8: // Backspace
    +    case 33: // PgUp
    +      prevSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 40: // down arrow
    +      if (isChromeVoxActive()) {
    +        speakNextItem();
    +      } else {
    +        nextSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +
    +    case 38: // up arrow
    +      if (isChromeVoxActive()) {
    +        speakPrevItem();
    +      } else {
    +        prevSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +  }
    +};
    +
    +function addEventListeners() {
    +  document.addEventListener('keydown', handleBodyKeyDown, false);  
    +};
    +
    +/* Initialization */
    +
    +function addPrettify() {
    +  var els = document.querySelectorAll('pre');
    +  for (var i = 0, el; el = els[i]; i++) {
    +    if (!el.classList.contains('noprettyprint')) {
    +      el.classList.add('prettyprint');
    +    }
    +  }
    +  
    +  var el = document.createElement('script');
    +  el.type = 'text/javascript';
    +  el.src = PERMANENT_URL_PREFIX + 'prettify.js';
    +  el.onload = function() {
    +    prettyPrint();
    +  }
    +  document.body.appendChild(el);
    +};
    +
    +function addFontStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = 'http://fonts.googleapis.com/css?family=' +
    +            'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
    +
    +  document.body.appendChild(el);
    +};
    +
    +function addGeneralStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = PERMANENT_URL_PREFIX + 'styles.css';
    +  document.body.appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'viewport';
    +  el.content = 'width=1100,height=750';
    +  document.querySelector('head').appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'apple-mobile-web-app-capable';
    +  el.content = 'yes';
    +  document.querySelector('head').appendChild(el);
    +};
    +
    +function makeBuildLists() {
    +  for (var i = curSlide, slide; slide = slideEls[i]; i++) {
    +    var items = slide.querySelectorAll('.build > *');
    +    for (var j = 0, item; item = items[j]; j++) {
    +      if (item.classList) {
    +        item.classList.add('to-build');
    +      }
    +    }
    +  }
    +};
    +
    +function handleDomLoaded() {
    +  slideEls = document.querySelectorAll('section.slides > article');
    +
    +  setupFrames();
    +
    +  addFontStyle();
    +  addGeneralStyle();
    +  addPrettify();
    +  addEventListeners();
    +
    +  updateSlides();
    +
    +  setupInteraction();
    +  makeBuildLists();
    +
    +  document.body.classList.add('loaded');
    +};
    +
    +function initialize() {
    +  getCurSlideFromHash();
    +
    +  if (window['_DEBUG']) {
    +    PERMANENT_URL_PREFIX = '../';
    +  }
    +
    +  if (window['_DCL']) {
    +    handleDomLoaded();
    +  } else {
    +    document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
    +  }
    +}
    +
    +// If ?debug exists then load the script relative instead of absolute
    +if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
    +  document.addEventListener('DOMContentLoaded', function() {
    +    // Avoid missing the DomContentLoaded event
    +    window['_DCL'] = true
    +  }, false);
    +
    +  window['_DEBUG'] = true;
    +  var script = document.createElement('script');
    +  script.type = 'text/javascript';
    +  script.src = '../slides.js';
    +  var s = document.getElementsByTagName('script')[0];
    +  s.parentNode.insertBefore(script, s);
    +
    +  // Remove this script
    +  s.parentNode.removeChild(s);
    +} else {
    +  initialize();
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2013/old/trunk/styles.css
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2013/old/trunk/styles.css	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,612 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +           
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +/* Framework */
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  display: block !important;
    +
    +  height: 100%;
    +  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
    +
    +  -webkit-font-smoothing: antialiased;
    +}
    +
    +.slides {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slides > article {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +.slides.layout-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +}
    +.slides.layout-faux-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +  
    +  padding: 40px 160px;
    +}
    +
    +.slides.template-default > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/google-logo-small.png) 710px 625px no-repeat;  
    +  
    +  background-color: white;  
    +} 
    +
    +.slides.template-io2011 > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/colorbar.png) 0 600px repeat-x,
    +              url(images/googleio-logo.png) 640px 625px no-repeat;
    +
    +  background-size: 100%, 225px;  
    +
    +  background-color: white;  
    +}
    +.slides.layout-widescreen > article:not(.nobackground):not(.biglogo),
    +.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) {
    +  background-position-x: 0, 840px;
    +}
    +
    +/* Clickable/tappable areas */
    +
    +.slide-area {
    +  z-index: 1000;
    +
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 150px;
    +  height: 700px;  
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  cursor: pointer;  
    +  margin-top: -350px;  
    +  
    +  tap-highlight-color: transparent;
    +  -o-tap-highlight-color: transparent;
    +  -moz-tap-highlight-color: transparent;
    +  -webkit-tap-highlight-color: transparent;
    +}
    +#prev-slide-area {
    +  margin-left: -550px;
    +}
    +#next-slide-area {
    +  margin-left: 400px;
    +}
    +.slides.layout-widescreen #prev-slide-area,
    +.slides.layout-faux-widescreen #prev-slide-area {
    +  margin-left: -650px;
    +}
    +.slides.layout-widescreen #next-slide-area,
    +.slides.layout-faux-widescreen #next-slide-area {
    +  margin-left: 500px;
    +}
    +
    +/* Slide styles */
    +
    +.slides.template-default article.biglogo {
    +  background: white url(images/google-logo.png) 50% 50% no-repeat;
    +}
    +
    +.slides.template-io2011 article.biglogo {
    +  background: white url(images/googleio-logo.png) 50% 50% no-repeat;
    +
    +  background-size: 600px;
    +}
    +
    +/* Slides */
    +
    +.slides > article {
    +  display: none;
    +}
    +.slides > article.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slides > article.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +.slides > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides > article.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +.slides > article.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +.slides.layout-widescreen > article.far-past,
    +.slides.layout-faux-widescreen > article.far-past {
    +  display: block;
    +  transform: translate(-2260px);
    +  -o-transform: translate(-2260px);
    +  -moz-transform: translate(-2260px);
    +  -webkit-transform: translate3d(-2260px, 0, 0);
    +}
    +.slides.layout-widescreen > article.past,
    +.slides.layout-faux-widescreen > article.past {
    +  display: block;
    +  transform: translate(-1130px);
    +  -o-transform: translate(-1130px);
    +  -moz-transform: translate(-1130px);
    +  -webkit-transform: translate3d(-1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.current,
    +.slides.layout-faux-widescreen > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides.layout-widescreen > article.next,
    +.slides.layout-faux-widescreen > article.next {
    +  display: block;
    +  transform: translate(1130px);
    +  -o-transform: translate(1130px);
    +  -moz-transform: translate(1130px);
    +  -webkit-transform: translate3d(1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.far-next,
    +.slides.layout-faux-widescreen > article.far-next {
    +  display: block;
    +  transform: translate(2260px);
    +  -o-transform: translate(2260px);
    +  -moz-transform: translate(2260px);
    +  -webkit-transform: translate3d(2260px, 0, 0);
    +}
    +
    +/* Styles for slides */
    +
    +.slides > article {
    +  font-family: 'Open Sans', Arial, sans-serif;
    +
    +  color: rgb(102, 102, 102);
    +  text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  letter-spacing: -1px;
    +}
    +
    +b {
    +  font-weight: 600;
    +}
    +
    +.blue {
    +  color: rgb(0, 102, 204);
    +}
    +.yellow {
    +  color: rgb(255, 211, 25);
    +}
    +.green {
    +  color: rgb(0, 138, 53);
    +}
    +.red {
    +  color: rgb(255, 0, 0);
    +}
    +.black {
    +  color: black;
    +}
    +.white {
    +  color: white;
    +}
    +
    +a {
    +  color: rgb(0, 102, 204);
    +}
    +a:visited {
    +  color: rgba(0, 102, 204, .75);
    +}
    +a:hover {
    +  color: black;
    +}
    +
    +p {
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 20px;
    +}
    +p:first-child {
    +  margin-top: 0;
    +}
    +
    +h1 {
    +  font-size: 60px;
    +  line-height: 60px;
    +
    +  padding: 0;
    +  margin: 0;
    +  margin-top: 200px;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -3px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h2 {
    +  font-size: 45px;
    +  line-height: 45px;
    +
    +  position: absolute;
    +  bottom: 150px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -2px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h3 {
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -1px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +article.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +ul {
    +  list-style: none;
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 40px;
    +
    +  margin-left: .75em;
    +}
    +ul:first-child {
    +  margin-top: 0;
    +}
    +ul ul {
    +  margin-top: .5em;
    +}
    +li {
    +  padding: 0;
    +  margin: 0;
    +
    +  margin-bottom: .5em;
    +}
    +li::before {
    +  content: '·';
    +
    +  width: .75em;
    +  margin-left: -.75em;
    +
    +  position: absolute;
    +}
    +
    +pre {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  font-size: 20px;
    +  line-height: 28px;
    +  padding: 5px 10px;
    +  
    +  letter-spacing: -1px;
    +
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  
    +  overflow: hidden;
    +}
    +
    +code {
    +  font-size: 95%;
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  color: black;
    +}
    +
    +iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +}
    +
    +h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +article.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +article.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +  margin-top: 40px;
    +}
    +th {
    +  font-weight: 600;
    +  text-align: left;
    +}
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;  
    +  line-height: 18px;
    +}
    +
    +q {
    +  display: block;
    +  font-size: 60px;
    +  line-height: 72px;
    +  
    +  margin-left: 20px;
    +  
    +  margin-top: 100px;
    +  margin-right: 150px;    
    +}
    +q::before {
    +  content: '“';
    +  
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -2.1em;
    +  width: 2em;
    +  text-align: right;
    +  
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);
    +}
    +q::after {
    +  content: '”';
    +
    +  position: absolute;  
    +  margin-left: .1em;
    +
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);  
    +}
    +div.author {
    +  text-align: right;  
    +  font-size: 40px;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;    
    +}
    +div.author::before {
    +  content: '—';
    +}
    +
    +/* Size variants */
    +
    +article.smaller p,
    +article.smaller ul {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller table {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller pre {
    +  font-size: 15px;
    +  line-height: 20px;
    +  letter-spacing: 0;
    +}
    +article.smaller q {
    +  font-size: 40px;
    +  line-height: 48px;
    +}
    +article.smaller q::before,
    +article.smaller q::after {
    +  font-size: 60px;
    +}
    +
    +/* Builds */
    +
    +.build > * {
    +  transition: opacity 0.5s ease-in-out 0.2s;
    +  -o-transition: opacity 0.5s ease-in-out 0.2s;
    +  -moz-transition: opacity 0.5s ease-in-out 0.2s;
    +  -webkit-transition: opacity 0.5s ease-in-out 0.2s;
    +}
    +
    +.to-build {
    +  opacity: 0;
    +}
    +
    +/* Pretty print */
    +
    +.prettyprint .str, /* string content */
    +.prettyprint .atv { /* a markup attribute value */
    +  color: rgb(0, 138, 53); 
    +}  
    +.prettyprint .kwd, /* a keyword */
    +.prettyprint .tag { /* a markup tag name */
    +  color: rgb(0, 102, 204);
    +}
    +.prettyprint .com { /* a comment */
    +  color: rgb(127, 127, 127); 
    +  font-style: italic; 
    +}  
    +.prettyprint .lit { /* a literal value */
    +  color: rgb(127, 0, 0);
    +}  
    +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */
    +.prettyprint .opn, 
    +.prettyprint .clo { 
    +  color: rgb(127, 127, 127); 
    +}
    +.prettyprint .typ, /* a type name */
    +.prettyprint .atn, /* a markup attribute name */ 
    +.prettyprint .dec, 
    +.prettyprint .var { /* a declaration; a variable name */
    +  color: rgb(127, 0, 127);
    +}  
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/2014_01_14.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/2014_01_14.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,78 @@
    +<!DOCTYPE html>
    +<html>
    +  <head>
    +    <meta charset='utf-8'>
    +    <title>Presentation</title>
    +    <script src='./s6_trunk/slides.js'></script>
    +    <style media='screen,projection'>
    +     /****
    +      * Add your styles here.
    +      */
    +     
    +   body { font-size: 175%; }
    +     
    +  .step  { color: silver; }  /* or hide next steps e.g. .step { visibility: hidden; } */
    +    
    +  .slide {
    +    font-family: 'Open Sans', Arial, sans-serif;
    +
    +    color: rgb(102, 102, 102);
    +    text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +  }
    +  
    +  .slide h1, .slide h2, .slide h3 {
    +    color: rgb(51, 51, 51);
    +  }
    +  
    +  .slide pre {
    +   font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +   font-size: 80%;
    +
    +  padding: 5px 10px;
    +  
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  overflow: hidden;
    +  }
    +
    +  .slide code {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +  color: black;
    +  }
    +    </style>
    +  </head>
    +  <body>
    +
    +    <section class='slides'>
    +      <!-- Add your slides here. Delete or comment out the slides below. -->
    +      <article>
    +	<h1>CbCコンパイラのLLVM3.5上での実装</h1>
    +        <p><br>Kaito Tokumori<br>January 14, 2014</p>
    +      </article>
    +      <article>
    +	<h3>研究目的</h3>
    +	<p> 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。</p>
    +	<p>本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。</p>
    +      </article>
    +
    +      <article>
    +	<h3>今回したこと</h3>
    +	<ul>
    +	  <li></li>
    +	</ul>
    +      </article>
    +
    +      <article>
    +	<h3>次回課題</h3>
    +        <ul>
    +          <li></li>
    +        </ul>
    +      </article>
    +    </section>
    +  </body>
    +</html>
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/FETCH_HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/FETCH_HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +56717a48e328867bbdc467407650d1f8aaa79d10		branch 'gh-pages' of https://github.com/geraldb/s6
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +ref: refs/heads/gh-pages
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/ORIG_HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/ORIG_HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +56717a48e328867bbdc467407650d1f8aaa79d10
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/config
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/config	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,13 @@
    +[core]
    +	repositoryformatversion = 0
    +	filemode = true
    +	bare = false
    +	logallrefupdates = true
    +	ignorecase = true
    +	precomposeunicode = false
    +[remote "origin"]
    +	url = https://github.com/geraldb/s6.git
    +	fetch = +refs/heads/*:refs/remotes/origin/*
    +[branch "gh-pages"]
    +	remote = origin
    +	merge = refs/heads/gh-pages
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/description
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/description	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +Unnamed repository; edit this file 'description' to name the repository.
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/applypatch-msg.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/applypatch-msg.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,15 @@
    +#!/bin/sh
    +#
    +# An example hook script to check the commit log message taken by
    +# applypatch from an e-mail message.
    +#
    +# The hook should exit with non-zero status after issuing an
    +# appropriate message if it wants to stop the commit.  The hook is
    +# allowed to edit the commit message file.
    +#
    +# To enable this hook, rename this file to "applypatch-msg".
    +
    +. git-sh-setup
    +test -x "$GIT_DIR/hooks/commit-msg" &&
    +	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
    +:
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/commit-msg.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/commit-msg.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,24 @@
    +#!/bin/sh
    +#
    +# An example hook script to check the commit log message.
    +# Called by "git commit" with one argument, the name of the file
    +# that has the commit message.  The hook should exit with non-zero
    +# status after issuing an appropriate message if it wants to stop the
    +# commit.  The hook is allowed to edit the commit message file.
    +#
    +# To enable this hook, rename this file to "commit-msg".
    +
    +# Uncomment the below to add a Signed-off-by line to the message.
    +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
    +# hook is more suited to it.
    +#
    +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
    +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
    +
    +# This example catches duplicate Signed-off-by lines.
    +
    +test "" = "$(grep '^Signed-off-by: ' "$1" |
    +	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
    +	echo >&2 Duplicate Signed-off-by lines.
    +	exit 1
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/post-update.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/post-update.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,8 @@
    +#!/bin/sh
    +#
    +# An example hook script to prepare a packed repository for use over
    +# dumb transports.
    +#
    +# To enable this hook, rename this file to "post-update".
    +
    +exec git update-server-info
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/pre-applypatch.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/pre-applypatch.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,14 @@
    +#!/bin/sh
    +#
    +# An example hook script to verify what is about to be committed
    +# by applypatch from an e-mail message.
    +#
    +# The hook should exit with non-zero status after issuing an
    +# appropriate message if it wants to stop the commit.
    +#
    +# To enable this hook, rename this file to "pre-applypatch".
    +
    +. git-sh-setup
    +test -x "$GIT_DIR/hooks/pre-commit" &&
    +	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
    +:
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/pre-commit.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/pre-commit.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,50 @@
    +#!/bin/sh
    +#
    +# An example hook script to verify what is about to be committed.
    +# Called by "git commit" with no arguments.  The hook should
    +# exit with non-zero status after issuing an appropriate message if
    +# it wants to stop the commit.
    +#
    +# To enable this hook, rename this file to "pre-commit".
    +
    +if git rev-parse --verify HEAD >/dev/null 2>&1
    +then
    +	against=HEAD
    +else
    +	# Initial commit: diff against an empty tree object
    +	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
    +fi
    +
    +# If you want to allow non-ascii filenames set this variable to true.
    +allownonascii=$(git config hooks.allownonascii)
    +
    +# Redirect output to stderr.
    +exec 1>&2
    +
    +# Cross platform projects tend to avoid non-ascii filenames; prevent
    +# them from being added to the repository. We exploit the fact that the
    +# printable range starts at the space character and ends with tilde.
    +if [ "$allownonascii" != "true" ] &&
    +	# Note that the use of brackets around a tr range is ok here, (it's
    +	# even required, for portability to Solaris 10's /usr/bin/tr), since
    +	# the square bracket bytes happen to fall in the designated range.
    +	test $(git diff --cached --name-only --diff-filter=A -z $against |
    +	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
    +then
    +	echo "Error: Attempt to add a non-ascii file name."
    +	echo
    +	echo "This can cause problems if you want to work"
    +	echo "with people on other platforms."
    +	echo
    +	echo "To be portable it is advisable to rename the file ..."
    +	echo
    +	echo "If you know what you are doing you can disable this"
    +	echo "check using:"
    +	echo
    +	echo "  git config hooks.allownonascii true"
    +	echo
    +	exit 1
    +fi
    +
    +# If there are whitespace errors, print the offending file names and fail.
    +exec git diff-index --check --cached $against --
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/pre-push.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/pre-push.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,53 @@
    +#!/bin/sh
    +
    +# An example hook script to verify what is about to be pushed.  Called by "git
    +# push" after it has checked the remote status, but before anything has been
    +# pushed.  If this script exits with a non-zero status nothing will be pushed.
    +#
    +# This hook is called with the following parameters:
    +#
    +# $1 -- Name of the remote to which the push is being done
    +# $2 -- URL to which the push is being done
    +#
    +# If pushing without using a named remote those arguments will be equal.
    +#
    +# Information about the commits which are being pushed is supplied as lines to
    +# the standard input in the form:
    +#
    +#   <local ref> <local sha1> <remote ref> <remote sha1>
    +#
    +# This sample shows how to prevent push of commits where the log message starts
    +# with "WIP" (work in progress).
    +
    +remote="$1"
    +url="$2"
    +
    +z40=0000000000000000000000000000000000000000
    +
    +IFS=' '
    +while read local_ref local_sha remote_ref remote_sha
    +do
    +	if [ "$local_sha" = $z40 ]
    +	then
    +		# Handle delete
    +	else
    +		if [ "$remote_sha" = $z40 ]
    +		then
    +			# New branch, examine all commits
    +			range="$local_sha"
    +		else
    +			# Update to existing branch, examine new commits
    +			range="$remote_sha..$local_sha"
    +		fi
    +
    +		# Check for WIP commit
    +		commit=`git rev-list -n 1 --grep '^WIP' "$range"`
    +		if [ -n "$commit" ]
    +		then
    +			echo "Found WIP commit in $local_ref, not pushing"
    +			exit 1
    +		fi
    +	fi
    +done
    +
    +exit 0
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/pre-rebase.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/pre-rebase.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,169 @@
    +#!/bin/sh
    +#
    +# Copyright (c) 2006, 2008 Junio C Hamano
    +#
    +# The "pre-rebase" hook is run just before "git rebase" starts doing
    +# its job, and can prevent the command from running by exiting with
    +# non-zero status.
    +#
    +# The hook is called with the following parameters:
    +#
    +# $1 -- the upstream the series was forked from.
    +# $2 -- the branch being rebased (or empty when rebasing the current branch).
    +#
    +# This sample shows how to prevent topic branches that are already
    +# merged to 'next' branch from getting rebased, because allowing it
    +# would result in rebasing already published history.
    +
    +publish=next
    +basebranch="$1"
    +if test "$#" = 2
    +then
    +	topic="refs/heads/$2"
    +else
    +	topic=`git symbolic-ref HEAD` ||
    +	exit 0 ;# we do not interrupt rebasing detached HEAD
    +fi
    +
    +case "$topic" in
    +refs/heads/??/*)
    +	;;
    +*)
    +	exit 0 ;# we do not interrupt others.
    +	;;
    +esac
    +
    +# Now we are dealing with a topic branch being rebased
    +# on top of master.  Is it OK to rebase it?
    +
    +# Does the topic really exist?
    +git show-ref -q "$topic" || {
    +	echo >&2 "No such branch $topic"
    +	exit 1
    +}
    +
    +# Is topic fully merged to master?
    +not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
    +if test -z "$not_in_master"
    +then
    +	echo >&2 "$topic is fully merged to master; better remove it."
    +	exit 1 ;# we could allow it, but there is no point.
    +fi
    +
    +# Is topic ever merged to next?  If so you should not be rebasing it.
    +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
    +only_next_2=`git rev-list ^master           ${publish} | sort`
    +if test "$only_next_1" = "$only_next_2"
    +then
    +	not_in_topic=`git rev-list "^$topic" master`
    +	if test -z "$not_in_topic"
    +	then
    +		echo >&2 "$topic is already up-to-date with master"
    +		exit 1 ;# we could allow it, but there is no point.
    +	else
    +		exit 0
    +	fi
    +else
    +	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
    +	/usr/bin/perl -e '
    +		my $topic = $ARGV[0];
    +		my $msg = "* $topic has commits already merged to public branch:\n";
    +		my (%not_in_next) = map {
    +			/^([0-9a-f]+) /;
    +			($1 => 1);
    +		} split(/\n/, $ARGV[1]);
    +		for my $elem (map {
    +				/^([0-9a-f]+) (.*)$/;
    +				[$1 => $2];
    +			} split(/\n/, $ARGV[2])) {
    +			if (!exists $not_in_next{$elem->[0]}) {
    +				if ($msg) {
    +					print STDERR $msg;
    +					undef $msg;
    +				}
    +				print STDERR " $elem->[1]\n";
    +			}
    +		}
    +	' "$topic" "$not_in_next" "$not_in_master"
    +	exit 1
    +fi
    +
    +exit 0
    +
    +################################################################
    +
    +This sample hook safeguards topic branches that have been
    +published from being rewound.
    +
    +The workflow assumed here is:
    +
    + * Once a topic branch forks from "master", "master" is never
    +   merged into it again (either directly or indirectly).
    +
    + * Once a topic branch is fully cooked and merged into "master",
    +   it is deleted.  If you need to build on top of it to correct
    +   earlier mistakes, a new topic branch is created by forking at
    +   the tip of the "master".  This is not strictly necessary, but
    +   it makes it easier to keep your history simple.
    +
    + * Whenever you need to test or publish your changes to topic
    +   branches, merge them into "next" branch.
    +
    +The script, being an example, hardcodes the publish branch name
    +to be "next", but it is trivial to make it configurable via
    +$GIT_DIR/config mechanism.
    +
    +With this workflow, you would want to know:
    +
    +(1) ... if a topic branch has ever been merged to "next".  Young
    +    topic branches can have stupid mistakes you would rather
    +    clean up before publishing, and things that have not been
    +    merged into other branches can be easily rebased without
    +    affecting other people.  But once it is published, you would
    +    not want to rewind it.
    +
    +(2) ... if a topic branch has been fully merged to "master".
    +    Then you can delete it.  More importantly, you should not
    +    build on top of it -- other people may already want to
    +    change things related to the topic as patches against your
    +    "master", so if you need further changes, it is better to
    +    fork the topic (perhaps with the same name) afresh from the
    +    tip of "master".
    +
    +Let's look at this example:
    +
    +		   o---o---o---o---o---o---o---o---o---o "next"
    +		  /       /           /           /
    +		 /   a---a---b A     /           /
    +		/   /               /           /
    +	       /   /   c---c---c---c B         /
    +	      /   /   /             \         /
    +	     /   /   /   b---b C     \       /
    +	    /   /   /   /             \     /
    +    ---o---o---o---o---o---o---o---o---o---o---o "master"
    +
    +
    +A, B and C are topic branches.
    +
    + * A has one fix since it was merged up to "next".
    +
    + * B has finished.  It has been fully merged up to "master" and "next",
    +   and is ready to be deleted.
    +
    + * C has not merged to "next" at all.
    +
    +We would want to allow C to be rebased, refuse A, and encourage
    +B to be deleted.
    +
    +To compute (1):
    +
    +	git rev-list ^master ^topic next
    +	git rev-list ^master        next
    +
    +	if these match, topic has not merged in next at all.
    +
    +To compute (2):
    +
    +	git rev-list master..topic
    +
    +	if this is empty, it is fully merged to "master".
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/prepare-commit-msg.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/prepare-commit-msg.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,36 @@
    +#!/bin/sh
    +#
    +# An example hook script to prepare the commit log message.
    +# Called by "git commit" with the name of the file that has the
    +# commit message, followed by the description of the commit
    +# message's source.  The hook's purpose is to edit the commit
    +# message file.  If the hook fails with a non-zero status,
    +# the commit is aborted.
    +#
    +# To enable this hook, rename this file to "prepare-commit-msg".
    +
    +# This hook includes three examples.  The first comments out the
    +# "Conflicts:" part of a merge commit.
    +#
    +# The second includes the output of "git diff --name-status -r"
    +# into the message, just before the "git status" output.  It is
    +# commented because it doesn't cope with --amend or with squashed
    +# commits.
    +#
    +# The third example adds a Signed-off-by line to the message, that can
    +# still be edited.  This is rarely a good idea.
    +
    +case "$2,$3" in
    +  merge,)
    +    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
    +
    +# ,|template,)
    +#   /usr/bin/perl -i.bak -pe '
    +#      print "\n" . `git diff --cached --name-status -r`
    +#	 if /^#/ && $first++ == 0' "$1" ;;
    +
    +  *) ;;
    +esac
    +
    +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
    +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/hooks/update.sample
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/hooks/update.sample	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,128 @@
    +#!/bin/sh
    +#
    +# An example hook script to blocks unannotated tags from entering.
    +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
    +#
    +# To enable this hook, rename this file to "update".
    +#
    +# Config
    +# ------
    +# hooks.allowunannotated
    +#   This boolean sets whether unannotated tags will be allowed into the
    +#   repository.  By default they won't be.
    +# hooks.allowdeletetag
    +#   This boolean sets whether deleting tags will be allowed in the
    +#   repository.  By default they won't be.
    +# hooks.allowmodifytag
    +#   This boolean sets whether a tag may be modified after creation. By default
    +#   it won't be.
    +# hooks.allowdeletebranch
    +#   This boolean sets whether deleting branches will be allowed in the
    +#   repository.  By default they won't be.
    +# hooks.denycreatebranch
    +#   This boolean sets whether remotely creating branches will be denied
    +#   in the repository.  By default this is allowed.
    +#
    +
    +# --- Command line
    +refname="$1"
    +oldrev="$2"
    +newrev="$3"
    +
    +# --- Safety check
    +if [ -z "$GIT_DIR" ]; then
    +	echo "Don't run this script from the command line." >&2
    +	echo " (if you want, you could supply GIT_DIR then run" >&2
    +	echo "  $0 <ref> <oldrev> <newrev>)" >&2
    +	exit 1
    +fi
    +
    +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
    +	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
    +	exit 1
    +fi
    +
    +# --- Config
    +allowunannotated=$(git config --bool hooks.allowunannotated)
    +allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
    +denycreatebranch=$(git config --bool hooks.denycreatebranch)
    +allowdeletetag=$(git config --bool hooks.allowdeletetag)
    +allowmodifytag=$(git config --bool hooks.allowmodifytag)
    +
    +# check for no description
    +projectdesc=$(sed -e '1q' "$GIT_DIR/description")
    +case "$projectdesc" in
    +"Unnamed repository"* | "")
    +	echo "*** Project description file hasn't been set" >&2
    +	exit 1
    +	;;
    +esac
    +
    +# --- Check types
    +# if $newrev is 0000...0000, it's a commit to delete a ref.
    +zero="0000000000000000000000000000000000000000"
    +if [ "$newrev" = "$zero" ]; then
    +	newrev_type=delete
    +else
    +	newrev_type=$(git cat-file -t $newrev)
    +fi
    +
    +case "$refname","$newrev_type" in
    +	refs/tags/*,commit)
    +		# un-annotated tag
    +		short_refname=${refname##refs/tags/}
    +		if [ "$allowunannotated" != "true" ]; then
    +			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
    +			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
    +			exit 1
    +		fi
    +		;;
    +	refs/tags/*,delete)
    +		# delete tag
    +		if [ "$allowdeletetag" != "true" ]; then
    +			echo "*** Deleting a tag is not allowed in this repository" >&2
    +			exit 1
    +		fi
    +		;;
    +	refs/tags/*,tag)
    +		# annotated tag
    +		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
    +		then
    +			echo "*** Tag '$refname' already exists." >&2
    +			echo "*** Modifying a tag is not allowed in this repository." >&2
    +			exit 1
    +		fi
    +		;;
    +	refs/heads/*,commit)
    +		# branch
    +		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
    +			echo "*** Creating a branch is not allowed in this repository" >&2
    +			exit 1
    +		fi
    +		;;
    +	refs/heads/*,delete)
    +		# delete branch
    +		if [ "$allowdeletebranch" != "true" ]; then
    +			echo "*** Deleting a branch is not allowed in this repository" >&2
    +			exit 1
    +		fi
    +		;;
    +	refs/remotes/*,commit)
    +		# tracking branch
    +		;;
    +	refs/remotes/*,delete)
    +		# delete tracking branch
    +		if [ "$allowdeletebranch" != "true" ]; then
    +			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
    +			exit 1
    +		fi
    +		;;
    +	*)
    +		# Anything else (is there anything else?)
    +		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
    +		exit 1
    +		;;
    +esac
    +
    +# --- Finished
    +exit 0
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/index
    Binary file 2014/2014_01_14/s6_trunk/.git/index has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/info/exclude
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/info/exclude	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,6 @@
    +# git ls-files --others --exclude-from=.git/info/exclude
    +# Lines that start with '#' are comments.
    +# For a project mostly in C, the following would be a good set of
    +# exclude patterns (uncomment them if you want to use them):
    +# *.[oa]
    +# *~
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/logs/HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/logs/HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +0000000000000000000000000000000000000000 56717a48e328867bbdc467407650d1f8aaa79d10 utah <e105711@terra.cr.ie.u-ryukyu.ac.jp> 1387274984 +0900	clone: from https://github.com/geraldb/s6.git
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/logs/refs/heads/gh-pages
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/logs/refs/heads/gh-pages	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +0000000000000000000000000000000000000000 56717a48e328867bbdc467407650d1f8aaa79d10 utah <e105711@terra.cr.ie.u-ryukyu.ac.jp> 1387274984 +0900	clone: from https://github.com/geraldb/s6.git
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/logs/refs/remotes/origin/HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/logs/refs/remotes/origin/HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +0000000000000000000000000000000000000000 56717a48e328867bbdc467407650d1f8aaa79d10 utah <e105711@terra.cr.ie.u-ryukyu.ac.jp> 1387274984 +0900	clone: from https://github.com/geraldb/s6.git
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/objects/pack/pack-e8109ab27a26c4ee9155b2c6a2e9424d68a64508.idx
    Binary file 2014/2014_01_14/s6_trunk/.git/objects/pack/pack-e8109ab27a26c4ee9155b2c6a2e9424d68a64508.idx has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/objects/pack/pack-e8109ab27a26c4ee9155b2c6a2e9424d68a64508.pack
    Binary file 2014/2014_01_14/s6_trunk/.git/objects/pack/pack-e8109ab27a26c4ee9155b2c6a2e9424d68a64508.pack has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/packed-refs
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/packed-refs	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,3 @@
    +# pack-refs with: peeled fully-peeled 
    +56717a48e328867bbdc467407650d1f8aaa79d10 refs/remotes/origin/gh-pages
    +6756f5f7f93f8221065580af9dc40a98e63edd2a refs/tags/0.0.1
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/refs/heads/gh-pages
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/refs/heads/gh-pages	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +56717a48e328867bbdc467407650d1f8aaa79d10
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.git/refs/remotes/origin/HEAD
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.git/refs/remotes/origin/HEAD	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +ref: refs/remotes/origin/gh-pages
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/.gitignore
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/.gitignore	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,4 @@
    +# Komodo Project Files
    +
    +*.kpf
    +*.komodoproject
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/DOCS/FORMAT.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/DOCS/FORMAT.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,80 @@
    +# S6 Format
    +
    +
    +## Media Types 
    +
    +S6 supports out-of-the box three media types, that is, `projection`, `screen` and `print`:
    +
    +* `projection` => display one slide at-a-time; (use option `mode: slideshow`)
    +* `screen`     => display all slides at-once on screen; (use option `mode: outline`) 
    +* `print`      => print (and print preview)
    +
    +Note: Only the Opera browser has built-in support for `projection`.
    +On other browsers S6 uses JavaScript to switch `projection` to `screen` on startup.
    +
    +
    +## Structure, CSS Classes
    +
    +     .presentation
    +       .slide
    +         .step
    +         .notes
    +         .extra
    +      
    +### Core Classes
    +
    +`.presentation` (alias `.deck`, `.slides`)
    +
    +Top level class for all slides
    +
    +`.slide`
    +
    +Marks a slide
    +
    +`.step`  (alias `.incremental`, `.delayed`, `.action`, `.build`) 
    +
    +Marks a slide step. Shortcut Tip: If a list gets marked up with `.step`,
    +all its children get marked up automatically.
    +
    +
    +### Extras
    +
    +`.notes`  (alias `.note`, `.handout`)  
    +
    +Marks speaker notes.
    +
    +`.extra`
    +
    +Marks extra text for print only.
    +
    +
    +
    +## Styling and Slide Types
    +
    +### Slide Types/Layouts
    +
    +* fullscreen
    +* hidden
    +
    +### Font Size
    +
    +Absolute:
    +
    +* xx-large
    +* x-large
    +* large
    +* small
    +* x-small
    +* xx-small
    +
    +Relative:
    +
    +* larger
    +* smaller
    +
    +### Alignment
    +
    +* right
    +* center
    +* left
    +
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/DOCS/PLUGINS.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/DOCS/PLUGINS.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,13 @@
    +# S6 Format for Plugins / Addons
    +
    +## Custom Events 
    +
    +S6 fires the following events (to let plugins/addons get hooks into the JavaScript machinery):
    +
    +* `slideshow.init`
    +* `slideshow.start`
    +* `slideshow.keys( key )`
    +* `slideshow.debug.on`
    +* `slideshow.debug.off`
    +* `slideshow.change( from, to )`
    +
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/DOCS/README.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/DOCS/README.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,12 @@
    +# S6 Docs
    +
    +## Format
    +
    +* [S6 Format](FORMAT.md) -
    +  CSS Classes & Ids (`.slide`, `.step`, etc.), Media Types (`projection`, `screen`, `print`)
    +* [S6 Format for Plugins/Addons](PLUGINS.md)  -
    +  JavaScript Custom Events (`slideshow.init`, `slideshow.change`, `slideshow.keys`, etc.)
    +
    +## Tips & Tricks
    +
    +TBD
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/HISTORY.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/HISTORY.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,65 @@
    +### r2011-11-13
    +
    +* Add normalize css selector option; lets you use the following aliases
    +  * presentation => deck
    +  * step => incremental, delayed, action, build
    +  * notes => note, handout
    +
    +### r2011-11-05
    +
    +* Add chrome fix/workaround for inline styles (projection media needs to get set to screen,projection)
    +* Move code to addons using new slideshow triggers; new addons include:
    +  * counter (slide counter e.g. 1/7)
    +  * controls (toggle, next, prev buttons, jumplist)
    +  * autoplay
    +  * footer/header
    +* Moved sample transitions to jquery.slideshow.transitions.js
    +* Changed .slide box-sizing to border-box (lets you use width: 100%; height: 100%;)
    +* Minor fixes
    +
    +### r2011-11-01
    +
    +* Add minimalistic.html template; all styles (projection, screen, print) inline plus no less.js used
    +* Clean up styles; move all styles (projection, screen, print) for controls into slideshow.js
    +* /shared folder now split into /js and /css folders
    +* Update jquery.js to 1.6.4
    +* Update less.js to 1.1.4
    +* Minor fixes
    +
    +### r2011-05-22
    +
    +* Adding blank5.html template (using more semantic tags e.g. header, footer, article, etc.) [Thanks Ryan McIlmoyl]
    +
    +### r2011-05-21
    +
    +* Switch all CSS stylesheets to use less.js CSS extension
    +* Update jquery to 1.6.1
    +
    +### r2011-05-20  
    +
    +* Easier CSS media type handling for projection (e.g. ids no longer required; plus can now handle multiple styles either using link or style tag)
    +
    +### r2011-02-06
    +
    +* Add right click on title handler for going back one slide
    +* Update jquery to 1.5
    +
    +### r2010-07-18
    +
    +* Adding custom slide transitions plus some sample animations (e.g. slide up/down, fade out/in)
    +* Adding clicker (click on title to go to next slide)
    +* Adding autoplay (press a/p/s-key to toggle autoplay)
    +
    +### r2010-07-17
    +
    +* JavaScript cleanup; everything namespaced now using Slideshow
    +* Removing svg gradient backgrounds; use css3 gradients instead
    +* Move better browser banner for IE out of core; uses conditional comments for include.
    +
    +### r2009-02-19
    +
    +* Add support for steps/incrementals
    +
    +### r2009-02-10
    +
    +* Everything is new.
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/README.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/README.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,66 @@
    +# S6 Blank/Boilerplate
    +
    +Slide Show Templates Using HTML5, CSS3 & JavaScript (w/ jQuery)
    +
    +## Templates
    +
    +- [`blank.html`](http://geraldb.github.io/s6/blank.html)
    +- [`blank5.html`](http://geraldb.github.io/s6/blank5.html)
    +- [`minimalistic.html`](http://geraldb.github.io/s6/minimalistic.html)
    +- [`sample.html`](http://geraldb.github.io/s6/sample.html)
    +
    +
    +## S6 in Action - Sample Slide Shows Online
    +
    +Try some slide show samples powered by S6:
    +
    +- [Slide Show (S9) 10-Minute Tutorial](http://slideshow-s9.github.io/tutorial.html)
    +- [Prototype vs jQuery: To and from JavaScript Libraries](http://slideshow-s9.github.io/jquery.html)
    +- [10 Things Every Java Programmer Should Know About Ruby](http://slideshow-s9.github.io/10things.html)
    +- [Ruby 1.9: What to Expect](http://slideshow-s9.github.io/ruby19.html)
    +- [`beer.db` - Using Open Beer & Brewery Data in Ruby](http://slideshow-s9.github.io/beer_db_intro.html)
    +
    +Keyboard controls:
    +
    +| Action                                             | Key                                                         |
    +| -------------------------------------------------- | ----------------------------------------------------------- |
    +| Go to next slide                                   | Space Bar, Right Arrow Down Arrow, Page Down, Click Heading |
    +| Go to previous slide                               | Left Arrow, Up Arrow, Page Up                               |
    +| Go to first slide                                  | Home                                                        |
    +| Go to last slide                                   | End                                                         |
    +| Toggle between slideshow and outline view (Ø)      | T                                                           |
    +| Show/hide slide controls (Ø « »)                   | C, Move mouse to bottom right corner                        |
    +
    +
    +
    +
    +## What's S5? What's S6?
    +
    +Simple Standards-based Slide Show System (S5) is Eric Meyer's (of CSS fame) public domain
    +(free, open source) slide show package inspired by Opera Show and others that works
    +in all modern browsers without any plugin required
    +because it includes its own slide show machinery in JavaScript.
    +More [S5 Project Site »](http://meyerweb.com/eric/tools/s5)
    +
    +S6 started as a rewrite of S5 using the jQuery JavaScript library - offering
    +easier to understand and easier to extend code. Add plugins, effects and more.
    +Contributions welcome!
    +
    +## What's Slide Show (S9)? Slide Show Generator for S6 
    +
    +A Ruby gem that lets you create slide shows and author slides in plain text
    +using a wiki-style markup language that's easy-to-write and easy-to-read
    +and ships "out-of-the-gem" with S6 templates built-in.
    +More [Slide Show (S9) Project Site »](http://slideshow-s9.github.io)
    +
    +
    +## About, License
    +
    +The slide show (S6) scripts and templates are dedicated
    +to the public domain. Use it as you please with no restrictions whatsoever.
    +
    +## Questions? Comments?
    +
    +Send them along to
    +the [Free Web Slide Show Alternatives (S5, S6, S9, Slidy And Friends) Forum/Mailing List](http://groups.google.com/group/webslideshow).
    +Thanks!
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/TODO.md
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/TODO.md	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,29 @@
    +# Todos and Ideas
    +
    +## Theming
    +
    +* add some themes;  
    +
    +## Addons
    +
    +* add hash addon
    +* add help addon
    +* add timer addon
    +
    +## JavaScript cleanup
    +
    +* use prototype for functions
    +* use _ (underscore) for properties e.g. this.smax becomes this._smax
    +* add a Slide class ?? 
    +* add a slide.js script that includes everything (including css) for easy use 
    +
    +## More
    +
    +* add support for far-past, past, current, future, far-future CSS classes on slides
    +* add support for iframe slides (e.g. fullscreen); see CSSS for examples
    +* add autostyle: true | false option ??
    +* check if slide has id (if yes, reuse user-supplied id)
    +
    +## Known bugs
    +
    +* jumpList in navList visibility won't work in chrome on :hover
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/auaua.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/auaua.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,78 @@
    +<!DOCTYPE html>
    +<html>
    +  <head>
    +    <meta charset='utf-8'>
    +    <title>Presentation</title>
    +    <script src='slides.js'></script>
    +    <style media='screen,projection'>
    +     /****
    +      * Add your styles here.
    +      */
    +     
    +   body { font-size: 175%; }
    +     
    +  .step  { color: silver; }  /* or hide next steps e.g. .step { visibility: hidden; } */
    +    
    +  .slide {
    +    font-family: 'Open Sans', Arial, sans-serif;
    +
    +    color: rgb(102, 102, 102);
    +    text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +  }
    +  
    +  .slide h1, .slide h2, .slide h3 {
    +    color: rgb(51, 51, 51);
    +  }
    +  
    +  .slide pre {
    +   font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +   font-size: 80%;
    +
    +  padding: 5px 10px;
    +  
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  overflow: hidden;
    +  }
    +
    +  .slide code {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +  color: black;
    +  }
    +    </style>
    +  </head>
    +  <body>
    +
    +    <section class='slides'>
    +      <!-- Add your slides here. Delete or comment out the slides below. -->
    +      <article>
    +	<h1>CbCコンパイラのLLVM3.5上での実装</h1>
    +        <p><br>Kaito Tokumori<br>#{day.strftime('%B %d, %Y')}</p>
    +      </article>
    +      <article>
    +	<h3>研究目的</h3>
    +	<p> 当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案している。その手法を用いてプログラミングを行う言語として"CbC"の開発を行っており、これはCの下位の言語である。CbCにおいてコードセグメント間の移動はgoto文を用いた軽量継続によって行われ、これはTail Call Eliminationという最適化の強制によって実現される。</p>
    +	<p>本研究過去に開発されたmicro-c,GCC版のコンパイラに続くLLVM/Clang上でのCbCコンパイラの開発を行う。</p>
    +      </article>
    +
    +      <article>
    +	<h3>今回したこと</h3>
    +	<ul>
    +	  <li></li>
    +	</ul>
    +      </article>
    +
    +      <article>
    +	<h3>次回課題</h3>
    +        <ul>
    +          <li></li>
    +        </ul>
    +      </article>
    +    </section>
    +  </body>
    +</html>
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/blank.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/blank.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,110 @@
    +////////
    +// variables for easy configuration
    +//
    +// (note: this is a less extendend css script, to learn more about less; see lesscss.org)
    +
    +@color:                  black;
    +@color-step-hidden:      silver;
    +
    +@background-color-code:  azure;
    +
    +// -- gradient colors used for slides classified with cover | title
    +
    +@background-gradient-color1-cover: blue;
    +@background-gradient-color2-cover: aqua;
    +
    +// -- gradient colors for all other slides
    +
    +@background-gradient-color1: yellow;
    +@background-gradient-color2: orange;
    +
    +// --- font size
    +
    +@font-size-h1:     245%;    // 30pt / 40px    (assuming 100% => 12pt / 16px)
    +@font-size-h2:     230%;    // 28pt / 37px
    +@font-size-h3:     200%;    // 24pt / 32px
    +@font-size-text:   150%;    // 18pt / 24px
    +@font-size-code:   140%;    // 16pt / 22px
    +
    +
    +/////////////////////////////
    +
    +body { font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;  }
    +
    +a:link,
    +a:visited { color: @color; }
    +
    +
    +.slide {
    +
    +  color: @color;
    +  
    +  h1 {   font-size: @font-size-h1;
    +         text-align: center;
    +
    +       &.fullscreen { position: absolute;
    +                      top: 40%;
    +                      width: 100%; }
    +
    +       // lets you create slides with no heading (that is, heading gets hidden but included in toc) 
    +       &.hidden     { display: none; }
    +      }
    +  
    +  h2 { font-size: @font-size-h2; }
    +
    +  h3 { font-size: @font-size-h3; }
    +
    +  .stepcurrent { color: @color; }
    +  .step        { color: @color-step-hidden; }  // or hide next steps e.g. .step { visibility: hidden; } 
    +}
    +
    +
    +ul { list-style-type: square; }
    +
    +
    +p, li, dt, dd, td, th { font-size: @font-size-text; }
    +
    +
    +pre { font-size: @font-size-code; }
    +
    +.code { 
    +        background-color: @background-color-code;
    +        padding: 5px;
    +      }
    +     
    +.footnote a:first-of-type  { text-decoration: none; }
    +
    +p.footnote { font-size: 88%; }
    +
    +.help {
    +  p, td  { font-size: 88%; }
    +}
    + 
    +/******** 
    + * example gradient background using css3
    + */
    +
    +.slide {
    +  background-image: -webkit-linear-gradient(top, @background-gradient-color1,
    +                                                 @background-gradient-color2,
    +                                                 @background-gradient-color1,
    +                                                 @background-gradient-color2);
    +  
    +  background-image: -moz-linear-gradient(top, @background-gradient-color1,
    +                                              @background-gradient-color2,
    +                                              @background-gradient-color1,
    +                                              @background-gradient-color2);
    +                                              
    +  &.cover, &.title {
    +   background-image: -webkit-linear-gradient(top, @background-gradient-color1-cover,
    +                                                 @background-gradient-color2-cover,
    +                                                 @background-gradient-color1-cover,
    +                                                 @background-gradient-color2-cover);
    +  
    +   background-image: -moz-linear-gradient(top, @background-gradient-color1-cover,
    +                                              @background-gradient-color2-cover,
    +                                              @background-gradient-color1-cover,
    +                                              @background-gradient-color2-cover);
    +
    +  }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/blank.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/blank.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,132 @@
    +<!DOCTYPE html>
    +<html>
    +<head>
    +  <meta charset='utf-8'>
    +  <title>[your_title_here]</title>
    +
    +<!-- 
    +   Notes on CSS media types used:
    + 
    +   1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    +   2) screen     -> outline mode (display all slides-at-once on screen) 
    +   3) print      -> print (and print preview)
    +  
    +   Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
    +
    +   Questions, comments?
    +   - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow    
    +-->
    +
    +<!-- style sheet links -->
    +<link rel="stylesheet/less" href="themes/blank/projection.css.less"  media="screen,projection">
    +<link rel="stylesheet/less" href="themes/blank/screen.css.less"      media="screen">
    +<link rel="stylesheet/less" href="themes/blank/print.css.less"       media="print">
    +
    +<link rel="stylesheet/less" href="blank.css.less"    media="screen,projection">
    +
    +<!-- Notes about less css support
    +     - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script)
    +     - find more info about less.js online @ http://lesscss.org
    +
    +    ***** NOTE:
    +   less.js browser script currently won’t work if you’re using Google Chrome
    +    and the path to your page starts with "file:///" due to a known Chrome issue.
    +   (In the developer/js console you will see:
    +     XMLHttpRequest cannot load file:///../s6/shared/projection.css.less.
    +     Cross origin requests are only supported for HTTP.)
    +  -->
    +
    +<!-- add js libs (less, jquery) -->
    +<script src="js/less-1.1.4.min.js"></script>
    +<script src="js/jquery-1.7.min.js"></script>
    +
    +<!-- S6 JS -->
    +<script src="js/jquery.slideshow.js"></script>
    +<script src="js/jquery.slideshow.counter.js"></script>
    +<script src="js/jquery.slideshow.controls.js"></script>
    +<script src="js/jquery.slideshow.footer.js"></script>
    +<script src="js/jquery.slideshow.autoplay.js"></script>
    +<script>
    +  $(document).ready( function() {
    +    Slideshow.init();
    +    
    +    // Example 2: Start Off in Outline Mode
    +    // Slideshow.init( { mode: 'outline' } );
    +    
    +    // Example 3: Use Custom Transition
    +    // Slideshow.transition = transitionScrollUp;
    +    // Slideshow.init();
    +
    +    // Example 4: Start Off in Autoplay Mode with Custom Transition
    +    // Slideshow.transition = transitionScrollUp;
    +    // Slideshow.init( { mode: 'autoplay' } );
    +  } );
    +</script>
    +
    +<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
    +<!--[if IE]>
    +<script src="js/jquery.microsoft.js"></script>
    +<![endif]-->
    +
    +</head>
    +<body>
    +
    +<div class="layout">
    +  <div id="header"></div>
    +  <div id="footer">
    +    <h1>[your_footer_here]</h1>
    +    <h2>[your_subfooter_here]</h2>
    +  </div>
    +</div>
    +
    +<div class="presentation">
    +
    +  <!-- add slides here; example -->
    +  
    +  <div class='slide cover'>
    +    <h1>Your Slide Title Here</h1>
    +    <ul>
    +      <li>Item One Here</li>
    +      <li>Item Two Here</li>
    +    </ul>
    +  </div>
    +
    +  <div class='slide'>
    +    <h1>Steps Demos</h1>
    +
    +    <!-- mark list with class step to mark all items at once -->
    +    <ul class='step'>
    +      <li>Item 1.1 Here</li>
    +      <li>Item 1.2 Here</li>
    +    </ul>
    +
    +    <!-- or mark individual list items -->
    +    <ul>
    +      <li class='step'>Item 2.1 Here</li>
    +      <li class='step'>Item 2.2 Here</li>
    +    </ul>
    +
    +    <!-- or mark paragraphs, div blocks or whatever -->
    +    <p class='step'>Another Step</p>
    +
    +  </div>
    +
    +  <div class='slide'>
    +    <h1>Another Slide Title Here</h1>
    +    <p>yada yada yada</p>
    +  </div>
    +
    +  <!-- h1.fullscreen => use only centered heading with no content/body -->
    +  <div class='slide'>
    +    <h1 class='fullscreen'>Another Slide - Using Fullscreen Heading</h1>
    +  </div>
    +
    +  <!-- h1.hidden => use heading just for table of contents (toc) -->
    +  <div class='slide'>
    +    <h1 class='hidden'>Another Slide - Using Hidden Heading</h1>
    +    <p>Add Your Centered Image Here or Whatever</p>
    +   </div>
    +
    +</div> <!-- presentation -->
    +</body>
    +</html>
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/blank5.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/blank5.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,364 @@
    +<!DOCTYPE html>
    +<html>
    +  <head>
    +    <meta charset='utf-8'>
    +    <title>Sample S6 Presentation</title>
    +    <script src='slides.js'></script>
    +    <style media='screen,projection'>
    +     /****
    +      * Add your styles here.
    +      */
    +     
    +   body { font-size: 175%; }
    +     
    +  .step  { color: silver; }  /* or hide next steps e.g. .step { visibility: hidden; } */
    +    
    +  .slide {
    +    font-family: 'Open Sans', Arial, sans-serif;
    +
    +    color: rgb(102, 102, 102);
    +    text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +  }
    +  
    +  .slide h1, .slide h2, .slide h3 {
    +    color: rgb(51, 51, 51);
    +  }
    +  
    +  .slide pre {
    +   font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +   font-size: 80%;
    +
    +  padding: 5px 10px;
    +  
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  overflow: hidden;
    +  }
    +
    +  .slide code {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +  color: black;
    +  }
    +    </style>
    +  </head>
    +  <body>
    +
    +    <section class='slides'>
    +      <!-- Add your slides here. Delete or comment out the slides below. -->
    +      
    +      <article class='cover'>
    +        <h1>
    +          Title Goes Here Up
    +          <br>
    +          To Two Lines
    +        </h1>
    +        <p>
    +          Carlos Ruby
    +          <br>
    +          November 11, 2011
    +        </p>
    +      </article>
    +      
    +      <article>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath.
    +        </p>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Simple slide with header and text
    +        </h3>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath with a <code>code sample: 5px</code>.
    +        </p>
    +      </article>
    +
    +      <article class='smaller'>
    +        <h3>
    +          Simple slide with header and text (small font)
    +        </h3>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath with a <code>code sample: 5px</code>.
    +        </p>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with bullet points and a longer title, just because we
    +          can make it longer
    +        </h3>
    +        <ul>
    +          <li>
    +            Use this template to create your presentation
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +        </ul>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with bullet points that builds
    +        </h3>
    +        <ul class="build">
    +          <li>
    +            This is an example of a list
    +          </li>
    +          <li>
    +            The list items fade in
    +          </li>
    +          <li>
    +            Last one!
    +          </li>
    +        </ul>
    +
    +        <div class="build">
    +          <p>Any element with child nodes can build.</p>
    +          <p>It doesn't have to be a list.</p>
    +        </div>
    +      </article>
    +
    +      <article class='smaller'>
    +        <h3>
    +          Slide with bullet points (small font)
    +        </h3>
    +        <ul>
    +          <li>
    +            Use this template to create your presentation
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +        </ul>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with a table
    +        </h3>
    +        
    +        <table>
    +          <tr>
    +            <th>
    +              Name
    +            <th>
    +              Occupation
    +          <tr>
    +            <td>
    +              Luke Mahé
    +            <td>
    +              V.P. of Keepin’ It Real
    +          <tr>
    +            <td>
    +              Marcin Wichary
    +            <td>
    +              The Michael Bay of Doodles
    +        </table>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <h3>
    +          Slide with a table (smaller text)
    +        </h3>
    +        
    +        <table>
    +          <tr>
    +            <th>
    +              Name
    +            <th>
    +              Occupation
    +          <tr>
    +            <td>
    +              Luke Mahé
    +            <td>
    +              V.P. of Keepin’ It Real
    +          <tr>
    +            <td>
    +              Marcin Wichary
    +            <td>
    +              The Michael Bay of Doodles
    +        </table>
    +      </article>
    +      
    +      <article>
    +        <h2>
    +          Segue slide
    +        </h2>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with an image
    +        </h3>
    +        <p>
    +          <img style='height: 500px' src='images/example-graph.png'>
    +        </p>
    +        <div class='source'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with an image (centered)
    +        </h3>
    +        <p>
    +          <img class='centered' style='height: 500px' src='images/example-graph.png'>
    +        </p>
    +        <div class='source'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article class='fill'>
    +        <h3>
    +          Image filling the slide (with optional header)
    +        </h3>
    +        <p>
    +          <img src='images/example-cat.jpg'>
    +        </p>
    +        <div class='source white'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          This slide has some code
    +        </h3>
    +        <section>
    +        <pre>
    +# The Greeter class
    +class Greeter
    +  def initialize(name)
    +    @name = name.capitalize
    +  end
    + 
    +  def salute
    +    puts "Hello #{@name}!"
    +  end
    +end
    + 
    +# Create a new object
    +g = Greeter.new("world")
    + 
    +# Output "Hello World!"
    +g.salute
    +</pre>
    +        </section>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <h3>
    +          This slide has some code (small font)
    +        </h3>
    +        <section>
    +        <pre>
    +# The Greeter class
    +class Greeter
    +  def initialize(name)
    +    @name = name.capitalize
    +  end
    + 
    +  def salute
    +    puts "Hello #{@name}!"
    +  end
    +end
    + 
    +# Create a new object
    +g = Greeter.new("world")
    + 
    +# Output "Hello World!"
    +g.salute
    +</pre>
    +        </section>
    +      </article>
    +      
    +      <article>
    +        <q>
    +          The best way to predict the future is to invent it.
    +        </q>
    +        <div class='author'>
    +          Alan Kay
    +        </div>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <q>
    +          A distributed system is one in which the failure of a computer 
    +          you didn’t even know existed can render your own computer unusable.
    +        </q>
    +        <div class='author'>
    +          Leslie Lamport
    +        </div>
    +      </article>
    +      
    +      <article class='nobackground'>
    +        <h3>
    +          A slide with an embed + title
    +        </h3>
    +        
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +
    +      <article class='slide nobackground'>
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +
    +      <article class='fill'>
    +        <h3>
    +          Full-slide embed with (optional) slide title on top
    +        </h3>
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +      
    +      <article>
    +        <h3>
    +          Thank you!
    +        </h3>
    +        
    +        <ul>
    +          <li>
    +            <a href='http://www.example.com'>example.com</a>
    +          </li>
    +        </ul>
    +      </article>
    +
    +    </section>
    +
    +  </body>
    +</html>
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/images/example-cat.jpg
    Binary file 2014/2014_01_14/s6_trunk/images/example-cat.jpg has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/images/example-graph.png
    Binary file 2014/2014_01_14/s6_trunk/images/example-graph.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery-1.7.min.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery-1.7.min.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,4 @@
    +/*! jQuery v1.7 jquery.com | jquery.org/license */
    +(function(a,b){function cA(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cx(a){if(!cm[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cn||(cn=c.createElement("iframe"),cn.frameBorder=cn.width=cn.height=0),b.appendChild(cn);if(!co||!cn.createElement)co=(cn.contentWindow||cn.contentDocument).document,co.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),co.close();d=co.createElement(a),co.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cn)}cm[a]=e}return cm[a]}function cw(a,b){var c={};f.each(cs.concat.apply([],cs.slice(0,b)),function(){c[this]=a});return c}function cv(){ct=b}function cu(){setTimeout(cv,0);return ct=f.now()}function cl(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ck(){try{return new a.XMLHttpRequest}catch(b){}}function ce(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cd(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function cc(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bG.test(a)?d(a,e):cc(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)cc(a+"["+e+"]",b[e],c,d);else d(a,b)}function cb(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function ca(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bV,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=ca(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=ca(a,c,d,e,"*",g));return l}function b_(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bR),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bE(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bz:bA;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bB(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function br(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bi,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bq(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bp(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bp)}function bp(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bo(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bn(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bm(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bl(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a){var b=Y.split(" "),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(){return!0}function M(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.add(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return a!=null&&m.test(a)&&!isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(I)return I.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())}),typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return e});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){return i.done.apply(i,arguments).fail.apply(i,arguments)},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,unknownElems:!!a.getElementsByTagName("nav").length,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",enctype:!!c.createElement("form").enctype,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.lastChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-999px",top:"-999px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;f(function(){var a,b,d,e,g,h,i=1,j="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",l="visibility:hidden;border:0;",n="style='"+j+"border:5px solid #000;padding:0;'",p="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>";m=c.getElementsByTagName("body")[0];!m||(a=c.createElement("div"),a.style.cssText=l+"width:0;height:0;position:static;top:0;margin-top:"+i+"px",m.insertBefore(a,m.firstChild),o=c.createElement("div"),o.style.cssText=j+l,o.innerHTML=p,a.appendChild(o),b=o.firstChild,d=b.firstChild,g=b.nextSibling.firstChild.firstChild,h={doesNotAddBorder:d.offsetTop!==5,doesAddBorderForTableAndCells:g.offsetTop===5},d.style.position="fixed",d.style.top="20px",h.fixedPosition=d.offsetTop===20||d.offsetTop===15,d.style.position=d.style.top="",b.style.overflow="hidden",b.style.position="relative",h.subtractsBorderForOverflowNotVisible=d.offsetTop===-5,h.doesNotIncludeMarginInBodyOffset=m.offsetTop!==i,m.removeChild(a),o=a=null,f.extend(k,h))}),o.innerHTML="",n.removeChild(o),o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[f.expando]:a[f.expando]&&f.expando,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[f.expando]=n=++f.uuid:n=f.expando),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[f.expando]:f.expando;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)?b=b:b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" "));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}return b}e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g},removeAttr:function(a,b){var c,d,e,g,h=0;if(a.nodeType===1){d=(b||"").split(p),g=d.length;for(;h<g;h++)e=d[h].toLowerCase(),c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1)}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return b;h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/\.(.*)$/,A=/^(?:textarea|input|select)$/i,B=/\./g,C=/ /g,D=/[^\w\s.|`]/g,E=/^([^\.]*)?(?:\.(.+))?$/,F=/\bhover(\.\S+)?/,G=/^key/,H=/^(?:mouse|contextmenu)|click/,I=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,J=function(a){var b=I.exec(a);b&&
    +(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},K=function(a,b){return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||a.id===b[2])&&(!b[3]||b[3].test(a.className))},L=function(a){return f.event.special.hover?a:a.replace(F,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=L(c).split(" ");for(k=0;k<c.length;k++){l=E.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,namespace:n.join(".")},p),g&&(o.quick=J(g),!o.quick&&f.expr.match.POS.test(g)&&(o.isPositional=!0)),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d){var e=f.hasData(a)&&f._data(a),g,h,i,j,k,l,m,n,o,p,q;if(!!e&&!!(m=e.events)){b=L(b||"").split(" ");for(g=0;g<b.length;g++){h=E.exec(b[g])||[],i=h[1],j=h[2];if(!i){j=j?"."+j:"";for(l in m)f.event.remove(a,l+j,c,d);return}n=f.event.special[i]||{},i=(d?n.delegateType:n.bindType)||i,p=m[i]||[],k=p.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;if(c||j||d||n.remove)for(l=0;l<p.length;l++){q=p[l];if(!c||c.guid===q.guid)if(!j||j.test(q.namespace))if(!d||d===q.selector||d==="**"&&q.selector)p.splice(l--,1),q.selector&&p.delegateCount--,n.remove&&n.remove.call(a,q)}else p.length=0;p.length===0&&k!==p.length&&((!n.teardown||n.teardown.call(a,j)===!1)&&f.removeEvent(a,i,e.handle),delete m[i])}f.isEmptyObject(m)&&(o=e.handle,o&&(o.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"",(g||!e)&&c.preventDefault();if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,n=null;for(m=e.parentNode;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length;l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d);if(c.isPropagationStopped())break}c.type=h,c.isDefaultPrevented()||(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=(f.event.special[c.type]||{}).handle,j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click"))for(m=c.target;m!=this;m=m.parentNode||this){o={},q=[];for(k=0;k<e;k++)r=d[k],s=r.selector,t=o[s],r.isPositional?t=(t||(o[s]=f(s))).index(m)>=0:t===b&&(t=o[s]=r.quick?K(m,r.quick):f(m).is(s)),t&&q.push(r);q.length&&j.push({elem:m,matches:q})}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){p=j[k],c.currentTarget=p.elem;for(l=0;l<p.matches.length&&!c.isImmediatePropagationStopped();l++){r=p.matches[l];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=(i||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement wheelDelta".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},focus:{delegateType:"focusin",noBubble:!0},blur:{delegateType:"focusout",noBubble:!0},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?N:M):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=N;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=N;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=N,this.stopPropagation()},isDefaultPrevented:M,isPropagationStopped:M,isImmediatePropagationStopped:M},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]=f.event.special[b]={delegateType:b,bindType:b,handle:function(a){var b=this,c=a.relatedTarget,d=a.handleObj,e=d.selector,g,h;if(!c||d.origType===a.type||c!==b&&!f.contains(b,c))g=a.type,a.type=d.origType,h=d.handler.apply(this,arguments),a.type=g;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(A.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;A.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return A.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=M;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=M);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),G.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),H.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw"Syntax error, unrecognized expression: "+a};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?T.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y="abbr article aside audio canvas datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",Z=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,_=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,ba=/<([\w:]+)/,bb=/<tbody/i,bc=/<|&#?\w+;/,bd=/<(?:script|style)/i,be=/<(?:script|object|embed|option|style)/i,bf=new RegExp("<(?:"+Y.replace(" ","|")+")","i"),bg=/checked\s*(?:[^=]|=\s*.checked.)/i,bh=/\/(java|ecma)script/i,bi=/^\s*<!(?:\[CDATA\[|\-\-)/,bj={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bk=X(c);bj.optgroup=bj.option,bj.tbody=bj.tfoot=bj.colgroup=bj.caption=bj.thead,bj.th=bj.td,f.support.htmlSerialize||(bj._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after"
    +,arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Z,""):null;if(typeof a=="string"&&!bd.test(a)&&(f.support.leadingWhitespace||!$.test(a))&&!bj[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(_,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bg.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bl(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,br)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!be.test(j)&&(f.support.checkClone||!bg.test(j))&&!f.support.unknownElems&&bf.test(j)&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bn(a,d),e=bo(a),g=bo(d);for(h=0;e[h];++h)g[h]&&bn(e[h],g[h])}if(b){bm(a,d);if(c){e=bo(a),g=bo(d);for(h=0;e[h];++h)bm(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bc.test(k))k=b.createTextNode(k);else{k=k.replace(_,"<$1></$2>");var l=(ba.exec(k)||["",""])[1].toLowerCase(),m=bj[l]||bj._default,n=m[0],o=b.createElement("div");b===c?bk.appendChild(o):X(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=bb.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&$.test(k)&&o.insertBefore(b.createTextNode($.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bq(k[i]);else bq(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bh.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bs=/alpha\([^)]*\)/i,bt=/opacity=([^)]*)/,bu=/([A-Z]|^ms)/g,bv=/^-?\d+(?:px)?$/i,bw=/^-?\d/,bx=/^([\-+])=([\-+.\de]+)/,by={position:"absolute",visibility:"hidden",display:"block"},bz=["Left","Right"],bA=["Top","Bottom"],bB,bC,bD;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bB(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bx.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bB)return bB(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bE(a,b,d);f.swap(a,by,function(){e=bE(a,b,d)});return e}},set:function(a,b){if(!bv.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bt.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bs,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bs.test(g)?g.replace(bs,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bB(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bC=function(a,c){var d,e,g;c=c.replace(bu,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bD=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bv.test(f)&&bw.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bB=bC||bD,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bF=/%20/g,bG=/\[\]$/,bH=/\r?\n/g,bI=/#.*$/,bJ=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bK=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bL=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bM=/^(?:GET|HEAD)$/,bN=/^\/\//,bO=/\?/,bP=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bQ=/^(?:select|textarea)/i,bR=/\s+/,bS=/([?&])_=[^&]*/,bT=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bU=f.fn.load,bV={},bW={},bX,bY,bZ=["*/"]+["*"];try{bX=e.href}catch(b$){bX=c.createElement("a"),bX.href="",bX=bX.href}bY=bT.exec(bX.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bU)return bU.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bP,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bQ.test(this.nodeName)||bK.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bH,"\r\n")}}):{name:b.name,value:c.replace(bH,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?cb(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),cb(a,b);return a},ajaxSettings:{url:bX,isLocal:bL.test(bY[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bZ},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:b_(bV),ajaxTransport:b_(bW),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cd(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=ce(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bJ.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bI,"").replace(bN,bY[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bR),d.crossDomain==null&&(r=bT.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bY[1]&&r[2]==bY[2]&&(r[3]||(r[1]==="http:"?80:443))==(bY[3]||(bY[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),ca(bV,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bM.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bO.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bS,"$1_="+x);d.url=y+(y===d.url?(bO.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bZ+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=ca(bW,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)cc(g,a[g],c,e);return d.join("&").replace(bF,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cf=f.now(),cg=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cf++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cg.test(b.url)||e&&cg.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cg,l),b.url===j&&(e&&(k=k.replace(cg,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ch=a.ActiveXObject?function(){for(var a in cj)cj[a](0,1)}:!1,ci=0,cj;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ck()||cl()}:ck,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ch&&delete cj[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++ci,ch&&(cj||(cj={},f(a).unload(ch)),cj[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cm={},cn,co,cp=/^(?:toggle|show|hide)$/,cq=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cr,cs=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],ct;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cw("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cx(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cw("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cw("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cx(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cp.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=cq.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cw("show",1),slideUp:cw("hide",1),slideToggle:cw("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=ct||cu(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cr&&(cr=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=ct||cu(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cr),cr=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now))}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cy=/^t(?:able|d|h)$/i,cz=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cA(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cy.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cz.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cz.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cA(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cA(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.microsoft.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.microsoft.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,31 @@
    +
    +
    +$(document).ready( function() {
    +
    +    // 1) remove all content 
    +    $( 'body > *' ).remove();
    +          
    +    // 2) show banner  
    +    $( "<div>" ).html(
    +       "<p>"
    +       + "Microsoft's Internet Explorer browser has no built-in vector graphics machinery "
    +       + "required for 'loss-free' gradient background themes."
    +       + "</p>"       
    +       + "<p>"
    +       + "Please <span style='background: yellow'>upgrade to a better browser</span> "
    +       + "such as <a href='http://getfirefox.com'>Firefox</a>, <a href='http://www.opera.com/download'>Opera</a>, "
    +       + "<a href='http://google.com/chrome'>Chrome</a>, <a href='http://apple.com/safari/download'>Safari</a> or others "
    +       + "with built-in vector graphics machinery and much more. "
    +       + "(Learn more or post questions or comments "
    +       + "at the <a href='http://slideshow.rubyforge.org'>Slide Show (S9)</a> project site. Thanks!)"
    +       + "</p>"      
    +     )
    +     .css( {   
    +       border: 'red solid thick',
    +       padding: '1em',
    +       fontFamily: 'sans-serif',
    +       fontWeight: 'bold' } )
    +     .prependTo( 'body' );    
    +  }
    +);
    +
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.autoplay.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.autoplay.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,91 @@
    +/***********
    + *
    + *  autoplay addon:
    + *
    + *   - use key-a/p/s to toggle autoplay (in projection mode)
    + */
    +
    +
    +Slideshow.playInit = function()
    +{
    +  this.debug( 'calling playInit()' );
    +
    +  this.playInterval = null;
    +}
    +
    +Slideshow.playStart = function()
    +{
    +  this.debug( 'calling playStart()' );
    +
    +  if( this.settings.mode == 'autoplay' )
    +    this.playToggle();
    +}
    +
    +
    +Slideshow.playKeys = function( event, key )
    +{
    +  this.debug( 'calling playKeys()' );
    +  
    +  switch( key.which ) {
    +    case 65: //a
    +    case 80: //p
    +    case 83: //s
    +      this.playToggle();
    +      break;
    +  }
    +}
    +
    +
    +// ------------------------------------------------
    +
    +
    +Slideshow.playWorker = function()
    +{
    +  this.debug( 'calling playWorker()' );
    +
    +  // suspend autoplay in outline view (just slideshow view)
    +  if( !this.isProjection )
    +    return;
    +
    +  // next slide/step, please
    +  var csteps = this.steps[this.snum-1]; // current slide steps array 
    +  
    +  if( !csteps || this.incpos >= csteps.length ) {
    +    if( this.snum >= this.smax )
    +      this.goTo( 1 );   // reached end of show? start with 1st slide again (for endless cycle)
    +    else
    +      this.go(1);
    +  }
    +  else {
    +    this.subgo(1);
    +  }
    +}
    +
    +
    +Slideshow.playToggle = function()
    +{
    +  this.debug( 'calling playToggle()' );
    +
    +  if( this.playInterval )
    +  {
    +    this.debug( 'stopping autoplay' );
    +    clearInterval( this.playInterval );
    +    this.playInterval = null;
    +  }
    +  else
    +  {
    +    this.debug( 'starting autoplay' );
    +    this.playInterval = setInterval( $.proxy( Slideshow.playWorker, this), 2000 );
    +  }
    +}
    +
    +// ------------------------------------------------
    +
    +Slideshow.playAddEvents = function()
    +{
    +  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.playInit, this ));
    +  $( document ).on( 'slideshow.start',     $.proxy( Slideshow.playStart, this ));
    +  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.playKeys, this ));
    +}
    +
    +Slideshow.playAddEvents();
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.controls.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.controls.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,219 @@
    +/***********
    + *
    + *  control addon:
    + *
    + *   adds toggle, prev slide, next slide links/buttons and jump list
    + *   - use key-c to toggle controls (in projection mode)
    + *
    + *   layout structure:
    + *
    + *  .layout
    + *    > #controls  (holding navigation controls)
    + *       > #navLinks
    + *          > #toggle
    + *          > #navList
    + *            > #jumplist
    + */
    +
    +
    +Slideshow.ctrlInit = function()
    +{
    +  this.debug( 'calling ctrlInit()' );
    +  
    +  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
    +
    +  // todo: make layout into an id (not class?)
    +  //  do we need or allow more than one element?
    +       
    +  // if no div.layout exists, create one
    +  if( $( '.layout' ).length == 0 )
    +    $( 'body' ).append( "<div class='layout'></div>");
    +
    +  $( '.layout' ).append( "<div id='controls'>" );
    + 
    +  var $controls = $( '#controls' )
    +    
    +  $controls.html(  '<div id="navLinks">'
    +     + '<a accesskey="t" id="toggle" href="#">&#216;<\/a>'
    +     + '<a accesskey="z" id="prev" href="#">&laquo;<\/a>'
    +     + '<a accesskey="x" id="next" href="#">&raquo;<\/a>'
    +     + '<div id="navList"><select id="jumplist" /><\/div>'
    +     + '<\/div>' );
    +      
    +  $controls.hover( function() { self.ctrlShow(); }, function() { self.ctrlHide(); });
    +  $('#toggle').click( function() { self.toggle(); } );
    +  $('#prev').click( function() { self.go(-1); } );
    +  $('#next').click( function() { self.go(1); } );
    +       
    +  $('#jumplist').change( function() { self.goTo( parseInt( $( '#jumplist' ).val() )); } );
    +
    +  this.ctrlPopulateJumpList();
    +}
    +
    +
    +Slideshow.ctrlDebugOn = function()
    +{
    +  this.debug( 'calling ctrlDebugOn()' );
    +  $( '#controls' ).addClass( 'debug' );
    +}
    +
    +Slideshow.ctrlDebugOff = function()
    +{
    +  this.debug( 'calling ctrlDebugOff()' );
    +  $( '#controls' ).removeClass( 'debug' );
    +}
    +
    +Slideshow.ctrlKeys = function( event, key )
    +{
    +  this.debug( 'calling ctrlKeys()' );
    +  
    +  switch( key.which ) {
    +    case 67: // c
    +      this.ctrlToggle();
    +      break;
    +  }
    +}
    +
    +Slideshow.ctrlChange = function()
    +{
    +  this.debug( 'calling ctrlChange()' );
    +  this.ctrlUpdateJumpList();
    +}
    +
    +// -----------------------------------------------------
    +
    +Slideshow.ctrlPopulateJumpList = function()
    +{    
    +  var self = this;   // NOTE: jquery binds this in .each to element
    +
    +  var list = $('#jumplist').get(0);
    +    
    +  this.$slides.each( function(i) {
    +    var text = "-";   // untitled slide
    +    
    +    // todo: use titleSelector if user set??
    +    // $(this).find( self.settings.titleSelector ).text();
    +    
    +    var $h1 = $( 'h1', this );
    +    if( $h1.length > 0 )
    +    {
    +      text = $h1.first().text();
    +    }
    +    else   // try h2 
    +    {
    +      var $h2 = $( 'h2', this );
    +      if( $h2.length > 0 )
    +      {
    +        text = $h2.first().text();
    +      }
    +      else  // try h3
    +      {
    +        var $h3 = $( 'h3', this );
    +        if( $h3.length > 0 )
    +        {
    +          text = $h3.first().text();
    +        }
    +      }
    +    }  
    +    
    +    list.options[list.length] = new Option( (i+1)+' : '+ text, (i+1) );
    +  });
    +}
    +
    +Slideshow.ctrlUpdateJumpList = function()
    +{
    +  $('#jumplist').get(0).selectedIndex = (this.snum-1);
    +}
    +
    +Slideshow.ctrlShow = function()
    +{
    +  $( '#navLinks' ).css( 'visibility', 'visible' );
    +}
    +
    +Slideshow.ctrlHide = function()
    +{
    +  $( '#navLinks' ).css( 'visibility', 'hidden' );
    +}
    +
    +Slideshow.ctrlToggle = function()
    +{
    +  // toggle control panel 
    +  var $navLinks = $( '#navLinks' );
    +
    +  if( $navLinks.css( 'visibility' ) != 'visible' )
    +    $navLinks.css( 'visibility', 'visible' );
    +  else
    +    $navLinks.css( 'visibility', 'hidden' );
    +}
    +
    +
    +// ------------------------------------------------
    +
    +Slideshow.ctrlAddEvents = function()
    +{
    +  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.ctrlInit, this ));
    +  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.ctrlDebugOn, this ));
    +  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.ctrlDebugOff, this ));
    +  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.ctrlKeys, this ));
    +  $( document ).on( 'slideshow.change',    $.proxy( Slideshow.ctrlChange, this ));
    +}
    +
    +Slideshow.ctrlAddStyles = function() {
    +  this.debug( 'add builtin controls css via inline style elements' );
    +  
    +  var styleProjection =
    +"<style media='screen,projection'>               \n"+
    +"                                                \n"+
    +" #controls.debug { background: #BBD; }          \n"+
    +"                                                \n"+
    +" #controls { position: fixed;                   \n"+
    +"              left: 60%; bottom: 0;             \n"+
    +"              width: 40%;                       \n"+
    +"              z-index: 100;                     \n"+
    +"              text-align: right;                \n"+
    +"              font-weight: bold;                \n"+
    +"              font-size: 120%;                  \n"+
    +"            }                                   \n"+
    +"                                                \n"+
    +" #controls :focus { outline: 1px dotted white;} \n"+
    +"                                                \n"+  
    +" #controls #navLinks { text-align: right; margin: 0; visibility: hidden; } \n"+
    +
    +"                                                \n"+
    +" #controls #navLinks a { padding: 0; margin: 0 0.5em; cursor: pointer; border: none; }  \n"+
    +"                                                \n"+
    +" #controls #navLinks :link,                     \n"+
    +" #controls #navLinks :visited {text-decoration: none; } \n"+
    +"                                                \n"+
    +" #controls #navList #jumplist { background: white; color: black; } \n"+
    +"</style>";
    +
    +   var styleScreen =
    +"<style media='screen'>                      \n"+
    +"/*********                                      \n"+
    +" * make toggle button visible and reposition to upper right corner  \n"+
    +" *   note: toogle button is nested inside #controls > #navLinks > #toogle \n"+
    +" */                                             \n"+
    +"                                                \n"+
    +" #controls,                                     \n"+
    +" #navLinks,                                     \n"+
    +" #toggle    { display: block;                   \n"+
    +"             visibility: visible;               \n"+
    +"             margin: 0; padding: 0;             \n"+
    +"          }                                     \n"+
    +"                                                \n"+
    +" #toggle { position: fixed;                     \n"+
    +"          top: 0; right: 0;                     \n"+
    +"          padding: 0.5em;                       \n"+
    +"          border-left: 1px solid;               \n"+
    +"          border-bottom: 1px solid;             \n"+
    +"          background: white;                    \n"+
    +"        }                                       \n"+
    +"</style>";
    +
    +    $( 'head' ).append( styleProjection );
    +    $( 'head' ).append( styleScreen );
    +}
    +
    +Slideshow.ctrlAddStyles();
    +Slideshow.ctrlAddEvents();
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.counter.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.counter.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,118 @@
    +/***********
    + *
    + *  counter addon:
    + *
    + *   adds slide counter (e.g. 1/7)
    + *   - use key-n to toggle slide counter (in projection mode)
    + *
    + *   layout structure:
    + *
    + *  .layout
    + *    > #counter  (e.g. 1/7)
    + */
    +
    +
    +Slideshow.counterInit = function()
    +{
    +  this.debug( 'calling counterInit()' );
    +
    +  // if no div.layout exists, create one
    +  if( $( '.layout' ).length == 0 )
    +    $( 'body' ).append( "<div class='layout'></div>");
    +
    +  $( '.layout' ).append( "<div id='counter'>" );
    + 
    +  this.counterUpdate();
    +}
    +
    +Slideshow.counterDebugOn = function()
    +{
    +  this.debug( 'calling counterDebugOn()' );
    +  $( '#counter' ).addClass( 'debug' );
    +}
    +
    +Slideshow.counterDebugOff = function()
    +{
    +  this.debug( 'calling counterDebugOff()' );
    +  $( '#counter' ).removeClass( 'debug' );
    +}
    +
    +Slideshow.counterKeys = function( event, key )
    +{
    +  this.debug( 'calling counterKeys()' );
    +  
    +  switch( key.which ) {
    +      case 78: // n
    +        this.counterToggle();
    +        break;
    +  }
    +} 
    +
    +Slideshow.counterChange = function()
    +{
    +  this.debug( 'calling counterChange()' );
    +  this.counterUpdate();
    +}
    +
    +// ------------------------------------------------
    +
    +Slideshow.counterUpdate = function()
    +{ 
    +  $( '#counter' ).html( this.snum + '/' + this.smax );
    +}
    +
    +
    +Slideshow.counterToggle = function()
    +{
    +  // toggle slide number/counter
    +  
    +  // todo/fix: note jquery sets inline css (e.g. display: block)
    +  //   but css won't get scoped for media (e.g. projection, screen, etc)
    +  //   thus, css changes "spill over" to all media types
    +  
    +  $( '#counter' ).toggle();
    +}
    +
    +// ------------------------------------------------
    +
    +Slideshow.counterAddEvents = function()
    +{
    +  $( document ).on( 'slideshow.init',      $.proxy( Slideshow.counterInit, this ));
    +  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.counterDebugOn, this ));
    +  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.counterDebugOff, this ));
    +  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.counterKeys, this ));
    +  $( document ).on( 'slideshow.change',    $.proxy( Slideshow.counterChange, this ));
    +}
    +
    +Slideshow.counterAddStyles = function() {
    +  this.debug( 'add builtin counter css via inline style elements' );
    +
    +   var styleProjection =
    +"<style media='screen,projection'>                   \n"+
    +"                                                    \n"+
    +" #counter.debug { background: #FFC; }               \n"+
    +"                                                    \n"+
    +" #counter      { position: fixed;                   \n"+
    +"                 left: 45%; bottom: 1em;            \n"+
    +"                width: 10%;                         \n"+
    +"                z-index: 10;                        \n"+
    +"                text-align: center;                 \n"+
    +"                font-size: 80%;                     \n"+
    +"              }                                     \n"+
    +"                                                    \n"+
    +" #counter :link,                                    \n"+
    +" #counter :visited {  text-decoration: none; }      \n"+
    +"                                                    \n"+
    +"</style>";
    +
    +   var styleScreen =
    +"<style media='screen'>                    \n"+
    +" #counter { display: none !important; }   \n"+
    +"</style>";
    +
    +  $( 'head' ).append( styleProjection );
    +  $( 'head' ).append( styleScreen     );
    +}
    +
    +Slideshow.counterAddStyles();
    +Slideshow.counterAddEvents();
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.footer.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.footer.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,82 @@
    +/***********
    + *
    + *  footer/header addon:
    + *
    + *   adds footer/header
    + *   - use key-f to toggle footer/header (in projection mode)
    + *
    + *   layout structure:
    + *
    + *  .layout
    + *    > #header
    + *    > #footer
    + */
    +
    +
    +Slideshow.footerDebugOn = function()
    +{
    +  this.debug( 'calling footerDebugOn()' );
    +
    +  $( '.layout #header,.layout header' ).addClass( 'debug' );
    +  $( '.layout #footer,.layout footer' ).addClass( 'debug' );
    +}
    +
    +Slideshow.footerDebugOff = function()
    +{
    +  this.debug( 'calling footerDebugOff()' );
    +
    +  $( '.layout #header,.layout header' ).removeClass( 'debug' );
    +  $( '.layout #footer,.layout footer' ).removeClass( 'debug' );
    +}
    +
    +Slideshow.footerKeys = function( event, key )
    +{
    +  this.debug( 'calling footerKeys()' );
    +  
    +  switch( key.which ) {
    +      case 70: //f
    +        this.footerToggle();
    +        break;
    +  }
    +} 
    +
    +// ------------------------------------------------
    +
    +Slideshow.footerToggle = function()
    +{
    +  // todo/fix: note jquery sets inline css (e.g. display: block)
    +  //   but css won't get scoped for media (e.g. projection, screen, etc)
    +  //   thus, css changes "spill over" to all media types
    +
    +  // fix: add/remove Class hidden?? instead of toggle()
    +
    +  $( '.layout #footer, .layout footer').toggle(); 
    +}
    +
    +// ------------------------------------------------
    +
    +Slideshow.footerAddEvents = function()
    +{
    +  $( document ).on( 'slideshow.debug.on',  $.proxy( Slideshow.footerDebugOn, this ));
    +  $( document ).on( 'slideshow.debug.off', $.proxy( Slideshow.footerDebugOff, this ));
    +  $( document ).on( 'slideshow.keys',      $.proxy( Slideshow.footerKeys, this ));
    +}
    +
    +Slideshow.footerAddStyles = function() {
    +  this.debug( 'add builtin footer/header css via inline style elements' );
    +  
    +   var styleProjection =
    +"<style media='screen,projection'>                   \n"+
    +" .layout #footer.debug,                             \n"+
    +" .layout  footer.debug  { background: #CCF; }       \n"+
    +"                                                    \n"+
    +" .layout #header.debug,                             \n"+
    +" .layout  header.debug { background: #FCC; }        \n"+
    +"</style>";
    +
    +  $( 'head' ).append( styleProjection );
    +}
    +
    +
    +Slideshow.footerAddStyles();
    +Slideshow.footerAddEvents();
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,535 @@
    +
    +var Slideshow = {
    +
    +  settings: {
    +    debug: true
    +  },
    +
    +  isProjection: false,   // are we in projection (slideshow) mode (in contrast to screen (outline) mode)?     
    +  snum:   1,             // current slide # (non-zero based index e.g. starting with 1)
    +  smax:   1,             // max number of slides 
    +  incpos: 0,             // current step in slide  
    +  steps:   null,
    +
    +  $slides: null,
    +  $stylesProjection: null,
    +  $stylesScreen: null,
    +
    +  slideClasses: [ 'far-past', 'past', 'current', 'next', 'far-next' ]
    +};
    +
    +
    +/************************************
    + * lets you define your own "global" transition function
    + *   passes in a reference to from and to slide wrapped in jQuery wrapper
    + *
    + *  see jquery.slideshow.transition.js for more examples
    + */
    +
    +Slideshow.transition = function( $from, $to ) {
    +  // do nothing here; by default lets use css3 for transition effects
    +}
    +
    +
    +Slideshow.debug = function( msg ) {
    +  if( this.settings.debug && window.console && window.console.log  )
    +       window.console.log( '[debug] ' + msg );
    +}
    +
    +
    +Slideshow.init = function( options ) {
    +
    +  this.settings = $.extend({
    +    mode              : 'slideshow', // slideshow | outline | autoplay
    +    titleSelector     : 'h1',      
    +    slideSelector     : '.slide',   // dummy (not yet working)
    +    stepSelector      : '.step',    // dummy (not yet working)
    +    debug             :  false,
    +    normalize         :  true       // normalize selectors (that is, allow aliases
    +                                    //  e.g. build,action,etc. for step and so on)
    +  }, options || {});
    +
    +  this.isProjection = false; // are we in projection (slideshow) mode (in contrast to screen (outline) mode)?     
    +  this.snum = 1;      // current slide # (non-zero based index e.g. starting with 1)
    +  this.smax = 1;      // max number of slides 
    +  this.incpos = 0;    // current step in slide  
    +  this.steps  = null;
    +
    +  if( this.settings.normalize == true )
    +    this.normalize();     
    +
    +  this.$slides = $( '.slide' );
    +      
    +  this.smax = this.$slides.length;
    +  
    +  this.addSlideIds();
    +  this.steps = this.collectSteps();
    +  this.updateSlides(); // mark slides w/ far-past,past,current,next,far-next
    +
    +  // $stylesProjection  holds all styles (<link rel="stylesheet"> or <style> w/ media type projection)
    +  // $stylesScreen      holds all styles (<link rel="stylesheet"> or <style> w/ media type screen)
    +
    +  // add workaround for chrome
    +  //  use screen,projection instead of projection
    +  //  (without projection inline style tag gets not parsed into a styleSheet accesible via JavaScript)
    +
    +  this.$stylesProjection = $( 'link[media*=projection], style[media*=projection]' ).not('[rel*=less]').not('[type*=less]');
    +  this.$stylesScreen     = $( 'link[media*=screen], style[media*=screen]' ).not('[media*=projection]').not('[rel*=less]').not('[type*=less]') ;
    +   
    +  $( document ).trigger( 'slideshow.init' );  // fire init for addons
    + 
    +  this.addClicker();
    +  
    +       
    +  // opera is the only browser currently supporting css projection mode 
    +  this.notOperaFix();
    +
    +  // store possible slidenumber from hash */
    +  // todo: use regex to extract number
    +  //    might be #slide1 or just #1
    + 
    +  var gotoSlideNum = parseInt( window.location.hash.substring(1) );
    +  this.debug( "gotoSlideNum=" + gotoSlideNum );
    +
    +  if( !isNaN( gotoSlideNum ))
    +  {
    +    this.debug( "restoring slide on (re)load #: " + gotoSlideNum );
    +    this.goTo( gotoSlideNum );
    +  }
    +
    +  if( this.settings.mode == 'outline' ) 
    +    this.toggle();
    +
    +  $( document ).trigger( 'slideshow.start' );  // fire start for addons
    +      
    +  $( document ).on( 'keyup', $.proxy( Slideshow.keys, this ));
    +} // end init() 
    + 
    + 
    +Slideshow.normalize = function() {
    +
    +  // check for .presentation aliases, that is, .deck, .slides
    +  $( '.deck, .slides' ).addClass( 'presentation' );
    +
    +  // add slide class to immediate children
    +  // todo: use autoslide option that lets you turn on/off option?
    +  $( '.presentation' ).children().addClass( 'slide' );
    +
    +  // todo: scope with .slide?? e.g  .slide .incremental
    +  // todo: make removing "old" class an option??
    +
    +  // check for .step aliases, that is, .incremental, .delayed, .action, .build
    +  $( '.incremental, .delayed, .action, .build' ).addClass( 'step' );
    +
    +  // check for .notes aliases, that is, .note, .handout
    +  $( '.note, .handout' ).addClass( 'notes' );
    +
    +}
    +
    +Slideshow.notOperaFix = function() {
    +   // 1) switch media type from projection to screen
    +
    +   var self = this;   // NOTE: jquery binds this in .each to element
    +
    +   this.$stylesProjection.each( function(i) {
    +     var styleProjection = this;
    +     // note: no longer used; workaround for chrome needs screen,projection to make it work (thus, no need to switch to screen)
    +     // styleProjection.media = 'screen';
    +     styleProjection.disabled = true;
    +     
    +     self.debug( "notOperaFix - stylesProjection["+i+"] switching media type from projection to screen" );
    +   } );
    +   
    +   this.isProjection = false;
    +   
    +   // 2) disable screen styles and enable projection styles (thus, switch into projection mode)
    +   this.toggle();
    +   
    +   // now we should be in project mode
    +} // end notOperatFix()
    +
    +
    +Slideshow.toggle = function() {
    +  // todo: use settings.isProjection for state tracking
    +  //  and change disable accordingly (plus assert that all styles are in the state as expected)
    +
    +  // toggle between projection (slide show) mode
    +  //   and screen (outline) mode
    +
    +  var self = this;   // NOTE: jquery binds this in .each to element
    +
    +  this.$stylesProjection.each( function(i) {          
    +     var styleProjection = this;
    +     
    +     styleProjection.disabled = !styleProjection.disabled;
    +       
    +     self.debug( "toggle - stylesProjection["+i+"] disabled? " + styleProjection.disabled );
    +   });
    +  
    +  this.$stylesScreen.each( function(i) {          
    +     var styleScreen = this;
    +
    +     styleScreen.disabled = !styleScreen.disabled;
    +       
    +     self.debug( "toggle - stylesScreen["+i+"] disabled? " + styleScreen.disabled );
    +     
    +     // update isProjection flag 
    +     self.isProjection = styleScreen.disabled;
    +   });
    +  
    +/*
    + * note: code no longer needed; using (adding/removing) css classes hide/show)
    + *
    +
    +  if( this.isProjection )
    +  {
    +    this.$slides.each( function(i) {
    +      if( i == (self.snum-1) )
    +        $(this).show();
    +      else
    +        $(this).hide();
    +    });    
    +  }
    +  else
    +  {
    +    this.$slides.show();
    +  }
    +*/
    +} // end toggle()
    +
    +  
    +Slideshow.updatePermaLink = function()
    +{
    +  // todo: unify hash marks??; use #1 for div ids instead of #slide1? 
    +  window.location.hash = '#'+ this.snum;
    +}
    +
    +Slideshow.goTo = function( target )
    +{
    + if( target > this.smax || target == this.snum )
    +   return;
    +
    + this.go( target - this.snum );
    +}
    + 
    +Slideshow.go = function( dir )
    +{
    +  this.debug( 'go: ' + dir );
    +  
    +  if( dir == 0 ) return;  /* same slide; nothing to do */
    +
    +  var cid = '#slide' + this.snum;   /* current slide (selector) id */
    +  var csteps = this.steps[ this.snum-1 ];  /* current slide steps array */
    +
    +  /* remove all step and stepcurrent classes from current slide */
    +  if( csteps.length > 0) {
    +     $( csteps ).each( function() {
    +       $(this).removeClass( 'step' ).removeClass( 'stepcurrent' );
    +     } );
    +   }
    +
    +  /* set snum to next slide */
    +  this.snum += dir;
    +  if( this.snum > this.smax ) this.snum = this.smax;
    +  if( this.snum < 1 ) this.snum = 1;
    +  
    +  var nid = '#slide' + this.snum;  /* next slide (selector) id */
    +  var nsteps = this.steps[this.snum-1]; /* next slide steps array */
    +  
    +	if( dir < 0 ) /* go backwards? */
    +	{
    +		this.incpos = nsteps.length;
    +		/* mark last step as current step */
    +		if( nsteps.length > 0 ) 
    +			$( nsteps[this.incpos-1] ).addClass( 'stepcurrent' );		
    +	}
    +	else /* go forwards? */
    +	{
    +		this.incpos = 0;
    +	  if( nsteps.length > 0 ) {
    +		  $( nsteps ).each( function() {
    +				$(this).addClass( 'step' ).removeClass( 'stepcurrent' );
    +			} );
    +		}
    +	}	
    +	
    +  if( !(cid == nid) ) {
    +    this.updateSlides();
    +
    +    this.debug( "transition from " + cid + " to " + nid );
    +    this.transition( $( cid ), $( nid ) );
    +
    +    // only fire change event if slide changes
    +    $( document ).trigger( 'slideshow.change', [$( cid ), $( nid )]);
    +  }
    +  
    +  this.updatePermaLink();
    +} // end go()
    +
    +
    +Slideshow.updateSlideClass = function( $slide, className )
    +{
    +  if( className )
    +    $slide.addClass( className );
    +  
    +  for( var i in this.slideClasses )
    +  {
    +    if( className != this.slideClasses[i] )
    +      $slide.removeClass( this.slideClasses[i] );
    +  }
    +}
    +
    +Slideshow.updateSlides = function()
    +{
    +  var self = this;
    +  this.$slides.each( function( i ) {
    +    switch( i ) {
    +      case (self.snum-1)-2:
    +        self.updateSlideClass( $(this), 'far-past' );
    +        break;
    +      case (self.snum-1)-1:
    +        self.updateSlideClass( $(this), 'past' );
    +        break;
    +      case (self.snum-1):
    +        self.updateSlideClass( $(this), 'current' );
    +        break;
    +      case (self.snum-1)+1:
    +        self.updateSlideClass( $(this), 'next' );
    +        break;
    +      case (self.snum-1)+2:
    +        self.updateSlideClass( $(this), 'far-next' );
    +        break;
    +      default:
    +        self.updateSlideClass( $(this) );
    +        break;
    +     }
    +  });
    +}
    +
    +
    +
    +Slideshow.subgo = function( dir )
    +{
    +   this.debug( 'subgo: ' + dir + ', incpos before: ' + this.incpos + ', after: ' + (this.incpos+dir) );
    +	
    +	var csteps = this.steps[this.snum-1]; /* current slide steps array */
    +	
    +	if( dir > 0)
    +  {  /* go forward? */
    +		if( this.incpos > 0 )
    +      $( csteps[this.incpos-1] ).removeClass( 'stepcurrent' );
    +		$( csteps[this.incpos] ).removeClass( 'step').addClass( 'stepcurrent' ); 
    +		this.incpos++;
    +	}
    +  else
    +  { /* go backwards? */
    +		this.incpos--;
    +		$( csteps[this.incpos] ).removeClass( 'stepcurrent' ).addClass( 'step' );
    +		if( this.incpos > 0 )
    +      $( csteps[this.incpos-1] ).addClass( 'stepcurrent' );
    +	}
    +} // end subgo()
    +
    +
    +Slideshow.keys = function( key )
    +{  
    +  this.debug( "enter keys()" );
    +  
    +  if( !key ) {
    +    key = event;
    +    key.which = key.keyCode;
    +  }
    +  if( key.which == 84 ) {
    +    this.toggle();  // toggle between project and screen css media mode 
    +    return;
    +  }
    +  if( this.isProjection ) {
    +    switch( key.which ) {
    +      case 32: // spacebar
    +      case 34: // page down
    +      case 39: // rightkey
    +      case 40: // downkey
    +
    +      var csteps = this.steps[this.snum-1]; /* current slide steps array */
    +        
    +      if( !csteps || this.incpos >= csteps.length ) {
    +					this.go(1);
    +				} else {
    +					this.subgo(1);
    +				}
    +				break;
    +			case 33: // page up
    +			case 37: // leftkey
    +			case 38: // upkey
    +					
    +					if( !this.steps[this.snum-1] || this.incpos <= 0 ) {
    +					  this.go(-1);
    +				  } else {
    +					  this.subgo(-1);
    +					}
    +				  break;
    +      case 36: // home
    +				this.goTo(1);
    +				break;
    +			case 35: // end
    +				this.goTo( this.smax );
    +				break;   
    +      case 68: // d
    +        this.toggleDebug();
    +        break;
    +		}
    +		$( document ).trigger( 'slideshow.keys', key );
    +	}
    +} // end keys()
    +
    +
    +Slideshow.toggleDebug = function()
    +{
    +   this.settings.debug = !this.settings.debug;
    +   this.doDebug();
    +}
    +
    +Slideshow.doDebug = function()
    +{
    +   if( this.settings.debug == true )
    +   {
    +      $( document ).trigger( 'slideshow.debug.on' );
    +   }
    +   else
    +   {
    +      $( document ).trigger( 'slideshow.debug.off' );
    +   }
    +}
    +
    +Slideshow.collectStepsWorker = function(obj)
    +{
    +  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
    +  
    +  var steps = []; 
    +  if( !obj ) 
    +    return steps;
    +	
    +  $(obj).children().each( function() {
    +    if( $(this).hasClass( 'step' ) ) {
    +		
    +      self.debug( 'step found for ' + this.tagName );
    +      $(this).removeClass( 'step' );
    +
    +      /* don't add enclosing list; instead add step class to all list items/children */
    +      if( $(this).is( 'ol,ul' ) ) {
    +	self.debug( '  ol or ul found; adding auto steps' );
    +	$(this).children().addClass( 'step' );
    +      }
    +      else
    +      {
    +	steps.push( this )
    +      }
    +    }
    +    steps = steps.concat( self.collectStepsWorker( this ) );
    +  });
    +	
    +  return steps;
    +} // end collectStepWorkers
    +
    +Slideshow.collectSteps = function()
    +{
    +  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
    +	
    +  var steps = [];
    +
    +  this.$slides.each( function(i) {
    +    self.debug ( 'collectSteps for ' + this.id + ':' );
    +    steps[i] = self.collectStepsWorker( this );
    +  });
    +	
    +  $( steps ).each( function(i) {
    +    self.debug( 'slide ' + (i+1) + ': found ' + this.length + ' steps' );	
    +  });
    +       
    +  return steps;
    +} // end collectSteps()
    +
    +
    +Slideshow.addClicker = function()
    +{
    +  var self = this;   // NOTE: jquery binds this in .each,.click, etc to element
    +
    +  // if you click on heading of slide -> go to next slide (or next step)
    +   
    +  $( this.settings.titleSelector, this.$slides ).click( function( ev ) {
    +    if(ev.which != 1) return;  // only process left clicks (e.g 1; middle and rightclick use 2 and 3)
    +
    +    if( !self.isProjection )  // suspend clicker in outline view (just slideshow view)
    +      return;
    +     
    +    var csteps = self.steps[self.snum-1]; // current slide steps array 
    +    if ( !csteps || self.incpos >= csteps.length ) 
    +      self.go(1);
    +    else 
    +      self.subgo(1);
    +  });
    +   
    +   
    +   $( this.settings.titleSelector, this.$slides ).on('contextmenu', function() { 
    +      if( !self.isProjection )  // suspend clicker in outline view (just slideshow view)
    +        return;
    +
    +      var csteps = self.steps[self.snum-1]; // current slide steps array 
    +      if ( !csteps || self.incpos >= csteps.length ) 
    +         self.go(-1);
    +      else 
    +         self.subgo(-1);
    +
    +      return false;
    +   } );       
    +} // end addClicker()
    +
    +
    +Slideshow.addSlideIds = function() {
    +  this.$slides.each( function(i) {
    +    this.id = 'slide'+(i+1);
    +  });
    +}
    +
    +
    +Slideshow.addStyles = function() {
    +  this.debug( 'add builtin css via inline style elements' );
    +  
    +   var styleProjection =
    +"<style media='screen,projection'>           \n"+
    +" .slide  { display: block;  }               \n"+
    +" .notes  { display: none;   }               \n"+
    +" .layout { display: block;  }               \n"+
    +"</style>";
    +
    +   var styleScreen =
    +"<style media='screen'>                      \n"+
    +"/****                                           \n"+
    +" * hide layout stuff (header, footer, navLinks, navList etc.) \n"+
    +" */                                             \n"+
    +"                                                \n"+
    +" .layout * { display: none; }                   \n"+
    +"</style>";
    +
    +   var stylePrint =
    +"<style media='print'>                              \n"+
    +"                                                   \n"+
    +" .slide { display: block !important; }             \n"+
    +" .layout, .layout * { display: none !important; }  \n"+
    +"                                                   \n"+
    +"/******                                            \n"+
    +" * Turn on print-specific stuff/classes            \n"+
    +" */                                                \n"+
    +"                                                   \n"+
    +" .extra { display: block !important; }             \n"+
    +"</style>";
    +
    +   // note: use prepend (not append) to make sure this
    +   // styles come first (and do not overrule user supplied styles)
    +
    +    $( 'head' ).prepend( styleProjection );
    +    $( 'head' ).prepend( styleScreen );
    +    $( 'head' ).prepend( stylePrint );
    +}
    +
    +Slideshow.addStyles();
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.ready.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.ready.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,15 @@
    +
    +$(document).ready( function() {
    +  Slideshow.init();
    +    
    +  // Example 2: Start Off in Outline Mode
    +  // Slideshow.init( { mode: 'outline' } );
    +    
    +  // Example 3: Use Custom Transition
    +  // Slideshow.transition = transitionScrollUp;
    +  // Slideshow.init();
    +
    +  // Example 4: Start Off in Autoplay Mode with Custom Transition
    +  // Slideshow.transition = transitionScrollUp;
    +  // Slideshow.init( { mode: 'autoplay' } );
    +} );
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/jquery.slideshow.transition.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/jquery.slideshow.transition.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,38 @@
    +
    +function transition( $from, $to ) {
    +  $from.hide();
    +  $to.show();
    +}
    +
    +function transitionSlideUpSlideDown( $from, $to ) {
    +  $from.slideUp( 500, function() { $to.slideDown( 1000 ); } );
    +}
    +
    +function transitionFadeOutFadeIn( $from, $to ) {
    +  $from.fadeOut( 500 );
    +  $to.fadeIn( 500 );
    +}
    +
    +/***********************
    + * sample custom transition using scrollUp effect
    + * inspired by Karl Swedberg's Scroll Up Headline Reader jQuery Tutorial[1]
    + * [1] http://docs.jquery.com/Tutorials:Scroll_Up_Headline_Reader
    + */
    +
    +function transitionScrollUp( $from, $to ) {
    +  var cheight = $from.outerHeight();
    +
    +  // hide scrollbar during animation
    +  $( 'body' ).css( 'overflow-y', 'hidden' );
    +
    +  $to.css( 'top', cheight+'px' );
    +  $to.show();
    +
    +  $from.animate( {top: -cheight}, 'slow' );
    +  $to.animate( {top: 0}, 'slow', function() {
    +    $from.hide().css( 'top', '0px');
    +
    +    // restore possible scrollbar 
    +    $( 'body' ).css( 'overflow-y', 'auto' );
    +  }); 
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/js/less-1.1.4.min.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/js/less-1.1.4.min.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,16 @@
    +//
    +// LESS - Leaner CSS v1.1.4
    +// http://lesscss.org
    +// 
    +// Copyright (c) 2009-2011, Alexis Sellier
    +// Licensed under the Apache 2.0 License.
    +//
    +//
    +// LESS - Leaner CSS v1.1.4
    +// http://lesscss.org
    +// 
    +// Copyright (c) 2009-2011, Alexis Sellier
    +// Licensed under the Apache 2.0 License.
    +//
    +(function(a,b){function u(a,b){var c="less-error-message:"+o(b),e=["<ul>",'<li><label>[-1]</label><pre class="ctx">{0}</pre></li>',"<li><label>[0]</label><pre>{current}</pre></li>",'<li><label>[1]</label><pre class="ctx">{2}</pre></li>',"</ul>"].join("\n"),f=document.createElement("div"),g,h;f.id=c,f.className="less-error-message",h="<h3>"+(a.message||"There is an error in your .less file")+"</h3>"+'<p><a href="'+b+'">'+b+"</a> ",a.extract&&(h+="on line "+a.line+", column "+(a.column+1)+":</p>"+e.replace(/\[(-?\d)\]/g,function(b,c){return parseInt(a.line)+parseInt(c)||""}).replace(/\{(\d)\}/g,function(b,c){return a.extract[parseInt(c)]||""}).replace(/\{current\}/,a.extract[1].slice(0,a.column)+'<span class="error">'+a.extract[1].slice(a.column)+"</span>")),f.innerHTML=h,p([".less-error-message ul, .less-error-message li {","list-style-type: none;","margin-right: 15px;","padding: 4px 0;","margin: 0;","}",".less-error-message label {","font-size: 12px;","margin-right: 15px;","padding: 4px 0;","color: #cc7777;","}",".less-error-message pre {","color: #ee4444;","padding: 4px 0;","margin: 0;","display: inline-block;","}",".less-error-message pre.ctx {","color: #dd4444;","}",".less-error-message h3 {","font-size: 20px;","font-weight: bold;","padding: 15px 0 5px 0;","margin: 0;","}",".less-error-message a {","color: #10a","}",".less-error-message .error {","color: red;","font-weight: bold;","padding-bottom: 2px;","border-bottom: 1px dashed red;","}"].join("\n"),{title:"error-message"}),f.style.cssText=["font-family: Arial, sans-serif","border: 1px solid #e00","background-color: #eee","border-radius: 5px","-webkit-border-radius: 5px","-moz-border-radius: 5px","color: #e00","padding: 15px","margin-bottom: 15px"].join(";"),d.env=="development"&&(g=setInterval(function(){document.body&&(document.getElementById(c)?document.body.replaceChild(f,document.getElementById(c)):document.body.insertBefore(f,document.body.firstChild),clearInterval(g))},10))}function t(a){d.env=="development"&&typeof console!="undefined"&&console.log("less: "+a)}function s(a){return a&&a.parentNode.removeChild(a)}function r(){if(a.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){t("browser doesn't support AJAX.");return null}}function q(a,b,c,e){function i(b,c,d){b.status>=200&&b.status<300?c(b.responseText,b.getResponseHeader("Last-Modified")):typeof d=="function"&&d(b.status,a)}var g=r(),h=f?!1:d.async;typeof g.overrideMimeType=="function"&&g.overrideMimeType("text/css"),g.open("GET",a,h),g.setRequestHeader("Accept",b||"text/x-less, text/css; q=0.9, */*; q=0.5"),g.send(null),f?g.status===0?c(g.responseText):e(g.status,a):h?g.onreadystatechange=function(){g.readyState==4&&i(g,c,e)}:i(g,c,e)}function p(a,b,c){var d,e=b.href?b.href.replace(/\?.*$/,""):"",f="less:"+(b.title||o(e));(d=document.getElementById(f))===null&&(d=document.createElement("style"),d.type="text/css",d.media=b.media||"screen",d.id=f,document.getElementsByTagName("head")[0].appendChild(d));if(d.styleSheet)try{d.styleSheet.cssText=a}catch(h){throw new Error("Couldn't reassign styleSheet.cssText.")}else(function(a){d.childNodes.length>0?d.firstChild.nodeValue!==a.nodeValue&&d.replaceChild(a,d.firstChild):d.appendChild(a)})(document.createTextNode(a));c&&g&&(t("saving "+e+" to cache."),g.setItem(e,a),g.setItem(e+":timestamp",c))}function o(a){return a.replace(/^[a-z]+:\/\/?[^\/]+/,"").replace(/^\//,"").replace(/\?.*$/,"").replace(/\.[^\.\/]+$/,"").replace(/[^\.\w-]+/g,"-").replace(/\./g,":")}function n(b,c,e,f){var h=a.location.href.replace(/[#?].*$/,""),i=b.href.replace(/\?.*$/,""),j=g&&g.getItem(i),k=g&&g.getItem(i+":timestamp"),l={css:j,timestamp:k};/^(https?|file):/.test(i)||(i.charAt(0)=="/"?i=a.location.protocol+"//"+a.location.host+i:i=h.slice(0,h.lastIndexOf("/")+1)+i),q(b.href,b.type,function(a,g){if(!e&&l&&g&&(new Date(g)).valueOf()===(new Date(l.timestamp)).valueOf())p(l.css,b),c(null,b,{local:!0,remaining:f});else try{(new d.Parser({optimization:d.optimization,paths:[i.replace(/[\w\.-]+$/,"")],mime:b.type})).parse(a,function(a,d){if(a)return u(a,i);try{c(d,b,{local:!1,lastModified:g,remaining:f}),s(document.getElementById("less-error-message:"+o(i)))}catch(a){u(a,i)}})}catch(h){u(h,i)}},function(a,b){throw new Error("Couldn't load "+b+" ("+a+")")})}function m(a,b){for(var c=0;c<d.sheets.length;c++)n(d.sheets[c],a,b,d.sheets.length-(c+1))}function l(){var a=document.getElementsByTagName("style");for(var b=0;b<a.length;b++)a[b].type.match(j)&&(new d.Parser).parse(a[b].innerHTML||"",function(c,d){a[b].type="text/css",a[b].innerHTML=d.toCSS()})}function c(b){return a.less[b.split("/")[1]]}Array.isArray||(Array.isArray=function(a){return Object.prototype.toString.call(a)==="[object Array]"||a instanceof Array}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c=this.length>>>0;for(var d=0;d<c;d++)d in this&&a.call(b,this[d],d,this)}),Array.prototype.map||(Array.prototype.map=function(a){var b=this.length>>>0,c=Array(b),d=arguments[1];for(var e=0;e<b;e++)e in this&&(c[e]=a.call(d,this[e],e,this));return c}),Array.prototype.filter||(Array.prototype.filter=function(a){var b=[],c=arguments[1];for(var d=0;d<this.length;d++)a.call(c,this[d])&&b.push(this[d]);return b}),Array.prototype.reduce||(Array.prototype.reduce=function(a){var b=this.length>>>0,c=0;if(b===0&&arguments.length===1)throw new TypeError;if(arguments.length>=2)var d=arguments[1];else do{if(c in this){d=this[c++];break}if(++c>=b)throw new TypeError}while(!0);for(;c<b;c++)c in this&&(d=a.call(null,d,this[c],c,this));return d}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a){var b=this.length,c=arguments[1]||0;if(!b)return-1;if(c>=b)return-1;c<0&&(c+=b);for(;c<b;c++){if(!Object.prototype.hasOwnProperty.call(this,c))continue;if(a===this[c])return c}return-1}),Object.keys||(Object.keys=function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}),String.prototype.trim||(String.prototype.trim=function(){return String(this).replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var d,e;typeof a=="undefined"?(d=exports,e=c("less/tree")):(typeof a.less=="undefined"&&(a.less={}),d=a.less,e=a.less.tree={}),d.Parser=function(a){function t(a){return typeof a=="string"?b.charAt(c)===a:a.test(j[f])?!0:!1}function s(a){var d,e,g,h,i,m,n,o;if(a instanceof Function)return a.call(l.parsers);if(typeof a=="string")d=b.charAt(c)===a?a:null,g=1,r();else{r();if(d=a.exec(j[f]))g=d[0].length;else return null}if(d){o=c+=g,m=c+j[f].length-g;while(c<m){h=b.charCodeAt(c);if(h!==32&&h!==10&&h!==9)break;c++}j[f]=j[f].slice(g+(c-o)),k=c,j[f].length===0&&f<j.length-1&&f++;return typeof d=="string"?d:d.length===1?d[0]:d}}function r(){c>k&&(j[f]=j[f].slice(c-k),k=c)}function q(){j[f]=g,c=h,k=c}function p(){g=j[f],h=c,k=c}var b,c,f,g,h,i,j,k,l,m=this,n=function(){},o=this.imports={paths:a&&a.paths||[],queue:[],files:{},mime:a&&a.mime,push:function(b,c){var e=this;this.queue.push(b),d.Parser.importer(b,this.paths,function(a){e.queue.splice(e.queue.indexOf(b),1),e.files[b]=a,c(a),e.queue.length===0&&n()},a)}};this.env=a=a||{},this.optimization="optimization"in this.env?this.env.optimization:1,this.env.filename=this.env.filename||null;return l={imports:o,parse:function(d,g){var h,l,m,o,p,q,r=[],t,u=null;c=f=k=i=0,j=[],b=d.replace(/\r\n/g,"\n"),j=function(c){var d=0,e=/[^"'`\{\}\/\(\)]+/g,f=/\/\*(?:[^*]|\*+[^\/*])*\*+\/|\/\/.*/g,g=0,h,i=c[0],j,k;for(var l=0,m,n;l<b.length;l++){e.lastIndex=l,(h=e.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0])),m=b.charAt(l),f.lastIndex=l,!k&&!j&&m==="/"&&(n=b.charAt(l+1),(n==="/"||n==="*")&&(h=f.exec(b))&&h.index===l&&(l+=h[0].length,i.push(h[0]),m=b.charAt(l)));if(m==="{"&&!k&&!j)g++,i.push(m);else if(m==="}"&&!k&&!j)g--,i.push(m),c[++d]=i=[];else if(m==="("&&!k&&!j)i.push(m),j=!0;else if(m===")"&&!k&&j)i.push(m),j=!1;else{if(m==='"'||m==="'"||m==="`")k?k=k===m?!1:k:k=m;i.push(m)}}if(g>0)throw{type:"Syntax",message:"Missing closing `}`",filename:a.filename};return c.map(function(a){return a.join("")})}([[]]),h=new e.Ruleset([],s(this.parsers.primary)),h.root=!0,h.toCSS=function(c){var d,f,g;return function(g,h){function n(a){return a?(b.slice(0,a).match(/\n/g)||"").length:null}var i=[];g=g||{},typeof h=="object"&&!Array.isArray(h)&&(h=Object.keys(h).map(function(a){var b=h[a];b instanceof e.Value||(b instanceof e.Expression||(b=new e.Expression([b])),b=new e.Value([b]));return new e.Rule("@"+a,b,!1,0)}),i=[new e.Ruleset(null,h)]);try{var j=c.call(this,{frames:i}).toCSS([],{compress:g.compress||!1})}catch(k){f=b.split("\n"),d=n(k.index);for(var l=k.index,m=-1;l>=0&&b.charAt(l)!=="\n";l--)m++;throw{type:k.type,message:k.message,filename:a.filename,index:k.index,line:typeof d=="number"?d+1:null,callLine:k.call&&n(k.call)+1,callExtract:f[n(k.call)],stack:k.stack,column:m,extract:[f[d-1],f[d],f[d+1]]}}return g.compress?j.replace(/(\s)+/g,"$1"):j}}(h.eval);if(c<b.length-1){c=i,q=b.split("\n"),p=(b.slice(0,c).match(/\n/g)||"").length+1;for(var v=c,w=-1;v>=0&&b.charAt(v)!=="\n";v--)w++;u={name:"ParseError",message:"Syntax Error on line "+p,index:c,filename:a.filename,line:p,column:w,extract:[q[p-2],q[p-1],q[p]]}}this.imports.queue.length>0?n=function(){g(u,h)}:g(u,h)},parsers:{primary:function(){var a,b=[];while((a=s(this.mixin.definition)||s(this.rule)||s(this.ruleset)||s(this.mixin.call)||s(this.comment)||s(this.directive))||s(/^[\s\n]+/))a&&b.push(a);return b},comment:function(){var a;if(b.charAt(c)==="/"){if(b.charAt(c+1)==="/")return new e.Comment(s(/^\/\/.*/),!0);if(a=s(/^\/\*(?:[^*]|\*+[^\/*])*\*+\/\n?/))return new e.Comment(a)}},entities:{quoted:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==='"'||b.charAt(d)==="'"){f&&s("~");if(a=s(/^"((?:[^"\\\r\n]|\\.)*)"|'((?:[^'\\\r\n]|\\.)*)'/))return new e.Quoted(a[0],a[1]||a[2],f)}},keyword:function(){var a;if(a=s(/^[A-Za-z-]+/))return new e.Keyword(a)},call:function(){var a,b,d=c;if(!!(a=/^([\w-]+|%)\(/.exec(j[f]))){a=a[1].toLowerCase();if(a==="url")return null;c+=a.length;if(a==="alpha")return s(this.alpha);s("("),b=s(this.entities.arguments);if(!s(")"))return;if(a)return new e.Call(a,b,d)}},arguments:function(){var a=[],b;while(b=s(this.expression)){a.push(b);if(!s(","))break}return a},literal:function(){return s(this.entities.dimension)||s(this.entities.color)||s(this.entities.quoted)},url:function(){var a;if(b.charAt(c)==="u"&&!!s(/^url\(/)){a=s(this.entities.quoted)||s(this.entities.variable)||s(this.entities.dataURI)||s(/^[-\w%@$\/.&=:;#+?~]+/)||"";if(!s(")"))throw new Error("missing closing ) for url()");return new e.URL(a.value||a.data||a instanceof e.Variable?a:new e.Anonymous(a),o.paths)}},dataURI:function(){var a;if(s(/^data:/)){a={},a.mime=s(/^[^\/]+\/[^,;)]+/)||"",a.charset=s(/^;\s*charset=[^,;)]+/)||"",a.base64=s(/^;\s*base64/)||"",a.data=s(/^,\s*[^)]+/);if(a.data)return a}},variable:function(){var a,d=c;if(b.charAt(c)==="@"&&(a=s(/^@@?[\w-]+/)))return new e.Variable(a,d)},color:function(){var a;if(b.charAt(c)==="#"&&(a=s(/^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})/)))return new e.Color(a[1])},dimension:function(){var a,d=b.charCodeAt(c);if(!(d>57||d<45||d===47))if(a=s(/^(-?\d*\.?\d+)(px|%|em|pc|ex|in|deg|s|ms|pt|cm|mm|rad|grad|turn)?/))return new e.Dimension(a[1],a[2])},javascript:function(){var a,d=c,f;b.charAt(d)==="~"&&(d++,f=!0);if(b.charAt(d)==="`"){f&&s("~");if(a=s(/^`([^`]*)`/))return new e.JavaScript(a[1],c,f)}}},variable:function(){var a;if(b.charAt(c)==="@"&&(a=s(/^(@[\w-]+)\s*:/)))return a[1]},shorthand:function(){var a,b;if(!!t(/^[@\w.%-]+\/[@\w.-]+/)&&(a=s(this.entity))&&s("/")&&(b=s(this.entity)))return new e.Shorthand(a,b)},mixin:{call:function(){var a=[],d,f,g,h=c,i=b.charAt(c);if(i==="."||i==="#"){while(d=s(/^[#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/))a.push(new e.Element(f,d)),f=s(">");s("(")&&(g=s(this.entities.arguments))&&s(")");if(a.length>0&&(s(";")||t("}")))return new e.mixin.Call(a,g,h)}},definition:function(){var a,d=[],f,g,h,i;if(!(b.charAt(c)!=="."&&b.charAt(c)!=="#"||t(/^[^{]*(;|})/)))if(f=s(/^([#.](?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+)\s*\(/)){a=f[1];while(h=s(this.entities.variable)||s(this.entities.literal)||s(this.entities.keyword)){if(h instanceof e.Variable)if(s(":"))if(i=s(this.expression))d.push({name:h.name,value:i});else throw new Error("Expected value");else d.push({name:h.name});else d.push({value:h});if(!s(","))break}if(!s(")"))throw new Error("Expected )");g=s(this.block);if(g)return new e.mixin.Definition(a,d,g)}}},entity:function(){return s(this.entities.literal)||s(this.entities.variable)||s(this.entities.url)||s(this.entities.call)||s(this.entities.keyword)||s(this.entities.javascript)||s(this.comment)},end:function(){return s(";")||t("}")},alpha:function(){var a;if(!!s(/^\(opacity=/i))if(a=s(/^\d+/)||s(this.entities.variable)){if(!s(")"))throw new Error("missing closing ) for alpha()");return new e.Alpha(a)}},element:function(){var a,b,c;c=s(this.combinator),a=s(/^(?:[.#]?|:*)(?:[\w-]|\\(?:[a-fA-F0-9]{1,6} ?|[^a-fA-F0-9]))+/)||s("*")||s(this.attribute)||s(/^\([^)@]+\)/)||s(/^(?:\d*\.)?\d+%/);if(a)return new e.Element(c,a);if(c.value&&c.value[0]==="&")return new e.Element(c,null)},combinator:function(){var a,d=b.charAt(c);if(d===">"||d==="+"||d==="~"){c++;while(b.charAt(c)===" ")c++;return new e.Combinator(d)}if(d==="&"){a="&",c++,b.charAt(c)===" "&&(a="& ");while(b.charAt(c)===" ")c++;return new e.Combinator(a)}if(d===":"&&b.charAt(c+1)===":"){c+=2;while(b.charAt(c)===" ")c++;return new e.Combinator("::")}return b.charAt(c-1)===" "?new e.Combinator(" "):new e.Combinator(null)},selector:function(){var a,d,f=[],g,h;while(d=s(this.element)){g=b.charAt(c),f.push(d);if(g==="{"||g==="}"||g===";"||g===",")break}if(f.length>0)return new e.Selector(f)},tag:function(){return s(/^[a-zA-Z][a-zA-Z-]*[0-9]?/)||s("*")},attribute:function(){var a="",b,c,d;if(!!s("[")){if(b=s(/^[a-zA-Z-]+/)||s(this.entities.quoted))(d=s(/^[|~*$^]?=/))&&(c=s(this.entities.quoted)||s(/^[\w-]+/))?a=[b,d,c.toCSS?c.toCSS():c].join(""):a=b;if(!s("]"))return;if(a)return"["+a+"]"}},block:function(){var a;if(s("{")&&(a=s(this.primary))&&s("}"))return a},ruleset:function(){var a=[],b,d,g;p();if(g=/^([.#:% \w-]+)[\s\n]*\{/.exec(j[f]))c+=g[0].length-1,a=[new e.Selector([new e.Element(null,g[1])])];else while(b=s(this.selector)){a.push(b),s(this.comment);if(!s(","))break;s(this.comment)}if(a.length>0&&(d=s(this.block)))return new e.Ruleset(a,d);i=c,q()},rule:function(){var a,d,g=b.charAt(c),k,l;p();if(g!=="."&&g!=="#"&&g!=="&")if(a=s(this.variable)||s(this.property)){a.charAt(0)!="@"&&(l=/^([^@+\/'"*`(;{}-]*);/.exec(j[f]))?(c+=l[0].length-1,d=new e.Anonymous(l[1])):a==="font"?d=s(this.font):d=s(this.value),k=s(this.important);if(d&&s(this.end))return new e.Rule(a,d,k,h);i=c,q()}},"import":function(){var a;if(s(/^@import\s+/)&&(a=s(this.entities.quoted)||s(this.entities.url))&&s(";"))return new e.Import(a,o)},directive:function(){var a,d,f,g;if(b.charAt(c)==="@"){if(d=s(this["import"]))return d;if(a=s(/^@media|@page/)||s(/^@(?:-webkit-)?keyframes/)){g=(s(/^[^{]+/)||"").trim();if(f=s(this.block))return new e.Directive(a+" "+g,f)}else if(a=s(/^@[-a-z]+/))if(a==="@font-face"){if(f=s(this.block))return new e.Directive(a,f)}else if((d=s(this.entity))&&s(";"))return new e.Directive(a,d)}},font:function(){var a=[],b=[],c,d,f,g;while(g=s(this.shorthand)||s(this.entity))b.push(g);a.push(new e.Expression(b));if(s(","))while(g=s(this.expression)){a.push(g);if(!s(","))break}return new e.Value(a)},value:function(){var a,b=[],c;while(a=s(this.expression)){b.push(a);if(!s(","))break}if(b.length>0)return new e.Value(b)},important:function(){if(b.charAt(c)==="!")return s(/^! *important/)},sub:function(){var a;if(s("(")&&(a=s(this.expression))&&s(")"))return a},multiplication:function(){var a,b,c,d;if(a=s(this.operand)){while((c=s("/")||s("*"))&&(b=s(this.operand)))d=new e.Operation(c,[d||a,b]);return d||a}},addition:function(){var a,d,f,g;if(a=s(this.multiplication)){while((f=s(/^[-+]\s+/)||b.charAt(c-1)!=" "&&(s("+")||s("-")))&&(d=s(this.multiplication)))g=new e.Operation(f,[g||a,d]);return g||a}},operand:function(){var a,d=b.charAt(c+1);b.charAt(c)==="-"&&(d==="@"||d==="(")&&(a=s("-"));var f=s(this.sub)||s(this.entities.dimension)||s(this.entities.color)||s(this.entities.variable)||s(this.entities.call);return a?new e.Operation("*",[new e.Dimension(-1),f]):f},expression:function(){var a,b,c=[],d;while(a=s(this.addition)||s(this.entity))c.push(a);if(c.length>0)return new e.Expression(c)},property:function(){var a;if(a=s(/^(\*?-?[-a-z_0-9]+)\s*:/))return a[1]}}}},typeof a!="undefined"&&(d.Parser.importer=function(a,b,c,d){a.charAt(0)!=="/"&&b.length>0&&(a=b[0]+a),n({href:a,title:a,type:d.mime},c,!0)}),function(a){function d(a){return Math.min(1,Math.max(0,a))}function c(b){if(b instanceof a.Dimension)return parseFloat(b.unit=="%"?b.value/100:b.value);if(typeof b=="number")return b;throw{error:"RuntimeError",message:"color functions take numbers as parameters"}}function b(b){return a.functions.hsla(b.h,b.s,b.l,b.a)}a.functions={rgb:function(a,b,c){return this.rgba(a,b,c,1)},rgba:function(b,d,e,f){var g=[b,d,e].map(function(a){return c(a)}),f=c(f);return new a.Color(g,f)},hsl:function(a,b,c){return this.hsla(a,b,c,1)},hsla:function(a,b,d,e){function h(a){a=a<0?a+1:a>1?a-1:a;return a*6<1?g+(f-g)*a*6:a*2<1?f:a*3<2?g+(f-g)*(2/3-a)*6:g}a=c(a)%360/360,b=c(b),d=c(d),e=c(e);var f=d<=.5?d*(b+1):d+b-d*b,g=d*2-f;return this.rgba(h(a+1/3)*255,h(a)*255,h(a-1/3)*255,e)},hue:function(b){return new a.Dimension(Math.round(b.toHSL().h))},saturation:function(b){return new a.Dimension(Math.round(b.toHSL().s*100),"%")},lightness:function(b){return new a.Dimension(Math.round(b.toHSL().l*100),"%")},alpha:function(b){return new a.Dimension(b.toHSL().a)},saturate:function(a,c){var e=a.toHSL();e.s+=c.value/100,e.s=d(e.s);return b(e)},desaturate:function(a,c){var e=a.toHSL();e.s-=c.value/100,e.s=d(e.s);return b(e)},lighten:function(a,c){var e=a.toHSL();e.l+=c.value/100,e.l=d(e.l);return b(e)},darken:function(a,c){var e=a.toHSL();e.l-=c.value/100,e.l=d(e.l);return b(e)},fadein:function(a,c){var e=a.toHSL();e.a+=c.value/100,e.a=d(e.a);return b(e)},fadeout:function(a,c){var e=a.toHSL();e.a-=c.value/100,e.a=d(e.a);return b(e)},spin:function(a,c){var d=a.toHSL(),e=(d.h+c.value)%360;d.h=e<0?360+e:e;return b(d)},mix:function(b,c,d){var e=d.value/100,f=e*2-1,g=b.toHSL().a-c.toHSL().a,h=((f*g==-1?f:(f+g)/(1+f*g))+1)/2,i=1-h,j=[b.rgb[0]*h+c.rgb[0]*i,b.rgb[1]*h+c.rgb[1]*i,b.rgb[2]*h+c.rgb[2]*i],k=b.alpha*e+c.alpha*(1-e);return new a.Color(j,k)},greyscale:function(b){return this.desaturate(b,new a.Dimension(100))},e:function(b){return new a.Anonymous(b instanceof a.JavaScript?b.evaluated:b)},escape:function(b){return new a.Anonymous(encodeURI(b.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},"%":function(b){var c=Array.prototype.slice.call(arguments,1),d=b.value;for(var e=0;e<c.length;e++)d=d.replace(/%[sda]/i,function(a){var b=a.match(/s/i)?c[e].value:c[e].toCSS();return a.match(/[A-Z]$/)?encodeURIComponent(b):b});d=d.replace(/%%/g,"%");return new a.Quoted('"'+d+'"',d)},round:function(b){if(b instanceof a.Dimension)return new a.Dimension(Math.round(c(b)),b.unit);if(typeof b=="number")return Math.round(b);throw{error:"RuntimeError",message:"math functions take numbers as parameters"}}}}(c("less/tree")),function(a){a.Alpha=function(a){this.value=a},a.Alpha.prototype={toCSS:function(){return"alpha(opacity="+(this.value.toCSS?this.value.toCSS():this.value)+")"},eval:function(a){this.value.eval&&(this.value=this.value.eval(a));return this}}}(c("less/tree")),function(a){a.Anonymous=function(a){this.value=a.value||a},a.Anonymous.prototype={toCSS:function(){return this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Call=function(a,b,c){this.name=a,this.args=b,this.index=c},a.Call.prototype={eval:function(b){var c=this.args.map(function(a){return a.eval(b)});if(!(this.name in a.functions))return new a.Anonymous(this.name+"("+c.map(function(a){return a.toCSS()}).join(", ")+")");try{return a.functions[this.name].apply(a.functions,c)}catch(d){throw{message:"error evaluating function `"+this.name+"`",index:this.index}}},toCSS:function(a){return this.eval(a).toCSS()}}}(c("less/tree")),function(a){a.Color=function(a,b){Array.isArray(a)?this.rgb=a:a.length==6?this.rgb=a.match(/.{2}/g).map(function(a){return parseInt(a,16)}):a.length==8?(this.alpha=parseInt(a.substring(0,2),16)/255,this.rgb=a.substr(2).match(/.{2}/g).map(function(a){return parseInt(a,16)})):this.rgb=a.split("").map(function(a){return parseInt(a+a,16)}),this.alpha=typeof b=="number"?b:1},a.Color.prototype={eval:function(){return this},toCSS:function(){return this.alpha<1?"rgba("+this.rgb.map(function(a){return Math.round(a)}).concat(this.alpha).join(", ")+")":"#"+this.rgb.map(function(a){a=Math.round(a),a=(a>255?255:a<0?0:a).toString(16);return a.length===1?"0"+a:a}).join("")},operate:function(b,c){var d=[];c instanceof a.Color||(c=c.toColor());for(var e=0;e<3;e++)d[e]=a.operate(b,this.rgb[e],c.rgb[e]);return new a.Color(d,this.alpha+c.alpha)},toHSL:function(){var a=this.rgb[0]/255,b=this.rgb[1]/255,c=this.rgb[2]/255,d=this.alpha,e=Math.max(a,b,c),f=Math.min(a,b,c),g,h,i=(e+f)/2,j=e-f;if(e===f)g=h=0;else{h=i>.5?j/(2-e-f):j/(e+f);switch(e){case a:g=(b-c)/j+(b<c?6:0);break;case b:g=(c-a)/j+2;break;case c:g=(a-b)/j+4}g/=6}return{h:g*360,s:h,l:i,a:d}}}}(c("less/tree")),function(a){a.Comment=function(a,b){this.value=a,this.silent=!!b},a.Comment.prototype={toCSS:function(a){return a.compress?"":this.value},eval:function(){return this}}}(c("less/tree")),function(a){a.Dimension=function(a,b){this.value=parseFloat(a),this.unit=b||null},a.Dimension.prototype={eval:function(){return this},toColor:function(){return new a.Color([this.value,this.value,this.value])},toCSS:function(){var a=this.value+this.unit;return a},operate:function(b,c){return new a.Dimension(a.operate(b,this.value,c.value),this.unit||c.unit)}}}(c("less/tree")),function(a){a.Directive=function(b,c){this.name=b,Array.isArray(c)?this.ruleset=new a.Ruleset([],c):this.value=c},a.Directive.prototype={toCSS:function(a,b){if(this.ruleset){this.ruleset.root=!0;return this.name+(b.compress?"{":" {\n  ")+this.ruleset.toCSS(a,b).trim().replace(/\n/g,"\n  ")+(b.compress?"}":"\n}\n")}return this.name+" "+this.value.toCSS()+";\n"},eval:function(a){a.frames.unshift(this),this.ruleset=this.ruleset&&this.ruleset.eval(a),a.frames.shift();return this},variable:function(b){return a.Ruleset.prototype.variable.call(this.ruleset,b)},find:function(){return a.Ruleset.prototype.find.apply(this.ruleset,arguments)},rulesets:function(){return a.Ruleset.prototype.rulesets.apply(this.ruleset)}}}(c("less/tree")),function(a){a.Element=function(b,c){this.combinator=b instanceof a.Combinator?b:new a.Combinator(b),this.value=c?c.trim():""},a.Element.prototype.toCSS=function(a){return this.combinator.toCSS(a||{})+this.value},a.Combinator=function(a){a===" "?this.value=" ":a==="& "?this.value="& ":this.value=a?a.trim():""},a.Combinator.prototype.toCSS=function(a){return{"":""," ":" ","&":"","& ":" ",":":" :","::":"::","+":a.compress?"+":" + ","~":a.compress?"~":" ~ ",">":a.compress?">":" > "}[this.value]}}(c("less/tree")),function(a){a.Expression=function(a){this.value=a},a.Expression.prototype={eval:function(b){return this.value.length>1?new a.Expression(this.value.map(function(a){return a.eval(b)})):this.value.length===1?this.value[0].eval(b):this},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(" ")}}}(c("less/tree")),function(a){a.Import=function(b,c){var d=this;this._path=b,b instanceof a.Quoted?this.path=/\.(le?|c)ss$/.test(b.value)?b.value:b.value+".less":this.path=b.value.value||b.value,this.css=/css$/.test(this.path),this.css||c.push(this.path,function(a){if(!a)throw new Error("Error parsing "+d.path);d.root=a})},a.Import.prototype={toCSS:function(){return this.css?"@import "+this._path.toCSS()+";\n":""},eval:function(b){var c;if(this.css)return this;c=new a.Ruleset(null,this.root.rules.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));return c.rules}}}(c("less/tree")),function(a){a.JavaScript=function(a,b,c){this.escaped=c,this.expression=a,this.index=b},a.JavaScript.prototype={eval:function(b){var c,d=this,e={},f=this.expression.replace(/@\{([\w-]+)\}/g,function(c,e){return a.jsify((new a.Variable("@"+e,d.index)).eval(b))});try{f=new Function("return ("+f+")")}catch(g){throw{message:"JavaScript evaluation error: `"+f+"`",index:this.index}}for(var h in b.frames[0].variables())e[h.slice(1)]={value:b.frames[0].variables()[h].value,toJS:function(){return this.value.eval(b).toCSS()}};try{c=f.call(e)}catch(g){throw{message:"JavaScript evaluation error: '"+g.name+": "+g.message+"'",index:this.index}}return typeof c=="string"?new a.Quoted('"'+c+'"',c,this.escaped,this.index):Array.isArray(c)?new a.Anonymous(c.join(", ")):new a.Anonymous(c)}}}(c("less/tree")),function(a){a.Keyword=function(a){this.value=a},a.Keyword.prototype={eval:function(){return this},toCSS:function(){return this.value}}}(c("less/tree")),function(a){a.mixin={},a.mixin.Call=function(b,c,d){this.selector=new a.Selector(b),this.arguments=c,this.index=d},a.mixin.Call.prototype={eval:function(a){var b,c,d=[],e=!1;for(var f=0;f<a.frames.length;f++)if((b=a.frames[f].find(this.selector)).length>0){c=this.arguments&&this.arguments.map(function(b){return b.eval(a)});for(var g=0;g<b.length;g++)if(b[g].match(c,a))try{Array.prototype.push.apply(d,b[g].eval(a,this.arguments).rules),e=!0}catch(h){throw{message:h.message,index:h.index,stack:h.stack,call:this.index}}if(e)return d;throw{message:"No matching definition was found for `"+this.selector.toCSS().trim()+"("+this.arguments.map(function(a){return a.toCSS()}).join(", ")+")`",index:this.index}}throw{message:this.selector.toCSS().trim()+" is undefined",index:this.index}}},a.mixin.Definition=function(b,c,d){this.name=b,this.selectors=[new a.Selector([new a.Element(null,b)])],this.params=c,this.arity=c.length,this.rules=d,this._lookups={},this.required=c.reduce(function(a,b){return!b.name||b.name&&!b.value?a+1:a},0),this.parent=a.Ruleset.prototype,this.frames=[]},a.mixin.Definition.prototype={toCSS:function(){return""},variable:function(a){return this.parent.variable.call(this,a)},variables:function(){return this.parent.variables.call(this)},find:function(){return this.parent.find.apply(this,arguments)},rulesets:function(){return this.parent.rulesets.apply(this)},eval:function(b,c){var d=new a.Ruleset(null,[]),e,f=[];for(var g=0,h;g<this.params.length;g++)if(this.params[g].name)if(h=c&&c[g]||this.params[g].value)d.rules.unshift(new a.Rule(this.params[g].name,h.eval(b)));else throw{message:"wrong number of arguments for "+this.name+" ("+c.length+" for "+this.arity+")"};for(var g=0;g<Math.max(this.params.length,c&&c.length);g++)f.push(c[g]||this.params[g].value);d.rules.unshift(new a.Rule("@arguments",(new a.Expression(f)).eval(b)));return(new a.Ruleset(null,this.rules.slice(0))).eval({frames:[this,d].concat(this.frames,b.frames)})},match:function(a,b){var c=a&&a.length||0,d;if(c<this.required)return!1;if(this.required>0&&c>this.params.length)return!1;d=Math.min(c,this.arity);for(var e=0;e<d;e++)if(!this.params[e].name&&a[e].eval(b).toCSS()!=this.params[e].value.eval(b).toCSS())return!1;return!0}}}(c("less/tree")),function(a){a.Operation=function(a,b){this.op=a.trim(),this.operands=b},a.Operation.prototype.eval=function(b){var c=this.operands[0].eval(b),d=this.operands[1].eval(b),e;if(c instanceof a.Dimension&&d instanceof a.Color)if(this.op==="*"||this.op==="+")e=d,d=c,c=e;else throw{name:"OperationError",message:"Can't substract or divide a color from a number"};return c.operate(this.op,d)},a.operate=function(a,b,c){switch(a){case"+":return b+c;case"-":return b-c;case"*":return b*c;case"/":return b/c}}}(c("less/tree")),function(a){a.Quoted=function(a,b,c,d){this.escaped=c,this.value=b||"",this.quote=a.charAt(0),this.index=d},a.Quoted.prototype={toCSS:function(){return this.escaped?this.value:this.quote+this.value+this.quote},eval:function(b){var c=this,d=this.value.replace(/`([^`]+)`/g,function(d,e){return(new a.JavaScript(e,c.index,!0)).eval(b).value}).replace(/@\{([\w-]+)\}/g,function(d,e){var f=(new a.Variable("@"+e,c.index)).eval(b);return f.value||f.toCSS()});return new a.Quoted(this.quote+d+this.quote,d,this.escaped,this.index)}}}(c("less/tree")),function(a){a.Rule=function(b,c,d,e){this.name=b,this.value=c instanceof a.Value?c:new a.Value([c]),this.important=d?" "+d.trim():"",this.index=e,b.charAt(0)==="@"?this.variable=!0:this.variable=!1},a.Rule.prototype.toCSS=function(a){return this.variable?"":this.name+(a.compress?":":": ")+this.value.toCSS(a)+this.important+";"},a.Rule.prototype.eval=function(b){return new a.Rule(this.name,this.value.eval(b),this.important,this.index)},a.Shorthand=function(a,b){this.a=a,this.b=b},a.Shorthand.prototype={toCSS:function(a){return this.a.toCSS(a)+"/"+this.b.toCSS(a)},eval:function(){return this}}}(c("less/tree")),function(a){a.Ruleset=function(a,b){this.selectors=a,this.rules=b,this._lookups={}},a.Ruleset.prototype={eval:function(b){var c=new a.Ruleset(this.selectors,this.rules.slice(0));c.root=this.root,b.frames.unshift(c);if(c.root)for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.Import&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Definition&&(c.rules[d].frames=b.frames.slice(0));for(var d=0;d<c.rules.length;d++)c.rules[d]instanceof a.mixin.Call&&Array.prototype.splice.apply(c.rules,[d,1].concat(c.rules[d].eval(b)));for(var d=0,e;d<c.rules.length;d++)e=c.rules[d],e instanceof a.mixin.Definition||(c.rules[d]=e.eval?e.eval(b):e);b.frames.shift();return c},match:function(a){return!a||a.length===0},variables:function(){return this._variables?this._variables:this._variables=this.rules.reduce(function(b,c){c instanceof a.Rule&&c.variable===!0&&(b[c.name]=c);return b},{})},variable:function(a){return this.variables()[a]},rulesets:function(){return this._rulesets?this._rulesets:this._rulesets=this.rules.filter(function(b){return b instanceof a.Ruleset||b instanceof a.mixin.Definition})},find:function(b,c){c=c||this;var d=[],e,f,g=b.toCSS();if(g in this._lookups)return this._lookups[g];this.rulesets().forEach(function(e){if(e!==c)for(var g=0;g<e.selectors.length;g++)if(f=b.match(e.selectors[g])){b.elements.length>1?Array.prototype.push.apply(d,e.find(new a.Selector(b.elements.slice(1)),c)):d.push(e);break}});return this._lookups[g]=d},toCSS:function(b,c){var d=[],e=[],f=[],g=[],h,i;this.root||(b.length===0?g=this.selectors.map(function(a){return[a]}):this.joinSelectors(g,b,this.selectors));for(var j=0;j<this.rules.length;j++)i=this.rules[j],i.rules||i instanceof a.Directive?f.push(i.toCSS(g,c)):i instanceof a.Comment?i.silent||(this.root?f.push(i.toCSS(c)):e.push(i.toCSS(c))):i.toCSS&&!i.variable?e.push(i.toCSS(c)):i.value&&!i.variable&&e.push(i.value.toString());f=f.join(""),this.root?d.push(e.join(c.compress?"":"\n")):e.length>0&&(h=g.map(function(a){return a.map(function(a){return a.toCSS(c)}).join("").trim()}).join(c.compress?",":g.length>3?",\n":", "),d.push(h,(c.compress?"{":" {\n  ")+e.join(c.compress?"":"\n  ")+(c.compress?"}":"\n}\n"))),d.push(f);return d.join("")+(c.compress?"\n":"")},joinSelectors:function(a,b,c){for(var d=0;d<c.length;d++)this.joinSelector(a,b,c[d])},joinSelector:function(b,c,d){var e=[],f=[],g=[],h=[],i=!1,j;for(var k=0;k<d.elements.length;k++)j=d.elements[k],j.combinator.value[0]==="&"&&(i=!0),i?h.push(j):g.push(j);i||(h=g,g=[]),g.length>0&&e.push(new a.Selector(g)),h.length>0&&f.push(new a.Selector(h));for(var l=0;l<c.length;l++)b.push(e.concat(c[l]).concat(f))}}}(c("less/tree")),function(a){a.Selector=function(a){this.elements=a,this.elements[0].combinator.value===""&&(this.elements[0].combinator.value=" ")},a.Selector.prototype.match=function(a){return this.elements[0].value===a.elements[0].value?!0:!1},a.Selector.prototype.toCSS=function(a){return this._css?this._css:this._css=this.elements.map(function(b){return typeof b=="string"?" "+b.trim():b.toCSS(a)}).join("")}}(c("less/tree")),function(b){b.URL=function(b,c){b.data?this.attrs=b:(!/^(?:https?:\/|file:\/|data:\/)?\//.test(b.value)&&c.length>0&&typeof a!="undefined"&&(b.value=c[0]+(b.value.charAt(0)==="/"?b.value.slice(1):b.value)),this.value=b,this.paths=c)},b.URL.prototype={toCSS:function(){return"url("+(this.attrs?"data:"+this.attrs
    +.mime+this.attrs.charset+this.attrs.base64+this.attrs.data:this.value.toCSS())+")"},eval:function(a){return this.attrs?this:new b.URL(this.value.eval(a),this.paths)}}}(c("less/tree")),function(a){a.Value=function(a){this.value=a,this.is="value"},a.Value.prototype={eval:function(b){return this.value.length===1?this.value[0].eval(b):new a.Value(this.value.map(function(a){return a.eval(b)}))},toCSS:function(a){return this.value.map(function(b){return b.toCSS(a)}).join(a.compress?",":", ")}}}(c("less/tree")),function(a){a.Variable=function(a,b){this.name=a,this.index=b},a.Variable.prototype={eval:function(b){var c,d,e=this.name;e.indexOf("@@")==0&&(e="@"+(new a.Variable(e.slice(1))).eval(b).value);if(c=a.find(b.frames,function(a){if(d=a.variable(e))return d.value.eval(b)}))return c;throw{message:"variable "+e+" is undefined",index:this.index}}}}(c("less/tree")),c("less/tree").find=function(a,b){for(var c=0,d;c<a.length;c++)if(d=b.call(a,a[c]))return d;return null},c("less/tree").jsify=function(a){return Array.isArray(a.value)&&a.value.length>1?"["+a.value.map(function(a){return a.toCSS(!1)}).join(", ")+"]":a.toCSS(!1)};var f=location.protocol==="file:"||location.protocol==="chrome:"||location.protocol==="chrome-extension:"||location.protocol==="resource:";d.env=d.env||(location.hostname=="127.0.0.1"||location.hostname=="0.0.0.0"||location.hostname=="localhost"||location.port.length>0||f?"development":"production"),d.async=!1,d.poll=d.poll||(f?1e3:1500),d.watch=function(){return this.watchMode=!0},d.unwatch=function(){return this.watchMode=!1},d.env==="development"?(d.optimization=0,/!watch/.test(location.hash)&&d.watch(),d.watchTimer=setInterval(function(){d.watchMode&&m(function(a,b,c){a&&p(a.toCSS(),b,c.lastModified)})},d.poll)):d.optimization=3;var g;try{g=typeof a.localStorage=="undefined"?null:a.localStorage}catch(h){g=null}var i=document.getElementsByTagName("link"),j=/^text\/(x-)?less$/;d.sheets=[];for(var k=0;k<i.length;k++)(i[k].rel==="stylesheet/less"||i[k].rel.match(/stylesheet/)&&i[k].type.match(j))&&d.sheets.push(i[k]);d.refresh=function(a){var b,c;b=c=new Date,m(function(a,d,e){e.local?t("loading "+d.href+" from cache."):(t("parsed "+d.href+" successfully."),p(a.toCSS(),d,e.lastModified)),t("css for "+d.href+" generated in "+(new Date-c)+"ms"),e.remaining===0&&t("css generated in "+(new Date-b)+"ms"),c=new Date},a),l()},d.refreshStyles=l,d.refresh(d.env==="development")})(window)
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/minimalistic.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/minimalistic.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,130 @@
    +<!DOCTYPE html>
    +<html>
    +<head>
    +  <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
    +  <title>[your_title_here]</title>
    +
    +<!-- 
    +   Notes on CSS media types used:
    + 
    +   1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    +   2) screen     -> outline mode (display all slides-at-once on screen) 
    +   3) print      -> print (and print preview)
    +  
    +   Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key
    +
    +   Questions, comments?
    +   - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow    
    +-->
    +
    +<!-- styles  -->
    +<style media="screen,projection">
    +
    +html,
    +body,
    +.presentation { margin: 0; padding: 0; }
    +
    +.slide { display: none;
    +         position: absolute;
    +         top: 0; left: 0; 
    +         margin: 0;
    +         border: none;
    +         padding: 2% 4% 0% 4%;         /* css note: order is => top right bottom left  */
    +         -moz-box-sizing: border-box;
    +         -webkit-box-sizing: border-box;
    +         box-sizing: border-box;
    +         width: 100%; height: 100%;    /* css note: lets use border-box; no need to add padding+border to get to 100% */
    +         overflow-x: hidden; overflow-y: auto;
    +         z-index: 2;
    +       }
    +       
    +.slide.current { display: block; }  /* only display current slide in projection mode */
    +       
    +.slide .stepcurrent { color: black; }
    +.slide .step        { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */
    +
    +.slide {
    +  background-image: -webkit-linear-gradient(top, blue, aqua, blue, aqua);
    +  background-image: -moz-linear-gradient(top, blue, aqua, blue, aqua);
    +}
    +</style>
    +
    +<style media="screen">
    +.slide             { border-top: 1px solid #888; }
    +.slide:first-child { border: none;  }
    +</style>
    +
    +<style media="print">
    +.slide    { page-break-inside: avoid; }
    +.slide h1 { page-break-after:  avoid; }
    +.slide ul { page-break-inside: avoid; }
    +</style>
    +
    +
    +<!-- add js lib (jquery) -->
    +<script src="js/jquery-1.7.min.js"></script>
    +
    +<!-- S6 JS -->
    +<script src="js/jquery.slideshow.js"></script>
    +<script src="js/jquery.slideshow.counter.js"></script>
    +<script src="js/jquery.slideshow.controls.js"></script>
    +<script>
    +  $(document).ready( function() {
    +    Slideshow.init();
    +    
    +    // Example 2: Start Off in Outline Mode
    +    // Slideshow.init( { mode: 'outline' } );
    +    
    +    // Example 3: Use Custom Transition
    +    // Slideshow.transition = transitionScrollUp;
    +    // Slideshow.init();
    +
    +    // Example 4: Start Off in Autoplay Mode with Custom Transition
    +    // Slideshow.transition = transitionScrollUp;
    +    // Slideshow.init( { mode: 'autoplay' } );
    +  } );
    +</script>
    +
    +</head>
    +<body>
    +
    +<div class="presentation">
    +
    +  <!-- add slides here; example -->
    +  
    +  <div class='cover'>
    +    <h1>Your Slide Title Here</h1>
    +    <ul>
    +      <li>Item One Here</li>
    +      <li>Item Two Here</li>
    +    </ul>
    +  </div>
    +
    +  <div>
    +    <h1>Steps Demos</h1>
    +
    +    <!-- mark list with class step to mark all items at once -->
    +    <ul class='step'>
    +      <li>Item 1.1 Here</li>
    +      <li>Item 1.2 Here</li>
    +    </ul>
    +
    +    <!-- or mark individual list items -->
    +    <ul>
    +      <li class='step'>Item 2.1 Here</li>
    +      <li class='step'>Item 2.2 Here</li>
    +    </ul>
    +
    +    <!-- or mark paragraphs, div blocks or whatever -->
    +    <p class='step'>Another Step</p>
    +
    +  </div>
    +
    +  <div>
    +    <h1>Another Slide Title Here</h1>
    +    <p>yada yada yada</p>
    +  </div>
    +
    +</div> <!-- presentation -->
    +</body>
    +</html>
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/s6.jquery.json
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/s6.jquery.json	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,27 @@
    +{
    +  "name": "s6",
    +  "version": "0.0.1",
    +  "title": "S6 Blank",
    +  "description": "Another Slide Show Script",
    +  "keywords": [
    +    "s6",
    +    "slideshow",
    +    "presentation"
    +  ],
    +  "author": {
    +    "name": "Gerald Bauer",
    +    "url": "https://github.com/geraldb"
    +  },
    +  "licenses": [
    +    {
    +      "type": "Public Domain",
    +      "url": "http://en.wikipedia.org/wiki/Public_domain"
    +    }
    +  ],
    +  "dependencies": {
    +    "jquery": ">=1.10"
    +  },
    +  "homepage": "https://github.com/geraldb/s6",
    +  "docs": "https://github.com/geraldb/s6",
    +  "download": "http://code.jquery.com/#s6"
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/sample.html
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/sample.html	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,364 @@
    +<!DOCTYPE html>
    +<html>
    +  <head>
    +    <meta charset='utf-8'>
    +    <title>Sample S6 Presentation</title>
    +    <script src='slides.js'></script>
    +    <style media='screen,projection'>
    +     /****
    +      * Add your styles here.
    +      */
    +     
    +   body { font-size: 175%; }
    +     
    +  .step  { color: silver; }  /* or hide next steps e.g. .step { visibility: hidden; } */
    +    
    +  .slide {
    +    font-family: 'Open Sans', Arial, sans-serif;
    +
    +    color: rgb(102, 102, 102);
    +    text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +  }
    +  
    +  .slide h1, .slide h2, .slide h3 {
    +    color: rgb(51, 51, 51);
    +  }
    +  
    +  .slide pre {
    +   font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +   font-size: 80%;
    +
    +  padding: 5px 10px;
    +  
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  overflow: hidden;
    +  }
    +
    +  .slide code {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +  color: black;
    +  }
    +    </style>
    +  </head>
    +  <body>
    +
    +    <section class='slides'>
    +      <!-- Add your slides here. Delete or comment out the slides below. -->
    +      
    +      <article class='cover'>
    +        <h1>
    +          Title Goes Here Up
    +          <br>
    +          To Two Lines
    +        </h1>
    +        <p>
    +          Carlos Ruby
    +          <br>
    +          November 11, 2011
    +        </p>
    +      </article>
    +      
    +      <article>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath.
    +        </p>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Simple slide with header and text
    +        </h3>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath with a <code>code sample: 5px</code>.
    +        </p>
    +      </article>
    +
    +      <article class='smaller'>
    +        <h3>
    +          Simple slide with header and text (small font)
    +        </h3>
    +        <p>
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +          This is a slide with just text. This is a slide with just text.
    +        </p>
    +        <p>
    +          There is more text just underneath with a <code>code sample: 5px</code>.
    +        </p>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with bullet points and a longer title, just because we
    +          can make it longer
    +        </h3>
    +        <ul>
    +          <li>
    +            Use this template to create your presentation
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +        </ul>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with bullet points that builds
    +        </h3>
    +        <ul class="build">
    +          <li>
    +            This is an example of a list
    +          </li>
    +          <li>
    +            The list items fade in
    +          </li>
    +          <li>
    +            Last one!
    +          </li>
    +        </ul>
    +
    +        <div class="build">
    +          <p>Any element with child nodes can build.</p>
    +          <p>It doesn't have to be a list.</p>
    +        </div>
    +      </article>
    +
    +      <article class='smaller'>
    +        <h3>
    +          Slide with bullet points (small font)
    +        </h3>
    +        <ul>
    +          <li>
    +            Use this template to create your presentation
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +          <li>
    +            Another item here
    +          </li>
    +        </ul>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with a table
    +        </h3>
    +        
    +        <table>
    +          <tr>
    +            <th>
    +              Name
    +            <th>
    +              Occupation
    +          <tr>
    +            <td>
    +              Luke Mahé
    +            <td>
    +              V.P. of Keepin’ It Real
    +          <tr>
    +            <td>
    +              Marcin Wichary
    +            <td>
    +              The Michael Bay of Doodles
    +        </table>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <h3>
    +          Slide with a table (smaller text)
    +        </h3>
    +        
    +        <table>
    +          <tr>
    +            <th>
    +              Name
    +            <th>
    +              Occupation
    +          <tr>
    +            <td>
    +              Luke Mahé
    +            <td>
    +              V.P. of Keepin’ It Real
    +          <tr>
    +            <td>
    +              Marcin Wichary
    +            <td>
    +              The Michael Bay of Doodles
    +        </table>
    +      </article>
    +      
    +      <article>
    +        <h2>
    +          Segue slide
    +        </h2>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with an image
    +        </h3>
    +        <p>
    +          <img style='height: 500px' src='images/example-graph.png'>
    +        </p>
    +        <div class='source'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          Slide with an image (centered)
    +        </h3>
    +        <p>
    +          <img class='centered' style='height: 500px' src='images/example-graph.png'>
    +        </p>
    +        <div class='source'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article class='fill'>
    +        <h3>
    +          Image filling the slide (with optional header)
    +        </h3>
    +        <p>
    +          <img src='images/example-cat.jpg'>
    +        </p>
    +        <div class='source white'>
    +          Source: Carlos Ruby
    +        </div>
    +      </article>
    +
    +      <article>
    +        <h3>
    +          This slide has some code
    +        </h3>
    +        <section>
    +        <pre>
    +# The Greeter class
    +class Greeter
    +  def initialize(name)
    +    @name = name.capitalize
    +  end
    + 
    +  def salute
    +    puts "Hello #{@name}!"
    +  end
    +end
    + 
    +# Create a new object
    +g = Greeter.new("world")
    + 
    +# Output "Hello World!"
    +g.salute
    +</pre>
    +        </section>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <h3>
    +          This slide has some code (small font)
    +        </h3>
    +        <section>
    +        <pre>
    +# The Greeter class
    +class Greeter
    +  def initialize(name)
    +    @name = name.capitalize
    +  end
    + 
    +  def salute
    +    puts "Hello #{@name}!"
    +  end
    +end
    + 
    +# Create a new object
    +g = Greeter.new("world")
    + 
    +# Output "Hello World!"
    +g.salute
    +</pre>
    +        </section>
    +      </article>
    +      
    +      <article>
    +        <q>
    +          The best way to predict the future is to invent it.
    +        </q>
    +        <div class='author'>
    +          Alan Kay
    +        </div>
    +      </article>
    +      
    +      <article class='smaller'>
    +        <q>
    +          A distributed system is one in which the failure of a computer 
    +          you didn’t even know existed can render your own computer unusable.
    +        </q>
    +        <div class='author'>
    +          Leslie Lamport
    +        </div>
    +      </article>
    +      
    +      <article class='nobackground'>
    +        <h3>
    +          A slide with an embed + title
    +        </h3>
    +        
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +
    +      <article class='slide nobackground'>
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +
    +      <article class='fill'>
    +        <h3>
    +          Full-slide embed with (optional) slide title on top
    +        </h3>
    +        <iframe src='http://slideshow-s9.github.io'></iframe>
    +      </article>
    +      
    +      <article>
    +        <h3>
    +          Thank you!
    +        </h3>
    +        
    +        <ul>
    +          <li>
    +            <a href='http://www.example.com'>example.com</a>
    +          </li>
    +        </ul>
    +      </article>
    +
    +    </section>
    +
    +  </body>
    +</html>
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/slides.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/slides.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,91 @@
    +var BASE_URL_PREFIX = './s6_trunk/';
    +
    +function addScript( name )
    +{
    +  var el = document.createElement( 'script' );
    +  el.type = 'text/javascript';
    +  el.src = BASE_URL_PREFIX + name;
    +
    +  if(!document.head)  // fix for Firefox <4.0
    +    document.head = document.getElementsByTagName('head')[0];
    +
    +  document.head.appendChild( el );
    +}
    +
    +function addStyle( name, media )
    +{
    +  var el = document.createElement( 'link' );
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = BASE_URL_PREFIX + name;
    +  el.media = media;
    +
    +  if(!document.head)  // fix for Firefox <4.0
    +    document.head = document.getElementsByTagName('head')[0];
    +
    +  document.head.appendChild( el );
    +}
    +
    +function addStyleLess( name, media )
    +{
    +  var el = document.createElement( 'link' );
    +  el.rel   = 'stylesheet/less';
    +  el.type = 'text/css';
    +  el.href  = BASE_URL_PREFIX + name;
    +  el.media = media;
    +
    +  if(!document.head)  // fix for Firefox <4.0
    +    document.head = document.getElementsByTagName('head')[0];
    +
    +  document.head.appendChild( el );
    +}
    +
    +
    +function letsGo()
    +{
    +  var useLess = true;
    +
    +  /*********
    +   * add style sheet links
    +   */
    +
    +  if( useLess )
    +  {
    +    addStyleLess( 'themes/blank5/projection.css.less', 'screen,projection' );
    +    addStyleLess( 'themes/blank5/screen.css.less',     'screen'            );
    +    addStyleLess( 'themes/blank5/print.css.less',      'print'             );
    +  }
    +  else
    +  {
    +    addStyle( 'themes/blank5/o/projection.css', 'screen,projection' );
    +    addStyle( 'themes/blank5/o/screen.css',     'screen'            );
    +    addStyle( 'themes/blank5/o/print.css',      'print'             );
    +  }
    +  
    +  /********
    +   * add js libs (less, jquery)
    +   */
    +
    +  if( useLess )
    +    addScript( 'js/less-1.1.4.min.js' );
    +
    +  addScript( 'js/jquery-1.7.min.js' );
    +
    +  /********
    +   * add S6 js code
    +   */
    +
    +  addScript( 'js/jquery.slideshow.js' );
    +  addScript( 'js/jquery.slideshow.counter.js' );
    +  addScript( 'js/jquery.slideshow.controls.js' );
    +  addScript( 'js/jquery.slideshow.footer.js' );
    +  addScript( 'js/jquery.slideshow.autoplay.js' );
    +  addScript( 'js/jquery.slideshow.ready.js' );
    +
    +  // todo - check why we can't access Slideshow object here
    +  // Slideshow.debug( 'letsGo says hello' );
    +  // Slideshow.init();
    +}
    +
    +// letsGo();
    +document.addEventListener('DOMContentLoaded', letsGo, false);
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/o/print.css
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/o/print.css	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,33 @@
    +/*********************************
     * CSS @media print rules (not projection or screen)
     *
     * (note: this is a less extendend css script, to learn more about less; see lesscss.org) 
     */body {
    +  font-size: 12pt;
    +}
    +.slide {
    +  page-break-inside: avoid;
    +  /********************
       * Extra styling for first slide (title/cover slide)
       */
    +}
    +.slide h1 {
    +  page-break-after: avoid;
    +}
    +.slide ul {
    +  page-break-inside: avoid;
    +}
    +.slide h1 {
    +  border-top: 2pt solid gray;
    +  border-bottom: 1px dotted silver;
    +}
    +.slide:first-child {
    +  margin-bottom: 3em;
    +}
    +.slide:first-child h1 {
    +  font-size: 200%;
    +  border: none;
    +  margin: 0.5em 0 0.25em;
    +}
    +.slide:first-child h3 {
    +  margin: 0;
    +  padding: 0;
    +}
    +.slide:first-child h4 {
    +  margin: 0 0 0.5em;
    +  padding: 0;
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/o/projection.css
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/o/projection.css	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,120 @@
    +/*********************************
    + * CSS @media projection rules (not print or screen)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + *
    + * (note: this is a less extendend css script, to learn more about less; see lesscss.org)
    + */
    +html, body, .presentation {
    +  margin: 0;
    +  padding: 0;
    +}
    +.slide {
    +  position: absolute;
    +  top: 0;
    +  left: 0;
    +  margin: 0;
    +  padding: 2% 4% 0% 4%;
    +  /* css note: order is => top right bottom left  */
    +
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +  box-sizing: border-box;
    +  width: 100%;
    +  height: 100%;
    +  /* css note: lets use border-box; no need to add padding+border to get to 100% */
    +
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +  z-index: 2;
    +}
    +/*****
    + *  layout block structure:
    + *
    + *  .layout
    + *    > #header
    + *    > #footer
    + */
    +.layout #header, .layout header {
    +  position: fixed;
    +  top: 0;
    +  left: 0;
    +  width: 100%;
    +  height: 0.5em;
    +  z-index: 1;
    +}
    +.layout #footer, .layout footer {
    +  position: fixed;
    +  top: auto;
    +  bottom: 0;
    +  padding: 1em 0;
    +  /* css note: order is => 1st top,bottom; 2nd right,left */
    +
    +  width: 100%;
    +  height: 1em;
    +  z-index: 5;
    +  /* todo: move font-size and font-style to blank.css */
    +  font-size: 100%;
    +  font-weight: bold;
    +  /* todo: move font-size and font-style to blank.css */
    +
    +}
    +.layout #footer h1, .layout footer h1 {
    +  display: block;
    +  margin: 0;
    +  padding: 0 1em;
    +  font-size: 50%;
    +}
    +.layout #footer h2, .layout footer h2 {
    +  display: block;
    +  margin: 0;
    +  padding: 0 1em;
    +  font-size: 50%;
    +  font-style: italic;
    +}
    +/*********************************
    + * general text-alignment classes
    + */
    +.left {
    +  text-align: left;
    +}
    +.center {
    +  text-align: center;
    +}
    +.right {
    +  text-align: right;
    +}
    +/*********************************
    + * general _absolute_ font-size classes
    + */
    +.small {
    +  font-size: 97%;
    +}
    +.x-small {
    +  font-size: 88%;
    +}
    +.xx-small {
    +  font-size: 82%;
    +}
    +.large {
    +  font-size: 103%;
    +}
    +.x-large {
    +  font-size: 112%;
    +}
    +.xx-large {
    +  font-size: 118%;
    +}
    +/*********************************
    + * general _relative_ font-size classes
    + */
    +.smaller {
    +  font-size: 82%;
    +}
    +.larger {
    +  font-size: 118%;
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/o/screen.css
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/o/screen.css	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,26 @@
    +/*********************************
    + * CSS @media screen (not projection or print)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + *
    + * (note: this is a less extendend css script, to learn more about less; see lesscss.org)
    + */
    +.slide {
    +  margin: 1.5em 0 0;
    +  border-top: 1px solid #888;
    +}
    +.slide h1 {
    +  border-bottom: 1px solid #AAA;
    +}
    +.slide:first-child {
    +  margin: 0;
    +  border: none;
    +}
    +.slide:first-child h1 {
    +  border: none;
    +  padding-top: 1.5em;
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/print.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/print.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1 @@
    +/*********************************
     * CSS @media print rules (not projection or screen)
     */
     
    //////////////////////////////////////
    // note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    
    body { font-size: 12pt; }
    
    
    .slide {
       display: block !important;
       page-break-inside: avoid;
             
       h1   { page-break-after: avoid; }
       ul   { page-break-inside: avoid; }
    
       h1 { border-top: 2pt solid gray;
            border-bottom: 1px dotted silver;
          }
       
      /********************
       * Extra styling for first slide (title/cover slide)
       */
    
       &:first-child {
         margin-bottom: 3em; 
    
         h1 { font-size: 200%;
              border: none;
              margin: 0.5em 0 0.25em; }
         h3 { margin: 0; padding: 0;}
         h4 { margin: 0 0 0.5em; padding: 0;}
       }
    }
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/projection.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/projection.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,97 @@
    +/*********************************
    + * CSS @media projection rules (not print or screen)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +
    +html,
    +body,
    +.presentation { margin: 0; padding: 0; }
    +
    +
    +.slide { display: none;   /* note: only display current slide in projection mode */
    +         position: absolute;
    +         top: 0; left: 0; 
    +         margin: 0;
    +         padding: 2% 4% 0% 4%;         /* css note: order is => top right bottom left  */
    +         -moz-box-sizing: border-box;
    +         -webkit-box-sizing: border-box;
    +         box-sizing: border-box;
    +         width: 100%; height: 100%;    /* css note: lets use border-box; no need to add padding+border to get to 100% */
    +         overflow-x: hidden; overflow-y: auto;
    +         z-index: 2;
    +       }
    +
    +.slide.current { display: block; }  /* note: only display current slide in projection mode */
    +
    +
    +/*****
    + *  layout block structure:
    + *
    + *  .layout
    + *    > #header
    + *    > #footer
    + */
    +
    +.layout {
    +  
    +  #header, header {  position: fixed;
    +                     top: 0; left: 0;
    +                     width: 100%; height: 0.5em;
    +                     z-index: 1;
    +                   }
    +   
    +  #footer, footer {  position: fixed;
    +           top: auto; bottom: 0;
    +           padding: 1em 0;   /* css note: order is => 1st top,bottom; 2nd right,left */
    +           width: 100%; height: 1em;
    +           z-index: 5;
    +    
    +           /* todo: move font-size and font-style to blank.css */    
    +           font-size: 100%; font-weight: bold; 
    + 
    +           /* todo: move font-size and font-style to blank.css */
    +
    +           h1 { display: block; margin: 0; padding: 0 1em; font-size: 50%; }
    +           h2 { display: block; margin: 0; padding: 0 1em; font-size: 50%; font-style: italic; }
    +   }
    +}
    +
    +
    +
    +/*********************************
    + * general text-alignment classes
    + */
    +
    +.left   { text-align: left;   }
    +.center { text-align: center; }
    +.right  { text-align: right;  }
    +
    +
    +/*********************************
    + * general _absolute_ font-size classes
    + */
    +
    +.small    { font-size: 97%; }
    +.x-small  { font-size: 88%; }
    +.xx-small { font-size: 82%; }
    +
    +.large    { font-size: 103%; }
    +.x-large  { font-size: 112%; }
    +.xx-large { font-size: 118%; }
    +
    +/*********************************
    + * general _relative_ font-size classes
    + */
    + 
    +.smaller  { font-size: 82%; }
    +.larger   { font-size: 118%; }
    + 
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank/screen.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank/screen.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,31 @@
    +/*********************************
    + * CSS @media screen (not projection or print)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +.slide
    +{
    +  display: block !important;
    +  margin: 1.5em 0 0;
    +  border-top: 1px solid #888;
    +
    +  h1 { border-bottom: 1px solid #AAA; }
    +  
    +  
    +  &:first-child {
    +    margin: 0;
    +    border: none;
    +    
    +    h1 {
    +      border: none;
    +      padding-top: 1.5em; }
    +  }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank5/print.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank5/print.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,35 @@
    +/*********************************
    + * CSS @media print rules (not projection or screen)
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org)
    +
    +body { font-size: 12pt; }
    +
    +
    +.slide {
    +   display: block !important;
    +   page-break-inside: avoid;
    +         
    +   h1   { page-break-after: avoid; }
    +   ul   { page-break-inside: avoid; }
    +
    +   h1 { border-top: 2pt solid gray;
    +        border-bottom: 1px dotted silver;
    +      }
    +   
    +  /********************
    +   * Extra styling for first slide (title/cover slide)
    +   */
    +
    +   &:first-child {
    +     margin-bottom: 3em; 
    +
    +     h1 { font-size: 200%;
    +          border: none;
    +          margin: 0.5em 0 0.25em; }
    +     h3 { margin: 0; padding: 0;}
    +     h4 { margin: 0 0 0.5em; padding: 0;}
    +   }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank5/projection.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank5/projection.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,307 @@
    +/*********************************
    + * CSS @media projection rules (not print or screen)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  height: 100%;
    +  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +}
    +
    +.presentation {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slide {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;       /* css note: lets use border-box; no need to add padding+border to get to 100% */
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +
    +
    +.slide {
    +  display: none;
    +}
    +
    +.slide.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slide.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +
    +.slide.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slide.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +
    +.slide.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +
    +/***********
    + * styles
    + */ 
    +
    +.slide h1 {          // use h1 for title 
    +  margin-top: 200px;
    +}
    +
    +
    +.slide h2 {          // use h2 for section title/segue 
    +  position: absolute;
    +  bottom: 150px;
    +}
    +
    +.slide.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +.slide iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +  
    +  overflow: hidden;
    +}
    +
    +.slide h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +.slide.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +.slide.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +
    +.slide img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +}
    +
    +th {
    +  text-align: left; 
    +}
    +
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +ul {
    +  list-style-type: square;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;
    +  line-height: 18px;
    +}
    +
    +q {
    +  font-size: 300%;  // 60px
    +  display: block;
    +  margin-left: 1em;
    +}
    +
    +q::before {
    +  content: '“';
    +  color: rgb(192, 192, 192);
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -1.1em;
    +  width: 1em;
    +  text-align: right;
    +}
    +
    +q::after {
    +  content: '”';
    +  color: rgb(192, 192, 192);
    +}
    +
    +
    +div.author {
    +  text-align: right;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;
    +  
    +  font-size: 200%; // 40px; 
    +}
    +
    +div.author::before {
    +  content: '—';
    +}
    +
    +
    +/***********
    + * smaller
    + */
    + 
    +.slide.smaller {
    +
    +  p, ul, table {  font-size: 80%; }    // 20px 
    +
    +  pre          {  font-size: 60%; }    // 15px
    +
    +  q            {  font-size: 200%; }   // 40px 
    +}
    +
    +
    +
    +
    +/*********************************
    + * general text-alignment classes
    + */
    +
    +.left   { text-align: left;   }
    +.center { text-align: center; }
    +.right  { text-align: right;  }
    +
    +
    +/*********************************
    + * general color classes
    + */
    +
    +.white {  color: white; }
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/blank5/screen.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/blank5/screen.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,31 @@
    +/*********************************
    + * CSS @media screen (not projection or print)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +.slide
    +{
    +  display: block !important;
    +  margin: 1.5em 0 0;
    +  border-top: 1px solid #888;
    +
    +  h1 { border-bottom: 1px solid #AAA; }
    +  
    +  
    +  &:first-child {
    +    margin: 0;
    +    border: none;
    +    
    +    h1 {
    +      border: none;
    +      padding-top: 1.5em; }
    +  }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/g5/print.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/g5/print.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,35 @@
    +/*********************************
    + * CSS @media print rules (not projection or screen)
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org)
    +
    +body { font-size: 12pt; }
    +
    +
    +.slide {
    +   display: block !important;
    +   page-break-inside: avoid;
    +         
    +   h1   { page-break-after: avoid; }
    +   ul   { page-break-inside: avoid; }
    +
    +   h1 { border-top: 2pt solid gray;
    +        border-bottom: 1px dotted silver;
    +      }
    +   
    +  /********************
    +   * Extra styling for first slide (title/cover slide)
    +   */
    +
    +   &:first-child {
    +     margin-bottom: 3em; 
    +
    +     h1 { font-size: 200%;
    +          border: none;
    +          margin: 0.5em 0 0.25em; }
    +     h3 { margin: 0; padding: 0;}
    +     h4 { margin: 0 0 0.5em; padding: 0;}
    +   }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/g5/projection.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/g5/projection.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,307 @@
    +/*********************************
    + * CSS @media projection rules (not print or screen)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  height: 100%;
    +  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +}
    +
    +.presentation {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slide {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;       /* css note: lets use border-box; no need to add padding+border to get to 100% */
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +
    +
    +.slide {
    +  display: none;
    +}
    +
    +.slide.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slide.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +
    +.slide.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slide.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +
    +.slide.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +
    +/***********
    + * styles
    + */ 
    +
    +.slide h1 {          // use h1 for title 
    +  margin-top: 200px;
    +}
    +
    +
    +.slide h2 {          // use h2 for section title/segue 
    +  position: absolute;
    +  bottom: 150px;
    +}
    +
    +.slide.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +.slide iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +  
    +  overflow: hidden;
    +}
    +
    +.slide h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +.slide.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +.slide.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +
    +.slide img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +}
    +
    +th {
    +  text-align: left; 
    +}
    +
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +ul {
    +  list-style-type: square;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;
    +  line-height: 18px;
    +}
    +
    +q {
    +  font-size: 300%;  // 60px
    +  display: block;
    +  margin-left: 1em;
    +}
    +
    +q::before {
    +  content: '“';
    +  color: rgb(192, 192, 192);
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -1.1em;
    +  width: 1em;
    +  text-align: right;
    +}
    +
    +q::after {
    +  content: '”';
    +  color: rgb(192, 192, 192);
    +}
    +
    +
    +div.author {
    +  text-align: right;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;
    +  
    +  font-size: 200%; // 40px; 
    +}
    +
    +div.author::before {
    +  content: '—';
    +}
    +
    +
    +/***********
    + * smaller
    + */
    + 
    +.slide.smaller {
    +
    +  p, ul, table {  font-size: 80%; }    // 20px 
    +
    +  pre          {  font-size: 60%; }    // 15px
    +
    +  q            {  font-size: 200%; }   // 40px 
    +}
    +
    +
    +
    +
    +/*********************************
    + * general text-alignment classes
    + */
    +
    +.left   { text-align: left;   }
    +.center { text-align: center; }
    +.right  { text-align: right;  }
    +
    +
    +/*********************************
    + * general color classes
    + */
    +
    +.white {  color: white; }
    diff -r 000000000000 -r 845ff8ff4fc9 2014/2014_01_14/s6_trunk/themes/g5/screen.css.less
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/2014/2014_01_14/s6_trunk/themes/g5/screen.css.less	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,31 @@
    +/*********************************
    + * CSS @media screen (not projection or print)
    + *
    + * 1) projection -> slideshow mode (display one slide at-a-time; hide all others)
    + * 2) screen     -> outline mode (display all slides-at-once on screen) 
    + * 3) print      -> print (and print preview)
    + *
    + * toggle between projection/screen (that is, slideshow/outline) mode using t-key
    + */
    +
    +//////////////////////////////////////
    +// note: this is a less extendend css script, to learn more about less; see lesscss.org) 
    +
    +.slide
    +{
    +  display: block !important;
    +  margin: 1.5em 0 0;
    +  border-top: 1px solid #888;
    +
    +  h1 { border-bottom: 1px solid #AAA; }
    +  
    +  
    +  &:first-child {
    +    margin: 0;
    +    border: none;
    +    
    +    h1 {
    +      border: none;
    +      padding-top: 1.5em; }
    +  }
    +}
    \ No newline at end of file
    diff -r 000000000000 -r 845ff8ff4fc9 mytrunk/customSlides.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/mytrunk/customSlides.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,12 @@
    +/*
    + The script for Google HTML5 slides.
    +
    + Authors: Kaito Tokumori
    +*/
    +
    +function jumpSlides(direction){
    +    if(direction <= 0 || direction > slideEls.length)
    +	return;
    +    curSlide = direction - 1;
    +    updateSlides();
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.DS_Store
    Binary file trunk/.DS_Store has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/all-wcprops
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/all-wcprops	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,23 @@
    +K 25
    +svn:wc:ra_dav:version-url
    +V 22
    +/svn/!svn/ver/20/trunk
    +END
    +prettify.js
    +K 25
    +svn:wc:ra_dav:version-url
    +V 33
    +/svn/!svn/ver/2/trunk/prettify.js
    +END
    +styles.css
    +K 25
    +svn:wc:ra_dav:version-url
    +V 33
    +/svn/!svn/ver/20/trunk/styles.css
    +END
    +slides.js
    +K 25
    +svn:wc:ra_dav:version-url
    +V 32
    +/svn/!svn/ver/20/trunk/slides.js
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/entries
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/entries	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,136 @@
    +10
    +
    +dir
    +20
    +http://html5slides.googlecode.com/svn/trunk
    +http://html5slides.googlecode.com/svn
    +
    +
    +
    +2011-06-22T03:59:28.325313Z
    +20
    +lukem@google.com
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +5963eb91-a1a4-c111-6e9c-cdd99a89fa83
    +
    +prettify.js
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +d8c38aae6cceb1ef2b5f511d4b65f343
    +2011-05-20T16:47:00.952438Z
    +2
    +mwichary@google.com
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +53996
    +
    +images
    +dir
    +
    +styles.css
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +ed52b35fae826c2315f9737a4efe0697
    +2011-06-22T03:59:28.325313Z
    +20
    +lukem@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +11337
    +
    +template
    +dir
    +
    +slides.js
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +d61fff7e1ca0fd9a6b10e54ba203485b
    +2011-06-22T03:59:28.325313Z
    +20
    +lukem@google.com
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +14813
    +
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/prop-base/styles.css.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/prop-base/styles.css.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,9 @@
    +K 14
    +svn:executable
    +V 1
    +*
    +K 13
    +svn:mime-type
    +V 8
    +text/css
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/text-base/prettify.js.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/text-base/prettify.js.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1391 @@
    +// Copyright (C) 2006 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +/**
    + * @fileoverview
    + * some functions for browser-side pretty printing of code contained in html.
    + *
    + * <p>
    + * For a fairly comprehensive set of languages see the
    + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    + * file that came with this source.  At a minimum, the lexer should work on a
    + * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    + * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    + * and a subset of Perl, but, because of commenting conventions, doesn't work on
    + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    + * <p>
    + * Usage: <ol>
    + * <li> include this source file in an html page via
    + *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    + * <li> define style rules.  See the example page for examples.
    + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending dynamic event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var COFFEE_KEYWORDS = "all and by catch class else extends false finally " +
    +      "for if in is isnt loop new no not null of off on or return super then " +
    +      "true try unless until when while yes ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   source: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      source: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.source} around style boundaries in {@code job.decorations}
    +   * and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    source: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.source in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.source;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Simplify decorations.
    +    var decPos = 0;
    +    for (var i = 0; i < nDecorations;) {
    +      // Skip over any zero-length decorations.
    +      var startPos = decorations[i];
    +      var start = i;
    +      while (start + 2 < nDecorations && decorations[start + 2] === startPos) {
    +        start += 2;
    +      }
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[start + 1];
    +      var end = start + 2;
    +      while (end + 2 <= nDecorations
    +             && (decorations[end + 1] === startDec
    +                 || decorations[end] === decorations[end + 2])) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    // Strip any zero-length decoration at the end.
    +    if (decPos && decorations[decPos - 2] === sourceLength) { decPos -= 2; }
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      if (textNode.nodeType !== 1) {  // Don't muck with <BR>s or <LI>s
    +        var styledText = source.substring(sourceIndex, end);
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.source;
    +      job.source = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/text-base/slides.js.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/text-base/slides.js.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,634 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +var PERMANENT_URL_PREFIX = 'http://html5slides.googlecode.com/svn/trunk/';
    +
    +var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
    +
    +var PM_TOUCH_SENSITIVITY = 15;
    +
    +var curSlide;
    +
    +/* ---------------------------------------------------------------------- */
    +/* classList polyfill by Eli Grey 
    + * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
    +
    +if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
    +
    +(function (view) {
    +
    +var
    +    classListProp = "classList"
    +  , protoProp = "prototype"
    +  , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
    +  , objCtr = Object
    +    strTrim = String[protoProp].trim || function () {
    +    return this.replace(/^\s+|\s+$/g, "");
    +  }
    +  , arrIndexOf = Array[protoProp].indexOf || function (item) {
    +    for (var i = 0, len = this.length; i < len; i++) {
    +      if (i in this && this[i] === item) {
    +        return i;
    +      }
    +    }
    +    return -1;
    +  }
    +  // Vendors: please allow content code to instantiate DOMExceptions
    +  , DOMEx = function (type, message) {
    +    this.name = type;
    +    this.code = DOMException[type];
    +    this.message = message;
    +  }
    +  , checkTokenAndGetIndex = function (classList, token) {
    +    if (token === "") {
    +      throw new DOMEx(
    +          "SYNTAX_ERR"
    +        , "An invalid or illegal string was specified"
    +      );
    +    }
    +    if (/\s/.test(token)) {
    +      throw new DOMEx(
    +          "INVALID_CHARACTER_ERR"
    +        , "String contains an invalid character"
    +      );
    +    }
    +    return arrIndexOf.call(classList, token);
    +  }
    +  , ClassList = function (elem) {
    +    var
    +        trimmedClasses = strTrim.call(elem.className)
    +      , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
    +    ;
    +    for (var i = 0, len = classes.length; i < len; i++) {
    +      this.push(classes[i]);
    +    }
    +    this._updateClassName = function () {
    +      elem.className = this.toString();
    +    };
    +  }
    +  , classListProto = ClassList[protoProp] = []
    +  , classListGetter = function () {
    +    return new ClassList(this);
    +  }
    +;
    +// Most DOMException implementations don't allow calling DOMException's toString()
    +// on non-DOMExceptions. Error's toString() is sufficient here.
    +DOMEx[protoProp] = Error[protoProp];
    +classListProto.item = function (i) {
    +  return this[i] || null;
    +};
    +classListProto.contains = function (token) {
    +  token += "";
    +  return checkTokenAndGetIndex(this, token) !== -1;
    +};
    +classListProto.add = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.push(token);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.remove = function (token) {
    +  token += "";
    +  var index = checkTokenAndGetIndex(this, token);
    +  if (index !== -1) {
    +    this.splice(index, 1);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.toggle = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.add(token);
    +  } else {
    +    this.remove(token);
    +  }
    +};
    +classListProto.toString = function () {
    +  return this.join(" ");
    +};
    +
    +if (objCtr.defineProperty) {
    +  var classListPropDesc = {
    +      get: classListGetter
    +    , enumerable: true
    +    , configurable: true
    +  };
    +  try {
    +    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +  } catch (ex) { // IE 8 doesn't support enumerable:true
    +    if (ex.number === -0x7FF5EC54) {
    +      classListPropDesc.enumerable = false;
    +      objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +    }
    +  }
    +} else if (objCtr[protoProp].__defineGetter__) {
    +  elemCtrProto.__defineGetter__(classListProp, classListGetter);
    +}
    +
    +}(self));
    +
    +}
    +/* ---------------------------------------------------------------------- */
    +
    +/* Slide movement */
    +
    +function getSlideEl(no) {
    +  if ((no < 0) || (no >= slideEls.length)) { 
    +    return null;
    +  } else {
    +    return slideEls[no];
    +  }
    +};
    +
    +function updateSlideClass(slideNo, className) {
    +  var el = getSlideEl(slideNo);
    +  
    +  if (!el) {
    +    return;
    +  }
    +  
    +  if (className) {
    +    el.classList.add(className);
    +  }
    +    
    +  for (var i in SLIDE_CLASSES) {
    +    if (className != SLIDE_CLASSES[i]) {
    +      el.classList.remove(SLIDE_CLASSES[i]);
    +    }
    +  }
    +};
    +
    +function updateSlides() {
    +  for (var i = 0; i < slideEls.length; i++) {
    +    switch (i) {
    +      case curSlide - 2:
    +        updateSlideClass(i, 'far-past');
    +        break;
    +      case curSlide - 1:
    +        updateSlideClass(i, 'past');
    +        break;
    +      case curSlide: 
    +        updateSlideClass(i, 'current');
    +        break;
    +      case curSlide + 1:
    +        updateSlideClass(i, 'next');      
    +        break;
    +      case curSlide + 2:
    +        updateSlideClass(i, 'far-next');      
    +        break;
    +      default:
    +        updateSlideClass(i);
    +        break;
    +    }
    +  }
    +
    +  triggerLeaveEvent(curSlide - 1);
    +  triggerEnterEvent(curSlide);
    +
    +  window.setTimeout(function() {
    +    // Hide after the slide
    +    disableSlideFrames(curSlide - 2);
    +  }, 301);
    +
    +  enableSlideFrames(curSlide - 1);
    +  enableSlideFrames(curSlide + 2);
    +  
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(slideEls[curSlide]);
    +  }  
    +
    +  updateHash();
    +};
    +
    +function buildNextItem() {
    +  var toBuild  = slideEls[curSlide].querySelectorAll('.to-build');
    +
    +  if (!toBuild.length) {
    +    return false;
    +  }
    +
    +  toBuild[0].classList.remove('to-build', '');
    +
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(toBuild[0]);
    +  }
    +
    +  return true;
    +};
    +
    +function prevSlide() {
    +  if (curSlide > 0) {
    +    curSlide--;
    +
    +    updateSlides();
    +  }
    +};
    +
    +function nextSlide() {
    +  if (buildNextItem()) {
    +    return;
    +  }
    +
    +  if (curSlide < slideEls.length - 1) {
    +    curSlide++;
    +
    +    updateSlides();
    +  }
    +};
    +
    +/* Slide events */
    +
    +function triggerEnterEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onEnter = el.getAttribute('onslideenter');
    +  if (onEnter) {
    +    new Function(onEnter).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideenter', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +
    +  el.dispatchEvent(evt);
    +};
    +
    +function triggerLeaveEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onLeave = el.getAttribute('onslideleave');
    +  if (onLeave) {
    +    new Function(onLeave).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideleave', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +  
    +  el.dispatchEvent(evt);
    +};
    +
    +/* Touch events */
    +
    +function handleTouchStart(event) {
    +  if (event.touches.length == 1) {
    +    touchDX = 0;
    +    touchDY = 0;
    +
    +    touchStartX = event.touches[0].pageX;
    +    touchStartY = event.touches[0].pageY;
    +
    +    document.body.addEventListener('touchmove', handleTouchMove, true);
    +    document.body.addEventListener('touchend', handleTouchEnd, true);
    +  }
    +};
    +
    +function handleTouchMove(event) {
    +  if (event.touches.length > 1) {
    +    cancelTouch();
    +  } else {
    +    touchDX = event.touches[0].pageX - touchStartX;
    +    touchDY = event.touches[0].pageY - touchStartY;
    +  }
    +};
    +
    +function handleTouchEnd(event) {
    +  var dx = Math.abs(touchDX);
    +  var dy = Math.abs(touchDY);
    +
    +  if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
    +    if (touchDX > 0) {
    +      prevSlide();
    +    } else {
    +      nextSlide();
    +    }
    +  }
    +  
    +  cancelTouch();
    +};
    +
    +function cancelTouch() {
    +  document.body.removeEventListener('touchmove', handleTouchMove, true);
    +  document.body.removeEventListener('touchend', handleTouchEnd, true);  
    +};
    +
    +/* Preloading frames */
    +
    +function disableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    disableFrame(frame);
    +  }
    +};
    +
    +function enableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    enableFrame(frame);
    +  }
    +};
    +
    +function disableFrame(frame) {
    +  frame.src = 'about:blank';
    +};
    +
    +function enableFrame(frame) {
    +  var src = frame._src;
    +
    +  if (frame.src != src && src != 'about:blank') {
    +    frame.src = src;
    +  }
    +};
    +
    +function setupFrames() {
    +  var frames = document.querySelectorAll('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    frame._src = frame.src;
    +    disableFrame(frame);
    +  }
    +  
    +  enableSlideFrames(curSlide);
    +  enableSlideFrames(curSlide + 1);
    +  enableSlideFrames(curSlide + 2);  
    +};
    +
    +function setupInteraction() {
    +  /* Clicking and tapping */
    +  
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'prev-slide-area';  
    +  el.addEventListener('click', prevSlide, false);
    +  document.querySelector('section.slides').appendChild(el);
    +
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'next-slide-area';  
    +  el.addEventListener('click', nextSlide, false);
    +  document.querySelector('section.slides').appendChild(el);  
    +  
    +  /* Swiping */
    +  
    +  document.body.addEventListener('touchstart', handleTouchStart, false);
    +}
    +
    +/* ChromeVox support */
    +
    +function isChromeVoxActive() {
    +  if (typeof(cvox) == 'undefined') {
    +    return false;
    +  } else {
    +    return true;
    +  }
    +};
    +
    +function speakAndSyncToNode(node) {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);  
    +  cvox.ChromeVox.navigationManager.syncToNode(node);
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +  var target = node;
    +  while (target.firstChild) {
    +    target = target.firstChild;
    +  }
    +  cvox.ChromeVox.navigationManager.syncToNode(target);
    +};
    +
    +function speakNextItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.next(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.firstChild) {
    +      target = target.firstChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.next(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +function speakPrevItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.previous(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.lastChild){
    +      target = target.lastChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.previous(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +/* Hash functions */
    +
    +function getCurSlideFromHash() {
    +  var slideNo = parseInt(location.hash.substr(1));
    +
    +  if (slideNo) {
    +    curSlide = slideNo - 1;
    +  } else {
    +    curSlide = 0;
    +  }
    +};
    +
    +function updateHash() {
    +  location.replace('#' + (curSlide + 1));
    +};
    +
    +/* Event listeners */
    +
    +function handleBodyKeyDown(event) {
    +  switch (event.keyCode) {
    +    case 39: // right arrow
    +    case 13: // Enter
    +    case 32: // space
    +    case 34: // PgDn
    +      nextSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 37: // left arrow
    +    case 8: // Backspace
    +    case 33: // PgUp
    +      prevSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 40: // down arrow
    +      if (isChromeVoxActive()) {
    +        speakNextItem();
    +      } else {
    +        nextSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +
    +    case 38: // up arrow
    +      if (isChromeVoxActive()) {
    +        speakPrevItem();
    +      } else {
    +        prevSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +  }
    +};
    +
    +function addEventListeners() {
    +  document.addEventListener('keydown', handleBodyKeyDown, false);  
    +};
    +
    +/* Initialization */
    +
    +function addPrettify() {
    +  var els = document.querySelectorAll('pre');
    +  for (var i = 0, el; el = els[i]; i++) {
    +    if (!el.classList.contains('noprettyprint')) {
    +      el.classList.add('prettyprint');
    +    }
    +  }
    +  
    +  var el = document.createElement('script');
    +  el.type = 'text/javascript';
    +  el.src = PERMANENT_URL_PREFIX + 'prettify.js';
    +  el.onload = function() {
    +    prettyPrint();
    +  }
    +  document.body.appendChild(el);
    +};
    +
    +function addFontStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = 'http://fonts.googleapis.com/css?family=' +
    +            'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
    +
    +  document.body.appendChild(el);
    +};
    +
    +function addGeneralStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = PERMANENT_URL_PREFIX + 'styles.css';
    +  document.body.appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'viewport';
    +  el.content = 'width=1100,height=750';
    +  document.querySelector('head').appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'apple-mobile-web-app-capable';
    +  el.content = 'yes';
    +  document.querySelector('head').appendChild(el);
    +};
    +
    +function makeBuildLists() {
    +  for (var i = curSlide, slide; slide = slideEls[i]; i++) {
    +    var items = slide.querySelectorAll('.build > *');
    +    for (var j = 0, item; item = items[j]; j++) {
    +      if (item.classList) {
    +        item.classList.add('to-build');
    +      }
    +    }
    +  }
    +};
    +
    +function handleDomLoaded() {
    +  slideEls = document.querySelectorAll('section.slides > article');
    +
    +  setupFrames();
    +
    +  addFontStyle();
    +  addGeneralStyle();
    +  addPrettify();
    +  addEventListeners();
    +
    +  updateSlides();
    +
    +  setupInteraction();
    +  makeBuildLists();
    +
    +  document.body.classList.add('loaded');
    +};
    +
    +function initialize() {
    +  getCurSlideFromHash();
    +
    +  if (window['_DEBUG']) {
    +    PERMANENT_URL_PREFIX = '../';
    +  }
    +
    +  if (window['_DCL']) {
    +    handleDomLoaded();
    +  } else {
    +    document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
    +  }
    +}
    +
    +// If ?debug exists then load the script relative instead of absolute
    +if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
    +  document.addEventListener('DOMContentLoaded', function() {
    +    // Avoid missing the DomContentLoaded event
    +    window['_DCL'] = true
    +  }, false);
    +
    +  window['_DEBUG'] = true;
    +  var script = document.createElement('script');
    +  script.type = 'text/javascript';
    +  script.src = '../slides.js';
    +  var s = document.getElementsByTagName('script')[0];
    +  s.parentNode.insertBefore(script, s);
    +
    +  // Remove this script
    +  s.parentNode.removeChild(s);
    +} else {
    +  initialize();
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/.svn/text-base/styles.css.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/.svn/text-base/styles.css.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,612 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +           
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +/* Framework */
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  display: block !important;
    +
    +  height: 100%;
    +  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
    +
    +  -webkit-font-smoothing: antialiased;
    +}
    +
    +.slides {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slides > article {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +.slides.layout-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +}
    +.slides.layout-faux-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +  
    +  padding: 40px 160px;
    +}
    +
    +.slides.template-default > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/google-logo-small.png) 710px 625px no-repeat;  
    +  
    +  background-color: white;  
    +} 
    +
    +.slides.template-io2011 > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/colorbar.png) 0 600px repeat-x,
    +              url(images/googleio-logo.png) 640px 625px no-repeat;
    +
    +  background-size: 100%, 225px;  
    +
    +  background-color: white;  
    +}
    +.slides.layout-widescreen > article:not(.nobackground):not(.biglogo),
    +.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) {
    +  background-position-x: 0, 840px;
    +}
    +
    +/* Clickable/tappable areas */
    +
    +.slide-area {
    +  z-index: 1000;
    +
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 150px;
    +  height: 700px;  
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  cursor: pointer;  
    +  margin-top: -350px;  
    +  
    +  tap-highlight-color: transparent;
    +  -o-tap-highlight-color: transparent;
    +  -moz-tap-highlight-color: transparent;
    +  -webkit-tap-highlight-color: transparent;
    +}
    +#prev-slide-area {
    +  margin-left: -550px;
    +}
    +#next-slide-area {
    +  margin-left: 400px;
    +}
    +.slides.layout-widescreen #prev-slide-area,
    +.slides.layout-faux-widescreen #prev-slide-area {
    +  margin-left: -650px;
    +}
    +.slides.layout-widescreen #next-slide-area,
    +.slides.layout-faux-widescreen #next-slide-area {
    +  margin-left: 500px;
    +}
    +
    +/* Slide styles */
    +
    +.slides.template-default article.biglogo {
    +  background: white url(images/google-logo.png) 50% 50% no-repeat;
    +}
    +
    +.slides.template-io2011 article.biglogo {
    +  background: white url(images/googleio-logo.png) 50% 50% no-repeat;
    +
    +  background-size: 600px;
    +}
    +
    +/* Slides */
    +
    +.slides > article {
    +  display: none;
    +}
    +.slides > article.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slides > article.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +.slides > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides > article.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +.slides > article.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +.slides.layout-widescreen > article.far-past,
    +.slides.layout-faux-widescreen > article.far-past {
    +  display: block;
    +  transform: translate(-2260px);
    +  -o-transform: translate(-2260px);
    +  -moz-transform: translate(-2260px);
    +  -webkit-transform: translate3d(-2260px, 0, 0);
    +}
    +.slides.layout-widescreen > article.past,
    +.slides.layout-faux-widescreen > article.past {
    +  display: block;
    +  transform: translate(-1130px);
    +  -o-transform: translate(-1130px);
    +  -moz-transform: translate(-1130px);
    +  -webkit-transform: translate3d(-1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.current,
    +.slides.layout-faux-widescreen > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides.layout-widescreen > article.next,
    +.slides.layout-faux-widescreen > article.next {
    +  display: block;
    +  transform: translate(1130px);
    +  -o-transform: translate(1130px);
    +  -moz-transform: translate(1130px);
    +  -webkit-transform: translate3d(1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.far-next,
    +.slides.layout-faux-widescreen > article.far-next {
    +  display: block;
    +  transform: translate(2260px);
    +  -o-transform: translate(2260px);
    +  -moz-transform: translate(2260px);
    +  -webkit-transform: translate3d(2260px, 0, 0);
    +}
    +
    +/* Styles for slides */
    +
    +.slides > article {
    +  font-family: 'Open Sans', Arial, sans-serif;
    +
    +  color: rgb(102, 102, 102);
    +  text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  letter-spacing: -1px;
    +}
    +
    +b {
    +  font-weight: 600;
    +}
    +
    +.blue {
    +  color: rgb(0, 102, 204);
    +}
    +.yellow {
    +  color: rgb(255, 211, 25);
    +}
    +.green {
    +  color: rgb(0, 138, 53);
    +}
    +.red {
    +  color: rgb(255, 0, 0);
    +}
    +.black {
    +  color: black;
    +}
    +.white {
    +  color: white;
    +}
    +
    +a {
    +  color: rgb(0, 102, 204);
    +}
    +a:visited {
    +  color: rgba(0, 102, 204, .75);
    +}
    +a:hover {
    +  color: black;
    +}
    +
    +p {
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 20px;
    +}
    +p:first-child {
    +  margin-top: 0;
    +}
    +
    +h1 {
    +  font-size: 60px;
    +  line-height: 60px;
    +
    +  padding: 0;
    +  margin: 0;
    +  margin-top: 200px;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -3px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h2 {
    +  font-size: 45px;
    +  line-height: 45px;
    +
    +  position: absolute;
    +  bottom: 150px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -2px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h3 {
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -1px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +article.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +ul {
    +  list-style: none;
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 40px;
    +
    +  margin-left: .75em;
    +}
    +ul:first-child {
    +  margin-top: 0;
    +}
    +ul ul {
    +  margin-top: .5em;
    +}
    +li {
    +  padding: 0;
    +  margin: 0;
    +
    +  margin-bottom: .5em;
    +}
    +li::before {
    +  content: '·';
    +
    +  width: .75em;
    +  margin-left: -.75em;
    +
    +  position: absolute;
    +}
    +
    +pre {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  font-size: 20px;
    +  line-height: 28px;
    +  padding: 5px 10px;
    +  
    +  letter-spacing: -1px;
    +
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  
    +  overflow: hidden;
    +}
    +
    +code {
    +  font-size: 95%;
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  color: black;
    +}
    +
    +iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +}
    +
    +h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +article.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +article.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +  margin-top: 40px;
    +}
    +th {
    +  font-weight: 600;
    +  text-align: left;
    +}
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;  
    +  line-height: 18px;
    +}
    +
    +q {
    +  display: block;
    +  font-size: 60px;
    +  line-height: 72px;
    +  
    +  margin-left: 20px;
    +  
    +  margin-top: 100px;
    +  margin-right: 150px;    
    +}
    +q::before {
    +  content: '“';
    +  
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -2.1em;
    +  width: 2em;
    +  text-align: right;
    +  
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);
    +}
    +q::after {
    +  content: '”';
    +
    +  position: absolute;  
    +  margin-left: .1em;
    +
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);  
    +}
    +div.author {
    +  text-align: right;  
    +  font-size: 40px;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;    
    +}
    +div.author::before {
    +  content: '—';
    +}
    +
    +/* Size variants */
    +
    +article.smaller p,
    +article.smaller ul {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller table {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller pre {
    +  font-size: 15px;
    +  line-height: 20px;
    +  letter-spacing: 0;
    +}
    +article.smaller q {
    +  font-size: 40px;
    +  line-height: 48px;
    +}
    +article.smaller q::before,
    +article.smaller q::after {
    +  font-size: 60px;
    +}
    +
    +/* Builds */
    +
    +.build > * {
    +  transition: opacity 0.5s ease-in-out 0.2s;
    +  -o-transition: opacity 0.5s ease-in-out 0.2s;
    +  -moz-transition: opacity 0.5s ease-in-out 0.2s;
    +  -webkit-transition: opacity 0.5s ease-in-out 0.2s;
    +}
    +
    +.to-build {
    +  opacity: 0;
    +}
    +
    +/* Pretty print */
    +
    +.prettyprint .str, /* string content */
    +.prettyprint .atv { /* a markup attribute value */
    +  color: rgb(0, 138, 53); 
    +}  
    +.prettyprint .kwd, /* a keyword */
    +.prettyprint .tag { /* a markup tag name */
    +  color: rgb(0, 102, 204);
    +}
    +.prettyprint .com { /* a comment */
    +  color: rgb(127, 127, 127); 
    +  font-style: italic; 
    +}  
    +.prettyprint .lit { /* a literal value */
    +  color: rgb(127, 0, 0);
    +}  
    +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */
    +.prettyprint .opn, 
    +.prettyprint .clo { 
    +  color: rgb(127, 127, 127); 
    +}
    +.prettyprint .typ, /* a type name */
    +.prettyprint .atn, /* a markup attribute name */ 
    +.prettyprint .dec, 
    +.prettyprint .var { /* a declaration; a variable name */
    +  color: rgb(127, 0, 127);
    +}  
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.DS_Store
    Binary file trunk/images/.DS_Store has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/all-wcprops
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/all-wcprops	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,29 @@
    +K 25
    +svn:wc:ra_dav:version-url
    +V 29
    +/svn/!svn/ver/12/trunk/images
    +END
    +google-logo-small.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 51
    +/svn/!svn/ver/12/trunk/images/google-logo-small.png
    +END
    +googleio-logo.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 46
    +/svn/!svn/ver/3/trunk/images/googleio-logo.png
    +END
    +colorbar.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 41
    +/svn/!svn/ver/3/trunk/images/colorbar.png
    +END
    +google-logo.png
    +K 25
    +svn:wc:ra_dav:version-url
    +V 44
    +/svn/!svn/ver/9/trunk/images/google-logo.png
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/entries
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/entries	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,164 @@
    +10
    +
    +dir
    +20
    +http://html5slides.googlecode.com/svn/trunk/images
    +http://html5slides.googlecode.com/svn
    +
    +
    +
    +2011-05-20T17:19:33.425808Z
    +12
    +mwichary@google.com
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +5963eb91-a1a4-c111-6e9c-cdd99a89fa83
    +
    +google-logo-small.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +135f45372a8c114bf3e2aeb599e4f936
    +2011-05-20T17:19:33.425808Z
    +12
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +8466
    +
    +googleio-logo.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +1f7e00dc3ff015f831ce3eb5dbd23550
    +2011-05-20T16:49:11.026922Z
    +3
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +84742
    +
    +colorbar.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +4a80fb8dc88969ddb33e1b69d2d0127a
    +2011-05-20T16:49:11.026922Z
    +3
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +213
    +
    +google-logo.png
    +file
    +
    +
    +
    +
    +2012-05-09T05:39:46.000000Z
    +e8734f1b87d204e4d325f5fc73fab31e
    +2011-05-20T17:14:27.670900Z
    +9
    +mwichary@google.com
    +has-props
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +31769
    +
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/prop-base/colorbar.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/prop-base/colorbar.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,9 @@
    +K 14
    +svn:executable
    +V 1
    +*
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/prop-base/google-logo-small.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/prop-base/google-logo-small.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,5 @@
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/prop-base/google-logo.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/prop-base/google-logo.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,5 @@
    +K 13
    +svn:mime-type
    +V 9
    +image/png
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/prop-base/googleio-logo.png.svn-base
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/images/.svn/prop-base/googleio-logo.png.svn-base	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,9 @@
    +K 14
    +svn:executable
    +V 1
    +*
    +K 13
    +svn:mime-type
    +V 24
    +application/octet-stream
    +END
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/text-base/colorbar.png.svn-base
    Binary file trunk/images/.svn/text-base/colorbar.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/text-base/google-logo-small.png.svn-base
    Binary file trunk/images/.svn/text-base/google-logo-small.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/text-base/google-logo.png.svn-base
    Binary file trunk/images/.svn/text-base/google-logo.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/.svn/text-base/googleio-logo.png.svn-base
    Binary file trunk/images/.svn/text-base/googleio-logo.png.svn-base has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/access.asta
    Binary file trunk/images/access.asta has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/access.asta.bak
    Binary file trunk/images/access.asta.bak has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/colorbar.png
    Binary file trunk/images/colorbar.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/google-logo-small.png
    Binary file trunk/images/google-logo-small.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/google-logo.png
    Binary file trunk/images/google-logo.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/images/googleio-logo.png
    Binary file trunk/images/googleio-logo.png has changed
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/prettify.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/prettify.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,1391 @@
    +// Copyright (C) 2006 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +/**
    + * @fileoverview
    + * some functions for browser-side pretty printing of code contained in html.
    + *
    + * <p>
    + * For a fairly comprehensive set of languages see the
    + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    + * file that came with this source.  At a minimum, the lexer should work on a
    + * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    + * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    + * and a subset of Perl, but, because of commenting conventions, doesn't work on
    + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    + * <p>
    + * Usage: <ol>
    + * <li> include this source file in an html page via
    + *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    + * <li> define style rules.  See the example page for examples.
    + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending dynamic event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var COFFEE_KEYWORDS = "all and by catch class else extends false finally " +
    +      "for if in is isnt loop new no not null of off on or return super then " +
    +      "true try unless until when while yes ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union of the sets of strings matched by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +  
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +  
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +  
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +  
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +  
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +  
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +  
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +  
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +  
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +  
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +  
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +  
    +      // Expand letters to groups to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +  
    +      return parts.join('');
    +    }
    +  
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +  
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +
    +  /**
    +   * Split markup into a string of source code and an array mapping ranges in
    +   * that string to the text nodes in which they appear.
    +   *
    +   * <p>
    +   * The HTML DOM structure:</p>
    +   * <pre>
    +   * (Element   "p"
    +   *   (Element "b"
    +   *     (Text  "print "))       ; #1
    +   *   (Text    "'Hello '")      ; #2
    +   *   (Element "br")            ; #3
    +   *   (Text    "  + 'World';")) ; #4
    +   * </pre>
    +   * <p>
    +   * corresponds to the HTML
    +   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
    +   *
    +   * <p>
    +   * It will produce the output:</p>
    +   * <pre>
    +   * {
    +   *   source: "print 'Hello '\n  + 'World';",
    +   *   //                 1         2
    +   *   //       012345678901234 5678901234567
    +   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
    +   * }
    +   * </pre>
    +   * <p>
    +   * where #1 is a reference to the {@code "print "} text node above, and so
    +   * on for the other text nodes.
    +   * </p>
    +   *
    +   * <p>
    +   * The {@code} spans array is an array of pairs.  Even elements are the start
    +   * indices of substrings, and odd elements are the text nodes (or BR elements)
    +   * that contain the text for those substrings.
    +   * Substrings continue until the next index or the end of the source.
    +   * </p>
    +   *
    +   * @param {Node} node an HTML DOM subtree containing source-code.
    +   * @return {Object} source code and the text nodes in which they occur.
    +   */
    +  function extractSourceSpans(node) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +  
    +    var chunks = [];
    +    var length = 0;
    +    var spans = [];
    +    var k = 0;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { return; }
    +          for (var child = node.firstChild; child; child = child.nextSibling) {
    +            walk(child);
    +          }
    +          var nodeName = node.nodeName;
    +          if ('BR' === nodeName || 'LI' === nodeName) {
    +            chunks[k] = '\n';
    +            spans[k << 1] = length++;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          var text = node.nodeValue;
    +          if (text.length) {
    +            if (!isPreformatted) {
    +              text = text.replace(/[ \t\r\n]+/g, ' ');
    +            } else {
    +              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
    +            }
    +            // TODO: handle tabs here?
    +            chunks[k] = text;
    +            spans[k << 1] = length;
    +            length += text.length;
    +            spans[(k++ << 1) | 1] = node;
    +          }
    +          break;
    +      }
    +    }
    +  
    +    walk(node);
    +  
    +    return {
    +      source: chunks.join('').replace(/\n$/, ''),
    +      spans: spans
    +    };
    +  }
    +
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    var hc = options['hashComments'];
    +    if (hc) {
    +      if (options['cStyleComments']) {
    +        if (hc > 1) {  // multiline hash comments
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
    +        } else {
    +          // Stop C preprocessor declarations at an unclosed open comment
    +          shortcutStylePatterns.push(
    +              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +               null, '#']);
    +        }
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
    +        [PR_PLAIN,       /^\\[\s\S]?/, null],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /**
    +   * Given a DOM subtree, wraps it in a list, and puts each line into its own
    +   * list item.
    +   *
    +   * @param {Node} node modified in place.  Its content is pulled into an
    +   *     HTMLOListElement, and each line is moved into a separate list item.
    +   *     This requires cloning elements, so the input might not have unique
    +   *     IDs after numbering.
    +   */
    +  function numberLines(node, opt_startLineNum) {
    +    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    +    var lineBreak = /\r\n?|\n/;
    +  
    +    var document = node.ownerDocument;
    +  
    +    var whitespace;
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      whitespace = document.defaultView.getComputedStyle(node, null)
    +          .getPropertyValue('white-space');
    +    }
    +    // If it's preformatted, then we need to split lines on line breaks
    +    // in addition to <BR>s.
    +    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
    +  
    +    var li = document.createElement('LI');
    +    while (node.firstChild) {
    +      li.appendChild(node.firstChild);
    +    }
    +    // An array of lines.  We split below, so this is initialized to one
    +    // un-split line.
    +    var listItems = [li];
    +  
    +    function walk(node) {
    +      switch (node.nodeType) {
    +        case 1:  // Element
    +          if (nocode.test(node.className)) { break; }
    +          if ('BR' === node.nodeName) {
    +            breakAfter(node);
    +            // Discard the <BR> since it is now flush against a </LI>.
    +            if (node.parentNode) {
    +              node.parentNode.removeChild(node);
    +            }
    +          } else {
    +            for (var child = node.firstChild; child; child = child.nextSibling) {
    +              walk(child);
    +            }
    +          }
    +          break;
    +        case 3: case 4:  // Text
    +          if (isPreformatted) {
    +            var text = node.nodeValue;
    +            var match = text.match(lineBreak);
    +            if (match) {
    +              var firstLine = text.substring(0, match.index);
    +              node.nodeValue = firstLine;
    +              var tail = text.substring(match.index + match[0].length);
    +              if (tail) {
    +                var parent = node.parentNode;
    +                parent.insertBefore(
    +                    document.createTextNode(tail), node.nextSibling);
    +              }
    +              breakAfter(node);
    +              if (!firstLine) {
    +                // Don't leave blank text nodes in the DOM.
    +                node.parentNode.removeChild(node);
    +              }
    +            }
    +          }
    +          break;
    +      }
    +    }
    +  
    +    // Split a line after the given node.
    +    function breakAfter(lineEndNode) {
    +      // If there's nothing to the right, then we can skip ending the line
    +      // here, and move root-wards since splitting just before an end-tag
    +      // would require us to create a bunch of empty copies.
    +      while (!lineEndNode.nextSibling) {
    +        lineEndNode = lineEndNode.parentNode;
    +        if (!lineEndNode) { return; }
    +      }
    +  
    +      function breakLeftOf(limit, copy) {
    +        // Clone shallowly if this node needs to be on both sides of the break.
    +        var rightSide = copy ? limit.cloneNode(false) : limit;
    +        var parent = limit.parentNode;
    +        if (parent) {
    +          // We clone the parent chain.
    +          // This helps us resurrect important styling elements that cross lines.
    +          // E.g. in <i>Foo<br>Bar</i>
    +          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
    +          var parentClone = breakLeftOf(parent, 1);
    +          // Move the clone and everything to the right of the original
    +          // onto the cloned parent.
    +          var next = limit.nextSibling;
    +          parentClone.appendChild(rightSide);
    +          for (var sibling = next; sibling; sibling = next) {
    +            next = sibling.nextSibling;
    +            parentClone.appendChild(sibling);
    +          }
    +        }
    +        return rightSide;
    +      }
    +  
    +      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
    +  
    +      // Walk the parent chain until we reach an unattached LI.
    +      for (var parent;
    +           // Check nodeType since IE invents document fragments.
    +           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
    +        copiedListItem = parent;
    +      }
    +      // Put it on the list of lines for later processing.
    +      listItems.push(copiedListItem);
    +    }
    +  
    +    // Split lines while there are lines left to split.
    +    for (var i = 0;  // Number of lines that have been split so far.
    +         i < listItems.length;  // length updated by breakAfter calls.
    +         ++i) {
    +      walk(listItems[i]);
    +    }
    +  
    +    // Make sure numeric indices show correctly.
    +    if (opt_startLineNum === (opt_startLineNum|0)) {
    +      listItems[0].setAttribute('value', opt_startLineNum);
    +    }
    +  
    +    var ol = document.createElement('OL');
    +    ol.className = 'linenums';
    +    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
    +    for (var i = 0, n = listItems.length; i < n; ++i) {
    +      li = listItems[i];
    +      // Stick a class on the LIs so that stylesheets can
    +      // color odd/even rows, or any other row pattern that
    +      // is co-prime with 10.
    +      li.className = 'L' + ((i + offset) % 10);
    +      if (!li.firstChild) {
    +        li.appendChild(document.createTextNode('\xA0'));
    +      }
    +      ol.appendChild(li);
    +    }
    +  
    +    node.appendChild(ol);
    +  }
    +
    +  /**
    +   * Breaks {@code job.source} around style boundaries in {@code job.decorations}
    +   * and modifies {@code job.sourceNode} in place.
    +   * @param {Object} job like <pre>{
    +   *    source: {string} source as plain text,
    +   *    spans: {Array.<number|Node>} alternating span start indices into source
    +   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
    +   *       span.
    +   *    decorations: {Array.<number|string} an array of style classes preceded
    +   *       by the position at which they start in job.source in order
    +   * }</pre>
    +   * @private
    +   */
    +  function recombineTagsAndDecorations(job) {
    +    var isIE = /\bMSIE\b/.test(navigator.userAgent);
    +    var newlineRe = /\n/g;
    +  
    +    var source = job.source;
    +    var sourceLength = source.length;
    +    // Index into source after the last code-unit recombined.
    +    var sourceIndex = 0;
    +  
    +    var spans = job.spans;
    +    var nSpans = spans.length;
    +    // Index into spans after the last span which ends at or before sourceIndex.
    +    var spanIndex = 0;
    +  
    +    var decorations = job.decorations;
    +    var nDecorations = decorations.length;
    +    // Index into decorations after the last decoration which ends at or before sourceIndex.
    +    var decorationIndex = 0;
    +  
    +    // Simplify decorations.
    +    var decPos = 0;
    +    for (var i = 0; i < nDecorations;) {
    +      // Skip over any zero-length decorations.
    +      var startPos = decorations[i];
    +      var start = i;
    +      while (start + 2 < nDecorations && decorations[start + 2] === startPos) {
    +        start += 2;
    +      }
    +      // Conflate all adjacent decorations that use the same style.
    +      var startDec = decorations[start + 1];
    +      var end = start + 2;
    +      while (end + 2 <= nDecorations
    +             && (decorations[end + 1] === startDec
    +                 || decorations[end] === decorations[end + 2])) {
    +        end += 2;
    +      }
    +      decorations[decPos++] = startPos;
    +      decorations[decPos++] = startDec;
    +      i = end;
    +    }
    +  
    +    // Strip any zero-length decoration at the end.
    +    if (decPos && decorations[decPos - 2] === sourceLength) { decPos -= 2; }
    +    nDecorations = decorations.length = decPos;
    +  
    +    var decoration = null;
    +    while (spanIndex < nSpans) {
    +      var spanStart = spans[spanIndex];
    +      var spanEnd = spans[spanIndex + 2] || sourceLength;
    +  
    +      var decStart = decorations[decorationIndex];
    +      var decEnd = decorations[decorationIndex + 2] || sourceLength;
    +  
    +      var end = Math.min(spanEnd, decEnd);
    +  
    +      var textNode = spans[spanIndex + 1];
    +      if (textNode.nodeType !== 1) {  // Don't muck with <BR>s or <LI>s
    +        var styledText = source.substring(sourceIndex, end);
    +        // This may seem bizarre, and it is.  Emitting LF on IE causes the
    +        // code to display with spaces instead of line breaks.
    +        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
    +        // space to appear at the beginning of every line but the first.
    +        // Emitting an old Mac OS 9 line separator makes everything spiffy.
    +        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
    +        textNode.nodeValue = styledText;
    +        var document = textNode.ownerDocument;
    +        var span = document.createElement('SPAN');
    +        span.className = decorations[decorationIndex + 1];
    +        var parentNode = textNode.parentNode;
    +        parentNode.replaceChild(span, textNode);
    +        span.appendChild(textNode);
    +        if (sourceIndex < spanEnd) {  // Split off a text node.
    +          spans[spanIndex + 1] = textNode
    +              // TODO: Possibly optimize by using '' if there's no flicker.
    +              = document.createTextNode(source.substring(end, spanEnd));
    +          parentNode.insertBefore(textNode, span.nextSibling);
    +        }
    +      }
    +  
    +      sourceIndex = end;
    +  
    +      if (sourceIndex >= spanEnd) {
    +        spanIndex += 2;
    +      }
    +      if (sourceIndex >= decEnd) {
    +        decorationIndex += 2;
    +      }
    +    }
    +  }
    +
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': COFFEE_KEYWORDS,
    +          'hashComments': 3,  // ### style block comments
    +          'cStyleComments': true,
    +          'multilineStrings': true,
    +          'tripleQuotedStrings': true,
    +          'regexLiterals': true
    +        }), ['coffee']);
    +  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var opt_langExtension = job.langExtension;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndSpans = extractSourceSpans(job.sourceNode);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndSpans.source;
    +      job.source = source;
    +      job.spans = sourceAndSpans.spans;
    +      job.basePos = 0;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +
    +      // Integrate the decorations and tags back into the source code,
    +      // modifying the sourceNode in place.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  /**
    +   * @param sourceCodeHtml {string} The HTML to pretty print.
    +   * @param opt_langExtension {string} The language name to use.
    +   *     Typically, a filename extension like 'cpp' or 'java'.
    +   * @param opt_numberLines {number|boolean} True to number lines,
    +   *     or the 1-indexed number of the first line in sourceCodeHtml.
    +   */
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    +    var container = document.createElement('PRE');
    +    // This could cause images to load and onload listeners to fire.
    +    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
    +    // We assume that the inner HTML is from a trusted source.
    +    container.innerHTML = sourceCodeHtml;
    +    if (opt_numberLines) {
    +      numberLines(container, opt_numberLines);
    +    }
    +
    +    var job = {
    +      langExtension: opt_langExtension,
    +      numberLines: opt_numberLines,
    +      sourceNode: container
    +    };
    +    applyDecorator(job);
    +    return container.innerHTML;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        if (cs.className && cs.className.indexOf('prettyprint') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR.registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                p.className && p.className.indexOf('prettyprint') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // Look for a class like linenums or linenums:<n> where <n> is the
    +            // 1-indexed number of the first line.
    +            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
    +            lineNums = lineNums
    +                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
    +                  : false;
    +            if (lineNums) { numberLines(cs, lineNums); }
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              langExtension: langExtension,
    +              sourceNode: cs,
    +              numberLines: lineNums
    +            };
    +            applyDecorator(prettyPrintingJob);
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/slides.js
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/slides.js	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,634 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +var PERMANENT_URL_PREFIX = './trunk/';
    +
    +var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
    +
    +var PM_TOUCH_SENSITIVITY = 15;
    +
    +var curSlide;
    +
    +/* ---------------------------------------------------------------------- */
    +/* classList polyfill by Eli Grey 
    + * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
    +
    +if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
    +
    +(function (view) {
    +
    +var
    +    classListProp = "classList"
    +  , protoProp = "prototype"
    +  , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
    +  , objCtr = Object
    +    strTrim = String[protoProp].trim || function () {
    +    return this.replace(/^\s+|\s+$/g, "");
    +  }
    +  , arrIndexOf = Array[protoProp].indexOf || function (item) {
    +    for (var i = 0, len = this.length; i < len; i++) {
    +      if (i in this && this[i] === item) {
    +        return i;
    +      }
    +    }
    +    return -1;
    +  }
    +  // Vendors: please allow content code to instantiate DOMExceptions
    +  , DOMEx = function (type, message) {
    +    this.name = type;
    +    this.code = DOMException[type];
    +    this.message = message;
    +  }
    +  , checkTokenAndGetIndex = function (classList, token) {
    +    if (token === "") {
    +      throw new DOMEx(
    +          "SYNTAX_ERR"
    +        , "An invalid or illegal string was specified"
    +      );
    +    }
    +    if (/\s/.test(token)) {
    +      throw new DOMEx(
    +          "INVALID_CHARACTER_ERR"
    +        , "String contains an invalid character"
    +      );
    +    }
    +    return arrIndexOf.call(classList, token);
    +  }
    +  , ClassList = function (elem) {
    +    var
    +        trimmedClasses = strTrim.call(elem.className)
    +      , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
    +    ;
    +    for (var i = 0, len = classes.length; i < len; i++) {
    +      this.push(classes[i]);
    +    }
    +    this._updateClassName = function () {
    +      elem.className = this.toString();
    +    };
    +  }
    +  , classListProto = ClassList[protoProp] = []
    +  , classListGetter = function () {
    +    return new ClassList(this);
    +  }
    +;
    +// Most DOMException implementations don't allow calling DOMException's toString()
    +// on non-DOMExceptions. Error's toString() is sufficient here.
    +DOMEx[protoProp] = Error[protoProp];
    +classListProto.item = function (i) {
    +  return this[i] || null;
    +};
    +classListProto.contains = function (token) {
    +  token += "";
    +  return checkTokenAndGetIndex(this, token) !== -1;
    +};
    +classListProto.add = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.push(token);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.remove = function (token) {
    +  token += "";
    +  var index = checkTokenAndGetIndex(this, token);
    +  if (index !== -1) {
    +    this.splice(index, 1);
    +    this._updateClassName();
    +  }
    +};
    +classListProto.toggle = function (token) {
    +  token += "";
    +  if (checkTokenAndGetIndex(this, token) === -1) {
    +    this.add(token);
    +  } else {
    +    this.remove(token);
    +  }
    +};
    +classListProto.toString = function () {
    +  return this.join(" ");
    +};
    +
    +if (objCtr.defineProperty) {
    +  var classListPropDesc = {
    +      get: classListGetter
    +    , enumerable: true
    +    , configurable: true
    +  };
    +  try {
    +    objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +  } catch (ex) { // IE 8 doesn't support enumerable:true
    +    if (ex.number === -0x7FF5EC54) {
    +      classListPropDesc.enumerable = false;
    +      objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
    +    }
    +  }
    +} else if (objCtr[protoProp].__defineGetter__) {
    +  elemCtrProto.__defineGetter__(classListProp, classListGetter);
    +}
    +
    +}(self));
    +
    +}
    +/* ---------------------------------------------------------------------- */
    +
    +/* Slide movement */
    +
    +function getSlideEl(no) {
    +  if ((no < 0) || (no >= slideEls.length)) { 
    +    return null;
    +  } else {
    +    return slideEls[no];
    +  }
    +};
    +
    +function updateSlideClass(slideNo, className) {
    +  var el = getSlideEl(slideNo);
    +  
    +  if (!el) {
    +    return;
    +  }
    +  
    +  if (className) {
    +    el.classList.add(className);
    +  }
    +    
    +  for (var i in SLIDE_CLASSES) {
    +    if (className != SLIDE_CLASSES[i]) {
    +      el.classList.remove(SLIDE_CLASSES[i]);
    +    }
    +  }
    +};
    +
    +function updateSlides() {
    +  for (var i = 0; i < slideEls.length; i++) {
    +    switch (i) {
    +      case curSlide - 2:
    +        updateSlideClass(i, 'far-past');
    +        break;
    +      case curSlide - 1:
    +        updateSlideClass(i, 'past');
    +        break;
    +      case curSlide: 
    +        updateSlideClass(i, 'current');
    +        break;
    +      case curSlide + 1:
    +        updateSlideClass(i, 'next');      
    +        break;
    +      case curSlide + 2:
    +        updateSlideClass(i, 'far-next');      
    +        break;
    +      default:
    +        updateSlideClass(i);
    +        break;
    +    }
    +  }
    +
    +  triggerLeaveEvent(curSlide - 1);
    +  triggerEnterEvent(curSlide);
    +
    +  window.setTimeout(function() {
    +    // Hide after the slide
    +    disableSlideFrames(curSlide - 2);
    +  }, 301);
    +
    +  enableSlideFrames(curSlide - 1);
    +  enableSlideFrames(curSlide + 2);
    +  
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(slideEls[curSlide]);
    +  }  
    +
    +  updateHash();
    +};
    +
    +function buildNextItem() {
    +  var toBuild  = slideEls[curSlide].querySelectorAll('.to-build');
    +
    +  if (!toBuild.length) {
    +    return false;
    +  }
    +
    +  toBuild[0].classList.remove('to-build', '');
    +
    +  if (isChromeVoxActive()) {
    +    speakAndSyncToNode(toBuild[0]);
    +  }
    +
    +  return true;
    +};
    +
    +function prevSlide() {
    +  if (curSlide > 0) {
    +    curSlide--;
    +
    +    updateSlides();
    +  }
    +};
    +
    +function nextSlide() {
    +  if (buildNextItem()) {
    +    return;
    +  }
    +
    +  if (curSlide < slideEls.length - 1) {
    +    curSlide++;
    +
    +    updateSlides();
    +  }
    +};
    +
    +/* Slide events */
    +
    +function triggerEnterEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onEnter = el.getAttribute('onslideenter');
    +  if (onEnter) {
    +    new Function(onEnter).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideenter', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +
    +  el.dispatchEvent(evt);
    +};
    +
    +function triggerLeaveEvent(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var onLeave = el.getAttribute('onslideleave');
    +  if (onLeave) {
    +    new Function(onLeave).call(el);
    +  }
    +
    +  var evt = document.createEvent('Event');
    +  evt.initEvent('slideleave', true, true);
    +  evt.slideNumber = no + 1; // Make it readable
    +  
    +  el.dispatchEvent(evt);
    +};
    +
    +/* Touch events */
    +
    +function handleTouchStart(event) {
    +  if (event.touches.length == 1) {
    +    touchDX = 0;
    +    touchDY = 0;
    +
    +    touchStartX = event.touches[0].pageX;
    +    touchStartY = event.touches[0].pageY;
    +
    +    document.body.addEventListener('touchmove', handleTouchMove, true);
    +    document.body.addEventListener('touchend', handleTouchEnd, true);
    +  }
    +};
    +
    +function handleTouchMove(event) {
    +  if (event.touches.length > 1) {
    +    cancelTouch();
    +  } else {
    +    touchDX = event.touches[0].pageX - touchStartX;
    +    touchDY = event.touches[0].pageY - touchStartY;
    +  }
    +};
    +
    +function handleTouchEnd(event) {
    +  var dx = Math.abs(touchDX);
    +  var dy = Math.abs(touchDY);
    +
    +  if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
    +    if (touchDX > 0) {
    +      prevSlide();
    +    } else {
    +      nextSlide();
    +    }
    +  }
    +  
    +  cancelTouch();
    +};
    +
    +function cancelTouch() {
    +  document.body.removeEventListener('touchmove', handleTouchMove, true);
    +  document.body.removeEventListener('touchend', handleTouchEnd, true);  
    +};
    +
    +/* Preloading frames */
    +
    +function disableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    disableFrame(frame);
    +  }
    +};
    +
    +function enableSlideFrames(no) {
    +  var el = getSlideEl(no);
    +  if (!el) {
    +    return;
    +  }
    +
    +  var frames = el.getElementsByTagName('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    enableFrame(frame);
    +  }
    +};
    +
    +function disableFrame(frame) {
    +  frame.src = 'about:blank';
    +};
    +
    +function enableFrame(frame) {
    +  var src = frame._src;
    +
    +  if (frame.src != src && src != 'about:blank') {
    +    frame.src = src;
    +  }
    +};
    +
    +function setupFrames() {
    +  var frames = document.querySelectorAll('iframe');
    +  for (var i = 0, frame; frame = frames[i]; i++) {
    +    frame._src = frame.src;
    +    disableFrame(frame);
    +  }
    +  
    +  enableSlideFrames(curSlide);
    +  enableSlideFrames(curSlide + 1);
    +  enableSlideFrames(curSlide + 2);  
    +};
    +
    +function setupInteraction() {
    +  /* Clicking and tapping */
    +  
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'prev-slide-area';  
    +  el.addEventListener('click', prevSlide, false);
    +  document.querySelector('section.slides').appendChild(el);
    +
    +  var el = document.createElement('div');
    +  el.className = 'slide-area';
    +  el.id = 'next-slide-area';  
    +  el.addEventListener('click', nextSlide, false);
    +  document.querySelector('section.slides').appendChild(el);  
    +  
    +  /* Swiping */
    +  
    +  document.body.addEventListener('touchstart', handleTouchStart, false);
    +}
    +
    +/* ChromeVox support */
    +
    +function isChromeVoxActive() {
    +  if (typeof(cvox) == 'undefined') {
    +    return false;
    +  } else {
    +    return true;
    +  }
    +};
    +
    +function speakAndSyncToNode(node) {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);  
    +  cvox.ChromeVox.navigationManager.syncToNode(node);
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +  var target = node;
    +  while (target.firstChild) {
    +    target = target.firstChild;
    +  }
    +  cvox.ChromeVox.navigationManager.syncToNode(target);
    +};
    +
    +function speakNextItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.next(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.firstChild) {
    +      target = target.firstChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.next(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +function speakPrevItem() {
    +  if (!isChromeVoxActive()) {
    +    return;
    +  }
    +  
    +  cvox.ChromeVox.navigationManager.switchToStrategy(
    +      cvox.ChromeVoxNavigationManager.STRATEGIES.LINEARDOM, 0, true);
    +  cvox.ChromeVox.navigationManager.previous(true);
    +  if (!cvox.DomUtil.isDescendantOfNode(
    +      cvox.ChromeVox.navigationManager.getCurrentNode(), slideEls[curSlide])){
    +    var target = slideEls[curSlide];
    +    while (target.lastChild){
    +      target = target.lastChild;
    +    }
    +    cvox.ChromeVox.navigationManager.syncToNode(target);
    +    cvox.ChromeVox.navigationManager.previous(true);
    +  }
    +  cvox.ChromeVoxUserCommands.finishNavCommand('');
    +};
    +
    +/* Hash functions */
    +
    +function getCurSlideFromHash() {
    +  var slideNo = parseInt(location.hash.substr(1));
    +
    +  if (slideNo) {
    +    curSlide = slideNo - 1;
    +  } else {
    +    curSlide = 0;
    +  }
    +};
    +
    +function updateHash() {
    +  location.replace('#' + (curSlide + 1));
    +};
    +
    +/* Event listeners */
    +
    +function handleBodyKeyDown(event) {
    +  switch (event.keyCode) {
    +    case 39: // right arrow
    +    case 13: // Enter
    +    case 32: // space
    +    case 34: // PgDn
    +      nextSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 37: // left arrow
    +    case 8: // Backspace
    +    case 33: // PgUp
    +      prevSlide();
    +      event.preventDefault();
    +      break;
    +
    +    case 40: // down arrow
    +      if (isChromeVoxActive()) {
    +        speakNextItem();
    +      } else {
    +        nextSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +
    +    case 38: // up arrow
    +      if (isChromeVoxActive()) {
    +        speakPrevItem();
    +      } else {
    +        prevSlide();
    +      }
    +      event.preventDefault();
    +      break;
    +  }
    +};
    +
    +function addEventListeners() {
    +  document.addEventListener('keydown', handleBodyKeyDown, false);  
    +};
    +
    +/* Initialization */
    +
    +function addPrettify() {
    +  var els = document.querySelectorAll('pre');
    +  for (var i = 0, el; el = els[i]; i++) {
    +    if (!el.classList.contains('noprettyprint')) {
    +      el.classList.add('prettyprint');
    +    }
    +  }
    +  
    +  var el = document.createElement('script');
    +  el.type = 'text/javascript';
    +  el.src = PERMANENT_URL_PREFIX + 'prettify.js';
    +  el.onload = function() {
    +    prettyPrint();
    +  }
    +  document.body.appendChild(el);
    +};
    +
    +function addFontStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = 'http://fonts.googleapis.com/css?family=' +
    +            'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
    +
    +  document.body.appendChild(el);
    +};
    +
    +function addGeneralStyle() {
    +  var el = document.createElement('link');
    +  el.rel = 'stylesheet';
    +  el.type = 'text/css';
    +  el.href = PERMANENT_URL_PREFIX + 'styles.css';
    +  document.body.appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'viewport';
    +  el.content = 'width=1100,height=750';
    +  document.querySelector('head').appendChild(el);
    +  
    +  var el = document.createElement('meta');
    +  el.name = 'apple-mobile-web-app-capable';
    +  el.content = 'yes';
    +  document.querySelector('head').appendChild(el);
    +};
    +
    +function makeBuildLists() {
    +  for (var i = curSlide, slide; slide = slideEls[i]; i++) {
    +    var items = slide.querySelectorAll('.build > *');
    +    for (var j = 0, item; item = items[j]; j++) {
    +      if (item.classList) {
    +        item.classList.add('to-build');
    +      }
    +    }
    +  }
    +};
    +
    +function handleDomLoaded() {
    +  slideEls = document.querySelectorAll('section.slides > article');
    +
    +  setupFrames();
    +
    +  addFontStyle();
    +  addGeneralStyle();
    +  addPrettify();
    +  addEventListeners();
    +
    +  updateSlides();
    +
    +  setupInteraction();
    +  makeBuildLists();
    +
    +  document.body.classList.add('loaded');
    +};
    +
    +function initialize() {
    +  getCurSlideFromHash();
    +
    +  if (window['_DEBUG']) {
    +    PERMANENT_URL_PREFIX = '../';
    +  }
    +
    +  if (window['_DCL']) {
    +    handleDomLoaded();
    +  } else {
    +    document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
    +  }
    +}
    +
    +// If ?debug exists then load the script relative instead of absolute
    +if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
    +  document.addEventListener('DOMContentLoaded', function() {
    +    // Avoid missing the DomContentLoaded event
    +    window['_DCL'] = true
    +  }, false);
    +
    +  window['_DEBUG'] = true;
    +  var script = document.createElement('script');
    +  script.type = 'text/javascript';
    +  script.src = '../slides.js';
    +  var s = document.getElementsByTagName('script')[0];
    +  s.parentNode.insertBefore(script, s);
    +
    +  // Remove this script
    +  s.parentNode.removeChild(s);
    +} else {
    +  initialize();
    +}
    diff -r 000000000000 -r 845ff8ff4fc9 trunk/styles.css
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/trunk/styles.css	Tue Jan 14 01:31:42 2014 +0900
    @@ -0,0 +1,613 @@
    +/*
    +  Google HTML5 slides template
    +
    +  Authors: Luke Mahé (code)
    +           Marcin Wichary (code and design)
    +           
    +           Dominic Mazzoni (browser compatibility)
    +           Charles Chen (ChromeVox support)
    +
    +  URL: http://code.google.com/p/html5slides/
    +*/
    +
    +/* Framework */
    +
    +html {
    +  height: 100%;
    +}
    +
    +body {
    +  margin: 0;
    +  padding: 0;
    +
    +  display: block !important;
    +
    +  height: 100%;
    +//  min-height: 740px;
    +  
    +  overflow-x: hidden;
    +  overflow-y: auto;
    +
    +  background: rgb(215, 215, 215);
    +  background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
    +  background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
    +
    +  -webkit-font-smoothing: antialiased;
    +}
    +
    +.slides {
    +  width: 100%;
    +  height: 100%;
    +  left: 0;
    +  top: 0;
    +  
    +  position: absolute;
    +
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +
    +.slides > article {
    +  display: block;
    +
    +  position: absolute;
    +  overflow: hidden;
    +
    +  width: 900px;
    +  height: 700px;
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  margin-left: -450px;
    +  margin-top: -350px;
    +  
    +  padding: 40px 60px;
    +
    +  box-sizing: border-box;
    +  -o-box-sizing: border-box;
    +  -moz-box-sizing: border-box;
    +  -webkit-box-sizing: border-box;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  background-color: white;
    +
    +  box-shadow: 0 2px 6px rgba(0, 0, 0, .1);
    +  border: 1px solid rgba(0, 0, 0, .3);
    +
    +  transition: transform .3s ease-out;
    +  -o-transition: -o-transform .3s ease-out;
    +  -moz-transition: -moz-transform .3s ease-out;
    +  -webkit-transition: -webkit-transform .3s ease-out;
    +}
    +.slides.layout-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +}
    +.slides.layout-faux-widescreen > article {
    +  margin-left: -550px;
    +  width: 1100px;
    +  
    +  padding: 40px 160px;
    +}
    +
    +.slides.template-default > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/google-logo-small.png) 710px 625px no-repeat;  
    +  
    +  background-color: white;  
    +  font-family: 'Times New Roman'
    +} 
    +
    +.slides.template-io2011 > article:not(.nobackground):not(.biglogo) {
    +  background: url(images/colorbar.png) 0 600px repeat-x,
    +              url(images/googleio-logo.png) 640px 625px no-repeat;
    +
    +  background-size: 100%, 225px;  
    +
    +  background-color: white;  
    +}
    +.slides.layout-widescreen > article:not(.nobackground):not(.biglogo),
    +.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) {
    +  background-position-x: 0, 840px;
    +}
    +
    +/* Clickable/tappable areas */
    +
    +.slide-area {
    +  z-index: 1000;
    +
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 150px;
    +  height: 700px;  
    +
    +  left: 50%;
    +  top: 50%;
    +
    +  cursor: pointer;  
    +  margin-top: -350px;  
    +  
    +  tap-highlight-color: transparent;
    +  -o-tap-highlight-color: transparent;
    +  -moz-tap-highlight-color: transparent;
    +  -webkit-tap-highlight-color: transparent;
    +}
    +#prev-slide-area {
    +  margin-left: -550px;
    +}
    +#next-slide-area {
    +  margin-left: 400px;
    +}
    +.slides.layout-widescreen #prev-slide-area,
    +.slides.layout-faux-widescreen #prev-slide-area {
    +  margin-left: -650px;
    +}
    +.slides.layout-widescreen #next-slide-area,
    +.slides.layout-faux-widescreen #next-slide-area {
    +  margin-left: 500px;
    +}
    +
    +/* Slide styles */
    +
    +.slides.template-default article.biglogo {
    +  background: white url(images/google-logo.png) 50% 50% no-repeat;
    +}
    +
    +.slides.template-io2011 article.biglogo {
    +  background: white url(images/googleio-logo.png) 50% 50% no-repeat;
    +
    +  background-size: 600px;
    +}
    +
    +/* Slides */
    +
    +.slides > article {
    +  display: none;
    +}
    +.slides > article.far-past {
    +  display: block;
    +  transform: translate(-2040px);
    +  -o-transform: translate(-2040px);
    +  -moz-transform: translate(-2040px);
    +  -webkit-transform: translate3d(-2040px, 0, 0);
    +}
    +.slides > article.past {
    +  display: block;
    +  transform: translate(-1020px);
    +  -o-transform: translate(-1020px);
    +  -moz-transform: translate(-1020px);
    +  -webkit-transform: translate3d(-1020px, 0, 0);
    +}
    +.slides > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides > article.next {
    +  display: block;
    +  transform: translate(1020px);
    +  -o-transform: translate(1020px);
    +  -moz-transform: translate(1020px);
    +  -webkit-transform: translate3d(1020px, 0, 0);
    +}
    +.slides > article.far-next {
    +  display: block;
    +  transform: translate(2040px);
    +  -o-transform: translate(2040px);
    +  -moz-transform: translate(2040px);
    +  -webkit-transform: translate3d(2040px, 0, 0);
    +}
    +
    +.slides.layout-widescreen > article.far-past,
    +.slides.layout-faux-widescreen > article.far-past {
    +  display: block;
    +  transform: translate(-2260px);
    +  -o-transform: translate(-2260px);
    +  -moz-transform: translate(-2260px);
    +  -webkit-transform: translate3d(-2260px, 0, 0);
    +}
    +.slides.layout-widescreen > article.past,
    +.slides.layout-faux-widescreen > article.past {
    +  display: block;
    +  transform: translate(-1130px);
    +  -o-transform: translate(-1130px);
    +  -moz-transform: translate(-1130px);
    +  -webkit-transform: translate3d(-1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.current,
    +.slides.layout-faux-widescreen > article.current {
    +  display: block;
    +  transform: translate(0);
    +  -o-transform: translate(0);
    +  -moz-transform: translate(0);
    +  -webkit-transform: translate3d(0, 0, 0);
    +}
    +.slides.layout-widescreen > article.next,
    +.slides.layout-faux-widescreen > article.next {
    +  display: block;
    +  transform: translate(1130px);
    +  -o-transform: translate(1130px);
    +  -moz-transform: translate(1130px);
    +  -webkit-transform: translate3d(1130px, 0, 0);
    +}
    +.slides.layout-widescreen > article.far-next,
    +.slides.layout-faux-widescreen > article.far-next {
    +  display: block;
    +  transform: translate(2260px);
    +  -o-transform: translate(2260px);
    +  -moz-transform: translate(2260px);
    +  -webkit-transform: translate3d(2260px, 0, 0);
    +}
    +
    +/* Styles for slides */
    +
    +.slides > article {
    +  font-family: 'Open Sans', Arial, sans-serif;
    +
    +  color: rgb(102, 102, 102);
    +  text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
    +
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  letter-spacing: -1px;
    +}
    +
    +b {
    +  font-weight: 600;
    +}
    +
    +.blue {
    +  color: rgb(0, 102, 204);
    +}
    +.yellow {
    +  color: rgb(255, 211, 25);
    +}
    +.green {
    +  color: rgb(0, 138, 53);
    +}
    +.red {
    +  color: rgb(255, 0, 0);
    +}
    +.black {
    +  color: black;
    +}
    +.white {
    +  color: white;
    +}
    +
    +a {
    +  color: rgb(0, 102, 204);
    +}
    +a:visited {
    +  color: rgba(0, 102, 204, .75);
    +}
    +a:hover {
    +  color: black;
    +}
    +
    +p {
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 20px;
    +}
    +p:first-child {
    +  margin-top: 0;
    +}
    +
    +h1 {
    +  font-size: 60px;
    +  line-height: 60px;
    +
    +  padding: 0;
    +  margin: 0;
    +  margin-top: 200px;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -3px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h2 {
    +  font-size: 45px;
    +  line-height: 45px;
    +
    +  position: absolute;
    +  bottom: 150px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -2px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +h3 {
    +  font-size: 30px;
    +  line-height: 36px;
    +
    +  padding: 0;
    +  margin: 0;
    +  padding-right: 40px;
    +
    +  font-weight: 600;
    +
    +  letter-spacing: -1px;
    +
    +  color: rgb(51, 51, 51);
    +}
    +
    +article.fill h3 {
    +  background: rgba(255, 255, 255, .75);
    +  padding-top: .2em;
    +  padding-bottom: .3em;
    +  margin-top: -.2em;
    +  margin-left: -60px;
    +  padding-left: 60px;
    +  margin-right: -60px;
    +  padding-right: 60px;
    +}
    +
    +ul {
    +  list-style: none;
    +  margin: 0;
    +  padding: 0;
    +
    +  margin-top: 40px;
    +
    +  margin-left: .75em;
    +}
    +ul:first-child {
    +  margin-top: 0;
    +}
    +ul ul {
    +  margin-top: .5em;
    +}
    +li {
    +  padding: 0;
    +  margin: 0;
    +
    +  margin-bottom: .5em;
    +}
    +li::before {
    +  content: '·';
    +
    +  width: .75em;
    +  margin-left: -.75em;
    +
    +  position: absolute;
    +}
    +
    +pre {
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  font-size: 20px;
    +  line-height: 28px;
    +  padding: 5px 10px;
    +  
    +  letter-spacing: -1px;
    +
    +  margin-top: 40px;
    +  margin-bottom: 40px;
    +
    +  color: black;
    +  background: rgb(240, 240, 240);
    +  border: 1px solid rgb(224, 224, 224);
    +  box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);
    +  
    +  overflow: hidden;
    +}
    +
    +code {
    +  font-size: 95%;
    +  font-family: 'Droid Sans Mono', 'Courier New', monospace;
    +
    +  color: black;
    +}
    +
    +iframe {
    +  width: 100%;
    +
    +  height: 620px;
    +
    +  background: white;
    +  border: 1px solid rgb(192, 192, 192);
    +  margin: -1px;
    +  /*box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1);*/
    +}
    +
    +h3 + iframe {
    +  margin-top: 40px;
    +  height: 540px;
    +}
    +
    +article.fill iframe {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  width: 100%;
    +  height: 100%;
    +
    +  border: 0;
    +  margin: 0;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +
    +article.fill img {
    +  position: absolute;
    +  left: 0;
    +  top: 0;
    +  min-width: 100%;
    +  min-height: 100%;
    +
    +  border-radius: 10px;
    +  -o-border-radius: 10px;
    +  -moz-border-radius: 10px;
    +  -webkit-border-radius: 10px;
    +
    +  z-index: -1;
    +}
    +img.centered {
    +  margin: 0 auto;
    +  display: block;
    +}
    +
    +table {
    +  width: 100%;
    +  border-collapse: collapse;
    +  margin-top: 40px;
    +}
    +th {
    +  font-weight: 600;
    +  text-align: left;
    +}
    +td,
    +th {
    +  border: 1px solid rgb(224, 224, 224);
    +  padding: 5px 10px;
    +  vertical-align: top;
    +}
    +
    +.source {
    +  position: absolute;
    +  left: 60px;
    +  top: 644px;
    +  padding-right: 175px;
    +  
    +  font-size: 15px;
    +  letter-spacing: 0;  
    +  line-height: 18px;
    +}
    +
    +q {
    +  display: block;
    +  font-size: 60px;
    +  line-height: 72px;
    +  
    +  margin-left: 20px;
    +  
    +  margin-top: 100px;
    +  margin-right: 150px;    
    +}
    +q::before {
    +  content: '“';
    +  
    +  position: absolute;
    +  display: inline-block;
    +  margin-left: -2.1em;
    +  width: 2em;
    +  text-align: right;
    +  
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);
    +}
    +q::after {
    +  content: '”';
    +
    +  position: absolute;  
    +  margin-left: .1em;
    +
    +  font-size: 90px;
    +  color: rgb(192, 192, 192);  
    +}
    +div.author {
    +  text-align: right;  
    +  font-size: 40px;
    +  
    +  margin-top: 20px;
    +  margin-right: 150px;    
    +}
    +div.author::before {
    +  content: '—';
    +}
    +
    +/* Size variants */
    +
    +article.smaller p,
    +article.smaller ul {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller table {
    +  font-size: 20px;
    +  line-height: 24px;
    +  letter-spacing: 0;
    +}
    +article.smaller pre {
    +  font-size: 15px;
    +  line-height: 20px;
    +  letter-spacing: 0;
    +}
    +article.smaller q {
    +  font-size: 40px;
    +  line-height: 48px;
    +}
    +article.smaller q::before,
    +article.smaller q::after {
    +  font-size: 60px;
    +}
    +
    +/* Builds */
    +
    +.build > * {
    +  transition: opacity 0.5s ease-in-out 0.2s;
    +  -o-transition: opacity 0.5s ease-in-out 0.2s;
    +  -moz-transition: opacity 0.5s ease-in-out 0.2s;
    +  -webkit-transition: opacity 0.5s ease-in-out 0.2s;
    +}
    +
    +.to-build {
    +  opacity: 0;
    +}
    +
    +/* Pretty print */
    +
    +.prettyprint .str, /* string content */
    +.prettyprint .atv { /* a markup attribute value */
    +  color: rgb(0, 138, 53); 
    +}  
    +.prettyprint .kwd, /* a keyword */
    +.prettyprint .tag { /* a markup tag name */
    +  color: rgb(0, 102, 204);
    +}
    +.prettyprint .com { /* a comment */
    +  color: rgb(127, 127, 127); 
    +  font-style: italic; 
    +}  
    +.prettyprint .lit { /* a literal value */
    +  color: rgb(127, 0, 0);
    +}  
    +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */
    +.prettyprint .opn, 
    +.prettyprint .clo { 
    +  color: rgb(127, 127, 127); 
    +}
    +.prettyprint .typ, /* a type name */
    +.prettyprint .atn, /* a markup attribute name */ 
    +.prettyprint .dec, 
    +.prettyprint .var { /* a declaration; a variable name */
    +  color: rgb(127, 0, 127);
    +}